feat(awooop): surface execution backend evidence
All checks were successful
CD Pipeline / tests (push) Successful in 5m49s
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / build-and-deploy (push) Successful in 4m5s
CD Pipeline / post-deploy-checks (push) Successful in 1m46s

This commit is contained in:
Your Name
2026-05-24 14:35:42 +08:00
parent 17b62da59a
commit dc09dac4d4
5 changed files with 212 additions and 3 deletions

View File

@@ -39,6 +39,18 @@ interface AutomationQualitySummary {
gate: string
total: number
}>
execution_backend_summary?: {
operation_records_total?: number
effective_execution_records_total?: number
audit_only_operation_records_total?: number
auto_repair_execution_records_total?: number
ansible_considered_total?: number
ansible_audit_record_total?: number
ansible_candidate_total?: number
ansible_check_mode_total?: number
ansible_apply_total?: number
ansible_pending_check_mode_total?: number
}
}
interface DossierCoverageResponse {
@@ -325,6 +337,7 @@ export function AutomationEvidenceCard() {
)
const topGate = quality?.gate_failures?.[0]
const executionBackend = quality?.execution_backend_summary ?? null
const qualityLoaded = Boolean(quality)
const claimReady = Boolean(quality?.production_claim?.can_claim_full_auto_repair)
const route = snapshot?.route ?? null
@@ -360,6 +373,7 @@ export function AutomationEvidenceCard() {
fallback,
routeDetail,
routeTone: routeTone(route),
executionBackend,
}
}, [snapshot, t])
@@ -484,6 +498,38 @@ export function AutomationEvidenceCard() {
/>
</div>
{derived.executionBackend && (
<div
data-testid="automation-execution-backend-evidence"
style={{
borderTop: '0.5px solid #e0ddd4',
background: '#fbfaf6',
padding: '8px 14px',
display: 'flex',
alignItems: 'center',
gap: 8,
fontSize: 11,
color: '#555550',
lineHeight: 1.45,
}}
>
<Activity className="h-3.5 w-3.5 shrink-0" aria-hidden="true" />
<span style={{ minWidth: 0 }}>
{t('executionBackendDetail', {
operations: derived.executionBackend.operation_records_total ?? 0,
effective: derived.executionBackend.effective_execution_records_total ?? 0,
auditOnly: derived.executionBackend.audit_only_operation_records_total ?? 0,
autoRepair: derived.executionBackend.auto_repair_execution_records_total ?? 0,
ansibleRecords: derived.executionBackend.ansible_audit_record_total ?? 0,
ansibleCandidates: derived.executionBackend.ansible_candidate_total ?? 0,
checkMode: derived.executionBackend.ansible_check_mode_total ?? 0,
apply: derived.executionBackend.ansible_apply_total ?? 0,
pending: derived.executionBackend.ansible_pending_check_mode_total ?? 0,
})}
</span>
</div>
)}
{derived.topGate && (
<div style={{
borderTop: '0.5px solid #e0ddd4',