# [P9-COMPLETION] Telegram Bot 全景修復(12 Agent / 16 派遣) **日期**: 2026-04-24 **模式**: P9(拆解)→ P7 × 16 **總結人**: Planner (Opus 4.7 / 1M) --- ## 1. 範圍涵蓋 | 嚴重度 | 已修 | 待處理 | |--------|------|--------| | Critical | 3(C1 PoC / C2 handler / C3 fail-closed) | C1 Bot Token 吊銷(須 BotFather 親操作) | | High | 4(H4 LRU / H6 rate-limit / H7 POSTGRES_PASSWORD / Hook 盲點) | H1 5969 行拆分、KM 雙寫、AIOps 停擺、雙 Bot 架構 | | Medium | 2(M 清散落 fix 檔、M 補 decision/ops fallback) | M4 multi-worker dict、callback prefix 統一 | | Low | 1(同步 docker-compose 回 git) | Untracked 檔處置 | --- ## 2. 檔案變更總覽(7 unstaged + 1 staged + 8 新檔) | 檔案 | +/- | 修了什麼 | |------|-----|---------| | `.claude/hooks/commit-quality.js` | +91/-43 | 補掃 Edit/Write payload、Telegram/Gemini/Gitea 多 pattern | | `.claude/settings.json` | +57/-18 | Hook 註冊到 Edit/Write/MultiEdit | | `config.py` | +10/-0 | POSTGRES_PASSWORD 空值 fail-fast(H7)| | `docker-compose.yml` | +8/-2 | 188 主機 env 修正同步回 git(Phase 1.5)| | `routes/openclaw_bot_routes.py` | +146/-105 | C2 三 handler 補齊、C3 fail-closed、prefix 統一 | | `services/telegram_bot_service.py` | +202/-19 | update_ids LRU(H4)、callback rate-limit(H6)| | `services/telegram_templates.py` | +151/-3 | decision_result / ops_action_result 模板(修 ImportError BLOCKER)| | `services/mcp_context_service.py` | +74(新)| staged 中 | | `.claude/hooks/__test__/commit-quality.test.sh` | 新 | 4 case 回歸測試 | | `docs/refactor/callback_prefix_proposal.md` | 新 | 308 按鈕盤點,方案 C 推薦 | | `docs/refactor/openclaw_bot_routes_split_plan.md` | 新 | 10 檔 / 45h 拆分地圖 | | `docs/guides/DISK_EXPANSION_GUIDE.md` | 新 | 磁碟擴容 SOP | | `scripts/cleanup_harbor_data.sh` / `setup_harbor_cleanup_cron.sh` / `diagnose_env.py` | 新 | 維運腳本 | | `n8n-workflows/27-hermes-ai-health-monitor.json` | 新 | Hermes 健康監控 flow | --- ## 3. 未完成(待下一波) - **C1 Bot Token 吊銷**:統帥親自 BotFather `/revoke`,無法由 Agent 代勞 - **H1** `openclaw_bot_routes.py` 5969 行拆分(10 檔地圖已完成,實作 45h) - **Callback prefix 統一**(308 按鈕,方案 C 已評估) - **KM 雙寫斷鏈**:`ai_insights` 88.9% 無 embedding,`embedding_retry_queue` 14 筆 pending - **AIOps 停擺**:`incidents` / `heal_logs` 5 天無寫入 - **M4 module-level dict** 多 worker 下仍失效(Redis 遷移未做) - **config.py / docker-compose.yml** 夾帶變更需統帥裁定後 commit --- ## 4. 剩餘風險(critic 報告外的延伸發現) | 風險 | 來源 Agent | 影響 | |------|-----------|------| | **雙 Bot 架構衝突** | web-researcher | polling + webhook 同 token 會觸發 409;目前因 webhook URL 空才沒爆。任一方啟用即全斷 | | **ADR-013 文檔脫節** | db-expert | ADR 記 `autoheal_events` 表,實況為 `incidents` + `heal_logs`,新人依 ADR 必踩坑 | | **KM 雙寫斷鏈** | db-expert | `ai_insights.embedding` 僅 11.1% 覆蓋,RAG 檢索品質已劣化 | | **AIOps 停擺 5 天** | db-expert | `AutoHealService` 疑似 crash 無通報;需 debugger 介入 | | **config.py 夾帶** | P9 掃描 | 10 行 fail-fast 非本 P9 範圍,可能來自 H7 副產物 | | **`sqlite:/` 目錄** | git status | 誤建路徑(疑 SQLAlchemy URL 寫錯),內含 `Users/` 子目錄,建議刪 | | **untracked scripts** | git status | 維運腳本未入 git,部署機重建會遺失 | --- ## 5. 下一波派遣建議 ### Sprint 1(本日 / 統帥親操) 1. BotFather `/revoke` 原 Token → 更新 188 `.env` → 重啟三容器 2. 裁定是否啟動 callback prefix 統一(方案 C,2 工天) 3. 裁定 H1 5969 行拆分時機(45h,建議排 Sprint 3) 4. 確認 `config.py` / `docker-compose.yml` / `sqlite:/` 處置 ### Sprint 2(一週內 / Agent) - `debugger`:AIOps 5 天停擺根因(logs + `AutoHealService` init) - `db-expert`:KM 雙寫補救(embedding backfill + retry queue flush) - `fullstack-engineer`:M4 dict → Redis(multi-worker 去重) - `critic`:ADR-013 文檔校正(表名對齊實況) - 本次未 push 的 7 檔 + staged 1 檔分批 commit + push ### Sprint 3(兩週內) - `refactor-specialist`:H1 5969 行拆分(依 `docs/refactor/openclaw_bot_routes_split_plan.md`) - `migration-engineer`:callback prefix 統一(若 Sprint 1 批准) - `tool-expert`:雙 Bot 架構決策(polling 獨佔 or webhook 切換) --- ## 6. 部署順序建議(分 3 批 commit) ### 批次 A — 安全網先上(低風險,可直推) - `.claude/hooks/commit-quality.js` + `.claude/settings.json` + `.claude/hooks/__test__/` - **理由**:純 Hook,無 runtime 影響,未來所有 commit 自動享保護 - **commit msg**:`security(hook): commit-quality 補掃 Edit/Write + 多平台 Token pattern` ### 批次 B — Telegram Bot 修復(中風險) - `routes/openclaw_bot_routes.py` + `services/telegram_bot_service.py` + `services/telegram_templates.py` - **理由**:C2/C3/H4/H6 + decision/ops 模板,三容器一起重啟驗證 - **smoke test**: 1. `https://mo.wooo.work/health` 200 2. Telegram `/start` → 按鈕回應正常 3. `cmd:ppt:daily` → 收到日報 4. scheduler logs 無 ImportError 5. 同一 callback 5 秒內連點 → rate-limit 生效(只處理 1 次) ### 批次 C — 基礎設施修正(需統帥裁定) - `config.py`(fail-fast)+ `docker-compose.yml`(env 同步)+ `services/mcp_context_service.py` - **理由**:改動 DB 連線與 compose,部署失敗會全斷 - **smoke test**:188 主機 `docker compose config` 驗證後再部署 ### 批次 D — 文件與腳本(零風險) - `docs/` + `scripts/` + `n8n-workflows/` - 可與批次 A 合併或單獨 push ### 部署後 188 主機 smoke test ```bash ssh wooo@192.168.0.110 "ssh ollama@192.168.0.188 \"\ docker ps --format '{{.Names}} | {{.Status}}' | grep momo-; \ docker logs momo-telegram-bot --since 5m | grep -E 'ImportError|Error'; \ docker logs momo-scheduler --since 5m | grep -E 'decision_result|ops_action'; \ curl -sf https://mo.wooo.work/health\"" ``` --- ## 7. 自審 - **方案正確**: 是 — 16 派遣涵蓋 Critical/High 全數,未完成項明確歸類至 Sprint - **影響完整**: 是 — 新發現 KM/AIOps/雙 Bot 三項延伸風險已入待辦 - **Regression 風險**: 中 — 批次 B 觸及 3 個 runtime 檔,建議先在本地 `python -c "from services.telegram_templates import decision_result"` 冒煙 **剩餘風險**: Bot Token 在吊銷前仍屬高危(CVSS 9.1),統帥須最優先處理。