docs(awooop): record t63 handoff and drift dedup [skip ci]

This commit is contained in:
Your Name
2026-05-19 00:23:22 +08:00
parent 12fa97759b
commit 55ab8732c5
2 changed files with 70 additions and 0 deletions

View File

@@ -1,3 +1,63 @@
## 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。
**修正**
- 新增 `POST /api/v1/platform/events/dossier/recurrence/work-item/handoff`
- 依 recurrence read model 與 dry-run contract 產生 `awooop_recurrence_work_item_handoff_v1`
- `handoff_kind=ticket_proposal` 預設只記錄交接提案,不建立外部 Ticket。
- 明確回傳 `writes_incident_state=false``writes_auto_repair_result=false``writes_ticket=false``creates_external_ticket=false`
- 以 timeline / alert_operation_log 作為 history sink本輪 production smoke 至少寫入 timeline event。
- Work Items 頁的「重複告警工作項」新增「交接」按鈕與結果卡:
- 顯示交接種類、交接狀態、外部 Ticket 是否建立、history 是否寫入。
- 補 zh-TW / en i18n。
- Config Drift P0 止血:
- `ConfigDriftAutoAdoptBlocked` emergency escalation 去重由 `report_id` 改為 stable drift fingerprintTTL 24h避免同一漂移每小時換 report_id 就重新 P0 升級。
- `DriftAdoptService` 掃描 baseline 由 `k8s/*.yaml` 改為 `k8s/**/*.yaml`
- 找不到可 commit 的 YAML 時不再建立零 diff 承認 PR避免「看起來已有 PR、實際沒有 baseline 變更」的假閉環。
**local verification**
- `python3 -m py_compile apps/api/src/services/channel_event_dossier_service.py apps/api/src/api/v1/platform/events.py apps/api/src/services/emergency_escalation_service.py apps/api/src/services/drift_adopt_service.py apps/api/tests/test_channel_event_dossier_service.py apps/api/tests/test_emergency_escalation_service.py`pass。
- `DATABASE_URL=postgresql+asyncpg://awoooi:awoooi@localhost:5432/awoooi PYTHONPATH=apps/api pytest apps/api/tests/test_channel_event_dossier_service.py apps/api/tests/test_emergency_escalation_service.py -q`14 passed。
- `DATABASE_URL=... PYTHONPATH=apps/api ruff check --select F,E9,I ...`pass。
- `node -e "JSON.parse(...zh-TW.json); JSON.parse(...en.json)"`pass。
- `pnpm --dir apps/web run typecheck`pass。
- `pnpm --dir apps/web exec next lint --file src/app/[locale]/awooop/work-items/page.tsx`pass。
- `NEXT_PUBLIC_API_URL=https://awoooi.wooo.work pnpm --dir apps/web run build`pass with existing Sentry setup warnings。
- `git diff --check`pass。
**production verification**
- `fb9b0b3b feat(awooop): record recurrence handoff proposals``0367dde6 fix(drift): dedupe blocked auto-adopt escalations` pushed to Gitea main。
- Gitea Code Review `1806` successCD `1805` successdeploy marker `12fa9775 chore(cd): deploy 0367dde [skip ci]`
- CD logtests passedArgoCD `Synced + Healthy`API / Web / Worker rollout success。
- Health`https://awoooi.wooo.work/api/v1/health``status=healthy``mock_mode=false``environment=prod`
- Handoff API`work_item_id=incident:INC-20260517-F25B4A`
- `schema_version=awooop_recurrence_work_item_handoff_v1`
- `mode=ticket`
- `handoff_kind=ticket_proposal`
- `handoff_status=recorded`
- `allowed=true`
- `safety_level=handoff_record_only`
- `writes_incident_state=false`
- `writes_auto_repair_result=false`
- `writes_ticket=false`
- `creates_external_ticket=false`
- `next_step=operator_review_ticket_preview`
- history `recorded=true``timeline_event_id=bd883803-64aa-4f1f-a13d-351c0b0b54a9`
- Frontend Playwright smoke`/zh-TW/awooop/work-items?project_id=awoooi&work_item_id=incident%3AINC-20260517-F25B4A&incident_id=INC-20260517-F25B4A` 顯示導航、focused work item、交接按鈕點「交接」後顯示「已寫入歷史」、`外部 Ticket 建立false``交接Ticket 提案``incident=false``Application error=false`console errors=`0`
- Drift live evidence
- production `/api/v1/drift/reports` 最新仍是 `5aa66aa6` / `awoooi-prod` / `HIGH=1` / `MEDIUM=32` / `INFO=23` / `status=pending`,代表漂移本身仍需處理,不能宣稱已修復。
- Gitea PR #145 `state=open``merged=false``head_sha=00289938...``base_sha=12fa9775...`;先前 files/commits API 皆為 0證實該 PR 不是實際 baseline 修補。
**目前整體進度**
- AwoooP observability / truth-chain 可回看:約 98.3%。
- 來源告警入庫、重複發生、Sentry / SignOz 與修復結果可見性:約 98.4%。
- Telegram callback detail/history 可追溯:約 96%。
- AI 自動修復閉環:約 97.1%T63 完成「dry-run → 交接提案 → history」節點但沒有宣稱 `DockerContainerUnhealthy` 已真正自動修復。
- Config Drift 治理:約 88%P0 重複升級已止血,但真正閉環仍需 Drift fingerprint FSM、實際 YAML patch / Ansible check-mode / PR merge 後狀態回寫。
- 前端 AI 自動化管理介面產品化:約 97.5%。
- 完整 AI 自動化管理產品化:約 92.8%。
## 2026-05-18 | T62 Recurrence Work Item Safe Preview / Dry-run
**背景**T61 已把 `run_completed_no_repair` 轉成 open recurrence work item但 Operator 仍只能看到「要建立修復 Ticket」不能在前端確認下一步會怎麼做、會不會寫 incident / auto-repair / ticket、dry-run 是否有留下 history。這會讓 Telegram / AwoooP 仍像黑盒,無法清楚回答「現在跑到哪個流程階段」。

View File

@@ -2211,6 +2211,16 @@ Phase 6 完成後
- 邊界T62 仍不宣稱 `DockerContainerUnhealthy` 已真正 AI 自動修復;它完成的是「可操作前的安全預覽 / 乾跑 / history」。下一段才可設計受控 ticket apply、reverify、replay 或人工接手流程。
- 目前進度更新AwoooP truth-chain 可回看約 98%AI 自動修復閉環約 96.8%;完整 AI 自動化管理產品化約 92%。
**T63 Recurrence handoff proposal + drift escalation dedup production verified2026-05-19 台北)**
- 觸發T62 完成 safe preview / dry-run 後仍缺「交接」節點Operator 只能知道下一步可做 Ticket preview不能留下已轉人工/提案的 history。同步 production Telegram 出現 `ConfigDriftAutoAdoptBlocked` P0 每小時重複升級;查證 PR #145 為 open 但 files/commits 為 0不能更新 Git baseline。
- 修正:新增 `POST /api/v1/platform/events/dossier/recurrence/work-item/handoff`,產生 `awooop_recurrence_work_item_handoff_v1`。預設 `handoff_kind=ticket_proposal`,只記錄交接提案與 history不建立外部 Ticket、不修改 incident、不寫 auto-repair result。
- UI`/awooop/work-items` 的 recurrence work item 卡片新增「交接」按鈕與結果卡,顯示交接種類、交接狀態、外部 Ticket 是否建立、history 是否寫入;所有新文案走 zh-TW / en i18n。
- Drift 止血:`ConfigDriftAutoAdoptBlocked` emergency escalation 去重從 volatile `report_id` 改成 stable drift fingerprintTTL 24h`DriftAdoptService` 掃描 baseline 從 `k8s/*.yaml` 改成 `k8s/**/*.yaml`,且找不到可 commit YAML 時不再建立零 diff 承認 PR。
- Production deploy`fb9b0b3b feat(awooop): record recurrence handoff proposals` + `0367dde6 fix(drift): dedupe blocked auto-adopt escalations` 已推 Gitea mainCode Review run `1806` successCD run `1805` successdeploy marker `12fa9775 chore(cd): deploy 0367dde [skip ci]`
- Production evidencehealth healthyhandoff API 對 `incident:INC-20260517-F25B4A``handoff_status=recorded``writes_incident_state=false``writes_auto_repair_result=false``writes_ticket=false``creates_external_ticket=false``timeline_event_id=bd883803-64aa-4f1f-a13d-351c0b0b54a9`。Playwright production smoke 確認 Work Items 頁導航與 focused work item 仍可見,點「交接」後顯示「已寫入歷史」、`外部 Ticket 建立false``交接Ticket 提案`、console errors=0。
- 邊界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%。
---
### 2026-04-20 晚 (台北) — C1-C4 全流程串接 — Playbook 鏈路保護commit de2d34d