feat(governance): 新增 result capture promotion dry-run
This commit is contained in:
@@ -0,0 +1,370 @@
|
||||
{
|
||||
"schema_version": "ai_agent_owner_approved_result_capture_promotion_dry_run_v1",
|
||||
"generated_at": "2026-06-13T23:05:00+08:00",
|
||||
"program_status": {
|
||||
"overall_completion_percent": 100,
|
||||
"current_priority": "P2",
|
||||
"current_task_id": "P2-120",
|
||||
"next_task_id": "P2-121",
|
||||
"read_only_mode": true,
|
||||
"runtime_authority": "owner_approved_result_capture_promotion_dry_run_only_no_live_write",
|
||||
"status_note": "P2-120 只建立 owner-approved result capture promotion dry-run preview;不得寫 result capture、learning、PlayBook trust、Gateway queue、Telegram 或 production。"
|
||||
},
|
||||
"source_refs": [
|
||||
"docs/evaluations/ai_agent_result_capture_promotion_approval_gate_2026-06-13.json",
|
||||
"docs/evaluations/ai_agent_result_capture_no_write_readback_2026-06-13.json",
|
||||
"docs/evaluations/ai_agent_owner_approved_result_capture_readback_2026-06-13.json",
|
||||
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md#38-建立-reviewer-queue-no-write-readback"
|
||||
],
|
||||
"prior_result_capture_promotion_gate": {
|
||||
"schema_version": "ai_agent_result_capture_promotion_approval_gate_v1",
|
||||
"promotion_approval_packet_count": 5,
|
||||
"acceptance_gate_template_count": 5,
|
||||
"promotion_verifier_check_count": 5,
|
||||
"blocked_promotion_write_count": 5,
|
||||
"operator_action_count": 5,
|
||||
"owner_approval_received_count": 0,
|
||||
"capture_promotion_approved_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"bot_api_call_count": 0,
|
||||
"report_receipt_write_count": 0,
|
||||
"readiness_note": "P2-119 已正式驗證 result capture promotion approval gate;P2-120 只建立 owner-approved promotion dry-run preview、verifier 與 operator handoff。"
|
||||
},
|
||||
"dry_run_truth": {
|
||||
"p2_119_promotion_gate_loaded": true,
|
||||
"owner_approval_required": true,
|
||||
"dry_run_preview_allowed": true,
|
||||
"promotion_packet_ready": true,
|
||||
"acceptance_template_ready": true,
|
||||
"verifier_dry_run_ready": true,
|
||||
"operator_handoff_ready": true,
|
||||
"owner_approval_received": false,
|
||||
"capture_promotion_approved": false,
|
||||
"canonical_runtime_target_read_enabled": false,
|
||||
"live_query_enabled": false,
|
||||
"reviewer_queue_write_enabled": false,
|
||||
"gateway_queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"bot_api_call_enabled": false,
|
||||
"report_receipt_write_enabled": false,
|
||||
"result_capture_write_enabled": false,
|
||||
"learning_write_enabled": false,
|
||||
"playbook_trust_write_enabled": false,
|
||||
"production_write_enabled": false,
|
||||
"secret_read_enabled": false,
|
||||
"destructive_operation_enabled": false,
|
||||
"owner_approval_received_count": 0,
|
||||
"capture_promotion_approved_count": 0,
|
||||
"dry_run_preview_generated_count": 0,
|
||||
"canonical_runtime_target_read_count": 0,
|
||||
"live_query_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"bot_api_call_count": 0,
|
||||
"report_receipt_write_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"production_write_count": 0,
|
||||
"truth_note": "promotion dry-run preview 已可審查;真正 result capture write、learning write、PlayBook trust write、Gateway queue write 與 Telegram send 仍全部為 0。"
|
||||
},
|
||||
"promotion_dry_run_templates": [
|
||||
{
|
||||
"template_id": "dry_run_promote_action_required_capture",
|
||||
"display_name": "Promote action-required capture dry-run",
|
||||
"owner_agent": "openclaw",
|
||||
"source_packet_id": "promotion_packet_action_required",
|
||||
"status": "ready_for_dry_run",
|
||||
"target_dry_run": "result_capture_promotion_dry_run_preview",
|
||||
"dry_run_mode": "preview_only",
|
||||
"runtime_write_enabled": false,
|
||||
"preview_summary": "產出 action-required capture promotion 的 owner decision、verifier、rollback 與 next manual action 預覽。",
|
||||
"evidence_hash": "sha256:9191919191919191919191919191919191919191919191919191919191919191"
|
||||
},
|
||||
{
|
||||
"template_id": "dry_run_promote_no_action_capture",
|
||||
"display_name": "Promote no-action capture dry-run",
|
||||
"owner_agent": "hermes",
|
||||
"source_packet_id": "promotion_packet_no_action_review",
|
||||
"status": "approval_required",
|
||||
"target_dry_run": "result_capture_promotion_dry_run_preview",
|
||||
"dry_run_mode": "preview_only",
|
||||
"runtime_write_enabled": false,
|
||||
"preview_summary": "產出 no-action capture promotion 的風險剩餘量、觀察條件與 owner 判讀預覽。",
|
||||
"evidence_hash": "sha256:9292929292929292929292929292929292929292929292929292929292929292"
|
||||
},
|
||||
{
|
||||
"template_id": "dry_run_promote_verifier_degraded_capture",
|
||||
"display_name": "Promote verifier degraded capture dry-run",
|
||||
"owner_agent": "nemotron",
|
||||
"source_packet_id": "promotion_packet_verifier_degraded",
|
||||
"status": "blocked_by_policy",
|
||||
"target_dry_run": "result_capture_promotion_dry_run_preview",
|
||||
"dry_run_mode": "preview_only",
|
||||
"runtime_write_enabled": false,
|
||||
"preview_summary": "產出 degraded verifier 的 rollback / reverify / evidence 補件預覽;未補齊不得 promotion。",
|
||||
"evidence_hash": "sha256:9393939393939393939393939393939393939393939393939393939393939393"
|
||||
},
|
||||
{
|
||||
"template_id": "dry_run_promote_sre_route_capture",
|
||||
"display_name": "Promote SRE route capture dry-run",
|
||||
"owner_agent": "openclaw",
|
||||
"source_packet_id": "promotion_packet_route_lock",
|
||||
"status": "approval_required",
|
||||
"target_dry_run": "result_capture_promotion_dry_run_preview",
|
||||
"dry_run_mode": "preview_only",
|
||||
"runtime_write_enabled": false,
|
||||
"preview_summary": "產出 AwoooI SRE 戰情室路由與舊 bot 停用邊界的 promotion 預覽。",
|
||||
"evidence_hash": "sha256:9494949494949494949494949494949494949494949494949494949494949494"
|
||||
},
|
||||
{
|
||||
"template_id": "dry_run_promote_owner_acceptance_capture",
|
||||
"display_name": "Promote owner acceptance capture dry-run",
|
||||
"owner_agent": "nemotron",
|
||||
"source_packet_id": "promotion_packet_owner_acceptance",
|
||||
"status": "blocked_by_policy",
|
||||
"target_dry_run": "result_capture_promotion_dry_run_preview",
|
||||
"dry_run_mode": "preview_only",
|
||||
"runtime_write_enabled": false,
|
||||
"preview_summary": "產出 owner acceptance、rollback owner、redaction 與 learning boundary 的 promotion 預覽。",
|
||||
"evidence_hash": "sha256:9595959595959595959595959595959595959595959595959595959595959595"
|
||||
}
|
||||
],
|
||||
"owner_acceptance_dry_run_fixtures": [
|
||||
{
|
||||
"fixture_id": "fixture_owner_acceptance_record_complete",
|
||||
"display_name": "Owner acceptance record complete",
|
||||
"owner_agent": "hermes",
|
||||
"status": "ready",
|
||||
"required_owner": "result_capture_owner",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"verifies": "owner, decision, decision reason, rollback owner and redacted evidence refs exist",
|
||||
"evidence_hash": "sha256:9696969696969696969696969696969696969696969696969696969696969696"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_capture_scope_review",
|
||||
"display_name": "Capture scope review",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"required_owner": "operator_owner",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"verifies": "capture scope is limited to one incident and one promotion target",
|
||||
"evidence_hash": "sha256:9797979797979797979797979797979797979797979797979797979797979797"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_learning_boundary_review",
|
||||
"display_name": "Learning boundary review",
|
||||
"owner_agent": "hermes",
|
||||
"status": "blocked_by_policy",
|
||||
"required_owner": "learning_owner",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"verifies": "learning write scope is blocked until KM owner review",
|
||||
"evidence_hash": "sha256:9898989898989898989898989898989898989898989898989898989898989898"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_playbook_trust_boundary_review",
|
||||
"display_name": "PlayBook trust boundary review",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"required_owner": "playbook_owner",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"verifies": "PlayBook trust update remains blocked until verifier success criteria exist",
|
||||
"evidence_hash": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_rollback_reverify_plan_review",
|
||||
"display_name": "Rollback reverify plan review",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approval_required",
|
||||
"required_owner": "rollback_owner",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"verifies": "rollback and reverify plan exists before owner-approved dry-run promotion",
|
||||
"evidence_hash": "sha256:9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a"
|
||||
}
|
||||
],
|
||||
"dry_run_verifier_checks": [
|
||||
{
|
||||
"verifier_id": "no_result_capture_write_during_dry_run",
|
||||
"display_name": "No result capture write during dry-run",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"verifies": "result_capture_write_count remains zero during promotion dry-run",
|
||||
"failure_if_missing": "若 result capture write 不是 0,必須停止 dry-run 並標記 unauthorized promotion write。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b"
|
||||
},
|
||||
{
|
||||
"verifier_id": "no_learning_write_during_dry_run",
|
||||
"display_name": "No learning write during dry-run",
|
||||
"owner_agent": "hermes",
|
||||
"status": "ready",
|
||||
"verifies": "learning_write_count remains zero during promotion dry-run",
|
||||
"failure_if_missing": "若 learning write 不是 0,必須退回 KM owner review gate。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c"
|
||||
},
|
||||
{
|
||||
"verifier_id": "no_playbook_trust_during_dry_run",
|
||||
"display_name": "No PlayBook trust during dry-run",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approval_required",
|
||||
"verifies": "playbook_trust_write_count remains zero during promotion dry-run",
|
||||
"failure_if_missing": "若 PlayBook trust write 不是 0,必須退回 trust owner review。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d"
|
||||
},
|
||||
{
|
||||
"verifier_id": "no_gateway_queue_during_dry_run",
|
||||
"display_name": "No Gateway queue during dry-run",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"verifies": "gateway_queue_write_count remains zero during promotion dry-run",
|
||||
"failure_if_missing": "若 Gateway queue write 不是 0,必須退回 reviewer queue gate。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e"
|
||||
},
|
||||
{
|
||||
"verifier_id": "promotion_dry_run_redaction_complete",
|
||||
"display_name": "Promotion dry-run redaction complete",
|
||||
"owner_agent": "hermes",
|
||||
"status": "ready",
|
||||
"verifies": "each promotion dry-run preview has redacted evidence and owner fields",
|
||||
"failure_if_missing": "若缺少 redaction 或 owner 欄位,不能進入 P2-121。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f"
|
||||
}
|
||||
],
|
||||
"blocked_runtime_promotions": [
|
||||
{
|
||||
"blocker_id": "result_capture_dry_run_write_not_authorized",
|
||||
"display_name": "Result capture dry-run write not authorized",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "result_capture_write",
|
||||
"blocked_until": "owner_approved_promotion_write_gate",
|
||||
"evidence_hash": "sha256:a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0"
|
||||
},
|
||||
{
|
||||
"blocker_id": "learning_dry_run_write_not_authorized",
|
||||
"display_name": "Learning dry-run write not authorized",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "learning_write",
|
||||
"blocked_until": "km_owner_review_approved",
|
||||
"evidence_hash": "sha256:a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
|
||||
},
|
||||
{
|
||||
"blocker_id": "playbook_trust_dry_run_write_not_authorized",
|
||||
"display_name": "PlayBook trust dry-run write not authorized",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "playbook_trust_write",
|
||||
"blocked_until": "playbook_owner_review_approved",
|
||||
"evidence_hash": "sha256:a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2"
|
||||
},
|
||||
{
|
||||
"blocker_id": "gateway_queue_dry_run_write_not_authorized",
|
||||
"display_name": "Gateway queue dry-run write not authorized",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "gateway_queue_write",
|
||||
"blocked_until": "reviewer_queue_owner_review_approved",
|
||||
"evidence_hash": "sha256:a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3"
|
||||
},
|
||||
{
|
||||
"blocker_id": "production_dry_run_write_not_authorized",
|
||||
"display_name": "Production dry-run write not authorized",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "production_write",
|
||||
"blocked_until": "runtime_write_gate_approved",
|
||||
"evidence_hash": "sha256:a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4"
|
||||
}
|
||||
],
|
||||
"operator_actions": [
|
||||
{
|
||||
"action_id": "review_owner_approved_promotion_dry_run",
|
||||
"display_name": "Review owner-approved promotion dry-run",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "審查 owner-approved promotion dry-run preview 是否限定單一 incident、單一 capture target 與 rollback 條件。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "verify_promotion_dry_run_no_write_counts",
|
||||
"display_name": "Verify promotion dry-run no-write counts",
|
||||
"owner_agent": "nemotron",
|
||||
"operator_instruction": "確認 result capture、learning、PlayBook trust、Gateway、Telegram、Bot API 與 production write count 全部仍為 0。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "confirm_owner_acceptance_fields",
|
||||
"display_name": "Confirm owner acceptance fields",
|
||||
"owner_agent": "hermes",
|
||||
"operator_instruction": "確認 owner、decision、decision reason、rollback owner 與 redacted evidence refs 已齊全。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "check_dry_run_redaction_contract",
|
||||
"display_name": "Check dry-run redaction contract",
|
||||
"owner_agent": "hermes",
|
||||
"operator_instruction": "確認 dry-run preview 只顯示遮蔽後證據、摘要與 owner 欄位,不外露敏感 payload。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "promote_to_p2_121",
|
||||
"display_name": "Promote to P2-121",
|
||||
"owner_agent": "nemotron",
|
||||
"operator_instruction": "若 P2-120 的 owner-approved promotion dry-run 全部通過,下一步才能建立 P2-121 result capture write gate review。",
|
||||
"runtime_write_allowed": false
|
||||
}
|
||||
],
|
||||
"display_redaction_contract": {
|
||||
"redaction_required": true,
|
||||
"raw_prompt_display_allowed": false,
|
||||
"private_reasoning_display_allowed": false,
|
||||
"secret_value_display_allowed": false,
|
||||
"raw_runtime_payload_display_allowed": false,
|
||||
"internal_collaboration_content_display_allowed": false,
|
||||
"frontend_display_policy": "治理頁只顯示 dry-run preview、owner、decision、blocked reason、verifier 與遮蔽後 evidence hash;不得顯示內部協作內容、敏感 payload 或 secret。"
|
||||
},
|
||||
"rollups": {
|
||||
"promotion_dry_run_template_count": 5,
|
||||
"owner_acceptance_fixture_count": 5,
|
||||
"dry_run_verifier_check_count": 5,
|
||||
"blocked_runtime_promotion_count": 5,
|
||||
"operator_action_count": 5,
|
||||
"approval_required_template_count": 2,
|
||||
"blocked_template_count": 2,
|
||||
"approval_required_fixture_count": 2,
|
||||
"blocked_fixture_count": 2,
|
||||
"approval_required_verifier_count": 2,
|
||||
"critical_blocker_count": 3,
|
||||
"owner_approval_received_count": 0,
|
||||
"capture_promotion_approved_count": 0,
|
||||
"dry_run_preview_generated_count": 0,
|
||||
"canonical_runtime_target_read_count": 0,
|
||||
"live_query_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"bot_api_call_count": 0,
|
||||
"report_receipt_write_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"production_write_count": 0,
|
||||
"secret_read_count": 0,
|
||||
"destructive_operation_count": 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user