diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 4c2dcfc9..172629f0 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -427,6 +427,10 @@ "flowSourceTruthChain": "truth-chain / ADR-100", "flowSourceHeuristic": "incident status heuristic", "flowVerdictLabel": "Verdict", + "flowEvidenceMcp": "MCP {count}", + "flowEvidenceOps": "Ops {count}", + "flowEvidenceKm": "KM {count}", + "flowEvidenceRepair": "Repair {count}", "flowTruthChainCurrent": "{stage} / {status}", "flowComplete": "Complete", "flowStages": { diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index 48e2c463..547ca9e6 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -428,6 +428,10 @@ "flowSourceTruthChain": "truth-chain / ADR-100", "flowSourceHeuristic": "事件狀態推導", "flowVerdictLabel": "判定", + "flowEvidenceMcp": "MCP {count}", + "flowEvidenceOps": "操作 {count}", + "flowEvidenceKm": "KM {count}", + "flowEvidenceRepair": "修復 {count}", "flowTruthChainCurrent": "{stage} / {status}", "flowComplete": "已完成", "flowStages": { diff --git a/apps/web/src/components/incident/incident-card.tsx b/apps/web/src/components/incident/incident-card.tsx index 78bc1053..f9f9e26b 100644 --- a/apps/web/src/components/incident/incident-card.tsx +++ b/apps/web/src/components/incident/incident-card.tsx @@ -313,6 +313,28 @@ export function IncidentCard({ incident, decision, statusChain, onApprovalChange ? chainValue(statusChain?.next_step) : nextStage ? flowStageLabels[nextStage] : t('flowComplete') const flowSourceText = hasTruthChain ? t('flowSourceTruthChain') : t('flowSourceHeuristic') + const statusChainEvidenceItems = hasTruthChain ? [ + { + key: 'mcp', + label: t('flowEvidenceMcp', { count: statusChain?.evidence?.mcp_gateway_total ?? 0 }), + active: (statusChain?.evidence?.mcp_gateway_total ?? 0) > 0, + }, + { + key: 'ops', + label: t('flowEvidenceOps', { count: statusChain?.evidence?.operation_records ?? 0 }), + active: (statusChain?.evidence?.operation_records ?? 0) > 0, + }, + { + key: 'km', + label: t('flowEvidenceKm', { count: statusChain?.evidence?.knowledge_entries ?? 0 }), + active: (statusChain?.evidence?.knowledge_entries ?? 0) > 0, + }, + { + key: 'repair', + label: t('flowEvidenceRepair', { count: statusChain?.evidence?.auto_repair_records ?? 0 }), + active: (statusChain?.evidence?.auto_repair_records ?? 0) > 0, + }, + ] : [] const serviceName = incident.affected_services?.[0] ?? '--' const duration = formatDuration(incident.created_at) @@ -566,6 +588,24 @@ export function IncidentCard({ incident, decision, statusChain, onApprovalChange {t('flowVerdictLabel')}: {chainValue(statusChain?.verdict)} + / + + {statusChainEvidenceItems.map(item => ( + + {item.label} + + ))} + )}