docs(awooop): record t55 callback list evidence [skip ci]
This commit is contained in:
100
docs/LOGBOOK.md
100
docs/LOGBOOK.md
@@ -10143,3 +10143,103 @@ Browser smoke:
|
||||
- 低風險自動修復閉環:約 95%。
|
||||
- 前端 AI 自動化管理介面同步:約 89%。
|
||||
- 完整 AI 自動化管理產品化:約 84%。
|
||||
|
||||
### 2026-05-18 — T55 Run List 顯示 Telegram callback reply 狀態
|
||||
|
||||
**觸發**:
|
||||
|
||||
- T53 已把 Telegram「詳情 / 歷史」callback reply 寫入 `awooop_outbound_message.source_envelope.callback_reply`。
|
||||
- T54 已在 Run Detail timeline 顯示 callback delivery 階段。
|
||||
- Operator Console 的 Run List 仍缺列表層聚合,值班者無法在第一屏判斷「詳情 / 歷史」是否送達、fallback、救援或失敗需人工。
|
||||
|
||||
**修正**:
|
||||
|
||||
- `platform_operator_service.list_runs()` 新增 `callback_reply_summary`:
|
||||
- `schema_version=awooop_run_callback_reply_summary_v1`
|
||||
- `status=no_callback / sent / fallback_sent / rescue_sent / failed / observed`
|
||||
- `total / sent / fallback_sent / rescue_sent / failed / needs_human`
|
||||
- `latest_status / latest_action / latest_incident_id / latest_at / latest_provider_message_id`
|
||||
- Run List 前端新增 `TG Callback` 摘要卡與列表欄位,使用 i18n 文案呈現「尚無 Callback / 已送達 / Fallback 已送達 / 救援已送達 / 送達失敗」。
|
||||
- Incident 關聯收斂補讀 outbound `source_envelope.source_refs.incident_ids`,讓 callback-only incident refs 也能回到列表。
|
||||
- 第一輪 production smoke 抓到 FastAPI `response_model=ListRunsResponse` 會濾掉 `callback_reply_summary`;第二輪補 `RunItem.callback_reply_summary` 並加 response-model 測試,避免 service 有算但 API 送不出去。
|
||||
|
||||
**local verification**:
|
||||
|
||||
```text
|
||||
python3 -m py_compile src/services/platform_operator_service.py tests/test_awooop_operator_timeline_labels.py OK
|
||||
DATABASE_URL='sqlite+aiosqlite:///:memory:' pytest tests/test_awooop_operator_timeline_labels.py -q
|
||||
-> 21 passed
|
||||
ruff check --select F,E9 src/services/platform_operator_service.py tests/test_awooop_operator_timeline_labels.py OK
|
||||
jq empty apps/web/messages/zh-TW.json apps/web/messages/en.json OK
|
||||
pnpm --filter @awoooi/web typecheck OK
|
||||
pnpm --dir apps/web exec next lint --file src/app/[locale]/awooop/runs/page.tsx OK
|
||||
NEXT_PUBLIC_API_URL=https://awoooi.wooo.work pnpm --filter @awoooi/web build OK
|
||||
|
||||
Hotfix:
|
||||
python3 -m py_compile src/api/v1/platform/operator_runs.py tests/test_awooop_operator_timeline_labels.py OK
|
||||
DATABASE_URL='sqlite+aiosqlite:///:memory:' pytest tests/test_awooop_operator_timeline_labels.py -q
|
||||
-> 22 passed
|
||||
ruff check --select F,E9 src/api/v1/platform/operator_runs.py tests/test_awooop_operator_timeline_labels.py OK
|
||||
git diff --check OK
|
||||
```
|
||||
|
||||
**production deploy / smoke(完成)**:
|
||||
|
||||
```text
|
||||
Code commits:
|
||||
20d62ee0 feat(awooop): surface callback replies on run list
|
||||
0e3c63ec fix(awooop): preserve callback summary in run list response
|
||||
|
||||
Deploy markers:
|
||||
be551ac7 chore(cd): deploy 20d62ee [skip ci]
|
||||
32d4d1ea chore(cd): deploy 0e3c63e [skip ci]
|
||||
|
||||
Gitea Actions:
|
||||
2303 Code Review -> success
|
||||
2302 CD -> success
|
||||
2306 Code Review -> success
|
||||
2305 CD -> success
|
||||
tests -> success
|
||||
build-and-deploy -> success
|
||||
post-deploy-checks -> success
|
||||
|
||||
K8s image:
|
||||
awoooi-api 192.168.0.110:5000/awoooi/api:0e3c63ec15d7735d7f9691f7069baf6074f8ba12
|
||||
awoooi-web 192.168.0.110:5000/awoooi/web:0e3c63ec15d7735d7f9691f7069baf6074f8ba12
|
||||
awoooi-worker 192.168.0.110:5000/awoooi/api:0e3c63ec15d7735d7f9691f7069baf6074f8ba12
|
||||
|
||||
health:
|
||||
GET https://awoooi.wooo.work/api/v1/health -> healthy, prod, mock_mode=false
|
||||
components api/postgresql/redis/ollama/openclaw/signoz -> up
|
||||
|
||||
Run List API smoke:
|
||||
GET /api/v1/platform/runs/list?project_id=awoooi&per_page=5
|
||||
-> callback_reply_summary.status=no_callback on all sampled rows
|
||||
GET /api/v1/platform/runs/list?project_id=awoooi&per_page=100
|
||||
-> no_callback=100
|
||||
|
||||
Browser smoke:
|
||||
/zh-TW/awooop/runs?project_id=awoooi
|
||||
-> hasRunMonitor=true
|
||||
-> hasCallbackColumn=true
|
||||
-> callbackColumnCount=2
|
||||
-> noCallbackCount=50
|
||||
-> hasNav=true
|
||||
-> hasError=false
|
||||
|
||||
post-deploy log smoke:
|
||||
No callback_reply_summary / platform_operator / Traceback / ERROR / CRITICAL matches in recent API logs.
|
||||
```
|
||||
|
||||
**判讀**:
|
||||
|
||||
- T55 完成的是「列表層 callback delivery 可觀測」,不是歷史 backfill。
|
||||
- production 前 100 筆目前皆為 `no_callback`,代表欄位已出 API / UI;新 callback 發生後才會自然累積 `sent / fallback_sent / rescue_sent / failed`。
|
||||
- 第一輪 smoke 抓到 response-model 漏欄位,已在同階段修掉並補測試;這也補上 API contract 的技術債。
|
||||
|
||||
**目前整體進度**:
|
||||
|
||||
- AwoooP 告警可觀測鏈:約 93%。
|
||||
- 低風險自動修復閉環:約 95%。
|
||||
- 前端 AI 自動化管理介面同步:約 90%。
|
||||
- 完整 AI 自動化管理產品化:約 85%。
|
||||
|
||||
Reference in New Issue
Block a user