feat(governance): 新增 owner approved result capture readback
This commit is contained in:
@@ -0,0 +1,480 @@
|
||||
{
|
||||
"schema_version": "ai_agent_owner_approved_result_capture_readback_v1",
|
||||
"generated_at": "2026-06-13T14:18:00+08:00",
|
||||
"program_status": {
|
||||
"overall_completion_percent": 100,
|
||||
"current_priority": "P2",
|
||||
"current_task_id": "P2-107",
|
||||
"next_task_id": "P2-108",
|
||||
"read_only_mode": true,
|
||||
"runtime_authority": "owner_approved_result_capture_readback_only_no_live_write",
|
||||
"status_note": "P2-107 承接 P2-106 no-write dry-run,固定 result capture readback digest、promotion readiness review、failure lane 與 reviewer queue preview;本快照只讀,不寫 runtime 結果。"
|
||||
},
|
||||
"source_refs": [
|
||||
"docs/evaluations/ai_agent_owner_approved_result_capture_dry_run_2026-06-13.json",
|
||||
"docs/schemas/ai_agent_owner_approved_result_capture_dry_run_v1.schema.json",
|
||||
"apps/api/src/services/ai_agent_owner_approved_result_capture_dry_run.py",
|
||||
"apps/api/src/services/ai_agent_critic_reviewer_result_capture.py",
|
||||
"apps/api/src/services/post_execution_verifier.py",
|
||||
"apps/api/src/services/approval_execution.py",
|
||||
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md"
|
||||
],
|
||||
"prior_dry_run_readback": {
|
||||
"source_schema_version": "ai_agent_owner_approved_result_capture_dry_run_v1",
|
||||
"readback_at": "2026-06-13T12:49:00+08:00",
|
||||
"result_capture_template_count": 5,
|
||||
"score_fixture_count": 5,
|
||||
"dry_run_gate_count": 7,
|
||||
"operator_action_count": 5,
|
||||
"approval_required_gate_count": 2,
|
||||
"blocked_gate_count": 1,
|
||||
"approved_without_execution_meta_24h": 63,
|
||||
"execution_failed_with_matched_24h": 1,
|
||||
"owner_approval_received_count": 0,
|
||||
"dry_run_preview_generated_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"score_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"production_write_count": 0,
|
||||
"readback_note": "P2-106 已建立 owner-approved dry-run template 與 score fixture;P2-107 只做 fixture readback 與 promotion readiness,不讀 canonical runtime target。"
|
||||
},
|
||||
"readback_truth": {
|
||||
"p2_106_dry_run_loaded": true,
|
||||
"fixture_readback_allowed": true,
|
||||
"readback_digest_ready": true,
|
||||
"promotion_readiness_review_ready": true,
|
||||
"owner_review_required_before_promotion": true,
|
||||
"canonical_runtime_readback_enabled": false,
|
||||
"runtime_result_capture_write_enabled": false,
|
||||
"runtime_score_write_enabled": false,
|
||||
"runtime_learning_write_enabled": false,
|
||||
"playbook_trust_write_enabled": false,
|
||||
"reviewer_queue_write_enabled": false,
|
||||
"gateway_queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"production_write_enabled": false,
|
||||
"secret_read_enabled": false,
|
||||
"destructive_operation_enabled": false,
|
||||
"owner_approval_received_count": 0,
|
||||
"readback_digest_generated_count": 0,
|
||||
"promotion_approved_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"result_capture_write_count_24h": 0,
|
||||
"score_write_count_24h": 0,
|
||||
"learning_write_count_24h": 0,
|
||||
"playbook_trust_write_count_24h": 0,
|
||||
"gateway_queue_write_count_24h": 0,
|
||||
"telegram_send_count_24h": 0,
|
||||
"production_write_count_24h": 0,
|
||||
"secret_read_count_24h": 0,
|
||||
"destructive_operation_count_24h": 0,
|
||||
"truth_note": "目前只允許 committed fixture readback 與 promotion readiness 檢查;owner approval、readback runtime generation、reviewer queue write、score/result/learning/trust/Gateway/Telegram/production write 仍全部為 0。"
|
||||
},
|
||||
"result_capture_readback_digests": [
|
||||
{
|
||||
"digest_id": "readback_digest_approved_execution_result",
|
||||
"display_name": "APPROVED result capture readback digest",
|
||||
"source_template_id": "dry_run_capture_approved_execution_result",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"candidate_count_24h": 63,
|
||||
"readback_fields": [
|
||||
"owner_approval_id",
|
||||
"approval_id",
|
||||
"incident_id",
|
||||
"matched_playbook_id",
|
||||
"operator_outcome",
|
||||
"verifier_plan_ref"
|
||||
],
|
||||
"verifier_checks": [
|
||||
"owner_scope_match",
|
||||
"result_state_match",
|
||||
"rollback_plan_present",
|
||||
"public_redaction_pass"
|
||||
],
|
||||
"promotion_blocker": "owner approval 與 canonical readback 尚未啟用,禁止 promotion 到 live writer。",
|
||||
"fixture_only": true,
|
||||
"runtime_read_enabled": false,
|
||||
"write_enabled": false,
|
||||
"evidence_hash": "sha256:1313131313131313131313131313131313131313131313131313131313131313"
|
||||
},
|
||||
{
|
||||
"digest_id": "readback_digest_execution_failed_candidate",
|
||||
"display_name": "EXECUTION_FAILED candidate readback digest",
|
||||
"source_template_id": "dry_run_capture_execution_failed_candidate",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approval_required",
|
||||
"candidate_count_24h": 1,
|
||||
"readback_fields": [
|
||||
"owner_approval_id",
|
||||
"approval_id",
|
||||
"matched_playbook_id",
|
||||
"failure_reason_ref",
|
||||
"negative_learning_weight_preview",
|
||||
"verifier_plan_ref"
|
||||
],
|
||||
"verifier_checks": [
|
||||
"failure_reason_redacted",
|
||||
"negative_learning_preview_only",
|
||||
"trust_update_hold",
|
||||
"replay_hash_present"
|
||||
],
|
||||
"promotion_blocker": "NemoTron 只能驗證 failure candidate,不得寫負向 learning 或 trust。",
|
||||
"fixture_only": true,
|
||||
"runtime_read_enabled": false,
|
||||
"write_enabled": false,
|
||||
"evidence_hash": "sha256:2424242424242424242424242424242424242424242424242424242424242424"
|
||||
},
|
||||
{
|
||||
"digest_id": "readback_digest_pending_human_gate",
|
||||
"display_name": "PENDING human gate readback digest",
|
||||
"source_template_id": "dry_run_capture_pending_human_gate",
|
||||
"owner_agent": "hermes",
|
||||
"status": "blocked_by_policy",
|
||||
"candidate_count_24h": 2,
|
||||
"readback_fields": [
|
||||
"approval_id",
|
||||
"matched_playbook_id",
|
||||
"pending_reason",
|
||||
"human_decision_required",
|
||||
"expires_at"
|
||||
],
|
||||
"verifier_checks": [
|
||||
"pending_reason_present",
|
||||
"human_gate_required",
|
||||
"learning_write_absent",
|
||||
"operator_followup_ready"
|
||||
],
|
||||
"promotion_blocker": "pending human gate 不可被自動轉成 learning 或 result capture write。",
|
||||
"fixture_only": true,
|
||||
"runtime_read_enabled": false,
|
||||
"write_enabled": false,
|
||||
"evidence_hash": "sha256:3535353535353535353535353535353535353535353535353535353535353535"
|
||||
},
|
||||
{
|
||||
"digest_id": "readback_digest_manual_or_noop",
|
||||
"display_name": "manual / no-op readback digest",
|
||||
"source_template_id": "dry_run_capture_manual_or_noop",
|
||||
"owner_agent": "hermes",
|
||||
"status": "ready_for_owner_review",
|
||||
"candidate_count_24h": 0,
|
||||
"readback_fields": [
|
||||
"incident_id",
|
||||
"approval_id",
|
||||
"manual_resolution_note",
|
||||
"noop_reason",
|
||||
"operator_verified"
|
||||
],
|
||||
"verifier_checks": [
|
||||
"manual_note_redacted",
|
||||
"noop_reason_present",
|
||||
"learning_exclusion_present",
|
||||
"operator_verified_present"
|
||||
],
|
||||
"promotion_blocker": "沒有候選資料與人工核對前,只能保留為 readback digest。",
|
||||
"fixture_only": true,
|
||||
"runtime_read_enabled": false,
|
||||
"write_enabled": false,
|
||||
"evidence_hash": "sha256:4646464646464646464646464646464646464646464646464646464646464646"
|
||||
},
|
||||
{
|
||||
"digest_id": "readback_digest_post_write_verifier_receipt",
|
||||
"display_name": "post-write verifier receipt readback digest",
|
||||
"source_template_id": "dry_run_capture_post_write_verifier_receipt",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"candidate_count_24h": 0,
|
||||
"readback_fields": [
|
||||
"verifier_plan_ref",
|
||||
"expected_result_hash",
|
||||
"rollback_plan_ref",
|
||||
"operator_ack_required"
|
||||
],
|
||||
"verifier_checks": [
|
||||
"expected_hash_present",
|
||||
"rollback_lane_present",
|
||||
"operator_ack_required",
|
||||
"canonical_read_disabled"
|
||||
],
|
||||
"promotion_blocker": "post-write verifier receipt 尚未有 live write,所以不得讀 canonical target 或回寫 receipt。",
|
||||
"fixture_only": true,
|
||||
"runtime_read_enabled": false,
|
||||
"write_enabled": false,
|
||||
"evidence_hash": "sha256:5757575757575757575757575757575757575757575757575757575757575757"
|
||||
}
|
||||
],
|
||||
"promotion_readiness_reviews": [
|
||||
{
|
||||
"review_id": "promotion_review_owner_scope",
|
||||
"display_name": "Owner scope readiness",
|
||||
"owner_agent": "openclaw",
|
||||
"source_digest_id": "readback_digest_approved_execution_result",
|
||||
"readiness_state": "needs_owner_review",
|
||||
"risk_tier": "high",
|
||||
"required_before_promotion": [
|
||||
"owner approval id",
|
||||
"approved contract ids",
|
||||
"rollback owner",
|
||||
"public evidence refs"
|
||||
],
|
||||
"failure_if_missing": "缺 owner scope 時,禁止推進到 P2-108。",
|
||||
"promotion_allowed": false,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"review_id": "promotion_review_score_fixture_parity",
|
||||
"display_name": "Score fixture parity readiness",
|
||||
"owner_agent": "openclaw",
|
||||
"source_digest_id": "readback_digest_approved_execution_result",
|
||||
"readiness_state": "ready_for_owner_review",
|
||||
"risk_tier": "medium",
|
||||
"required_before_promotion": [
|
||||
"critic score fixture",
|
||||
"reviewer score fixture",
|
||||
"disagreement gate",
|
||||
"minimum score policy"
|
||||
],
|
||||
"failure_if_missing": "缺 critic / reviewer fixture 時,不得建立 reviewer queue item。",
|
||||
"promotion_allowed": false,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"review_id": "promotion_review_redaction_digest",
|
||||
"display_name": "Public redaction digest readiness",
|
||||
"owner_agent": "hermes",
|
||||
"source_digest_id": "readback_digest_manual_or_noop",
|
||||
"readiness_state": "ready_for_owner_review",
|
||||
"risk_tier": "medium",
|
||||
"required_before_promotion": [
|
||||
"public summary",
|
||||
"blocked fields list",
|
||||
"allowed fields list",
|
||||
"evidence hash"
|
||||
],
|
||||
"failure_if_missing": "缺公開遮罩摘要時,治理頁與 Telegram digest 都不得顯示。",
|
||||
"promotion_allowed": false,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"review_id": "promotion_review_failure_candidate",
|
||||
"display_name": "Failure candidate verifier readiness",
|
||||
"owner_agent": "nemotron",
|
||||
"source_digest_id": "readback_digest_execution_failed_candidate",
|
||||
"readiness_state": "needs_owner_review",
|
||||
"risk_tier": "high",
|
||||
"required_before_promotion": [
|
||||
"failure reason ref",
|
||||
"no-write replay hash",
|
||||
"negative learning hold",
|
||||
"post-write verifier plan"
|
||||
],
|
||||
"failure_if_missing": "缺 no-write replay hash 時,NemoTron 不得提交 failure candidate。",
|
||||
"promotion_allowed": false,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"review_id": "promotion_review_live_writer_gate",
|
||||
"display_name": "Live writer gate readiness",
|
||||
"owner_agent": "openclaw",
|
||||
"source_digest_id": "readback_digest_post_write_verifier_receipt",
|
||||
"readiness_state": "blocked_by_policy",
|
||||
"risk_tier": "critical",
|
||||
"required_before_promotion": [
|
||||
"P2-108 approval package",
|
||||
"canonical readback plan",
|
||||
"rollback drill",
|
||||
"Telegram failure receipt gate"
|
||||
],
|
||||
"failure_if_missing": "沒有下一關批准包前,任何 live writer、Telegram send 或 queue write 都維持 0。",
|
||||
"promotion_allowed": false,
|
||||
"creates_runtime_write": false
|
||||
}
|
||||
],
|
||||
"failure_lanes": [
|
||||
{
|
||||
"lane_id": "failure_lane_missing_owner_scope",
|
||||
"display_name": "missing owner scope",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "blocked_by_policy",
|
||||
"trigger_condition": "owner approval id、scope 或 contract ids 不完整",
|
||||
"required_response": "退回 owner packet 補件,不產生 reviewer queue write。",
|
||||
"aborts_promotion": true,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"lane_id": "failure_lane_redaction_mismatch",
|
||||
"display_name": "redaction mismatch",
|
||||
"owner_agent": "hermes",
|
||||
"status": "blocked_by_policy",
|
||||
"trigger_condition": "public summary、blocked field list 或 evidence hash 不一致",
|
||||
"required_response": "重建公開遮罩 digest;前端與 Telegram digest 均不顯示原始內容。",
|
||||
"aborts_promotion": true,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"lane_id": "failure_lane_verifier_fixture_missing",
|
||||
"display_name": "verifier fixture missing",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"trigger_condition": "post-write verifier plan、rollback lane 或 no-write replay hash 缺漏",
|
||||
"required_response": "保留在 fixture-only readback,不讀 canonical target。",
|
||||
"aborts_promotion": true,
|
||||
"creates_runtime_write": false
|
||||
},
|
||||
{
|
||||
"lane_id": "failure_lane_agent_disagreement",
|
||||
"display_name": "agent disagreement",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready_for_review",
|
||||
"trigger_condition": "Critic、Reviewer 或 verifier verdict 不一致",
|
||||
"required_response": "提升到統帥審核;Hermes 只整理摘要,NemoTron 只補 replay hash。",
|
||||
"aborts_promotion": true,
|
||||
"creates_runtime_write": false
|
||||
}
|
||||
],
|
||||
"reviewer_queue_preview": [
|
||||
{
|
||||
"queue_id": "review_queue_owner_scope",
|
||||
"display_name": "owner scope review queue preview",
|
||||
"owner_agent": "openclaw",
|
||||
"reviewer_role": "arbiter",
|
||||
"status": "queued_for_owner_review",
|
||||
"required_inputs": [
|
||||
"owner approval id",
|
||||
"approved contract ids",
|
||||
"rollback owner"
|
||||
],
|
||||
"queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"evidence_hash": "sha256:6868686868686868686868686868686868686868686868686868686868686868"
|
||||
},
|
||||
{
|
||||
"queue_id": "review_queue_public_redaction",
|
||||
"display_name": "public redaction review queue preview",
|
||||
"owner_agent": "hermes",
|
||||
"reviewer_role": "reporter",
|
||||
"status": "queued_for_owner_review",
|
||||
"required_inputs": [
|
||||
"public summary",
|
||||
"blocked display fields",
|
||||
"allowed display fields"
|
||||
],
|
||||
"queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"evidence_hash": "sha256:7979797979797979797979797979797979797979797979797979797979797979"
|
||||
},
|
||||
{
|
||||
"queue_id": "review_queue_failure_candidate",
|
||||
"display_name": "failure candidate review queue preview",
|
||||
"owner_agent": "nemotron",
|
||||
"reviewer_role": "verifier",
|
||||
"status": "queued_for_owner_review",
|
||||
"required_inputs": [
|
||||
"failure reason ref",
|
||||
"no-write replay hash",
|
||||
"verifier plan ref"
|
||||
],
|
||||
"queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"evidence_hash": "sha256:8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a"
|
||||
},
|
||||
{
|
||||
"queue_id": "review_queue_live_writer_blocker",
|
||||
"display_name": "live writer blocker review queue preview",
|
||||
"owner_agent": "openclaw",
|
||||
"reviewer_role": "safety_reviewer",
|
||||
"status": "blocked_by_policy",
|
||||
"required_inputs": [
|
||||
"P2-108 approval package",
|
||||
"canonical readback plan",
|
||||
"rollback drill evidence"
|
||||
],
|
||||
"queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"evidence_hash": "sha256:9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b"
|
||||
}
|
||||
],
|
||||
"operator_actions": [
|
||||
{
|
||||
"action_id": "op_review_readback_digest",
|
||||
"action_type": "review_readback",
|
||||
"display_name": "審查 readback digest",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "確認 digest 只引用公開遮罩欄位與 hash,沒有 runtime result capture write。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "op_compare_dry_run_hash",
|
||||
"action_type": "compare_digest",
|
||||
"display_name": "比對 dry-run hash",
|
||||
"owner_agent": "hermes",
|
||||
"operator_instruction": "比對 P2-106 template hash、P2-107 digest hash 與 blocked field list。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "op_review_failure_candidate",
|
||||
"action_type": "review_failure_lane",
|
||||
"display_name": "審查 failure candidate",
|
||||
"owner_agent": "nemotron",
|
||||
"operator_instruction": "只檢查 failure reason ref 與 no-write replay hash,不寫負向 learning。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "op_reject_or_rework_readback",
|
||||
"action_type": "reject_or_rework",
|
||||
"display_name": "退回 readback 補件",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "缺 owner scope、redaction、verifier fixture 或 rollback plan 時退回補件。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "op_promote_to_p2_108_package",
|
||||
"action_type": "promote_to_next_gate",
|
||||
"display_name": "推進 P2-108 批准包",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "只在全部 readback 與 promotion readiness 通過後,建立下一關批准包;仍不啟動 live writer。",
|
||||
"runtime_write_allowed": false
|
||||
}
|
||||
],
|
||||
"display_redaction_contract": {
|
||||
"redaction_required": true,
|
||||
"frontend_display_policy": "治理頁只顯示公開遮罩 summary、hash、readback digest、promotion readiness、failure lane 與 queue preview;不得顯示內部協作逐字稿、未脫敏提示內容、私有推理內容、未脫敏工具輸出或機密明文。",
|
||||
"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
|
||||
},
|
||||
"rollups": {
|
||||
"readback_digest_count": 5,
|
||||
"promotion_review_count": 5,
|
||||
"failure_lane_count": 4,
|
||||
"reviewer_queue_preview_count": 4,
|
||||
"operator_action_count": 5,
|
||||
"approval_required_digest_count": 2,
|
||||
"blocked_digest_count": 2,
|
||||
"ready_review_count": 2,
|
||||
"blocked_review_count": 1,
|
||||
"blocked_failure_lane_count": 3,
|
||||
"queued_reviewer_preview_count": 3,
|
||||
"blocked_reviewer_preview_count": 1,
|
||||
"approved_without_execution_meta_24h": 63,
|
||||
"execution_failed_with_matched_24h": 1,
|
||||
"owner_approval_received_count": 0,
|
||||
"readback_digest_generated_count": 0,
|
||||
"promotion_approved_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"score_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"production_write_count": 0,
|
||||
"secret_read_count": 0,
|
||||
"destructive_operation_count": 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user