1508 lines
60 KiB
JSON
1508 lines
60 KiB
JSON
{
|
||
"backup_surfaces": [
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"gitea",
|
||
"momo",
|
||
"harbor",
|
||
"awoooi",
|
||
"langfuse",
|
||
"monitoring",
|
||
"signoz",
|
||
"open-webui",
|
||
"clawbot"
|
||
],
|
||
"config_kind": "backup_orchestrator",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "write_capable_orchestrator_visible_not_executed",
|
||
"expected_scope": "110_backup_host_all_services",
|
||
"label": "全服務備份總控",
|
||
"line_count": 126,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 backup owner、cron owner、失敗通知 owner、restore drill owner、rollback owner 與 post-check 指標。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "33f6070bd3733fc59e7b661de44587b7d6a336500765667405e11fbffe2f4489",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-all.sh",
|
||
"surface_id": "backup_all_orchestrator"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"RESTIC_PASSWORD_FILE",
|
||
"B2 metadata",
|
||
"KEEP_DAILY=30",
|
||
"KEEP_WEEKLY=12",
|
||
"KEEP_MONTHLY=24"
|
||
],
|
||
"config_kind": "backup_common_policy",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "retention_and_credential_metadata_visible_secret_values_absent",
|
||
"expected_scope": "restic_password_b2_retention_common",
|
||
"label": "Restic 共用設定與 GFS retention",
|
||
"line_count": 147,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 restic password owner、B2 / rclone owner、retention owner、prune window 與 no-secret-value evidence。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "00139e1eac8998b1e0cb09d7692882267d8cc72a6c57c04a732e155932ad22d1",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/common.sh",
|
||
"surface_id": "backup_common_restic_retention"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Gitea DB",
|
||
"repositories",
|
||
"app.ini redaction boundary"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "gitea_database_and_repositories",
|
||
"label": "Gitea 備份腳本",
|
||
"line_count": 68,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Gitea backup owner、freshness evidence、restore target isolation 與 secret redaction proof。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "8ec9f0e5aee51381a799da83798fea4ca92d0c1686e40aef9f6ba8485003a990",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-gitea.sh",
|
||
"surface_id": "backup_gitea_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"MOMO PostgreSQL",
|
||
"188 database path"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "momo_postgresql",
|
||
"label": "MOMO PostgreSQL 備份腳本",
|
||
"line_count": 84,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 MOMO backup owner、188 DB access boundary、restore drill target 與 rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "7cffdc570cd4b33a42b3604382eccc14a5388ed0a2fb67c9927312982c29a6cd",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-momo.sh",
|
||
"surface_id": "backup_momo_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Harbor registry",
|
||
"Harbor DB",
|
||
"image registry recovery"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "harbor_registry_and_database",
|
||
"label": "Harbor 備份腳本",
|
||
"line_count": 77,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Harbor backup owner、registry restore smoke、robot account secret boundary 與 image rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "f42af4c7b66ceb19b504873bdf1ca76d306d6c775bbd8d5d6648249db6756595",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-harbor.sh",
|
||
"surface_id": "backup_harbor_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"awoooi_prod",
|
||
"awoooi_dev",
|
||
"k3s datastore"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "awoooi_postgresql_and_k3s_datastore",
|
||
"label": "AWOOOI PostgreSQL 完整備份腳本",
|
||
"line_count": 123,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 AWOOOI DB backup owner、RPO owner、restore drill isolation 與 data masking policy。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "90eaed60f8ef4994bb082bd7f2e7c5b5ec8872270f8a014b72298de0ec34f658",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-awoooi.sh",
|
||
"surface_id": "backup_awoooi_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"awoooi_prod",
|
||
"6h RPO",
|
||
"latest-only interaction"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "high_frequency_backup_script_visible_gate_closed",
|
||
"expected_scope": "awoooi_postgresql_high_frequency",
|
||
"label": "AWOOOI PostgreSQL 高頻備份腳本",
|
||
"line_count": 76,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補高頻備份 owner、cron owner、latest-only retention owner 與 freshness evidence。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "171de6e757dbb7e4ee0d88b8d1cbc9471e288e58b189098b77cac14392461a39",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-awoooi-frequent.sh",
|
||
"surface_id": "backup_awoooi_frequent_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Langfuse DB",
|
||
"AI trace evidence"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "langfuse_ai_trace_database",
|
||
"label": "Langfuse 備份腳本",
|
||
"line_count": 69,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Langfuse backup owner、trace privacy boundary、restore smoke 與 secret redaction proof。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "a60cea2e366be228e35492a87edc084261d1888591ca583083f4b909ba995cd9",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-langfuse.sh",
|
||
"surface_id": "backup_langfuse_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Prometheus",
|
||
"Grafana",
|
||
"Alertmanager"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "prometheus_grafana_alertmanager",
|
||
"label": "Monitoring 備份腳本",
|
||
"line_count": 109,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 observability backup owner、Grafana secret boundary、alert route restore smoke 與 rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "e848315116b87ce250db6e1483d8e517e2c4c07ca1fc6e119ae8f80ad58d6183",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-monitoring.sh",
|
||
"surface_id": "backup_monitoring_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"SigNoz ClickHouse",
|
||
"SigNoz SQLite"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "signoz_clickhouse_and_sqlite",
|
||
"label": "SigNoz 備份腳本",
|
||
"line_count": 103,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 SigNoz disruptive guard owner、ClickHouse restore owner、告警靜音邊界與 post-check 指標。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "f3d9011b57815087ce0084525902693078c2785c25632d49c7a7a92e6a49bcf7",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-signoz.sh",
|
||
"surface_id": "backup_signoz_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Open-WebUI volume",
|
||
"LLM conversation data"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "open_webui_volume",
|
||
"label": "Open-WebUI 備份腳本",
|
||
"line_count": 70,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Open-WebUI data privacy owner、188 read boundary、restore target isolation 與 retention owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "ab9fb4664799ef424cc9c3565592d9b6704df90bafda1f163e5cbfe01ff6056d",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-open-webui.sh",
|
||
"surface_id": "backup_open_webui_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"ClawBot Redis",
|
||
"agent state cache"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "clawbot_redis_state",
|
||
"label": "ClawBot Redis 備份腳本",
|
||
"line_count": 75,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 ClawBot state owner、Redis restore owner、agent state masking 與 rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "9ad2367d42ca2ce679ce7c24ca2dabcdc9feccde668f4008a5a797165a2f4888",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-clawbot.sh",
|
||
"surface_id": "backup_clawbot_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Sentry",
|
||
"ClickHouse / Postgres / Redis dependency boundary"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "service_backup_script_visible_gate_closed",
|
||
"expected_scope": "sentry_self_hosted",
|
||
"label": "Sentry 備份腳本",
|
||
"line_count": 277,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Sentry backup owner、multi-store restore owner、admin secret boundary 與 route smoke。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "bbd09420a7814d6dfa2b8caade264e00c982b0b10fb9b57866893d02ef5eed44",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-sentry.sh",
|
||
"surface_id": "backup_sentry_service_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"AI artifacts",
|
||
"model / evaluation outputs"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "artifact_backup_script_visible_gate_closed",
|
||
"expected_scope": "ai_artifacts",
|
||
"label": "AI artifacts 備份腳本",
|
||
"line_count": 129,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 artifact owner、retention owner、模型資料外送邊界與 restore validation。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "9dfbd45fcca516c75c06b062c79245397e2c0cf6db547472f1a5e48ee55f772b",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-ai-artifacts.sh",
|
||
"surface_id": "backup_ai_artifacts_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"public routes",
|
||
"Nginx route reconstruction",
|
||
"frontend/API smoke evidence"
|
||
],
|
||
"config_kind": "service_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "route_backup_script_visible_gate_closed",
|
||
"expected_scope": "public_route_reconstruction",
|
||
"label": "Public routes 備份腳本",
|
||
"line_count": 182,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 route reconstruction owner、public/admin/API smoke、rollback ref 與 no-internal-transcript proof。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "828c87b8c9eed4dcb9a4dd55d36905636f74c890e1625792a2f14bfd53c7973c",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-public-routes.sh",
|
||
"surface_id": "backup_public_routes_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"systemd",
|
||
"docker",
|
||
"nginx",
|
||
"cron",
|
||
"k8s",
|
||
"host configs"
|
||
],
|
||
"config_kind": "config_backup_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "config_capture_visible_blocked_until_owner_evidence",
|
||
"expected_scope": "110_188_120_121_cluster_configs",
|
||
"label": "Host / service / K8s 設定備份",
|
||
"line_count": 359,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 config capture owner、secret redaction proof、120 blocked disposition、restore validation 與 retention owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "d24301cff44e464bd19ce0792362be16916ccde8c92f92351a19ef4ee988f15e",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-configs.sh",
|
||
"surface_id": "config_backup_capture"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"freshness",
|
||
"failure",
|
||
"integrity",
|
||
"restore drill",
|
||
"offsite",
|
||
"escrow"
|
||
],
|
||
"config_kind": "backup_status_reporter",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "status_reporter_visible_not_executed",
|
||
"expected_scope": "110_188_backup_status_summary",
|
||
"label": "備份狀態彙整腳本",
|
||
"line_count": 342,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 backup status owner、read-only execution window、SSH read boundary、notification owner 與 false-green 防線。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "ae7d18d120f4441747d8ecce763e55bca235f923c01e0dac9b566b2d00f9bf0c",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-status.sh",
|
||
"surface_id": "backup_status_reporter"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"restic check",
|
||
"read-data subset",
|
||
"integrity evidence"
|
||
],
|
||
"config_kind": "integrity_check_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "integrity_check_visible_not_executed",
|
||
"expected_scope": "restic_integrity_check",
|
||
"label": "Restic integrity check",
|
||
"line_count": 238,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 integrity check owner、執行窗口、資源上限、結果證據與 restore drill 前置條件。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "c2906ac4a7251419decf852eaeb7c1ead5eecd4f705804dfc556f23029e45ebc",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/check-backup-integrity.sh",
|
||
"surface_id": "backup_integrity_check"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"keep latest",
|
||
"local delete",
|
||
"retention marker"
|
||
],
|
||
"config_kind": "retention_enforcer",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "delete_capable_retention_script_visible_gate_closed",
|
||
"expected_scope": "latest_only_retention",
|
||
"label": "Latest-only retention enforcer",
|
||
"line_count": 42,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 retention owner、刪除窗口、restore runway、offsite mirror interaction 與 rollback / stop condition。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "b8ca6363c8d08866fd9cbcb6b47dfa310ffada588323ab48c48babf9b301b129",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/enforce-latest-only-retention.sh",
|
||
"surface_id": "latest_only_retention_enforcer"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"13 repos",
|
||
"rclone sync",
|
||
"remote delete",
|
||
"success markers"
|
||
],
|
||
"config_kind": "offsite_sync_controller",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "remote_write_and_delete_capable_sync_visible_gate_closed",
|
||
"expected_scope": "google_drive_rclone_offsite_mirror",
|
||
"label": "Offsite rclone sync controller",
|
||
"line_count": 414,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 offsite owner、remote delete owner、runway check、full sync window、rclone credential escrow 與 verifier evidence。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "6b669b1fbf74d7b0f2b38f530d6c345e69c8eca5257ad2782751a1230091c839",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/sync-offsite-backups.sh",
|
||
"surface_id": "offsite_sync_controller"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"remote repo count",
|
||
"latest-only evidence",
|
||
"textfile metrics"
|
||
],
|
||
"config_kind": "offsite_verifier",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "remote_read_and_textfile_write_capable_verifier_visible_gate_closed",
|
||
"expected_scope": "offsite_full_sync_verification",
|
||
"label": "Offsite full sync verifier",
|
||
"line_count": 296,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 verifier owner、remote read window、metric write owner、failure notification owner 與 evidence retention。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "1614f6d73d65f9f68f8991ee5d198de66933fc35be8ab1ae1ad5aba3c4fdad31",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/verify-offsite-full-sync.sh",
|
||
"surface_id": "offsite_full_sync_verifier"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"status",
|
||
"dry-run-small",
|
||
"pre-full-sync",
|
||
"escrow markers"
|
||
],
|
||
"config_kind": "offsite_readiness_gate",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "readiness_gate_visible_not_executed",
|
||
"expected_scope": "offsite_preflight_and_escrow_gate",
|
||
"label": "Offsite readiness gate",
|
||
"line_count": 436,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 readiness owner、dry-run scope、escrow owner、load/runway policy 與 accepted evidence refs。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "6e0cdb57dc8ea80097d1dd4bb6c87c39c13f2a2892b767c0c251eca524e33e19",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/backup-offsite-readiness-gate.sh",
|
||
"surface_id": "offsite_readiness_gate"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"script presence",
|
||
"offsite marker",
|
||
"escrow marker",
|
||
"redacted output"
|
||
],
|
||
"config_kind": "offsite_escrow_report",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "redacted_report_visible_default_no_remote_status",
|
||
"expected_scope": "offsite_escrow_redacted_report",
|
||
"label": "Offsite / escrow evidence report",
|
||
"line_count": 262,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 evidence report owner、remote status opt-in owner、redaction proof 與 blocked marker disposition。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "09e07c94fd192dc9015a468eb376a4eeba09e3392586a9a2a178b1f7b58c9c50",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/offsite-escrow-evidence-report.sh",
|
||
"surface_id": "offsite_escrow_evidence_report"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"restic password",
|
||
"offsite provider",
|
||
"break-glass admin",
|
||
"DNS recovery",
|
||
"OAuth / AI provider recovery"
|
||
],
|
||
"config_kind": "credential_escrow_marker",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "marker_write_capable_script_visible_gate_closed",
|
||
"expected_scope": "credential_escrow_markers",
|
||
"label": "Credential escrow marker writer",
|
||
"line_count": 228,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 escrow owner、non-secret evidence id、reviewer acceptance、marker write approval 與 retention owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "ebb0ffd77dced76ff58855a637e7e35e0ffa0fa9f5f33490c00015d91f0ce947",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/mark-credential-escrow-verified.sh",
|
||
"surface_id": "credential_escrow_marker"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"rclone remote",
|
||
"Google Drive",
|
||
"offsite.env metadata"
|
||
],
|
||
"config_kind": "offsite_rclone_config",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "credential_config_helper_visible_secret_values_not_collected",
|
||
"expected_scope": "rclone_config_metadata",
|
||
"label": "rclone offsite config helper",
|
||
"line_count": 251,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 rclone config owner、secret store owner、file mode evidence、no-value collection proof 與 recovery owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "b8881508ad82201ed4b706c5ea05250d46e907d23f097f9019fcab387c4623da",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/configure-offsite-rclone.sh",
|
||
"surface_id": "offsite_rclone_config"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Backblaze B2 metadata",
|
||
"offsite env",
|
||
"fallback provider"
|
||
],
|
||
"config_kind": "offsite_b2_config",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "credential_config_helper_visible_secret_values_not_collected",
|
||
"expected_scope": "b2_config_metadata",
|
||
"label": "B2 offsite config helper",
|
||
"line_count": 154,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 B2 provider owner、credential escrow owner、provider cost boundary 與 no-value collection proof。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "b3f847158bc48791e75ccb4a8430f3c88797f83f384c0f03d80c28f3037a170e",
|
||
"source_exists": true,
|
||
"source_path": "scripts/backup/configure-offsite-b2.sh",
|
||
"surface_id": "offsite_b2_config"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"freshness metrics",
|
||
"restore drill metrics",
|
||
"offsite metrics",
|
||
"escrow metrics"
|
||
],
|
||
"config_kind": "backup_health_exporter",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "textfile_write_capable_exporter_visible_gate_closed",
|
||
"expected_scope": "backup_health_prometheus_textfile",
|
||
"label": "Backup health textfile exporter",
|
||
"line_count": 926,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 exporter owner、textfile path owner、metric freshness SLO、false-green guard 與 alert owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "cc4a0b89321679e4c39c8d3ba85b7308eb0d1f800c82895dcb71741a9dceaddc",
|
||
"source_exists": true,
|
||
"source_path": "scripts/ops/backup-health-textfile-exporter.py",
|
||
"surface_id": "backup_health_textfile_exporter"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Velero restore dry-run",
|
||
"weekly schedule",
|
||
"textfile metrics"
|
||
],
|
||
"config_kind": "velero_restore_cronjob",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "k8s_cronjob_manifest_visible_not_applied_by_this_inventory",
|
||
"expected_scope": "velero_weekly_restore_dry_run",
|
||
"label": "Velero restore dry-run CronJob",
|
||
"line_count": 76,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Velero owner、dry-run namespace isolation、CronJob live evidence、restore approval 與 post-check 指標。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "356ab2223d0fc2e1b4d7e4e1163ef23bed62e1c22588c46ffd010d090359557b",
|
||
"source_exists": true,
|
||
"source_path": "k8s/awoooi-prod/16-cronjob-backup-restore-test.yaml",
|
||
"surface_id": "velero_restore_test_cronjob"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"restore dry-run script",
|
||
"13-digit textfile timestamp risk",
|
||
"Prometheus textfile"
|
||
],
|
||
"config_kind": "velero_restore_script_configmap",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "configmap_script_visible_timestamp_format_needs_owner_disposition",
|
||
"expected_scope": "velero_restore_script_configmap",
|
||
"label": "Velero restore script ConfigMap",
|
||
"line_count": 49,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 ConfigMap owner、timestamp format disposition、CronJob rollout owner、metric scrape proof 與 rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "c3e4605372a9f5c5f94713e1f8b5d8d0dccd6886c76c43522053e1468521bc1d",
|
||
"source_exists": true,
|
||
"source_path": "k8s/awoooi-prod/17-configmap-backup-restore-scripts.yaml",
|
||
"surface_id": "velero_restore_test_script_configmap"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"restore dry-run",
|
||
"Prometheus textfile seconds timestamp",
|
||
"failure metric"
|
||
],
|
||
"config_kind": "velero_restore_standalone_script",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "standalone_script_visible_uses_seconds_textfile_timestamp_not_executed",
|
||
"expected_scope": "velero_standalone_restore_script",
|
||
"label": "Velero restore dry-run standalone script",
|
||
"line_count": 62,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 standalone / ConfigMap drift disposition、restore drill owner、textfile owner 與 proof of isolation。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "960cd740d6107c7f70b09dd8ff4c934af76d82921b066ba92c6fac2af7d55622",
|
||
"source_exists": true,
|
||
"source_path": "scripts/cron_backup_restore_test.sh",
|
||
"surface_id": "velero_standalone_restore_test_script"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"MinIO credential names",
|
||
"placeholder values",
|
||
"External Secrets / Sealed Secrets recommendation"
|
||
],
|
||
"config_kind": "velero_credentials_manifest",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "placeholder_secret_manifest_visible_values_not_collected",
|
||
"expected_scope": "velero_minio_credentials_metadata",
|
||
"label": "Velero MinIO credential manifest",
|
||
"line_count": 14,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Velero credential owner、secret manager source、rotation owner、no-value collection proof 與 restore boundary。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "54d829a3204c2fa2d1bb3c8be1bf250914dd7a517d13900bee0fa9878760c930",
|
||
"source_exists": true,
|
||
"source_path": "k8s/velero/01-credentials.yaml",
|
||
"surface_id": "velero_credentials_manifest"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"Velero Deployment",
|
||
"cluster-admin binding",
|
||
"MinIO s3Url",
|
||
"backup storage location"
|
||
],
|
||
"config_kind": "velero_install_manifest",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "cluster_admin_velero_manifest_visible_gate_closed",
|
||
"expected_scope": "velero_install_and_minio_storage",
|
||
"label": "Velero install manifest",
|
||
"line_count": 117,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 Velero RBAC owner、MinIO endpoint owner、least privilege review、install window 與 rollback owner。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "60d7ea59ef8b2ad38dc8bf6bca80be35609e8d317210c44204bdd5ad9901b47a",
|
||
"source_exists": true,
|
||
"source_path": "k8s/velero/02-velero-install.yaml",
|
||
"surface_id": "velero_install_manifest"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"BackupRestoreTestFailed",
|
||
"Velero freshness",
|
||
"offsite freshness",
|
||
"restore stale"
|
||
],
|
||
"config_kind": "backup_restore_alert_rules",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "alert_rule_source_visible_reload_not_authorized",
|
||
"expected_scope": "backup_restore_prometheus_alerts",
|
||
"label": "Backup / restore alert rules",
|
||
"line_count": 1355,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 alert rule owner、receiver owner、reload owner、silence boundary 與 failure-only notification policy。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "94d439a2ea599995601a5022dc0a001cc09f405964cd1308b103f86e2af14e90",
|
||
"source_exists": true,
|
||
"source_path": "ops/monitoring/alerts.yml",
|
||
"surface_id": "backup_restore_alert_rules"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"readiness matrix",
|
||
"blocked targets",
|
||
"restore drill status"
|
||
],
|
||
"config_kind": "dr_readiness_contract",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "readiness_contract_visible_action_required_items_not_accepted",
|
||
"expected_scope": "backup_dr_readiness_contract",
|
||
"label": "Backup / DR readiness matrix",
|
||
"line_count": 321,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 readiness owner、blocked target disposition、freshness evidence、restore drill owner 與 accepted refs。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "6d116173b5842bd8813e4a9815cb7a70be1677b44abd01b0dfa26bbd9bf2d7fd",
|
||
"source_exists": true,
|
||
"source_path": "docs/evaluations/backup_dr_readiness_matrix_2026-06-04.json",
|
||
"surface_id": "backup_dr_readiness_contract"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"database restore",
|
||
"configuration restore",
|
||
"credential escrow",
|
||
"K8s restore",
|
||
"observability restore"
|
||
],
|
||
"config_kind": "restore_drill_approval_template",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "approval_template_visible_no_restore_execution",
|
||
"expected_scope": "restore_drill_approval_template",
|
||
"label": "Restore drill approval package template",
|
||
"line_count": 510,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 owner response 實際封包、隔離環境、observer、rollback owner 與 restore stop condition。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "321a6007ba205d6342e4bf2171aff997ea305c7b0a72acc6b32e1258d62656fc",
|
||
"source_exists": true,
|
||
"source_path": "docs/evaluations/backup_restore_drill_approval_package_template_2026-06-05.json",
|
||
"surface_id": "backup_restore_drill_approval_template"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"offsite_rclone_full_sync",
|
||
"credential_escrow_markers",
|
||
"velero_k8s_resources"
|
||
],
|
||
"config_kind": "offsite_escrow_readiness_contract",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "offsite_verified_but_escrow_and_velero_blocked",
|
||
"expected_scope": "offsite_escrow_readiness_contract",
|
||
"label": "Offsite / escrow readiness status",
|
||
"line_count": 163,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 escrow marker owner、Velero metric binding、remote evidence expiry owner 與 offsite sync approval boundary。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "7f7ac8e378d9d3d07d41b7a5ac45991ed67e9115d4a24cbc1da2aa9d392aea94",
|
||
"source_exists": true,
|
||
"source_path": "docs/evaluations/offsite_escrow_readiness_status_2026-06-05.json",
|
||
"surface_id": "offsite_escrow_readiness_contract"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"110 backup center",
|
||
"latest-only",
|
||
"Google Drive / rclone",
|
||
"credential escrow",
|
||
"120 blocker"
|
||
],
|
||
"config_kind": "backup_status_runbook",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "runbook_visible_contains_live_refresh_notes_needs_revalidation",
|
||
"expected_scope": "backup_status_runbook",
|
||
"label": "Backup status runbook",
|
||
"line_count": 160,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補截至本次階段的 owner-provided live refresh、stale evidence disposition、escrow blocker owner 與 validation refs。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "282fc9cac91236225005399cf668609eb142c52ab48a9b1aebe3d7e0a4572462",
|
||
"source_exists": true,
|
||
"source_path": "docs/runbooks/BACKUP-STATUS.md",
|
||
"surface_id": "backup_status_runbook"
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"backup_scope": [
|
||
"cold start",
|
||
"backup-all",
|
||
"sync-offsite",
|
||
"restore guard",
|
||
"schedules"
|
||
],
|
||
"config_kind": "cold_start_sop",
|
||
"control_tier": "C0",
|
||
"credential_escrow_accepted": false,
|
||
"current_state": "sop_visible_contains_backup_commands_not_authorized",
|
||
"expected_scope": "cold_start_backup_restore_recovery",
|
||
"label": "Full-stack cold-start SOP",
|
||
"line_count": 704,
|
||
"live_evidence_received": false,
|
||
"maintenance_window_accepted": false,
|
||
"next_owner_action": "補 cold-start commander owner、backup command approval boundary、restore stop condition、rollback owner 與 post-start validation。",
|
||
"offsite_sync_accepted": false,
|
||
"owner_response_accepted": false,
|
||
"owner_response_received": false,
|
||
"requires_live_evidence": true,
|
||
"requires_owner_response": true,
|
||
"restore_drill_accepted": false,
|
||
"retention_change_accepted": false,
|
||
"rollback_owner_accepted": false,
|
||
"runtime_gate_open": false,
|
||
"sha256": "82d52e414876c46fe37dbe0e4447ebf1b26011d6bde2bfadb07978f09715ea94",
|
||
"source_exists": true,
|
||
"source_path": "docs/runbooks/FULL-STACK-COLD-START-SOP.md",
|
||
"surface_id": "cold_start_sop"
|
||
}
|
||
],
|
||
"execution_boundaries": {
|
||
"action_buttons_allowed": false,
|
||
"active_scan_authorized": false,
|
||
"backup_run_authorized": false,
|
||
"credential_escrow_marker_write_authorized": false,
|
||
"host_write_authorized": false,
|
||
"kubectl_action_authorized": false,
|
||
"offsite_remote_delete_authorized": false,
|
||
"offsite_sync_authorized": false,
|
||
"rclone_config_authorized": false,
|
||
"restic_prune_authorized": false,
|
||
"restore_drill_authorized": false,
|
||
"restore_run_authorized": false,
|
||
"retention_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"secret_value_collection_allowed": false,
|
||
"ssh_read_authorized": false,
|
||
"ssh_write_authorized": false,
|
||
"velero_backup_authorized": false,
|
||
"velero_restore_authorized": false
|
||
},
|
||
"expected_scopes": [
|
||
"110_188_120_121_cluster_configs",
|
||
"110_188_backup_status_summary",
|
||
"110_backup_host_all_services",
|
||
"ai_artifacts",
|
||
"awoooi_postgresql_and_k3s_datastore",
|
||
"awoooi_postgresql_high_frequency",
|
||
"b2_config_metadata",
|
||
"backup_dr_readiness_contract",
|
||
"backup_health_prometheus_textfile",
|
||
"backup_restore_prometheus_alerts",
|
||
"backup_status_runbook",
|
||
"clawbot_redis_state",
|
||
"cold_start_backup_restore_recovery",
|
||
"credential_escrow_markers",
|
||
"gitea_database_and_repositories",
|
||
"google_drive_rclone_offsite_mirror",
|
||
"harbor_registry_and_database",
|
||
"langfuse_ai_trace_database",
|
||
"latest_only_retention",
|
||
"momo_postgresql",
|
||
"offsite_escrow_readiness_contract",
|
||
"offsite_escrow_redacted_report",
|
||
"offsite_full_sync_verification",
|
||
"offsite_preflight_and_escrow_gate",
|
||
"open_webui_volume",
|
||
"prometheus_grafana_alertmanager",
|
||
"public_route_reconstruction",
|
||
"rclone_config_metadata",
|
||
"restic_integrity_check",
|
||
"restic_password_b2_retention_common",
|
||
"restore_drill_approval_template",
|
||
"sentry_self_hosted",
|
||
"signoz_clickhouse_and_sqlite",
|
||
"velero_install_and_minio_storage",
|
||
"velero_minio_credentials_metadata",
|
||
"velero_restore_script_configmap",
|
||
"velero_standalone_restore_script",
|
||
"velero_weekly_restore_dry_run"
|
||
],
|
||
"generated_at": "2026-06-11T22:20:00+08:00",
|
||
"git_commit": "dba91f3c",
|
||
"next_collection_order": [
|
||
"backup_common_restic_retention",
|
||
"offsite_sync_controller",
|
||
"credential_escrow_marker",
|
||
"velero_restore_test_script_configmap",
|
||
"velero_credentials_manifest",
|
||
"backup_health_textfile_exporter",
|
||
"backup_restore_alert_rules",
|
||
"backup_restore_drill_approval_template",
|
||
"backup_status_runbook",
|
||
"cold_start_sop"
|
||
],
|
||
"operator_interpretation": [
|
||
"這是 repo-only backup / restore / escrow / retention 清冊,不是 live backup、remote provider 或 cluster truth。",
|
||
"source_exists=true 只代表 repo 檔案存在;不代表備份已成功、restore drill 已執行、offsite sync 已授權或 escrow marker 已可寫入。",
|
||
"write-capable surface 可見代表需要資安控管,不代表 backup、restore、rclone sync、remote delete、restic prune、Velero restore 或 kubectl 已授權。",
|
||
"所有 owner response、live evidence、restore drill acceptance、offsite sync acceptance、credential escrow acceptance、retention change acceptance 與 runtime gate 仍為 0。"
|
||
],
|
||
"schema_version": "backup_restore_escrow_inventory_v1",
|
||
"source_scope": "committed_repo_files_only",
|
||
"status": "repo_only_inventory_ready",
|
||
"summary": {
|
||
"action_button_count": 0,
|
||
"alert_surface_count": 1,
|
||
"backup_script_surface_count": 15,
|
||
"coverage_percent_after_inventory": 58,
|
||
"coverage_percent_before_inventory": 52,
|
||
"credential_escrow_accepted_count": 0,
|
||
"credential_surface_count": 5,
|
||
"dr_readiness_contract_surface_count": 3,
|
||
"expected_scope_count": 38,
|
||
"live_evidence_received_count": 0,
|
||
"maintenance_window_accepted_count": 0,
|
||
"offsite_escrow_surface_count": 8,
|
||
"offsite_sync_accepted_count": 0,
|
||
"owner_response_accepted_count": 0,
|
||
"owner_response_received_count": 0,
|
||
"restore_drill_accepted_count": 0,
|
||
"restore_drill_surface_count": 4,
|
||
"retention_change_accepted_count": 0,
|
||
"retention_surface_count": 3,
|
||
"rollback_owner_accepted_count": 0,
|
||
"runtime_gate_count": 0,
|
||
"source_exists_count": 38,
|
||
"surface_count": 38,
|
||
"surfaces_requiring_live_evidence_count": 38,
|
||
"surfaces_requiring_owner_response_count": 38,
|
||
"velero_surface_count": 5,
|
||
"write_capable_surface_count": 27
|
||
},
|
||
"write_capable_surfaces": [
|
||
{
|
||
"config_kind": "backup_orchestrator",
|
||
"expected_scope": "110_backup_host_all_services",
|
||
"label": "全服務備份總控",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_all_orchestrator"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "gitea_database_and_repositories",
|
||
"label": "Gitea 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_gitea_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "momo_postgresql",
|
||
"label": "MOMO PostgreSQL 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_momo_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "harbor_registry_and_database",
|
||
"label": "Harbor 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_harbor_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "awoooi_postgresql_and_k3s_datastore",
|
||
"label": "AWOOOI PostgreSQL 完整備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_awoooi_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "awoooi_postgresql_high_frequency",
|
||
"label": "AWOOOI PostgreSQL 高頻備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_awoooi_frequent_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "langfuse_ai_trace_database",
|
||
"label": "Langfuse 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_langfuse_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "prometheus_grafana_alertmanager",
|
||
"label": "Monitoring 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_monitoring_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "signoz_clickhouse_and_sqlite",
|
||
"label": "SigNoz 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_signoz_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "open_webui_volume",
|
||
"label": "Open-WebUI 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_open_webui_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "clawbot_redis_state",
|
||
"label": "ClawBot Redis 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_clawbot_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "sentry_self_hosted",
|
||
"label": "Sentry 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_sentry_service_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "ai_artifacts",
|
||
"label": "AI artifacts 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_ai_artifacts_script"
|
||
},
|
||
{
|
||
"config_kind": "service_backup_script",
|
||
"expected_scope": "public_route_reconstruction",
|
||
"label": "Public routes 備份腳本",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_public_routes_script"
|
||
},
|
||
{
|
||
"config_kind": "config_backup_script",
|
||
"expected_scope": "110_188_120_121_cluster_configs",
|
||
"label": "Host / service / K8s 設定備份",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "config_backup_capture"
|
||
},
|
||
{
|
||
"config_kind": "retention_enforcer",
|
||
"expected_scope": "latest_only_retention",
|
||
"label": "Latest-only retention enforcer",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "latest_only_retention_enforcer"
|
||
},
|
||
{
|
||
"config_kind": "offsite_sync_controller",
|
||
"expected_scope": "google_drive_rclone_offsite_mirror",
|
||
"label": "Offsite rclone sync controller",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "offsite_sync_controller"
|
||
},
|
||
{
|
||
"config_kind": "offsite_verifier",
|
||
"expected_scope": "offsite_full_sync_verification",
|
||
"label": "Offsite full sync verifier",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "offsite_full_sync_verifier"
|
||
},
|
||
{
|
||
"config_kind": "credential_escrow_marker",
|
||
"expected_scope": "credential_escrow_markers",
|
||
"label": "Credential escrow marker writer",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "credential_escrow_marker"
|
||
},
|
||
{
|
||
"config_kind": "offsite_rclone_config",
|
||
"expected_scope": "rclone_config_metadata",
|
||
"label": "rclone offsite config helper",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "offsite_rclone_config"
|
||
},
|
||
{
|
||
"config_kind": "offsite_b2_config",
|
||
"expected_scope": "b2_config_metadata",
|
||
"label": "B2 offsite config helper",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "offsite_b2_config"
|
||
},
|
||
{
|
||
"config_kind": "backup_health_exporter",
|
||
"expected_scope": "backup_health_prometheus_textfile",
|
||
"label": "Backup health textfile exporter",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "backup_health_textfile_exporter"
|
||
},
|
||
{
|
||
"config_kind": "velero_restore_cronjob",
|
||
"expected_scope": "velero_weekly_restore_dry_run",
|
||
"label": "Velero restore dry-run CronJob",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "velero_restore_test_cronjob"
|
||
},
|
||
{
|
||
"config_kind": "velero_restore_script_configmap",
|
||
"expected_scope": "velero_restore_script_configmap",
|
||
"label": "Velero restore script ConfigMap",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "velero_restore_test_script_configmap"
|
||
},
|
||
{
|
||
"config_kind": "velero_restore_standalone_script",
|
||
"expected_scope": "velero_standalone_restore_script",
|
||
"label": "Velero restore dry-run standalone script",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "velero_standalone_restore_test_script"
|
||
},
|
||
{
|
||
"config_kind": "velero_credentials_manifest",
|
||
"expected_scope": "velero_minio_credentials_metadata",
|
||
"label": "Velero MinIO credential manifest",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "velero_credentials_manifest"
|
||
},
|
||
{
|
||
"config_kind": "velero_install_manifest",
|
||
"expected_scope": "velero_install_and_minio_storage",
|
||
"label": "Velero install manifest",
|
||
"required_gate": "owner_response_plus_maintenance_window_plus_rollback_owner",
|
||
"surface_id": "velero_install_manifest"
|
||
}
|
||
]
|
||
}
|