feat(governance): 新增 result capture writer dry-run fixture
Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m28s
E2E Health Check / e2e-health (push) Failing after 38s
CD Pipeline / build-and-deploy (push) Successful in 4m57s
CD Pipeline / post-deploy-checks (push) Successful in 1m42s
Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m28s
E2E Health Check / e2e-health (push) Failing after 38s
CD Pipeline / build-and-deploy (push) Successful in 4m57s
CD Pipeline / post-deploy-checks (push) Successful in 1m42s
This commit is contained in:
@@ -0,0 +1,453 @@
|
||||
{
|
||||
"schema_version": "ai_agent_result_capture_writer_dry_run_fixture_v1",
|
||||
"generated_at": "2026-06-14T00:20:00+08:00",
|
||||
"program_status": {
|
||||
"overall_completion_percent": 100,
|
||||
"current_priority": "P2",
|
||||
"current_task_id": "P2-123",
|
||||
"next_task_id": "P2-124",
|
||||
"read_only_mode": true,
|
||||
"runtime_authority": "result_capture_writer_dry_run_fixture_only_no_live_write",
|
||||
"status_note": "P2-123 只建立 result capture writer dry-run fixture、receipt preview、idempotency replay 與 rollback rehearsal;不得套用 writer 或寫入 production。"
|
||||
},
|
||||
"source_refs": [
|
||||
"docs/evaluations/ai_agent_result_capture_writer_implementation_review_2026-06-13.json",
|
||||
"docs/evaluations/ai_agent_result_capture_write_gate_review_2026-06-13.json",
|
||||
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md#43-建立-result-capture-writer-implementation-review"
|
||||
],
|
||||
"dry_run_truth": {
|
||||
"p2_122_implementation_review_loaded": true,
|
||||
"result_capture_writer_dry_run_fixture_ready": true,
|
||||
"receipt_preview_ready": true,
|
||||
"idempotency_replay_ready": true,
|
||||
"rollback_rehearsal_ready": true,
|
||||
"redaction_preview_ready": true,
|
||||
"fixture_only_mode": true,
|
||||
"owner_approval_required": true,
|
||||
"dual_approval_required": true,
|
||||
"dry_run_hash_required": true,
|
||||
"idempotency_key_required": true,
|
||||
"post_dry_run_verifier_required": true,
|
||||
"rollback_required": true,
|
||||
"writer_apply_enabled": false,
|
||||
"dry_run_execution_enabled": false,
|
||||
"receipt_write_enabled": 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,
|
||||
"dual_approval_received_count": 0,
|
||||
"dry_run_hash_verified_count": 0,
|
||||
"writer_apply_count": 0,
|
||||
"dry_run_execution_count": 0,
|
||||
"receipt_write_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,
|
||||
"truth_note": "P2-123 把 P2-122 的 writer implementation review 轉成 fixture-only dry-run。所有 live writer、queue、Telegram、Bot API 與 production write 仍為 0。"
|
||||
},
|
||||
"writer_dry_run_fixtures": [
|
||||
{
|
||||
"fixture_id": "fixture_result_capture_writer",
|
||||
"display_name": "Result capture writer dry-run fixture",
|
||||
"owner_agent": "openclaw",
|
||||
"target_writer": "result_capture_writer",
|
||||
"target_dry_run": "result_capture_writer_dry_run_fixture",
|
||||
"status": "ready_for_owner_review",
|
||||
"input_fixture": "redacted_incident_result_capture_input_v1",
|
||||
"expected_receipt_preview": "result_capture_receipt_preview_v1",
|
||||
"idempotency_key": "fixture:result_capture:incident:hash",
|
||||
"blocked_live_action": "result_capture_writer_apply",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_learning_writer",
|
||||
"display_name": "Learning writer dry-run fixture",
|
||||
"owner_agent": "hermes",
|
||||
"target_writer": "learning_writer",
|
||||
"target_dry_run": "result_capture_writer_dry_run_fixture",
|
||||
"status": "approval_required",
|
||||
"input_fixture": "redacted_learning_draft_input_v1",
|
||||
"expected_receipt_preview": "learning_receipt_preview_v1",
|
||||
"idempotency_key": "fixture:learning:incident:owner",
|
||||
"blocked_live_action": "learning_writer_apply",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_playbook_trust_writer",
|
||||
"display_name": "PlayBook trust writer dry-run fixture",
|
||||
"owner_agent": "nemotron",
|
||||
"target_writer": "playbook_trust_writer",
|
||||
"target_dry_run": "result_capture_writer_dry_run_fixture",
|
||||
"status": "blocked_by_policy",
|
||||
"input_fixture": "redacted_playbook_trust_delta_input_v1",
|
||||
"expected_receipt_preview": "playbook_trust_receipt_preview_v1",
|
||||
"idempotency_key": "fixture:playbook_trust:playbook:version",
|
||||
"blocked_live_action": "playbook_trust_writer_apply",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_reviewer_queue_writer",
|
||||
"display_name": "Reviewer queue dry-run fixture",
|
||||
"owner_agent": "openclaw",
|
||||
"target_writer": "reviewer_queue_writer",
|
||||
"target_dry_run": "result_capture_writer_dry_run_fixture",
|
||||
"status": "approval_required",
|
||||
"input_fixture": "redacted_reviewer_queue_item_input_v1",
|
||||
"expected_receipt_preview": "reviewer_queue_receipt_preview_v1",
|
||||
"idempotency_key": "fixture:reviewer_queue:incident:owner",
|
||||
"blocked_live_action": "reviewer_queue_apply",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4"
|
||||
},
|
||||
{
|
||||
"fixture_id": "fixture_gateway_queue_writer",
|
||||
"display_name": "Gateway queue dry-run fixture",
|
||||
"owner_agent": "nemotron",
|
||||
"target_writer": "gateway_queue_writer",
|
||||
"target_dry_run": "result_capture_writer_dry_run_fixture",
|
||||
"status": "ready_for_owner_review",
|
||||
"input_fixture": "redacted_gateway_queue_envelope_input_v1",
|
||||
"expected_receipt_preview": "gateway_queue_receipt_preview_v1",
|
||||
"idempotency_key": "fixture:gateway_queue:sre:route",
|
||||
"blocked_live_action": "gateway_queue_apply",
|
||||
"fixture_only": true,
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5"
|
||||
}
|
||||
],
|
||||
"receipt_previews": [
|
||||
{
|
||||
"receipt_id": "receipt_result_capture_preview",
|
||||
"display_name": "Result capture receipt preview",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"preview_payload": "incident、decision、verifier、idempotency key、redacted evidence refs",
|
||||
"redaction_policy": "只顯示紅線後欄位,不顯示原始 payload 或 secret。",
|
||||
"failure_if_missing": "沒有 receipt preview 時不得進入 writer dry-run。",
|
||||
"live_receipt_enabled": false
|
||||
},
|
||||
{
|
||||
"receipt_id": "receipt_learning_preview",
|
||||
"display_name": "Learning receipt preview",
|
||||
"owner_agent": "hermes",
|
||||
"status": "approval_required",
|
||||
"preview_payload": "KM draft、owner review、source refs、stale guard、rollback owner",
|
||||
"redaction_policy": "不顯示高影響 KM 原文或內部協作內容。",
|
||||
"failure_if_missing": "沒有 owner-reviewed learning receipt 時不得學習寫入。",
|
||||
"live_receipt_enabled": false
|
||||
},
|
||||
{
|
||||
"receipt_id": "receipt_playbook_trust_preview",
|
||||
"display_name": "PlayBook trust receipt preview",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"preview_payload": "trust delta、success/failure evidence、negative reinforcement、rollback criteria",
|
||||
"redaction_policy": "只顯示 trust delta 摘要與 hash,不顯示 raw run payload。",
|
||||
"failure_if_missing": "沒有 verifier success 與 rollback criteria 時不得更新信任分數。",
|
||||
"live_receipt_enabled": false
|
||||
},
|
||||
{
|
||||
"receipt_id": "receipt_reviewer_queue_preview",
|
||||
"display_name": "Reviewer queue receipt preview",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"preview_payload": "reviewer lane、owner route、SLA、dedupe key、manual handoff reason",
|
||||
"redaction_policy": "不顯示 reviewer 內部註記與未核准欄位。",
|
||||
"failure_if_missing": "沒有 reviewer queue preview 時不得寫 reviewer queue。",
|
||||
"live_receipt_enabled": false
|
||||
},
|
||||
{
|
||||
"receipt_id": "receipt_gateway_queue_preview",
|
||||
"display_name": "Gateway queue receipt preview",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "ready",
|
||||
"preview_payload": "AwoooI SRE 戰情室 route、dedupe、retry、dead-letter、no-secret policy",
|
||||
"redaction_policy": "只顯示群組邏輯名稱,不顯示 chat id、token 或 Bot API payload。",
|
||||
"failure_if_missing": "沒有 Gateway queue receipt preview 時不得送 Telegram。",
|
||||
"live_receipt_enabled": false
|
||||
}
|
||||
],
|
||||
"idempotency_replay_checks": [
|
||||
{
|
||||
"check_id": "replay_duplicate_noop",
|
||||
"display_name": "Duplicate replay no-op",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"expected_outcome": "同一 idempotency key 重播必須回傳 duplicate-safe receipt preview。",
|
||||
"failure_if_missing": "缺 duplicate no-op 證據時不得 dry-run writer。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1"
|
||||
},
|
||||
{
|
||||
"check_id": "replay_conflict_reject",
|
||||
"display_name": "Conflict replay reject",
|
||||
"owner_agent": "hermes",
|
||||
"status": "approval_required",
|
||||
"expected_outcome": "同 key 不同 payload hash 必須被 reject,並產生人工審查原因。",
|
||||
"failure_if_missing": "缺 conflict reject 證據時不得打開 writer gate。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2"
|
||||
},
|
||||
{
|
||||
"check_id": "replay_retry_same_receipt",
|
||||
"display_name": "Retry same receipt",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"expected_outcome": "retry 必須回傳同一 receipt preview,不新增 queue item。",
|
||||
"failure_if_missing": "retry 行為不穩定時不得接 Gateway queue。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3"
|
||||
},
|
||||
{
|
||||
"check_id": "replay_rollback_rehearsal",
|
||||
"display_name": "Rollback replay rehearsal",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approval_required",
|
||||
"expected_outcome": "rollback rehearsal 必須能指出可撤回欄位、owner 與驗證步驟。",
|
||||
"failure_if_missing": "缺 rollback rehearsal 時不得允許 PlayBook trust delta。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4"
|
||||
},
|
||||
{
|
||||
"check_id": "replay_gateway_queue_noop",
|
||||
"display_name": "Gateway queue no-op replay",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"expected_outcome": "Gateway queue dry-run 必須維持 no-op,不呼叫 Bot API。",
|
||||
"failure_if_missing": "queue no-op 不成立時不得接 Telegram 實發。",
|
||||
"live_execution_enabled": false,
|
||||
"evidence_hash": "sha256:b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5"
|
||||
}
|
||||
],
|
||||
"rollback_rehearsals": [
|
||||
{
|
||||
"rehearsal_id": "rollback_result_capture_preview",
|
||||
"display_name": "Result capture rollback preview",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"rollback_preview": "撤回 result capture preview、保留 incident link、標記 duplicate-safe rollback receipt。",
|
||||
"blocked_live_action": "result_capture_writer_apply",
|
||||
"live_execution_enabled": false
|
||||
},
|
||||
{
|
||||
"rehearsal_id": "rollback_learning_preview",
|
||||
"display_name": "Learning rollback preview",
|
||||
"owner_agent": "hermes",
|
||||
"status": "approval_required",
|
||||
"rollback_preview": "撤回 KM draft 與 stale guard,回到 owner review lane。",
|
||||
"blocked_live_action": "learning_writer_apply",
|
||||
"live_execution_enabled": false
|
||||
},
|
||||
{
|
||||
"rehearsal_id": "rollback_playbook_trust_preview",
|
||||
"display_name": "PlayBook trust rollback preview",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "blocked_by_policy",
|
||||
"rollback_preview": "撤回 trust delta,要求 verifier success 與 failure evidence 重算。",
|
||||
"blocked_live_action": "playbook_trust_writer_apply",
|
||||
"live_execution_enabled": false
|
||||
},
|
||||
{
|
||||
"rehearsal_id": "rollback_reviewer_queue_preview",
|
||||
"display_name": "Reviewer queue rollback preview",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "ready",
|
||||
"rollback_preview": "撤回 reviewer queue preview,保留人工接手原因與 dedupe key。",
|
||||
"blocked_live_action": "reviewer_queue_apply",
|
||||
"live_execution_enabled": false
|
||||
},
|
||||
{
|
||||
"rehearsal_id": "rollback_gateway_queue_preview",
|
||||
"display_name": "Gateway queue rollback preview",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "ready",
|
||||
"rollback_preview": "撤回 Gateway queue envelope preview,不呼叫 Telegram Bot API。",
|
||||
"blocked_live_action": "gateway_queue_apply",
|
||||
"live_execution_enabled": false
|
||||
}
|
||||
],
|
||||
"blocked_runtime_writes": [
|
||||
{
|
||||
"blocker_id": "blocked_result_capture_writer_apply",
|
||||
"display_name": "Result capture writer apply blocked",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "result_capture_writer_apply",
|
||||
"blocked_until": "dry-run fixture, receipt preview, idempotency replay and rollback rehearsal pass",
|
||||
"evidence_hash": "sha256:c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1"
|
||||
},
|
||||
{
|
||||
"blocker_id": "blocked_learning_writer_apply",
|
||||
"display_name": "Learning writer apply blocked",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "learning_writer_apply",
|
||||
"blocked_until": "KM owner accepts scoped learning draft and rollback rehearsal",
|
||||
"evidence_hash": "sha256:c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2"
|
||||
},
|
||||
{
|
||||
"blocker_id": "blocked_playbook_trust_writer_apply",
|
||||
"display_name": "PlayBook trust writer apply blocked",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "playbook_trust_writer_apply",
|
||||
"blocked_until": "trust delta rollback and verifier success are approved",
|
||||
"evidence_hash": "sha256:c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3"
|
||||
},
|
||||
{
|
||||
"blocker_id": "blocked_reviewer_queue_apply",
|
||||
"display_name": "Reviewer queue apply blocked",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "reviewer_queue_apply",
|
||||
"blocked_until": "reviewer route, dedupe and TTL are approved",
|
||||
"evidence_hash": "sha256:c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4"
|
||||
},
|
||||
{
|
||||
"blocker_id": "blocked_gateway_queue_apply",
|
||||
"display_name": "Gateway queue apply blocked",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "gateway_queue_apply",
|
||||
"blocked_until": "AwoooI SRE route, no-secret envelope and no-op replay are approved",
|
||||
"evidence_hash": "sha256:c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5"
|
||||
},
|
||||
{
|
||||
"blocker_id": "blocked_telegram_send_apply",
|
||||
"display_name": "Telegram send apply blocked",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "telegram_send_apply",
|
||||
"blocked_until": "delivery receipt gate, Bot API redaction and SRE war room route are approved",
|
||||
"evidence_hash": "sha256:c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6"
|
||||
}
|
||||
],
|
||||
"operator_actions": [
|
||||
{
|
||||
"action_id": "review_writer_dry_run_fixtures",
|
||||
"display_name": "Review writer dry-run fixtures",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "審查 5 個 writer dry-run fixture 是否具備輸入、receipt preview、idempotency key 與 blocked live action。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "verify_receipt_preview_contract",
|
||||
"display_name": "Verify receipt preview contract",
|
||||
"owner_agent": "hermes",
|
||||
"operator_instruction": "確認 receipt preview 不含 secret、內部協作內容或 raw runtime payload;未通過不得進入 live writer。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "replay_idempotency_fixture",
|
||||
"display_name": "Replay idempotency fixture",
|
||||
"owner_agent": "nemotron",
|
||||
"operator_instruction": "重放 duplicate、conflict、retry 與 rollback fixture;不一致即退回 P2-122。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "rehearse_rollback_preview",
|
||||
"display_name": "Rehearse rollback preview",
|
||||
"owner_agent": "nemotron",
|
||||
"operator_instruction": "確認 rollback preview 指出可撤回欄位、owner、驗證方式與人工接手路徑。",
|
||||
"runtime_write_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "promote_to_p2_124",
|
||||
"display_name": "Promote to P2-124",
|
||||
"owner_agent": "openclaw",
|
||||
"operator_instruction": "只在 P2-123 dry-run fixture 全部通過後,推進到 P2-124;本步不執行 live write。",
|
||||
"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 fixture、receipt preview、idempotency replay、rollback rehearsal、owner、狀態與紅線後 evidence hash;不得顯示內部協作內容、secret、原始 payload 或私有推理。"
|
||||
},
|
||||
"rollups": {
|
||||
"writer_dry_run_fixture_count": 5,
|
||||
"receipt_preview_count": 5,
|
||||
"idempotency_replay_check_count": 5,
|
||||
"rollback_rehearsal_count": 5,
|
||||
"blocked_runtime_write_count": 6,
|
||||
"operator_action_count": 5,
|
||||
"approval_required_fixture_count": 2,
|
||||
"blocked_fixture_count": 1,
|
||||
"approval_required_receipt_count": 2,
|
||||
"blocked_receipt_count": 1,
|
||||
"approval_required_replay_count": 2,
|
||||
"blocked_replay_count": 1,
|
||||
"approval_required_rollback_count": 1,
|
||||
"critical_blocker_count": 3,
|
||||
"owner_approval_received_count": 0,
|
||||
"dual_approval_received_count": 0,
|
||||
"dry_run_hash_verified_count": 0,
|
||||
"writer_apply_count": 0,
|
||||
"dry_run_execution_count": 0,
|
||||
"receipt_write_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
|
||||
},
|
||||
"prior_result_capture_writer_implementation_review": {
|
||||
"schema_version": "ai_agent_result_capture_writer_implementation_review_v1",
|
||||
"writer_implementation_review_count": 5,
|
||||
"implementation_gate_count": 5,
|
||||
"post_implementation_verifier_plan_count": 5,
|
||||
"blocked_runtime_change_count": 6,
|
||||
"operator_action_count": 5,
|
||||
"writer_apply_count": 0,
|
||||
"implementation_applied_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-122 已正式驗證 writer implementation review;P2-123 只建立 fixture-only dry-run、receipt preview、idempotency replay 與 rollback rehearsal,仍不套用 writer。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://awoooi.local/schemas/ai_agent_result_capture_writer_dry_run_fixture_v1.schema.json",
|
||||
"title": "AI Agent Result Capture Writer Dry Run Fixture",
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"generated_at",
|
||||
"program_status",
|
||||
"prior_result_capture_writer_implementation_review",
|
||||
"dry_run_truth",
|
||||
"writer_dry_run_fixtures",
|
||||
"receipt_previews",
|
||||
"idempotency_replay_checks",
|
||||
"rollback_rehearsals",
|
||||
"blocked_runtime_writes",
|
||||
"operator_actions",
|
||||
"display_redaction_contract",
|
||||
"rollups"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"const": "ai_agent_result_capture_writer_dry_run_fixture_v1"
|
||||
},
|
||||
"program_status": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"overall_completion_percent",
|
||||
"current_priority",
|
||||
"current_task_id",
|
||||
"next_task_id",
|
||||
"read_only_mode",
|
||||
"runtime_authority",
|
||||
"status_note"
|
||||
],
|
||||
"properties": {
|
||||
"overall_completion_percent": {
|
||||
"const": 100
|
||||
},
|
||||
"current_priority": {
|
||||
"const": "P2"
|
||||
},
|
||||
"current_task_id": {
|
||||
"const": "P2-123"
|
||||
},
|
||||
"next_task_id": {
|
||||
"const": "P2-124"
|
||||
},
|
||||
"read_only_mode": {
|
||||
"const": true
|
||||
},
|
||||
"runtime_authority": {
|
||||
"const": "result_capture_writer_dry_run_fixture_only_no_live_write"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dry_run_truth": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"p2_122_implementation_review_loaded",
|
||||
"fixture_only_mode",
|
||||
"receipt_preview_ready",
|
||||
"idempotency_replay_ready",
|
||||
"rollback_rehearsal_ready",
|
||||
"writer_apply_enabled",
|
||||
"dry_run_execution_enabled",
|
||||
"receipt_write_enabled",
|
||||
"result_capture_write_enabled",
|
||||
"learning_write_enabled",
|
||||
"playbook_trust_write_enabled",
|
||||
"gateway_queue_write_enabled",
|
||||
"telegram_send_enabled"
|
||||
],
|
||||
"properties": {
|
||||
"p2_122_implementation_review_loaded": {
|
||||
"const": true
|
||||
},
|
||||
"fixture_only_mode": {
|
||||
"const": true
|
||||
},
|
||||
"receipt_preview_ready": {
|
||||
"const": true
|
||||
},
|
||||
"idempotency_replay_ready": {
|
||||
"const": true
|
||||
},
|
||||
"rollback_rehearsal_ready": {
|
||||
"const": true
|
||||
},
|
||||
"writer_apply_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"dry_run_execution_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"receipt_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"result_capture_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"learning_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"playbook_trust_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"gateway_queue_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"telegram_send_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"production_write_enabled": {
|
||||
"const": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"writer_dry_run_fixtures": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5
|
||||
},
|
||||
"receipt_previews": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5
|
||||
},
|
||||
"idempotency_replay_checks": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5
|
||||
},
|
||||
"rollback_rehearsals": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5
|
||||
},
|
||||
"blocked_runtime_writes": {
|
||||
"type": "array",
|
||||
"minItems": 6,
|
||||
"maxItems": 6
|
||||
},
|
||||
"operator_actions": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5
|
||||
},
|
||||
"display_redaction_contract": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"redaction_required": {
|
||||
"const": true
|
||||
},
|
||||
"secret_value_display_allowed": {
|
||||
"const": false
|
||||
},
|
||||
"internal_collaboration_content_display_allowed": {
|
||||
"const": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"rollups": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"writer_dry_run_fixture_count",
|
||||
"receipt_preview_count",
|
||||
"idempotency_replay_check_count",
|
||||
"rollback_rehearsal_count",
|
||||
"blocked_runtime_write_count",
|
||||
"operator_action_count",
|
||||
"writer_apply_count",
|
||||
"dry_run_execution_count",
|
||||
"receipt_write_count",
|
||||
"result_capture_write_count",
|
||||
"learning_write_count",
|
||||
"playbook_trust_write_count",
|
||||
"gateway_queue_write_count",
|
||||
"telegram_send_count"
|
||||
],
|
||||
"properties": {
|
||||
"writer_dry_run_fixture_count": {
|
||||
"const": 5
|
||||
},
|
||||
"receipt_preview_count": {
|
||||
"const": 5
|
||||
},
|
||||
"idempotency_replay_check_count": {
|
||||
"const": 5
|
||||
},
|
||||
"rollback_rehearsal_count": {
|
||||
"const": 5
|
||||
},
|
||||
"blocked_runtime_write_count": {
|
||||
"const": 6
|
||||
},
|
||||
"operator_action_count": {
|
||||
"const": 5
|
||||
},
|
||||
"writer_apply_count": {
|
||||
"const": 0
|
||||
},
|
||||
"dry_run_execution_count": {
|
||||
"const": 0
|
||||
},
|
||||
"receipt_write_count": {
|
||||
"const": 0
|
||||
},
|
||||
"result_capture_write_count": {
|
||||
"const": 0
|
||||
},
|
||||
"learning_write_count": {
|
||||
"const": 0
|
||||
},
|
||||
"playbook_trust_write_count": {
|
||||
"const": 0
|
||||
},
|
||||
"gateway_queue_write_count": {
|
||||
"const": 0
|
||||
},
|
||||
"telegram_send_count": {
|
||||
"const": 0
|
||||
},
|
||||
"production_write_count": {
|
||||
"const": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user