docs(logbook): record awooop timeline deploy [skip ci]

This commit is contained in:
Your Name
2026-05-07 05:05:16 +08:00
parent c00c7be9ae
commit 9d85ec5e96

View File

@@ -1,3 +1,42 @@
## 2026-05-07 | AwoooP Run Detail / Timeline 已上線,補齊 Telegram 狀態對照入口
**背景**Telegram 戰情室訊息已經開始收斂為「主卡 + 更新 + 摘要」,但值班者仍需要一個可回查的 AwoooP Console 入口,把同一個 Run 的 inbound event、outbound message、MCP call、step journal 與 runtime state 放在同一條時間線,避免只靠 Telegram 純文字判斷。
**本次修補**
- `GET /api/v1/platform/runs/{run_id}/detail` 新增 Run detail API回傳 run summary、step journal、inbound events、outbound messages、MCP gateway audit 與聚合 timeline。
- `/zh-TW/awooop/runs` 的 run id 改成可點擊連到 detail page。
- 新增 `/zh-TW/awooop/runs/[run_id]` 前端頁面提供狀態、trace、trigger、cost、duration、error 與 timeline 檢視。
- 補 router order regression test確保 `/runs/{run_id}/detail` 不會被既有 `/runs/{run_id}` 動態路由吃掉。
**驗證**
- `python -m py_compile apps/api/src/services/platform_operator_service.py apps/api/src/api/v1/platform/operator_runs.py apps/api/tests/test_platform_router_order.py`
- `pytest apps/api/tests/test_platform_router_order.py apps/api/tests/test_awooop_operator_auth.py -q` → 7 passed。
- `pnpm --filter @awoooi/web typecheck` 通過。
- `NEXT_PUBLIC_API_URL='https://awoooi.wooo.work' pnpm --filter @awoooi/web build` 通過route list 含 `/[locale]/awooop/runs/[run_id]`
- `ruff --select I apps/api/src/services/platform_operator_service.py apps/api/src/api/v1/platform/operator_runs.py apps/api/tests/test_platform_router_order.py` 通過。
- Gitea Code Review `#1494` successCD `#1493` successCD 自動 deploy marker `cd637ef6 chore(cd): deploy 66e22e2 [skip ci]`
- K8s `awoooi-api` / `awoooi-web` / `awoooi-worker` 已 rollout 到 image tag `66e22e26...`
- Production smoke`/api/v1/health` 200、`/zh-TW/awooop/runs` 200、`/zh-TW/awooop/runs/018f2d04-4c37-7a18-b764-df0df0cbe111` 200。
- Detail API 對不存在 run 回傳預期 404 JSON未出現 500。
## 2026-05-07 | AsyncSSH INFO log `%d format` 噪音止血,避免誤判主機診斷失敗
**背景**Run Detail 上線後檢查 production log仍看到 `TypeError: %d format: a real number is required, not str`。堆疊來自 `asyncssh/channel.py` 的 INFO log `Received exit status %d`,不是 AwoooP detail API也不是新的 Telegram formatter。這類第三方 logging traceback 會污染 API log並讓值班者誤以為 SSH 診斷或自動修復又失敗。
**本次修補**
- `SSHProvider` 在成功載入 `asyncssh` 後,將 `logging.getLogger("asyncssh")` 調整為 `WARNING`
- 保留 AWOOOI 自己的 structured MCP audit / provider log 作為觀測來源,不再依賴 AsyncSSH 第三方 INFO log。
- 新增 regression test鎖定 AsyncSSH logger 會被調整為 WARNING。
**驗證**
- `python -m py_compile apps/api/src/plugins/mcp/providers/ssh_provider.py apps/api/tests/test_ssh_provider_tools.py`
- `pytest apps/api/tests/test_ssh_provider_tools.py apps/api/tests/test_platform_router_order.py apps/api/tests/test_awooop_operator_auth.py -q` → 15 passed。
- `ruff --select I apps/api/src/plugins/mcp/providers/ssh_provider.py apps/api/tests/test_ssh_provider_tools.py apps/api/src/api/v1/platform/operator_runs.py apps/api/tests/test_platform_router_order.py` 通過。
- Gitea Code Review `#1496` successCD `#1495` successCD 自動 deploy marker `c00c7be9 chore(cd): deploy 336fd76 [skip ci]`
- K8s `awoooi-api` / `awoooi-web` / `awoooi-worker` 已 rollout 到 image tag `336fd767745d415c7779a1ee27e5c881ad2fe6ae`
- Production smoke`/api/v1/health` 200、`/zh-TW/awooop/runs` 200、`/zh-TW/awooop/runs/018f2d04-4c37-7a18-b764-df0df0cbe111` 200。
- 新部署後短窗口 log grep未再看到 `TypeError: %d format``Received exit status``Traceback``run_detail``platform_operator` 異常。
## 2026-05-06 | Telegram 將 SSH 診斷 lane 與自動修復 lane 分離
**背景**:戰情室截圖中 `ssh_diagnose` 這類只讀主機診斷失敗時,也會出現 `[AUTO] AI 自動修復失敗,已升級人工介入`。這會讓值班者誤以為系統已嘗試修復且修復失敗;實際上它只是「診斷工具失敗」或「診斷已完成但沒有安全修復動作」。