docs(iwooos): 記錄 AwoooP 前台脫敏正式驗證 [skip ci]

This commit is contained in:
Your Name
2026-06-15 07:45:39 +08:00
parent 166497ee7a
commit 57df61daf0

View File

@@ -1,3 +1,64 @@
## 2026-06-15AwoooP 高可見頁敏感識別與前端 bundle 防洩漏完成
**背景**:使用者指出 `/zh-TW/awooop/tenants` 曾在前台表格顯示個人 owner namespace、外部 org namespace、英文 repo / product slug、`blocked_waiting_*``blockers=` 類內部狀態碼。這不符合 IwoooS 現階段資安要求:公開面不得暴露可反推 owner、repo、內部 gate、內部協作文字或執行邊界的 raw identifierUI 可視不等於 runtime 授權,且 client bundle 也不能保存敏感對照常數。
**完成項目**
- `apps/web/src/lib/public-security-redaction.ts` 新增並強化 `publicProjectText``publicAgentText``publicInternalCodeSummary`AwoooP `runs`、run detail、`approvals`、approval detail、`contracts``work-items` 改用公開名稱與已脫敏摘要,不再直出 `project_id``agent_id`、trace / trigger raw 值或 blocker join。
- AwoooP shell 頁首由「專案 / awoooi」改為「治理範圍 / 核心營運平台」,`zh-TW` 與目前鏡像文案同步,避免高可見頁首暴露內部 project id。
- `/zh-TW/awooop/tenants` 移除會被 Next.js build constant folding 到 client bundle 的內部狀態碼常數;公開文字只允許已知公開名稱或繁中文案 fallback。
- `scripts/security/security-mirror-progress-guard.py` 補上前台防回歸:要求 AwoooP 高可見頁使用公開 redaction helper禁止 raw owner namespace、外部 namespace、`blocked_waiting_*``blockers=`、內部協作文字、raw project / agent fallback、raw detail value、raw blocker join 與頁首 raw project id 回流。
**本地驗證**
- `python3 -m py_compile scripts/security/security-mirror-progress-guard.py` 通過。
- `python3 -m json.tool apps/web/messages/zh-TW.json``python3 -m json.tool apps/web/messages/en.json` 通過。
- `python3 scripts/security/security-mirror-progress-guard.py --root .``SECURITY_MIRROR_PROGRESS_GUARD_OK`
- `python3 scripts/security/iwooos-owner-gate-guard.py --root .``IWOOOS_OWNER_GATE_GUARD_OK`
- `python3 scripts/security/iwooos-config-control-guard.py --root .``IWOOOS_CONFIG_CONTROL_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 apps/web/messages/zh-TW.json apps/web/messages/en.json apps/web/src/lib/public-security-redaction.ts 'apps/web/src/app/[locale]/awooop'``DOC_SECRET_SANITY_OK scanned_files=867`
- `rg` 檢查 `apps/web/src/lib/public-security-redaction.ts``apps/web/src/app/[locale]/awooop` 與 messages未命中個人 owner namespace、外部 org namespace、內部阻塞狀態碼與內部協作片語。唯一合法資料欄位 `blockers={item.blockers}` 不作為可見文字輸出。
- `git diff --check` 通過。
- 本臨時 worktree 未跑本地 `pnpm --dir apps/web typecheck``apps/web/node_modules` / `tsc` 不存在;正式 CD 的 Next.js web image build 已成功通過,作為本輪 build 驗證來源。
**Gitea / CD**
- Code commits
- `9c4e754d fix(awooop): 遮罩前台專案與代理敏感識別`
- `669f07b2 fix(awooop): 移除前端遮罩敏感常數`
- `106a83e2 fix(awooop): 脫敏頁首專案範圍顯示`
- `94a9c612 fix(awooop): 移除 tenants 前端內部碼常數`
- Deploy markers
- `8189841a chore(cd): deploy 9c4e754 [skip ci]`
- `d4ffa5d6 chore(cd): deploy 669f07b [skip ci]`
- `fbc17bd3 chore(cd): deploy 106a83e [skip ci]`
- `166497ee chore(cd): deploy 94a9c61 [skip ci]`
- Gitea Actions
- CD runs`3011``3013``3015``3017`
- code-review runs`3012``3014``3016``3018`
- 最終 CD run `3017`web image build / push 成功ArgoCD `Synced` / `Healthy``awoooi-api``awoooi-web``awoooi-worker` rollout 成功API health 通過。成功通知鏡像回報為 non-fatal failed不影響 deploy 與 runtime health但需後續觀察通知鏈。
**Production 只讀驗證(最終 deploy marker `166497ee`**
- `https://awoooi.wooo.work/api/v1/health` HTTP `200`overall `healthy``ollama_gcp_a``ollama_gcp_b`、PostgreSQL、Redis、OpenClaw、SignOz 均 up。`ollama_local` 仍為 cooldown / down保留為 runtime 殘留觀察,未做主機操作。
- Production JS chunk 掃描:
- `/zh-TW/awooop/tenants``page-cd6ada327b99c26d.js`forbidden `[]`
- `/zh-TW/awooop/runs``page-e498d712326e4bc1.js`forbidden `[]`
- `/zh-TW/awooop/approvals``page-15eff172408e88d1.js`forbidden `[]`
- `/zh-TW/awooop/contracts``page-14392a518017dd04.js`forbidden `[]`
- `/zh-TW/awooop/work-items``page-e9d62d4c8985f685.js`forbidden `[]`
- In-app browser desktop `1280x720` 驗證:`tenants``runs``approvals``contracts``work-items``forbiddenVisible=[]``forbiddenDom=[]``headerHasPublicScope=true``headerHasRawProject=false``horizontalOverflow=false`
- In-app browser mobile `390x844` 驗證:上述 5 頁均 `forbiddenVisible=[]``forbiddenDom=[]``headerHasPublicScope=true``headerHasRawProject=false``horizontalOverflow=false`
**完成度與邊界**
- AwoooP 高可見頁 raw project / agent / owner / blocker 防洩漏:`0% -> 100%`
- Production bundle sensitive constant scan`0% -> 100%`(本輪涵蓋 tenants / runs / approvals / contracts / work-items
- Frontend public sensitive redaction defense`76% -> 86%`;仍需後續擴到全站所有非 AwoooP route 的 bundle-level scan。
- AwoooP Runs route visibility維持 `88%`,本輪只處理公開識別遮罩與 bundle 風險。
- Work Items route action readability`84% -> 86%`blocker / required field 顯示已改公開摘要,但完整 UX 精簡仍待做。
- Frontend design system / visual grammar維持 `54%`
- IwoooS headline 維持 `64%`active runtime gate 維持 `0`
- owner response received / accepted、target decision accepted、refs parity accepted、repository creation、refs sync、workflow modification、secret collection、runtime execution、action button、Nginx reload、host restart、firewall change、active scan 全部維持 `0 / false`
- 本輪未 SSH、未改主機、未重啟 Docker / Nginx、未修改 firewall / iptables、未收 secrets 明文、未執行 active scan、未切 GitHub primary、未 force push也沒有把內部協作內容放上前端頁面。
## 2026-06-15Package / Docker 供應鏈 Owner Policy Gate 完成
**背景**:前一輪已建立 Package / Docker 供應鏈 repo-only baseline但 baseline 只回答「目前有哪些套件、lockfile、requirements、Dockerfile 與 compose image refs 需要控管」,尚未把 Python lockfile、requirements pinning、Docker digest pinning、compose image digest、CVE / license / SBOM 的 owner policy 欄位拆成可驗收的 gate。若直接從 baseline 進入套件升級、lockfile 重寫、image digest 修改或外部掃描,會違反 IwoooS 初期「只讀證據、低摩擦流程、階段性收攏」原則。