diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 19bfd95e..9595b88b 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -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 收斂。