{
  "schema_version": "ai_agent_low_medium_risk_whitelist_v1",
  "generated_at": "2026-06-18T18:42:00+08:00",
  "program_status": {
    "overall_completion_percent": 100,
    "current_priority": "P2",
    "current_task_id": "P2-408",
    "next_task_id": "P2-409",
    "read_only_mode": true,
    "runtime_authority": "low_medium_risk_whitelist_no_live_execution_committed_snapshot",
    "status_note": "P2-408 將 P2-407 無寫入 分析建議轉成中 / 低風險候選白名單、dry-run verifier、rollback proof 與 audit reason；只建立 committed snapshot、API 與治理頁證據，不啟動 auto worker、不寫 Gateway queue、不送 Telegram、不寫 production。"
  },
  "source_refs": [
    "docs/evaluations/ai_agent_report_no_write_analysis_runtime_2026-06-18.json",
    "docs/evaluations/ai_agent_operation_permission_model_2026-06-12.json",
    "docs/evaluations/ai_agent_candidate_operation_dry_run_evidence_2026-06-12.json",
    "docs/evaluations/ai_agent_report_automation_review_2026-06-12.json",
    "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json"
  ],
  "source_readbacks": [
    {
      "readback_id": "p2_407_no_write_analysis",
      "source_schema_version": "ai_agent_report_no_write_analysis_runtime_v1",
      "source_ref": "docs/evaluations/ai_agent_report_no_write_analysis_runtime_2026-06-18.json",
      "endpoint": "GET /api/v1/agents/agent-report-無寫入-analysis-runtime",
      "owner_agent": "openclaw",
      "status": "loaded",
      "key_readback": "6 筆 draft recommendation、2 筆需批准建議與 9 個 blocked runtime action 已讀回。",
      "next_action": "把 recommendation 拆成 low / medium candidate 與 high-risk redirect。"
    },
    {
      "readback_id": "p2_101_permission_model",
      "source_schema_version": "ai_agent_operation_permission_model_v1",
      "source_ref": "docs/evaluations/ai_agent_operation_permission_model_2026-06-12.json",
      "endpoint": "GET /api/v1/agents/agent-operation-permission-model",
      "owner_agent": "openclaw",
      "status": "loaded",
      "key_readback": "observe_only、no_write_replay_allowed、proposal_only 與 human_approval_required lanes 已存在。",
      "next_action": "只允許白名單候選進 無寫入 / dry-run lane，不啟動 live execution lane。"
    },
    {
      "readback_id": "p2_102_dry_run_evidence",
      "source_schema_version": "ai_agent_candidate_operation_dry_run_evidence_v1",
      "source_ref": "docs/evaluations/ai_agent_candidate_operation_dry_run_evidence_2026-06-12.json",
      "endpoint": "GET /api/v1/agents/agent-candidate-operation-dry-run-evidence",
      "owner_agent": "sre",
      "status": "loaded",
      "key_readback": "候選操作已具備 dry-run evidence、side-effect counter、verifier plan 與 rollback / no-op plan。",
      "next_action": "P2-408 將 verifier plan 映射成低 / 中風險候選的必要前置條件。"
    },
    {
      "readback_id": "p2_403j_report_automation_review",
      "source_schema_version": "ai_agent_report_automation_review_v1",
      "source_ref": "docs/evaluations/ai_agent_report_automation_review_2026-06-12.json",
      "endpoint": "GET /api/v1/agents/agent-report-automation-review",
      "owner_agent": "hermes",
      "status": "loaded",
      "key_readback": "日報 / 週報 / 月報與高 / 中 / 低風險 policy review 已有可處置分流。",
      "next_action": "低風險只能產生工作項草稿；中風險需 verifier、rollback proof 與 owner review。"
    },
    {
      "readback_id": "p2_004_dependency_drift",
      "source_schema_version": "dependency_supply_chain_drift_monitor_v1",
      "source_ref": "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json",
      "endpoint": "GET /api/v1/agents/dependency-supply-chain-drift-monitor",
      "owner_agent": "nemotron",
      "status": "loaded",
      "key_readback": "依賴 / 供應鏈漂移只能進 upgrade proposal，不得寫 lockfile、Docker build 或外部 registry lookup。",
      "next_action": "把 dependency upgrade proposal 納入 medium candidate，等待 P2-409 / owner gate。"
    }
  ],
  "whitelist_truth": {
    "p2_407_no_write_analysis_loaded": true,
    "operation_permission_model_loaded": true,
    "candidate_dry_run_evidence_loaded": true,
    "report_policy_review_loaded": true,
    "dependency_drift_loaded": true,
    "low_risk_candidates_ready": true,
    "medium_risk_candidates_ready": true,
    "dry_run_verifier_required": true,
    "rollback_proof_required": true,
    "audit_reason_required": true,
    "high_risk_redirect_ready": true,
    "auto_worker_enabled": false,
    "low_risk_live_execution_enabled": false,
    "medium_risk_live_execution_enabled": false,
    "gateway_queue_write_enabled": false,
    "telegram_send_enabled": false,
    "bot_api_call_enabled": false,
    "receipt_production_write_enabled": false,
    "production_write_enabled": false,
    "secret_read_enabled": false,
    "paid_api_call_enabled": false,
    "host_write_enabled": false,
    "kubectl_action_enabled": false,
    "destructive_operation_enabled": false,
    "openclaw_replacement_allowed": false,
    "auto_worker_run_count_24h": 0,
    "low_risk_execution_count_24h": 0,
    "medium_risk_execution_count_24h": 0,
    "gateway_queue_write_count_24h": 0,
    "telegram_send_count_24h": 0,
    "bot_api_call_count_24h": 0,
    "receipt_production_write_count_24h": 0,
    "production_write_count_24h": 0,
    "secret_read_count_24h": 0,
    "paid_api_call_count_24h": 0,
    "host_write_count_24h": 0,
    "kubectl_action_count_24h": 0,
    "destructive_operation_count_24h": 0,
    "truth_note": "P2-408 只建立中 / 低風險候選白名單與必要 verifier / rollback / audit reason；真正自動處理仍需後續 owner-approved runtime gate。"
  },
  "whitelist_candidates": [
    {
      "candidate_id": "low_readonly_evidence_refresh",
      "display_name": "只讀證據 freshness refresh",
      "risk_tier": "low",
      "owner_agent": "hermes",
      "whitelist_status": "dry_run_ready_no_live_execution",
      "allowed_no_write_outputs": ["freshness 摘要", "缺口清單", "治理頁狀態更新草稿"],
      "required_evidence": ["source_ref", "generated_at", "redaction status"],
      "dry_run_verifier_id": "verifier_redacted_evidence_hash",
      "rollback_proof_id": "rollback_noop_readback",
      "audit_reason_template_id": "audit_readonly_refresh",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["production write", "secret read", "host write"],
      "next_gate": "operator evidence review"
    },
    {
      "candidate_id": "low_report_gap_work_item_draft",
      "display_name": "報表資料缺口 work item 草稿",
      "risk_tier": "low",
      "owner_agent": "hermes",
      "whitelist_status": "candidate_only_no_live_execution",
      "allowed_no_write_outputs": ["work item 草稿", "缺口摘要", "owner 欄位清單"],
      "required_evidence": ["report_truth_ref", "gap reason", "無寫入 proof"],
      "dry_run_verifier_id": "verifier_report_gap_no_write",
      "rollback_proof_id": "rollback_noop_work_item_draft",
      "audit_reason_template_id": "audit_report_gap_draft",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["Gateway queue write", "Telegram send", "Bot API call"],
      "next_gate": "P2-410 audit ledger"
    },
    {
      "candidate_id": "low_failure_only_digest_draft",
      "display_name": "failure-only digest 草稿",
      "risk_tier": "low",
      "owner_agent": "sre",
      "whitelist_status": "candidate_only_no_live_execution",
      "allowed_no_write_outputs": ["digest preview", "dedupe key", "mute 建議草稿"],
      "required_evidence": ["failure signal ref", "dedupe key", "route policy ref"],
      "dry_run_verifier_id": "verifier_failure_only_digest_preview",
      "rollback_proof_id": "rollback_digest_preview_drop",
      "audit_reason_template_id": "audit_failure_digest_draft",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["lockfile write", "package upgrade", "Docker build"],
      "next_gate": "P2-406E failure-only Telegram digest route"
    },
    {
      "candidate_id": "medium_sre_digest_queue_preview",
      "display_name": "SRE 戰情室 queue preview",
      "risk_tier": "medium",
      "owner_agent": "hermes",
      "whitelist_status": "owner_review_required_no_live_execution",
      "allowed_no_write_outputs": ["Gateway queue preview", "receipt expectation", "dedupe proof"],
      "required_evidence": ["canonical room env", "redacted payload", "receipt owner"],
      "dry_run_verifier_id": "verifier_failure_only_digest_preview",
      "rollback_proof_id": "rollback_digest_preview_drop",
      "audit_reason_template_id": "audit_queue_preview",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["Alertmanager route write", "receiver change", "silence write"],
      "next_gate": "P2-409 Owner Review Queue"
    },
    {
      "candidate_id": "medium_dependency_upgrade_proposal",
      "display_name": "依賴升級 proposal",
      "risk_tier": "medium",
      "owner_agent": "nemotron",
      "whitelist_status": "owner_review_required_no_live_execution",
      "allowed_no_write_outputs": ["upgrade proposal", "risk diff", "rollback note"],
      "required_evidence": ["dependency drift ref", "version diff", "no lockfile write proof"],
      "dry_run_verifier_id": "verifier_dependency_upgrade_no_write",
      "rollback_proof_id": "rollback_upgrade_proposal_drop",
      "audit_reason_template_id": "audit_dependency_upgrade_proposal",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["kubectl action", "ArgoCD sync", "rollout restart"],
      "next_gate": "P2-413 version lifecycle proposal"
    },
    {
      "candidate_id": "medium_config_drift_owner_packet",
      "display_name": "配置漂移 owner packet",
      "risk_tier": "medium",
      "owner_agent": "openclaw",
      "whitelist_status": "owner_review_required_no_live_execution",
      "allowed_no_write_outputs": ["owner packet", "affected scope", "rollback owner 草稿"],
      "required_evidence": ["config source ref", "drift summary", "rollback owner"],
      "dry_run_verifier_id": "verifier_config_drift_owner_packet",
      "rollback_proof_id": "rollback_config_packet_drop",
      "audit_reason_template_id": "audit_config_drift_packet",
      "owner_approval_required_for_live_execution": true,
      "live_execution_allowed": false,
      "production_write_allowed": false,
      "side_effect_count": 0,
      "blocked_runtime_actions": ["KM write", "PlayBook trust write", "timeline write"],
      "next_gate": "P2-409 Owner Review Queue"
    }
  ],
  "dry_run_verifiers": [
    {
      "verifier_id": "verifier_redacted_evidence_hash",
      "display_name": "Redacted evidence hash verifier",
      "owner_agent": "hermes",
      "verifier_status": "ready",
      "required_inputs": ["source_ref", "generated_at", "redaction status"],
      "pass_condition": "輸出 hash 與 committed snapshot 欄位一致，且 side-effect count 為 0。",
      "live_readback_allowed": false,
      "production_write_allowed": false
    },
    {
      "verifier_id": "verifier_report_gap_no_write",
      "display_name": "Report gap 無寫入 verifier",
      "owner_agent": "hermes",
      "verifier_status": "ready",
      "required_inputs": ["report truth ref", "gap classification", "work item draft"],
      "pass_condition": "只產草稿，不寫 work item DB、不寫 KM、不送 Telegram。",
      "live_readback_allowed": false,
      "production_write_allowed": false
    },
    {
      "verifier_id": "verifier_failure_only_digest_preview",
      "display_name": "Failure-only digest preview verifier",
      "owner_agent": "sre",
      "verifier_status": "owner_review_required",
      "required_inputs": ["failure signal ref", "dedupe key", "canonical room env"],
      "pass_condition": "preview 具備 route / mute / rollback 欄位，且 Gateway queue write 為 0。",
      "live_readback_allowed": false,
      "production_write_allowed": false
    },
    {
      "verifier_id": "verifier_dependency_upgrade_no_write",
      "display_name": "Dependency upgrade proposal verifier",
      "owner_agent": "nemotron",
      "verifier_status": "owner_review_required",
      "required_inputs": ["dependency drift ref", "version diff", "rollback note"],
      "pass_condition": "不得寫 lockfile、不得 Docker build、不得 external registry lookup。",
      "live_readback_allowed": false,
      "production_write_allowed": false
    },
    {
      "verifier_id": "verifier_config_drift_owner_packet",
      "display_name": "Config drift owner packet verifier",
      "owner_agent": "openclaw",
      "verifier_status": "owner_review_required",
      "required_inputs": ["source-of-truth ref", "affected scope", "rollback owner"],
      "pass_condition": "owner packet 欄位完整，但不 reload、不套用、不改 public route。",
      "live_readback_allowed": false,
      "production_write_allowed": false
    }
  ],
  "rollback_proofs": [
    {
      "rollback_proof_id": "rollback_noop_readback",
      "display_name": "只讀 readback no-op proof",
      "owner_agent": "hermes",
      "rollback_scope": "只讀 freshness refresh 沒有外部副作用；rollback 為丟棄草稿。",
      "proof_status": "noop_ready",
      "rollback_command_allowed": false,
      "required_before_live_execution": true
    },
    {
      "rollback_proof_id": "rollback_noop_work_item_draft",
      "display_name": "work item 草稿 no-op proof",
      "owner_agent": "hermes",
      "rollback_scope": "草稿未寫 DB；rollback 為關閉草稿候選。",
      "proof_status": "noop_ready",
      "rollback_command_allowed": false,
      "required_before_live_execution": true
    },
    {
      "rollback_proof_id": "rollback_digest_preview_drop",
      "display_name": "digest preview 丟棄 proof",
      "owner_agent": "sre",
      "rollback_scope": "preview 未進 queue；rollback 為丟棄 payload 與 dedupe key 草稿。",
      "proof_status": "draft_ready",
      "rollback_command_allowed": false,
      "required_before_live_execution": true
    },
    {
      "rollback_proof_id": "rollback_upgrade_proposal_drop",
      "display_name": "upgrade proposal 丟棄 proof",
      "owner_agent": "nemotron",
      "rollback_scope": "未改 lockfile / image / package；rollback 為標記 proposal rejected。",
      "proof_status": "draft_ready",
      "rollback_command_allowed": false,
      "required_before_live_execution": true
    },
    {
      "rollback_proof_id": "rollback_config_packet_drop",
      "display_name": "配置 owner packet 丟棄 proof",
      "owner_agent": "openclaw",
      "rollback_scope": "未改 source-of-truth 或 live config；rollback 為關閉 owner packet 草稿。",
      "proof_status": "owner_review_required",
      "rollback_command_allowed": false,
      "required_before_live_execution": true
    }
  ],
  "audit_reason_templates": [
    {
      "template_id": "audit_readonly_refresh",
      "display_name": "只讀刷新原因",
      "risk_tier": "low",
      "required_fields": ["source_ref", "freshness_delta", "operator_visible_result"],
      "example_reason": "更新 freshness 判讀，未讀 secret、未寫 production。",
      "sensitive_payload_allowed": false
    },
    {
      "template_id": "audit_report_gap_draft",
      "display_name": "報表缺口草稿原因",
      "risk_tier": "low",
      "required_fields": ["report_id", "gap_reason", "next_owner"],
      "example_reason": "週報全零需轉成資料缺口候選，不建立正式 work item。",
      "sensitive_payload_allowed": false
    },
    {
      "template_id": "audit_failure_digest_draft",
      "display_name": "failure-only digest 草稿原因",
      "risk_tier": "low",
      "required_fields": ["failure_signal", "dedupe_key", "mute_window"],
      "example_reason": "只產 failure-only digest 草稿，send count 保持 0。",
      "sensitive_payload_allowed": false
    },
    {
      "template_id": "audit_queue_preview",
      "display_name": "queue preview 原因",
      "risk_tier": "medium",
      "required_fields": ["canonical_room_env", "receipt_owner", "redaction_check"],
      "example_reason": "建立 SRE 戰情室 queue preview，等待 owner gate，不寫 queue。",
      "sensitive_payload_allowed": false
    },
    {
      "template_id": "audit_dependency_upgrade_proposal",
      "display_name": "依賴升級 proposal 原因",
      "risk_tier": "medium",
      "required_fields": ["dependency_ref", "version_delta", "rollback_note"],
      "example_reason": "產生升級候選，不寫 lockfile、不 build image。",
      "sensitive_payload_allowed": false
    },
    {
      "template_id": "audit_config_drift_packet",
      "display_name": "配置漂移 owner packet 原因",
      "risk_tier": "medium",
      "required_fields": ["source_of_truth_ref", "affected_scope", "rollback_owner"],
      "example_reason": "配置漂移需 owner packet；不 reload、不改 route。",
      "sensitive_payload_allowed": false
    }
  ],
  "high_risk_redirects": [
    {
      "redirect_id": "high_security_response",
      "display_name": "資安 / secret / firewall 類動作",
      "risk_tier": "high",
      "owner_agent": "openclaw",
      "redirect_to": "P2-409 Owner Review Queue",
      "blocked_runtime_actions": ["secret rotation", "firewall change", "Wazuh active response"],
      "reason": "任何 secret、firewall、active response 都不是中低風險白名單，必須進 owner queue。"
    },
    {
      "redirect_id": "critical_model_or_cost_change",
      "display_name": "模型替換 / 費用 / provider 類動作",
      "risk_tier": "critical",
      "owner_agent": "openclaw",
      "redirect_to": "P2-409 Owner Review Queue",
      "blocked_runtime_actions": ["OpenClaw replacement", "AI provider switch", "paid API expansion"],
      "reason": "OpenClaw 角色調整、provider 切換與付費 API 擴量必須走市場數據、費用與 ADR gate。"
    },
    {
      "redirect_id": "high_data_or_config_apply",
      "display_name": "資料 / DB / production config 套用",
      "risk_tier": "high",
      "owner_agent": "sre",
      "redirect_to": "P2-409 Owner Review Queue",
      "blocked_runtime_actions": ["restore apply", "DB migration", "production config reload"],
      "reason": "資料回復、migration 與 production config reload 需要 maintenance window、rollback owner 與 post-check。"
    }
  ],
  "owner_review_gates": [
    {
      "gate_id": "medium_live_execution_gate",
      "display_name": "中風險 live execution gate",
      "owner_agent": "openclaw",
      "status": "owner_review_required",
      "required_fields": ["owner role", "decision reason", "dry-run verifier id", "rollback proof id", "audit reason"],
      "acceptance_checks": ["side_effect_count=0", "rollback proof exists", "post-check owner assigned"],
      "blocked_runtime_actions": ["Gateway queue write", "Telegram send", "production write"]
    },
    {
      "gate_id": "telegram_gateway_write_gate",
      "display_name": "Telegram / Gateway 寫入 gate",
      "owner_agent": "hermes",
      "status": "blocked_by_runtime_gate",
      "required_fields": ["canonical room env", "dedupe key", "receipt owner", "redaction proof"],
      "acceptance_checks": ["Bot API false", "Gateway queue false", "send false"],
      "blocked_runtime_actions": ["Bot API call", "receiver change", "silence write"]
    },
    {
      "gate_id": "config_or_host_write_gate",
      "display_name": "配置 / host / kubectl gate",
      "owner_agent": "sre",
      "status": "blocked_by_runtime_gate",
      "required_fields": ["source-of-truth ref", "maintenance window", "rollback owner", "post-check"],
      "acceptance_checks": ["no secret value", "no host write", "no kubectl action"],
      "blocked_runtime_actions": ["host write", "kubectl action", "production config reload"]
    }
  ],
  "activation_boundaries": {
    "read_only_whitelist_allowed": true,
    "dry_run_verifier_preview_allowed": true,
    "rollback_proof_preview_allowed": true,
    "audit_reason_template_allowed": true,
    "auto_worker_enabled": false,
    "low_risk_live_execution_enabled": false,
    "medium_risk_live_execution_enabled": false,
    "gateway_queue_write_enabled": false,
    "telegram_send_enabled": false,
    "bot_api_call_enabled": false,
    "receipt_production_write_enabled": false,
    "production_write_enabled": false,
    "secret_read_enabled": false,
    "paid_api_call_enabled": false,
    "host_write_enabled": false,
    "kubectl_action_enabled": false,
    "destructive_operation_enabled": false,
    "openclaw_replacement_allowed": false
  },
  "telegram_policy": {
    "canonical_room": "AwoooI SRE 戰情室",
    "canonical_room_env": "SRE_GROUP_CHAT_ID",
    "gateway_queue_write_allowed": false,
    "direct_bot_api_allowed": false,
    "telegram_send_allowed": false,
    "receipt_write_allowed": false,
    "policy_note": "P2-408 只建立白名單候選與 preview；Telegram 只作為目標政策讀回，不發送、不排隊。"
  },
  "display_redaction_contract": {
    "redaction_required": true,
    "unsafe_payload_display_allowed": false,
    "private_reasoning_display_allowed": false,
    "secret_value_display_allowed": false,
    "work_window_transcript_display_allowed": false,
    "allowed_display_fields": [
      "candidate_id",
      "display_name",
      "risk_tier",
      "owner_agent",
      "whitelist_status",
      "dry_run_verifier_id",
      "rollback_proof_id",
      "audit_reason_template_id",
      "blocked_runtime_actions",
      "rollups"
    ],
    "blocked_display_fields": [
      "raw payload",
      "private reasoning",
      "secret value",
      "authorization header",
      "browser context",
      "session transcript"
    ]
  },
  "rollups": {
    "source_readback_count": 5,
    "whitelist_candidate_count": 6,
    "low_risk_candidate_count": 3,
    "medium_risk_candidate_count": 3,
    "candidate_only_count": 6,
    "dry_run_verifier_count": 5,
    "rollback_proof_count": 5,
    "audit_reason_template_count": 6,
    "high_risk_redirect_count": 3,
    "owner_review_gate_count": 3,
    "live_execution_approval_required_count": 6,
    "blocked_runtime_action_count": 27,
    "auto_worker_run_count": 0,
    "low_risk_execution_count": 0,
    "medium_risk_execution_count": 0,
    "gateway_queue_write_count": 0,
    "telegram_send_count": 0,
    "bot_api_call_count": 0,
    "receipt_production_write_count": 0,
    "production_write_count": 0,
    "secret_read_count": 0,
    "paid_api_call_count": 0,
    "host_write_count": 0,
    "kubectl_action_count": 0,
    "destructive_operation_count": 0
  },
  "next_actions": [
    {
      "task_id": "P2-409",
      "priority": "P0",
      "summary": "把 high / critical 風險、medium live execution 與任何 Telegram / Gateway / host / kubectl / production write 轉進 Owner Review Queue。",
      "gate": "Owner Review Queue 只接遮罩後 payload、明確 owner decision、rollback owner 與 post-check，不接受口頭批准。"
    },
    {
      "task_id": "P2-410",
      "priority": "P0",
      "summary": "建立 Agent action audit ledger，讓每次候選、拒收、交接、dry-run 與 owner decision 都有 immutable event。",
      "gate": "仍不寫 production action；ledger write 需先定義 schema、redaction 與 reviewer gate。"
    }
  ]
}
