diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 1284ee2f..95738318 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -264,6 +264,8 @@ jobs: ;; docs/workplans/2026-06-04-reboot-cold-start-backup-recovery-workplan.md) ;; + docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md) + ;; docs/schemas/product_awoooi_manifest_v1.schema.json) ;; docs/operations/product-awoooi-manifest-standard.snapshot.json) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 7c644dea..70809a64 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -54,6 +54,25 @@ **下一步**: - commit / push Gitea `main`,讀回 CD;CD 成功後接續 Stock/Postgres hot query / backup export playbook,而不是再回到 Gitea 泛查。 +## 2026-07-02 — 13:04 統帥插入需求主線優先序台帳落地 + +**完成內容**: +- 新增 `docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md`,把本輪使用者插入的「只推目前唯一目標」、「不要偏離」、「我要看到實作結果」、「Gitea / repo 恢復」、「GitHub appeal 前先做其他工作」、「MCP / RAG / KM / PlayBook / LOG 整合」、「全部工作優先序」等要求收斂成 P0 / P1 / P2 / P3 工作項。 +- 台帳明確把 GitHub 全產品推送轉成 freeze 狀態下的 deferred P3,不得執行 GitHub / `gh` / GitHub API / GitHub Actions。 +- 台帳明確標示聊天中出現過敏感值,但不記錄、不重印、不保存任何 token、密碼或 key;後續只走 hidden prompt、rotation / revoke checklist 或 metadata verifier。 +- `.gitea/workflows/cd.yaml` 與 `ops/runner/test_cd_controlled_runtime_profile.py` 已將此台帳納入 controlled-runtime allowlist,避免治理文件更新誤跑 B5 Docker socket。 + +**驗證**: +- `PYTHONDONTWRITEBYTECODE=1 python3.11 -m pytest -p no:cacheprovider ops/runner/test_cd_controlled_runtime_profile.py -q`:`43 passed`。 +- `PYTHONDONTWRITEBYTECODE=1 python3 ops/runner/guard-gitea-runner-pressure.py --root .`:`GITEA_RUNNER_PRESSURE_GUARD_OK workflow_files=12 scheduled_workflows=4 auto_branch_events_on_110=0 generic_runner_labels=0`。 +- `node scripts/ci/check-gitea-step-env-secrets.js`:`no Gitea run/with secrets or legacy Telegram routes`。 +- `bash -n .gitea/workflows/cd.yaml ops/runner/check-awoooi-110-controlled-cd-lane-readiness.sh ops/runner/register-awoooi-110-controlled-cd-lane-drain.sh`:通過。 +- `git diff --check`:通過。 + +**邊界**: +- 未使用 GitHub / `gh` / GitHub API;未讀 secret / token / `.env` / raw sessions / SQLite / auth;未讀 `.runner` 內容。 +- 未重啟主機,未 restart Docker / Nginx / K3s / DB / firewall,未 workflow_dispatch,未 force push。 + ## 2026-07-02 — 12:50 110 Gitea CPU 壓力 check-mode playbook 實作 **完成內容**: diff --git a/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md b/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md new file mode 100644 index 00000000..c42afcb5 --- /dev/null +++ b/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md @@ -0,0 +1,91 @@ +# 統帥插入需求主線優先序台帳 + +> 建立時間:2026-07-02 13:04 CST +> 範圍:本輪 AWOOOI / Gitea / Product Governance 工作中,使用者在主線推進期間插入的要求。 +> 目的:把插入要求轉成可排序、可驗證、可接續的工作項目,避免後續 Codex 把它們當成聊天雜訊或另開支線。 + +## 判讀規則 + +1. 「批准」、「繼續」、「只推進目前唯一目標」、「不要偏離」全部解讀為:沿目前 P0 主線往下一個可驗證工作項推進,不開 GitHub、不開新產品支線、不做未授權高風險操作。 +2. 「我要看到實作結果」解讀為:每個主線工作項必須產出至少一種 evidence,優先順序為 commit / Gitea run / production readback / runner readback / queue readback / verifier output。 +3. 「全面授權」只打開非事故級 controlled apply。secret 明文、raw session / SQLite、force push、repo / refs 破壞、reboot、node drain、destructive DB、Docker daemon restart、外部攻擊型 scan、付費 provider 切換仍維持 break-glass。 +4. 使用者曾在聊天中貼入敏感值。台帳只記「敏感值已出現」這個事實,不記錄、不重印、不保存任何 token、密碼或 key。 +5. GitHub account safety freeze 維持有效。GitHub 相關需求不刪除,轉為「停用狀態下的治理記錄與未來風險評估」,不得直接執行 GitHub / gh / GitHub API / GitHub Actions。 + +## 優先序定義 + +| 優先序 | 定義 | 可做 | 不可做 | +| --- | --- | --- | --- | +| P0 | 會直接影響 Gitea source truth、推版能力、repo identity、secret safety、runner / CD 連續性的事項 | 受控修正、正常 push、CD readback、runner metadata verifier、LOGBOOK / PlayBook / KM 記錄 | force push、repo / refs 破壞、讀 secret、重啟 Docker / host、GitHub 操作 | +| P1 | 會影響跨產品治理、工作排序、內部 KM / PlayBook / RAG / MCP / log 整合的事項 | 文件 / snapshot / API / UI read model、controlled apply packet、verifier / rollback 補齊 | 宣稱已完成 runtime closure、跳過 verifier | +| P2 | 會影響後續效率或觀測品質,但不阻擋當前推版主線的事項 | 優化 queue readback、SignOz / observability 分流、報表整理 | 把 P2 當成 P0 攔路 | +| P3 | 等外部狀態改變後才可恢復的事項 | 風險評估、未來恢復條件草案 | 在 freeze 期間嘗試外部操作 | + +## 主線工作項目 + +| 順序 | ID | 優先序 | 使用者插入要求 | 正規化工作項 | 目前狀態 | 下一個可驗證動作 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | CIR-P0-001 | P0 | 「不要偏離」、「只推進目前唯一目標」、「照順序推進」 | 建立單一主線執行規則:任何插入需求都先歸入本台帳,再依 P0/P1/P2/P3 排序 | 已建立本台帳 | 後續每次回報引用 current P0 / action / evidence / next action | +| 2 | CIR-P0-002 | P0 | 「我要看到實作結果」 | 主線工作必須回報 commit、Gitea CD run、production readback 或 verifier output;不能只回覆規劃 | 已落地:建立時基準 CD `#4373` Success,deploy marker `ab748b1a` | 新變更也必須正常 push、CD readback、必要時 production readback | +| 3 | CIR-P0-003 | P0 | 「GitHub 我已申訴了,你先做其他工作」 | GitHub freeze 下,所有 GitHub 需求暫停執行,工作轉回 Gitea / local / production truth | GitHub 停用有效 | 只維持 stopped / do_not_use 記錄;未來若要恢復,先出風險評估 | +| 4 | CIR-P0-004 | P0 | 「為什麼還沒把全部專案推上 GitHub」 | 不執行 GitHub 推送;改成全產品 Gitea repo identity、backup health、source-control readiness 台帳 | Gitea 9 expected repos 已回讀 OK;GitHub 不做 | 把全產品 source truth 優先對齊 Gitea / Gitea SSH / backup health | +| 5 | CIR-P0-005 | P0 | 「你做了什麼讓帳號 suspended」 | 建立 account safety 事故邊界:不再碰 GitHub,避免任何 read-only / write 操作造成二次風險 | GitHub freeze 已在規則中 | 不要求 token、不讀 suspension 細節、不碰 GitHub API | +| 6 | CIR-P0-006 | P0 | 使用者貼入 runner token / 密碼類敏感值,並說「授權你直接操作」 | 敏感值不入檔、不重印、不保存;runner registration 只允許互動 hidden prompt 或 metadata verifier;已出現的敏感值後續應視為需輪替 / 廢止評估 | 已遵守:未保存 token,registration script token-safe | 建立 secret exposure follow-up,不含任何明文值;需要時只列 rotate / revoke checklist | +| 7 | CIR-P0-007 | P0 | 「我沒辦法複製貼上 token」 | Runner 註冊流程要支援使用者在遠端 TTY hidden prompt 輸入,不要求把 token 貼給 Codex | 已完成 source:`register-awoooi-110-controlled-cd-lane-drain.sh` token-safe | live 110 lane 仍需 staging artifacts / registration metadata,不能讀 `.runner` 內容 | +| 8 | CIR-P0-008 | P0 | 「Gitea 恢復正常」、「所有專案儲存庫恢復」、「原本儲存庫不是新增」 | 儲存庫恢復以原 Gitea repo identity / SSH heads / backup health 為準,不建立替代 repo 來假裝恢復 | 已有 handoff truth:9 expected repos SSH heads OK、backup health missing=0 | 若再出現 404,先判斷 private visibility / auth,不宣稱 history 消失 | +| 9 | CIR-P0-009 | P0 | 「所有專案都沒辦法推版」 | 先保 AWOOOI Gitea CD 主線 green,再逐產品恢復 dev/prod CI baseline;不能把 GitHub 當解法 | 建立時基準 AWOOOI CD `#4373` Success;後續需以 Gitea queue / deploy marker readback 刷新 | 下一步按 product governance matrix 推 Gitea-only baseline | +| 10 | CIR-P0-010 | P0 | 「趕快修復 Gitea」、「不要開 legacy runner」相關壓力事故 | 188 non-110 runner 為主 CD lane;110 legacy / generic runner 維持 fail-closed;110 drain lane 只在 guardrails 全綠時 controlled enable | 188 ready;110 live verifier 仍顯示 config / registration / staging blockers | 補 110 drain staging artifacts 後只跑 readiness verifier,不直接開服務 | +| 11 | CIR-P0-011 | P0 | 「所有已開始、進行中、已完成工作全部看清楚」 | 工作狀態必須拆成 Done / In Progress / Blocked / Next,不再用單句「差不多完成」 | 本台帳補齊主線插入需求 | 後續 LOGBOOK 每次新增狀態要帶 status 與 evidence | +| 12 | CIR-P0-012 | P0 | 「所有主線工作持續推進」 | 主線推進順序固定:Gitea source truth → CD / runner → production readback → product governance → KM / PlayBook / RAG integration | 正在執行 | 不因支線問題改做 GitHub、Wazuh、host reboot 或未授權 console | +| 13 | CIR-P0-013 | P0 | 「這些安全硬閘哪裡來的」、「全部打開」 | 建立 gate taxonomy:非事故 gate 轉 evidence / ledger;事故 gate 保留 break-glass | 規則已整理於本台帳 | 後續 UI / API 需顯示 gate source、可自動處理方式、不可越線項 | +| 14 | CIR-P0-014 | P0 | 「批准/繼續會不會讓你誤會」 | 將簡短批准語句解讀規則文件化:批准等於沿目前排序繼續,不等於開新支線或解除事故級 hard gate | 已建立判讀規則 | 後續回覆避免把批准解讀成 GitHub、secret、force push 授權 | +| 15 | CIR-P0-015 | P0 | 「為什麼搞成這麼亂」 | 收斂亂象來源:多視窗、長上下文、重複 gate、GitHub freeze、Gitea recovery、runner pressure 必須進同一台帳 | 本台帳為收斂入口 | 新任務先看本台帳與 LOGBOOK,不再靠散落聊天句子 | +| 16 | CIR-P1-001 | P1 | 「為什麼沒有整合到 MCP、RAG、KM、PLAYBOOK、LOG」 | 內部治理資料要沉澱到 KM / PlayBook / RAG / MCP / log,而不是只存在對話 | 待實作 | 定義 `work_item_id`、evidence source、verifier、rollback、trust writeback 欄位 | +| 17 | CIR-P1-002 | P1 | 「所有工作的優先順序你都不知道嗎」 | 建立跨產品 priority matrix,區分 AWOOOI P0、Gitea/source-control P0、product governance P1、UI/UX P2 | 部分已有 scorecard;本台帳補 current thread | 將本台帳映射到 existing product runtime governance dashboard | +| 18 | CIR-P1-003 | P1 | 「所有儲存庫都不重要?」 | repo identity / backup health / private visibility 要成為 product governance 第一層,不再只看單一 AWOOOI repo | Gitea P0 恢復 truth 已有 9 repos OK | 補全產品 source-control readback rows,標示 canonical repo / branch / backup evidence | +| 19 | CIR-P1-004 | P1 | 「是你打開瀏覽器連 Gitea 嗎,需要 token 嗎」 | Gitea 操作要區分 public HTML readback、API token readback、SSH git readback、runner token registration | 已區分:public HTML 可讀;API 未登入 401;SSH push 可用 | 建立 runbook:何時需要 token、何時不需要、不得要求貼 token | +| 20 | CIR-P1-005 | P1 | 「用 VMware Console 去 192.168.0.99 操作 110」 | VMware console 是 break-glass / local console lane,只能在 SSH/Gitea control path 無法修復且有明確目標時使用 | 未作為本輪主線執行 | 若需要,先列 non-secret console checklist,不輸入或保存密碼 | +| 21 | CIR-P1-006 | P1 | 「sudo 為什麼不能用密碼」 | sudo / account / SSH auth 行為只做 metadata audit,不要求或記錄密碼;若需修復,用 authorized console SOP | 未在本輪 runtime 修改 | 補一份 sudo / auth metadata check playbook,禁止收密碼 | +| 22 | CIR-P1-007 | P1 | 「先做其他工作」 | GitHub blocked 時不得原地等待,改推 Gitea / CD / product governance / backup / KM mainline | 已照做:Gitea CD 已 success | 下個 P0 仍照排序,不等待 GitHub appeal | +| 23 | CIR-P2-001 | P2 | 「為什麼會偏離工作目標」 | 將每輪回報固定成 current P0 / action taken / evidence / next action | 待持續執行 | final / handoff 必須先列結果,再列下一步 | +| 24 | CIR-P2-002 | P2 | production health readback 顯示 degraded | SignOz component down 不阻擋本次 CD success,但要分流到 observability lane | 已觀察到 `signoz` connection refused | 排入 Observability P2,不在本輪重啟服務 | +| 25 | CIR-P3-001 | P3 | GitHub appeal 後的未來恢復 | 只有使用者未來明確要求恢復 GitHub,才先做風險評估與人工確認 | 等外部狀態 | 未確認前維持 freeze | + +## 目前 Done / In Progress / Blocked + +### Done + +| 項目 | Evidence | +| --- | --- | +| AWOOOI Gitea main 可正常推進 | `f426610d`、`f41f77cf` 已進 remote history | +| CD controlled-runtime 誤判已修 | `#4373` tests log 顯示 `B5 effective test profile=controlled-runtime`,B5 skipped | +| 建立時基準主線 CD 成功 | Gitea CD `#4373 Success` | +| Production rollout 成功 | ArgoCD `Synced` / `Healthy`,API / Web / Worker rollout success | +| Production deploy readback matched | `631fc785fa` matched runtime / desired image tag | +| Playwright smoke 成功 | `5 passed` | +| 建立時基準同步到 Gitea truth | local `main...origin/main` clean at deploy marker `ab748b1a` | + +### In Progress + +| 項目 | 目前狀態 | 下一步 | +| --- | --- | --- | +| 110 controlled drain lane | live verifier 仍不能宣稱 ready,需 staging artifacts / registration metadata / service guardrails 全綠 | 補 staging artifacts 後只跑 readiness verifier | +| 全產品 source-control governance | 9 expected Gitea repos OK,但跨產品 dev/prod CI baseline 尚未全綠 | 以 Gitea / Gitea SSH / backup health 為 source truth | +| KM / PlayBook / RAG / MCP 整合 | 已被列為 P1,不再遺漏 | 建立 work item schema 與 trust writeback 欄位 | + +### Blocked / Deferred + +| 項目 | 原因 | 處理方式 | +| --- | --- | --- | +| GitHub 全產品 push / mirror | GitHub account safety freeze;不得用 GitHub / gh / API | 保持 stopped / do_not_use;未來需風險評估 | +| 直接使用聊天中貼出的敏感值 | secret safety hard gate | 不記錄、不重印、不保存;以 rotate / revoke / hidden prompt 取代 | +| VMware console / sudo 密碼路徑 | 屬 break-glass / local console lane | 只有控制路徑不可用且目標明確時才開 non-secret SOP | + +## 下一輪固定執行順序 + +1. 先確認 Gitea `main` / CD / production readback 是否仍與最新 truth 一致。 +2. 繼續補 110 controlled drain lane 的 staging / verifier,不恢復 generic runner。 +3. 把全產品 repo identity / backup health / private visibility / dev-prod CI baseline 接到 product governance matrix。 +4. 把本台帳的 P0/P1 工作項映射進 KM / PlayBook / RAG / MCP / LOG,不讓需求只留在聊天。 +5. SignOz degraded 分流到 Observability P2,不阻擋 Gitea/CD 主線。 +6. GitHub appeal 前不做任何 GitHub 操作;appeal 後若使用者明確要求,先做風險評估。 diff --git a/ops/runner/test_cd_controlled_runtime_profile.py b/ops/runner/test_cd_controlled_runtime_profile.py index 269600c2..c90b680e 100644 --- a/ops/runner/test_cd_controlled_runtime_profile.py +++ b/ops/runner/test_cd_controlled_runtime_profile.py @@ -759,6 +759,7 @@ def test_post_start_recovery_verifiers_stay_on_controlled_runtime_profile() -> N "docs/operations/host-cpu-pressure-drain-readback-2026-07-01.snapshot.json)", "docs/operations/post-reboot-runtime-recovery-readback-2026-07-01.snapshot.json)", "docs/workplans/2026-06-04-reboot-cold-start-backup-recovery-workplan.md)", + "docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md)", "ops/monitoring/alerts-unified.yml)", "ops/monitoring/alerts.yml)", "ops/reboot-recovery/full-stack-cold-start-baseline.yml)",