feat(awooop): expose ansible runtime readiness
Some checks failed
CD Pipeline / tests (push) Failing after 51s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Code Review / ai-code-review (push) Successful in 12s

This commit is contained in:
Your Name
2026-05-24 15:01:51 +08:00
parent 4874f2b649
commit 1322216f73
6 changed files with 79 additions and 2 deletions

View File

@@ -252,7 +252,9 @@
"autoRepair": "Auto repair",
"qualityDetail": "Average {score}, red {red}",
"qualityPending": "Quality summary is still calculating; other evidence is already shown",
"executionBackendDetail": "Execution evidence: operations {operations} (effective {effective} / audit {auditOnly}), auto-repair {autoRepair}; Ansible audit {ansibleRecords}, candidates {ansibleCandidates}, check-mode {checkMode}, apply {apply}, pending wiring {pending}",
"executionBackendDetail": "Execution evidence: operations {operations} (effective {effective} / audit {auditOnly}), auto-repair {autoRepair}; Ansible audit {ansibleRecords}, candidates {ansibleCandidates}, check-mode {checkMode}, apply {apply}, pending wiring {pending}; runtime {runtime}",
"ansibleRuntimeReady": "check-mode ready",
"ansibleRuntimeBlocked": "not ready: {blockers}",
"humanGap": "Human gap",
"humanGapDetail": "{gate} missing {count}",
"humanGapClear": "Quality summary has no top gap",

View File

@@ -253,7 +253,9 @@
"autoRepair": "自動修復",
"qualityDetail": "平均 {score},紅燈 {red}",
"qualityPending": "品質摘要計算中,其他證據已先顯示",
"executionBackendDetail": "執行證據:操作 {operations}(有效 {effective} / 稽核 {auditOnly}),自動修復 {autoRepair}Ansible 稽核 {ansibleRecords},候選 {ansibleCandidates}check-mode {checkMode}apply {apply},待接線 {pending}",
"executionBackendDetail": "執行證據:操作 {operations}(有效 {effective} / 稽核 {auditOnly}),自動修復 {autoRepair}Ansible 稽核 {ansibleRecords},候選 {ansibleCandidates}check-mode {checkMode}apply {apply},待接線 {pending}runtime {runtime}",
"ansibleRuntimeReady": "可跑 check-mode",
"ansibleRuntimeBlocked": "未就緒:{blockers}",
"humanGap": "人工缺口",
"humanGapDetail": "{gate} 缺 {count} 筆",
"humanGapClear": "品質摘要未列出主要缺口",

View File

@@ -51,6 +51,14 @@ interface AutomationQualitySummary {
ansible_apply_total?: number
ansible_pending_check_mode_total?: number
}
ansible_runtime?: {
ansible_playbook_binary_present?: boolean
playbook_root_present?: boolean
inventory_present?: boolean
playbook_count?: number
can_run_check_mode?: boolean
blockers?: string[]
}
}
interface DossierCoverageResponse {
@@ -338,6 +346,7 @@ export function AutomationEvidenceCard() {
const topGate = quality?.gate_failures?.[0]
const executionBackend = quality?.execution_backend_summary ?? null
const ansibleRuntime = quality?.ansible_runtime ?? null
const qualityLoaded = Boolean(quality)
const claimReady = Boolean(quality?.production_claim?.can_claim_full_auto_repair)
const route = snapshot?.route ?? null
@@ -374,6 +383,7 @@ export function AutomationEvidenceCard() {
routeDetail,
routeTone: routeTone(route),
executionBackend,
ansibleRuntime,
}
}, [snapshot, t])
@@ -525,6 +535,12 @@ export function AutomationEvidenceCard() {
checkMode: derived.executionBackend.ansible_check_mode_total ?? 0,
apply: derived.executionBackend.ansible_apply_total ?? 0,
pending: derived.executionBackend.ansible_pending_check_mode_total ?? 0,
runtime: derived.ansibleRuntime?.can_run_check_mode
? t('ansibleRuntimeReady')
: t('ansibleRuntimeBlocked', {
blockers: (derived.ansibleRuntime?.blockers ?? []).slice(0, 2).join(', ') || '--',
}),
}),
})}
</span>
</div>