diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 692f1c678..b1b6d4cbb 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,49 @@ +## 2026-06-15|備份 / 還原 / 金庫 restore recovery 回補 Gate + +**背景**:備份與還原不能只看「有備份」或「health 顯示正常」,也不能把 offsite sync、remote delete、credential escrow、retention 或 restore drill 的 UI 可見狀態誤判成已授權。本階段補強 Backup / Restore / Escrow owner response acceptance,只建立只讀收件欄位、reviewer checks、outcome lanes、blocked actions 與前台可視化;不執行 backup、不 restore、不跑 offsite sync、不 remote delete、不寫 escrow marker、不改 retention、不讀 secret value、不碰主機。 + +**完成項目**: +- `scripts/security/backup-restore-owner-response-acceptance.py` 追加 restore recovery / freshness / isolation / dependency / classification / remote delete / retention / observer stop / credential recovery / no-false-green 欄位。 +- Backup / Restore / Escrow owner response acceptance 固定為 acceptance fields `33`、required owner response fields `23`、reviewer checks `22`、outcome lanes `9`、blocked actions `31`,所有 received / accepted / runtime / action count 仍為 `0`。 +- 新增 `restore_recovery_backfill_required` 與 `remote_delete_retention_review_required` outcome lanes,並阻擋缺 freshness SLO、缺隔離還原目標、缺 remote delete guard、缺 retention runway、缺 credential recovery 非明文證明、backup health false green、跳過 dependency map / data classification review 或保存 raw restore payload。 +- `high-value-config-control-coverage` 將 `backup_restore_credential` 只讀成熟度從 `62%` 推進到 `64%`,狀態為 `restore_recovery_backfill_ready_needs_owner_live_evidence`;高價值配置平均成熟度維持 `69%`,needs-live-evidence 類別維持 `10`。 +- `/zh-TW/iwooos` 前台顯示 `備份 / 還原 / 金庫`、`64%`、restore recovery、freshness SLO、隔離還原目標、遠端刪除保護、retention runway、credential recovery metadata-only 與 no-false-green backup health Gate;`en.json` 維持繁中鏡像。 + +**本地驗證**: +- JSON parse 驗證 `apps/web/messages/zh-TW.json`、`apps/web/messages/en.json` 與三份 security snapshot 通過。 +- `python3 -m py_compile scripts/security/backup-restore-owner-response-acceptance.py scripts/security/high-value-config-control-coverage.py scripts/security/iwooos-config-control-guard.py scripts/security/security-mirror-progress-guard.py` 通過。 +- `python3 scripts/security/iwooos-config-control-guard.py --root .` → `IWOOOS_CONFIG_CONTROL_GUARD_OK`。 +- `python3 scripts/security/security-mirror-progress-guard.py --root .` → `SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `python3 scripts/security/source-control-owner-response-guard.py --root .` → `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`。 +- `python3 scripts/security/package-supply-chain-owner-policy-guard.py --root .` → `PACKAGE_SUPPLY_CHAIN_OWNER_POLICY_GUARD_OK`。 +- `python3 scripts/ops/doc-secrets-sanity-check.py docs .gitea` → `DOC_SECRET_SANITY_OK scanned_files=871`。 +- `pnpm --filter @awoooi/web typecheck` 通過。 +- `git diff --check` 通過。 +- 前端敏感字串掃描未在產品文案中命中 `codex_delegation`、`source_thread_id`、逐字工作指令、原始 owner namespace、raw blocker 狀態或前台內網 IP;只命中既有遮罩規則與 Work Items 內部欄位名稱。 + +**Gitea / CD**: +- Code commit:`03590202 feat(iwooos): 強化備份復原金庫回補 gate`。 +- Code-review run:`3043`,成功。 +- CD run:`3042`,成功;`tests`、`build-and-deploy`、`post-deploy-checks` 皆成功。 +- Deploy marker:`b00a8174 chore(cd): deploy 0359020 [skip ci]`。 + +**Production 驗證**: +- in-app browser:`/zh-TW/iwooos?_v=b00a8174-backup-restore-smoke` 顯示 IwoooS、`備份 / 還原 / 金庫`、`64%`、restore recovery、freshness SLO、隔離還原目標、遠端刪除保護、retention runway、credential recovery metadata-only、no-false-green backup health Gate;console error `0`;頁面水平溢出 `0`;敏感字串命中 `0`。 +- Browser desktop `1280x720`:`/zh-TW/iwooos?_v=b00a8174-backup-restore-fixed-desktop` 回 `200`,console error `0`,`horizontalOverflow=0`,必填文案缺漏 `0`,敏感字串命中 `0`。 +- Browser mobile `390x844`:`/zh-TW/iwooos?_v=b00a8174-backup-restore-fixed-mobile` 回 `200`,console error `0`,`horizontalOverflow=0`,必填文案缺漏 `0`,敏感字串命中 `0`。 +- Browser mobile `390x844` 補充 route smoke:`/zh-TW/governance?tab=automation-inventory`、`/zh-TW/awooop/tenants`、`/zh-TW/code-review` 皆回 `200`、console error `0`、`horizontalOverflow=0`、敏感字串命中 `0`。 +- Browser 截圖: + - `/tmp/awoooi-iwooos-desktop-1280x720-b00a8174.png` + - `/tmp/awoooi-iwooos-mobile-390x844-b00a8174.png` + +**完成度與邊界**: +- Backup / Restore / Escrow restore recovery backfill gate:`0% -> 100%`。 +- Backup / restore / credential 只讀成熟度:`62% -> 64%`。 +- 高價值配置平均成熟度:維持 `69%`;needs-live-evidence 類別:`10`。 +- IwoooS headline 維持 `64%`;active runtime gate 維持 `0`。 +- owner response received / accepted、freshness SLO accepted、restore target isolation accepted、backup dependency map accepted、data classification accepted、remote delete guard accepted、retention runway accepted、restore observer stop condition accepted、credential recovery drill accepted、backup health no-false-green accepted、backup run、restore run、offsite sync、remote delete、retention change、secret collection、host write、production write、runtime execution、action button 全部維持 `0 / false`。 +- 本輪未 SSH、未讀 live backup raw payload、未執行 backup / restore / offsite sync、未 remote delete、未 restic prune、未寫 escrow marker、未改 retention、未改 Nginx、未重啟 Docker / service、未修改 firewall / iptables、未執行 active scan、未收 secrets 明文、未 force push。 + ## 2026-06-15|Docker / systemd 主機服務事故恢復回補 Gate **背景**:110 端口與服務異常後,IwoooS 不能只看「服務最後是否恢復」,也不能把 Docker / systemd / compose / repair bot / Ansible 的健康狀態誤判成配置已被資安接受。本階段補上主機服務事故恢復回補 Gate,只建立只讀 owner response acceptance、前台可視化與拒收規則;不讀 live host、不 SSH、不執行 Docker / systemctl / repair bot / Ansible、不重啟服務、不收 secret 明文。