From cc4b16c0278c7a21fcb9aa353bc492d33de9ff23 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 02:24:43 +0800 Subject: [PATCH] docs(awooop): record t66 drift cleanup evidence [skip ci] --- docs/LOGBOOK.md | 50 +++++++++++++++++++ ...-04-15-MASTER-ai-autonomous-flywheel-v2.md | 11 ++++ 2 files changed, 61 insertions(+) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 34972e465..175a0418e 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,53 @@ +## 2026-05-19 | T66 Config Drift PR Ghost Cleanup + Detector Source-of-Truth Fix + +**背景**:T64-T65 已讓 Config Drift 有 fingerprint FSM 與 semantic P0 dedupe,但 production 仍卡在 `pr_open_zero_diff`,Telegram 也持續讓 Operator 看到「有採納 PR / 需人工」的狀態。實查後確認不是單一 #145,而是一整串舊 `chore: adopt drift` PR 殘影;同時 drift detector 讀的是 API image 內 baked repo,不是 Gitea main 最新 deploy marker,導致每次部署後 image tag 都會變成假 drift。 + +**修正**: +- 關閉 stale/zero-diff drift/adopt PR: + - 先確認 #144-#95 全部 `files=0`、`commits=0` 後關閉。 + - 繼續掃到 #3;#9-#7 是 4 月 stale PR 且內容會刪 `.agents/skills` / automations,#6-#5 是 4 月舊 `kustomization.yaml` 變更,確認不是當前 drift 修補後關閉。 + - 最終 open `chore: adopt drift` PR = 0;`/drift/fingerprints/state` 從 `pr_open_*` 收斂為 `handoff_recorded` / `open_pr=null`。 +- 修正 `GitStateReader`: + - 讀 Git state 時套用同目錄 `kustomization.yaml` 的 `namespace`、`commonLabels`、`images`,避免 raw YAML vs ArgoCD output 造成 selector / affinity / image 假漂移。 + - 優先從 Gitea main raw files 讀取 `k8s/{namespace}/kustomization.yaml` 與 resources,讀不到才 fallback 容器內檔案,避免 API image baked repo 落後 deploy marker 造成 image tag 假漂移。 +- 修正 K8s API default noise: + - 正規化 Service allocated/default fields、container/probe/port defaults、pod spec defaults、generated `serviceAccount`、`kubectl.kubernetes.io/restartedAt`、Secret/ConfigMap `defaultMode=420`。 + - 不把真 env drift 白名單掉;`HERMES_NL_ENABLED`、`DUMMY_DEPLOY`、worker alert env 仍保留為 MEDIUM 候選。 + +**local verification**: +- `python3 -m py_compile apps/api/src/services/drift_detector.py apps/api/tests/test_drift_detector_normalization.py`:pass。 +- `ruff check --select F,E9,I apps/api/src/services/drift_detector.py apps/api/tests/test_drift_detector_normalization.py`:pass。 +- `DATABASE_URL=postgresql+asyncpg://awoooi:awoooi@localhost:5432/awoooi PYTHONPATH=apps/api pytest apps/api/tests/test_drift_detector_normalization.py apps/api/tests/test_phase25_drift_detection.py apps/api/tests/test_drift_fingerprint_state_service.py apps/api/tests/test_awooop_truth_chain_service.py apps/api/tests/test_emergency_escalation_service.py -q`:52 passed。 +- `git diff --check`:pass。 + +**production verification**: +- `107c4f11 fix(drift): normalize kustomize runtime defaults` pushed to Gitea main;Code Review run `2382` success;CD run `2381` success;deploy marker `2c4e8bb6 chore(cd): deploy 107c4f1 [skip ci]`。 +- `01ba1e6f fix(drift): read git state from gitea main` pushed to Gitea main;Code Review run `2384` success;CD run `2383` success;deploy marker `a9e7b5f6 chore(cd): deploy 01ba1e6 [skip ci]`。 +- CD evidence:tests / build-and-deploy / post-deploy-checks 全 success;ArgoCD `Synced + Healthy`;API / Web / Worker rollout success;post-deploy Alert Chain smoke `6/8` pass,兩個非 critical 檢查因 runner 無 `kubectl` 跳過;監控覆蓋率 100%。 +- Health:`https://awoooi.wooo.work/api/v1/health` → `status=healthy`、`mock_mode=false`。 +- Drift scan 收斂: + - T65 前最新 report `3d73c33c`:`HIGH=1`、`MEDIUM=32`、`INFO=23`。 + - T66 第一輪 scan `e7d26728`:`HIGH=0`、`MEDIUM=4`、`INFO=0`。 + - T66 Gitea-main source fix 後 scan `58181a51`:`HIGH=0`、`MEDIUM=2`、`INFO=0`。 +- `58181a51` 剩餘真差異: + - `Deployment/awoooi-api spec.template.spec.containers`:live 多 `HERMES_NL_ENABLED=true`、`DUMMY_DEPLOY=1777914462`;image 已與 Git main deploy marker 對齊為 `01ba1e6f...`。 + - `Deployment/awoooi-worker spec.template.spec.containers`:live 多 `ALERT_AI_ALLOW_CLOUD_FALLBACK=true`、`ALERT_AI_ENFORCE_OLLAMA_FIRST=true`、`ALERT_OLLAMA_MODEL=gemma3:4b`、`OLLAMA_HEALTH_CHECK_MODEL=gemma3:4b`;image 已與 Git main deploy marker 對齊為 `01ba1e6f...`。 +- Fingerprint state:`fingerprint=dfp_13049d0ac76c7c10`、`strict_fingerprint=dfp_17a6a37ca69d12cd`、`occurrences_12h=1`、`fsm_state=pending_human`、`next_step=manual_investigation_or_ansible_check_mode`、`open_pr=null`、P0 dedupe still `semantic_drift_fingerprint`。 + +**邊界 / 下一步**: +- T66 沒有宣稱 Config Drift 已完全解決,也沒有自動採納 live env。剩餘 2 個 MEDIUM 是真差異候選,下一步要查它們是手動 `kubectl set env`、舊 CD marker、還是應回寫 Git / Ansible 的 runtime intent。 +- `DUMMY_DEPLOY` 很可能是過去 rollout marker,應先查 CD / live managed fields / timeline;若確認無效,走 declarative remove,不要只在 detector 裡白名單。 +- worker `ALERT_OLLAMA_MODEL=gemma3:4b` 與 Git/API 的 `qwen3:14b` 不一致,需先確認 worker lane 是否刻意用 fast model,再決定採納或回滾。 + +**目前整體進度**: +- AwoooP observability / truth-chain 可回看:約 99.3%。 +- 來源告警入庫、重複發生、Sentry / SignOz 與修復結果可見性:約 99.2%。 +- Telegram callback detail/history 可追溯:約 96%。 +- AI 自動修復閉環:約 97.4%;T66 收斂 drift 假告警與狀態機,不新增真正 auto-repair。 +- Config Drift 治理:約 98%;zero-diff/stale PR 殘影已清、假漂移大幅消除,剩 2 個真 env drift 候選需人工或 Ansible check-mode 判斷。 +- 前端 AI 自動化管理介面產品化:約 98.6%。 +- 完整 AI 自動化管理產品化:約 96%。 + ## 2026-05-19 | T64-T65 Config Drift fingerprint FSM + semantic dedupe **背景**:Telegram `ConfigDriftAutoAdoptBlocked` 持續重複升級,Operator 無法從卡片判斷同型 drift 是否一直復發、是否已有 PR、PR 是否真的有 diff、是否已轉人工、是否會寫 incident / repair / ticket。T63 已確認 PR #145 open 但 files/commits 為 0,不能把它當成 Git baseline 已更新。 diff --git a/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md b/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md index 6014a4ad6..41137cc5f 100644 --- a/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md +++ b/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md @@ -2232,6 +2232,17 @@ Phase 6 完成後 - 邊界:T65 仍不宣稱 Config Drift 已修復,也沒有開啟自動採納。真正閉環仍需關閉或替換 PR #145、產出真實 YAML patch 或 Ansible check-mode/diff/apply、PR merge 後寫回 drift status,並確認下一輪 scan 不再告警。 - 目前進度更新:AwoooP truth-chain 可回看約 99%;AI 自動修復閉環約 97.2%;Config Drift 治理約 94%;前端 AI 自動化管理介面產品化約 98.5%;完整 AI 自動化管理產品化約 94.5%。 +**T66 Config Drift PR ghost cleanup + detector source-of-truth fix production verified(2026-05-19 台北)**: +- 觸發:T65 後 `ConfigDriftAutoAdoptBlocked` 仍會讓 Operator 看到 `pr_open_zero_diff`,原因不是單一 #145,而是一串 stale / zero-diff `chore: adopt drift` PR;同時 detector 讀 API image 內 baked repo,不讀 Gitea main 最新 deploy marker,造成每次部署後 image tag 假 drift。 +- PR 清理:逐一查證 `files` / `commits` 後關閉 zero-diff drift/adopt PR;#9-#7 確認為 4 月 stale/unsafe PR(會刪 `.agents/skills` / automations),#6-#5 為舊 `kustomization.yaml` 變更,也關閉。最終 open `chore: adopt drift` PR = 0,fingerprint state 從 `pr_open_*` 收斂為 `handoff_recorded` / `open_pr=null`。 +- Detector 修正:`GitStateReader` 會套用 Kustomize `namespace` / `commonLabels` / `images`,並優先從 Gitea main raw files 讀取 k8s manifests,讀不到才 fallback 容器內檔案;同時正規化 K8s API defaults(Service allocated fields、probe/port/pod defaults、generated serviceAccount、defaultMode=420、restart annotation)。 +- Production deploy:`107c4f11 fix(drift): normalize kustomize runtime defaults` 已推 Gitea main,Code Review `2382` success,CD `2381` success,deploy marker `2c4e8bb6`;`01ba1e6f fix(drift): read git state from gitea main` 已推 Gitea main,Code Review `2384` success,CD `2383` success,deploy marker `a9e7b5f6`。 +- Production evidence:health healthy;post-deploy checks success;manual drift scan 由 T65 前 `HIGH=1 MEDIUM=32 INFO=23` 收斂為 `e7d26728 HIGH=0 MEDIUM=4 INFO=0`,再收斂為 `58181a51 HIGH=0 MEDIUM=2 INFO=0`。 +- 剩餘真差異:`Deployment/awoooi-api` live 多 `HERMES_NL_ENABLED=true`、`DUMMY_DEPLOY=1777914462`;`Deployment/awoooi-worker` live 多 `ALERT_AI_ALLOW_CLOUD_FALLBACK=true`、`ALERT_AI_ENFORCE_OLLAMA_FIRST=true`、`ALERT_OLLAMA_MODEL=gemma3:4b`、`OLLAMA_HEALTH_CHECK_MODEL=gemma3:4b`。API/worker images 已與 Gitea main deploy marker `01ba1e6f...` 對齊。 +- Fingerprint evidence:`fingerprint=dfp_13049d0ac76c7c10`、`strict_fingerprint=dfp_17a6a37ca69d12cd`、`occurrences_12h=1`、`fsm_state=pending_human`、`next_step=manual_investigation_or_ansible_check_mode`、`open_pr=null`、P0 dedupe 仍為 `semantic_drift_fingerprint`。 +- 邊界:T66 不宣稱 Config Drift 完全解決,也不自動採納 live env。剩餘 2 個 MEDIUM 是真差異候選,下一步必須查 live managed fields / CD history / Ansible check-mode,再決定採納或 declarative rollback;不可把 `DUMMY_DEPLOY` 或 worker model mismatch 直接白名單。 +- 目前進度更新:AwoooP truth-chain 可回看約 99.3%;AI 自動修復閉環約 97.4%;Config Drift 治理約 98%;前端 AI 自動化管理介面產品化約 98.6%;完整 AI 自動化管理產品化約 96%。 + --- ### 2026-04-20 晚 (台北) — C1-C4 全流程串接 — Playbook 鏈路保護(commit de2d34d)