diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 602c7eaf..e5baf883 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -2,4295 +2,168 @@ > **用途**: AI 代理進度追蹤,防止 Session 斷層 > **規則**: 完成重要節點後追加一行 +> **歷史**: 舊條目已壓縮,詳細記錄見 git log --- -## 📍 當前狀態 (2026-04-07 Sprint 4 全棧完成 → 待首席架構師 Review #2 + 部署) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Sprint 4 Phase A+B (資料層+寫入層) | ✅ | 9253281 | -| Sprint 4 Phase C+D (API+Telegram) | ✅ | a85e9ce | -| Sprint 4 P0 修正 (hash統一+積木化) | ✅ | 561bcb6 | -| Sprint 4 Phase E (前端處置統計) | ✅ | 22bc384 | -| Sprint 4 Phase E+F (首頁disposition+週報) | ✅ | de3935d | -| /reports 處置統計儀表板 | ✅ | KPI + 4卡片 + 堆疊條 + 明細表 | -| /auto-repair 處置概況 | ✅ | 4 處置卡片 | -| /neural-command stats 處置分佈 | ✅ | 處置分佈區塊 | -| 首頁 Metrics Strip 自動化率 | ✅ | disposition API 優先 | -| 週報 WeeklyReport 處置分佈 | ✅ | 5 欄位 + 格式化 | -| i18n 翻譯 | ✅ | 25+ key (zh-TW + en) | -| next build | ✅ | 全部頁面通過 | -| 首席架構師 Review #1 | ✅ 82/100 | P0 全數修正 | - -**Sprint 4 全 6 Phase 完成!** 下一步: 首席架構師 Review #2 → `git push gitea main` - ---- - -## 📍 當前狀態 (2026-04-07 Sprint F 打假行動完成 → Sprint 4 Phase A 待實作) +## 📍 當前狀態 (2026-04-08 全面監控+操作記錄完成) | 項目 | 狀態 | 說明 | |------|------|------| -| Sprint F 計畫文件 | ✅ | `docs/superpowers/plans/2026-04-07-sprint-f-fake-data-purge.md` | -| 首席架構師審查 | ✅ 100% | Fully Approved (統帥指示: 立即啟動) | -| P0: Neural Command 假數據清除 | ✅ | NeuralLiveCenter + NeuralStats + NeuralApprovalPanel | -| P1: 假用戶身份清除 | ✅ | 7處 demo-user → commander/統帥 | -| P2: Demo 匯出清理 | ✅ | 6處 Demo 組件/Mock 常數刪除 | -| P3: /demo 頁面保護 | ✅ | NEXT_PUBLIC_ENABLE_DEMO 環境變數 | -| i18n 新增翻譯 | ✅ | 22 個新 key (zh-TW + en) | -| TypeScript 驗證 | ✅ | 零新增錯誤,假數據搜尋零殘留 | -| project_sprint_f_fake_data_purge.md | ✅ | Memory 更新 | -| project_current_status.md | ✅ | 狀態快照更新 | -| 首席架構師 Review | ✅ 98/100 | C1(CURRENT_USER統一) + C2(未使用import) 已修正 | -| C1 修正: CURRENT_USER 統一 | ✅ | 10+處 'commander'/'統帥' → CURRENT_USER 常數 | -| C2 修正: NeuralStats import 清理 | ✅ | 移除未使用的 lucide import | -| 漏網之魚修復 | ✅ | openclaw-state-machine.tsx War Room User → CURRENT_USER | -| 最終驗證 | ✅ | 'commander' 僅存於 user.ts 定義,TypeScript 零新增錯誤 | +| Sprint 3/4/F | ✅ | 已部署 (68a2fff) | +| 自動修復全面啟用 | ✅ | 移除所有 gate,僅保留 P0/P1 阻擋 | +| auto_repair_executions DB 記錄 | ✅ | Phase 10 (eee6f06) | +| alert_operation_log 溯源 | ✅ | Phase 11, 654 筆歷史回填 (f20121a) | +| ADR-060 全面監控規劃 | ✅ | 已批准 | +| ADR-061 Event Sourcing | ✅ | 已實施 | +| Plan A docker-health-monitor.sh | ⏳ 待實作 | 腳本設計完成,待部署 | +| Plan B Exporters (PG/Redis/Nginx) | ⏳ 待部署 | docker-compose.exporters.yaml 已有框架 | +| Plan C Blackbox 外部網站 | ⏳ | 4 個外部網站待加入 | -**下一步**: Sprint 4 Phase A 實作 (A1→A2→A3: Model + Redis 計數器) +**下一步**: 實作 Plan A docker-health-monitor.sh → 部署 Plan B Exporters --- -## 📍 當前狀態 (2026-04-07 Sprint 4 規劃完成 → Phase A 待實作) +## 📊 里程碑總覽 (壓縮版) -| 項目 | 狀態 | 說明 | -|------|------|------| -| Sprint 4 計畫文件 | ✅ | `docs/superpowers/plans/2026-04-07-sprint4-disposition-tracking.md` | -| 首席架構師審查 | ✅ 100% | Fully Approved | -| 衝突檢查 | ✅ 無衝突 | 與 Sprint 3/Phase 24/Telegram/i18n 均無衝突 | -| feedback_disposition_tracking.md | ✅ | 四種分類邏輯+推斷規則+Redis設計 | -| project_master_workplan.md 更新 | ✅ | Sprint 3 + Sprint 4 完整工作項 | -| project_current_status.md 更新 | ✅ | 最新狀態快照 | +### 2026-04-08 — 全面監控+操作溯源架構 -**下一步**: Phase A 實作 (A1→A2→A3: Model + Redis 計數器) +- 自動修復移除所有 gate:直接執行(統帥指令) +- Phase 10: auto_repair_executions DB 記錄(成功/失敗都寫入) +- Phase 11: alert_operation_log Event Sourcing(654 筆歷史回填) +- ADR-060: 全面基礎設施監控規劃(4 主機 30+ 服務) +- ADR-061: Alert Operation Log 架構決策 +- 統帥首席架構師裁示:Plan A→B→C 優先序,Redis/PG 僅告警,Intent→Action→Result 三段式 ---- - -## 📍 當前狀態 (2026-04-07 Sprint 3 P0 Critical Security Fixes 完成 + Re-Review 91/100 通過) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **P0-1: 完整 Shell 特殊字元檢測** | ✅ | f8d4772 | -| **P0-2: ansible playbook_path shlex.quote()** | ✅ | f8d4772 | -| **P0-3: SSH 目標主機白名單驗證** | ✅ | f8d4772 | -| **P0-4: HostRepairAgent Singleton 冪等鎖** | ✅ | f8d4772 | -| 新增 11 個 P0 單元測試 | ✅ 45/45 | f8d4772 | -| feedback_ssh_command_security.md 記憶文件 | ✅ | (memory) | - -**首席架構師評分**: 76/100 → 條件通過 (修正 4 個 P0 後) -**下一步**: -1. ✅ 完成 4 個 P0 critical fixes -2. ✅ 所有 45 項測試通過 -3. 🔄 await 首席架構師 Re-Review (預計 30 分鐘內可完成) -4. ⏳ 審核通過後可部署到 prod - ---- - -## 📍 當前狀態 (2026-04-06 四個網站修復 + 監控納入) - -| 項目 | 狀態 | 備註 | -|------|------|------| -| mo.wooo.work (MOMO Pro) | ✅ 修復 | 188 上 build momo-pro-system:latest + docker compose up | -| www.tsenyang.com | ✅ 修復 | 110 build → 傳 188 → docker compose up → 3000:3000 | -| stock.wooo.work | ✅ 修復 | 110 docker compose up (31235) + nginx 188/110 修正 IP | -| bitan.wooo.work | ✅ 本來就 OK | 110:3003 本來就在跑 | -| nginx 110 修正 | ✅ | mo → 192.168.0.188:5003, tsenyang → 188:3000, stock → 110:31235 | -| nginx 188 修正 | ✅ | stock → 192.168.0.110:31235 (docker run alpine 寫入 root 檔案) | -| Prometheus 監控 | ✅ | blackbox-http 新增 tsenyang/stock/bitan 三個 target | - ---- - -## 📍 當前狀態 (2026-04-05 自動修復閉環打通 + repair-bot 部署) - -| 項目 | 狀態 | Commit/備註 | -|------|------|--------| -| auto_repair 閉環打通 (_try_auto_repair_background) | ✅ | 5499169 | -| is_high_quality 冷啟動降閾 (>= 3次, >= 80%) | ✅ | 5499169 | -| TypeScript type-sync 修正 | ✅ | b58178d | -| repair-bot-110.sh 部署到 /home/wooo/bin/ | ✅ | 手動 scp | -| repair-bot-188.sh 部署到 /home/ollama/bin/ | ✅ | 手動 scp | -| CI type-sync-check 跑到 run #499 失敗 → #500/#501 補修 | ⏳ | in_progress | -| API Pod 更新到最新 commit | ⏳ | 等 CD 完成 | - ---- - -## 📍 當前狀態 (2026-04-05 Telegram/CD 顯示修復 + ADR-059 全部完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Telegram 按鈕根因修復 (whitelist int→list[int]) | ✅ | 76f3ffd | -| answerCallbackQuery bool is not iterable | ✅ | 22ee9b2 | -| SRE 群組告警升級為完整 v7.0 格式 | ✅ | 4b4007d | -| CD 通知 ${MINUTES}/${SECONDS} 未展開 | ✅ | 8220027 | -| Nemotron args dict 格式 → key=value 格式 | ✅ | 8220027 | -| ADR-059 Gitea Webhook 遷移(全 9 Task) | ✅ | 59e7879 | -| test_gitea_webhook.py 10/10 | ✅ | 59e7879 | -| CD task 424 部署中 | ⏳ | 8220027 | - -**Telegram 按鈕現在可用**: whitelist property 返回 str → 改 get_tg_user_whitelist() 返回 list[int] - ---- - -## 📍 當前狀態 (2026-04-05 ADR-059 Gitea Webhook 遷移完成 + 全計劃執行完畢) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| config.py: GITHUB_WEBHOOK_SECRET → GITEA_WEBHOOK_SECRET | ✅ | 6777532 | -| gitea_webhook_service.py: 新建,移除 CI diagnosis | ✅ | 6777532 | -| gitea_webhook.py: Router, X-Gitea-* headers | ✅ | b2c0148 | -| main.py: 已掛載 gitea_webhook_v1 | ✅ | 2336442 | -| test_gitea_webhook.py: 10/10 通過 | ✅ | 59e7879 | -| 03-secrets.yaml: GITEA_WEBHOOK_SECRET 佔位 | ✅ | 2336442 | -| cd.yaml: GITEA_WEBHOOK_SECRET 自動注入步驟 | ✅ | 2336442 | -| ADR-059: 架構決策文件 | ✅ | 2336442 | -| 舊 github_webhook.py / github_webhook_service.py: 已刪除 | ✅ | — | -| Push to Gitea | ✅ | 59e7879 | - -**待統帥操作** (部署後手動): -1. Gitea Actions secret: `GITEA_WEBHOOK_SECRET` 設定 (與 K8s Secret 值相同) -2. Gitea UI Webhook: `http://192.168.0.110:3001/wooo/awoooi` → Settings → Webhooks → Add - - Target URL: `https://awoooi.wooo.work/api/v1/webhooks/gitea` - - Content-Type: `application/json` ← 必須明確選擇 - - Secret: `GITEA_WEBHOOK_SECRET` 值 - - Trigger: Pull Request events + Push events - ---- - -## 📍 當前狀態 (2026-04-05 Sprint 3 + 首席架構師 Review 全通過) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| repair-bot-110.sh / repair-bot-188.sh | ✅ | 77253a5 | -| SSH keypair + authorized_keys + K8s Secret | ✅ | 892c5d5 | -| HostRepairAgent (TDD 12/12 通過) | ✅ | e7d8da8 | -| ActionType.SSH_COMMAND + auto_repair_service | ✅ | bf4f814 | -| K8s SSH key 掛載 (/etc/repair-ssh) + CD 持久化 | ✅ | 1cc8c27 | -| 5個 Host Repair Playbooks (全部 approved) | ✅ | b688eee | -| Sprint 3 E2E 驗收 | ✅ | 全通過 | -| 首席架構師 Review C1/C2/C3/M3/m1 修正 | ✅ | 4b24ecd | -| ADR-058 Host Auto-Repair SSH 白名單 | ✅ | — | - -**全系統自愈閉環**: Prometheus/SigNoz 告警 → AWOOOI API → SSH → repair-bot → docker compose up -d -**首席架構師評分**: 72/100 → 修正後 88/100 - ---- - -## 📍 當前狀態 (2026-04-05 備份全面自動化完成) - -| 項目 | 狀態 | 說明 | -|------|------|------| -| ADR-057 adopt() Gitea PR API 實作 | ✅ a81bf50 | drift_adopt_service.py 建立 | -| GITEA_API_TOKEN 注入 K8s Secret | ✅ | kubectl patch awoooi-secrets | -| MinIO 啟動(Velero BSL Available) | ✅ | docker compose up -d + 加入 startup.sh | -| Gitea SQLite DB 損壞修復 | ✅ | sqlite3 .recover 救回,454 Actions runs | -| 備份審計 — 全景盤點 | ✅ | BACKUP-STATUS.md 建立 | -| AWOOOI PostgreSQL 備份腳本部署 (110) | ✅ | /backup/scripts/backup-awoooi.sh 已部署 | -| backup-all.sh 整合 AWOOOI (v1→v2) | ✅ | 4/4 服務統一備份 | -| GFS 保留策略延長 (7→30日/4→12週/6→24月) | ✅ | common.sh 更新 | -| 首次 awoooi_prod 備份執行 | ✅ | 680K,9s,snapshot 8750748f | - -**備份缺口**: awoooi_prod + Gitea DB 均無自動備份 → P0 待統帥手動部署 -**文件**: `docs/runbooks/BACKUP-STATUS.md` - ---- - -## 📍 當前狀態 (2026-04-05 Telegram 按鈕根因修復 + SRE 群組格式升級) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| 按鈕無反應根因診斷 | ✅ | security_interceptor.whitelist 返回 str 而非 list[int] | -| fix: whitelist property 改呼叫 get_tg_user_whitelist() | ✅ | 76f3ffd | -| SRE 群組告警格式升級為完整 v7.0(統帥指示) | ✅ | 4b4007d | -| CD task 419/420 部署 | ✅ | Pod 56f98d84bb 運行中 | - -**按鈕修復**: `user_id in whitelist` 中 whitelist 是字串 → Python `int in str` 報錯 -**SRE 群組**: `_send_approval_card_to_group` 升級使用 TelegramMessage.format() 完整格式 - ---- - -## 📍 當前狀態 (2026-04-05 Telegram 訊息格式重設計 + 按鈕修復 — 首席架構師 R1 通過) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| CD pipeline 修復 (docker_health_monitor.sh) | ✅ | Run #480 success | -| I2: NIM system prompt 修正 | ✅ | 53e1ae7 | -| I4: DriftDetector field_path 正則匹配 | ✅ | 53e1ae7 | -| E2E 驗證 (NIM primary, Gemini fallback) | ✅ | Run #480 | -| Telegram 訊息格式重設計 (移除 ═══/━━━) | ✅ | 4935cfc | -| Telegram 按鈕修復 (incident_id 傳遞鏈) | ✅ | 4935cfc | -| 首席架構師 Review R1 (86/100) | ✅ | 665f93e | -| I-1: 三個 webhook 呼叫者補 TODO | ✅ | 665f93e | -| I-2: TestPushRequest 新增 incident_id | ✅ | 665f93e | -| M-1: 移除冗餘 `or message.incident_id` | ✅ | 665f93e | -| M-2: 補充截斷長度差異說明 | ✅ | 665f93e | - -**已知限制**: Alertmanager/Sentry/SignOz 三條路徑無 incident_id,detail/reanalyze/history 按鈕靜默缺席(已標 TODO) -**決議**: 待 Approval→Incident 關聯建立後補傳 - ---- - -## 📍 當前狀態 (2026-04-05 Phase 25 首席架構師 Review R2 通過 + ADR-054~057 完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| 首席架構師 Review R2 (78/100 → 修正後通過) | ✅ | 6 項問題全部修正 | -| I1: anti_pattern task _pending_tasks GC 防護對稱化 | ✅ 4912c7f | auto_repair_service.py | -| C3: rollback() resource_key 實際生效(範圍過濾) | ✅ 4912c7f | drift_remediator.py | -| M1: _git_push() 標記 DISABLED 防誤啟用 | ✅ 4912c7f | drift_remediator.py | -| I2: Telegram 移除失效 adopt 端點連結 | ✅ 4912c7f | drift.py | -| I3: 前端 namespace→namespaces(對齊後端) | ✅ 4912c7f | drift/page.tsx | -| I4: 前端移除硬編碼英文,補 i18n loading key | ✅ 4912c7f | drift/page.tsx + messages/ | -| ADR-054: DIAGNOSE Privacy-First Routing | ✅ 15c7f6f | 已批准 | -| ADR-055: Knowledge Auto-Harvesting | ✅ 15c7f6f | 已批准 | -| ADR-056: Config Drift Detection 四層架構 | ✅ 15c7f6f | 已批准 | -| ADR-057: adopt() Gitea PR API 路徑 | ✅ 15c7f6f | 草案,待統帥批准 | - -**Phase 25 驗收結論**: 條件通過 → 修正後通過 ✅ - -**待統帥決定**: ADR-057 批准 → adopt() Gitea PR API 實作 - ---- - -## 📍 當前狀態 (2026-04-04 Phase 25 P1/P2 source code inspection tests 36/36) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| test_phase25_auto_harvesting.py 18/18 | ✅ 4bc4757 | NemotronRunbookGenerator + AntiPattern gate | -| test_phase25_drift_detection.py 18/18 | ✅ 4bc4757 | DriftDetector + interpreter/remediator + local chain | -| Phase 25 全部測試 36/36 | ✅ | 源碼審查,無 mock,無 DB | - -**下一步**: 統帥驗收 Phase 22 F22 + Phase 25 (E2E Telegram #215) + ADR-055/056/057 - ---- - -## 📍 當前狀態 (2026-04-05 全系統重開機恢復完成) - -| 主機 | 狀態 | 修復項目 | -|------|------|---------| -| 188 | ✅ | containerd BoltDB + Docker BoltDB + PostgreSQL WAL + Redis 6380 bind | -| 110 | ✅ | Docker BoltDB + 孤兒容器清除 + Harbor/Gitea/Langfuse/SignOz/Monitoring 全起 | -| 120/121 | ✅ | K3s nodes Ready,kine stale PG 連線手動 kill | -| awoooi-prod | ✅ | 所有 Pod Running (API/Web/Worker) | -| API Health | ✅ degraded | openclaw down (ClawBot build issue,非關鍵) | - -**自動化**: 188 `awoooi-startup.service` + 110 `awoooi-startup-110.service` 已 enable -**文件**: `scripts/reboot-recovery/` 兩台啟動腳本 + `docs/runbooks/REBOOT-RECOVERY-SOP.md` - ---- - -## 📍 當前狀態 (2026-04-04 Phase 25 全部驗證通過 + Phase 22.4 18/18 PASSED) - -| 項目 | 狀態 | 說明 | -|------|------|------| -| Phase 22.4 tests 18/18 | ✅ b6e12f7 | test_phase22_nemotron_collab.py path fix | -| embed-all 7/7 prod | ✅ API 驗證 | 7/7 success 返回 | -| semantic-search E2E | ✅ API 驗證 | score=0.6867 有結果 | -| drift /scan E2E | ✅ API 驗證 | 無漂移,正常回應 | -| drift-cronjob.yaml apply | ✅ k8s | drift-scanner CronJob 每小時執行 | -| dev/prod DB migration | ✅ 手動 | symptoms_hash + AUTO_RUNBOOK + ANTI_PATTERN enum | -| 53 tests PASSED | ✅ | Phase 22.4 + integration 全部綠燈 | - -**當前 prod commit**: `c4eafd2` (Phase 25 全實作已部署) - -**下一步**: 統帥驗收 Phase 22 F22 + Phase 25 驗收 (E2E Telegram 測試 #215) - ---- - -## 📍 當前狀態 (2026-04-04 Phase 25 Nemotron 主動防禦三方向 P0+P1+P2 完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| P0: DIAGNOSE Privacy-First | ✅ _local_fallback_chain + REJECT + Telegram | 3455044 | -| P0: NEMOTRON_DIAGNOSE_TIMEOUT_SECONDS | ✅ config.py 新增 | 3455044 | -| P0: nemotron task_type timeout | ✅ diagnose=30s, 其他=45s | 3455044 | -| P1: AUTO_RUNBOOK + ANTI_PATTERN EntryType | ✅ knowledge.py | 3455044 | -| P1: EntryStatus.PUBLISHED | ✅ ANTI_PATTERN 直接發布 | 3455044 | -| P1: symptoms_hash 欄位 + index | ✅ db/models.py + repository | 3455044 | -| P1: NemotronRunbookGenerator v1.1 | ✅ nvidia.chat() 正確介面 | 3455044 | -| P1: phase8_symptoms_hash.sql | ✅ Migration 完成 | 3455044 | -| P2: DriftItem/DriftReport/DriftLevel/DriftIntent | ✅ models/drift.py | 3455044 | -| P2: DriftDetector + DriftAnalyzer | ✅ Git vs K8s 比對 | 3455044 | -| P2: NemotronDriftInterpreter | ✅ 意圖分析(不生成修復指令) | 3455044 | -| P2: DriftRemediator | ✅ rollback/adopt 確定性修復 | 3455044 | -| P2: /api/v1/drift/* endpoints | ✅ scan/reports/rollback/adopt | 3455044 | -| P2: drift-cronjob.yaml | ✅ 每小時自動掃描 | 3455044 | - -**待部署**: phase8 + phase9 migration 上 prod DB + kubectl apply drift-cronjob.yaml + CD 部署 3455044 - ---- - -## 📍 當前狀態 (2026-04-04 自動修復閉環完成 + Playbook KM 串接 + 首席架構師 Review PASSED) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **根本原因診斷 (19筆PENDING)** | ✅ 3個根因全清查 | — | -| **playbooks DB table 建立** | ✅ phase7_playbooks_table.sql (PRIMARY KEY + 5 GIN index) | 72d7536 | -| **Ollama embedding is_closed 重建** | ✅ _get_http_client() 偵測自動重建 | d0f0970 | -| **embed_playbook() Bug 修復** | ✅ s.sequence→s.step_number, s.description→s.command | d0f0970 | -| **Telegram ai_model 欄位** | ✅ format/format_with_nemotron 顯示底層模型 | d0f0970 | -| **殭屍 PENDING 清除** | ✅ 9筆 3/26 mock_fallback CRITICAL 測試記錄已清 | d0f0970 | -| **Playbook→KM 串接** | ✅ playbook_service._write_to_km fire-and-forget | 72d7536 | -| **執行結果→KM 串接** | ✅ approval_execution._write_execution_result_to_km | 72d7536 | -| **冷啟動修復** | ✅ 執行成功自動設定 execution_success=True, score=4, RESOLVED | 72d7536 | -| **首席架構師 Review 21→25** | ✅ 4 Critical/Important 全修 (C1+I1+I2+I3) | df3ef90 | -| **smollm2:135m 刪除** | ✅ 0.3GB CPU 機器無用模型已移除 | — | - -**完整閉環已通**: 告警→AI分析→Playbook RAG→人工批准/自動執行→KM沉澱→下次加速決策 - -**下一步**: 觀察 prod 是否有新告警命中 Playbook RAG - ---- - -## 📍 當前狀態 (2026-04-04 知識庫 pgvector RAG Phase 1 完成 + 首席架構師 Review) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **pgvector 安裝** | ✅ 192.168.0.188 PostgreSQL | 手動 | -| **embedding 欄位 + ivfflat index** | ✅ knowledge_entries | 手動 migration | -| **API: GET /semantic-search + POST /embed-all** | ✅ | 8960bba | -| **整合測試 23 PASSED** | ✅ | 5e836bd | -| **首席架構師 Review** | ✅ 71→~88 (C1/C2/I1/I2 修復) | patch commit 待推 | -| **IKnowledgeRepository Protocol 補齊** | ✅ C1 修復 | — | -| **Service 層 raw SQL 移至 Repository** | ✅ C2 修復 | — | -| **asyncio.create_task 引用持有** | ✅ I1 修復 | — | -| **OllamaEmbeddingService __init__ 注入** | ✅ I2 修復 | — | - -**下一步**: push gitea → CD 部署 → /embed-all 補齊 7 筆 prod 資料 → E2E 驗證語意搜尋 - ---- - -## 📍 當前狀態 (2026-04-03 Phase 22.6 雙 AI 對話 + 首席架構師 Code Review) - -| 項目 | 狀態 | Commit/備註 | -|------|------|-------------| -| **Phase 22.6 chat_manager 重寫** | ✅ 雙 AI (@openclaw/@nemo/混合模式) | be247d6 | -| **NEMOTRON_TIMEOUT 30→55s** | ✅ ConfigMap + kubectl set env | k8s configmap | -| **nvidia_provider.py 讀 config** | ✅ 不再硬編碼 30s | — | -| **費用變更審批憲法第五章** | ✅ HARD_RULES + Memory + CLAUDE.md | — | -| **I1: openclaw timeout 硬編碼** | ✅ 改讀 OPENCLAW_TIMEOUT config | — | -| **I2: stale 註解 45→55** | ✅ nvidia_provider.py comment 修正 | — | -| **I3: asyncio.shield task leak** | ✅ 移除 shield,改直接 wait_for | — | -| **I4: ChatManager 持有 repo** | ✅ 移至 get_system_context() 本地變數 | — | -| **S3: NIM 探測 10s timeout** | ✅ 改 25s + 用 /v1/models 輕量端點 | — | -| **首席架構師 Review 評分** | 85/100 — 4 Important 已全修 | — | - -**下一步**: 等待 CI 部署驗證,Ollama on 188 仍需手動重啟 - ---- - -## 📍 當前狀態 (2026-04-03 首席架構師 Code Review — Layout 對齊 + Phase 24 命名收尾) - -| 項目 | 狀態 | 備註 | -|------|------|------| -| **sidebar top 修正** | ✅ top:0→top:68px,sidebar 不再蓋住 header | | -| **app-layout 對齊** | ✅ pt-[68px] + ml-[224px],消除 32px 水平空隙 | | -| **page.tsx calc** | ✅ calc(100vh-64px)→calc(100vh-68px) | | -| **Metrics Strip 7指標** | ✅ 完整對齊 figma-v2 設計 | | -| **test_nvidia_provider.py** | ✅ "nvidia" key → "openclaw_nemo" 對齊 Phase 24 | | -| **ai_rate_limiter.py** | ✅ RATE_LIMITS/COST_LIMITS "nvidia"→"openclaw_nemo" | | -| **Review 評分** | 88/100 — 通過,3項警告,0項違規 | | - -**下一步**: 無緊急待做 - ---- - -## 📍 當前狀態 (2026-04-03 Phase 24 收尾 + KB + Monitoring 修復) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **知識庫 Phase 1** | ✅ DB+API+前端+7篇文章+307修復 | e7b4f43 | -| **307 redirect fix** | ✅ ProxyHeadersMiddleware + 路由 "" | 9cf9e85, e7b4f43 | -| **DIAGNOSE timeout fix** | ✅ llama3.2:3b 代替 qwen2.5:7b (4s vs 90s) | b225c23 | -| **Prometheus DOWN fix** | ✅ 移除 4 個不可達 K3s target (110→0 DOWN) | 主機 config | -| **I1 Redis TTL** | ✅ ai:control:* 30天 TTL | e60225e | -| **I3 openclaw_nemo** | ✅ rate_limiter "nvidia"→"openclaw_nemo" | e60225e | - -**下一步**: 無緊急待做,Phase 24 + Phase O 全面完成 - ---- - -## 📍 當前狀態 (2026-04-03 Phase 24 全面完成 + 首席架構師 R3/R4/R5 通過) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **Phase 24 B4** | ✅ openclaw.py 舊 fallback 封存 | b4b3a45 | -| **Phase 24 C** | ✅ ai_control.py NEW + /ai 指令 + Redis 動態控制 | dbe71f8 | -| **R5 架構修復 C1** | ✅ Telegram whitelist Fail-Closed | b6105b8 | -| **R5 架構修復 C2** | ✅ Python 3.11 await for loop | b6105b8 | -| **AIProviderEnum C1** | ✅ NVIDIA→OPENCLAW_NEMO+NEMOTRON 對齊 Registry | 97d8686 | -| **R3 B2 觀察期** | ✅ 12/12 incidents openclaw_nemo 正確路由 | — | -| **R4 通過** | ✅ openclaw.py 封存驗收 | — | -| **R5 通過 (條件)** | ✅ C1+C2 修復,K8s Secret 待確認 | — | -| **Wave D Grafana** | ✅ 3 dashboards (ai/infra/nemotron) @ 188:3002 | 30b7b10 | -| **記憶體全面更新** | ✅ project_current_status / phase24 / monitoring / review_schedule | — | - -**下一步待做**: I1 (Redis TTL) + OPENCLAW_TG_USER_WHITELIST K8s Secret 確認 - ---- - -## 📍 當前狀態 (2026-04-03 前端全面補完) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **監控工具區塊** | ✅ GET /api/v1/monitoring/status (Grafana/Prometheus/SigNoz/Gitea) | ce11fcd | -| **9 空殼頁面 → 真實 API** | ✅ apps/deployments/apm/tickets/users/compliance/cost/billing/security | cb0f925 | -| **compliance resolved_rate bug** | ✅ 修復 ×100 重複計算 | e1e89c5 | -| **users executed_at → created_at** | ✅ 修復 Invalid Date | e1e89c5 | -| **Push gitea** | ✅ 推版完成 (e1e89c5) | — | - ---- - -## 📍 當前狀態 (2026-04-03 台北) - -| 項目 | 狀態 | -|------|------| -| **前端 UI 對齊 figma-v2** | ✅ 卡片式佈局 + SEV顏色 + layout bug 修復 — commit 2253c1b push gitea | -| **14 個 ComingSoon 頁面** | ✅ 替換真實 UI (e93a50a) — services/topology/notifications/reports 串 API | -| **CD 測試修復** | ✅ test_nvidia_provider.py NEMOTRON 修正 (6266a4f) | -| **AppLayout fullBleed** | ✅ 修復主頁大空白 + Metrics Strip 右側溢出 (2253c1b) | -| **Phase 24 B2 觀察期** | ⏳ 進行中 — 截止 2026-04-04 18:40 | - ---- - -## 📍 當前狀態 (2026-04-02 21:30 台北) - -| 項目 | 狀態 | -|------|------| -| **Phase 24 B2 觀察期** | ⏳ **進行中** — USE_AI_ROUTER=true,gemini 已驗證,48h 截止 2026-04-04 18:40 | -| **Phase O-4 Wave A** | ✅ **完成** — Smoke Test 8/8 PASSED | -| **CD pipeline** | ✅ 修復 (test AIProviderEnum + smoke test + Prometheus scrape) | -| **Phase O-5 Wave B-C** | 🔲 待執行 (CD Smoke Test 整合 + 監控即代碼) | - -### Phase 24 B2 首次 Prod 驗證 -- `ai_router_execute_success` event 確認存在 Langfuse ✅ -- Provider: gemini, 信心度 0.88, tokens 2005, cost $0.000284 ✅ -- USE_AI_ROUTER=true 已設定到 ConfigMap ❌ (待下次 CD 寫入,現為 kubectl set env) - -### Phase O-4 Wave A 修復清單 -- `sentry_webhook.py` GET /health 新增 -- `webhooks.py` record_alert_chain_success() 實際呼叫 -- Prometheus scrape: awoooi-api 加入 (192.168.0.121:32334) -- smoke_test: Prometheus URL 修正 (110:9090) - ---- - -## 📍 歷史狀態 (2026-04-02 01:30 台北) - -| 項目 | 狀態 | -|------|------| -| **Phase O: 可觀測性終極補完** | 📋 設計批准,待實施 (O-1 → O-6, 12-15h) | -| **K3s 健康盤點** | ✅ 全叢集 23 Pod / 0 重啟 / 0 壓力,但發現 6 大盲區 | -| **架構決策: SigNoz 統一派** | ✅ 統帥批准 (不另裝 Loki) | -| **設計規格** | ✅ `docs/superpowers/specs/2026-04-02-observability-ultimate-completion-design.md` | - ---- - -## 📍 歷史狀態 (2026-04-02 09:30 台北) - -| 項目 | 狀態 | -|------|------| -| **Langfuse LLMOps 全修復** | ✅ v2.60.10 部署 + trace 驗證 4 筆 + Gitea Secrets 注入 | -| **首席架構師審查修復** | ✅ i18n 6檔 + CD self-hosted + 時區 + Secret exit 1 + op:add | -| **技術債清理** | ✅ risklevel migration 自動化 + Whitelist 更新 + worktree 清理 | -| **Knowledge Base Phase 1** | ✅ 後端四層架構 + 前端頁面 | -| **dev 分支同步** | ✅ Fast-forward to main | - ---- - -## 📍 歷史狀態 (2026-04-01 17:30 台北) - -| 項目 | 狀態 | -|------|------| -| **Phase S + MCP 整合** | ✅ **`c9c60c3`** Phase S架構修復(82→完整) + ADR-048/049/050/051 + Playwright CD | -| **OpenClaw LLM 修復 P0** | ✅ **`0d4034d`** Ollama 預設 + qwen2.5:7b-instruct — 待部署 | -| **Phase S 技術債清理** | ✅ **`22de22c`** S-01~S-05 全部完成 (393 passed) | -| **用量優化 + Memory 精簡** | ✅ MEMORY 204→127行 / CLAUDE.md 221→83行 / 5個新Memory (token_efficiency + daily_habits + workflow_schedule + ui_protocol + design_quickref) | -| **P0 Telegram 按鈕修復** | ✅ **`e6f6734`** Redis Leader Election (多 Pod 409 修復) | -| **首席架構師完整審查 (含 Code + 測試)** | ✅ **96/100 OUTSTANDING** 詳見下方審查報告 | -| **測試修復** | ✅ **test_smart_router + test_auto_repair + test_global_repair** 全部修復 | -| **Phase R 首席架構師完整審查** | ✅ **ADR-047 97/100 OUTSTANDING** R1-R4 + ADR-046 全部通過 | -| **Phase 19.6 測試補全** | ✅ **test_terminal.py** + **registry.test.ts** + **terminal.spec.ts** + ADR-031 更新 | -| **Phase 22 P0 Y/n CSRF 修復** | ✅ **`95de7e0`** `dual-state-incident-card.tsx` + `api-client.ts` CSRF + credentials | -| **CD Docker cache 修復** | ✅ **`45e194c`** `--no-cache` 強制重建 Web bundle(BuildKit 快取毒化修復) | -| **部署中** | 🔄 **`45e194c` → Gitea CD 執行中** 等待 bundle hash 更新驗證 | -| **Phase R-R2.1 首席審查** | ✅ **72/100 條件通過** P2-01/02/03 修復 (`signal_worker` + `IIncidentEngine` + `USE_NEW_ENGINE`) | -| **ADR-046** | ✅ **Option B 決策完成** IncidentConverter 轉換層 (Phase R-R3+ Sprint 實作) | -| **Phase R-R2.1** | ✅ **架構審查 P0+P1 修復** `d17b67c` (key prefix/型別/死碼) | -| **Phase R-R3** | ✅ **已完成** (Phase 22 架構修復中建立, 9 repos) | -| **ADR-046** | 📋 **待統帥決策** 跨套件 Incident 型別統一 (Option B: IncidentConverter) | -| **Phase R-R2** | ✅ **完成** (#121 #122 `c7b3f8f` -971 行 legacy code;#123 暫緩至 R-R3) | -| **Phase R-R1** | ✅ **已實作** (絞殺者模式 + USE_NEW_ENGINE=True 已驗證) | -| **首席架構師審查** | ✅ **78→85/100** (P0 NVIDIA型別 + P1 IAIRouter Interface) | -| **Phase 14.3** | ✅ **全部完成!** (51 型別 + CI 驗證 + R/A Review) | -| **Phase 12** | ✅ **全系列完成!** (12.1-12.4 + Cloud Models) | -| **Phase 15** | ✅ **全系列完成!** (15.1-15.4 全部確認) | -| **Phase 11** | ✅ **F1-F3 通過** (F4 待統帥驗收) | -| **Phase 22 首席架構師審查** | ✅ **全部完成!** P0+P1+P2 修復 | -| **R10.2.2 Session Replay** | ✅ **Code Review 通過** | -| **Wave 3 i18n/ESLint** | ✅ **完成** | -| **Phase 22 ADR-044** | ✅ **實作中 70%** (22.1-22.3 完成,22.4 測試待實作) | -| **Wave 4 E2E Hardening** | ✅ **完成** (`60b461d` - ignoreHTTPSErrors + global.setup.ts) | -| **NVIDIA Rate Limiter 修復** | ✅ **已修復** (daily_requests: 100→99999 免費版無限制) | -| **Gitea Secrets 注入** | ✅ **已完成** (NVIDIA_API_KEY + GEMINI_API_KEY) | -| **#127 Replay 效能評估** | ✅ **完成** (Lighthouse 84% - Replay 影響極低) | -| **Phase 22 P0** | ✅ **leWOOOgo 模組化修復** (`8313a37` - OpenClaw/GitHub/Health Services) | -| **#126 Frontend Replay UI** | ✅ **完成** (`2f02f15` - UXAuditCard + useUXAudit hook) | -| **K0 基礎穩定化** | ✅ **低風險完成** (K0.1/3/4/6/7) | -| **Phase 22.0 CI pytest** | ✅ **已完成** (CD Pipeline 加入測試步驟) | -| **Phase 22.4 命名清理** | ✅ **已完成** (ClawBot 舊檔案移除) | -| **P0-1 CD Secrets 注入** | ✅ **已完成** (ADR-035 強制) | -| **P0-2 NVIDIA 模型修正** | ✅ **已完成** (nemotron-mini-4b) | -| **P0-3 OpenClaw 架構審查** | ✅ **已完成** (釐清 NVIDIA 400 導致 Gemini Fallback 備援及 Rule Match 導致 0% 信心度,已修補 Prompt Context 溢出問題) | -| **Phase 18 失敗自動修復** | ✅ **OUTSTANDING** (95/100 + P0 修復 `138a56a`) | -| **Phase 21 定期報告** | ✅ **全部完成!** | -| **Phase 21.1 Daily E2E** | ✅ **已完成** (每日 00:00 台北) | -| **Phase 21.2 K3s Report** | ✅ **已完成** (每日 09:00 台北) | -| **Phase 21.3 Weekly Report** | ✅ **已完成** (每週五 18:00 台北) | -| **Telegram 雙向對話** | ✅ **vfix13-15** (ChatManager + 路由修復) | -| **Nemo-4B 仲裁穩定化** | ✅ **vfix16** (精簡 Prompt + 魯棒解析) | -| **Telegram 會話主權** | ✅ **Webhook Kicker** (終止 188 競爭) | -| **#15 SSE + 樂觀更新** | ✅ **完成** (`8c8664c`) | -| **#16 DOM Bypass** | ✅ **完成** (`0b87018`) | -| **#17 i18n Hydration** | ✅ **完成** (`f25e94e`) | -| **#18 SSE Exponential Backoff** | ✅ **已實作** (4 stores 已含) | -| **#19 Action Logs AbortController** | ✅ **完成** (2026-03-31) | -| **ADR-042** | ✅ **前端效能模式** (DOM Bypass + Optimistic Updates) | -| **#46c OTEL CI/CD** | ✅ **Gitea 遷移** (d2f4708) | -| **#33 Sentry 驗證** | ✅ **SENTRY_DSN + OTEL 24317 修復** | -| **首席架構師審查** | ✅ **96/100 + 98/100 OUTSTANDING** (前端 P1+P2) | -| **Phase A/B/C P1** | ✅ **97/100 OUTSTANDING** | -| **K8sRepository** | ✅ **leWOOOgo 積木化封裝** | -| **OTEL 追蹤** | ✅ **Telegram Gateway 完整 Span** | -| **首席架構師** | ✅ **97/100 OUTSTANDING** | -| **CD 佇列模式** | ✅ **cancel-in-progress: false** | -| **Phase 19.4** | ✅ **Terminal Service API 整合完成** (60 測試通過) | -| **Intent Classifier** | ✅ **Ollama 整合完成** (21 測試通過) | -| **Learning Service** | ✅ **Playbook 信心度調整完成** (13 測試通過) | -| **ADR-039 Gitea 遷移** | ✅ **已完成** (GitHub Actions 停用,Gitea 主倉) | -| **Telegram 通知** | ✅ **Raw Logs 驗證 200 OK** (OoO 接收成功) | -| **Wave 1 安全網** | ✅ **全部完成** (Circuit Breaker + Global Cooldown + XCLAIM) | -| **Wave 2 Worker HPA** | ✅ **已部署** (min:1 max:3, CPU 70%) | -| **Lint 清理** | ✅ **61→0 完全清零** (2e9ccf4) | -| **CD 部署** | ✅ **版本 2e9ccf4 已部署** | -| **3 Runners** | ✅ **awoooi-110, 110-2, 110-3 全部上線** | -| **E2E Health** | 🔄 **遷移到 Gitea** (GitHub 不穩定) | -| **首席架構師審查** | ✅ **91/100 → P1 修復後 95/100** | -| **P1 修復** | ✅ **5/5 完成** (8724ed7) | -| **Day** | Day 12 | -| **K3s 版本** | v1.34.5+k3s1 (mon + mon1) | -| **叢集健康** | ✅ **所有 Pod 正常運行** | -| **K3s 優化** | ✅ **全部完成 + P1-P3 + PSS** | -| **K-MON** | ✅ **監控整合** (VIP/Velero/SignOz/Sentry 告警) | -| **K3 HPA** | ✅ **API/Web 2-6 + Worker 1-3 自動擴展** | -| **K4 Kured** | ✅ **自動重啟 (02:00-04:00 維護窗口)** | -| **K4 Descheduler** | ✅ **負載均衡 (每 2 小時, threshold 30%)** | -| **K4.3 PSS** | ✅ **Pod Security Standards (6 Namespace labels)** | -| **K-HA** | ✅ **雙 Control-Plane (120+121) + PostgreSQL Datastore** | -| **VIP** | ✅ **192.168.0.125 (keepalived + CI/CD 整合)** | -| **kube-state-metrics** | ✅ **v2.10.1 @ :30888 + NPD 告警整合** | -| **Grafana Dashboard** | ✅ **K3s Cluster Overview + NVIDIA Nemotron (18 panels)** | -| **ArgoCD** | ✅ **ApplicationSet CRD 修復** | -| **告警狀態** | ✅ **0 個告警觸發 (48h+ 穩定)** | -| **K3s 優化成效** | ✅ **告警 -100%, Pod 重啟 -100%, RS -100%** | -| **首席架構師審查** | ✅ **Wave A-D: 194/200 (97%) OUTSTANDING** | -| **模組化合規** | ✅ **100% 通過** | -| **Wave 1 安全網** | ✅ **全部完成** (Circuit Breaker + Global Cooldown + XCLAIM) | -| **Wave 2 Worker HPA** | ✅ **已部署** (min:1 max:3, CPU 70%) | -| **Wave C-D 監控** | ✅ **全部完成** (generate + discover + coverage_report) | - -## 🏛️ 首席架構師全面審查 (2026-04-01 11:00 台北) - Phase R 完整 + 測試修復 - -**審查範圍**: 模組化規範、測試套件、代碼品質、ADR-024 四層架構、Pydantic v2、生產健康 - -### 修復總覽 - -| 優先級 | 修復項目 | 狀態 | 說明 | -|--------|---------|------|------| -| **P1** | `test_smart_router.py` 13 項測試失敗 | ✅ | API 演進 (IntentResult/IntentType 差異) 已修正 | -| **P1** | `test_auto_repair_service.py` 9 項失敗 | ✅ | `check_global_repair_cooldown` DI 注入 | -| **P1** | `test_global_repair_cooldown.py` 3 項失敗 | ✅ | integration marker 標記 + pyproject.toml 登記 | -| **P2** | `global_repair_cooldown.py` get_redis() 未保護 | ✅ | 移入 try-except (防 RuntimeError 逃逸) | -| **P2** | `AutoRepairService` cooldown 無法注入 | ✅ | 新增 `cooldown_checker: Callable | None` DI 參數 | -| **P3** | `pyproject.toml` 未登記 integration marker | ✅ | 新增 markers 設定 | -| **觀察** | Pydantic v2 deprecated (12 instances) | 📋 Phase S | approval.py + incident.py `class Config/json_encoders` | -| **觀察** | `github_webhook.py` 1505 行大 Router | 📋 Phase S | 協調邏輯未移至 service,但無直接 Redis/DB | -| **觀察** | 生產 Dashboard 部分主機顯示 unreachable | ℹ️ 已知 | API 服務 healthy,K3s 內網 host check 問題 | - -### ADR-024 四層架構合規掃描 - -| 層級 | 主要發現 | 狀態 | -|------|---------|------| -| **Router** | 無直接 Redis/DB/httpx 存取 | ✅ | -| **Router** | AlertAnalyzer 已移至 services/ | ✅ | -| **Router** | `generate_alert_fingerprint()` 22 行純函數 (Phase S S-01) | ⚠️ P3 | -| **Router** | `github_webhook.py` 大型協調函數未移至 service | ⚠️ P2 Phase S | -| **Service** | IncidentConverter 邊界清晰 | ✅ | -| **Repository** | 9 個 Repository 全部正常 | ✅ | - -### 測試套件最終狀態 (非整合測試) - -| 測試檔案 | 結果 | -|---------|------| -| test_action_parsing | 24 passed ✅ | -| test_approval_field_alignment | 13 passed ✅ | -| test_auto_repair_service | 11 passed ✅ | -| test_circuit_breaker | 11 passed ✅ | -| test_failure_watcher | 40 passed ✅ | -| test_github_webhook | 10 passed ✅ | -| test_global_repair_cooldown | 4 passed ✅ (7 integration skipped) | -| test_intent_classifier | 16 passed ✅ | -| test_learning_service | 13 passed ✅ | -| test_llm_tier1_schema | 35 passed ✅ | -| test_playbook_service + test_prompt_validation | 13 passed ✅ | -| test_smart_router | 19 passed ✅ | -| test_telegram_message_templates | 14 passed ✅ | -| test_terminal | 18 passed ✅ | -| test_terminal_service | 54 passed ✅ | -| **Integration (需 Redis/外部服務)** | test_redis_multisig, test_anomaly_counter, test_global_repair_cooldown(7) | - -### 生產環境狀態 - -| 組件 | 狀態 | -|------|------| -| API | ✅ healthy | -| PostgreSQL | ✅ up (46ms) | -| Redis | ✅ up (46ms) | -| Ollama | ✅ up (53ms) | -| OpenClaw | ✅ up (38ms) | -| SignOz | ✅ up (27ms) | - -**評分: 96/100 OUTSTANDING** ✅ - -**評分說明**: -- -2: `github_webhook.py` 協調邏輯未移至 service (P2 Phase S) -- -2: Pydantic v2 deprecated 12 instances (P3 Phase S) -- 加分: 發現並修復 3 項測試失敗 + `global_repair_cooldown` 安全漏洞 - ---- - -## 🏛️ Phase 22 首席架構師全面審查 (2026-03-31 21:00 台北) - -**審查範圍**: Mock 使用、架構合規、Source Code 分層 - -### 修復總覽 - -| 層級 | 修復項目 | 狀態 | Commit | -|------|---------|------|--------| -| **P0** | Y/n 按鈕失效 (CSRF Token) | ✅ | live-approval-panel.tsx | -| **P1** | 4 個測試檔案 Mock 違規 | ✅ | `31c9117` | -| **P1** | 3 個 Router 層直接存取 Repository | ✅ | `31c9117` | -| **P2** | Protocol 簽名不一致 | ✅ | `e7e3fc8` | -| **P2** | 缺失 Protocol 方法補齊 | ✅ | `e7e3fc8` | -| **P2** | LearningService 業務邏輯分層 | ✅ | `e1e3bba` | -| **P2** | Similarity 計算邏輯抽取 | ✅ | `e1e3bba` | - -### 關鍵修正 - -1. **Y/n 按鈕修復**: 整合 `useCSRF` hook,傳遞 `csrfToken` 到 API 呼叫 -2. **Mock 違規**: 使用 `monkeypatch` 取代 `patch.object`,符合 `feedback_no_mock_testing.md` -3. **Router 分層**: 新增 `AuditLogService`,Router 透過 Service 存取 Repository -4. **業務邏輯分離**: `LearningService.get_learning_summary()` 自己計算 `learning_status` -5. **演算法獨立**: 新增 `src/utils/similarity.py`,Repository 從 utils 導入 - -### 提交紀錄 - -``` -e1e3bba refactor(api): Phase 22 技術債修復 - 業務邏輯分層 -e7e3fc8 refactor(api): Phase 22 P2 Protocol 簽名修正 + 缺失方法補齊 -31c9117 refactor(api): Phase 22 P1 模組化修復 - Router→Service 封裝 -``` - -**符合規範**: leWOOOgo 積木化 ✅ | 禁止 Mock ✅ | 四層架構 ✅ - ---- - -## 🔧 Phase 22 P0 補救: 活躍事件 Y/n 按鈕 CSRF 根本原因修復 (2026-04-01 台北) - -### 問題定位 - -Phase 22 首席審查時的 Y/n 修復是針對 `live-approval-panel.tsx` / `openclaw-state-machine.tsx`,但 **活躍事件卡片**(`dual-state-incident-card.tsx`)是另一個獨立的 Y/n 入口,CSRF token 完全沒有接入。 - -### 根本原因鏈 - -``` -活躍事件卡片 Y/n → dual-state-incident-card.tsx - → apiClient.signApproval() ← 沒有 CSRF token 參數 - → 後端 403 CSRF token cookie missing - → 按鈕無反應(錯誤被吞沒) -``` - -### 修復 - -| 檔案 | 修改內容 | Commit | -|------|---------|--------| -| `dual-state-incident-card.tsx` | 加入 `useCSRF()` hook,傳遞 `csrfToken` | `95de7e0` | -| `apps/web/src/lib/api-client.ts` | `signApproval`/`rejectApproval` 加 `csrfToken` 參數 + `credentials:'include'` | `95de7e0` | - -### CD Bundle Cache 毒化問題 - -`95de7e0` 部署後 bundle hash 未更新(`603-c6b7de5225e1e082.js` hash 不變)。 - -**根本原因**: `--cache-from` + `BUILDKIT_INLINE_CACHE=1` 讓 Docker BuildKit 重用 `COPY . .` 層,新程式碼未進入 Next.js build。 - -**修復**: 移除 `--cache-from`,加 `--no-cache` 強制完整重建。 - -| 修復 | Commit | -|------|--------| -| `cd.yaml` Web build `--no-cache` | `45e194c` | - -### 狀態 - -- `45e194c` → Gitea CD 執行中(`--no-cache` build 約需 5-8 分鐘) -- 部署後需驗證 `603-*.js` bundle hash 更新 - ---- - -## 🤖 ADR-044 OpenClaw + Nemotron 協作設計 (2026-03-31 18:00 台北) - -**完成內容**: -- **NVIDIA Rate Limiter 修復**: `daily_requests: 100→99999` (免費版無每日限制) -- **Redis 計數器清除**: `DEL ai_rate:daily_req:nvidia:2026-03-31` -- **Gitea Secrets 注入**: `NVIDIA_API_KEY` + `GEMINI_API_KEY` 已設定 -- **ADR-044 設計完成**: OpenClaw + Nemotron 協作架構 -- **首席架構師審查**: 83/100 條件通過,P1 必修項已補充 - -**ADR-044 核心決策**: -``` -OpenClaw = 仲裁者 (Arbitrator) - 決定「為什麼」和「風險等級」 -Nemotron = 執行者 (Executor) - 決定「怎麼做」和「具體指令」 -``` - -**觸發條件**: -| 風險等級 | OpenClaw | Nemotron | -|----------|----------|----------| -| LOW | ✅ | ❌ | -| MEDIUM+ | ✅ | ✅ | - -**待實作** (Phase 22.1-22.4, ~13h): -- 22.1: TelegramMessage 擴展 (2h) -- 22.2: generate_incident_proposal_with_tools (4h) -- 22.3: 異步推送邏輯 (3h) -- 22.4: E2E 測試 (4h) - -**更新文件**: -- `docs/adr/ADR-044-openclaw-nemotron-collaboration.md` -- `.agents/skills/03-openclaw-cognitive-expert.md` (v1.7 Phase 22) -- `.agents/skills/08-model-router-expert.md` (協作路由) -- `memory/project_phase22_nemotron_collab.md` -- `memory/project_nvidia_ratelimit_fix.md` -- `memory/feedback_ai_rate_limiter.md` (免費服務警告) - ---- - -## 🛰️ Telegram 雙向對話與 AI 仲裁極限修復 (2026-03-31 16:00 台北) - -**完成內容**: -- **vfix13**: 實作 `ChatManager` 與 `TelegramGateway` 監聽文字訊息 -- **vfix14**: 實作 **侵略性 Polling (2s)** 搶佔 .188 實例會話 -- **vfix15**: 修復 `send_notification` 定向路由 (chat_id) 與 LLM 結果解包錯誤 -- **vfix16**: 實作 `NEMOTRON_SYSTEM_PROMPT` 與 `OpenClaw` 魯棒解析引擎 (防 Pydantic 崩潰) -- **Webhook Kicker**: 成功清除 188 競爭會話,K3s Pod 獲取獨佔主導權 - -**效益**: -- 統帥現在能直接在 Telegram 與 Nemo-4B 進行對話。 -- OpenClaw 告警仲裁不再因 JSON 欄位缺失而退化至 0% 信心度。 -- 徹底解決了長期困擾的「雙腦衝突」(Split Brain) Polling 問題。 - ---- - -## 🎬 #126 Frontend Replay UI 整合 (2026-03-31 15:30 台北) - -**完成內容**: -- `apps/web/src/lib/api-client.ts` - 新增 `getUXAudit()` 方法 + `UXAuditResponse` 類型 -- `apps/web/src/hooks/useUXAudit.ts` - 新建 Session Replay 數據 Hook -- `apps/web/src/components/errors/ux-audit-card.tsx` - 新建 UX Audit 卡片組件 -- `apps/web/src/app/[locale]/errors/page.tsx` - 整合到錯誤追蹤頁面 -- `apps/web/messages/zh-TW.json` + `en.json` - 新增 `uxAudit` i18n 翻譯 - -**功能**: -- 顯示 UX 健康度評分 (good/moderate/poor) -- 顯示有錯誤的 Replay 連結 (點擊跳轉 Sentry Replay) -- 統計憤怒點擊 / 死亡點擊 / UI 錯誤 -- 每 5 分鐘自動刷新 - -**後端 API**: `/api/v1/errors/ux-audit` (Phase 19 已實作) - ---- - -## 🧱 Phase 22 P0 leWOOOgo 模組化修復 (2026-03-31 16:00 台北) - -**Commit**: `8313a37` - -**Router 層禁止直接 httpx.AsyncClient,抽取到 Service 層:** - -新增 Services: -- `OpenClawHttpService`: Error 分析 / Code Review / Push Review / CI 診斷 -- `GitHubApiService`: PR Diff 取得 -- `HealthCheckService`: HTTP / PostgreSQL / Redis 健康檢查 - -修改 Routers: -- `sentry_webhook.py`: 使用 `OpenClawHttpService` -- `github_webhook.py`: 使用 `GitHubApiService` + `OpenClawHttpService` -- `health.py`: 使用 `HealthCheckService` - -**遵循規範**: Skill 09 + `feedback_lewooogo_modular_enforcement.md` - ---- - -## 🔧 Phase 18 失敗自動修復閉環 (2026-03-31 12:00 台北) - -**統帥批准**: 2026-03-31 - -| Phase | 內容 | 狀態 | -|-------|------|------| -| 18.1 | AuditLog 表擴展 | ✅ 已完成 | -| 18.2 | FailureWatcher Service | ✅ `8e2d7c3` | -| 18.3 | K8s Executor 整合 | ✅ `770586d` | -| 18.4 | OpenClaw 深度分析 | ✅ `d6f3785` | -| 18.5 | Telegram 修復卡片 | ✅ 基礎整合 | -| 18.6 | E2E 測試驗證 | 🟡 待實作 | - -**核心流程**: -``` -執行失敗 → FailureWatcher 偵測 → AI 分析 → 風險評估 - ├─ LOW → 自動修復 → 揭露通知 - └─ MEDIUM/CRITICAL → Telegram 請求授權 -``` - ---- - -## 📊 K3s 優化成效驗證 (2026-03-31 00:30 台北) - -| 指標 | 優化前 | 優化後 | 改善 | -|------|--------|--------|------| -| **告警數** | 17 | 0 | **-100%** | -| **Pod 重啟** | 92+/天 | 0/天 | **-100%** | -| **孤立 RS** | 29 | 0 | **-100%** | -| **備份機制** | 0 | 3 層 | **+∞** | -| **穩定運行** | N/A | **48h+** | ✅ | - -**詳細數據**: `memory/project_k3s_optimization_metrics.md` - ---- - -## 📅 Phase 21 定期報告機制規劃 (2026-03-31 02:00 台北) - -### 整合評估結果 - -| 機制 | 現有復用 | 新增工作 | 工時 | 建議 | -|------|---------|---------|------|------| -| **Daily E2E Schedule** | 95% | +2 行 YAML | 15 min | 🔴 P0 立即 | -| **K3s Telegram Report** | 70% | +Service +Message | 2h | 🟡 P1 本週 | -| **Weekly Report** | 60% | +Template +CronJob | 2-4h | 🟢 P2 下週 | - -### 依賴分析 - -``` -Phase 18 (E2E Hardening) ✅ - └─► 21.1 Daily E2E Schedule (無依賴) - └─► 21.2 K3s Report (需 Prometheus 數據) - └─► 21.3 Weekly Report (整合 21.1 + 21.2) -``` - -### 與現有 Phase 關聯 - -| 關聯 | 類型 | 說明 | -|------|------|------| -| Phase 18 | 延續 | 21.1 是 E2E Hardening 的自動化 | -| ADR-033 | 補強 | 21.2 是 K3s 優化成效的可視化 | -| ADR-037 | 整合 | 21.3 整合 Wave A-D 監控數據 | - -### 待統帥決策 - -1. ✅ Phase 21 編號確認? -2. ✅ Weekly Report 選項 A (Telegram) 或 B (Email)? -3. ✅ Phase 21.1 立即實施? -4. ✅ K3s 報告頻率 (每日/每週)? - -**詳細計畫**: `memory/project_periodic_reporting_plan.md` - ---- - -## ✅ 前端 P1 改進完成 (2026-03-31 01:30 台北) - -### #16 ThinkingTerminal DOM Bypass - -| 項目 | 內容 | -|------|------| -| **問題** | 千行 GraphRAG 日誌存入 React State → 記憶體崩潰 | -| **解法** | 使用 `ref.current` 直接操作 DOM,繞過 React state | -| **效益** | 100x 渲染效能提升 | -| **Commit** | `0b87018` | - -### #15 SSE + Optimistic Updates - -| 項目 | 內容 | -|------|------| -| **問題** | Zustand Polling 與授權 API Race Condition | -| **解法** | 樂觀更新 + SSE 增量更新 | -| **效益** | 即時 UI 響應 (0ms 延遲) + 減少 API 請求 | -| **Commit** | `8c8664c` | - -### 新增檔案 - -- `apps/web/src/components/agent/thinking-terminal-optimized.tsx` - DOM Bypass 終端機 - ---- - -## ✅ Phase A/B/C P1 改進完成 (2026-03-31 00:30 台北) - -### 變更摘要 - -| Phase | 內容 | Commit | -|-------|------|--------| -| **Phase A** | Constants 提取 + 錯誤訊息安全化 + CI/CD alertname 配置化 | `bb85d89` | -| **Phase B** | send_cicd_progress 重試機制 + K8sRepository 封裝 | `13bb149` | -| **Phase C** | Telegram Gateway OTEL 追蹤 (完整 Span + 屬性) | `adaef51` | - -### 首席架構師審查 - -| 項目 | 評分 | -|------|------| -| 模組化合規 | 49/50 ✅ | -| 代碼品質 | 24/25 ✅ | -| 安全性 | 24/25 ✅ | -| 總評分 | **97/100 OUTSTANDING** | - -### 新增檔案 - -- `apps/api/src/repositories/k8s_repository.py` - K8s API Repository (IK8sRepository Protocol) -- `apps/api/src/core/constants.py` - 常數提取 (SSE_DELAY, MAX_APPROVAL, sanitize_error_message, is_cicd_alertname) - -### 測試驗證 - -- `test_terminal_service.py` - 60 測試通過 (Mock K8sRepository) -- 所有 Lint 檢查通過 - ---- - -## ✅ AI 仲裁修復 + 首席架構師審查 (2026-03-30 03:00 台北) - -### 變更摘要 - -| 項目 | 內容 | -|------|------| -| **AI Fallback 順序** | `["nvidia","gemini","ollama","claude"]` - NVIDIA 優先 | -| **CI/CD 告警簡化** | 偵測 `CD_*/CI_*/E2E_*` 前綴,跳過 AI 仲裁 | -| **心跳時區** | UTC → 台北時區 | -| **NVIDIA Rate Limiter** | 加入 nvidia 到檢查清單 | -| **CD 佇列模式** | `cancel-in-progress: false` | - -### 首席架構師審查 - -| 項目 | 評分 | -|------|------| -| 初始評分 | 78/100 | -| P0 修復後 | 85/100 | -| 結果 | ✅ 通過 | - -### P0 安全修復 - -- **問題**: cd.yaml 含明文 sudo 密碼 -- **修復**: 改用 `${{ secrets.SUDO_PASSWORD }}` -- **Commit**: `1cec655` -- ⚠️ **需要**: Gitea 設定 `SUDO_PASSWORD` secret - -### P1 待修復 - -1. Telegram Gateway OTEL 追蹤 -2. CI/CD alertname 判斷配置化 -3. send_cicd_progress 重試機制 - ---- - -## 🔴 RCA: 瀏覽器區域網路權限對話框 (2026-03-30 02:30 台北) - -### 問題 - -瀏覽器彈出「存取區域網路上的其他裝置」權限對話框,Dashboard SSE 連線失敗。 - -### 根因 - -CD Pipeline 建置時使用內網 IP: -```yaml ---build-arg NEXT_PUBLIC_API_URL=http://192.168.0.125:32334 # ❌ 內網 VIP -``` - -`NEXT_PUBLIC_*` 是 build-time 變數,寫死到 JS Bundle,Runtime ConfigMap 無效。 - -### 修復 - -```yaml ---build-arg NEXT_PUBLIC_API_URL=https://awoooi.wooo.work # ✅ 公網域名 -``` - -### 已更新文件 - -| 文件 | 更新內容 | -|------|----------| -| `.gitea/workflows/cd.yaml` | 改用公網域名 | -| `CLAUDE.md` | 新增前端內網 IP 禁令章節 | -| `docs/HARD_RULES.md` | v1.6 新增 Frontend Internal IP 規則 | -| `feedback_docker_nextjs_api_url.md` | 新增禁止內網 IP 說明 | -| `feedback_sentry_local_network.md` | 新增事故回顧 | - -### 下一步 - -- 推版觸發 CD 重新建置 - ---- - -## ✅ Phase 19.4 Terminal Service API 整合 (2026-03-30 14:30 台北) - -### 實作內容 - -| 功能 | 說明 | -|------|------| -| `_handle_approval_action` | 整合 `ApprovalDBService.get_pending_approvals()` | -| `_handle_status_query` | 整合 K8s API (Pod/Deployment 狀態) | -| 測試覆蓋 | 6 新增測試 → 60 測試通過 | -| Commit | `19fff83` | - -### 移除 Mock,使用真實 API - -- 待簽核項目: 顯示清單摘要 + ApprovalCard -- Pod 狀態: Running/Ready/Total + 問題 Pods 清單 -- Deployment 健康: 健康數/總數 - ---- - -## ✅ Telegram CI/CD 告警鏈路完整驗證 (2026-03-30 01:05 台北) - -### 驗證結論: 100% 暢通 -經由 Gitea Actions API 直接提取 **Run #53 (Job ID: 67)** 的原始執行日誌,確認 Telegram API 響應如下: -```json -{"ok":true,"result":{"message_id":4069,"from":{"id":8569720657,"is_bot":true,"first_name":"TsenYang","username":"tsenyangbot"},"chat":{"id":"***","first_name":"OoO","type":"private"},"date":1774801681,"text":"📦 [AWOOOI CI/CD] API Image Built"}} -``` -- **核心驗證**: `ok: true`, `first_name: "OoO"`。 -- **結論**: Telegram 伺服器已確認接收並轉發訊息至統帥個人的 TsenYang Bot 對話框。若統帥未看到,高機率為客戶端 App 緩存或訊息摺疊延遲。 - ---- - -## 🏛️ 首席架構師審查報告: Wave 1 安全網 (2026-03-30 01:10 台北) - -### 評分總覽: 98/100 (OUTSTANDING) - -| 項目 | 分數 | 說明 | -|------|------|------| -| 模組化合規性 | 25/25 | `OpenClawGuard` 雙層防護完美封裝,不污染 Caller | -| 容錯與降級能力 | 25/25 | Redis 斷線防禦完整 (`anomaly_counter.py` 等加入防抖與 try-catch) | -| CI/CD部署原子性 | 24/25 | Telegram 告警完美覆蓋,`signal_worker` 具備 75s 超時與 `preStop` hook | -| 日誌與可觀測性 | 24/25 | `structlog` 全面記錄,Trace Context 精準傳遞 | - -**交付物**: -- `docs/reviews/ADR038_039-CHIEF-ARCHITECT-REVIEW.md` -- `apps/api/src/services/incident_service.py` (防抖動機制) -- `apps/api/src/services/anomaly_counter.py` (Graceful Degradation) -- `k8s/awoooi-prod/08-deployment-worker.yaml` (preStop sleep 5) - - -## ✅ Intent Classifier Ollama 整合 (2026-03-30 01:00 台北) - -### 實作內容 (Phase 13.4) - -| 功能 | 說明 | -|------|------| -| `_llm_classify` | 呼叫 Ollama 進行意圖分類 | -| `_parse_intent_type` | 解析 LLM 返回的意圖字串 | -| `_llm_fallback_result` | LLM 失敗時的 fallback | -| `_LLM_CLASSIFY_PROMPT` | 結構化 Prompt 模板 | - -### 設計特點 - -| 特性 | 說明 | -|------|------| -| **超時控制** | 5 秒超時 (目標 < 100ms) | -| **JSON Mode** | 強制 Ollama 返回 JSON | -| **Fallback** | LLM 失敗時使用關鍵字結果 | -| **確定性** | temperature: 0.0 | - -### 測試覆蓋 - -- **21 測試案例全部通過** -- LLM 成功/超時/解析失敗測試 -- 關鍵字分類測試 -- 完整流程測試 - ---- - -## ✅ Learning Service 信心度調整 (2026-03-30 00:30 台北) - -### 實作內容 - -| 功能 | 說明 | 檔案 | -|------|------|------| -| `_promote_playbook` | 高評分提升信心度 +0.1 | `learning_service.py` | -| `_demote_playbook` | 低評分降低信心度 -0.15 | `learning_service.py` | -| `find_by_source_incident` | 按 incident_id 查詢 Playbook | `playbook_repository.py` | -| `adjust_confidence` | 信心度調整 + 狀態自動轉換 | `playbook_repository.py` | -| `failure_rate` | Playbook 失敗率屬性 | `playbook.py` | - -### 自動狀態轉換 - -| 條件 | 動作 | -|------|------| -| `ai_confidence >= 0.9` + `status == DRAFT` | 自動升級為 APPROVED | -| `ai_confidence < 0.3` + `failure_rate > 50%` + `executions >= 5` | 自動棄用為 DEPRECATED | - -### 測試覆蓋 - -- **13 測試案例全部通過** -- 信心度上下限邊界測試 -- 狀態轉換邏輯測試 -- Mock 隔離測試 - ---- - -## 🔧 E2E Health Check 修復 (2026-03-29 21:45 台北) - -### 發現的問題與修復 - -| 問題 | 修復 | 狀態 | -|------|------|------| -| Health endpoint 路徑錯誤 | `/health` → `/api/v1/health` | ✅ | -| API URL 未傳遞給後續步驟 | 新增 `working_api_url` output | ✅ | -| HMAC Secret 未傳遞 | 新增 `WEBHOOK_HMAC_SECRET` env | ✅ | -| E2E 腳本缺少 HMAC 簽名 | 新增 `compute_hmac_signature` | ✅ | -| Header 名稱錯誤 | `X-Webhook-Signature` → `X-Signature-256` | ✅ | -| K8s Secret 未生效 | CD 新增 `rollout restart` | ✅ | -| VIP 192.168.0.125 不穩定 | 暫用 node 121 直連 | ✅ | -| GitHub vs K8s HMAC 不一致 | 同步 WEBHOOK_HMAC_SECRET | ✅ | -| Service 名稱錯誤 | `awoooi-api` → `awoooi-api-svc` | ✅ | -| 網路抖動導致連接失敗 | 添加 3 次重試機制 | ✅ | - -### 相關 Commits - -- `5b6e23c` - E2E 診斷強化 -- `5f45ada` - 簡化健康檢查 -- `bc5716b` - Service 名稱修正 -- `8cae26e` - 添加重試機制 - -### 待觀察 - -- VIP keepalived 需要獨立診斷 -- 驗證重試機制解決網路抖動問題 - ---- - -## ✅ Telegram 訊息模板完整實作 (2026-03-29 23:45 台北) - -### 變更摘要 - -| 項目 | 內容 | -|------|------| -| **目的** | 實作 ADR-038 定義的 6 種新訊息模板 | -| **Commit** | `4707102` - feat(telegram): 實作 6 種新訊息模板 | -| **測試** | `test_telegram_message_templates.py` (14 案例) | -| **文檔** | `TELEGRAM_MESSAGE_TEMPLATES.md` v1.1 | - -### 新增訊息類型 - -| 類型 | 用途 | 特性 | -|------|------|------| -| `SentryErrorMessage` | Sentry 錯誤通知 | Stack Trace + Keyboard | -| `ResourceWarnMessage` | 資源耗盡警告 | CPU/Memory/Disk 狀態燈 | -| `RepairReportMessage` | 自動修復報告 | Top 3 問題 + AI 成本 | -| `DailySummaryMessage` | 每日摘要 | 告警統計 + 預算餘額 | -| `DeploySuccessMessage` | 部署成功通知 | E2E 結果 + 版本 | -| `RateLimitMessage` | API 限額警告 | 用量比例 + 建議 | - -### 設計模式 (符合 leWOOOgo) - -``` -@dataclass → format() → TelegramGateway.send_*() - ↓ - Service 層 (不直接存取 Redis/DB) -``` - ---- - -## ✅ NVIDIA RCA 模組化重構完成 (2026-03-29 13:25 台北) - -### 變更摘要 - -| 項目 | 內容 | -|------|------| -| **目的** | Gemini 超限後 fallback 到 nvidia | -| **Commit 1** | `79134fb` - 新增 `_call_nvidia()` (有違規) | -| **Commit 2** | `1df21dc` - P0/P1 修復 | -| **Commit 3** | `04bfff9` - **模組化重構** ✅ | -| **最終狀態** | ✅ 符合 leWOOOgo 規範 | - -### 模組化重構 (符合 feedback_lewooogo_modular_enforcement.md) - -| 項目 | 修復 | -|------|------| -| P0 重複邏輯 | ✅ 移除 `openclaw.py._call_nvidia()` | -| 正確架構 | ✅ 新增 `NvidiaProvider.chat()` | -| Protocol | ✅ `INvidiaProvider` 新增 `chat()` | -| DI 模式 | ✅ `get_nvidia_provider().chat()` | -| 測試 | ✅ `test_nvidia_chat.py` (6 案例) | - -### 首席架構師審查違規 (已修復) - -| 項目 | 問題 | 修復 | -|------|------|------| -| P0 | 無測試 | ✅ 新增 `test_openclaw_nvidia.py` | -| P1-1 | Hardcoded 模型 | ✅ 改用 `ModelRegistry.get_model()` | -| P1-2 | models.json 缺 rca | ✅ 新增 `nvidia.rca` | - -### ConfigMap 變更 - -```yaml -# 新 Fallback 順序 -AI_FALLBACK_ORDER: '["gemini","nvidia","ollama","claude"]' -``` - -### Memory 更新 - -- ✅ `project_nvidia_rca_review.md` - 審查報告 -- ✅ `feedback_ai_fallback_order.md` - 更新 fallback 順序 -- ✅ `MEMORY.md` - 新增索引項目 - ---- - -## ✅ CI/CD 修復 + Gitea Mirror (2026-03-29 20:30 台北) - -### CI/CD P0 修復 - -| 問題 | 修復 | -|------|------| -| **ImagePullBackOff** | 雙跳過保護 - IMAGES_UPDATED=0 時不執行 kubectl apply | -| **Force Deploy 被取消** | 獨立 concurrency group `cd-force-deploy` | -| **API CrashLoopBackOff** | 新增 prometheus-client 依賴 | -| **Runner 負載** | 停用 nightly-llm.yaml | - -### Gitea Mirror (B2 備份策略) - -| 項目 | 值 | -|------|-----| -| Gitea URL | http://192.168.0.110:3001/wooo/awoooi | -| 策略 | GitHub 主倉,Gitea 只讀備份 | -| 自動同步 | CD 成功後自動 mirror | -| GitHub Secret | `GITEA_MIRROR_TOKEN` | - ---- - -## ✅ Lint 清理 (2026-03-29 22:30 台北) - -**結果**: 61 warnings → 0 (**完全清零**) -**Commit**: `2e9ccf4` - -### 修復項目 - -| 檔案 | 修復內容 | -|------|----------| -| useApprovalSSE.ts | 標記未使用的 fallbackToPolling | -| useErrors.ts | 移除未使用的 import | -| dashboard.store.ts | 標記 SSE event 參數 | -| agent.store.ts | 加註 SSE 串流迴圈說明 | -| approval.store.ts | 改用正規 type import | -| terminal.store.ts | 改用 inline type import | -| OmniTerminal.tsx | 改用 type import | -| **demo/page.tsx** | `useMemo` 包裝 approvalConfigs (Hook 依賴) | -| **live-approval-panel.tsx** | `useMemo` 包裝 currentUser 物件 | -| **thinking-terminal.tsx** | `useMemo` 包裝 steps 衍生值 | -| **hitl-section.tsx** | 補齊 currentUserName 依賴 | - -### React Hook 依賴修復模式 - -```tsx -// 物件作為 Hook 依賴時必須 useMemo -const currentUser = useMemo(() => ({ - id: signerId, - name: signerName, - role: signerRole, -}), [signerId, signerName, signerRole]) -``` - ---- - -## 🔍 E2E Health Check 診斷 (2026-03-29 23:00 台北) - -### 狀態 - -| 項目 | 結果 | -|------|------| -| **VIP Ping** | ✅ 可達 (192.168.0.125) | -| **NodePort 32334** | ❌ 無回應 (HTTP 000) | -| **kubectl 診斷** | ⚠️ Runner 無 KUBECONFIG (已改 non-blocking) | - -### 修復 Commits - -| Commit | 說明 | -|--------|------| -| `0f3339e` | 新增網路診斷 (ping VIP, fallback) | -| `f3d01bb` | 新增 kubectl K8s 狀態檢查 | -| `0e24f73` | kubectl 改 graceful fallback (避免 CI 失敗) | - -### 根因待查 - -- VIP 可 ping 但 NodePort 不通 -- 可能是 K8s Service 問題或 Pod 未正常運行 -- 需要在叢集內部進一步診斷 - ---- - -## ✅ Wave 3 i18n 清零 (2026-03-29 22:00 台北) - -### 核心變更 - -| 模組 | 說明 | Commit | -|------|------|--------| -| **status-orb.tsx** | 狀態標籤改用 useTranslations | 9747bd4 | -| **OmniTerminal.tsx** | SSE Live/Offline i18n | 9747bd4 | -| **sse-states.ts** | 連線狀態 label 改 i18n key | 9747bd4 | -| **thinking-terminal.tsx** | 終端機 UI 全面 i18n | e9bed21 | -| **live-host-card.tsx** | 移除 hardcoded 預設值 | e9bed21 | -| **翻譯檔** | 新增 terminal 區塊翻譯 | e9bed21 | +### 2026-04-07 — Sprint 3+4+F 完成 -### 技術債清零 +- Sprint 3: SSH_COMMAND 指揮權鏈 (T1-T7) + P0 Security Fixes + Re-Review 91/100 +- Sprint F: 29處假數據清除 + CURRENT_USER 統一 + 98/100 +- Sprint 4: 告警處置統計 Phase A→F (資料層→API→Telegram→前端→首頁→週報) +- 首次信任機制 (冷啟動破解) -- TECHNICAL_DEBT_PHASE2.md: **40+ 違規 → 0** -- 已驗證檔案: approval-card, data-pincer, header, connection-status 都已 i18n 化 +### 2026-04-06 — 四個網站修復+監控 ---- - -## ✅ Wave 2 Worker HPA 部署 (2026-03-29 20:00 台北) - -### 核心變更 - -| 模組 | 說明 | Commit | -|------|------|--------| -| **Worker HPA** | min:1 max:3, CPU 70%, Memory 80% | b97f936 | -| **擴縮策略** | scaleUp: 120s, scaleDown: 600s | 比 API/Web 保守 | -| **非 AI confidence 修正** | fallback/playbook/historical 設 0.0 | 避免混淆 | - -### 前置條件 (Wave 1 ✅) - -- XCLAIM + Active Sweeper 已實作 -- terminationGracePeriodSeconds: 90 已設定 -- Graceful Shutdown 75s timeout - ---- - -## 🏛️ 首席架構師審查 (2026-03-29 20:30 台北) - -### 評分總覽: 91/100 強烈通過 - -| 項目 | 分數 | 說明 | -|------|------|------| -| Worker HPA | 95/100 | 配置合理,文檔完善 | -| Grafana Provider | 92/100 | 模組化合規,安全機制完善 | -| RAG Provider | 88/100 | 基本合規,DI 模式可加強 | -| RAG Service | 90/100 | Interface 定義完整 | - -### P1 建議 (5 項) - -1. RAG Provider DI 模式與其他 Provider 對齊 -2. Grafana Provider Config 注入優化 -3. RAG 測試檔案補充 -4. Embedding 維度硬編碼改善 -5. Worker HPA 配合 PDB - -### 模組化合規 ✅ - -| 檢查項 | 結果 | -|--------|------| -| Protocol/Interface 定義 | PASS | -| structlog 結構化日誌 | PASS | -| Google Style Docstring | PASS | -| 錯誤處理完整性 | PASS | - -### ✅ P1 修復完成 (2026-03-29 21:00) - -| # | 問題 | 修復 | Commit | -|---|------|------|--------| -| 1 | RAG Provider DI 模式 | 支援 rag_service 注入 + close() | 8724ed7 | -| 2 | Worker PDB | 已存在 (2026-03-28 審查) | N/A | -| 3 | RAG 測試 | test_rag_provider.py (9 tests) | 8724ed7 | -| 4 | Grafana Config 快取 | URL/Key 首次查詢後快取 | 8724ed7 | -| 5 | Embedding 維度 | MODEL_DIMENSIONS 字典 | 8724ed7 | - ---- - -## ✅ Wave 1 安全網部署 (2026-03-29 18:30 台北) - -### 核心變更 - -| 模組 | 功能 | 說明 | -|------|------|------| -| **Circuit Breaker** | 5 連續失敗 → 斷路 60s | OpenClaw 推理保護 | -| **Concurrency Semaphore** | 最多 3 並發 LLM 呼叫 | 防止 Thundering Herd | -| **Global Repair Cooldown** | 15 分鐘 5 次 → 凍結 | 防止循環修復 | -| **StatefulSet Blacklist** | postgres/redis/clickhouse | 永遠禁止自動重啟 | -| **Signal Worker XCLAIM** | 60s 閒置訊息回收 | 防止訊息卡住 | -| **Graceful Shutdown** | 75s 超時 + K8s 90s | 完整清理訊息 | -| **Graceful Degradation** | Redis 故障返回預設值 | AnomalyCounter 不中斷流程 | - -### 測試覆蓋 - -``` -apps/api/tests/test_circuit_breaker.py - 9 個測試 -apps/api/tests/test_global_repair_cooldown.py - 10 個測試 -``` - ---- - -## 🔧 ADR-037 監控增強部署 (2026-03-29 15:45 台北) - -### 完成項目 - -| 類型 | 說明 | 狀態 | -|------|------|------| -| 🔴 Runner 修復 | 停用衝突 `awoooi-110-2` service + 清理 `_diag` | ✅ | -| 📊 Database Exporters | PostgreSQL (9187) + Redis (9121) @ 192.168.0.188 | ✅ | -| 📈 Prometheus 整合 | Database Exporters 加入 scrape config | ✅ | -| 🔧 API Lint 修復 | 36 個 Ruff lint 錯誤全部修復 | ✅ | -| 📊 NVIDIA Dashboard | `nvidia-nemotron.json` 匯入 Grafana (18 panels) | ✅ | -| 📋 首席架構師審查 | **194/200 (97%) OUTSTANDING** | ✅ | - -### 關鍵指標 - -``` -Prometheus Targets: -- postgres: health=up (192.168.0.188:9187) -- redis: health=up (192.168.0.188:9121) - -Grafana Dashboard: -- URL: http://192.168.0.188:3002/d/nvidia-nemotron -- Panels: 18 (Circuit Breaker, Latency P50/P95/P99, Anomaly Frequency) -``` - ---- - -## 📋 Phase 22: 全維度盤點暨戰略規劃 (2026-03-29 完成) - -### 完成項目 - -| 類型 | 文件 | 說明 | -|------|------|------| -| 📊 稽核報告 | `docs/AWOOOI_COMPREHENSIVE_AUDIT_2026Q1.md` | 全維度盤點 10 章,87/100 | -| 🏗️ 設計提案 | `docs/proposals/MONITORING_ARCHITECTURE_DEEP_DIVE.md` | 監控三義分離 | -| 🏗️ 設計提案 | `docs/proposals/INTEGRATION_ARCHITECTURE_MASTER.md` | 整合架構主藍圖 | -| ⚔️ 風險矩陣 | `docs/proposals/ARCHITECTURAL_RISK_WAR_GAME.md` | 6+4+代碼確認深度沙盤(第 1-6 章)| -| 📋 最終排程 | `docs/proposals/MASTER_EXECUTION_SCHEDULE.md` | 最終工作排程(供統帥審核)🆕 | -| 📘 RunBook | `docs/runbooks/RUNBOOK-PHASE-D-SENTRY-COMMENT.md` | Sentry Comment + 補丁 | -| 📘 RunBook | `docs/runbooks/RUNBOOK-PHASE-E-SIGNOZ-WEBHOOK.md` | SignOz Webhook 部署 | -| 📘 RunBook | `docs/runbooks/RUNBOOK-WORKER-HPA.md` | HPA + XCLAIM 前置 + terminationGracePeriodSeconds | -| 📘 RunBook | `docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md` | E2E CI + Docker Baseline 強制規格 | -| 📘 RunBook | `docs/runbooks/RUNBOOK-FRONTEND-UIUX-SOVEREIGNTY.md` | 前端主權 + release/v1.x 前置 | -| 📐 ADR | `docs/adr/ADR-038-openclaw-concurrency-governance.md` | OpenClaw Semaphore + Circuit Breaker 🆕 | -| 📐 ADR | `docs/adr/ADR-039-global-autorepair-governance.md` | 全域修復熔斷 + StatefulSet 黑名單 🆕 | - -### ✅ Wave 1 安全網實作完成 (2026-03-29 18:30 台北) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| `core/circuit_breaker.py` | ✅ ADR-038: Semaphore + Circuit Breaker | `27509db` | -| `services/global_repair_cooldown.py` | ✅ ADR-039: 全域熔斷 + 黑名單 | `27509db` | -| `anomaly_counter.py` | ✅ Redis 故障 Graceful Degrade | `89a2339` | -| `signal_worker.py` | ✅ XCLAIM + Active Sweeper + 75s Shutdown | `39396dc` | -| `auto_repair_service.py` | ✅ StatefulSet 黑名單 + 全域熔斷整合 | `27509db` | -| `sentry_webhook.py` | ✅ OpenClawGuard 雙層保護 | `89a2339` | -| `08-deployment-worker.yaml` | ✅ terminationGracePeriodSeconds: 90 | `39396dc` | -| `incident_engine.py` | ✅ Fingerprint 去重 (Lua 腳本已有) | 既有 | - -**Wave 0(統帥手動確認)**: -- `0.1` Redis AOF + eviction policy 確認 -- `0.2` Alertmanager 備援 Telegram 路徑確認 -- `0.3` release/v1.x 穩定分支建立 + GitHub Protected Branch -- `0.4` SENTRY_AUTH_TOKEN 存在確認 - ---- - -## ✅ K3s 會議目標追蹤 (2026-03-28 全部完成) - -| Phase | 說明 | 任務數 | 時間 | 狀態 | -|-------|------|--------|------|------| -| **K0** | 緊急修復 | 7 | 4h | ✅ **完成** | -| **K-NET** | keepalived VIP | 4 | 3h | ✅ **完成** | -| **K-HA** | 雙 CP + PostgreSQL | 4 | 4h | ✅ **完成** | -| **K-CLEAN** | 資源清理 | 2 | 2h | ✅ **完成** | -| **K1** | Velero 災難恢復 | 6 | 8h | ✅ **完成** | -| **K2** | ArgoCD/VPA/NPD | 20 | 12h | ✅ **完成** | -| **K-MON** | 監控整合 | 5 | 4h | ✅ **完成** (VIP/Velero/SignOz/Sentry 告警) | -| **K3** | HPA 自動擴展 | 1 | 2h | ✅ **完成** (API/Web 2-4 replicas) | -| **K4** | Kured/Descheduler | 2 | 3h | ✅ **完成** (維護窗口 + 負載均衡) | - -**Runbook**: `docs/runbooks/K3S-OPTIMIZATION-RUNBOOK.md` (v2.0 已包含 K1-K4 完整步驟) -**首席架構師審查**: `memory/project_k3s_full_arch_review.md` (196/200 = 98% OUTSTANDING) - ---- - -### ✅ 2026-03-29 P1-3/P1-4 Unit Test + Telegram 驗證 (Day 12 23:55) 🆕🆕🆕🆕🆕🆕🆕🆕 - -| 測試檔案 | 測試數 | 狀態 | -|---------|--------|------| -| `test_approval_field_alignment.py` | 13 | ✅ PASSED | -| `test_telegram_integration.py` | 19 | ✅ PASSED | -| **總計** | **32** | ✅ | - -**測試內容**: -- P1-3: ApprovalRequestCreate 必填欄位驗證 -- P1-3: BlastRadius Model 結構驗證 -- P1-4: SignOzMetricsBlock 格式化 -- P1-4: TelegramMessage 結構 -- P1-4: Webhook → Telegram 訊息流程 - -**Commit**: `49f21dc` - ---- - -### ✅ 2026-03-29 AI 來源透明化 (Day 12 23:50) 🆕🆕🆕🆕🆕🆕🆕 - -**問題**: AI 仲裁顯示假信心分數 + 無法區分哪個 AI 模型 - -| 檔案 | 修正 | 狀態 | -|------|------|------| -| `decision_manager.py:105` | 預設 confidence 從 0.75 → 0.0 | ✅ | -| `decision_manager.py:107` | 新增 ai_provider 傳遞 | ✅ | -| `decision_manager.py:233` | Expert System confidence: 0.0 + is_rule_based: True | ✅ | -| `openclaw.py` | 所有 Mock Response confidence → 0.0 | ✅ | -| `telegram_gateway.py` | 新增 ai_provider 欄位 + 動態來源標籤 | ✅ | - -**Telegram 卡片顯示規則**: -| 條件 | 顯示 | -|------|------| -| `confidence > 0 + provider=ollama` | 🤖 **Ollama 仲裁** | -| `confidence > 0 + provider=gemini` | 🤖 **Gemini 仲裁** | -| `confidence > 0 + provider=claude` | 🤖 **Claude 仲裁** | -| `confidence == 0` | ⚙️ **規則匹配** | - ---- - -### ✅ 2026-03-29 P1-2 ApprovalRequestCreate 欄位對齊 (Day 12 23:15) 🆕🆕🆕🆕🆕🆕 - -| 檔案 | 修正 | 狀態 | -|------|------|------| -| `signoz_webhook.py` | 欄位對齊 ApprovalRequestBase | ✅ | -| `github_webhook.py` | 兩處 ApprovalRequestCreate 修正 | ✅ | - -**修正內容**: -- `action_type` → `action` (必填) -- `target_resource`, `source` → 移入 `metadata` -- `BlastRadius.SINGLE` → `BlastRadius(...)` (Pydantic Model) -- `dry_run_check` → `dry_run_checks` (list) -- 新增必填: `description`, `requested_by` - -**Commit**: `ac2715e` - ---- - -### ✅ 2026-03-29 Phase 21 Wave A-B 完成 (Day 12 21:30) 🆕🆕🆕🆕🆕 - -**ADR-037 監控增強架構 - 告警鏈路完善** - -| Wave | 任務 | 狀態 | -|------|------|------| -| **A.1** | Sentry API Token 設定 | ✅ | -| **A.2** | SignOz 告警規則 (`ops/signoz/alerting/rules.yaml`) | ✅ | -| **A.3** | SignOz Webhook Handler (`signoz_webhook.py`) | ✅ | -| **A.4** | Sentry Comment 回寫 (已整合) | ✅ | -| **A.5** | Alert Chain Metrics (`core/metrics.py`) | ✅ | -| **A.6** | Smoke Test 腳本 (`alert_chain_smoke_test.py`) | ✅ | -| **B.1** | Alert Chain PrometheusRule | ✅ | -| **B.2** | CD Pipeline 整合 | ✅ | - -**新增檔案**: -- `ops/signoz/alerting/rules.yaml` - SignOz 告警規則 (API Error Rate/Latency/Trace) -- `apps/api/src/api/v1/signoz_webhook.py` - SignOz Webhook Handler (含 AnomalyCounter 整合) -- `apps/api/src/core/metrics.py` - Prometheus Metrics (告警鏈路 + 異常頻率 + 自動修復) -- `ops/scripts/alert_chain_smoke_test.py` - 告警鏈路 E2E 驗證腳本 -- `k8s/monitoring/alert-chain-monitor.yaml` - PrometheusRule (告警鏈路監控) - -**更新檔案**: -- `apps/api/src/main.py` - 註冊 SignOz Webhook 路由 -- `apps/api/src/api/v1/sentry_webhook.py` - 新增 metrics 記錄 -- `.github/workflows/cd.yaml` - 新增 Alert Chain Smoke Test 步驟 - ---- - -### ✅ 2026-03-29 Phase 21 Wave C-D 完成 + 首席架構師審查 (Day 12 11:25) 🆕🆕🆕🆕🆕🆕🆕🆕 - -**ADR-037 監控增強架構 - 監控自動化 + NVIDIA Dashboard** - -| Wave | 任務 | 狀態 | -|------|------|------| -| **C.1** | `generate_monitoring.py` (從 service-registry.yaml 生成配置) | ✅ | -| **C.2** | CI 監控覆蓋率檢查 (`cd.yaml` 整合) | ✅ | -| **C.3** | `discover_docker.py` (Docker 容器自動發現) | ✅ | -| **D.1** | NVIDIA Grafana Dashboard (`nvidia-nemotron.json`) | ✅ | -| **D.2** | `coverage_report.py` (HTML/JSON 報告) | ✅ | - -**首席架構師審查結果**: **194/200 (97%) OUTSTANDING** - -| 維度 | 分數 | -|------|------| -| 模組化合規 | 48/50 | -| 程式碼品質 | 47/50 | -| 告警鏈路完整性 | 49/50 | -| ADR 設計合規 | 50/50 | - -**新增檔案**: -- `ops/monitoring/generate_monitoring.py` - 監控配置生成器 -- `ops/monitoring/discover_docker.py` - Docker 容器自動發現 -- `ops/monitoring/coverage_report.py` - 監控覆蓋率報告 -- `ops/monitoring/service-registry.yaml` - 服務註冊表 (Single Source of Truth) -- `ops/grafana/dashboards/nvidia-nemotron.json` - NVIDIA Dashboard -- `k8s/monitoring/database-alerts.yaml` - PostgreSQL + Redis 告警規則 -- `docs/reviews/ADR037-CHIEF-ARCHITECT-REVIEW.md` - 首席架構師審查報告 - -**覆蓋率報告**: -- Overall: **88.0%** -- Prometheus: 94.1% -- P0/P1 Auto-Repair: 40% (9 服務無自動修復 - 資料庫和監控系統) - ---- - -### ✅ 2026-03-29 Phase D-G P0 修正完成 (Day 12 19:10) 🆕🆕🆕🆕 - -| 項目 | 原評分 | 修正後 | 狀態 | -|------|--------|--------|------| -| **架構合規** | 75/100 | 95/100 | ✅ | -| **代碼品質** | 80/100 | 90/100 | ✅ | -| **總分** | **74/100** | **92/100** | ✅ **修正通過** | - -**✅ P0 修正完成**: - -| 問題 | 修正 | 狀態 | -|------|------|------| -| Phase G 重複 | 擴展現有 LearningService | ✅ | -| 違反積木化 | 新增 ILearningRepository + LearningRepository | ✅ | -| Learning API | 新增 `/api/v1/learning/*` 端點 | ✅ | - -**新增檔案**: -- `src/repositories/interfaces.py` - 新增 ILearningRepository -- `src/repositories/learning_repository.py` - Redis 持久化層 (200 行) -- `src/api/v1/learning.py` - Learning API 端點 - -**更新檔案**: -- `src/services/learning_service.py` - v1.0 → v1.1 (新增方法) -- `ADR-030` - 新增 Phase D-G P0 修正章節 -- `Skill 02` - v1.9 → v2.0 (新增 LearningRepository) - -**Memory**: `project_remaining_phases_arch_review.md` - ---- - -### ✅ 2026-03-29 監控整合主計畫批准 (Day 12 15:40) 🆕🆕🆕 - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **統帥批准** | 監控整合主計畫 (Wave A-D / 10.75h) | ✅ **批准** | -| **計畫文件** | `docs/proposals/MONITORING_MASTER_PLAN.md` | ✅ **建立** | -| **Memory** | `project_monitoring_master_plan.md` | ✅ **建立** | -| **ADR-037** | 新增整合計畫參考 | ✅ **更新** | -| **Skill 05** | v1.5 → v1.6 (告警鏈路 E2E 驗證) | ✅ **更新** | -| **工作清單整合** | `project_master_workplan.md` 新增監控 Wave | ✅ **更新** | - -**整合來源**: -- `MONITORING_INTEGRATION_ARCHITECTURE.md` → 監控即代碼架構 -- `IMPLEMENTATION_STEPS_REMAINING_PHASES.md` (Phase D-G) → 具體任務 - -**執行計畫**: -| Wave | 優先級 | 工時 | 關鍵產出 | -|------|--------|------|----------| -| **A** | 🔴 P0 | 3.5h | SignOz + Sentry 雙向整合 | -| **B** | 🟠 P1 | 1.5h | CD 自動驗證 + 鏈路告警 | -| **C** | 🟡 P2 | 2.75h | 監控即代碼 + 自動發現 | -| **D** | ⚪ P3 | 3h | Grafana + 報告 | - ---- - -### ✅ 2026-03-29 Phase 20 Nemotron P1+P2+P3 完成 (Day 12 11:15) 🆕🆕 - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **ADR-036** | Nemotron Tool Calling 整合 | ✅ **已實作** | -| **P1 修復** | Langfuse + OTEL 整合 | ✅ **完成** | -| **P2 修復** | Protocol + 測試 + model_registry | ✅ **完成** | -| **P3 優化** | Circuit Breaker + 指數退避 + Prometheus | ✅ **完成** | -| **測試** | 34/34 全部通過 | ✅ | -| **首席架構師評分** | 82 → 86 → 90 → **95/100** | ✅ **EXCEPTIONAL** | - -**交付物**: -- `apps/api/src/services/nvidia_provider.py` (Circuit Breaker + Prometheus Metrics) -- `apps/api/tests/test_nvidia_provider.py` (34 測試案例) -- `k8s/monitoring/nvidia-alerts.yaml` (5 告警規則) -- `ops/monitoring/service-registry.yaml` (NVIDIA 條目) - ---- - -### 🟡 2026-03-29 Phase 21 監控增強架構 (Day 12 03:30) - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **ADR-037** | 監控增強架構決策 | ✅ **建立** | -| **Memory 更新** | project_phase21_monitoring_enhancement.md | ✅ **建立** | -| **Phase A** | AnomalyCounter + Tier 分級修復 | ✅ **完成 (45/50 OUTSTANDING)** | -| **Phase B-G** | 已整合至監控整合主計畫 | → **Wave A-D** | - -**Phase A 交付物**: -- `apps/api/src/services/anomaly_counter.py` (350 行) -- `apps/api/tests/test_anomaly_counter.py` (130 行) -- Sentry webhook 整合 (頻率記錄 + 升級判斷) -- Telegram 告警整合 (頻率顯示區塊) -- Auto repair 整合 (Tier 決策邏輯) - -**統帥指示**: -> "重啟只是治標,不是治本!太常發生的異常必須徹底解決" -> "需要統計、計數!必須要讓使用者知道!!" - ---- - -### ✅ 2026-03-29 完整監控策略 + Telegram 按鈕修復 (Day 12 02:00) - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **Telegram 按鈕修復** | `add_signature` → `sign_approval`, `reject` → `reject_approval` | ✅ **修復** | -| **Sentry URL 修復** | OpenClaw 8088 → 8089 (ADR-028) | ✅ **修復** | -| **完整監控策略** | `docs/MONITORING_COMPLETE_STRATEGY.md` (576 行) | ✅ **建立** | -| **服務註冊表** | `ops/monitoring/service-registry.yaml` (SSOT) | ✅ **建立** | -| **CI 驗證腳本** | `ops/monitoring/validate_coverage.py` | ✅ **建立** | -| **監控整合架構** | `docs/MONITORING_INTEGRATION_ARCHITECTURE.md` | ✅ **建立** | -| **戰略規劃文檔** | `docs/proposals/MONITORING_STRATEGIC_PLANNING.md` | ✅ **待審核** | - -**關鍵修復**: -- `apps/api/src/services/telegram_gateway.py:1247-1310` (方法名稱錯誤) -- `apps/api/src/api/v1/telegram.py` (webhook handler 同步修復) -- `apps/api/src/api/v1/sentry_webhook.py` (OpenClaw URL) - -**監控覆蓋**: -- 5 主機 × 60+ 服務完整清單 -- P0/P1/P2 告警規則 -- AI 自動修復流程 -- 角色分層架構 (L0-L3) -- 事件時間軸報告格式 - ---- - -### ✅ 2026-03-29 Phase 19.6 測試收尾 + P1-P3 改進 (Day 12 01:30) - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **P1 ArgoCD Metrics** | NodePort 30883 + Prometheus scrape | ✅ **完成** | -| **P1 ArgoCD NetworkPolicy** | 允許 188 抓取 metrics | ✅ **完成** | -| **P2 TLS 證書告警** | 30天/7天/過期 4 條規則 | ✅ **完成** | -| **P2 Multi-Sig E2E** | 條件式測試 (API 可用時) | ✅ **完成** | -| **CD timeout 修復** | 10m/15m → 20m | ✅ **完成** | -| **Runner 殭屍進程** | pkill + 雙 Runner online | ✅ **完成** | -| **Phase 19.6 E2E** | 新增 7 個 Terminal/GenUI 測試 | ✅ **完成** | -| **驗收清單** | `docs/testing/PHASE19-VERIFICATION-CHECKLIST.md` | ✅ **完成** | -| **首席架構師審查** | **47/50 (94%) OUTSTANDING** | ✅ **通過** | -| **P2 改進** | E2E + GitOps 4 項全部完成 | ✅ **完成** | - -**新增/更新檔案**: -- `k8s/argocd/argocd-metrics-nodeport.yaml` 🆕 -- `k8s/argocd/argocd-metrics-network-policy.yaml` 🆕 -- `k8s/monitoring/k3s-alerts-supplemental.yaml` (TLS 告警) -- `k8s/monitoring/prometheus-config-additions.yaml` 🆕 -- `k8s/argocd/DEPLOY.md` 🆕 -- `.github/workflows/cd.yaml` (timeout 修復) -- `apps/web/tests/e2e/phase19-production-verification.spec.ts` (v1.2.0 P2 改進) -- `apps/web/tests/e2e/multisig-security.spec.ts` (v1.1.0 條件式 + 環境變數) -- `k8s/monitoring/deploy-prometheus-config.sh` 🆕 (GitOps 部署腳本) - -**Prometheus 狀態**: 25/25 targets UP (含 ArgoCD + TLS Blackbox) - ---- - -### ✅ 2026-03-29 Phase 20 Nemotron P1+P2+P3 全部完成 (Day 12 11:15) 🆕 - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **ADR-036** | Nemotron Tool Calling 整合 | ✅ **已實作** | -| **NvidiaProvider** | Tool Calling + HITL 保護 | ✅ **完成** | -| **測試驗證** | tests/test_nvidia_provider.py | ✅ **34/34 PASSED** | -| **CD 部署** | CD #23689363463 | ✅ **成功** | -| **Tool Calling 驗證** | restart_pod 測試 | ✅ **正確解析** | -| **首席架構師審查** | 82→86→90→95/100 | ✅ **P1+P2+P3 完成** | -| **P1-1 Langfuse** | LangfuseTraceContext | ✅ **修復** | -| **P1-2 OTEL** | start_as_current_span | ✅ **修復** | -| **P2-1 Protocol** | INvidiaProvider (@runtime_checkable) | ✅ **修復** | -| **P2-2 邊界測試** | 15 → 25 測試案例 | ✅ **修復** | -| **P2-3 model_registry** | NVIDIA + tool_calling_fallback_order | ✅ **修復** | -| **P3-1 Circuit Breaker** | CLOSED/OPEN/HALF_OPEN 狀態機 | ✅ **優化** | -| **P3-2 指數退避** | 1s base, 30s max, 10% jitter | ✅ **優化** | -| **P3-3 Prometheus** | requests/latency/circuit_breaker | ✅ **優化** | - -**驗證結果** (2026-03-29 08:51): -``` -✅ Tool: restart_pod - Args: {"pod_name": "awoooi-api", "namespace": "awoooi-prod"} -延遲: 44.7s | Tokens: 158 | 模型: nvidia/nemotron-mini-4b-instruct -``` - -**Tool Calling 路由**: -```python -# 一般對話: Ollama → Gemini → Claude -# Tool Calling: Nemotron → Gemini → Claude (ADR-036) -router.route_tool_calling() # → AIProvider.NVIDIA -``` - -**修復過程中的問題**: -- Runner Session 衝突 (`.session` 檔案清理後解決) -- CD Run 多次失敗後成功 - ---- - -### 🏛️ 2026-03-28 首席架構師完整審查 (Day 11 23:50) - -| 審查項目 | 評分 | 說明 | -|---------|------|------| -| **架構設計** | 50/50 | ⭐ 完美 | -| **安全性** | 49/50 | NetworkPolicy 可優化 | -| **模組化合規** | 50/50 | ⭐ 完美 | -| **監控告警** | 49/50 | 已補齊 12 條告警 | -| **E2E 測試** | 49/50 | Phase 19 全部通過 | -| **總評** | **198/200 (99%)** | ⭐⭐⭐⭐⭐ EXCEPTIONAL | +- mo.wooo.work / www.tsenyang.com / stock.wooo.work / bitan.wooo.work 全部修復 +- Prometheus blackbox-http 新增 3 target +- nginx 110/188 路由修正 -**補齊告警**: -- RedisDown, PostgreSQLDown, OllamaDown, OpenClawDown -- HarborDown, LangfuseDown -- HPAMaxedOut, HPAScalingDisabled -- WorkerUnavailable -- NodeHighCPU, NodeHighMemory, ContainerOOMKilled +### 2026-04-05 — Phase 25 Review + ADR-057~059 + 備份 -**新增檔案**: `k8s/monitoring/k3s-alerts-supplemental.yaml` +- Phase 25 首席架構師 Review R1+R2 通過 (76/100→修正後通過) +- ADR-054~057 全部完成 +- Telegram 按鈕根因修復 (whitelist int→list[int]) +- ADR-059 Gitea Webhook 遷移 (10/10 測試) +- Sprint 3 Host Repair 全通過 + 5 Playbooks +- 備份全面自動化 (backup-all.sh v2 + GFS 保留策略) +- 全系統重開機恢復 (188/110/120/121) ---- - -### ✅ 2026-03-28 K3s PSS + Grafana 完成 (Day 11 23:15) - -| 項目 | 內容 | 狀態 | -|------|------|------| -| **K4.3 Pod Security Standards** | 6 Namespace PSS labels 部署 | ✅ 完成 | -| **Grafana Dashboard** | K3s Cluster Overview (9 panels) | ✅ 完成 | - -**PSS 配置**: -| Namespace | 級別 | 說明 | -|-----------|------|------| -| awoooi-prod | baseline | 生產應用 | -| kube-state-metrics | baseline | 監控 | -| kured | privileged | 需要 hostPID | -| descheduler | restricted | 最嚴格 | -| velero | baseline | 備份 | -| argocd | baseline | GitOps | - -**新增檔案**: `k8s/pod-security/namespace-labels.yaml`, `k8s/pod-security/DEPLOY.md` - ---- - -### ✅ 2026-03-29 K3s 叢集健康修復 (Day 11 01:05) - -| 項目 | 修復內容 | 狀態 | -|------|---------|------| -| **ImagePullBackOff** | awoooi-prod 部署回滾 | ✅ 修復 | -| **ArgoCD CrashLoop** | 安裝缺失 ApplicationSet CRD | ✅ 修復 | -| **Kured CrashLoop** | 新增 ds-namespace/ds-name 參數 | ✅ 修復 | -| **最終健康檢查** | 所有 Pod 正常運行 | ✅ 通過 | - ---- - -### ✅ 2026-03-29 K3s P2/P3 改進完成 (Day 11 00:45) - -| 項目 | 改進內容 | 狀態 | -|------|---------|------| -| **kube-state-metrics** | 新增 v2.10.1 部署 + NPD 告警整合 | ✅ 新增 | -| **Kured 時區修復** | 18:00-20:00 → 02:00-04:00 (錯誤更正) | ✅ 修復 | -| **Descheduler** | threshold 20% → 30% (避免過度遷移) | ✅ 調整 | -| **告警規則** | 新增 7 條 kube-state-metrics 告警 | ✅ 新增 | -| **HPA maxReplicas** | 維持 4 (2 節點叢集資源有限) | ⏸️ 維持 | - -**新增檔案**: -- `k8s/kube-state-metrics/kube-state-metrics.yaml` -- `k8s/kube-state-metrics/DEPLOY.md` - ---- - -### 🔴🔴🔴 2026-03-29 Telegram Secrets 未注入事故 (Day 11 00:30) - -**狀態**: ✅ **根因定位 + 三層防護機制已實施** - -**事故根因**: -- `kustomization.yaml` 註釋說「secrets 由 CI/CD 單獨處理」 -- **但 CD workflow 從未執行 secrets 注入!** -- K8s 中的 `OPENCLAW_TG_BOT_TOKEN` 保持為模板值 `"CHANGE_ME"` -- 結果:Telegram 告警長時間失效 - -**修復清單**: - -| # | 修復項目 | 檔案 | -|---|----------|------| -| 1 | Pre-flight Telegram Secrets 檢查 | `.github/workflows/cd.yaml` | -| 2 | K8s Secrets 自動注入步驟 | `.github/workflows/cd.yaml` | -| 3 | 部署後 E2E 驗證步驟 | `.github/workflows/cd.yaml` | -| 4 | ADR-035 建立 | `docs/adr/ADR-035-telegram-alert-chain-enforcement.md` | -| 5 | Feedback Memory 建立 | `feedback_telegram_secrets_injection.md` | -| 6 | CLAUDE.md 新增章節 | `CLAUDE.md` (Telegram 告警鏈路鐵律) | -| 7 | DevOps Skill 更新 | `.agents/skills/04-awoooi-devops-commander.md` | - -**三層防護機制**: -``` -Layer 1: Pre-flight (檢查 GitHub Secrets 存在) -Layer 2: Deploy (kubectl patch secret 自動注入) -Layer 3: Post-Deploy (E2E 測試告警驗證) -``` - -**相關事故時間線**: -- 2026-03-23: Telegram Token 災難 (logOut) -- 2026-03-26: Alertmanager 路徑錯誤 (2 天無告警) -- **2026-03-29: K8s Secrets 未注入 (長時間無告警)** - -**ADR-035**: `docs/adr/ADR-035-telegram-alert-chain-enforcement.md` - ---- - -### 🔍 2026-03-28 異常修復審查 + K1.1 Velero 進行中 (Day 10 21:15) - -**首席架構師審查結果**: 48/50 (96%) ✅ **Outstanding** - -| 維度 | 評分 | 說明 | -|------|------|------| -| 模組化合規 | 9/10 | ConfigMap/NetworkPolicy 單一責任 | -| 變更完整性 | 10/10 | 8088→8089 全鏈路同步 | -| 文檔同步 | 10/10 | SERVICE-ENDPOINTS.md 即時更新 | -| 回滾能力 | 9/10 | Git 版本化 | -| 零信任合規 | 10/10 | NetworkPolicy egress 正確更新 | - -**異常修復清單** (17 alerts → 0): -- ✅ ContainerHighMemory 17 個 (Prometheus 快取清除) -- ✅ WebsiteDown api.awoooi (舊目標過期) -- ✅ OpenClaw 8088→8089 (Container + ConfigMap + NetworkPolicy + Docs) -- ✅ 舊備份檔案 .bak 刪除 -- ✅ SERVICE-ENDPOINTS.md legacy 引用移除 - -**K1.1 Velero 完成清單**: -- ✅ K1.1.1 MinIO 部署 (192.168.0.188:9000/9001) -- ✅ K1.1.2 Velero CLI v1.13.0 安裝 -- ✅ K1.1.2 velero-backups bucket 建立 -- ✅ K1.1.3 Velero 部署到 K3s (kubectl apply) -- ✅ K1.1.4 Daily Schedule 建立 (`daily-awoooi-prod` 每日 02:00) -- ✅ K1.1.5 測試備份成功 (153 items / 30 天保留) - -**MinIO Console**: http://192.168.0.188:9001 (minio_admin / Minio_Velero_2026!) - ---- - -### ✅ 2026-03-28 全面日誌清查與 15 項修復 (Day 10 深夜 23:59) - -**狀態**: ✅ **15 項異常全部修復完成 (含 3 項長期方案)** - -**清查範圍**: -- Prometheus 告警日誌 -- CI/CD 失敗記錄 -- Sentry Issues -- K8s Pod 狀態 -- 程式碼架構合規性 - -**異常與修復清單**: - -| # | 異常 | 修復 | -|---|------|------| -| 1 | ContainerHighMemory +Inf (17個) | 告警公式加入 `> 0` 條件 | -| 2 | WebsiteDown 誤報 | 移除錯誤的探測目標 | -| 3 | Blackbox TCP 舊 IP | 更新為 VIP 125 | -| 4 | ClawBot port 錯誤 | 8088 → 8089 (OpenClaw) | -| 5 | lewooogo-core exports | types 順序移至最前 | -| 6 | OTEL .env 端點 | 統一為 24318 | -| 7 | K8s ConfigMap OTEL | gRPC→HTTP 統一 | -| 8 | Web Deployment secretRef | 加入 awoooi-secrets | -| 9 | Worker Liveness 探針 | 📋 (已記錄,建議改進) | -| 10 | stats.py Router 違規 | **完成分層重構** | -| 11 | Mock 測試違規 (2檔) | 已刪除 | -| 12 | StatsService 缺 Protocol | 已新增 IStatsService | -| 13 | **Worker liveness 探針風險** | **心跳機制 (每 30 秒 touch)** | -| 14 | **Worker liveness mtime 檢查** | **K8s 探針改用 find -mmin** | -| 15 | **AI_FALLBACK_ORDER 錯誤** | **Ollama 優先切回** | - -**關鍵檔案變更**: - -| 檔案 | 變更 | -|------|------| -| `packages/lewooogo-core/package.json` | exports 順序修正 | -| `k8s/awoooi-prod/04-configmap.yaml` | OTEL HTTP 24318 | -| `k8s/awoooi-prod/05-deployment-web.yaml` | +secretRef | -| `apps/api/src/services/stats_service.py` | 完整重構 + IStatsService Protocol | -| `apps/api/src/api/v1/stats.py` | Router 薄轉發層 | -| `188:/momo-pro/monitoring/alerts.yml` | ContainerHighMemory 公式 | -| `188:/momo-pro/monitoring/prometheus.yml` | Blackbox targets | -| `apps/api/src/workers/signal_worker.py` | 心跳循環 _heartbeat_loop | -| `k8s/awoooi-prod/08-deployment-worker.yaml` | liveness mtime 檢查 | -| `k8s/awoooi-prod/04-configmap.yaml` | AI_FALLBACK_ORDER 修正 | - -**技術債清理**: -- ✅ `test_adr030_auto_approve.py` 已刪除 (Mock 違規) -- ✅ `test_adr030_learning_service.py` 已刪除 (Mock 違規) - ---- - -### ✅ 2026-03-28 全面清查與 E2E 驗證完成 (Day 10 晚間 19:55) - -**狀態**: ✅ **K3s HA 遷移後全面清查完成** - -**執行項目**: - -| 項目 | 狀態 | 說明 | -|------|------|------| -| API Health | ✅ | 所有組件 up (PG/Redis/Ollama/OpenClaw/SignOz) | -| SignOz | ✅ | 188:3301 運作正常 | -| Sentry | ✅ | 110:9000 運作正常 | -| Langfuse | ✅ | 110:3100 v2.95.11 | -| Prometheus | ✅ | 188:9090 + 110:9090 雙運行 | -| Alertmanager | ✅ | 188:9093 ready, 1 active silence | -| Harbor | ✅ | 110:5000 運作正常 | -| CI/CD | ✅ | 最新 CD 成功 (18m40s) | -| Incidents | ✅ | 0 pending, 2 resolved (100%) | -| Approvals | ✅ | 0 pending | - -**修復項目**: - -| 檔案 | 修復內容 | -|------|----------| -| `runner-healthcheck.yml` | 120 → 125 (VIP) | -| `03-secrets.yaml` | +asyncpg 驅動說明 | -| `k3s-prod.yaml` | server → VIP 125 | -| `SECRETS_REFERENCE.md` | K8s API → VIP 125 + asyncpg | -| `reference_four_hosts.md` | K-HA 架構更新 | -| `OmniTerminal.tsx` | i18n 修復 | -| `slide-panel.tsx` | i18n 修復 | -| `approval-modal.tsx` | i18n 修復 | -| `zh-TW.json` / `en.json` | 新增 common 翻譯 | - -**技術債記錄**: -- `stats.py` 分層重構 (P2) - Router 層直接存取 DB - ---- - -### ✅ 2026-03-28 K-HA 雙 Control-Plane 遷移完成 (Day 10 晚間 19:35) - -**狀態**: ✅ **K3s HA 架構升級完成** - -**重大里程碑**: K3s 從 SQLite 遷移至外接 PostgreSQL,121 升級為 Control-Plane - -**架構變更**: - -| 節點 | 遷移前 | 遷移後 | -|------|--------|--------| -| 192.168.0.120 | Server (Control-Plane) | Server (Control-Plane) | -| 192.168.0.121 | Agent (Worker) | **Server (Control-Plane)** | -| 資料儲存 | SQLite (Kine) | **PostgreSQL (188:5432)** | - -**執行步驟**: - -1. PostgreSQL 建立 `k3s_datastore` 資料庫 (192.168.0.188) -2. 備份原 SQLite (`state.db.pre-ha-*`) -3. 120 主機:更新 `/etc/rancher/k3s/config.yaml` 加入 datastore-endpoint -4. 120 主機:重啟 K3s Server -5. 121 主機:卸載 K3s Agent,安裝 K3s Server (join 方式) -6. 觸發 CD 重新部署所有服務 - -**驗證結果**: - -| 項目 | 狀態 | -|------|------| -| 雙節點 Ready | ✅ `120 Ready` + `121 Ready` | -| PostgreSQL Kine 資料 | ✅ 552 筆記錄 | -| API Health | ✅ 所有組件 up (PG/Redis/Ollama/OpenClaw/SignOz) | -| VIP 192.168.0.125 | ✅ 可用 | - -**修復過程中的問題**: - -| 問題 | 解決方案 | -|------|----------| -| SENTRY_DSN "CHANGE_ME" | 改為空字串 | -| DATABASE_URL 缺 +asyncpg | 修正為 `postgresql+asyncpg://` | -| awoooi DB 密碼不符 | 更新 PostgreSQL 使用者密碼 | +### 2026-04-04 — Phase 25 驗證 + 自動修復閉環 -**健康檢查輸出**: -```json -{"status":"healthy","components":{"postgresql":"up","redis":"up","ollama":"up","openclaw":"up","signoz":"up"}} -``` +- Phase 25 P0/P1/P2 全部驗證通過 (36/36 tests) +- 自動修復閉環打通 (Playbook→RAG→執行→KM沉澱) +- Ollama embedding is_closed 修復 +- phase8/9 DB migration prod 執行完成 ---- - -### 🔴 2026-03-28 SignOz OTEL 配置錯誤修復 (Day 10 晚間 20:30) - -**狀態**: ✅ **CI/CD OTEL 端點配置已修正** - -**問題發現**: CI/CD workflows 指向錯誤的 OTEL 端點 - -| 配置 | 錯誤值 | 正確值 | -|------|--------|--------| -| `ci.yaml` | `192.168.0.121:4318` | `192.168.0.188:24318` | -| `cd.yaml` | `192.168.0.121:4318` | `192.168.0.188:24318` | - -**根本原因**: SignOz 部署在 188 主機,但 CI/CD 配置誤寫為 121 (K3s Worker) - -**SignOz 實際運行位置** (192.168.0.188): -- Web UI: `:3301` -- OTEL Collector gRPC: `:24317` -- OTEL Collector HTTP: `:24318` - -**修正文件**: -- `.github/workflows/ci.yaml` (第 23 行) -- `.github/workflows/cd.yaml` (第 48 行) -- `~/.claude/projects/.../memory/reference_four_hosts.md` (加入可觀測性服務表) - -**經驗教訓**: 需建立配置完整性檢查機制 - ---- - -### ✅ 2026-03-28 Phase 20 CSRF 防護完成 (Day 10 傍晚 19:00) - -**狀態**: ✅ **Phase 20 CSRF 防護實作完成** - -**Phase 19 首席架構師審查指出**: 核鑰 UX 安全性 9/10 (缺 CSRF 防護) - -**實作內容**: - -| 項目 | 說明 | -|------|------| -| `src/core/csrf.py` | CSRF Token 生成/驗證模組 | -| `src/api/v1/csrf.py` | GET /api/v1/csrf/token 端點 | -| `src/models/csrf.py` | CSRFTokenResponse Pydantic 模型 | -| `approvals.py` | sign/reject/bulk 端點加入 CSRF 驗證 | -| `useCSRF.ts` | 前端 React Hook | -| `approval.store.ts` | Zustand store 整合 CSRF Token | - -**安全機制**: -- Double Submit Cookie 模式 -- 時序安全比較 (`secrets.compare_digest`) -- SameSite=Strict Cookie -- 1 小時 Token 有效期 - -**保護端點**: -- `POST /api/v1/approvals/{id}/sign` (核鑰簽核) -- `POST /api/v1/approvals/{id}/reject` (拒絕請求) -- `POST /api/v1/approvals/bulk-approve` (批次處理) - -**下一步**: Git commit + 部署驗證 - ---- - -### ✅ 2026-03-28 K3s K-CLEAN + K-VIP CI/CD 整合完成 (Day 10 傍晚 18:20) - -**狀態**: ✅ **K3s 優化 K0 + K-NET + K-CLEAN 全部完成** - -**K-VIP CI/CD 整合**: - -| 項目 | 說明 | -|------|------| -| GitHub Secret | `KUBE_CONFIG_PROD` 更新為 VIP 192.168.0.125 | -| daily-e2e-health.yaml | API URL 改用 VIP 端點 | -| reference_four_hosts.md | 已更新五主機架構 (含 VIP) | - -**K-CLEAN 環境清理**: - -| 類型 | 清理數量 | -|------|----------| -| 孤立 ReplicaSet | 9 個 (awoooi-prod) | -| Failed Job | 1 個 (wooo-aiops-uat) | - -**清理後狀態**: -- awoooi-api: 1 RS, 2/2 Pods Running -- awoooi-web: 1 RS, 2/2 Pods Running -- awoooi-worker: 1 RS, 1/1 Pod Running - -**首席架構師審查**: 46/50 (92%) - Phase K0 + K-NET - -**下一步**: CSRF 防護 (P1) 或 K-HA 另案規劃 - ---- +### 2026-04-03 — Phase 24 + Monitoring Wave D + Layout -### ✅ 2026-03-28 Phase 19.6 測試文檔完成 (Day 10 晚間 21:30) +- Phase 24 AI Provider Registry 全面完成 (Phase A→C) +- Monitoring Wave D: Grafana 3 dashboards + ClickHouse TTL +- Layout 對齊修復 (sidebar/header/metrics) +- 首席架構師 Review 88/100 -**狀態**: ✅ **Phase 19 全部完成** (Wave 0-6) +### 2026-04-02 — Phase O 可觀測性 + Phase 24 規劃 -**完成項目**: +- Phase O O-1~O-5 全部完成 (8/8 Smoke Test) +- OTEL Collector DaemonSet + Event Exporter +- Prometheus scrape → SigNoz (90天保留) +- Phase 24 AIRouter 14 項決策 (D1-D14) +- ADR-052 AI Provider Registry -| 項目 | 說明 | -|------|------| -| 後端單元測試 | `test_terminal_service.py` - 54 項通過 | -| ADR-031 實作紀錄 | SSE 架構實作狀態 | -| ADR-032 實作紀錄 | GenUI 渲染 + Zod Schema | -| Build 驗證 | 前端 + 後端全綠 | +### 2026-04-01 — Phase R 完整審查 + Phase 11 驗收 -**測試覆蓋**: -- 意圖分類: 42 個測試案例 (9 種 IntentType) -- Model 驗證: SpatialContext, TerminalIntentRequest -- DI 驗證: `get_terminal_service()` 非 Singleton -- Service 單元: 實例化、Session 查詢 +- Phase R ADR-047: 97/100 OUTSTANDING +- Phase 11 統帥驗收: ✅ 批准 +- R4-129 webhooks.py AlertAnalyzer 遷移 (-243行) +- ADR-046 IncidentConverter 型別統一 -**下一步**: CSRF 防護 (P1) 或 K-HA 決策 (統帥確認) +### 2026-03-31 — Phase 22 Nemotron + Telegram 重設計 ---- - -### ✅ 2026-03-28 首席架構師綜合審查完成 (Day 10 晚間 21:00) - -**狀態**: ✅ **綜合審查 8.8/10 Strong Pass** - -**審查結果**: - -| 項目 | 分數 | 說明 | -|------|------|------| -| Phase 19 完成度 | 9.5/10 | Wave 0-5 全部完成,剩 19.6 文檔 | -| K3s 優化執行 | 9.0/10 | Phase K0 + K-NET VIP 啟用 | -| 模組化合規 | 8.5/10 | P0 DI 違規已修復 | -| ADR 完整性 | 9.0/10 | 031/032/033 全部建立 | -| Skills 更新 | 8.0/10 | → 已補 v1.9 Terminal 章節 | - -**工作衝突分析**: 無衝突,建議執行順序: -1. Phase 19.6 測試文檔 (3h) - P0 -2. CSRF 防護 (4h) - P1 可並行 -3. K-HA 決策 (待統帥確認部署層級) -4. K-CLEAN 清理維護 - -**Memory 同步**: `project_current_status.md` + `Skill 02 v1.9` - ---- - -### ✅ 2026-03-28 Phase 19 P1-P2 修復完成 (Day 10 晚間 20:00) - -**狀態**: ✅ 首席架構師審查 **42/50 → 47/50** (P0-P2 全部修復) - -**修復項目**: - -| 項目 | 優先級 | 修復內容 | -|------|--------|----------| -| Singleton → FastAPI Depends | P0 | `terminal_service.py`, `terminal.py` | -| Schema 驗證升級 Zod | P1 | `registry.ts` 新增 7 個 Zod Schema | -| Slow Query 監控 | P2 | 5s 警告 / 10s 嚴重 + Sentry 告警 | -| 錯誤分類碼 | P1 | `errorCode` 便於 Sentry 聚合 | - -**Zod Schema 新增**: -- `ApprovalCardSchema` - riskLevel enum 驗證 -- `MetricsSummaryCardSchema` - 百分比/時間格式驗證 -- `K8sPodStatusCardSchema` - 巢狀物件驗證 - -**Build 驗證**: ✅ `pnpm turbo run build --filter=@awoooi/web` 成功 - -**下一步**: Phase 19.6 測試文檔 或 Sentry 生產驗證 +- Phase 22 雙 AI 對話 + NemotronCollabService +- Phase 10.2 Session Replay 完成 +- Telegram 訊息格式 v7.0 重設計 +- NVIDIA NIM 整合 + Gemini fallback ---- - -### ✅ 2026-03-28 Phase K-NET keepalived VIP 完成 (Day 10 下午 17:40) - -**狀態**: ✅ **Phase K-NET 完成** - VIP 192.168.0.125 啟用 - -**執行成果**: - -| 任務 | 狀態 | 說明 | -|------|------|------| -| K-NET.1 安裝 | ✅ | keepalived v2.2.4 (120 + 121) | -| K-NET.2 配置 | ✅ | MASTER (120) + BACKUP (121) | -| K-NET.3 VIP 驗證 | ✅ | 192.168.0.125 可存取 K3s API | -| K-NET.4 Failover | ⏳ | 待 K-HA (121 需升級為 Server) | - -**配置細節**: -- MASTER: 120 (ens192, priority 100) -- BACKUP: 121 (ens160, priority 90) -- VRID: 51 -- 認證: awoooi_k3s_vip - -**驗證**: `kubectl --server=https://192.168.0.125:6443 get nodes` 成功 - -**下一步**: K-HA Phase (外接 PostgreSQL) 或 K-CLEAN Phase +### 2026-03-29~30 — Monitoring + Gitea CI/CD ---- - -### ✅ 2026-03-28 Phase K0 K3s 生產級優化完成 (Day 10 上午 11:30) +- Monitoring 主計畫 Wave A-C 批准+執行 +- ADR-039 Gitea CI/CD 遷移完成 +- 前端內網 IP 禁令確立 +- NEXT_PUBLIC_* build-time 變數規範 -**狀態**: ✅ **Phase K0 全部完成** - 首席架構師審查 9.0/10 +### 2026-03-28 — Phase 19+20 完成 -**執行成果**: +- Phase 19 Omni-Terminal 全 7 Wave (47/50) +- Phase 20 CSRF 防護 (Double Submit Cookie) +- K3s 優化 (Swap/kube-reserved/etcd/PDB) -| 任務 | 狀態 | 說明 | -|------|------|------| -| K0.1 Swap 關閉 | ✅ | 120 + 121 永久禁用 | -| K0.2 K3s 配置 | ✅ | config.yaml + registries.yaml | -| K0.3 SQLite 備份 | ✅ | 本地 + rsync 到 188 (每 6 小時) | -| K0.4 PDB | ✅ | API/Web/Worker 保護 | -| K0.5 Startup Probe | ✅ | Git 變更完成 (下次 CI/CD 生效) | -| K0.6-7 清理 | ✅ | ImagePullBackOff + 孤立 RS | +### 2026-03-27 — Phase 16~18 完成 -**關鍵發現**: K3s 使用 SQLite (Kine) 而非 etcd,備份腳本已調整 +- Phase 16 架構大掃除 R1-R4 (50/50 OUTSTANDING) +- Phase 17 技術債清理 +- Phase 18 E2E Hardening (9.2/10) +- Phase 10.2 Sentry Telegram 通知+去重 -**技術細節**: -- Alertmanager 靜音 30 分鐘後重啟 K3s -- 穩定性驗證: 2 nodes Ready, 5 pods Running, Health 200 OK -- revisionHistoryLimit: 10 → 3 (減少孤立 RS) -- rsync 到 188:/backup/k3s_etcd/ (root SSH key 已配置) +### 2026-03-26 — Phase 13~15 完成 -**下一步**: K-NET Phase (keepalived VIP) 或 K-CLEAN Phase - ---- +- Phase 13 Enterprise AIOps (6 MCP Tools + Router) +- Phase 14 紅區治理+依賴防護+共用型別 +- Phase 15 LLMOps (Langfuse+DeepLink+取樣) -### ✅ 2026-03-28 Phase 19 首席架構師審查 42/50 (Day 10 晚間 19:30) +### 2026-03-25 — Phase 11+12 批准+開工 -**狀態**: ✅ 首席架構師審查通過 - **42/50 優秀** +- Phase 11 對話式 AI 批准+實作 +- Phase 12 Ollama Tool Calling 100% -**評分結果**: +### 2026-03-24 — Phase 6.5 + QA + Sentry -| 評項 | 分數 | -|------|------| -| GenUI 架構設計 | 9/10 | -| SSE 狀態機實作 | **10/10** ⭐ | -| 核鑰 UX 安全性 | 9/10 | -| 可觀測性整合 | 8/10 | -| 模組化合規 | 6/10 → ✅ 已修復 | +- Statistics API 6 端點 +- Mock 測試全面禁止鐵律 +- Sentry Self-Hosted 整合 +- Phase 8 QA + 緊急修復 -**P0 修復**: +### 2026-03-23 — Phase 6.4 + Phase 9 -| 修復 | 檔案 | -|------|------| -| Singleton → FastAPI Depends | `services/terminal_service.py` | -| Router DI 注入 | `api/v1/terminal.py` | +- Decision Proposal API + Guardrails +- Agent Teams + ConsensusEngine 90/90 +- 技術債清理 (44 未用 import + 22 i18n) -**Sentry Session Replay**: +### 2026-03-22 — Phase 6 認知覺醒 -| 項目 | 設定 | -|------|------| -| Session 採樣 | 10% | -| Error 採樣 | 100% | -| Tunnel | `/api/sentry-tunnel` | -| 隱私保護 | `maskAllInputs: true` | +- Event Bus (Redis Streams) 通電 +- Memory Layer (Redis + PostgreSQL) 雙層 +- Incident Engine v1 (聚合+GraphRAG+去重) +- Redis Multi-Sig 分散式鎖 -**待改進 (P1-P2)**: CSRF 防護、Zod Schema、Slow Query 監控 +### 2026-03-20~21 — Phase 0-4 MVP -**下一步**: Phase 19.6 測試文檔 或 Sentry 生產驗證 +- Phoenix Rising 基建部署 +- BFF Gateway + 原子組件庫 +- SSE 前後端整合 + HITL 授權卡片 +- i18n 雙語引擎 135 鍵值 --- -### ✅ 2026-03-28 Phase 16 首席架構師驗收 50/50 (Day 10 晚間 19:00) - -**狀態**: ✅ 首席架構師審查通過 - **OUTSTANDING (50/50)** - -**審查結果**: - -| 評分項目 | 分數 | -|----------|------| -| 絞殺者模式實施 | 10/10 | -| Repository 抽象化 | 10/10 | -| Router 瘦身效果 | 10/10 | -| 封存策略執行 | 10/10 | -| 模組化合規 (5問) | 10/10 | -| **總分** | **50/50** | - -**關鍵成果**: +## 📊 專案統計 (截至 2026-04-07) | 指標 | 數值 | |------|------| -| Router 瘦身 | 1097 → 796 行 (-28%) | -| 封存程式碼 | 866 行 | -| Repository 數量 | 7 個 (IIncidentRepository 等) | -| 絞殺者開關 | USE_NEW_ENGINE 雙軌運作 | - -**模組化 5 問驗證**: 5/5 全部通過 - -**ADR 狀態**: ADR-008 已存在,無需新增 -**Skill 狀態**: Skill 02 v1.7,無需變更 - -**下一步**: Phase K0 (K3s 優化) 或 Phase 19.6 (測試文檔) - ---- - -### ✅ 2026-03-28 Phase 19 Wave 5 完成 (Day 10 下午 18:00) - -**狀態**: ✅ Wave 5 - 19.O 可觀測性整合完成 - -**新建/更新檔案**: - -| 檔案 | 說明 | -|------|------| -| `lib/telemetry/terminal-telemetry.ts` | 🆕 Terminal Telemetry 模組 | -| `lib/telemetry/index.ts` | 🆕 Telemetry 索引 | -| `stores/terminal.store.ts` | ✏️ 整合 Sentry 追蹤 | -| `components/genui/GenUIRenderer.tsx` | ✏️ 整合渲染追蹤 | -| `components/genui/NuclearKeyButton.tsx` | ✏️ 整合授權追蹤 | - -**Telemetry 功能**: - -| 追蹤項目 | Sentry 整合 | -|----------|-------------| -| `trackIntentSubmit` | Intent 提交 + breadcrumb | -| `trackIntentComplete` | 完成/失敗 + duration | -| `trackSSEConnection` | 連線/斷線/重連 | -| `trackNuclearKey` | 高風險授權追蹤 | -| `trackGenUIRender` | 組件渲染時間 + 錯誤 | - -**Phase 19 總進度**: ~95% (剩餘 19.6 測試文檔) - -**下一步**: K3s Phase K0 執行 或 19.6 測試文檔 - ---- - -### ✅ 2026-03-28 K3s 生產級優化 Phase K0 批准 (Day 10 下午 16:00) - -**狀態**: ✅ 首席架構師審查通過 (9.0/10) + 統帥 Final Approval - -**會議記錄**: `docs/meetings/2026-03-28-k3s-optimization-deep-dive.md` - -**深度盤點結果**: - -| 項目 | 現況 | 行動 | -|------|------|------| -| Swap | 🔴 開啟 (8GB) | K0.1 關閉 | -| config.yaml | 🔴 不存在 | K0.2 建立 | -| kube-reserved | 🔴 未設定 | K0.2 加入 | -| etcd 備份 | 🔴 無 | K0.3 建立 + rsync | -| PDB | 🔴 無 | K0.4 建立 ✅ | -| Startup Probe | 🔴 無 | K0.5 加入 | - -**架構決策 (ADR-033)**: - -| 決策點 | 選擇 | -|--------|------| -| HA 方案 | 方案 B: 外接 PostgreSQL (188) | -| VIP | 192.168.0.125 | -| keepalived 部署 | 主機層 (不受 K3s 重啟影響) | -| K-HA 時機 | 另案規劃 | - -**新建檔案**: - -| 檔案 | 類型 | -|------|------| -| `docs/runbooks/K3S-OPTIMIZATION-RUNBOOK.md` | Runbook (500+ 行) | -| `docs/meetings/2026-03-28-k3s-optimization-deep-dive.md` | 會議記錄 | -| `k8s/awoooi-prod/09-pdb.yaml` | K8s PDB | -| `docs/adr/ADR-033-k3s-ha-architecture.md` | 架構決策 | -| `memory/feedback_k3s_optimization_rules.md` | 執行規範 | - -**下一步**: 執行 Phase K0 (Swap → etcd 備份 → PDB → config.yaml → Startup Probe → 清理) - ---- - -### ✅ 2026-03-28 Phase 19 Wave 4 完成 (Day 10 上午 10:30) - -**狀態**: ✅ Wave 4 全部完成 (19.5 + 19.R + 19.I + 19.Y) - -**Phase 19.5 - 核鑰 UX 強化**: -| 組件 | 說明 | -|------|------| -| `useHoldToConfirm` | 長按確認 Hook (Y 鍵支援 + 風險分級時間) | -| `NuclearKeyButton` | 核鑰授權按鈕 (進度條 + 倒數計時 + 危險感設計) | -| `ApprovalCard v2` | 整合 NuclearKeyButton 取代舊按鈕 | - -**Phase 19.R - 響應式設計**: -| 斷點 | 設計 | -|------|------| -| Mobile (<640px) | OmniTerminal 全螢幕 overlay | -| Tablet (640-1024px) | 90% 寬度 + 縮減版 header | -| Desktop (>1024px) | max-w-4xl 居中 + 完整 UI | - -**Phase 19.I - i18n 整合**: -| Section | Keys | -|---------|------| -| `omniTerminal` | title, fullTitle, shortcut, sseLive, offline, inputPlaceholder... | -| `nuclearKey` | authorize, authorized, holdHintMobile, holdHintDesktop, highBlastRadius... | - -**Phase 19.Y - 無障礙規範**: -| 屬性 | 應用 | -|------|------| -| `aria-label` | OmniTerminal buttons, NuclearKeyButton | -| `aria-pressed` | useHoldToConfirm buttonProps | -| `aria-busy` | 長按進行中狀態 | -| `aria-live="polite"` | Terminal message log | -| `role` | dialog, log, button | - -**新建/更新檔案**: -| 檔案 | 變更 | -|------|------| -| `hooks/useHoldToConfirm.ts` | 🆕 長按確認 Hook | -| `genui/NuclearKeyButton.tsx` | 🆕 核鑰授權按鈕 | -| `genui/ApprovalCard.tsx` | 整合 NuclearKeyButton + i18n | -| `terminal/OmniTerminal.tsx` | 響應式設計 + 無障礙 | -| `genui/registry.ts` | 新增 NuclearKeyButton | -| `messages/zh-TW.json` | 新增 omniTerminal + nuclearKey | -| `messages/en.json` | 新增 omniTerminal + nuclearKey | - -**下一步**: Wave 5 (19.O 可觀測性 + 19.6 測試文檔) - ---- - -### ✅ 2026-03-28 Phase 19 Wave 2 完成 (Day 10 深夜 02:30) - -**狀態**: ✅ Wave 2 全部完成 (19.3 + 19.4a) - -**Phase 19.3 - OpenClaw 串流整合**: -| 功能 | 說明 | -|------|------| -| Intent 分類 | 9 種意圖類型 (QUERY/ACTION/ANALYZE) | -| SignOz 整合 | 即時指標擷取 + RCA 分析 | -| OpenClaw RCA | AI 根因分析 + 建議動作 | -| SSE 串流事件 | thought/tool_call/render_ui | - -**Phase 19.4a - GenUI Registry**: -| 組件 | 說明 | -|------|------| -| `ApprovalCard` | 核鑰授權卡 | -| `MetricsSummaryCard` | SignOz 指標摘要 | -| `SentryErrorCard` | Sentry 錯誤追蹤 | -| `IncidentTimelineCard` | 事件時間軸 | -| `K8sPodStatusCard` | K8s Pod 狀態 | -| `TraceWaterfallCard` | SignOz Trace 瀑布圖 | - -**新建檔案**: -| 檔案 | 說明 | -|------|------| -| `genui/registry.ts` | GenUI 組件註冊表 | -| `genui/GenUIRenderer.tsx` | 動態渲染器 | -| `genui/MetricsSummaryCard.tsx` | 指標摘要卡 | -| `genui/SentryErrorCard.tsx` | 錯誤追蹤卡 | -| `genui/IncidentTimelineCard.tsx` | 事件時間軸卡 | -| `genui/K8sPodStatusCard.tsx` | Pod 狀態卡 | -| `genui/TraceWaterfallCard.tsx` | Trace 瀑布圖卡 | -| `genui/index.ts` | GenUI 匯出索引 | - -**下一步**: Wave 3 (剩餘 GenUI 卡片細節優化) - ---- - -### ✅ 2026-03-28 Phase 19 Wave 1 完成 (Day 10 深夜 02:00) - -**狀態**: ✅ Wave 1 全部完成 (19.S + 19.1 + 19.2 基礎) - -**新建檔案**: -| 檔案 | 說明 | -|------|------| -| `lib/constants/sse-states.ts` | 7-State SSE 狀態機 + 指數退避重連 | -| `stores/terminal.store.ts` | Terminal Store 重寫 (Zustand + Hybrid SSE) | -| `api/src/models/terminal.py` | Terminal Pydantic Models (8 models) | -| `api/src/services/terminal_service.py` | Terminal Service (模擬串流) | -| `api/src/api/v1/terminal.py` | Terminal Router (4 Endpoints) | - -**更新檔案**: -| 檔案 | 變更 | -|------|------| -| `api/src/core/sse.py` | 新增 8 個 TERMINAL_* EventType | -| `api/src/main.py` | 註冊 terminal_v1 router | -| `OmniTerminal.tsx` | 使用 selector hooks + GenUI render | -| `lib/constants/index.ts` | 匯出 sse-states | - -**API Endpoints (ADR-031 Hybrid SSE)**: -| 方法 | 路徑 | 說明 | -|------|------|------| -| POST | `/api/v1/terminal/intent` | 提交意圖,返回 session_id | -| GET | `/api/v1/terminal/stream/{session_id}` | SSE 串流訂閱 | -| POST | `/api/v1/terminal/abort/{session_id}` | 中斷執行 | -| GET | `/api/v1/terminal/status/{session_id}` | 查詢狀態 | - -**Hybrid SSE 流程**: -``` -1. User submits intent -2. POST /terminal/intent → session_id -3. EventSource(/terminal/stream/{session_id}) -4. SSE events: thought → tool_call → render_ui → complete -``` - -**下一步**: Wave 2 (OpenClaw 串流化 + GenUI 基礎) - ---- - -### ✅ 2026-03-28 Phase 19 Wave 0 完成 (Day 10 深夜 00:45) - -**狀態**: ✅ Wave 0 全部完成 (19.Z + 19.K + 19.A) - -**新建檔案**: -| 檔案 | 說明 | -|------|------| -| `lib/constants/z-index.ts` | 7-Tier Z-Index 層級系統 | -| `lib/constants/shortcuts.ts` | 快捷鍵定義 (CMD+J) | -| `lib/constants/animations.ts` | Terminal 動畫系統 (6 keyframes) | -| `lib/constants/index.ts` | 常量匯出索引 | -| `hooks/useReducedMotion.ts` | 無障礙動畫偵測 Hook | -| `memory/project_phase19_review_schedule.md` | 首席架構師審查排程 | - -**更新檔案**: -| 檔案 | 變更 | -|------|------| -| `OmniTerminal.tsx` | z-50 → Z_INDEX.OMNI_TERMINAL, CMD+K → CMD+J | -| `toast.tsx` | z-50 → Z_INDEX.TOAST | -| `dialog.tsx` | z-50 → Z_INDEX.DIALOG | -| `slide-panel.tsx` | z-40/z-50 → Z_INDEX.SIDEBAR/SLIDE_PANEL | -| `header.tsx` | z-30 → Z_INDEX.HEADER | -| `sidebar.tsx` | z-40 → Z_INDEX.SIDEBAR | -| `live-approval-panel.tsx` | z-50 → Z_INDEX.DIALOG | -| `hitl-section.tsx` | z-50 → Z_INDEX.DIALOG | -| `conversational-view.tsx` | z-40/z-50 → Z_INDEX.SIDEBAR/DIALOG | -| `tailwind.config.ts` | 新增 6 個 Terminal 動畫 keyframes | - -**首席架構師審查結果**: -- ✅ TypeScript 無錯誤 -- ✅ 模組化合規 (常量集中管理) -- ✅ 無障礙支援 (prefers-reduced-motion) -- ✅ 文檔完整 (JSDoc) - -**下一步**: Wave 1 - SSE 核心通道 (19.S + 19.1 + 19.2) - ---- - -### 📋 2026-03-27 Phase 19 v2.0 完整工作規格書 (Day 10 晚間 23:45) - -**狀態**: ✅ 首席架構師完成 215 項任務規格書 - -**戰略目標**: 將 AWOOOI 從「傳統監控儀表板」轉型為「AI 代理人協作空間 (Agentic Workspace)」 - -**三大 AI-Native 基因**: -| 基因 | 說明 | 技術實現 | -|------|------|----------| -| **GenUI** | 畫面跟著 AI 思考動態生成 | SSE 推送 + React 動態組件 | -| **空間感知** | AI 知道統帥正在看什麼 | Ghost Payload (路由+焦點) | -| **核鑰 UX** | 高風險操作需儀式感授權 | Y 鍵長按 2s + Multi-Sig | - -**v2.0 完整工作清單 (14 區塊)**: -| Phase | 區塊名稱 | 任務數 | 預估時間 | 優先級 | -|-------|----------|--------|----------|--------| -| 19.Z | Z-Index 重構 | 12 | 2.5h | 🔴 P0 | -| 19.K | 快捷鍵重構 | 11 | 2.5h | 🔴 P0 | -| 19.A | 動畫系統 | 10 | 2.5h | 🟠 P1 | -| 19.S | SSE 狀態機 | 10 | 2.5h | 🔴 P0 | -| 19.1 | 後端 SSE 基礎設施 | 14 | 5h | 🔴 P0 | -| 19.2 | 前端 SSE + UI | 42 | 8h | 🔴 P0 | -| 19.3 | OpenClaw 串流化 | 8 | 5h | 🟠 P1 | -| 19.4 | GenUI 卡片系統 | 57 | 13h | 🟠 P1 | -| 19.5 | 核鑰 UX 強化 | 12 | 3h | 🟠 P1 | -| 19.R | 響應式設計 | 8 | 2h | 🟡 P2 | -| 19.I | i18n 整合 | 7 | 1.5h | 🟡 P2 | -| 19.Y | 無障礙規範 | 9 | 2h | 🟡 P2 | -| 19.O | 可觀測性整合 | 20 | 6h | 🟠 P1 | -| 19.6 | 測試與文檔 | 8 | 3h | 🟡 P2 | -| **總計** | - | **215** | **~58h** | - | - -**7 大架構決策已定案**: -| # | 決策點 | 裁示 | -|---|--------|------| -| Q1 | SSE 模式 | ✅ 混合模式 (POST intent → GET stream) | -| Q2 | Session 儲存 | ✅ Redis (5 分鐘 TTL) | -| Q3 | 先模擬串流 | ✅ 同意 (asyncio.sleep 解耦) | -| Q4 | 多 SSE 共存 | ✅ 允許 | -| Q5 | 快捷鍵 | 🛠️ CMD+J (避免 CMD+K 衝突) | -| Q6 | Ghost Payload | ✅ 最小化 (current_page + entity_id) | -| Q7 | 重連策略 | ✅ 指數退避 + Last-Event-ID | - -**詳細文件**: -- Memory: `project_phase19_omni_terminal.md` -- 會議紀錄: `docs/meetings/2026-03-27-phase19-omni-terminal-brainstorm.md` - -**下一步行動**: -1. 建立 ADR-031 (Omni-Terminal SSE 架構) -2. 建立 ADR-032 (GenUI 動態渲染機制) -3. 更新 ADR-002 (Nothing.tech 設計系統 - Z-Index) -4. 按 Wave 0 順序開始實作 - ---- - -### 📋 2026-03-27 Phase 19 Omni-Terminal 初版規劃 (Day 10 晚間 21:30) - -**狀態**: ⏳ 已升級至 v2.0 - -**詳細文件**: `~/.claude/projects/-Users-ogt-awoooi/memory/project_phase19_omni_terminal.md` - ---- - -### ✅ 2026-03-27 Sentry Dedup 模組化修復 (Day 10 晚間 20:00) - -**Commit**: `2b06981` - -**修復內容**: -- 將 `check_sentry_dedup()` 從 Router 移至 `SentryService.check_dedup()` -- 遵循 leWOOOgo 積木化原則: Router 禁止直接存取 Redis -- 保持 10 分鐘 TTL 去重窗口 - -**Phase 10.2.1 進度**: ✅ **全部完成** -| # | 任務 | 狀態 | -|---|------|------| -| 120 | Sentry Alert Rule 配置 | ✅ API 自動配置 (awoooi-api + web) | -| 121 | Webhook Endpoint | ✅ | -| 122 | Telegram 訊息格式 | ✅ | -| 123 | 去重機制 | ✅ 2b06981 | - ---- - -### ✅ 2026-03-27 Sentry 首席架構師審查 (Day 10 晚間 19:00) - -**Commit**: `a579710` - -**審查結果**: ✅ **Sentry 已正常運行** - -| 項目 | 狀態 | 說明 | -|------|------|------| -| Sentry 服務 | ✅ | 192.168.0.110:9000 運行中 | -| K8s ConfigMap | ✅ | SENTRY_DSN 已配置 | -| API Pod | ✅ | `sentry_initialized` 啟動日誌 | -| Web Build | ✅ | CI/CD build-arg 已配置 | -| Git 模板 | ✅ | 本次補齊 | - -**發現問題**: -1. Git 模板未同步 (03-secrets.example.yaml 缺少 SENTRY_DSN) -2. K3s Master IP 確認為 192.168.0.120 (非 199) - -**修復內容**: -- `03-secrets.example.yaml` - 新增 SENTRY_DSN -- `04-configmap.yaml` - 新增 Sentry 元數據 - ---- - -### ✅ 2026-03-27 CD Lint 修復 (Day 10 傍晚 18:30) - -**Commit**: `138ef0c` - -**修復 7 個 Lint 錯誤**: - -| 檔案 | 問題 | 修復 | -|------|------|------| -| `approvals.py:56` | F401 unused import | 移除 `get_proposal_service` | -| `auto_approve.py:28` | F401 unused import | 移除 `RiskLevel` | -| `learning_service.py:29` | F401 unused import | 移除 `Incident` | -| `decision_manager.py:487` | I001 import unsorted | 重新排序 import | -| `playbook_rag.py:99` | B905 zip strict | 加入 `strict=True` | -| `playbook_rag.py:426` | C416 dict comprehension | 改用 `dict()` | - -**首席架構師審查**: ✅ 純 Lint 修復,非邏輯變更,安全無虞 - ---- - -### ✅ 2026-03-27 P1 模組化違規修復 (Day 10 下午 16:00) - -**Commit**: `f1b037b` - -**修復 P1 違規**: -- `playbook_rag.py:29` - Service 直接 import Redis → Repository Pattern -- `playbook_rag.py:156` - 自建 httpx.AsyncClient → DI 注入 - -**新增檔案**: -- `repositories/embedding_repository.py` - Embedding Cache Repository -- `interfaces.py` - IEmbeddingCacheRepository Protocol - -**重構**: -- `PlaybookRAGService` 改用 DI 注入 -- `get_playbook_rag_service()` 改為 async factory -- `PlaybookService` 改用 lazy initialization - -**測試**: 16 passed (playbook 相關) - ---- - -### ✅ 2026-03-27 P1 Telegram 按鈕優化 (Day 10 下午 15:30) - -**Commit**: `abc21c7` - -| 功能 | 按鈕 | Redis Key | TTL | -|------|------|-----------|-----| -| 延遲提醒 | ⏰ 稍後 | `telegram_snooze:{approval_id}` | 30 分鐘 | -| 靜默資源 | 🔕 靜默 1h | `telegram_silence:{resource_name}` | 1 小時 | - -**新按鈕佈局**: -``` -[✅ 簽核] [❌ 拒絕] -[⏰ 稍後] [🔕 靜默 1h] -[⚡ 執行自動調優] -``` - -**修改檔案**: -- `telegram_gateway.py` - 新增 snooze/silence handler -- `decision_manager.py` - 發送前檢查 silence 狀態 -- `Skill 03` - v1.5 → v1.6 - ---- - -### 🚨 2026-03-27 告警機制完整審查 (Day 10 上午 09:00) - -**首席架構師審查結果**: ⭐⭐⭐⭐ (4/5) - -#### 已修復 (本日) - -| 問題 | Commit | 狀態 | -|------|--------|------| -| P0 Stream Key 不一致 | `79b526b` | ✅ | -| Telegram 去重 | `e34b0f2` | ✅ | -| INC-INC-INC- 前綴 | `e34b0f2` | ✅ | -| LLM 超時 120/180s | `d1409fc` | ✅ | -| 舊 Stream 積壓清理 | - | ✅ | - -#### 優化計畫 (11 項) - -| 優先級 | 項目數 | 本週必做 | -|--------|--------|----------| -| P1 | 2 | playbook_rag 模組化 | -| P2 | 4 | 處理中狀態、優先級排序 | -| P3 | 4 | GPU LLM、統計儀表板 | -| 取消 | 1 | UTC 時區 (違反鐵律) | - -**Memory 更新**: `project_alert_optimization_plan.md` - ---- - -### ✅ 2026-03-27 ADR-030 測試驗證完成 (Day 10 深夜 00:00) - -| 測試項目 | 結果 | -|----------|------| -| 舊測試修復 (`IncidentStatus.OPEN→INVESTIGATING`) | ✅ | -| `test_adr030_auto_approve.py` | ✅ 19 passed | -| `test_adr030_learning_service.py` | ✅ 19 passed | -| `test_auto_repair_service.py` | ✅ 11 passed | -| **總計** | **49 passed** | - -**新增測試檔案**: -- `tests/test_adr030_auto_approve.py` - 自動執行策略測試 -- `tests/test_adr030_learning_service.py` - 持續學習服務測試 - ---- - -### 🔍 2026-03-26 首席架構師審查 ADR-030 (Day 10 晚間 23:30) - -**審查結果**: ⭐⭐⭐⭐ (4/5) - **批准上線** - -| 項目 | 結果 | -|------|------| -| 架構設計 | ✅ 通過 | -| 代碼品質 | ✅ 通過 | -| 安全性 | ✅ 通過 | -| 模組化規範 | ⚠️ P1 違規待修 | - -**P1 違規** (本週內修復): -- `playbook_rag.py:29` - Service 直接存取 Redis -- `playbook_rag.py:156` - 自建 httpx.AsyncClient - -**已更新文檔**: -- `MEMORY.md` - 新增 project_adr030_architecture_review.md -- `ADR-030` - 狀態: 提案中 → 已實作 ✅ -- `Skill 02` - v1.6 → v1.7 (新增 ADR-030 章節) - ---- - -### ✅✅✅ 2026-03-26 ADR-030 全部完成 (Day 10 晚間 21:00-23:00) - -**Phase 1** - Expert System 重構 (診斷優先) ✅ -**Phase 2** - K8s/SignOz 診斷資料收集 ✅ -**Phase 3** - Playbook RAG 向量搜尋 ✅ -**Phase 4** - 自動執行策略 ✅ -**Phase 5** - 持續學習迴圈 ✅ - -| Phase | 檔案 | 功能 | -|-------|------|------| -| 2 | `k8s_diagnostics.py` | K8s 診斷收集 | -| 2 | `diagnosis_aggregator.py` | 多源診斷整合 | -| 3 | `playbook_rag.py` | Ollama 向量搜尋 | -| 4 | `auto_approve.py` | 自動執行策略 | -| 5 | `learning_service.py` | 持續學習迴圈 | - -**完整架構**: -``` -Incident → Expert 分類 → K8s/SignOz 診斷 → Playbook RAG 匹配 - │ - ├─ AutoApprovePolicy 判斷 - │ ├─ 可自動執行 → 直接執行 → LearningService 學習 - │ └─ 需人工審核 → Telegram 通知 - │ - └─ 執行完成 → 信任度調整 + Playbook 統計更新 -``` - -**Commits**: `60e9538` → `3c03452` → `ce7f8a1` → `3256142` - -### 🔴🔴 2026-03-26 Telegram 告警轟炸緊急修復 (Day 10 晚間 19:30-20:00) - -**事故**: Telegram 同樣告警重複發送 (INC-INC-INC- 格式) - -**根因分析**: -1. Phase 6.5 (765ee39) 修改: COMPLETED decision + INVESTIGATING incident → 建立新 decision -2. 每次前端 poll `/api/v1/incidents` 都觸發新 decision → Telegram 訊息 -3. `telegram_gateway.py:161` 又加 INC- 前綴 → INC-INC- 格式 -4. Gemini API 返回 404 但計費 (91/500 quota 浪費) - -**修復內容**: -| 修復 | 檔案 | Commit | -|------|------|--------| -| INC- 前綴重複 (decision) | decision_manager.py:83 | 35aa690 | -| INC- 前綴重複 (telegram) | telegram_gateway.py:161 | 139ddc3 | -| Telegram 去重 (10 分鐘 Redis) | decision_manager.py | 35aa690 | -| Ollama 優先順序 | kubectl set env | - | -| K8s selector 不可變 | cd.yaml | 6421af0 | -| TypeScript 錯誤 | live-approval-panel.tsx | 0e6c381 | -| Lint 錯誤 | services/__init__.py | df04254 | - -**教訓**: -- 🔴 修改 Phase 6.5 decision 邏輯時沒考慮 polling 影響 -- 🔴 沒有 Telegram 發送頻率限制機制 -- 🔴 Gemini API 404 問題未及時發現 - ---- - -### 🔴 2026-03-26 首席架構師完整審查 + ADR-027 批准 (Day 9 晚間 19:30) - -**審查觸發**: 活躍事件顯示 0 + Telegram 告警異常 (統帥要求) - -**首席架構師審查結果**: - -| 問題 ID | 描述 | 嚴重度 | -|---------|------|--------| -| CRITICAL-001 | Incident-Approval 建立不是原子事務 | 🔴🔴 | -| CRITICAL-002 | 雙層寫入非原子 (Redis + PostgreSQL) | 🔴🔴 | -| HIGH-001 | Approval 狀態變更未同步 Incident | 🔴 | -| HIGH-002 | Redis TTL 過期導致資料遺失 | 🟡 | -| HIGH-003 | 前端狀態一致性問題 | 🟡 ✅已修 | - -**解決方案** (ADR-027): -- UnitOfWork 模式: PostgreSQL 事務管理 -- Saga Pattern: Redis 寫入失敗回滾 -- IncidentApprovalService: 封裝原子操作 -- 狀態同步 Hook: Approval 變更時同步 Incident - -**新增 ADR**: -- `docs/adr/ADR-027-incident-approval-sync.md` - Incident-Approval 同步架構 - -**估時**: 9-12h (四階段實作) - ---- - -### ✅ 2026-03-26 Telegram 告警鏈修復 + CoreDNS GitOps (Day 9 傍晚 18:45) - -**問題**: Telegram 兩天無告警 + 簽核後內容消失 - -**根因分析**: -1. NetworkPolicy DNS 規則標籤錯誤 (CoreDNS 只有 k8s-app=kube-dns) -2. CoreDNS forward 使用 /etc/resolv.conf → 127.0.0.53 (容器無法使用) -3. Alertmanager 指向舊系統 (momo-pro-system) -4. 前端簽核後立即移除卡片 - -**修復內容**: -- NetworkPolicy: 使用 namespaceSelector 指定 kube-system (ADR-011 Appendix B) -- CoreDNS GitOps: ADR-026 + HelmChartConfig + CD 整合 -- 前端: 簽核後延遲 5 秒顯示結果 - -**新增檔案**: -- `k8s/k3s-system/coredns-custom.yaml` - HelmChartConfig -- `docs/adr/ADR-026-coredns-gitops.md` - CoreDNS GitOps 架構 - -**Commits**: 34bfa99, 7847e00 - ---- - -### ✅ 2026-03-27 Phase 13.2 #84 RAGProvider 完成 (Day 10 凌晨 00:40) - -**實作內容**: -- `rag_provider.py`: RAG MCP Tool Provider (ADR-015 模組化) - - `search_runbook`: 語義搜尋維運手冊 - - `index_documents`: 索引文檔 - - `get_index_stats`: 索引統計 -- `providers/__init__.py`: 註冊 RAGProvider - -**首席架構師審查**: -- ✅ 符合 ADR-015 模組化架構 (Interface + Lazy Loading + DI) -- ✅ 健康檢查實作 -- ⚠️ base_path 計算改進建議 (使用 settings) - -**Gemini 驗證**: -- `/health/ai-usage` 確認: `fallback_order: ["gemini","ollama","claude"]` -- 用量: Gemini 7/500 daily requests - -**Commit**: 539f14b - -### ✅ 2026-03-26 Gemini API 切換 + Rate Limiter (Day 9 晚間 23:45) - -**統帥決策**: 臨時切換 Gemini API 排除 Ollama CPU 推論問題 - -**實作內容**: -- `ai_rate_limiter.py`: RPM/Daily/Token 三層閥值 -- `openclaw.py`: 整合 rate limit,超限自動降級 Ollama -- `health.py`: `/health/ai-usage` 監控端點 -- Lint 錯誤全面修復 (32 errors → 0) - -**閥值設定**: -| 類型 | Gemini | Claude | -|------|--------|--------| -| RPM | 10/min | 5/min | -| Daily | 500 | 200 | -| Tokens | 100K | 50K | - -**Commits**: bf32c4b, e26ea52, 3015349 - -**預計切回 Ollama**: 2026-03-27 - -### 📋 2026-03-26 Phase 18 失敗自動修復閉環 (Day 9 晚間 18:30) - -**問題識別**: 行動日誌只記錄失敗,沒有後續處理 (死路) - -**首席架構師提案** (ADR-023): - -``` -執行失敗 - ↓ -FailureWatcher (Worker 自動偵測) - ↓ -OpenClaw 分析失敗原因 + 生成修復方案 - ↓ -Trust Engine 風險評估 - ├─ LOW → 自動執行修復 → 揭露通知 - └─ MEDIUM/CRITICAL → Telegram + 前端同步推送 → 等待授權 - ↓ - 記錄 authorization_channel (web/telegram/auto) - ↓ -執行修復 → 驗證 → 學習 -``` - -**核心元件**: -- `FailureWatcher` - 監聽失敗事件 -- `RepairAnalyzer` - AI 分析失敗原因 -- `AutoRepairExecutor` - 執行低風險自動修復 -- `RepairLog` - 修復日誌模型 -- `authorization_channel` - 記錄授權來源 - -**文件**: -- Memory: `project_phase18_failure_loop.md` -- ADR: `docs/adr/ADR-023-failure-auto-repair-loop.md` - -**預估**: 5 天 (Phase 18.1-18.6) -**狀態**: ✅ **統帥批准,開始實作** - -### 📅 2026-03-26 首席架構師審查排程 (Day 9 晚間 20:00) - -**審查時間表已建立**: -| 時間點 | 審查項目 | -|--------|---------| -| 2026-03-27 09:00 | Phase 16 R1 驗證結果 | -| 2026-03-27 16:04 | Phase 16 R1→R2 Gate | -| 每週五 16:00 | 週度架構審查 | - -**文檔更新**: -- ✅ `ADR-025-cicd-ai-integration.md` - Phase 13.1 架構決策 -- ✅ `Skill 07 v1.3` - Grafana MCP + SignOz query_logs -- ✅ `project_arch_review_schedule.md` - 審查排程 Memory - -### 🚀 2026-03-26 Phase 18.1 AuditLog 擴展 (Day 9 晚間 19:00) - -**開始實作 P0 任務** - -### ✅ 2026-03-26 Phase 13.1 #74-78 CI/CD Integration (Day 9 下午 17:15) - -**Phase 13.1 CI/CD → OpenClaw 全部完成**: -- ✅ #74-75 GitHub Webhook (既有實作: PR/Push → OpenClaw) -- ✅ #76 CI 失敗 → AI 診斷 (`workflow_run` handler) -- ✅ #77 AI 自動讀 Log (SignOz `query_logs` MCP) -- ✅ #78 AI 自動修復 (`CIAutoRepairService` 風險分級) - -**新增檔案**: -- `services/ci_auto_repair.py`: 風險分級修復服務 (380 行) - -**修改檔案**: -- `github_webhook.py`: v2.0 + workflow_run handler -- `signoz_client.py`: +get_logs, +error_logs_summary -- `signoz_provider.py`: +query_logs, +error_logs_summary MCP - -### ✅ 2026-03-26 Phase 13.3 #88 Token Dashboard (Day 9 下午 16:00) - -**Token Counter Service v1.0 已完整實作**: -- ✅ OTEL Metrics 整合 (SignOz) - - `llm.tokens.input/output` (Counter) - - `llm.cost.usd` (Counter) - - `llm.latency.ms` (Histogram) - - `llm.requests.total/failed` (Counter) -- ✅ Provider 統計 (ProviderStats dataclass) -- ✅ 成本估算 (Ollama=0, Gemini=$0.001/1K, Claude=$0.008/1K) -- ✅ 預算監控 (daily/monthly token + cost budgets) -- ✅ 預警機制 (70% 閾值觸發 fallback 建議) -- ✅ Langfuse 整合 (generation trace) -- ✅ ITokenCounter Protocol (DI 支援) - -**檔案**: `services/token_counter.py` (677 行) - -**Phase 13.3 Smart Routing 全部完成** ✅ - -### ✅ 2026-03-26 Phase 13.3 #87 AI Router (Day 9 下午 15:30) - -**AI Router 升級 v3.0**: -- ✅ 整合 Intent Classifier + Complexity Scorer -- ✅ 路由決策矩陣 (6 條規則優先級) -- ✅ AIProvider Enum (OLLAMA/GEMINI/CLAUDE) -- ✅ RoutingDecision 完整結果 (selected_provider, selected_model, fallback_chain, latency_budget_ms) -- ✅ 延遲預算配置 (Ollama 60s / 雲端 30s) -- ✅ 向後相容 (舊版 model/reason/fallback_models 欄位) -- ✅ 便捷方法 (get_routing_matrix, get_provider_for_intent) - -**路由決策矩陣**: -``` -| 複雜度 + 風險 | Provider | Fallback | -|-----------------|----------|----------| -| 1-2 + LOW | Ollama | Gemini | -| 3 + MEDIUM | Ollama | Gemini | -| 4-5 + HIGH | Gemini | Claude | -| DELETE/CRITICAL | Claude | - | -``` - -**修改檔案**: -- `services/ai_router.py`: v3.0 (~545 行) - -### ✅ 2026-03-26 Phase 13.3 #85 Intent Classifier (Day 9 下午 14:10) - -**Intent Classifier 升級 v2.0**: -- ✅ 四大核心意圖: RESTART, SCALE, CONFIG, DIAGNOSE -- ✅ 輔助意圖: DELETE (CRITICAL), ROLLBACK, UNKNOWN -- ✅ 雙策略分類: 規則引擎 (< 10ms) + LLM 備援 (< 100ms) -- ✅ Protocol 介面支援 DI (IIntentClassifier) -- ✅ 風險等級映射 (LOW/MEDIUM/HIGH/CRITICAL) -- ✅ IntentResult 完整結果 (confidence, matched_keywords, detected_resources) -- ✅ AI Router 整合更新 (支援新 IntentResult) -- ✅ 舊版意圖兼容 (ALERT_TRIAGE → DIAGNOSE 等) - -**新增/修改檔案**: -- `services/intent_classifier.py`: 升級到 v2.0 (~320 行) -- `services/ai_router.py`: 支援 IntentResult + RiskLevel (~250 行) - -**分類準確度目標**: 規則引擎 > 90% (常見 K8s 操作) - -### ✅ 2026-03-26 Batch 1-2 完成 (Day 8 晚上 23:30) - -**Batch 1 (並行):** -- ✅ ADR-023: 智能路由架構 (652 行) -- ✅ Skill 09: Strangler Pattern Expert -- ✅ Phase 12 P1: ModelRegistry 建立 (16 處 hardcode 移除) - -**Batch 2 (並行):** -- ✅ Phase 13.2: Filesystem MCP Tool (#82) - - 安全機制: 目錄白名單、敏感文件黑名單、路徑遍歷防護 - - 功能: read_file, list_directory, search_in_file -- ✅ Phase 11 F1-F4 驗收: - - F1 整合測試: ⚠️ 待改善 (缺 E2E 測試) - - F2 效能審查: ✅ 通過 - - F3 安全審查: ✅ 通過 (CRITICAL 雙重驗證) - - F4 統帥驗收: 📋 待確認 - -### ✅ 2026-03-26 Phase 11.3 + 14.2 並行完成 (Day 8 晚上 22:30) - -**Phase 11.3 響應式佈局 (#54-55)**: -- ✅ #54 Tablet 滑動切換 (768-1024px) -- ✅ #55 Mobile 全螢幕模式 (<768px) -- 新增觸控滑動支援 (handleTouchStart/Move/End) -- 響應式 CSS (lg: 雙欄, md: 切換, sm: overlay) -- i18n 新增: `approval.swipeHint` - -**Phase 14.2 依賴防護 (#93-96)**: -- ✅ #93 dependency-cruiser 已存在 -- ✅ #94 新增規則: stores-no-api-import -- ✅ #95 CI 整合: API Layer Check 步驟 -- ✅ #96 評估: Python import-linter 暫不需要 - -**架構審查 Phase 11-12**: -- Phase 11: 85/100 (P1 Zustand 型別已修復) -- Phase 12: 73/100 (待改善: ModelRegistry) - -**新增文檔**: -- Skill 08: Model Router Expert -- ADR-024: API 分層架構 -- Memory: `project_arch_review_phase11_12.md` - -### ✅ 2026-03-26 Phase 10 架構審查 + P1/P2 修復 (Day 8 晚上 21:30) - -**首席架構師審查 #39-44 Sentry 整合** - -**P1 Issue 修復**: -1. ✅ **P1-1**: `errors/page.tsx` hardcoded subtitle → i18n `{t('subtitle')}` -2. ✅ **P1-2**: `recent-issues-list.tsx` hardcoded time format → `t('timeAgo.minutes/hours/days', { count })` -3. ✅ **P1-3**: `errors.py` hardcoded Sentry config → `core/config.py` Settings -4. ✅ **P2-4**: `error_analyzer_service.py` unused structlog import 移除 - -**P2 架構改善 (統帥批准)**: -5. ✅ **SentryService 抽取**: `_call_sentry_api` 移至 `services/sentry_service.py` -6. ✅ **ADR-022**: Sentry 整合架構文檔 - -**新增檔案**: -- `services/sentry_service.py`: Sentry API 封裝 Service - -**config.py 新增設定**: -```python -SENTRY_SELF_HOSTED_URL: str # http://192.168.0.110:9000 -SENTRY_ORG: str # sentry -SENTRY_PROJECT: str # awoooi-api -SENTRY_AUTH_TOKEN: str # K8s Secret -``` - -**架構評分**: 95/100 (P2 修復後) - -**Memory 更新**: `project_phase10_arch_review.md` -**ADR 新增**: `ADR-022-sentry-integration-architecture.md` - -### ✅ 2026-03-26 #44 /errors 完整頁面 (Day 8 晚上 20:00) - -**新增檔案**: -- `src/app/[locale]/errors/page.tsx`: Errors 頁面 -- `src/hooks/useErrors.ts`: Error 數據 Hook - -**更新檔案**: -- `src/components/layout/sidebar.tsx`: 新增 Errors 導航項目 -- `src/hooks/index.ts`: 導出 useErrors -- `messages/zh-TW.json`: 新增 nav.errors -- `messages/en.json`: 新增 nav.errors - -**頁面功能**: -- 左側: ErrorOverviewCard + ErrorTrendChart -- 右側: RecentIssuesList (含 AI 分析) -- 自動刷新: 60 秒 -- Sentry Dashboard 外連 - -**工作計畫更新**: #44 /errors 頁面標記為 ✅ 已完成 - -### ✅ 2026-03-26 #41-43 Error UI 組件 (Day 8 下午 19:45) - -**新增檔案**: -- `src/components/errors/error-overview-card.tsx`: 錯誤統計卡片 (#41) -- `src/components/errors/recent-issues-list.tsx`: 近期問題列表 + AI 分析 (#42) -- `src/components/errors/error-trend-chart.tsx`: 錯誤趨勢圖表 (#43) -- `src/components/errors/index.ts`: 組件導出 - -**更新檔案**: -- `src/lib/api-client.ts`: 新增 Error API 方法與類型 -- `messages/zh-TW.json`: 新增 errors 翻譯 -- `messages/en.json`: 新增 errors 翻譯 - -**組件功能**: -- ErrorOverviewCard: 統計概覽 (未解決/24h/嚴重/總數) -- RecentIssuesList: 問題列表 + 即時 AI 分析按鈕 -- ErrorTrendChart: Sparkline 趨勢圖 + 週期選擇器 - -**工作計畫更新**: #41-43 Error UI 標記為 ✅ 已完成 - -### ✅ 2026-03-26 #39 Error Analyzer Agent (Day 8 下午 19:15) - -**新增檔案**: -- `src/services/error_analyzer_service.py`: 錯誤分析 Service - -**功能**: -- 接收 Sentry Issue + Stacktrace 數據 -- 使用 OpenClaw LLM 進行根因分析 -- 生成修復建議與預防措施 -- 分類錯誤類型 (CODE_BUG, DEPENDENCY, CONFIGURATION, etc.) - -**更新檔案**: -- `src/api/v1/errors.py`: 整合 ErrorAnalyzerService -- `src/services/openclaw.py`: 新增 `call()` 方法 (ILLMProvider Protocol) - -**工作計畫更新**: #39 Error Analyzer Agent 標記為 ✅ 已完成 - -### ✅ 2026-03-26 #40 Sentry BFF API (Day 8 下午 19:00) - -**新增檔案**: -- `src/api/v1/errors.py`: Sentry BFF API 端點 - -**功能**: -- 列出近期錯誤 (分頁、狀態/嚴重度過濾) -- 取得錯誤詳情 (含堆疊追蹤) -- 取得錯誤趨勢 (24h/7d/30d) -- 觸發 AI 分析 (為 #39 Error Analyzer Agent 準備) - -**API 端點**: -- `GET /api/v1/errors/stats` - 錯誤統計概覽 -- `GET /api/v1/errors/issues` - 列出 Issues -- `GET /api/v1/errors/issues/{issue_id}` - Issue 詳情 -- `GET /api/v1/errors/trends` - 趨勢數據 -- `POST /api/v1/errors/issues/{issue_id}/analyze` - 觸發 AI 分析 - -**工作計畫更新**: #40 BFF API 標記為 ✅ 已完成 - -### ✅ 2026-03-26 #8 自動升級決策 (Day 8 下午 18:00) - -**新增檔案**: -- `src/services/auto_repair_service.py`: AutoRepairService 實作 -- `src/api/v1/auto_repair.py`: API 端點 (evaluate, execute, stats) - -**功能**: -- 評估 Incident 是否可自動修復 -- 高品質 Playbook (成功率 ≥95%, 執行 ≥10次) 可自動執行 -- 安全邊界: 只有 LOW/MEDIUM 風險可自動執行 -- 整合 ActionExecutor (kubectl 指令) - -**API 端點**: -- `GET /api/v1/auto-repair/evaluate/{incident_id}` - 評估 -- `POST /api/v1/auto-repair/execute` - 執行 -- `GET /api/v1/auto-repair/stats` - 統計 - -### ✅ 2026-03-26 #7 Playbook 時區修復 (Day 8 下午 17:00) - -**修復檔案**: -- `playbook_service.py`: `datetime.now(UTC)` → `now_taipei()` -- `playbook_repository.py`: 5 處 `datetime.now(UTC)` → `now_taipei()` -- `playbook.py` (model): 3 處 `datetime.now(UTC)` → `now_taipei()` -- `test_playbook_service.py`: 1 處 `datetime.now(UTC)` → `now_taipei()` - -**工作計畫更新**: #7 Playbook 標記為 ✅ 已完成 - -### 🔍 2026-03-26 首席架構師審查 (Day 8 下午 15:30) - -**審查範圍**: LLM 測試、Phase 17-18、CI Workflows - -**P0 緊急修復** ✅: -- `agent_service.py`: 時區違規 (UTC → 台北) 已修復 - -**P1 完成** ✅: -- `daily-e2e-health.yaml`: Telegram 通知已啟用 -- `ADR-018`: 狀態更新為 Deferred (方案 A 先行) - -**P2 全部完成**: -- ✅ System Prompt 集中管理 → `src/core/prompts.py` + ADR-019 -- ✅ ResourceResolver DI 改造 → `set_resource_resolver()` - -**P3 完成**: -- ✅ Skill 05 更新 (v1.5) → 新增「LLM 測試策略」章節 - -**ADR 更新**: -- ✅ ADR-019: System Prompt 集中管理 (Accepted) -- ⬜ ADR-020 建議: E2E 腳本規範 - -**Memory**: `project_arch_review_20260326.md` - -### ✅ 2026-03-26 LLM 測試完整修復 (Day 8 下午 14:00) - -**方案 A + B 全部實施** (統帥批准): - -| 修改 | 內容 | -|------|------| -| `test_model_regression.py` | `temperature: 0.0`, `seed: 42`, timeout 300s | -| `test_prompt_validation.py` | `temperature: 0.0`, `seed: 42`, timeout 300s | -| `openclaw.py` | v7.0 → v7.1,加入繁體中文強制指令 | - -**CPU 推理評估**: - -| 參數 | 值 | -|------|-----| -| 速度 | 0.45 tok/s | -| 典型回應 | 100-300 tokens | -| 所需時間 | 222-666 秒 | -| 設定超時 | **300 秒** | - -**評估文件**: `docs/evaluations/2026-03-26_llm_testing_evaluation.md` - ---- - -### 🔴 2026-03-26 Ollama 伺服器 GPU 診斷 (Day 8 下午 13:00) - -**SSH 診斷結果 (192.168.0.188)**: - -| 檢查項目 | 結果 | -|---------|------| -| `lspci \| grep nvidia` | **無輸出 - 無 GPU 硬體** | -| NVIDIA Driver | 未安裝 | -| NVIDIA Libs | 未找到 | -| VRAM | 0 GB | - -**結論**: 此伺服器為**純 CPU 機器**,無法加速 LLM 推理 - -**選項**: -1. 遷移到有 GPU 的主機 (192.168.0.110?) -2. 接受 CPU 推理速度 (0.45 tok/s) -3. 使用雲端 LLM 替代 (Gemini/Claude) - ---- - -### ✅ 2026-03-26 Phase 18 E2E Hardening 完成 (Day 8 下午 14:30) - -**Phase 18.1 K8s 資源驗證** ✅ 全部完成: - -| # | 內容 | 檔案 | -|---|------|------| -| 18.1.1 | 正規化函數 | `src/utils/k8s_naming.py` | -| 18.1.2 | 動態驗證器 | `src/services/resource_resolver.py` | -| 18.1.3 | ADR 契約 | `docs/adr/ADR-016-k8s-resource-naming.md` | -| 18.1.4 | Skill 03 更新 | v1.4 | -| 18.1.5 | Memory | `feedback_k8s_resource_naming.md` | -| 18.1.6 | OpenClaw 整合 | `openclaw.py:299-300` ✅ | -| 18.1.7 | Webhook 整合 | `webhooks.py:703-706` ✅ | - -**Phase 18.2 E2E 腳本** ✅ 全部完成: - -| # | 功能 | 實作 | -|---|------|------| -| 18.2.1 | 目標資源斷言 | `verify_action_target()` | -| 18.2.2 | 動態簽署數 | `SIGNER_POOL` + Step 4 | -| 18.2.3 | Safe Label | `safe_mode: true` | -| 18.2.4 | E2E 腳本 v2.0 | `e2e_tool_call_verification.py` | - -**Phase 18.3 Daily Health** 🟢 進行中: -- `daily-e2e-health.yaml`: 每日 08:30 台北執行 -- Telegram 通知: 模板已準備 - -**Memory**: `project_phase18_e2e_hardening.md` - ---- - -### ✅ 2026-03-26 Phase 7.5-7.6 Playbook 整合 (Day 8 深夜 11:45) - -**Phase 7.5: DecisionManager 三軌決策**: -- 新增 Playbook 優先匹配 (similarity >= 85%) -- 三軌決策順序: **Playbook > LLM > Expert System** -- 整合 PlaybookService 推薦引擎 - -**Phase 7.6: 自動萃取機制**: -- approval_execution.py 成功執行後觸發萃取 -- 條件: RESOLVED/CLOSED + effectiveness >= 4 -- 滿分 (5) 自動核准 Playbook - -**測試**: 13 個 Playbook 單元測試全部通過 - -**Commit**: `2e75a20` - ---- - -### ✅ 2026-03-26 #7 Playbook 萃取功能 (Day 8 深夜 10:50) - -**實作內容 (Phase 7.1-7.4)**: - -| Phase | 內容 | 狀態 | -|-------|------|------| -| 7.1 | models/playbook.py | ✅ | -| 7.2 | repositories/playbook_repository.py | ✅ | -| 7.3 | services/playbook_service.py | ✅ | -| 7.4 | api/v1/playbooks.py | ✅ | - -**API 端點**: -- `POST /playbooks/extract/{incident_id}` - 從成功案例萃取 -- `POST /playbooks/recommend` - 症狀匹配推薦 -- `POST /playbooks/{id}/approve` - 人工核准 - -**Commit**: `698687f` - ---- - -### ✅ 2026-03-26 ADR 審計更新 (Day 8 深夜 10:30) - -**更新 ADR**: -- ADR-015: 標記為「已實作」✅ -- ADR-009: 標記 Phase 9 完成 ✅ -- ADR-006: 新增智能路由章節 ✅ - -**新增 ADR**: -- ADR-014: 依賴治理 ✅ -- ADR-016: 智能路由 ✅ -- ADR-017: LLMOps 觀測 ✅ - ---- - -### ✅ 2026-03-26 首席架構師 Phase 13 審查 (Day 8 深夜 10:20) - -**審查範圍**: -- Phase 13.1 GitHub Webhook -- Phase 13.3 智能路由 -- Phase 17 Router 重構 - -**審查結果**: ✅ **通過** -- 28/28 測試全部通過 -- leWOOOgo 合規 (無 Router 層違規) -- ADR 文件完整 - -**修復問題**: -- TelegramGateway.send_message → send_notification -- conftest.py 環境變數隔離 -- Import 排序修復 - ---- - -### ❌ 2026-03-26 Phase 12.4 Cloud Models 取消 (Day 8 晚間 09:55) - -**裁定**: 統帥決定取消 Phase 12.4 -**原因**: 現有 Ollama→Gemini→Claude fallback 已足夠,Cloud Models 需額外帳號/付費 -**結論**: 維持現有架構,不增加複雜性 - ---- - -### ✅ 2026-03-26 Phase 14.2 CI/CD 架構審查完成 (Day 8 下午 16:30) - -**審查範圍**: -- `.github/workflows/ci.yaml` -- `.github/workflows/cd.yaml` -- `.dependency-cruiser.cjs` -- `package.json` (scripts) - -**審查結論**: - -| 項目 | 結果 | -|------|------| -| 架構清晰度 | ✅ CI/CD 分離,職責明確 | -| Fail-Fast | ✅ Pre-flight 1 分鐘驗證 | -| 智能偵測 | ✅ dorny/paths-filter 路徑偵測 | -| 依賴治理 | ✅ dependency-cruiser + ADR 檢查 | -| 監控整合 | ✅ OTEL + Telegram + OpenClaw | -| 快取策略 | ✅ Turborepo + pnpm + Next.js + Docker | -| 冗餘/遺漏 | ✅ 無明顯冗餘,架構完整 | - -**改進建議 (P3 優先)**: -- SAST 掃描 (Semgrep/CodeQL) -- Container 掃描 (Trivy/Snyk) -- E2E 測試整合 (Playwright) - -**Memory**: `reference_cicd_architecture.md` - ---- - -### ✅ 2026-03-26 Runner 殭屍進程徹底修復 (Day 8 上午 09:15) - -**問題**: CI/CD Workflow 反覆失敗 (set_output file missing / Session Conflict) - -**根因**: -1. 權限反噬 - 手動 sudo 清理後目錄擁有權變 root -2. 殭屍進程 - 服務重啟未殺死舊 Runner.Listener - -**修復流程**: -1. 停止服務 → 權限校正 (chown -R wooo:wooo) → 殺死殭屍進程 → 清理工作區 → 重啟服務 - -**驗證**: Workflow [#23572446312](https://github.com/owenhytsai/awoooi/actions/runs/23572446312) 全部成功 - -**Memory**: `feedback_runner_zombie_process.md` - ---- - -### ✅ 2026-03-26 首席架構師 Phase 15 完整審查 (Day 8 凌晨 03:30) - -**審查項目**: - -| 項目 | 結果 | -|------|------| -| 架構分層合規 | ✅ 通過 | -| leWOOOgo 5 問 | ✅ 通過 | -| 依賴注入檢查 | ✅ 通過 | -| 循環依賴檢測 | ✅ 無 | -| 完整測試套件 | ✅ 46/46 通過 | - -**現有技術債 (Phase 17)**: -- `agents.py`: Router 直接存取 Redis -- `metrics.py`: Router 直接存取 DB - -**結論**: ✅ **Phase 15 審查通過,可以上線** - ---- - -### ✅ 2026-03-26 Phase 15.3 Deep Linking (Day 8 凌晨 03:00) - -**實作內容**: - -| 檔案 | 說明 | -|------|------| -| `src/core/deep_linking.py` | URL 生成器 (SignOz/Langfuse/Sentry) | -| `src/main.py` | Sentry before_send 注入 otel_trace_id | -| `src/services/langfuse_client.py` | 自動注入 OTEL trace_id 到 metadata | -| `src/services/openclaw.py` | OTEL span 記錄 langfuse.trace_id | - -**架構圖**: -``` -Sentry ◄─── trace_id ───► SignOz ◄─── trace_id ───► Langfuse -``` - -**測試**: 46/46 核心測試通過 - -**Commit**: b6cff31 - ---- - -### ✅ 2026-03-26 Phase 15.2 Redis Trace Context (Day 8 凌晨 02:30) - -**實作內容**: - -| 檔案 | 變更 | 說明 | -|------|------|------| -| `src/core/telemetry.py` | +118 行 | get_trace_context() + restore_trace_context() | -| `src/api/v1/webhooks.py` | +12 行 | Producer 注入 _trace_id, _span_id | -| `src/workers/signal_worker.py` | 重構 | Consumer 還原 Trace Context | - -**架構流程**: -``` -webhooks.py → XADD {_trace_id, _span_id} → signal_worker.py → restore_trace_context() -``` - -**技術**: W3C Trace Context (traceparent 格式) - -**測試**: 46/46 核心測試通過 - -**Commit**: 0d31ccb - -**首席架構師審查**: ✅ 通過 (只新增功能,不修改現有邏輯) - ---- - -### ✅ 2026-03-26 Phase 15.1 Langfuse 全部完成 (Day 8 凌晨 00:45) - -**完成項目**: - -| 項目 | 狀態 | 說明 | -|------|------|------| -| 部署 | ✅ | 192.168.0.110:3100 | -| 帳號 | ✅ | admin@awoooi.local | -| API Key | ✅ | pk-lf-xxx / sk-lf-xxx | -| K8s Secret | ✅ | awoooi-secrets patched | -| GitHub Secret | ✅ | LANGFUSE_* 已設定 | -| API 整合 | ✅ | langfuse_client.py + openclaw.py | -| 模型升級 | ✅ | llama3.2:3b → qwen2.5:7b-instruct | -| 架構審查 | ✅ | 模組化檢查通過 | -| 測試驗證 | ✅ | 31/31 核心測試通過 | - -**新增檔案**: -- `src/services/langfuse_client.py` (250 行) - Langfuse Client 包裝 -- `feedback_model_selection_strategy.md` - 模型選擇策略 - -**模型配置變更**: -- 預設模型: `qwen2.5:7b-instruct` (7B 參數,品質優先) -- 摘要模型: `llama3.2:3b` (速度優先) - ---- - -### ✅ 2026-03-26 Phase 16 R3 Repository 層整合 (Day 8 深夜 00:30) - -**完成項目**: - -| 模組 | 動作 | 說明 | -|------|------|------| -| incident_repository.py | 新增方法 | `update_outcome()` 支援 feedback 端點 | -| incidents.py | 重構 | feedback 端點改用 Repository (消除直接 DB 存取) | -| incidents.py | 清理 | 移除未使用的 sqlalchemy/db import | - -**驗證結果**: 24/24 測試通過 - -**Repository 層完整性**: -- `IncidentDBRepository`: create, get_by_id, get_active, update, upsert, **update_outcome** ✅ -- Router 層不再直接使用 `get_db_context()` - ---- - -### ✅ 2026-03-25 Phase 16 R2 封存死代碼 (Day 8 晚間 23:15) - -**完成項目**: - -| 模組 | 動作 | 說明 | -|------|------|------| -| routes/approvals.py | 封存 | 477 行 → _archived/ (未註冊死代碼) | -| services/approval.py | 封存 | 389 行 → _archived/ (僅被死代碼使用) | -| models/approval.py | 新增 HIGH | RiskLevel 統一來源 | -| trust_engine.py | 改 import | 從 models/approval.py 導入 RiskLevel | -| services/__init__.py | 移除舊 import | 已封存模組的 import 註解保留 | - -**封存總量**: 866 行死代碼 - -**回滾指令**: 見 `apps/api/src/_archived/README.md` - -**Commit**: e0584bc - ---- - -### ✅ 2026-03-25 Phase 16 R4.2 ApprovalExecutionService 完成 (Day 8 晚間 22:36) - -**完成項目**: - -| 模組 | Commit | 說明 | -|------|--------|------| -| approval_execution.py | 新建 | 從 approvals.py 抽取執行編排邏輯 (271 行) | -| approvals.py | 4b3d98c | 移除內嵌 execute_approved_action (-310 行) | -| ci.yaml / cd.yaml | 修復 | 移除 Runner 自毀指令 (rm -rf _work) | -| .gitignore | 強化 | 防止 .claude/worktrees 干擾 CI/CD | - -**瘦身總成果**: approvals.py 1097 → 787 行 (**-310 行, -28%**) - -**新增模組**: -- `src/services/operation_parser.py` (173 行) - 操作解析 -- `src/services/approval_execution.py` (271 行) - 執行編排 - -**CI/CD 穩定性修復**: -- ❌ 移除 `rm -rf ~/actions-runner-*/_diag/` (防止 Runner 自殺) -- ❌ 移除 `rm -rf _work` 相關指令 -- ✅ worktree 清理改在 checkout 後執行 -- ✅ .gitignore 防止 worktree 被 commit - -**部署成功**: 4b3d98c @ 2026-03-25 22:36 - ---- - -### ✅ 2026-03-25 Phase 16 R4.1 OperationParser 抽取 (Day 8 晚間 21:55) - -**完成項目**: - -| 模組 | Commit | 說明 | -|------|--------|------| -| operation_parser.py | 31cf2dd | 從 approvals.py 抽取 117 行操作解析邏輯 | -| approvals.py | 31cf2dd | 移除內嵌 parse_operation_from_action | - -**瘦身成果**: approvals.py 1097 → 988 行 (-109 行) - -**新增模組**: -- `src/services/operation_parser.py` (173 行) -- `ParsedOperation` dataclass -- 支援中英文指令解析 - -**下一步**: -- 持續抽取 execute_approved_action 等執行邏輯 -- 修復 Runner diag log 衝突問題 - ---- - -### ✅ 2026-03-26 Phase 16 絞殺者模式啟用 (Day 8 晚間 16:04) - -**里程碑**: USE_NEW_ENGINE=true 已在 Production 啟用 - -**部署驗證**: -``` -✅ API: healthy (mock_mode: false) -✅ PostgreSQL: up (42ms) -✅ Redis: up (42ms) -✅ Ollama: up (48ms) -✅ OpenClaw: up (38ms) -✅ SignOz: up (25ms) -``` - -**回滾指令** (如有問題): -```bash -kubectl set env deployment/awoooi-api -n awoooi-prod USE_NEW_ENGINE=false -``` - -**48hr 驗證期**: 2026-03-26 16:04 → 2026-03-27 16:04 - ---- - -### ✅ 2026-03-26 Phase 16 R1.2-R1.3 絞殺者模式完成 (Day 8 晚間 19:30) - -**完成項目**: - -| 模組 | Commit | 說明 | -|------|--------|------| -| incident_memory.py | a202a26, 20984fd | IIncidentDbAdapter DI + 雙軌切換 | -| incident_engine.py | 2637263 | IncidentMemoryAdapter + BlastRadiusAdapter + 雙軌切換 | - -**絞殺者模式架構**: - -``` - USE_NEW_ENGINE=false (預設) - ┌─────────────────────────────┐ -get_incident_*() ──►│ Legacy (內嵌版) │ - └─────────────────────────────┘ - - USE_NEW_ENGINE=true (新版) - ┌─────────────────────────────┐ -get_incident_*() ──►│ lewooogo-brain + Adapters │ - └─────────────────────────────┘ -``` - -**回滾指令**: -```bash -kubectl set env deployment/awoooi-api USE_NEW_ENGINE=false -``` - -**下一步**: 部署後設定 `USE_NEW_ENGINE=true` 開始 48 小時驗證 - ---- - -### 🔴🔴🔴 2026-03-26 Phase 16 架構大掃除批准 (Day 8 下午 17:50) - -**統帥裁示**: 立即執行,非等待 Phase 13.2/15 - -**裁示理由**: -- 累積越多改起來更複雜 -- 後續更新會導致重工 -- 先清債再加功能 - -**Phase 16 定義**: -- **代號**: The Great Refactoring -- **工時**: 6-7 週 -- **核心原則**: 絞殺者模式 (Strangler Fig Pattern) - -**四階段修復**: -| Phase | 說明 | 工時 | -|-------|------|------| -| R1 | 啟用 lewooogo packages | 2-3 週 | -| R2 | 刪除重複邏輯 | 1 週 | -| R3 | 抽取 Repository 層 | 1 週 | -| R4 | 瘦身 Router | 2 週 | - -**關鍵安全措施**: -- Dockerfile 使用實體打包 (禁止 -e 模式) -- 每模組 48 小時驗證期 -- 回滾指令: `kubectl set env USE_NEW_ENGINE=false` - -**Memory**: `project_phase16_great_refactoring.md` - ---- - -### 🔴 2026-03-26 leWOOOgo 積木化全面審計 (Day 8 下午 16:30) - -**首席架構師審計結果**: 發現 32 項違規 - -**問題摘要**: -| 級別 | 數量 | 說明 | -|------|------|------| -| P0 架構崩壞 | 2 | packages/ 完全未使用、Router 直接存取 Redis | -| P1 跨模組耦合 | 18 | services/ 緊耦合、重複實作 | -| P2 薄層違規 | 12 | Router 包含業務邏輯 | - -**嚴重發現**: -- `packages/lewooogo-brain/` (1,853 行) **零引用** -- `packages/lewooogo-data/` (1,113 行) **零引用** -- `apps/api/src/services/` (12,158 行) 重複實作所有邏輯 -- **3 週開發工時浪費** - -**四階段修復計畫** (6-7 週): -- Phase R1: 啟用 lewooogo packages (2-3 週) -- Phase R2: 刪除重複邏輯 (1 週) -- Phase R3: 抽取 Repository 層 (1 週) -- Phase R4: 瘦身 Router (2 週) - -**強制執行機制**: -- Skill 02 新增「修改前必問 5 題」 -- Memory: `feedback_lewooogo_modular_enforcement.md` - ---- - -### ✅ 2026-03-26 Phase 15 LLMOps 觀測批准 (Day 8 下午 15:40) - -**統帥批准**: 零斷鏈觀測整合計畫 - -**架構決策**: -- **三層觀測**: Sentry (前端) + SignOz (後端) + Langfuse (AI) -- **Langfuse 部署**: 192.168.0.110 容器層 (與 Sentry 同主機) -- **啟動時機**: Phase 13.2 完工後 (嚴禁平行) -- **15.5 UI**: 暫緩 (深層連結已足夠) - -**關鍵技術決策**: -- Redis Streams Trace 傳遞使用 OTEL 標準 API (inject/extract) -- 取樣率: Sentry/SignOz 10%, Langfuse 100% (AI 決策必錄) -- 深層連結穿透: URL Tags 相互注入,免開三畫面 - -**Memory**: `project_phase15_llmops_observability.md` - ---- - -### ✅ 2026-03-26 部署層級決策鐵律確立 (Day 8 下午 15:30) - -**統帥指令**: 所有服務的部署位置必須經過專業評估 - -**三層部署選項**: -- **主機層**: 核心基礎設施 (Harbor, Runner, PostgreSQL) -- **容器層**: 獨立工具 (Sentry, Langfuse) -- **K3s 層**: 生產應用 (AWOOOI API/Web/Worker) - -**必須評估**: -1. 服務類型 (無狀態/有狀態) -2. 持久化需求 -3. 備份/回滾機制 - -**Memory**: `feedback_deployment_layer_decision.md` - ---- - -### ✅ 2026-03-26 紅區治理機制確立 (Day 8 中午 12:50) - -**統帥批准**: 代碼防區化治理 (Codebase Zoning) - -**已實作**: -- `scripts/hooks/pre-commit` - Git Hook 紅區警告 (警告模式) -- `docs/RED_ZONES.md` - 紅區治理手冊 -- `CLAUDE.md` 紅區章節 - AI 開發憲法更新 -- `feedback_red_zone_governance.md` - Memory 記錄 - -**紅區清單**: -- Tier 3 (核心大腦): 8 個檔案 -- Tier 2 (基礎設施): 15+ 個檔案 - -**定期審查**: 每月第一個週一 - ---- - -### ✅ 2026-03-25 變更註解標準確立 (Day 7 深夜 23:55) - -**統帥指令**: 專案所有變更必須包含追蹤資訊 - -**必要欄位**: -- **WHO** - 執行者 (人/AI) -- **WHAT** - 變更內容 -- **WHEN** - 台北時區 (+8) -- **VERSION** - 版本號 - -**Memory**: `feedback_change_annotation_standard.md` - ---- - -### ✅ 2026-03-25 ClawBot → OpenClaw 全域更名完成 (Day 7 深夜) - -**更新檔案**: -- `docker-compose.yml` - CLAWBOT_URL → OPENCLAW_URL (port 8089→8088) -- `docs/infrastructure/DEPLOYMENT_TOPOLOGY.md` - Docker 服務名稱 + health check -- `docs/security/SECRETS_REFERENCE.md` - 環境變數 -- `docs/adr/ADR-005-bff-architecture.md` - clawbot_client → openclaw_client -- `.agents/skills/04-awoooi-devops-commander.md` - clawbot-redis → openclaw-redis -- 新增 **Skill 07: Tool Integration Expert** (MCP Tool 整合專家) - -**保留歷史紀錄**: LOGBOOK.md, meetings/*, MONITORING_INVENTORY (來源路徑) - ---- - -### ✅ 2026-03-25 Phase 13 Enterprise AIOps 規劃 (Day 7 晚間) - -**統帥架構盤點會議** - 對照業界主流 AI Agent 運用方式 -- CI/CD 結合: 符合度 60% (告警 ✅ / Git 觸發 ❌) -- Tool 封裝: 符合度 40% (MCP 骨架 ✅ / 實際連接 ❌) -- 智能路由: 符合度 50% (Fallback ✅ / 意圖判別 ❌) - -**新增 Phase 13 工作項目** (#74-88): -- 13.1 CI/CD 整合: GitHub Webhook + AI 診斷 + 自動修復 (風險分級) -- 13.2 Tool 實作 (P0): SignOz + K8s + PostgreSQL + RAG MCP -- 13.3 智能路由: Intent Classifier + Complexity Scorer + AI Router - -**新增 Memory**: -- feedback_tool_vs_modular.md - Tool 封裝 vs 模組化關係 -- project_phase13_enterprise_aiops.md - Phase 13 完整規劃 - -### ✅ 2026-03-25 Phase 12.1-12.2 完成 (Day 7 下午) - -**Phase 12.1 Tool Calling 優化** ✅ (commit afda312, c437b0c) -- 建立 24 個測試案例 (英/中/混合/邊界) -- 準確率 80% → 100% -- 新增 3 個解析模式: 中文刪除、混合重啟、明確 restart deployment - -**Phase 12.2 本地模型優化** ✅ -- 硬體盤點: 192.168.0.188 (62GB RAM, 無 GPU) -- 部署 qwen2.5:7b-instruct (4.7GB) -- Benchmark: qwen2.5 29s vs llama3.2 69s -- ModelRouter 動態路由設計完成 - -**Memory 新增**: -- `project_ollama_model_inventory.md` - 模型盤點 -- `project_model_router_design.md` - 動態路由架構 - -**Skills 更新**: -- `03-openclaw-cognitive-expert.md` - 模型選擇規則 - ---- - -### ✅ 2026-03-25 Phase 11 進度 (Day 7) - -**Phase 11.1 對話式容器** ✅ -- ConversationalView 主容器 (左/右雙欄) -- ApprovalThreadItem 列表項目 (風險等級 + 相對時間) -- SSE 即時更新整合 (useApprovalSSE) - -**Phase 11.2 批次處理** ✅ -- BatchModeSelector 組件 (全部接受/逐一審核/CRITICAL Only) -- POST /api/v1/approvals/bulk-approve API -- CRITICAL + DESTRUCTIVE 安全過濾 - -**Phase 11.4 鍵盤快捷鍵** ✅ -- useKeyboardShortcuts hook (Y/N/方向鍵/Esc) -- Y 鍵長按 2 秒核准 + 頂部進度條 -- 快捷鍵說明 Modal (Y/N 高亮) - -**Phase 11.3 響應式** ⏳ (P2 待辦) -- Desktop 雙欄已完成 -- Tablet/Mobile 待實作 - -### 🔴 2026-03-25 01:20 簽核內容保留修復 - -**問題**: Telegram 簽核後只顯示「✅ 動作 xxx 已批准」,原始告警內容被覆蓋 - -**根因**: OpenClaw `_handle_approval_callback()` 使用 `edit_message_text()` 完全覆蓋原始訊息 - -**修復** (commit 1859893): -- 取得 `query.message.text` 原始內容 -- 組合: 原始內容 + 分隔線 + 簽核鋼印 -- 更新 `feedback_approval_preserve_content.md` - -### 🔴 2026-03-25 Alertmanager 災難修復 - -**問題**: Claude 錯誤將 Alertmanager 指向 OpenClaw (8088),導致 Telegram 發送舊 AIOPS 格式 - -**修復**: -- Alertmanager 改指向 `http://192.168.0.120:32334/api/v1/webhooks/alertmanager` -- 刪除錯誤 Memory `feedback_alertmanager_openclaw_flow.md` -- 新增正確 Memory `feedback_alertmanager_awoooi_flow.md` -- 更新 DevOps Skill 04 -- 停用 runner-healthcheck.yml 中 ubuntu-latest jobs (GitHub Billing) - -### 🧠 認知覺醒計畫 Phase 6 施工順序 (C-Suite 2026-03-23 統帥方案) - -| 步驟 | 項目 | 部署位置 | 工時 | 狀態 | -|------|------|---------|------|------| -| 6.0 | Incident Schema v0.3 | 程式碼 | 0.5d | ✅ 完成 | -| 6.1 | Event Bus (Redis Streams) | .188 Redis | 2d | ✅ 完成 | -| 6.2.1 | Working Memory (Redis Hash) | .188 Redis | 1d | ✅ 完成 | -| 6.2.2 | Episodic Memory (PostgreSQL) | .188 PostgreSQL | 1d | ✅ 完成 | -| 6.3 | Incident Engine v1 | .188 API | 3d | ✅ 完成 | -| **6.4a** | **lewooogo-brain 骨架** | `packages/` | 1h | ✅ 完成 | -| **6.4b** | **lewooogo-data 骨架** | `packages/` | 1h | ✅ 完成 | -| **6.4c** | **Interface 定義 (ABC)** | `packages/` | 2h | ✅ 完成 | -| **6.4d** | **MemoryProvider 實作** | `packages/` | 4h | 🔲 待辦 | -| **6.4e** | **Engine 搬遷** | `packages/` | 4h | ✅ 完成 | -| **6.4f** | **SkillLoader** | `packages/` | 2h | ✅ 完成 | -| **6.4g** | **API 突觸對接 `/propose`** | `apps/api` | 2h | ✅ 完成 | -| **6.4h** | **真實 ProposalEngine DI** | .188 API | 4h | 🔲 **下一步** | -| 6.5 | Runner 整合 + 5+1 狀態機 | .188 API | 4h | 🔲 待辦 | -| 6.6 | Sensor Agent (各主機) | .110/.112/.120 | 2d | 🔲 待辦 | - ---- - -## 📋 最近里程碑 - -| 時間 | 事件 | 負責人 | -|------|------|--------| -| 2026-03-25 15:30 | **🤖 Phase 12 Ollama 整合計畫批准**: Tool Calling + Kimi-K2.5 + CI/CD + Cloud Models (#60-73) | 統帥 | -| 2026-03-25 15:20 | **✅ OpenClaw Sentry 整合提交 (4edb862)**: sentry_integration.py 已推送 gitea + GitHub | Claude Code | -| 2026-03-25 15:00 | **🚀 Phase 11 b13b063 推送**: 對話式 AI UI/UX 全部完成,CI/CD 排隊中 | Claude Code | -| 2026-03-25 14:00 | **🎨 Phase 11.1-11.4 完成**: ConversationalView + BatchModeSelector + useKeyboardShortcuts (Y/N 長按支援) | Claude Code | -| 2026-03-25 11:00 | **✅ #15 SSE 改造完成 (170102a)**: Approval Polling → SSE 即時更新,新增 /api/v1/approvals/stream + useApprovalSSE hook | Claude Code | -| 2026-03-25 10:00 | **🎨 Phase 11 對話式 AI 批准**: ChatGPT 風格 + 批次處理 + 鍵盤快捷鍵 (Y/N/方向鍵) + 響應式佈局 (#47-59) | 統帥 | -| 2026-03-25 09:45 | **🕐 台北時區統一 (749b8bc)**: 11 個後端檔案改用 +8 時區 + 新增 timezone.py 工具 | Claude Code | -| 2026-03-25 01:10 | **✅ CD 23501633819 部署完成**: API/Web/Worker 全部更新,Alertmanager webhook 路徑修復生效 | Claude Code | -| 2026-03-25 01:05 | **🔧 NetworkPolicy DNS 修復**: CoreDNS podSelector 修正,Telegram 發送恢復 | Claude Code | -| 2026-03-25 01:00 | **📝 feedback_approval_preserve_content.md**: 簽核後保留原始內容鐵律 | Claude Code | -| 2026-03-25 00:55 | **🔧 CI ubuntu-latest Jobs 停用 (ad00eda)**: external-sentinel + telegram-connectivity | Claude Code | -| 2026-03-25 00:50 | **🔴🔴 Alertmanager 路由修復**: Alertmanager 改指向 AWOOOI API (K3s 32334),修復舊 AIOPS 格式災難 + Memory/Skill 更新 | Claude Code | -| 2026-03-25 00:20 | **🔧 sync-from-approvals 端點 (5d03a82)**: 為舊 Approvals 補建 Incidents,修復活躍事件顯示 0 問題 | Claude Code | -| 2026-03-25 00:10 | **🔧 Sentry Tunnel Nginx 修復 (41bd213)**: 將 /api/sentry-tunnel 路由到前端 (不是後端 FastAPI) | Claude Code | -| 2026-03-25 00:05 | **✅ CD 23498719881 部署成功**: Incident-Approval 同步 + ApprovalCard UX 修復生效 | Claude Code | -| 2026-03-24 23:50 | **🎨 ApprovalCard UX 優化 (3837827)**: 標題與 kubectl 命令分離 + AI 標籤清理 | Claude Code | -| 2026-03-24 23:45 | **🔧 Incident-Approval 同步 (b645981)**: Alertmanager webhook 同時創建 Incident + Approval (活躍事件修復) | Claude Code | -| 2026-03-24 23:40 | **📱 CD 通知格式改善 (2bb7643)**: 友善部署通知 (版本/時間/作者/SHA) | Claude Code | -| 2026-03-24 23:35 | **⚡ CI 優化 (77c6bf3)**: Docker Verify 只在 PR 執行 (20-30min → ~3min) | Claude Code | -| 2026-03-24 23:30 | **🔧 NetworkPolicy DNS/HTTPS 修復**: K8s Pod Telegram 連線修復 (kubectl patch) | Claude Code | -| 2026-03-24 23:25 | **🔑 Telegram K8s Secret 配置**: OPENCLAW_TG_BOT_TOKEN + CHAT_ID + WHITELIST 注入 | Claude Code | -| 2026-03-24 17:55 | **🔧 NetworkPolicy Sentry Egress (d08290b)**: 新增 192.168.0.110:9000 (Sentry) + :5000 (Harbor) 出口白名單 (#38) | Claude Code | -| 2026-03-24 17:50 | **📦 Workflow 整合 (490cd54)**: 停用 deploy-prod.yml.disabled,僅保留 cd.yaml v2.0 (避免重複部署/selector 衝突) | Claude Code | -| 2026-03-24 17:30 | **🌐 i18n 語言策略**: UI 繁中 + 技術英文,建立 feedback_i18n_language_strategy.md + 更新 Skill 01 | Claude Code | -| 2026-03-24 17:20 | **🔧 i18n 翻譯修復**: 補齊 agent/metrics/incident 命名空間 (zh-TW.json + en.json) | Claude Code | -| 2026-03-24 16:45 | **🔧 Health Check 修復 (ab240c6)**: kubectl exec 加入 -c api 容器名稱 + 增加 sleep 15s | Claude Code | -| 2026-03-24 16:25 | **✅ Sentry Tunnel 完成 (b20987e)**: /api/sentry-tunnel API Route + sentry.client.config.ts 使用 tunnel + 重新啟用 NEXT_PUBLIC_SENTRY_DSN | Claude Code | -| 2026-03-24 16:10 | **📊 OTEL CI/CD 監控 (cd7d63e)**: CI/CD workflows 加入 OTEL exporter → SignOz (192.168.0.121:4318) | Claude Code | -| 2026-03-24 16:05 | **🔧 API import 修復 (75c991d)**: 修正 ruff I001 lint 錯誤 (import 排序) | Claude Code | -| 2026-03-24 16:00 | **🔴 Sentry 區域網路權限修復 (bf702ff)**: 暫時停用 NEXT_PUBLIC_SENTRY_DSN (內網 IP 觸發瀏覽器授權) | Claude Code | -| 2026-03-24 15:50 | **📋 Sentry 完整整合計畫**: 三層架構 (SDK → Sentry Server → AI 分析 → BFF → 自建 UI) 批准 | 統帥 | -| 2026-03-24 14:50 | **🧪 QA 測試執行**: 13 通過 / 9 失敗 (59%) - Multi-Sig ✅ 核心安全通過,UI 測試需更新 | 資深顧問 | -| 2026-03-24 14:45 | **🔴 根因發現**: NEXT_PUBLIC_API_URL 未 build-arg 注入,前端用 localhost:8000 | 資深顧問 | -| 2026-03-24 14:40 | **🔧 CD 修復 (7a76f3e)**: 新增 `--build-arg NEXT_PUBLIC_API_URL=https://awoooi.wooo.work` | Claude Code | -| 2026-03-24 14:35 | **🔧 Health Check 修復 (774290d)**: 改用 kubectl exec 內部驗證 (避免 runner DNS 問題) | Claude Code | -| 2026-03-24 14:30 | **⚡ CD 優化 (515339f)**: 沿用 wooo-aiops 模式 - 變更偵測 + 選擇性構建 (skip_api/skip_web) + 原生 BuildKit + 本地 Next.js 快取 | Claude Code | -| 2026-03-24 14:25 | **✅ #6 回饋 API Commit (ad05bbf)**: PUT /api/v1/incidents/{id}/feedback + async_utils (fire_and_forget) | Claude Code | -| 2026-03-24 14:20 | **🐳 CD 構建成功**: API (580c38d-23475622328) + Web (580c38d-23475622328) → Deploy 進行中 | Claude Code | -| 2026-03-24 14:10 | **📋 QA Report 整合**: `AWOOOI_Full_QA_Report.md` 分析 + Phase 8.0 項目 (#13-#20) 納入 workplan + P0/P1 狀態對照 | Claude Code | -| 2026-03-24 14:05 | **🔧 Kustomize 修復 (580c38d)**: 映像替換 OLD_IMAGE 必須完全匹配 (含 `:IMAGE_TAG_PLACEHOLDER`) | Claude Code | -| 2026-03-24 14:00 | **✅ #6 人類回饋 API**: `PUT /api/v1/incidents/{id}/feedback` + effectiveness_score + human_feedback + learning_notes + Redis/PostgreSQL 同步 | Claude Code | -| 2026-03-24 13:55 | **✅ #5 統計分析 API 確認**: 已完整實現且註冊於 main.py:300-301 | Claude Code | -| 2026-03-24 13:00 | **🔄 ClawBot → OpenClaw 全域更名**: 刪除 clawbot.py + 更新 12 個 Python 檔案 + 類型定義/Discord username 更名 | 資深顧問 | -| 2026-03-24 12:40 | **🔧 CD 修復**: turbo.json 快取邊界 + CD workflow (kustomize/namespace/kubectl) + Alertmanager 指向 AWOOOI + 部署驗證鐵律 (HARD_RULES + Skills) | 資深顧問 | -| 2026-03-24 10:30 | **🔴🔴 禁止 Mock 測試鐵律**: 統帥明確指示「全面禁止!!!」Mock 測試 + 移除 `test_stats_api.py` 與 `test_webhook_telegram_integration.py` + 新增 `feedback_no_mock_testing.md` | Claude Code | -| 2026-03-24 10:15 | **📊 Statistics API 完成**: 6 端點 (summary/timeline/trends/top-resources/feedback/themes) + PostgreSQL date_trunc 優化 + Redis 快取 (5分鐘 TTL) + 12 領域主題萃取 | Claude Code | -| 2026-03-24 10:00 | **🔧 Y/n 決策重置修復**: DecisionManager 活躍事件自動建立新 Decision (原本返回舊 COMPLETED 導致按鈕永久禁用) | Claude Code | -| 2026-03-23 21:20 | **🔧 Y/n 按鈕雙重修復**: (1) mapToDualState 遺漏 decision prop (2) `result.status` → `result.approval.status` API 回應結構錯誤 + 新增 feedback_api_response_verification.md 鐵律 | Claude Code | -| 2026-03-23 19:55 | **📝 CLAUDE.md 完整重構**: 整合 31 個 feedback 規則 + 六大章節鐵律 + 危險操作分級 + Session 協議 | 資深顧問 | -| 2026-03-23 19:51 | **🔧 OpenClaw Ollama 修復**: host.docker.internal → 172.17.0.1 + 容器重啟成功 | 資深顧問 | -| 2026-03-23 19:45 | **🛑 舊 AIOPS 清理**: 停止 192.168.0.188 + 192.168.0.110 Alertmanager | 資深顧問 | -| 2026-03-23 19:39 | **✅ Telegram Token #3 成功**: OpenClaw 啟動正常,AWOOOI API 完全停用 Telegram | 統帥 | -| 2026-03-23 19:31 | **🔴 Telegram Token #2 失效**: 舊 Pod 呼叫 logOut,Token 再次失效 | 災難 | -| 2026-03-23 19:35 | **📜 ADR-012 危險操作治理**: 三層架構 (預防+執行+審計) + Tier 0-3 分級 | 資深顧問 | -| 2026-03-23 11:09 | **🔴 Telegram Token #1 失效**: AWOOOI API 呼叫 logOut,Token 永久失效 | 災難 | -| 2026-03-23 14:35 | **🎨 Phase 6.5c UX 改善**: 錯誤訊息明顯顯示 (非 hover) + 30 秒超時警告 + 重試按鈕 + 取消自動恢復 (讓用戶看到錯誤) | Claude Code | -| 2026-03-23 14:20 | **🔧 Y 按鈕執行修復**: 中文 Action 解析擴充 (擴展/重新啟動) + StatefulSet Pod 自動識別 (`xxx-0` → DELETE_POD) + `-deployment` 後綴自動移除 | Claude Code | -| 2026-03-23 14:15 | **📝 Memory 同步**: feedback_modular_core_spirit.md (模組化核心精神鐵律) + MEMORY.md 索引更新 | Claude Code | -| 2026-03-23 13:08 | **⚡ Phase 6.5c+ 交互神經強化完成**: Approval 按鈕物理回饋 (active縮放/防呆) + API 鏈路確認 (`/api/v1/approvals/{id}/sign`) + 樂觀更新 (Optimistic UI) 立即 Loading | 首席架構師 | -| 2026-03-23 11:50 | **🧠 Phase 6.4g API 突觸對接完成**: `/propose` 路由建立 + Guardrails 8/8 測試通過 + lewooogo-brain 積木綁定 | Claude Code | -| 2026-03-23 11:55 | **🎨 Phase 6.5a 視覺皮層啟動**: DualStateIncidentCard.tsx 雙態戰情室卡片 + Nothing.tech 視覺憲法 | Claude Code | -| 2026-03-23 09:30 | **🔧 NetworkPolicy 修復**: `allow-required-egress` podSelector 改為 `system=awoooi` (原本只允許 API pod) | Claude Code | -| 2026-03-23 09:20 | **🚨 生產修復 #2**: Worker CrashLoopBackOff 92次 + `init_redis` → `init_redis_pool` 函數名修正 + 7h 無告警根因 | Claude Code | -| 2026-03-23 09:15 | **🚨 生產修復 #1**: 簽核卡片閃爍消失 + Polling Race Condition + approval.store.ts 暫停/恢復機制 | Claude Code | -| 2026-03-23 09:10 | **📚 Skills 更新**: 05-awoooi-sre-qa.md + 新增 CrashLoopBackOff 診斷 + Race Condition 偵測 + Telegram 健康檢查 | Claude Code | -| 2026-03-23 10:30 | **🧱 C-Suite 模組化架構評審**: 統帥質疑積木化原則淡化 + 後端缺 lewooogo-brain/data 積木 + 方案 B 漸進式拆分 (Interface→Memory→Brain→Skill) + 2.5d 工時評估 + 施工順序重排 | C-Suite + Claude Code | -| 2026-03-23 01:10 | **🚀 Signal Worker 啟用**: `replicas: 0→1` + Redis Streams Consumer 正式上線 + Incident Engine 處理鏈完整 | CTO + Claude Code | -| 2026-03-23 01:05 | **🎯 實彈告警發射成功**: 4 發告警注入 Redis Streams (HarborOOMKilled/HighCPU/DBTimeout/RedisMemory) + message_id 確認 | CTO + Claude Code | -| 2026-03-23 00:55 | **📊 GlobalPulse 脈搏恢復**: SignOz v3 表修正 + RPS 5.4/Error 25%/P99 3s 真實數據顯示 | CTO + Claude Code | -| 2026-03-23 00:45 | **📱 Telegram 通知 UX 升級**: HTML 結構化格式 + Inline Keyboard (查看紀錄/開啟正式站) + 拔除冗長 URL | CTO + Claude Code | -| 2026-03-23 00:25 | **🤖 Claude Skills 兵營建置**: 6 大專屬 Skill 模組 (`01-frontend` ~ `06-monorepo`) + Skill Router 寫入主憲法 + Auto-Pilot 驗收機制 | CTO + Claude Code | -| 2026-03-23 00:10 | **🔧 OTEL 神經修復**: Port 4317→24317 修正 (SigNoz Host Port) + NetworkPolicy Egress 開通 + ConfigMap 更新 + Traces 正常匯出 | CTO + Claude Code | -| 2026-03-22 23:55 | **🔧 Phase 8 NodePort 修復**: NetworkPolicy `allow-nginx-ingress` 新增 K3s Node IP (120/121) + Pod CIDR (10.42.0.0/16) + 502 Bad Gateway 根治 | CTO + Claude Code | -| 2026-03-22 23:52 | **🧠 Phase 6.3 聚合引擎竣工**: `IncidentEngine` 告警聚合核心 + 30 分鐘時間窗口 + GraphRAG 整合 + Severity 自動升級 (P2→P0) + 3 筆告警成功聚合為 1 個 Incident (`INC-20260322-73EDFA`) + Redis + SQLite 雙層同步 | CTO + Claude Code | -| 2026-03-22 20:45 | **🧠 Phase 6.2 海馬迴竣工**: `IncidentRecord` SQLAlchemy Model + `IncidentService` 雙層寫入 + `INC-20260322-D5C168` 成功固化 Redis (TTL 7d) + SQLite + 動態驗證通過 | CTO + Claude Code | -| 2026-03-22 19:30 | **✅ Phase 6.1 動態驗證通過**: `message_id=1774164545219-0` 成功穿越 Redis Streams + Producer 200 OK (54ms) + Consumer ACK (pending=0) + 神經網路正式通電 | CTO + Claude Code | -| 2026-03-22 19:00 | **🚀 Phase 6.1 Event Bus 竣工**: Redis Streams 信號匯流排 + `/api/v1/webhooks/signals` Producer (XADD) + `SignalWorker` Consumer (XREADGROUP) + Lifespan 整合 + 告警風暴防護 (MAXLEN 10000) | CTO + Claude Code | -| 2026-03-22 18:00 | **🧠 Phase 6.0 Incident Schema v0.3 竣工**: 認知覺醒計畫基石確立 + 三層記憶架構 (Working/Episodic/Semantic) + AIDecisionChain 可稽核性 + IncidentOutcome 回饋循環 + 防腦分裂鐵律寫入契約 | C-Suite + Claude Code | -| 2026-03-22 16:00 | **🎯 C-Suite 戰略會議 (四輪)**: ChatGPT 架構分析回應 + AWOOOI 定位為 AI Ops OS + .188 為唯一大腦中心 + MCP 採用但不依賴 + 物理-邏輯架構對齊 | CEO + C-Suite | -| 2026-03-22 14:00 | **🔴 Phase 6.1.1 Redis Multi-Sig**: redis_client.py 連線池 + multi_sig_redis.py 狀態持久化 + RedisLock 分散式鎖 + 7/7 自動化測試通過 | CTO + Claude Code | -| 2026-03-22 13:30 | **🔴 Telegram Long Polling 重構**: Webhook → getUpdates 長輪詢 + deleteWebhook 清理 + _polling_loop 背景任務 + lifespan 整合 | CTO + Claude Code | -| 2026-03-22 13:00 | **📊 架構 Code Review → Phase 6 規劃**: Redis Multi-Sig + Neo4j GraphRAG + 水平擴展 Roadmap 已同步至 memory/project_phases.md | CTO + Claude Code | -| 2026-03-22 01:30 | **🔴 GlobalPulse 假數據切除**: /api/v1/metrics/gold 真實血脈 API + useGlobalPulseMetrics Hook + 誠實渲染原則 (無數據顯示 "--") | CTO + Claude Code | -| 2026-03-22 01:00 | **📊 ApprovalCard 微交互**: 800ms 處理延遲 + 滑出動畫 + 歷史紀錄標籤 (Pending/History) + 唯讀模式 finalStatus Badge | CTO + Claude Code | -| 2026-03-22 00:50 | **🔧 K8s Executor Parsing 修復**: deployment[/:\s]+ 正則修正 + 6/6 單元測試通過 | CTO + Claude Code | -| 2026-03-22 00:30 | **⚡ Smart Polling 實作**: 簽核後每秒輪詢直到 EXEC 事件 + Toast 通知 + Timeline 閃爍動畫 | CTO + Claude Code | -| 2026-03-22 00:00 | **🔧 SSR Hydration Bug 修復**: apiBaseUrl 空值修正 + 自動化 QA 腳本 verify-sse.js + L1 條款 14-16 禁止人工 QA | CTO + Claude Code | -| 2026-03-21 23:00 | **📜 真實性條款入憲**: L1 條款 11-13 禁止 Mock + ClawBotStateMachine 改真實 API 輪詢 + 強制雙端驗證 | CTO + Claude Code | -| 2026-03-21 22:00 | **🔧 容器全修復**: pyproject.toml 補 OTEL 依賴 + healthcheck 改 node + L1 條款 6 授權分級協定 | CTO + Claude Code | -| 2026-03-21 20:00 | **🚀 Phase 2 啟動**: fire_test_alert.py 導彈腳本 + 5 種告警場景 + 全鏈路測試準備就緒 | CTO + Claude Code | -| 2026-03-21 19:00 | **🎉 Phase 1 視覺貫通竣工**: ThinkingStream 打字機動畫 + ClawBotStateMachine 三態狀態機 + L1 契約交付前驗證條款 | CTO + Claude Code | -| 2026-03-21 18:00 | **AICommandPanel 戰情室整合**: ClawBot + ApprovalCard 合併面板 + 右側 30% 區塊掛載 + SSE 404 診斷 (後端正常) | CTO + Claude Code | -| 2026-03-21 17:30 | **HITL ApprovalCard 審查通過**: LongPressButton + BlastRadius Grid + Multi-Sig Counter + 告警聚合 Badge + Nothing.tech 規範符合 | CTO + Claude Code | -| 2026-03-21 17:00 | **SSE 即時整合**: useSSE Hook + Zustand Store + LiveDashboard + 自動重連機制 + 記憶體洩漏防禦 | CTO + Claude Code | -| 2026-03-21 16:30 | **Phase 1 啟動**: 全局戰情室 Nothing.tech 骨架 + DataPincerCard 視覺容器 + 70/30 Grid 佈局 | CTO + Claude Code | -| 2026-03-21 16:00 | **🎉 Phase 0 基礎設施竣工**: 全部 P0 待辦完成,進入 Phase 1 準備階段 | CTO + Claude Code | -| 2026-03-21 15:30 | **P0 可觀測性完成**: FastAPI OTEL 整合 + SigNoz 追蹤 (192.168.0.188:4317) + 優雅降級機制 | CTO + Claude Code | -| 2026-03-21 15:00 | **CPO-003 i18n 雙語完成**: next-intl + zh-TW/en 字典 + middleware 語言攔截 + 防禦性審查寫入 L1 | CTO + Claude Code | -| 2026-03-21 14:30 | **戰略全局對齊**: 確立純白視覺絕對標準 + 廢除 Cyber Palette + OTEL/i18n 納入 P0 鐵律 | CTO + Claude Code | -| 2026-03-21 14:00 | **CIO-002 Nginx 路由完成**: awoooi.wooo.work 反向代理 + SSE 長連線支援 (proxy_buffering off) | CIO + Claude Code | -| 2026-03-21 13:25 | **Phase 0 K3s 基礎設施部署**: Namespace + NetworkPolicy + RBAC 正式上線 (192.168.0.120) | CIO + Claude Code | -| 2026-03-21 13:10 | **Phase 7 容器化完成**: Docker 多階段建置 + docker-compose 聯合測試 + SSE 404 修復 | CTO + Claude Code | -| 2026-03-21 01:15 | **Phase 6 輸出閘道加固**: Notification fire-and-forget + HttpUrl Fail-Fast + Timeline OOM 防護 | CTO + Claude Code | -| 2026-03-20 18:00 | **Phase 0 正式啟動**: 會議總結 + 實施步驟 + 9 筆 Memory 記錄 + K8s YAML 完成 | CEO + C-Level | -| 2026-03-20 17:00 | **部署拓撲定義**: 明確定義 Host/Docker/K3s 服務位置 + 網路流量走向圖 | CIO | -| 2026-03-20 16:00 | **Phase VI CEO 施工規範**: 9 大指示 + 顧問 4 大深度討論,產出 7 份關鍵文檔 | CEO + C-Level | -| 2026-03-20 15:00 | **Phase 0 文檔完成**: API SOP + 原子組件庫規格 + RBAC Schema 三份核心文檔 | CTO + CPO + CISO | -| 2026-03-20 14:00 | **Phase IV CEO 13大指示**: 痛點盤點 + 彈性設計 + 權限簡化 + 文檔清單 + 進度追蹤 | CEO + 全員 | -| 2026-03-20 14:00 | **架構地雷排查**: 冪等性/Plugin沙盒/向量切塊策略完整定義 | CTO | -| 2026-03-20 12:00 | **Phase III 深度定義**: C-Level 功能評估 (63→45頁重組) + WBS 分工 + 文檔系統 | 全員 | -| 2026-03-20 12:00 | **技術深潛**: BFF 閘道架構 + 原子組件庫規格 + 遷移腳本映射 | CTO + CPO | -| 2026-03-20 12:00 | **P0 功能共識**: 戰情室 + AI Copilot + HITL + Multi-Sig + Command Palette | C-Level | -| 2026-03-20 10:00 | **Operation Phoenix Rising**: CEO 宣布 100% 獨立重構,63+ 頁面全面重寫,Nothing.tech 純白風格 | CEO + C-Level | -| 2026-03-20 10:00 | **六大裁定**: 分階段重構、24週時程、1-3月過渡期、Scalar API文檔、團隊擴編至14人 | CEO | -| 2026-03-20 10:00 | **四主機隔離架構**: NetworkPolicy + Port 分離 + Nginx 路由分流完整定義 | CIO | -| 2026-03-20 10:00 | **共用資源衝突矩陣**: Ollama Queue + PgBouncer + Redis DB Index 隔離方案 | CTO + CIO | -| 2026-03-19 26:00 | **Phase 1.2**: Ollama 真實串接 (192.168.0.188:11434) + Tailwind 顏色修正 (`bg-status-*`) | CTO + Claude Code | -| 2026-03-19 25:30 | **Phase 1.1**: Zustand 封裝 SSE + DataPincer + ThinkingTerminal | CTO + Claude Code | -| 2026-03-19 25:00 | **Tracer Bullet**: SSE 串流前後端貫通 (/agent/thinking) | CTO + Claude Code | -| 2026-03-19 24:45 | **Phase 1 骨架**: Monorepo + lewooogo-core + apps/web + apps/api | CTO + Claude Code | -| 2026-03-19 24:15 | **CI/CD 強化**: ADR 糾察隊 + Turborepo 快取 + Harbor 整合 | CTO + Claude Code | -| 2026-03-19 24:00 | **ADR-004/005**: Zustand 狀態管理 + BFF 閘道架構 | CTO + Claude Code | -| 2026-03-19 23:45 | **CI/CD + Tailwind**: GitHub Actions (ci.yaml/cd.yaml) + Nothing.tech Tailwind 配置 | CTO + Claude Code | -| 2026-03-19 23:30 | **API Contract**: OpenAPI 規格 v1.0 (Health/Plugins/Pipelines/Agent/Approvals/Notifications) | CTO + Claude Code | -| 2026-03-19 23:15 | **ADR-002/003**: Nothing.tech 設計系統 + leWOOOgo 模組架構 | CTO + Claude Code | -| 2026-03-19 23:00 | **ADR-001**: MCP Protocol 採用決策記錄 | CTO + Claude Code | -| 2026-03-19 22:30 | **文檔萃取**: 戰略會議記錄複製 (加 Genesis 標記) + 四主機架構/六大鐵律萃取合併 | CTO + Claude Code | -| 2026-03-19 22:00 | **專案初始化**: 獨立 Repo 建立 + .awoooi-agent-rules.md + 專案骨架 | CTO + Claude Code | - ---- - -## 🎉 Phase 0 完成宣告 (2026-03-21) - -**Operation Phoenix Rising 基礎設施全數竣工** - -| 類別 | 項目 | 狀態 | -|------|------|------| -| **基礎架構** | K3s Namespace + RBAC | ✅ | -| **網路隔離** | NetworkPolicy + Nginx | ✅ | -| **可觀測性** | OTEL → SigNoz | ✅ | -| **國際化** | next-intl (zh-TW/en) | ✅ | -| **容器化** | Docker + K8s YAML | ✅ | -| **文檔系統** | ADR + SOP + LOGBOOK | ✅ | - -**下一階段**: Phase 1 - 戰情室 UI + AI Copilot 開發 - ---- - -## 🎯 Phase 0 待辦 (Week 1) ✅ 已完成 - -- [x] 建立獨立 Repository -- [x] `.awoooi-agent-rules.md` AI 開發契約 -- [x] VS Code Multi-root Workspace -- [x] `api-contract.yaml` OpenAPI 規格 -- [x] `ADR-001` MCP Protocol 採用 -- [x] `ADR-002` Nothing.tech 設計系統 -- [x] `ADR-003` leWOOOgo 模組架構 -- [x] GitHub Actions CI/CD 基礎 -- [x] Tailwind Nothing.tech 配置 -- [x] `API_DEVELOPMENT_SOP.md` API 開發流程規範 (CTO-001) -- [x] `COMPONENT_LIBRARY.md` 原子組件庫規格 (CPO-002) -- [x] `RBAC_SCHEMA.md` 權限架構設計 (CISO-001) -- [x] K8s Namespace 建立 (CIO-001) ✅ 2026-03-21 -- [x] Nginx 路由配置 (CIO-002) ✅ 2026-03-21 -- [x] NetworkPolicy 設定 (CIO-003) ✅ 2026-03-21 -- [x] i18n 框架設定 (CPO-003) ✅ 2026-03-21 - -### 🚨 P0 基礎設施 (2026-03-21 新增) - -- [x] **後端 FastAPI 整合 SigNoz OpenTelemetry** (Traces/Logs → 192.168.0.188:4317) ✅ 2026-03-21 -- [x] **前端 Next.js 導入 next-intl 雙語架構** (zh-TW + en, Zero Hardcode) ✅ 2026-03-21 - ---- - -### 已完成文檔 - -- [x] `DEPENDENCIES.md` 依賴清單 (CEO #1) -- [x] `ADR-006` AI 降級備援策略 (CEO #2) -- [x] `ADR-007` 資料保留策略 (CEO #7) -- [x] `DEPLOYMENT_CONTRACTS.md` 部署契約 (顧問) -- [x] `I18N_STRUCTURE.md` i18n 結構規範 (顧問) -- [x] `WEEKLY_REPORT_SOP.md` 週報自動化 (CEO #6) -- [x] `TECHNICAL_DOCUMENTATION_CHECKLIST.md` 技術文檔清單 (CEO #9) - ---- - -## 📚 參考文件 - -- **Operation Phoenix Rising**: `docs/meetings/2026-03-20_PHOENIX_RISING_STRATEGY.md` ⭐ 最新戰略 -- 戰略會議記錄 (創世文檔): `docs/meetings/2026-03-19_FRONTEND_RESTRUCTURE_STRATEGY.md` ✅ 本地複製 -- 舊專案規範 (唯讀參考): `/Users/ogt/wooo-aiops/CLAUDE.md` ⚠️ 不複製,僅萃取精華至 `.awoooi-agent-rules.md` - ---- - -## 🔴 重大戰略變更 (2026-03-20) - -**CEO 宣布 Operation Phoenix Rising**: - -| 項目 | 原計畫 | 新計畫 | -|------|--------|--------| -| 產品定位 | Agent 指揮艙附屬品 | **100% 獨立 SaaS,完全取代舊版** | -| 頁面範圍 | ~10 頁 | **63+ 頁全面重構** | -| 視覺風格 | 深色駭客風 | **Nothing.tech 純白工業風** | -| AI 整合 | 部分頁面 | **全站 AI Copilot** | -| 時程 | 8 週 | **24 週 (Week 8 MVP)** | -| 過渡期 | 12 個月 | **1-3 個月** | -| 團隊 | 4 人 | **14 人** | - -## 📍 當前狀態 (2026-04-04 KB Phase 2 RAG + 紅區修復) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **asyncpg CAST fix** | ✅ 推送 | 12bc947 | -| **KB Phase 2: OpenClaw RAG 整合** | ✅ 推送 | 860dc1d | -| **C1 首席架構師必修: 5秒 timeout** | ✅ 推送 | f846000 | -| **首席架構師 Review (Tier 3 紅區)** | ✅ 條件通過 74→修復後 | 860dc1d+f846000 | -| **CD 部署** | ⏳ 等待 | — | -| **embed-all E2E 驗證** | ⏳ 等 CD | — | - -**架構摘要**: -- `_query_kb_context_inner`: 實際 KB semantic_search 查詢 -- `_query_kb_context`: 5秒 asyncio.wait_for 保護 + 靜默降級 -- `_dual_engine_analyze`: KB context → expert_context → LLM prompt 注入 - -**下一步**: CD 部署後 → embed-all → semantic-search E2E → I1/I2/I3 (Important backlog) - -## 📍 當前狀態 (2026-04-04 KB Phase 2 所有修復完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **I2: KnowledgeService 依賴注入** | ✅ | 429d81d | -| **I3: exception 細分 (ConnectionError/TimeoutError/unexpected)** | ✅ | 429d81d | -| **語意搜尋整合測試 5 tests PASSED** | ✅ | f656775 | -| **首席架構師 Tier 3 紅區 C1+I2+I3 全修** | ✅ 74→~90 | — | -| **CD 部署** | ⏳ Task-369 進行中 | — | - -**下一步**: CD 完成後 embed-all + semantic-search E2E 驗證 - -## 📍 當前狀態 (2026-04-04 Phase 25 完成 + 首席架構師 Review 通過) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| **Phase 25 P0 DIAGNOSE Privacy-First** | ✅ 部署 prod | 3455044 | -| **Phase 25 P1 Knowledge Auto-Harvesting** | ✅ 部署 prod | 3455044 | -| **Phase 25 P2 Config Drift Detection** | ✅ 部署 prod | 3455044 | -| **prod DB migration (symptoms_hash)** | ✅ 已執行 | phase8 | -| **prod DB migration (drift_reports)** | ✅ 已執行 | phase9 | -| **drift-scanner CronJob** | ✅ 部署 (每小時) | k8s/drift-cronjob.yaml | -| **fallback_models 去重 bug** | ✅ 修復 | c4eafd2 | -| **首席架構師 Review (Phase 25)** | ✅ 有條件通過 76/100 → 修正後通過 | — | -| **C1: NemotronProvider privacy_level** | ✅ cloud→local (裁示:NIM=內網) | a562db4 | -| **C2: adopt() 安全漏洞** | ✅ 暫停 501,待 ADR-057 | a562db4 | -| **I1: timeout log 錯誤變數** | ✅ 修正 | a562db4 | -| **I3: route_sync DIAGNOSE 隱私邊界** | ✅ 補齊 | a562db4 | -| **CD 部署 (a562db4)** | ⏳ 進行中 | — | - -**首席架構師 Review 介入時機**: Phase 全部部署 + prod 驗證後,統帥指示介入 - -**重要裁示**: -- NIM (192.168.0.188) 屬 local infra,privacy_level="local",可納入 DIAGNOSE 隱私邊界 -- adopt() 端點走 Gitea PR API,非 Pod 內 git 操作 - -**後續 Backlog (非阻塞)**: -- ADR-057 起草 (Config Drift Detection 架構決策) -- I2: nvidia.chat system prompt 格式修正 -- I4: DriftDetector field_path 比對邏輯整合測試 -- C3: _recent_reports 整合 DB 持久化 +| 已完成 Phase | 25+ (含子Phase) | +| 已完成 Sprint | 3 (Sprint 3/4/F) | +| ADR 文件 | 61 份 (ADR-060~061) | +| 首席架構師審查 | 15+ 次 | +| 最高評分 | Phase 16: 50/50 + Phase R: 97/100 | +| 監控 Targets | 15/15 UP | +| Grafana Dashboard | 3 | +| Playbooks | 12 (全部 approved, auto_repair 已啟用) | +| alert_operation_log 記錄 | 654 筆歷史 + 即時寫入 | diff --git a/docs/adr/ADR-060-comprehensive-infrastructure-monitoring.md b/docs/adr/ADR-060-comprehensive-infrastructure-monitoring.md new file mode 100644 index 00000000..2cd34393 --- /dev/null +++ b/docs/adr/ADR-060-comprehensive-infrastructure-monitoring.md @@ -0,0 +1,118 @@ +# ADR-060: 全面基礎設施監控告警與自動修復架構 + +**狀態**: 已批准 (首席架構師裁示 2026-04-08) +**日期**: 2026-04-08 +**提案者**: Claude Code +**審核者**: 統帥 (首席架構師) + +--- + +## 背景 + +AWOOOI 平台現有監控主要覆蓋 K3s 層 (Prometheus + Alertmanager → AWOOOI API → Telegram)。 +四台主機上的 Docker 服務、系統服務、外部網站共 **30+ 個服務/容器** 缺乏監控告警。 + +## 問題陳述 + +| 層 | 服務數 | 目前監控 | 告警 | 自動修復 | +|----|--------|---------|------|---------| +| K3s Pods | ~15 | ✅ Prometheus | ✅ Alertmanager | ✅ 部分 | +| Docker 容器 (110) | ~35 | ❌ | ❌ | ❌ | +| Docker 容器 (188) | ~12 | ❌ | ❌ | ❌ | +| 系統服務 (188) | 3 (PG/Redis/Nginx) | ❌ | ❌ | ❌ | +| 外部網站 | 4 個 | ❌ | ❌ | ❌ | + +## 決策 + +### 分三層實施 + +**Plan A — Docker 容器健康監控 (P0)** +- 部署 `docker-health-monitor.sh` cron 腳本至 110 和 188 主機 +- 每 5 分鐘主動偵測容器狀態 (unhealthy / exited / dead) +- Intent → Action → Result 三階段通知流程 +- 透過 HMAC 簽名呼叫 AWOOOI API `/api/v1/webhooks/alerts` +- Telegram Bot API 直接推送作為 Fallback + +**Plan B — Prometheus Exporter 補齊 (P0)** +- `postgres_exporter` (9187) → PostgreSQL awoooi_prod 深度指標 +- `redis_exporter` (9121) → Redis 連線/記憶體/延遲 +- `nginx-prometheus-exporter` (9113) → Nginx 流量/連線 +- 部署於 188,加入 Prometheus scrape config +- 新增 `alerts-unified.yml` 詳細規則 + +**Plan C — Blackbox 外部網站補齊 (P1)** +- 4 個外部產品網站加入 Blackbox HTTP probe +- mo.wooo.work / tsenyang.wooo.work / stock.wooo.work / bitan.wooo.work +- SSL 憑證到期預警 (14 天) + +### 自動修復策略 (首席架構師裁示) + +| 服務類型 | 策略 | 動作 | +|---------|------|------| +| Docker 容器 (非 DB/監控) | **自動修復** | `docker restart` | +| Nginx systemd | **自動修復** | `systemctl restart nginx` | +| Prometheus/Grafana/Alertmanager | **自動啟動** | `docker start`(非 restart,保護 WAL) | +| PostgreSQL | **僅告警** | 禁止自動重啟(資料安全) | +| Redis | **僅告警** | 禁止自動重啟(告警鏈依賴) | +| 外部網站 Down | **自動修復** | 對應容器 `docker restart` | +| 主機間網路中斷 | **僅告警** | 網路問題不自動修復 | + +### 通知順序 (首席架構師裁示) + +**必須**: Intent → Action → Result + +``` +Telegram: [AI 決策] 偵測到 <容器> 異常,準備執行 Docker Restart... +系統: 執行重啟 +Telegram: [執行結果] <容器> 重啟成功 / 失敗,需人工介入 +``` + +## 備份與還原體系 + +### PostgreSQL awoooi_prod +- 工具: Restic + GFS (已有 backup-awoooi.sh) +- 頻率: 每 6 小時 (頻繁) + 每日完整備份 02:00 +- 保留: daily=14, weekly=8, monthly=12 +- 還原 RTO: < 30 分鐘 + +### Docker Volume 備份 +- momo-db, harbor-db, sentry-postgres +- 工具: `docker exec pg_dump` → Restic +- 頻率: 每日 03:00 + +### 備份驗證 +- 每月第一個週日 03:00 執行 DR Drill +- 從最新快照還原到臨時容器,執行 SQL 驗證 +- 結果推送 Telegram + +## 操作記錄體系 + +所有操作必須寫入 `alert_operation_log` 表 (ADR-061): +- Docker 健康監控的修復記錄 +- 備份操作 (BACKUP_COMPLETED / BACKUP_FAILED) +- 變更記錄 (CHANGE_APPLIED) +- DR 演練 (DR_DRILL_COMPLETED) + +## 備援方案 (Fallback) + +| 情境 | 備援 | +|------|------| +| AWOOOI API Down | docker-health-monitor.sh 直接呼叫 Telegram Bot API | +| Prometheus Down | Alertmanager 直接 telegram_configs | +| Redis Down | 告警去重退化為記憶體模式 (60s 窗口),Webhook 端點不受影響 | + +## 結果 + +- 監控覆蓋率: 15/15 targets → **45+ targets** (新增 Docker/系統/外部網站) +- 告警盲區: **0** (設計目標) +- MTTR: Docker 服務 < 2 分鐘 (自動修復) + +## 相關文件 + +- ADR-025: Alert Chain E2E Validation +- ADR-030: Intelligent Auto-Remediation +- ADR-058: Host Auto-Repair SSH Whitelist +- ADR-061: Alert Operation Log Event Sourcing +- `ops/monitoring/alerts-unified.yml` +- `ops/monitoring/docker-compose.exporters.yaml` +- `scripts/ops/docker-health-monitor.sh` (待建立) diff --git a/docs/adr/ADR-061-alert-operation-log-event-sourcing.md b/docs/adr/ADR-061-alert-operation-log-event-sourcing.md new file mode 100644 index 00000000..691dd755 --- /dev/null +++ b/docs/adr/ADR-061-alert-operation-log-event-sourcing.md @@ -0,0 +1,120 @@ +# ADR-061: Alert Operation Log — Event Sourcing 操作溯源 + +**狀態**: 已實施 (2026-04-08) +**日期**: 2026-04-08 +**提案者**: Claude Code +**審核者**: 統帥 (首席架構師) + +--- + +## 背景 + +統帥指令:「所有操作都必須被記錄,寫入資料庫」「把之前所有的告警訊息,通通寫入資料庫,並且要有然後去記錄相關的操作」 + +現有問題: +- `audit_logs` 只記錄 K8s 操作,不記錄告警生命週期 +- `approval_records` 記錄審批狀態,但不記錄操作時間軸 +- 自動修復操作 (`auto_repair_executions`) 之前未寫入 DB +- 沒有統一的告警全生命週期視圖 + +## 決策 + +### 兩個新表 + +**1. `auto_repair_executions`** (Phase 10) +- 記錄每次自動修復執行的成功/失敗 +- 欄位:incident_id, playbook_id, playbook_name, success, executed_steps, similarity_score, risk_level, execution_time_ms + +**2. `alert_operation_log`** (Phase 11) — Event Sourcing +- 不可變 (Immutable) — 只 INSERT,不 UPDATE/DELETE +- 每個告警生命週期的每個事件都寫一筆 +- 支援完整溯源:從告警進來到解決的所有步驟 + +### Event Types + +``` +ALERT_RECEIVED — Alertmanager/外部告警進來 +TELEGRAM_SENT — 推送 Telegram 審核卡片 +USER_ACTION — 使用者在 Telegram 按按鈕 (approve/reject/silence) +AUTO_REPAIR_TRIGGERED — 自動修復評估通過,準備執行 +EXECUTION_STARTED — 開始執行 K8s/SSH/Docker 指令 +EXECUTION_COMPLETED — 執行完成 (success/failure) +TELEGRAM_RESULT_SENT — 自動修復結果推送到 Telegram +RESOLVED — 告警解除 +SILENCED — 靜默中 +ESCALATED — 升級 (P3→P2 等) +CHANGE_APPLIED — 生產環境變更記錄 +BACKUP_COMPLETED — 備份完成事件 +BACKUP_FAILED — 備份失敗事件 +DR_DRILL_COMPLETED — DR 演練完成 +``` + +### 歷史數據回填 + +執行 `phase11b_backfill_alert_operation_log.sql` 回填: +- 14 筆 ALERT_RECEIVED (incidents 表) +- 265 筆 TELEGRAM_SENT (approval_records 表) +- 265 筆 USER_ACTION (approval_records 表) +- 110 筆 EXECUTION_COMPLETED (audit_logs 表) +- **總計 654 筆歷史記錄** + +## 實施 + +### 寫入點 + +| 事件 | 觸發位置 | +|------|---------| +| ALERT_RECEIVED | `webhooks.py` alertmanager_webhook → `alert_operation_log` | +| TELEGRAM_SENT | `_push_to_telegram_background` 成功後 | +| USER_ACTION | `telegram.py` handle_callback approve/reject | +| AUTO_REPAIR_TRIGGERED | `_try_auto_repair_background` evaluate 後 | +| EXECUTION_COMPLETED | `_try_auto_repair_background` result 後 | +| TELEGRAM_RESULT_SENT | `_try_auto_repair_background` telegram 推送後 | + +### 程式碼位置 + +``` +apps/api/src/db/models.py — AlertOperationLog, AutoRepairExecution models +apps/api/src/repositories/ + alert_operation_log_repository.py — append() / list_by_incident() / get_stats() + audit_log_repository.py — get_auto_repair_execution_repository() +apps/api/src/api/v1/webhooks.py — 寫入點整合 +apps/api/src/api/v1/telegram.py — USER_ACTION 寫入 +apps/api/migrations/ + phase10_auto_repair_executions.sql + phase11_alert_operation_log.sql + phase11b_backfill_alert_operation_log.sql +``` + +## 查詢範例 + +```sql +-- 查詢某 incident 的完整操作時間軸 +SELECT event_type, actor, action_detail, success, created_at +FROM alert_operation_log +WHERE incident_id = 'INC-20260408-XXXXXX' +ORDER BY created_at ASC; + +-- 統計 24 小時自動修復成功率 +SELECT success, COUNT(*) FROM auto_repair_executions +WHERE created_at > NOW() - INTERVAL '24 hours' +GROUP BY success; + +-- 所有使用者操作記錄 +SELECT actor, action_detail, context->>'username', created_at +FROM alert_operation_log +WHERE event_type = 'USER_ACTION' +ORDER BY created_at DESC; +``` + +## 結果 + +- 所有告警操作 100% 持久化到 DB +- 支援完整審計 (Audit Trail) +- 654 筆歷史記錄已回填 +- 未來:可建立 AWOOOI Web 操作記錄頁面 + +## 相關 ADR + +- ADR-030: Intelligent Auto-Remediation +- ADR-060: 全面基礎設施監控