docs: record telegram callback truth-chain rollout
This commit is contained in:
@@ -25863,3 +25863,97 @@ production browser smoke:
|
||||
- Sentry / SigNoz source correlation:約 99.0%;e2e-health 已通過,仍需逐筆 Incident source-link drill-down。
|
||||
- KM governance:約 82.5%;stale KM 仍需 Hermes 產草稿、owner 審核後寫入。
|
||||
- 完整 AI 自動化管理產品化:約 99.55%;產品視覺與 runtime truth 更準,但「全自動修復」仍是 evidence deficit,不是 UI deficit。
|
||||
|
||||
## 2026-06-01 | Telegram callback click truth-chain 入庫與前端判讀
|
||||
|
||||
**背景**:Telegram「詳情 / 歷史 / 審批」按鈕回覆已能在 outbound mirror 看到,但 production DB 沒有 inbound callback click 本身;operator 看得到 Bot 回覆,卻看不出「使用者按了什麼、什麼時候入庫、是否進入 AwoooP 狀態鏈」。這會讓 Telegram 告警仍像孤立訊息,無法成為完整 AI 自動化流程證據。
|
||||
|
||||
**Live truth 復核**:
|
||||
- `awooop_conversation_event` 已保存 outbound Telegram mirror `12517` 筆,但 `telegram_callback_total=0`、`telegram_text_total=0`,代表舊版沒有把 inbound Telegram callback query 入庫。
|
||||
- `GET /api/v1/platform/runs/callback-replies?project_id=awoooi&per_page=3` 在變更前後皆可看到 legacy outbound reply evidence:
|
||||
- `total=4`
|
||||
- `callback_total=4`
|
||||
- `callback_sent_total=4`
|
||||
- `callback_history_total=4`
|
||||
- `callback_detail_total=0`
|
||||
- `callback_snapshot_captured_total=2`
|
||||
- `callback_snapshot_missing_total=2`
|
||||
- `snapshot_status=partial`
|
||||
- `missing_trace_recent_24h=0`
|
||||
- `trace_recovery=recovered_after_gap`
|
||||
- 新版部署後 summary 明確標出 inbound click truth-chain 狀態:
|
||||
- `inbound_callback_total=0`
|
||||
- `inbound_callback_recent_24h_total=0`
|
||||
- `inbound_callback_mirror_status=reply_only_gap`
|
||||
- `inbound_callback_next_action=press_any_telegram_callback_after_rollout`
|
||||
- 判讀:舊 callback 只有回覆證據,click 當下未入庫;下一次按 Telegram 詳情 / 歷史 / 審批按鈕後,應開始產生 inbound callback query event。
|
||||
|
||||
**完成變更**:
|
||||
- `apps/api/src/services/telegram_gateway.py`
|
||||
- 新增 Telegram callback query inbound mirror:只保存 safe audit summary、hash、message id、action/ref/incident/approval,不保存 raw callback data / nonce。
|
||||
- Long polling callback path 在處理 callback 前先寫入 `awooop_conversation_event`。
|
||||
- `apps/api/src/api/v1/telegram.py`
|
||||
- Deprecated webhook path 也補 callback query mirror,避免舊入口漏證據。
|
||||
- `apps/api/src/api/v1/telegram_webhook.py`
|
||||
- ADR-094 webhook path 補 inbound callback query mirror,不改既有 callback 處理語義。
|
||||
- `apps/api/src/services/platform_operator_service.py`
|
||||
- callback replies summary 增加 inbound callback CTE、status 與 next action。
|
||||
- 能分辨 `capturing`、`reply_only_gap`、`no_callback_observed`。
|
||||
- `apps/api/src/api/v1/platform/operator_runs.py`
|
||||
- callback replies API schema 增加 inbound callback audit 欄位。
|
||||
- `apps/web/src/app/[locale]/awooop/runs/page.tsx`
|
||||
- TG Callback Evidence 增加「Operator 判讀」與「入站 click」卡片,讓 operator 直接看到舊資料缺口、新版驗證動作與下一步。
|
||||
- 同步修正首頁 `dashboard.ansibleRuntimeReady` translation key leak。
|
||||
- `apps/web/messages/zh-TW.json`、`apps/web/messages/en.json`
|
||||
- 補齊 callback inbound mirror 判讀文案與首頁 Ansible runtime ready 文案。
|
||||
|
||||
**驗證與部署**:
|
||||
- Local validation:
|
||||
- `python3 -m py_compile apps/api/src/services/telegram_gateway.py apps/api/src/api/v1/telegram.py apps/api/src/api/v1/telegram_webhook.py apps/api/src/services/platform_operator_service.py apps/api/src/api/v1/platform/operator_runs.py`
|
||||
- `python3 -m json.tool apps/web/messages/zh-TW.json`
|
||||
- `python3 -m json.tool apps/web/messages/en.json`
|
||||
- `git diff --check`
|
||||
- `DATABASE_URL=postgresql://test:test@localhost:5432/test PYTHONPATH=apps/api pytest apps/api/tests/test_telegram_webhook_execution_handoff.py apps/api/tests/test_awooop_operator_timeline_labels.py -q`
|
||||
- 結果:`62 passed in 1.17s`
|
||||
- `pnpm --dir apps/web exec tsc --noEmit --tsBuildInfoFile /tmp/awoooi-runs-callback-truth-chain-20260601.tsbuildinfo`
|
||||
- `NEXT_PUBLIC_API_URL=https://awoooi.wooo.work NEXT_PRIVATE_BUILD_WORKER_COUNT=1 pnpm --dir apps/web run build`
|
||||
- Commit:`6061b5cd feat(telegram): mirror callback click truth chain`,已推 `gitea main`。
|
||||
- Gitea:
|
||||
- `cd #3457` success:`tests`、`build-and-deploy`、`post-deploy-checks` 全部 success。
|
||||
- `tests #4798`:`2318 passed, 23 skipped`,B5 integration `5 passed`。
|
||||
- `post-deploy-checks #4800`:monitoring health 9/9 UP、Alert Chain Metric passed、Alertmanager / SigNoz / Sentry webhook HTTP 200、source-link canary applied、monitoring coverage 100%、Playwright smoke `5 passed`。
|
||||
- `code-review #3458` success。
|
||||
- CD deploy auto commit:`68c8bb9 chore(cd): deploy 6061b5c [skip ci]`。
|
||||
- Production image / rollout:
|
||||
- `awoooi-api=192.168.0.110:5000/awoooi/api:6061b5cd5466c52c9c611a7b21f959d3eabf897a`
|
||||
- `awoooi-worker=192.168.0.110:5000/awoooi/api:6061b5cd5466c52c9c611a7b21f959d3eabf897a`
|
||||
- `awoooi-web=192.168.0.110:5000/awoooi/web:6061b5cd5466c52c9c611a7b21f959d3eabf897a`
|
||||
- `kubectl rollout status deployment/awoooi-api deployment/awoooi-worker deployment/awoooi-web` 全部成功。
|
||||
- Production API:
|
||||
- callback replies summary 回 `HTTP=200`,包含 `inbound_callback_mirror_status=reply_only_gap` 與 `trace_recovery=recovered_after_gap`。
|
||||
- truth-chain quality summary 回 `HTTP=200`,`can_run_check_mode=true`、`binary_present=true`、`blockers=[]`。
|
||||
- Production browser:
|
||||
- `https://awoooi.wooo.work/zh-TW?_v=6061b5cd`
|
||||
- `dashboard.ansibleRuntimeReady` 已無 key leak。
|
||||
- `hasCheckMode=true`
|
||||
- `canScroll=true`
|
||||
- `https://awoooi.wooo.work/zh-TW/awooop/runs?project_id=awoooi&_v=6061b5cd#tg-callback-evidence`
|
||||
- `Operator 判讀` 顯示。
|
||||
- `入站點擊鏡像:只有回覆證據,舊點擊未入庫` 顯示。
|
||||
- legacy callback reply evidence 正常載入,無 translation key leak。
|
||||
- `https://awoooi.wooo.work/zh-TW/alerts?project_id=awoooi&incident_id=INC-20260530-0DD83C&_v=6061b5cd`
|
||||
- 告警頁可載入、可滾動、無 translation key leak;頁面中的 `error` 是告警類型文字,不是 HTTP 失敗。
|
||||
|
||||
**新揭露技術債**:
|
||||
- `truth-chain/quality/summary` 與 callback replies 這類稽核 summary 偏重,production 觀察到約 `12s` 到 `65s` 才回應;前端初始幾秒可能先顯示空狀態,之後才補上證據。下一步應建立 precomputed / cached summary,避免 operator 誤判「沒有資料」。
|
||||
- 舊 callback 點擊無法 retroactively 還原 inbound click event,只能保留 outbound reply / snapshot / trace recovery 證據;新版部署後要用下一次真實 Telegram 按鈕 click 驗證 inbound callback mirror 開始累積。
|
||||
|
||||
**目前整體進度(本階段完成後)**:
|
||||
- Telegram inbound / outbound / callback truth-chain:約 96%;outbound reply、legacy snapshot、trace recovery、新版 inbound click mirror 都已接上。剩餘是下一次真實按鈕 click 後觀察 `inbound_callback_total` 是否成長,以及將 summary 查詢快取化。
|
||||
- AwoooP Runs / Alerts / 首頁前端同步:約 99.97%;首頁、Runs、Alerts 已能呈現 runtime、callback、卷宗與 source correlation 判讀。
|
||||
- MCP / 自建 MCP 可視化與 adapter:約 98.8%;已修 `wooo` alias 與 `filter_name`,仍需看新事件 failed count 是否下降。
|
||||
- Ansible / PlayBook check-mode runtime:約 95%;runtime gate 已可跑 check-mode,但 auto-apply / verified repair 覆蓋仍低。
|
||||
- 完整自動修復 production claim:約 3%;30 筆 evaluated 只有少數 verified auto repair,仍不可對外宣稱「全自動修復已完成」。
|
||||
- Sentry / SigNoz source correlation:約 99.0%;e2e-health 通過,還要把每筆 Incident 的 source-link drill-down 快取化、產品化。
|
||||
- KM governance:約 82.5%;Hermes 產草稿、owner 審核後寫入的閉環仍是主缺口。
|
||||
- 完整 AI 自動化管理產品化:約 99.6%;可視化與證據鏈已很接近完整產品,但真正「AI 自動修復閉環」仍要用 24h production evidence 與更高 verified repair coverage 收斂。
|
||||
|
||||
Reference in New Issue
Block a user