{
  "schema_version": "ai_agent_owner_approved_fixture_dry_run_v1",
  "generated_at": "2026-06-11T23:59:59+08:00",
  "program_status": {
    "overall_completion_percent": 88,
    "current_priority": "P2",
    "current_task_id": "P2-403F",
    "next_task_id": "P2-403G",
    "read_only_mode": true,
    "runtime_authority": "owner_approved_fixture_dry_run_only_no_live_write",
    "status_note": "P2-403F 固定 owner-approved fixture dry-run 批准包；只允許用已提交 fixture 計算學習回寫、Telegram receipt、handoff replay 與 operator feedback 的乾跑證據，仍不寫 KM、不更新 PlayBook trust、不寫 timeline / replay score、不寫 Gateway queue、不送 Telegram。"
  },
  "source_refs": [
    "docs/evaluations/ai_agent_learning_writeback_approval_package_2026-06-11.json",
    "docs/evaluations/ai_agent_telegram_receipt_approval_package_2026-06-11.json",
    "docs/evaluations/ai_agent_interaction_learning_proof_2026-06-11.json",
    "docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md"
  ],
  "dry_run_truth": {
    "owner_fixture_scope_approved": true,
    "production_write_approved": false,
    "fixture_dry_run_allowed": true,
    "km_write_allowed": false,
    "playbook_trust_write_allowed": false,
    "timeline_learning_write_allowed": false,
    "agent_replay_score_write_allowed": false,
    "gateway_queue_write_allowed": false,
    "telegram_send_allowed": false,
    "redis_consumer_group_allowed": false,
    "db_migration_allowed": false,
    "workflow_trigger_allowed": false,
    "runtime_worker_allowed": false,
    "host_or_cluster_command_allowed": false,
    "secret_or_paid_api_allowed": false,
    "live_learning_write_count": 0,
    "live_playbook_trust_update_count": 0,
    "live_km_update_count": 0,
    "live_timeline_write_count": 0,
    "live_replay_score_write_count": 0,
    "live_gateway_queue_write_count": 0,
    "live_telegram_send_count": 0,
    "truth_note": "本階段只代表 owner 已批准把 committed fixture 轉成 dry-run 證據與前台只讀卡片；任何 production write、Telegram send、queue write、worker、Redis consumer、DB migration、host / cluster command、secret 或付費 API 仍全部是 false / 0。"
  },
  "fixture_package": {
    "required_fields": [
      "fixture_event_id",
      "source_contract_ref",
      "scenario_type",
      "owner_scope_ref",
      "agent_owner",
      "target_surface",
      "proposed_delta_summary",
      "redacted_evidence_ref",
      "dry_run_expected_output",
      "no_write_proof_ref",
      "rollback_plan_ref",
      "created_at"
    ],
    "forbidden_fields": [
      "secret_value",
      "credential_value",
      "telegram_bot_token",
      "telegram_chat_id_raw",
      "authorization_header",
      "production_database_dsn",
      "kubeconfig_value",
      "raw_prompt",
      "conversation_transcript",
      "private_reasoning",
      "raw_tool_output"
    ],
    "owner_review_required": true,
    "rollback_required": true,
    "no_write_proof_required": true,
    "operator_meaning": "每個 fixture dry-run 候選都必須說清楚來源契約、場景、負責 Agent、目標 surface、預期輸出、脫敏證據、無寫入證明與 rollback；批准前只能產生乾跑證據，不得進 production write 或 send path。"
  },
  "fixture_sets": [
    {
      "fixture_id": "learning_writeback_fixture",
      "display_name": "Learning writeback fixture",
      "scenario_type": "learning_writeback",
      "owner_agent": "hermes",
      "status": "approved_for_fixture_only",
      "target_surface": "knowledge_entries + playbook_trust_history + agent_replay_results",
      "operator_visible_result": "顯示候選知識條目、trust delta、replay score delta 與 rollback 摘要；live write count 必須維持 0。",
      "blocked_runtime_action": "km_playbook_timeline_replay_live_write"
    },
    {
      "fixture_id": "telegram_receipt_fixture",
      "display_name": "Telegram receipt fixture",
      "scenario_type": "telegram_receipt",
      "owner_agent": "openclaw",
      "status": "approved_for_fixture_only",
      "target_surface": "telegram_gateway_queue + governance receipts",
      "operator_visible_result": "顯示 queued / delivered / acknowledged / failed / retry 的脫敏收據結構；Gateway queue write 與 Telegram send 必須維持 0。",
      "blocked_runtime_action": "telegram_gateway_queue_or_send"
    },
    {
      "fixture_id": "handoff_replay_fixture",
      "display_name": "Handoff replay fixture",
      "scenario_type": "handoff_replay",
      "owner_agent": "nemotron",
      "status": "approved_for_fixture_only",
      "target_surface": "agent_session_replay + evaluation scorecard",
      "operator_visible_result": "顯示 OpenClaw / Hermes / NemoTron 接手、拒收、補證與 replay scoring 摘要；Redis consumer group 與 runtime worker 必須維持關閉。",
      "blocked_runtime_action": "redis_consumer_or_runtime_worker"
    },
    {
      "fixture_id": "operator_feedback_fixture",
      "display_name": "Operator feedback fixture",
      "scenario_type": "operator_feedback",
      "owner_agent": "openclaw",
      "status": "approved_for_fixture_only",
      "target_surface": "approval_records + learning_service feedback",
      "operator_visible_result": "顯示人工接受、拒絕、要求補證後會如何形成策略修正草案；不寫 canonical memory、不送 Telegram、不啟動 workflow。",
      "blocked_runtime_action": "feedback_to_live_memory_write"
    }
  ],
  "dry_run_gates": [
    {
      "gate_id": "owner_fixture_scope_gate",
      "display_name": "Owner fixture scope gate",
      "owner_agent": "openclaw",
      "status": "approved_for_fixture_only",
      "required_evidence": "明確限制在 committed fixture、只讀 API、前端脫敏卡片、無寫入證明與 rollback plan。",
      "blocked_runtime_action": "production_write_or_send"
    },
    {
      "gate_id": "learning_writeback_no_write_gate",
      "display_name": "Learning writeback 無寫入 gate",
      "owner_agent": "hermes",
      "status": "approval_required",
      "required_evidence": "KM / PlayBook trust / timeline / replay score 寫入需獨立 owner approval、pre-write snapshot、idempotency key、rollback record。",
      "blocked_runtime_action": "learning_writeback_live_write"
    },
    {
      "gate_id": "telegram_gateway_no_send_gate",
      "display_name": "Telegram gateway 無發送 gate",
      "owner_agent": "openclaw",
      "status": "approval_required",
      "required_evidence": "Gateway queue dry-run、channel alias、message template、delivery correlation、failure fallback 與 E2E receipt proof。",
      "blocked_runtime_action": "telegram_queue_write_or_bot_send"
    },
    {
      "gate_id": "redis_consumer_no_connect_gate",
      "display_name": "Redis consumer no-connect gate",
      "owner_agent": "nemotron",
      "status": "approval_required",
      "required_evidence": "consumer group 建立、ack / dead-letter / replay、idempotency 與 production Redis read/write approval。",
      "blocked_runtime_action": "redis_consumer_group_connect"
    },
    {
      "gate_id": "secret_paid_service_gate",
      "display_name": "Secret and paid service gate",
      "owner_agent": "openclaw",
      "status": "approval_required",
      "required_evidence": "任何 secret、token、paid API、host / cluster command、workflow trigger 都需獨立授權與稽核記錄。",
      "blocked_runtime_action": "secret_paid_api_or_host_command"
    }
  ],
  "simulation_steps": [
    {
      "step_id": "load_committed_fixtures",
      "display_name": "載入 committed fixtures",
      "status": "ready",
      "expected_artifact": "fixture manifest + source_refs"
    },
    {
      "step_id": "validate_redaction_contract",
      "display_name": "驗證前端脫敏契約",
      "status": "ready",
      "expected_artifact": "allowed / forbidden frontend fields"
    },
    {
      "step_id": "calculate_learning_delta",
      "display_name": "計算學習回寫 delta",
      "status": "fixture_only",
      "expected_artifact": "candidate KM / trust / replay delta without write"
    },
    {
      "step_id": "calculate_telegram_receipt",
      "display_name": "計算 Telegram receipt envelope",
      "status": "fixture_only",
      "expected_artifact": "queued / delivered / ack / failed / retry receipt envelope without send"
    },
    {
      "step_id": "score_handoff_replay",
      "display_name": "評分 Agent handoff replay",
      "status": "fixture_only",
      "expected_artifact": "handoff accepted / rejected / challenge scorecard without worker"
    },
    {
      "step_id": "emit_governance_readonly_snapshot",
      "display_name": "產出治理頁只讀快照",
      "status": "ready",
      "expected_artifact": "API response + UI cards with live counters at 0"
    }
  ],
  "rollback_contract": {
    "rollback_required": true,
    "rollback_steps": [
      "P2-403F 只新增 committed fixture 與只讀 API，rollback 可直接移除端點與前端卡片。",
      "若 fixture 被判定誤導，先把 fixture_set status 改回 blocked_by_scope，再更新治理頁。",
      "任何後續 live write / send gate 必須保留 pre-write snapshot 與 owner approval record。",
      "發現前端誤顯未核准內容時，先移除欄位、保留 schema version，再重新部署。",
      "rollback 後 LOGBOOK 必須記錄 live counters 仍為 0。"
    ]
  },
  "approval_boundaries": {
    "km_write_allowed": false,
    "playbook_trust_write_allowed": false,
    "timeline_learning_write_allowed": false,
    "agent_replay_score_write_allowed": false,
    "gateway_queue_write_allowed": false,
    "telegram_send_allowed": false,
    "redis_consumer_group_allowed": false,
    "db_migration_allowed": false,
    "workflow_trigger_allowed": false,
    "runtime_worker_allowed": false,
    "host_or_cluster_command_allowed": false,
    "secret_or_paid_api_allowed": false,
    "paid_external_service_allowed": false,
    "production_route_change_allowed": false
  },
  "display_redaction_contract": {
    "redaction_required": true,
    "raw_payload_display_allowed": false,
    "private_reasoning_display_allowed": false,
    "secret_value_display_allowed": false,
    "action_button_allowed": false,
    "allowed_frontend_content": [
      "fixture scenario",
      "owner agent",
      "target surface",
      "operator visible result",
      "blocked runtime action",
      "dry-run gate status",
      "live counters"
    ],
    "forbidden_frontend_content": [
      "Telegram token",
      "raw chat id",
      "authorization header",
      "production DSN",
      "kubeconfig",
      "提示內容",
      "未核准細節",
      "raw tool output"
    ],
    "frontend_display_policy": "治理頁只顯示 fixture 場景、owner agent、target surface、阻擋動作、乾跑 gate 與 live counters；token、raw chat id、authorization header、production DSN、kubeconfig、提示內容、未核准細節與 raw tool output 不進前端，也不提供批准或執行按鈕。"
  },
  "rollups": {
    "fixture_set_count": 4,
    "dry_run_gate_count": 5,
    "simulation_step_count": 6,
    "approved_fixture_only_count": 4,
    "approval_required_gate_ids": [
      "learning_writeback_no_write_gate",
      "redis_consumer_no_connect_gate",
      "secret_paid_service_gate",
      "telegram_gateway_no_send_gate"
    ],
    "blocked_runtime_action_count": 5,
    "required_field_count": 12,
    "forbidden_field_count": 11,
    "live_write_count_total": 0,
    "live_send_count_total": 0,
    "live_receipt_count_total": 0
  }
}
