{
  "schema_version": "backup_dr_readiness_matrix_v1",
  "generated_at": "2026-06-04T15:46:59+08:00",
  "source_target_inventory_ref": "docs/evaluations/backup_dr_target_inventory_2026-06-04.json",
  "source_refs": [
    "docs/runbooks/BACKUP-STATUS.md",
    "docs/evaluations/backup_dr_target_inventory_2026-06-04.json",
    "scripts/backup/backup-status.sh",
    "scripts/backup/verify-offsite-full-sync.sh"
  ],
  "program_status": {
    "overall_completion_percent": 91,
    "current_priority": "P1",
    "current_task_id": "P1-102",
    "next_task_id": "P1-201",
    "read_only_mode": true
  },
  "rollups": {
    "total_rows": 17,
    "by_overall_readiness": {
      "ready": 12,
      "action_required": 2,
      "blocked": 2,
      "deferred": 1
    },
    "by_restore_drill_status": {
      "approval_required": 13,
      "blocked": 2,
      "deferred": 1,
      "not_applicable": 1
    },
    "by_offsite_status": {
      "verified": 13,
      "needs_metric_binding": 1,
      "blocked": 1,
      "deferred": 1,
      "not_applicable": 1
    },
    "blocked_row_ids": [
      "configs_capture",
      "credential_escrow_markers"
    ],
    "action_required_row_ids": [
      "signoz",
      "velero_k8s_resources"
    ]
  },
  "readiness_rows": [
    {
      "target_id": "gitea",
      "display_name": "Gitea DB + repository dump",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "success 不即時洗版；failure / action-required 才通知。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-gitea.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 freshness / offsite ready 證據卡。"
    },
    {
      "target_id": "momo_postgresql",
      "display_name": "MOMO PostgreSQL",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-momo.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 188 pull freshness 與 SSH reachability。"
    },
    {
      "target_id": "harbor",
      "display_name": "Harbor registry + DB",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-harbor.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 registry readiness。"
    },
    {
      "target_id": "awoooi_postgresql_daily",
      "display_name": "AWOOOI PostgreSQL daily full",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "critical failure must alert；success 不即時洗版。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-awoooi.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 24h full backup 與 6h frequent backup。"
    },
    {
      "target_id": "awoooi_postgresql_frequent",
      "display_name": "AWOOOI PostgreSQL frequent core",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "critical failure must alert；success 不即時洗版。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-awoooi-frequent.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 6h RPO。"
    },
    {
      "target_id": "langfuse",
      "display_name": "Langfuse AI trace DB",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-langfuse.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 AI trace backup freshness。"
    },
    {
      "target_id": "monitoring",
      "display_name": "Prometheus / Grafana / Alertmanager",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-monitoring.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 monitoring backup 與 alert-rule coverage。"
    },
    {
      "target_id": "signoz",
      "display_name": "SignOz ClickHouse + SQLite",
      "overall_readiness": "action_required",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "committed_script",
      "evidence_refs": ["scripts/backup/backup-signoz.sh", "docs/runbooks/BACKUP-STATUS.md"],
      "blocker_summary": "備份腳本會短暫停止 collector；Agent 不得任意觸發，UI 需標示 disruptive backup guard。",
      "next_action": "P1-104 顯示 disruptive backup guard。"
    },
    {
      "target_id": "open_webui",
      "display_name": "Open-WebUI volume",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-open-webui.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 Open-WebUI readiness。"
    },
    {
      "target_id": "clawbot_redis",
      "display_name": "ClawBot Redis volume",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-clawbot.sh"],
      "blocker_summary": "無 target-level blocker；restore 仍需人工批准。",
      "next_action": "P1-104 顯示 Redis backup readiness。"
    },
    {
      "target_id": "configs_capture",
      "display_name": "Host / service / K8s configuration capture",
      "overall_readiness": "blocked",
      "freshness_status": "blocked",
      "integrity_status": "blocked",
      "restore_drill_status": "blocked",
      "offsite_status": "blocked",
      "notification_policy": "action-required 必須告警；成功不即時洗版。",
      "gate_status": "blocked_by_live_evidence",
      "evidence_level": "blocked_live_evidence",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-configs.sh"],
      "blocker_summary": "`120-k3s-host-configs` live evidence blocked；不得宣稱 full DR green。",
      "next_action": "P1-104 顯示 config capture blocked；P1-105 才產生修復 / restore 批准包。"
    },
    {
      "target_id": "ai_artifacts",
      "display_name": "AI artifacts / Ollama manifests",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-ai-artifacts.sh"],
      "blocker_summary": "manifest-only policy；大型 model blobs 不預設備份。",
      "next_action": "P1-104 顯示 manifest-only backup policy。"
    },
    {
      "target_id": "public_routes",
      "display_name": "Public routes / DNS / TLS evidence",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "approval_required",
      "offsite_status": "verified",
      "notification_policy": "failure-only escalation；success 由每日摘要承載。",
      "gate_status": "restore_approval_required",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-public-routes.sh"],
      "blocker_summary": "provider token / TLS private key 不在此目標輸出。",
      "next_action": "P1-104 顯示 public route reconstruction evidence。"
    },
    {
      "target_id": "sentry",
      "display_name": "Sentry backup repo",
      "overall_readiness": "deferred",
      "freshness_status": "deferred",
      "integrity_status": "deferred",
      "restore_drill_status": "deferred",
      "offsite_status": "deferred",
      "notification_policy": "deferred until service active。",
      "gate_status": "deferred_until_service_active",
      "evidence_level": "deferred",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/backup-sentry.sh"],
      "blocker_summary": "Sentry 目前未 active；重新部署後再評估。",
      "next_action": "服務 active 後重新納入 P1-102 readiness。"
    },
    {
      "target_id": "offsite_rclone_full_sync",
      "display_name": "Google Drive / rclone offsite mirror",
      "overall_readiness": "ready",
      "freshness_status": "verified",
      "integrity_status": "verified",
      "restore_drill_status": "not_applicable",
      "offsite_status": "verified",
      "notification_policy": "offsite success 不即時洗版；verify failure 必須 action-required。",
      "gate_status": "read_only_allowed",
      "evidence_level": "runbook_live_refresh",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/sync-offsite-backups.sh", "scripts/backup/verify-offsite-full-sync.sh"],
      "blocker_summary": "無 target-level blocker；sync execution 仍不可由 Agent 自動觸發。",
      "next_action": "P1-104 顯示 latest-only remote verify。"
    },
    {
      "target_id": "credential_escrow_markers",
      "display_name": "Credential escrow evidence markers",
      "overall_readiness": "blocked",
      "freshness_status": "blocked",
      "integrity_status": "not_applicable",
      "restore_drill_status": "blocked",
      "offsite_status": "not_applicable",
      "notification_policy": "missing markers must stay action-required；不得成功洗版。",
      "gate_status": "credential_approval_required",
      "evidence_level": "blocked_live_evidence",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "scripts/backup/mark-credential-escrow-verified.sh", "scripts/backup/offsite-escrow-evidence-report.sh"],
      "blocker_summary": "Five evidence markers missing；不得自動寫 marker 或暴露 credential。",
      "next_action": "P1-105 起草人工 escrow review 批准包。"
    },
    {
      "target_id": "velero_k8s_resources",
      "display_name": "Velero K8s resource snapshots",
      "overall_readiness": "action_required",
      "freshness_status": "needs_metric_binding",
      "integrity_status": "needs_metric_binding",
      "restore_drill_status": "approval_required",
      "offsite_status": "needs_metric_binding",
      "notification_policy": "restore drill / Velero failure 必須 action-required。",
      "gate_status": "restore_approval_required",
      "evidence_level": "committed_script",
      "evidence_refs": ["docs/runbooks/BACKUP-STATUS.md", "k8s/awoooi-prod/16-cronjob-backup-restore-test.yaml"],
      "blocker_summary": "Velero / MinIO freshness 與 independent offsite 仍需 metric binding；restore drill 需人工批准。",
      "next_action": "P1-104 顯示 Velero metric gap；P1-105 產生 restore drill 批准包。"
    }
  ],
  "operation_boundaries": {
    "read_only_api_allowed": true,
    "backup_execution_allowed": false,
    "restore_execution_allowed": false,
    "offsite_sync_execution_allowed": false,
    "credential_marker_write_allowed": false,
    "schedule_change_allowed": false,
    "destructive_prune_allowed": false
  },
  "approval_boundaries": {
    "sdk_installation_allowed": false,
    "paid_api_call_allowed": false,
    "shadow_or_canary_allowed": false,
    "production_routing_allowed": false,
    "destructive_operation_allowed": false
  }
}
