From 9cfae83da3ce36fbc39746c7ddea071a1b54fa28 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 01:22:51 +0800 Subject: [PATCH] docs(awooop): record t64 drift fingerprint dedupe [skip ci] --- docs/LOGBOOK.md | 66 +++++++++++++++++++ ...-04-15-MASTER-ai-autonomous-flywheel-v2.md | 11 ++++ 2 files changed, 77 insertions(+) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 6c7fc4ea7..34972e465 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,69 @@ +## 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 已更新。 + +**修正**: +- 新增 Config Drift fingerprint read model: + - `GET /api/v1/drift/fingerprints/state?namespace=awoooi-prod` + - `POST /api/v1/drift/fingerprints/handoff` + - 回傳 `fsm_state`、`next_step`、12h repeat state、PR 狀態、zero-diff 判斷、handoff history、P0 dedup policy 與明確寫入旗標。 +- Work Items 與 Drift 頁同步呈現同一條狀態鏈: + - `/zh-TW/awooop/work-items` 新增 T64 工作列與 Config Drift fingerprint 狀態卡。 + - `/zh-TW/drift` 新增「同指紋狀態鏈」,修掉 `interpretation` object 直接 render 造成的 Critical Application Error。 +- T65 修正 repeat/dedup 指紋: + - value-aware strict fingerprint 保留為 `strict_fingerprint` 供稽核。 + - operator/P0 去重改用 semantic fingerprint:`namespace_resource_field_level_v2`,同一 namespace / resource / field / level 的 drift 即使每小時 value/list 內容微變,仍收斂成同一事件鏈。 + - `ConfigDriftAutoAdoptBlocked` emergency Redis dedup key 同步改用 semantic fingerprint,避免同型 drift 因 value 變動繼續重複 P0 升級。 + +**local verification**: +- `python3 -m py_compile apps/api/src/services/drift_repeat_state.py apps/api/src/services/drift_fingerprint_state_service.py apps/api/src/services/emergency_escalation_service.py apps/api/src/repositories/drift_repository.py apps/api/tests/test_awooop_truth_chain_service.py apps/api/tests/test_drift_fingerprint_state_service.py`:pass。 +- `DATABASE_URL=postgresql+asyncpg://awoooi:awoooi@localhost:5432/awoooi PYTHONPATH=apps/api pytest 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`:29 passed。 +- `DATABASE_URL=... PYTHONPATH=apps/api ruff check --select F,E9,I ...`:pass。 +- T64 前端檢查:`pnpm --dir apps/web run typecheck`、`next lint`、`NEXT_PUBLIC_API_URL=https://awoooi.wooo.work pnpm --dir apps/web run build` 均 pass;build 僅既有 Sentry warnings。 + +**production verification**: +- T64 commits: + - `0b5268a6 feat(drift): surface fingerprint state handoff` + - `69ed35fb fix(drift): render interpretation objects safely` + - Code Review `1808` / `1810` success;CD `1807` / `1809` success;deploy markers `fa9d2a5d` / `1ca49122`。 +- T65 commit: + - `9843c594 fix(drift): dedupe semantic fingerprint repeats` + - Code Review `1812` success;CD `1811` success;deploy marker `77d85b33 chore(cd): deploy 9843c59 [skip ci]`。 +- Health:`https://awoooi.wooo.work/api/v1/health` → `status=healthy`、`environment=prod`、`mock_mode=false`。 +- Production Drift API: + - `fingerprint=dfp_84956f3b5e563821` + - `strict_fingerprint=dfp_650ffeed708860c7` + - `latest_report_id=3d73c33c` + - `matching_strategy=namespace_resource_field_level_v2` + - `occurrences_12h=13` + - `fsm_state=pr_open_zero_diff` + - `next_step=close_zero_diff_pr_and_prepare_real_yaml_patch` + - `open_pr.number=145`、`state=open`、`file_count=0`、`commit_count=0`、`is_zero_diff=true` + - `latest_handoff.handoff_status=recorded` + - `p0_escalation.dedup_key_strategy=semantic_drift_fingerprint` + - `writes_incident_state=false`、`writes_auto_repair_result=false`、`writes_drift_status=false`、`writes_ticket=false`、`creates_external_ticket=false`。 +- Handoff evidence: + - `report_id=3d73c33c` handoff 已寫入 `alert_operation_log` / `timeline_events`。 + - `alert_operation_id=456d17aa-71fc-4715-bc9f-e362a70fe80f` + - `timeline_event_id=2a98ddd7-929c-40d7-9789-a81669a8d15b` +- Frontend production smoke: + - `/zh-TW/awooop/work-items?project_id=awoooi`:導航可見,Config Drift fingerprint 狀態顯示 `12h 13 次`、`dfp_84956f3b5e563821`、`PR:145`、`zeroDiff=true`、`最近交接:recorded`,無 Critical Application Error,console errors=0。 + - `/zh-TW/drift`:導航可見,「同指紋狀態鏈」顯示 `dfp_84956f3b5e563821`、`12h 13 次`、`PR:145;zeroDiff=true`,無 Critical Application Error,console errors=0。 + +**邊界 / 下一步**: +- 這不是宣稱 Config Drift 已修復。production 仍是 `pending`,PR #145 仍 open 且 zero-diff。 +- 現在已能清楚回答「為什麼一直告警」:同型 drift 12h 內 13 次,且目前卡在 `pr_open_zero_diff`,下一步是關閉或替換零 diff PR,準備真實 YAML patch 或 Ansible check-mode / diff / apply,再做 PR merge 後 drift status writeback。 +- 尚未把 drift 自動採納打開;目前只做 read model、handoff history、semantic dedup,避免 false completion。 + +**目前整體進度**: +- AwoooP observability / truth-chain 可回看:約 99%。 +- 來源告警入庫、重複發生、Sentry / SignOz 與修復結果可見性:約 98.8%。 +- Telegram callback detail/history 可追溯:約 96%。 +- AI 自動修復閉環:約 97.2%;本輪沒有新增真正 auto-repair,只收斂 drift dedup 與交接可觀測。 +- Config Drift 治理:約 94%;已完成狀態鏈、zero-diff PR 可見、semantic P0 dedup,仍缺真實 patch / Ansible check-mode / status writeback。 +- 前端 AI 自動化管理介面產品化:約 98.5%。 +- 完整 AI 自動化管理產品化:約 94.5%。 + ## 2026-05-19 | T63 Recurrence Work Item Handoff + Drift Escalation Dedup **背景**:T62 已完成 recurrence work item 的 safe preview / dry-run,但 Operator 仍需要一個明確的「交接」節點,讓 `run_completed_no_repair` 類工作項可留下「已轉 Ticket proposal / 人工接手」證據,而不是停在 dry-run。同步插隊處理 production Telegram P0:`ConfigDriftAutoAdoptBlocked` 每小時換 report_id 重複升級,且 PR #145 已建立但為零 files / 零 commits,不能真正更新 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 490af9489..6014a4ad6 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 @@ -2221,6 +2221,17 @@ Phase 6 完成後 - 邊界:T63 仍不宣稱 `DockerContainerUnhealthy` 已真正 AI 自動修復,也不宣稱 Config Drift 已解決。Drift live report `5aa66aa6` 仍是 `pending`,PR #145 仍 open / unmerged;下一段需做 Drift fingerprint FSM、實際 YAML patch 或 Ansible check-mode/diff/apply、PR merge 後狀態回寫。 - 目前進度更新:AwoooP truth-chain 可回看約 98.3%;AI 自動修復閉環約 97.1%;Config Drift 治理約 88%;完整 AI 自動化管理產品化約 92.8%。 +**T64-T65 Config Drift fingerprint FSM + semantic P0 dedup production verified(2026-05-19 台北)**: +- 觸發:PR #145 已存在但為 zero-diff;Telegram 仍持續出現 `ConfigDriftAutoAdoptBlocked`,且 Operator 無法判斷是否同型 drift 重複、PR 是否能消化、是否已轉人工、是否有任何自動修復寫入。 +- T64 修正:新增 `GET /api/v1/drift/fingerprints/state` 與 `POST /api/v1/drift/fingerprints/handoff`。read model 回傳 `fsm_state`、`next_step`、repeat state、PR zero-diff、handoff history、P0 dedup policy 與寫入旗標;handoff 只寫 `alert_operation_log` / `timeline_events`,不改 incident / repair / drift status / ticket。 +- UI:`/awooop/work-items` 新增 T64 工作項與 Config Drift fingerprint 狀態卡;`/drift` 新增「同指紋狀態鏈」。同步修掉 `interpretation` object 直接 render 導致 `/zh-TW/drift` Critical Application Error 的問題。 +- T65 修正:value-aware strict fingerprint 保留為 `strict_fingerprint`;operator/P0 去重改用 semantic fingerprint `namespace_resource_field_level_v2`。`ConfigDriftAutoAdoptBlocked` emergency Redis dedup key 同步使用 semantic fingerprint,避免同型 drift 因每小時 value/list 變動被拆成新 P0。 +- Production deploy:`0b5268a6 feat(drift): surface fingerprint state handoff`、`69ed35fb fix(drift): render interpretation objects safely`、`9843c594 fix(drift): dedupe semantic fingerprint repeats` 已推 Gitea main;Code Review `1808` / `1810` / `1812` success;CD `1807` / `1809` / `1811` success;deploy markers `fa9d2a5d` / `1ca49122` / `77d85b33`。 +- Production evidence:`/api/v1/drift/fingerprints/state?namespace=awoooi-prod` 回 `fingerprint=dfp_84956f3b5e563821`、`strict_fingerprint=dfp_650ffeed708860c7`、`latest_report_id=3d73c33c`、`matching_strategy=namespace_resource_field_level_v2`、`occurrences_12h=13`、`fsm_state=pr_open_zero_diff`、`next_step=close_zero_diff_pr_and_prepare_real_yaml_patch`、PR #145 `file_count=0` / `commit_count=0` / `is_zero_diff=true`、`latest_handoff.handoff_status=recorded`、`dedup_key_strategy=semantic_drift_fingerprint`,全部寫入旗標為 false。 +- Frontend evidence:Playwright production smoke 確認 `/zh-TW/awooop/work-items?project_id=awoooi` 與 `/zh-TW/drift` 導航可見、無 Critical Application Error、console errors=0,兩頁都顯示 `dfp_84956f3b5e563821`、`12h 13 次`、PR #145 zero-diff;Work Items 顯示 `最近交接:recorded`。 +- 邊界: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%。 + --- ### 2026-04-20 晚 (台北) — C1-C4 全流程串接 — Playbook 鏈路保護(commit de2d34d)