{card.attribution.reasoning}
@@ -231,7 +232,12 @@ export function ApprovalCardView({
}
function inferenceConclusion(card: ApiCard, who: string): string {
- const chain = card.attribution.reasoning.split("Inference chain:")[1]?.trim();
+ const chain = hasInferenceChain(card)
+ ? card.attribution.reasoning.split("Inference chain:")[1]?.trim()
+ : undefined;
+ if (!chain && !card.attribution.resolvedTo) {
+ return `Unattributed · ${card.proposedAction.description}`;
+ }
const firstSignal = chain
?.split(" → ")[0]
?.replace(/^\([^)]+\)\s*/, "")
@@ -242,6 +248,10 @@ function inferenceConclusion(card: ApiCard, who: string): string {
} · ${firstSignal || "no matching inference"}`;
}
+function hasInferenceChain(card: ApiCard): boolean {
+ return card.attribution.reasoning.includes("Inference chain:");
+}
+
function topRiskReason(reasons: string[]): string {
return (
reasons.reduce