feat(governance): 新增任務結果稽核軌跡
All checks were successful
Code Review / ai-code-review (push) Successful in 24s
CD Pipeline / tests (push) Successful in 1m25s
CD Pipeline / build-and-deploy (push) Successful in 4m45s
CD Pipeline / post-deploy-checks (push) Successful in 18s

This commit is contained in:
Your Name
2026-06-13 00:33:37 +08:00
parent 2e9fe46b95
commit 0e5189b515
14 changed files with 1828 additions and 15 deletions

View File

@@ -0,0 +1,434 @@
{
"schema_version": "ai_agent_task_result_audit_trail_v1",
"generated_at": "2026-06-13T10:20:00+08:00",
"program_status": {
"overall_completion_percent": 99,
"current_priority": "P2",
"current_task_id": "P2-103",
"next_task_id": "P2-104",
"read_only_mode": true,
"runtime_authority": "task_result_audit_trail_contract_only_no_live_writeback",
"status_note": "P2-103 承接 P2-102 候選操作 dry-run 證據,把任務結果固定成 KM 草稿、LOGBOOK 證據、稽核軌跡、timeline 與人工交接的結果路由契約;目前仍不寫 KM、不 runtime append LOGBOOK、不寫 audit DB、不寫 timeline、不更新 PlayBook trust、不寫 Gateway queue、不送 Telegram。"
},
"source_refs": [
"docs/evaluations/ai_agent_candidate_operation_dry_run_evidence_2026-06-12.json",
"docs/evaluations/ai_agent_operation_permission_model_2026-06-12.json",
"docs/evaluations/ai_agent_report_runtime_fixture_readback_2026-06-12.json",
"docs/ai/AI_AGENT_AUTOMATION_WORKLIST_2026-06-04.md",
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md"
],
"result_audit_truth": {
"p2_102_candidate_dry_run_loaded": true,
"task_result_route_matrix_ready": true,
"km_draft_contract_ready": true,
"logbook_append_contract_ready": true,
"audit_trail_contract_ready": true,
"timeline_handoff_contract_ready": true,
"operator_next_action_ready": true,
"all_results_have_owner_and_next_step": true,
"runtime_execution_enabled": false,
"km_write_enabled": false,
"logbook_runtime_write_enabled": false,
"audit_db_write_enabled": false,
"timeline_write_enabled": false,
"playbook_trust_write_enabled": false,
"gateway_queue_write_enabled": false,
"telegram_send_enabled": false,
"delivery_receipt_write_enabled": false,
"production_write_enabled": false,
"secret_value_read_enabled": false,
"host_or_cluster_command_enabled": false,
"destructive_operation_enabled": false,
"work_window_transcript_display_allowed": false,
"runtime_execution_count_24h": 0,
"km_write_count_24h": 0,
"logbook_runtime_write_count_24h": 0,
"audit_db_write_count_24h": 0,
"timeline_write_count_24h": 0,
"playbook_trust_write_count_24h": 0,
"gateway_queue_write_count_24h": 0,
"telegram_send_count_24h": 0,
"delivery_receipt_write_count_24h": 0,
"production_write_count_24h": 0,
"secret_value_read_count_24h": 0,
"host_or_cluster_command_count_24h": 0,
"destructive_operation_count_24h": 0,
"truth_note": "本段只把任務結果的去向與卡點固定成 committed evidence contract所有 KM / LOGBOOK / audit / timeline / PlayBook trust / Gateway / Telegram / production write 仍是 0 / false。"
},
"result_routes": [
{
"route_id": "result_diagnostic_no_action",
"display_name": "診斷完成但無修復動作",
"source_signal": "diagnostic_only_manual_review",
"result_state": "diagnostic_only",
"owner_agent": "openclaw",
"primary_owner": "SRE operator",
"km_target": "KM 草稿:記錄診斷條件、無修復原因與下次補證欄位",
"logbook_target": "LOGBOOK 證據:只記錄 committed snapshot 與 decision reason",
"audit_target": "audit trailresult=diagnostic_only_no_action",
"timeline_target": "timeline handoffmanual_review_no_action",
"operator_next_action": "人工確認是否接受無修復結論;若不接受,改走補證或修復候選 review。",
"blocked_reason": "未產生 verified repair result不能標記自動修復成功。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": true,
"evidence_hash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
{
"route_id": "result_repair_candidate_needs_owner",
"display_name": "修復候選等待 owner 審查",
"source_signal": "repair_candidate_draft",
"result_state": "owner_review_required",
"owner_agent": "openclaw",
"primary_owner": "service owner",
"km_target": "KM 草稿:保留 MCP evidence、PlayBook trust 與 rollback/no-op plan",
"logbook_target": "LOGBOOK 證據記錄候選、風險、owner gate 與 verifier plan",
"audit_target": "audit trailresult=repair_candidate_waiting_owner",
"timeline_target": "timeline handoffowner_review_playbook_trust_gate",
"operator_next_action": "owner 檢查 evidence hash、PlayBook trust、rollback owner 與 maintenance window缺一項就退回補證。",
"blocked_reason": "owner response、rollback owner 或 verifier plan 尚未接受。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": true,
"evidence_hash": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
{
"route_id": "result_execution_failed_manual",
"display_name": "執行失敗需人工修復或回滾",
"source_signal": "execution_failed_manual_required",
"result_state": "execution_failed",
"owner_agent": "openclaw",
"primary_owner": "SRE incident commander",
"km_target": "KM 草稿:保留失敗類型、失敗命令遮蔽摘要、人工修復缺口與 verifier mismatch",
"logbook_target": "LOGBOOK 證據:只記錄結果分類、失敗 lane、下一步與 production smoke 狀態",
"audit_target": "audit trailresult=execution_failed_manual_fix_or_rollback",
"timeline_target": "timeline handoffmanual_fix_or_rollback",
"operator_next_action": "SRE 決定人工修復、回滾或補證AI 只能提供 no-write SOP不自動再執行。",
"blocked_reason": "verifier degraded 或 execution failed不能自動宣告 resolved。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": true,
"evidence_hash": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
},
{
"route_id": "result_verified_no_change",
"display_name": "只讀驗證通過但未變更",
"source_signal": "verified_no_write",
"result_state": "verified_no_change",
"owner_agent": "hermes",
"primary_owner": "governance reviewer",
"km_target": "KM 草稿:標記只讀驗證方法與適用限制",
"logbook_target": "LOGBOOK 證據:記錄 API / UI / smoke readback 與 no-write 邊界",
"audit_target": "audit trailresult=verified_no_change",
"timeline_target": "timeline handoffread_only_verified",
"operator_next_action": "治理 reviewer 決定是否把 read-only 方法納入 Runbook不需 runtime 修復。",
"blocked_reason": "沒有 live write不能當成修復已執行。",
"writes_live_state": false,
"requires_owner_review": false,
"ready_for_km_draft": true,
"evidence_hash": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
{
"route_id": "result_evidence_missing",
"display_name": "證據缺口等待補齊",
"source_signal": "repair_candidate_missing_evidence",
"result_state": "blocked_until_evidence",
"owner_agent": "hermes",
"primary_owner": "evidence owner",
"km_target": "KM 草稿:只列缺口欄位,不固化未驗證結論",
"logbook_target": "LOGBOOK 證據:記錄缺口清單與補證 deadline",
"audit_target": "audit trailresult=blocked_until_evidence",
"timeline_target": "timeline handoffcollect_repair_evidence",
"operator_next_action": "補 MCP / Sentry / SigNoz / host log / PlayBook trust evidence補完後重新跑 dry-run review。",
"blocked_reason": "MCP / provider / verifier evidence 不足。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": false,
"evidence_hash": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
},
{
"route_id": "result_policy_blocked",
"display_name": "政策阻擋或明確禁止",
"source_signal": "blocked_by_policy",
"result_state": "blocked_by_policy",
"owner_agent": "nemotron",
"primary_owner": "security reviewer",
"km_target": "KM 草稿:只記錄 policy reason 與替代 no-op 方案",
"logbook_target": "LOGBOOK 證據:記錄阻擋規則、紅線與禁止操作",
"audit_target": "audit trailresult=blocked_by_policy",
"timeline_target": "timeline handoffsecurity_policy_block",
"operator_next_action": "安全 reviewer 決定是否建立新批准包;未批准前保持 blocked。",
"blocked_reason": "觸及 secret / paid provider / destructive / production write 紅線。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": false,
"evidence_hash": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"route_id": "result_provider_unmatched",
"display_name": "供應者新鮮但未匹配 Incident",
"source_signal": "provider_fresh_but_unmatched",
"result_state": "correlation_gap",
"owner_agent": "openclaw",
"primary_owner": "observability owner",
"km_target": "KM 草稿:記錄 source correlation 規則缺口,避免寫成服務已修復",
"logbook_target": "LOGBOOK 證據:記錄 provider refs、candidate count 與未匹配原因",
"audit_target": "audit trailresult=provider_correlation_gap",
"timeline_target": "timeline handoffreview_provider_source_match",
"operator_next_action": "檢查 Sentry / SigNoz / Alertmanager / K8s source id 對應;需要時建立 source correlation review。",
"blocked_reason": "provider 有心跳但事件尚未關聯到 Incident。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": false,
"evidence_hash": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
},
{
"route_id": "result_report_zero_signal",
"display_name": "日週月報全 0 或低可信",
"source_signal": "report_zero_signal_low_confidence",
"result_state": "report_quality_gap",
"owner_agent": "hermes",
"primary_owner": "report owner",
"km_target": "KM 草稿:記錄報表資料鏈路缺口與可信度判定",
"logbook_target": "LOGBOOK 證據:記錄日報 / 週報 / 月報資料來源、缺口與 actionability",
"audit_target": "audit trailresult=report_quality_gap",
"timeline_target": "timeline handoffreport_source_quality_review",
"operator_next_action": "檢查告警、AI 提案、部署、成本、token、K3s 指標資料源;全 0 不可當健康。",
"blocked_reason": "報表缺少有效資料來源或 ingestion readback。",
"writes_live_state": false,
"requires_owner_review": true,
"ready_for_km_draft": true,
"evidence_hash": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
}
],
"writeback_contracts": [
{
"contract_id": "contract_km_review_draft",
"display_name": "KM owner-review 草稿",
"owner_agent": "hermes",
"target_system": "knowledge_base",
"purpose": "把已驗證或需補證的結果轉成 owner review 草稿,避免 AI 直接固化錯知識。",
"allowed_mode": "gated_owner_review",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["result_route_id", "evidence_hash", "owner", "source_refs", "next_action"],
"blocker_summary": "owner review gate 尚未啟用;不可自動寫入高影響 KM。",
"evidence_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333"
},
{
"contract_id": "contract_logbook_evidence_append",
"display_name": "LOGBOOK 證據補記契約",
"owner_agent": "hermes",
"target_system": "docs_logbook",
"purpose": "把已部署、已 smoke 或只讀驗證結果整理成可人工提交的 LOGBOOK entry。",
"allowed_mode": "manual_append_plan",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["commit", "deploy_marker", "api_readback", "browser_smoke", "runtime_boundary"],
"blocker_summary": "runtime 不得自動改 repoLOGBOOK 只能經一般 git review / commit 流程。",
"evidence_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444"
},
{
"contract_id": "contract_audit_trail_entry",
"display_name": "稽核軌跡 entry contract",
"owner_agent": "openclaw",
"target_system": "governance_audit",
"purpose": "固定 result_state、decision reason、blocked reason、operator next action 與 redacted evidence refs。",
"allowed_mode": "committed_snapshot_only",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["result_state", "decision_reason", "blocked_reason", "operator_next_action", "redacted_evidence_refs"],
"blocker_summary": "audit DB writer 尚未批准;目前只回傳契約與 committed snapshot。",
"evidence_hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
},
{
"contract_id": "contract_incident_timeline_handoff",
"display_name": "Incident timeline handoff",
"owner_agent": "openclaw",
"target_system": "incident_timeline",
"purpose": "讓 Operator 可看見目前階段、誰處理、AI 做了什麼、是否需要人工。",
"allowed_mode": "gated_owner_review",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["stage", "owner_agent", "operator_next_action", "manual_required", "blocked_reason"],
"blocker_summary": "timeline writer 尚未批准;不可把 UI 顯示當成 timeline 已寫入。",
"evidence_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
},
{
"contract_id": "contract_playbook_trust_candidate",
"display_name": "PlayBook trust 候選更新",
"owner_agent": "nemotron",
"target_system": "playbook_trust",
"purpose": "把修復成功 / 失敗 / no-op / policy block 結果轉成 trust score 候選,不直接套用。",
"allowed_mode": "gated_owner_review",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["playbook_id", "result_state", "verifier_result", "owner_review", "rollback_context"],
"blocker_summary": "P2-104 才修復 matched_playbook_id 學習缺口;目前只保留候選 contract。",
"evidence_hash": "sha256:7777777777777777777777777777777777777777777777777777777777777777"
},
{
"contract_id": "contract_operator_handoff_packet",
"display_name": "人工交接封包",
"owner_agent": "hermes",
"target_system": "awooop_operator_console",
"purpose": "把 TG / AwoooP approval 後卡住的項目轉成可理解的人工下一步與補證清單。",
"allowed_mode": "committed_snapshot_only",
"write_enabled": false,
"runtime_writer_enabled": false,
"required_fields": ["incident_id", "route_id", "current_stage", "next_action", "missing_evidence", "owner"],
"blocker_summary": "operator console writeback 尚未批准;目前只展示下一步 contract。",
"evidence_hash": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
}
],
"audit_checkpoints": [
{
"checkpoint_id": "checkpoint_result_classification",
"display_name": "結果分類一致性",
"required_for": "所有 result route",
"status": "ready",
"failure_if_missing": "TG / AwoooP 只會顯示已批准或執行中,無法知道最後是 no-action、失敗或補證。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_evidence_hash",
"display_name": "redacted evidence hash",
"required_for": "KM / LOGBOOK / audit",
"status": "ready",
"failure_if_missing": "結果無法被追溯,後續 KM 可能固化錯誤。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_owner_next_action",
"display_name": "owner 與下一步",
"required_for": "operator handoff",
"status": "ready",
"failure_if_missing": "人工看不懂該修、該補證、該 rollback 或該關閉。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_km_draft_review",
"display_name": "KM owner review",
"required_for": "knowledge base",
"status": "needs_owner_review",
"failure_if_missing": "AI 可能直接寫入未驗證或過時知識。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_logbook_evidence",
"display_name": "LOGBOOK evidence anchor",
"required_for": "release evidence",
"status": "ready",
"failure_if_missing": "無法連回 commit、deploy marker、API readback 與正式站 smoke。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_timeline_handoff",
"display_name": "timeline handoff",
"required_for": "incident timeline",
"status": "needs_owner_review",
"failure_if_missing": "Incident 頁看不到目前停在哪個階段。",
"creates_runtime_action": false
},
{
"checkpoint_id": "checkpoint_redaction_boundary",
"display_name": "redaction boundary",
"required_for": "所有前端顯示",
"status": "ready",
"failure_if_missing": "可能外露 secret、prompt、私有推理、raw TG payload 或內部協作內容。",
"creates_runtime_action": false
}
],
"operator_handoffs": [
{
"handoff_id": "handoff_manual_fix_or_rollback",
"display_name": "人工修復或回滾",
"owner_agent": "openclaw",
"human_instruction": "若 result_state=execution_failedSRE 只可依 no-write SOP 決定人工修復 / rollbackAI 不會再次自動執行。",
"creates_runtime_action": false,
"requires_human_review": true
},
{
"handoff_id": "handoff_collect_missing_repair_evidence",
"display_name": "補齊修復證據",
"owner_agent": "hermes",
"human_instruction": "補 MCP、provider、host log、PlayBook trust 或 verifier evidence補完後重新回到 dry-run review。",
"creates_runtime_action": false,
"requires_human_review": true
},
{
"handoff_id": "handoff_provider_correlation_review",
"display_name": "供應者關聯審查",
"owner_agent": "openclaw",
"human_instruction": "檢查 provider refs 與 Incident 的 source id / fingerprint / recurrence 對應,不可把 provider heartbeat 當已關聯。",
"creates_runtime_action": false,
"requires_human_review": true
},
{
"handoff_id": "handoff_km_owner_review",
"display_name": "KM owner 審查",
"owner_agent": "hermes",
"human_instruction": "owner 確認草稿引用、來源與 stale 風險後才可寫入高影響 KM。",
"creates_runtime_action": false,
"requires_human_review": true
},
{
"handoff_id": "handoff_report_quality_review",
"display_name": "報表品質審查",
"owner_agent": "hermes",
"human_instruction": "日報 / 週報 / 月報全 0 時先視為資料鏈路異常,需查 ingestion 與 actionability不得當成健康。",
"creates_runtime_action": false,
"requires_human_review": true
}
],
"display_redaction_contract": {
"redaction_required": true,
"raw_prompt_display_allowed": false,
"private_reasoning_display_allowed": false,
"secret_value_display_allowed": false,
"raw_telegram_payload_display_allowed": false,
"work_window_transcript_display_allowed": false,
"allowed_display_fields": [
"route_id",
"display_name",
"result_state",
"owner_agent",
"primary_owner",
"operator_next_action",
"blocked_reason",
"evidence_hash",
"write_enabled",
"runtime_writer_enabled"
],
"blocked_display_fields": [
"secret_value",
"token",
"authorization_header",
"raw_prompt",
"private_reasoning",
"raw_telegram_payload",
"internal_collaboration_transcript"
]
},
"rollups": {
"result_route_count": 8,
"owner_next_action_ready_count": 8,
"requires_owner_review_count": 7,
"ready_for_km_draft_count": 5,
"blocked_result_count": 3,
"writeback_contract_count": 6,
"audit_checkpoint_count": 7,
"operator_handoff_count": 5,
"runtime_execution_count": 0,
"km_write_count": 0,
"logbook_runtime_write_count": 0,
"audit_db_write_count": 0,
"timeline_write_count": 0,
"playbook_trust_write_count": 0,
"gateway_queue_write_count": 0,
"telegram_send_count": 0,
"production_write_count": 0,
"secret_value_read_count": 0,
"destructive_operation_count": 0
}
}