From 3086123962bcb7d0ee34939d19e9ec724d569789 Mon Sep 17 00:00:00 2001 From: OG T Date: Sun, 12 Apr 2026 12:12:02 +0800 Subject: [PATCH] =?UTF-8?q?docs(logbook):=20Memory=20=E6=B8=85=E7=90=86=20?= =?UTF-8?q?=E2=80=94=20LOGBOOK=20=E5=A3=93=E7=B8=AE=201176=E2=86=9246=20?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- docs/LOGBOOK.md | 1186 ++--------------------------------------------- 1 file changed, 28 insertions(+), 1158 deletions(-) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 0e24f56c..f7dfd6c5 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -6,1171 +6,41 @@ --- -## 📍 當前狀態 (2026-04-12 — SSH MCP 連通驗證 + 全部人工操作清單清零) +## 📍 當前狀態 (2026-04-12 — 全清零,等待新方向) -### SSH MCP 連通驗證 (2026-04-12) - -| 主機 | SSH from API Pod | authorized_keys | -|------|-----------------|----------------| -| 192.168.0.188 (ollama) | ✅ OK | ALREADY EXISTS | -| 192.168.0.110 (wooo) | ✅ OK | ALREADY EXISTS | - -注意:192.168.0.111 不在五主機架構中(架構為 110/120/121/188),舊 Memory 錯誤已修正。 - -**人工操作清單全清零**(唯一剩餘:A-3 bitan Docker 化,P3 低優先,統帥裁示時執行) +**系統狀態**: 所有 Backlog 清零 ✅ | SSH MCP 188/110 連通 ✅ | 人工操作清單清零(A-3 bitan P3 暫緩) --- -## 📍 當前狀態 (2026-04-11 深夜 — c439277 Tier 3 紅區 Code Review 全修補) +## 里程碑摘要(壓縮版) -### c439277 Tier 3 紅區 Code Review 修補 (commit 8be87b0) - -> c439277 為前次 Session 末尾從 Gitea pull 進來的 commit,本 Session 補做首席架構師 Review - -| 等級 | 問題 | 修復 | -|------|------|------| -| C1 | `_collect_mcp_context` Python ternary 優先度 bug — container 變數在特定 label 組合下值錯誤 | 加括號修正 | -| C2 | MCP 呼叫無 timeout,可能阻塞決策主路徑 | `asyncio.wait_for(timeout=5.0)` + TimeoutError log | -| C3 | DESTRUCTIVE_PATTERNS 缺漏 — `delete pods`(複數)/`docker rm/stop/kill`/`kubectl drain/rollout undo`/JSON patch `"replicas": 0`/`rm -rf` | 全補全 | -| M1 | `_DESTRUCTIVE_PATTERNS` 在 `evaluate()` 函式內重複建立 | 移至模組頂層常量 | -| I1 | webhooks.py IP 排除只覆蓋 `192.x`,漏 `10.x`/`172.16-31.x` | 改用 `is_internal_ip()` RFC-1918 完整覆蓋 | -| I4 | DESTRUCTIVE_PATTERNS 零測試覆蓋(安全門) | 新增 `test_destructive_patterns.py`,25 測試全過 | -| C4 | 未知主機靜默跳過 | 改為 `warning` log | - -**Tier 3 架構師評估**: -- confidence 0.50 + high risk 全開放:風險已轉移至 DESTRUCTIVE_PATTERNS(補全後) -- `_collect_mcp_context` 直接實例化 Provider:已知 I2 技術債,下 Sprint 評估 DI 化 +| 日期 | 里程碑 | commit | +|------|--------|--------| +| 2026-04-08 | Sprint 5.1 資料安全護欄完成(Guardrail BLOCK/HITL/MultiSig)| 88696db/0f5fecf | +| 2026-04-10 | ADR-068 飛輪閉環 E2E 驗收(HostHighCpuLoad→PB-20260406)| — | +| 2026-04-10 | ADR-067 五大 Ollama 應用全完成(Phase 30-34)| — | +| 2026-04-10 | B5 CI 整合測試 640 通過 | — | +| 2026-04-11 | ADR-070 全自動 AIOps 閉環(MCP 10 providers)| a2cc985 | +| 2026-04-11 | ADR-071 A-J Telegram 通知卡片 10 種 | 1ec1965 | +| 2026-04-11 | ADR-072 Bug 修復 P0-P2 全完成 | f34fe19 | +| 2026-04-11 | MCP Security Code Review P0/P1/P2 全修補 | f323633 | +| 2026-04-11 | ADR-069 基礎設施重建 Sprint A/B/C 全完成 | — | +| 2026-04-11 | D1 models.json v1.3.0(9 purpose keys)| f2c18c4 | +| 2026-04-11 | M3 alertname_to_type 抽至 constants | 1ede9f9 | +| 2026-04-11 | I1 ADR-064 Rule Engine get_incident_type() 整合 | 615822d | +| 2026-04-11 | ArgoCD MCP 連線修復(IP 120:30443)| f23176c | +| 2026-04-11 | 首席架構師 CR Round 1 — get_incident_type rule.id bug + 11 tests | d77b2ad | +| 2026-04-11 | ADR-070 全自動化三大修復(auto_approve/MCP context/target)| c439277 | +| 2026-04-11 | 首席架構師 CR Round 2 — Tier 3 ternary/timeout/DESTRUCTIVE_PATTERNS + 25 tests | 8be87b0 | +| 2026-04-12 | SSH MCP 188/110 連通驗證,authorized_keys 確認 | 796517f | --- -## 📍 當前狀態 (2026-04-11 深夜 — 首席架構師 Code Review 修補完成) +## 已知技術債(下 Sprint 評估) -### Code Review 修補 — I1/M3/D1/ArgoCD 重審 (首席架構師觸發) - -| 等級 | 問題 | 修復方式 | Commit | -|------|------|---------|--------| -| Critical | `get_incident_type()` rule.id 不應作為 incident_type fallback(命名空間不同,有語意污染風險)| 移除 rule_id 路徑,YAML 匹配無 incident_type → fall through 靜態 dict | 待 push | -| Critical | `get_incident_type()` 無測試覆蓋(關鍵路徑)| 新增 test_get_incident_type.py,11 個測試 4 個類別全過 | 待 push | -| Important | ALERTNAME_TO_TYPE deferred import(無 circular risk)| 移至模組頂層 import | 待 push | -| Important | NetworkPolicy ClusterIP `10.43.16.201/32` 寫死(技術債)| 記錄為已知技術債,podSelector+namespaceSelector 已在同一 rule,下次 ArgoCD 重裝需更新 | LOGBOOK | -| Minor | alert_types.py TODO 已過期 | 更新為 I1 整合後的正確說明 | 待 push | - -**技術債記錄**:`k8s/awoooi-prod/02-network-policy.yaml` ArgoCD egress 規則中 `ipBlock: 10.43.16.201/32` 為 ClusterIP,若 ArgoCD 重裝此 IP 會變更,須同步更新。 - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — MCP Security Code Review P0~P2 全修補) - -### MCP Security Code Review 修補 (commit f323633) - -| 等級 | 問題 | 修復方式 | -|------|------|---------| -| P0 | `_fetch_metrics_snapshot` 呼叫型別錯誤(str→dict)| `{"query": ...}` + 結果解析修正 | -| P1 | alertname PromQL injection | `_RE_SAFE_ALERTNAME` 白名單正則 | -| P1 | kubectl action 危險字元注入 | `_ALLOWED_KUBECTL_PATTERN` 白名單 | -| P1 | 6 個 `create_task()` GC 風險 | `_background_tasks` set + `_fire_and_forget()` helper | -| P1 | SSH Group B 無 known_hosts 可執行寫入 | 強制驗證 `SSH_MCP_KNOWN_HOSTS_FILE` 存在 | -| P2 | Sentry query 無語意驗證 | `_RE_SAFE_SENTRY_QUERY` 拒絕特殊字元 | -| P2 | ArgoCD `verify=False` 寫死 | `ARGOCD_VERIFY_TLS` 環境變數開關 | - -推送 Gitea → CI/CD 觸發中 - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — M3+I1 Tech Debt 全清零) - -### M3 alertname_to_type 抽至 constants + I1 ADR-064 Rule Engine 整合 (2026-04-11 深夜) - -| 任務 | 說明 | Commit | -|------|------|--------| -| M3 | 56筆 alertname_to_type 從 webhooks.py 內聯 dict 抽至 `src/constants/alert_types.py` | 1ede9f9 | -| I1 | alert_rule_engine.py 新增 `get_incident_type(alertname)`:YAML規則→靜態dict→"custom" 三層降級 | 615822d | -| I1 | webhooks.py call site 改用 `get_incident_type(alertname)`,正式整合 ADR-064 Rule Engine | 615822d | - -**Backlog 全清零** ✅ — 唯一剩餘 B3 (Phase 15.5 Trace Context UI) 統帥裁示暫緩 - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — D1 models.json 集中化完成) - -### D1 models.json 集中化 (2026-04-11 深夜) - -ADR-067 五大 Ollama 應用 hardcode 模型名稱全部消除: - -| 服務 | 舊 hardcode | 新 purpose key | -|------|-------------|----------------| -| drift_narrator_service | qwen2.5:7b-instruct | drift_summary | -| drift_interpreter | qwen2.5:7b-instruct | drift_intent | -| log_summary_service | deepseek-r1:14b | log_anomaly | -| local_code_review_service | qwen2.5-coder:7b | code_review | -| image_analysis_service | llava:latest | image_analysis | -| decision_manager (nemoclaw) | deepseek-r1:14b | nemoclaw | -| decision_manager (playbook) | qwen2.5:7b-instruct | playbook_draft | -| embedding_service | qwen2.5:7b-instruct | embedding | -| knowledge_service | nomic-embed-text | embedding | - -models.json v1.3.0 + 9 新 purpose keys,commit f2c18c4 - -**B2 確認已在 Sprint 5 完成**(/topology + ServiceTopology.tsx),workplan 更新 -**Backlog 全清零** — 剩餘 I1/M3 tech debt 待下 Sprint - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — ADR-072 Code Review 修補全完成) - -### ADR-072 Code Review 修補完成 (2026-04-11 深夜) - -首席架構師審查後,補修 4 個 Code Review 問題: - -| 項目 | 問題 | 修復 | Commit | -|------|------|------|--------| -| C1 | drift_interpreter.py 寫死內網 IP 192.168.0.111 | 改從 settings.OLLAMA_URL 讀取 | f323633 | -| C2 | BUG-004 只更新 DB,Redis Working Memory vectorized 未同步 | 補 Redis JSON patch 同步 | f323633 | -| I2 | _ALERTNAME_KEYWORDS 用 HostHighDiskUsage(與 alerts-unified.yml 不符)| 改為 HostOutOfDiskSpace + DockerContainerExited + fallback log | f323633 | -| M2 | import json as _json 在 for 迴圈體內 | 移至方法頂部 | f323633 | - -**技術債記錄**(不阻塞合併):I1 ADR-064 Rule Engine 整合、I3 resend_stale_ready_tokens 積木化、I4 outcome 寫入非 atomic、M3 alertname_to_type 應抽至 constants - -**ADR-072 全部完成** ✅ — 8 Bug + Code Review 全修補,推送 Gitea - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — ADR-072 全部完成 BUG-001~008) - -### ADR-072 P2 完成 (2026-04-11 深夜) - -| Bug | 說明 | Commit | -|-----|------|--------| -| BUG-007 ✅ | 確認不需修:alerts-unified.yml 全 42 規則均已有 severity label | — | -| BUG-008 ✅ | alertname_to_type 從 9→56 筆,涵蓋全部 alertname | f34fe19 | - -**ADR-072 狀態:全部完成** — 8 個 Bug 全部修復 - -**下一步**: B2 前端拓撲視覺化 / D1 models.json 集中化 / 人工操作清單 - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — ADR-072 P0+P1 全修復) - -### ADR-072 Bug 修復完成 (2026-04-11 深夜) - -| Bug | 說明 | Commit | -|-----|------|--------| -| BUG-001 ✅ | drift_interpreter 改用 Ollama httpx,消除 4-tuple unpack 永久失敗 | 88e3197 | -| BUG-002 ✅ | _auto_execute 新增 K8s MCP 動態查詢 Pod,解決 deployment="unknown" | 88e3197 | -| BUG-003 ✅ | safety guard 後加入 K8s deployment 存在性驗證 | 88e3197 | -| BUG-004 ✅ | km_conversion_service 建 KM 後補寫 incidents.vectorized=True | 5aa0244 | -| BUG-005 ✅ | resend_stale_ready_tokens() + lifespan startup 補送 ready decisions | 5aa0244 | -| BUG-006 ✅ | _push_auto_repair_result 補寫 outcome+verification_result 到 DB | 5aa0244 | - -**待修 P2**: BUG-007 (severity labels) + BUG-008 (alertname_to_type) → 下 Session - ---- - -## 📍 當前狀態 (2026-04-11 深夜 — Session 6 Telegram 全面審計 + 規格整合) - -### Session 6 Redis DB10 全面審計發現 (2026-04-11 深夜) - -**審計範圍**:62 個 DecisionToken、112 個 Incidents、Telegram 告警統計 - -| 發現 | 數字 | 根因 | -|------|------|------| -| DecisionToken error | 24/62 | deployment_name = "unknown"(無 component label)→ safety guard 攔截 | -| DecisionToken ready(無人審核)| 15/62 | approval flow UUID 問題 | -| 所有告警 = P3/High | 100% | Prometheus rules 未設 severity label | -| incident type = "custom" | 69/112 | alertname_to_type 只有 9 筆 | -| KM vectorized = False | 108/112 | RAG 知識庫未累積 | -| drift_interpreter 失敗 | 100% | nvidia.chat() 返回 NvidiaProviderResult 非 4-tuple | -| outcome/verification_result = null | 全部 | post-repair 驗證未寫入 | - -**ADR-072 Bug 清單建立**:8 個問題,P0/P1/P2 分級 - -**規格文件整合確認**: -- `docs/superpowers/specs/2026-04-10-infra-rebuild-sprint-abc-design.md` v2.1 -- Sprint A/B/C + MCP Phase 1-4 + ADR-071 A-J 全部 ✅(與 LOGBOOK 吻合) -- `project_master_workplan.md` 已更新(原來錯誤顯示 🔲) -- 執行順序確認無邏輯衝突(Section 7 依賴鏈正確) - -**下一步**:ADR-072 P0 Bug 修復(drift_interpreter + deployment_name resolution) - ---- - -## 📍 當前狀態 (2026-04-11 — MCP 全驗收完成 + Bug 修復) - -### MCP 全驗收 + Bug 修復 (2026-04-11 深夜) - -| 項目 | 說明 | Commit | -|------|------|--------| -| ssh-mcp-key Secret | 私鑰+known_hosts,188/110 authorized_keys 加入 | 人工執行 | -| SSH 連線驗證 | 188 OK / 110 OK | — | -| 新 image 部署 | a2cc985 (MCP Phase 3) rollout 完成 | kubectl | -| 10 providers 驗收 | kubernetes/signoz/db/fs/grafana/runbooks/prometheus/ssh/argocd/sentry 全 enabled | — | -| Sentry DSN 修正 | HTTPS→HTTP 內網 IP,消除 SSL hostname mismatch | b5aa607 | -| Prometheus URL 修正 | 188:9090→110:9090 (正確位置) | b5aa607 | -| sentry.wooo.work HTTPS | /tmp/sentry-https.conf 待統帥 sudo 加入 nginx | 待人工 | - -**MCP 全自動 AIOps 閉環 100% 生產驗收完成** ✅ - ---- - -## 📍 當前狀態 (2026-04-11 — MCP Phase 2a SSH Volume + MCP 全啟用) - -### MCP Phase 2a + ConfigMap 啟用 (2026-04-11 深夜) - -| 項目 | 說明 | Commit | -|------|------|--------| -| ssh-mcp-key volume | 06-deployment-api.yaml: volumes 補全(optional:true, 0400)| b1c1091 | -| SSH/ArgoCD/Sentry 啟用 | 04-configmap.yaml: SSH_MCP_ENABLED + ARGOCD_MCP_ENABLED + SENTRY_MCP_ENABLED | b1c1091 | - -**MCP 10 providers 全部實作完成**(ArgoCD/Sentry/SSH 需人工建立對應 Secret) - ---- - -## 📍 當前狀態 (2026-04-11 — MCP Phase 3/4 全完成) - -### MCP Phase 3/4 + 後置完成 (2026-04-11) - -| 項目 | 說明 | Commit | -|------|------|--------| -| MCP Phase 3 ArgoCD | ArgoCDProvider 3 工具(list/status/history)| a2cc985 | -| MCP Phase 3 Sentry | SentryProvider 3 工具(list/get/search)| a2cc985 | -| providers/__init__.py | 補齊全 10 個 providers(含 Phase 2 Prometheus/SSH)| a2cc985 | -| MCP Phase 4a | NemoClaw second opinion 信心 < 0.7 → deepseek-r1:14b | f3ee577 | -| MCP Phase 4b | 自動修復後抓 K8s Pod 狀態寫 k8s_state_after | 0fa3b35 | -| MCP Phase 4c | 新 alertname 自動生成 Playbook 草稿 qwen2.5:7b-instruct | 7eb49f9 | -| CD_PUSH_TOKEN | Gitea PAT + Repo Secret(GITEA_ 保留前綴問題已解)| de05577 | -| backup-from-110.sh | 188 部署 + cron 0 1 * * * | de05577 | - -**零自動 AIOps 閉環達成**: 規格 ADR-070 全部 Phase 1-4 完成 - ---- - -## 📍 當前狀態 (2026-04-11 夜 — ADR-071-I/J + Backlog 清零) - -### ADR-071-I/J + 後置完成 (2026-04-11 深夜) - -| 項目 | 說明 | Commit | -|------|------|--------| -| ADR-071-I | `_fetch_metrics_snapshot()` + `_format_metrics_delta()` + `metrics_before/after` DB 閉環 | 1ec1965 | -| ADR-071-J | `km_conversion_service._build_content()` 精簡 delta 格式 + k8s_state_after | 1ec1965 | -| CD_PUSH_TOKEN | Gitea PAT 建立 + Repo Secret 設定(GITEA_ 前綴保留字 → 改名) | de05577 | -| backup-from-110.sh | 部署到 188 ~/backup-from-110.sh + cron 0 1 * * * | de05577 | -| backup 路徑 | BACKUP_ROOT 環境變數(預設 /home/ollama/backup/110) | de05577 | - -**Backlog 清零**: 所有 P1/P2 待辦已完成,人工後置全部執行 - ---- - -## 📍 當前狀態 (2026-04-11 — Sprint B-1 完成 + 架構Review修復) - -### Sprint B-1 Ansible IaC + Architecture Review (2026-04-11) - -| 項目 | 說明 | Commit | -|------|------|--------| -| B-1 Ansible IaC | inventory(5主機) + 4 playbooks + 4 roles 完整骨架 | 0139aa7 | -| ansible-lint CI | `.gitea/workflows/ansible-lint.yml` infra/** 觸發 | 0139aa7 | -| Architecture Review | `feature-dev:code-reviewer` 全面審查,5 項高信心問題 | — | -| fix: command injection | ssh_provider `_validate_param()` 白名單驗證 | 2af4dff | -| fix: known_hosts | SSH_MCP_KNOWN_HOSTS_FILE 環境變數 + warning log | 2af4dff | -| fix: 模組副作用 | ALERT_EVENT_TYPES 移回 repository 層靜態定義 | 2af4dff | -| fix: create_task競爭 | KM 轉換改 await + try/except,不再靜默丟失 | 2af4dff | -| fix: ORM懶載入 | convert() 加頂層 try/except,錯誤 error log | 2af4dff | - -**⚠️ 待首席架構師確認**: `2af4dff` 觸發橙區警告(telegram_gateway.py) -確認後執行: `git push gitea main` - -**架構 Review 規則**: 新建 `feedback_architecture_review_gates.md` - -### Sprint B-2/B-3 ArgoCD GitOps (2026-04-11) - -| 項目 | 說明 | Commit | -|------|------|--------| -| B-2 ArgoCD App | `k8s/argocd/awoooi-prod-app.yaml` 建立 + apply,17 資源 Synced | 7f4ec71 | -| B-3 CD GitOps | `cd.yaml` Deploy step 改為 kustomize edit + git push [skip ci] | 7f4ec71 | -| ADR-069 | 決策文件:循環觸發防護 + ignoreDifferences | 7f4ec71 | - -**後置動作**: 建立 Gitea Secret `GITEA_CD_TOKEN`(write:repository 權限) - -### MCP Phase 1 + Sprint C (2026-04-11) - -| 項目 | 說明 | Commit | -|------|------|--------| -| MCP Phase 1 | K8s MCP 6 新工具(pod_logs/watch_rollout/events/describe/hpa/node) | a29e5e1 | -| Sprint C-1 | Velero 已確認 13d 運作,daily-awoooi-prod, MinIO Available | — | -| Sprint C-2 | `scripts/ops/backup-from-110.sh` + HostBackupFailed 告警規則 | 43edff1 | -| Sprint C-3 | DR SOP 5 份(K8s/Nginx/Harbor/Bitan/Stock) | 43edff1 | - -**Sprint C 後置部署**(手動 SSH 到 188): -``` -scp scripts/ops/backup-from-110.sh ollama@192.168.0.188:~/bin/ -ssh ollama@192.168.0.188 "chmod +x ~/bin/backup-from-110.sh && mkdir -p /backup/110/{harbor,gitea} && echo '0 1 * * * /home/ollama/bin/backup-from-110.sh' | crontab -" -``` - ---- - -## 📍 當前狀態 (2026-04-11 夜 — ADR-071 第一批 + MCP Phase 2 全完成) - -### ADR-071 第一批 + MCP Phase 2 (2026-04-11 深夜) - -| 項目 | 說明 | Commit | -|------|------|--------| -| ADR-071-A | DB Migration: incidents 8 欄位 + 5 PgEnum → 已執行 Production | 325b385 | -| ADR-071-D | 狀態機守衛 `_check_incident_state_guard()` — 防 RESOLVED 卡片誤點 | 325b385 | -| ADR-071-B | `classify_notification()` 五型分類器 | 325b385 | -| ADR-071-C | `send_info_notification()` TYPE-1 純資訊卡片(無按鈕)| 325b385 | -| ADR-071-E | `_build_inline_keyboard()` 7 種 alert_category 動態按鈕 | 325b385 | -| ADR-071-F | `send_drift_card()` TYPE-4D + Diff 截斷 | 325b385 | -| ADR-071-G | `km_conversion_service.py` Incident→KM 自動轉換 | 325b385 | -| ADR-071-H | `handle_manual_fix_done()` TYPE-4 手動修復 Bot 對話閉環 | 325b385 | -| MCP-2b | `prometheus_provider.py` 三工具(query/range/alert_history)| 6351e9a | -| MCP-2a | `ssh_provider.py` 15 工具(群組A診斷+群組B操作+四層守衛)| 6351e9a | -| K8s | `04-ssh-mcp-secret.example.yaml` + config SSH_MCP_ENABLED | 6351e9a | -| Alert labels | `alerts-unified.yml` 補充 mcp_provider/host_type/alert_category | 6351e9a | - -**備注**: -- Prometheus server 目前無法連通(9090 Connection refused),待基礎設施確認後驗收 -- SSH MCP 需手動建立 ssh-mcp-key Secret 並設定 SSH_MCP_ENABLED=true - -**下一步**: Sprint B(Ansible + ArgoCD) - ---- - -## 📍 當前狀態 (2026-04-11 — ADR-070 全自動 AIOps 閉環設計完成) - -### ADR-070 設計完成 (2026-04-11) - -| 內容 | 說明 | +| 項目 | 說明 | |------|------| -| 告警盤點 | 10 類 70+ 告警全部盤點(K8s/主機/DB/Docker/DevOps/資安/UI)| -| MCP Phase 1-4 | 完整規劃:K8s強化 → SSH+Prometheus → ArgoCD+Sentry → NemoClaw整合 | -| SSH MCP Server | 設計完成:群組A診斷/群組B操作/四層守衛/asyncssh/參數白名單 | -| KM 整合 | MCP 帶三段資料(執行前情境+執行動作+執行後驗證)沉澱 Playbook | -| 零寫死判斷 | symptom_pattern AI 動態生成、新告警 AI 生成草稿 Playbook | -| NemoClaw 升格 | 推理仲裁引擎:降級顧問/second opinion/準確率追蹤 | -| 規格文件 | `docs/superpowers/specs/2026-04-10-infra-rebuild-sprint-abc-design.md` v2.0 § 14 | - -**下一步**: Sprint A 剩餘(A-0-3 SENTRY_DSN、A-0-4 Sentry Webhook、A-3 Bitan Docker化)→ 全驗收後開始 MCP Phase 2a SSH MCP - ---- - -## 📍 Sprint A 主幹 (2026-04-11 夜) - -### Sprint A 執行結果 (2026-04-11 夜) - -| 任務 | 說明 | 狀態 | -|------|------|------| -| A-0-1 | 110 Swap 4GB → 7.8GB | ✅ | -| A-0-2 | snuba crash loop 修復(containerd-shim kill)+ Harbor nginx 修復 | ✅ | -| A-1 | GitLab 完整移除(188 + 110 volumes/dirs/nginx) | ✅ | -| A-2 | n8n / open-webui / docker-registry 啟動 | ✅ | -| A-4 | Harbor nginx upstream port 5050→5000 | ✅ | -| A-5 | SSL 申請:sentry/gitea/langfuse/signoz/stock.wooo.work | ✅ | -| A-6 | 188 nginx 全站 HTTPS(含新 5 個服務 + stock) | ✅ | -| A-7 | 110 nginx all-sites-from-188.conf 封存,188 單一控制點 | ✅ | -| A-8 | stock.wooo.work K3s NodePort 設定 | ✅ | -| A-9 | keepalived MASTER 188 VIP:200 確認運作 | ✅ | - -**待完成**: -- A-0-3: K8s SENTRY_DSN 修正(Sentry 確認 OK 後) -- A-0-4: Sentry Webhook→Telegram 告警 -- A-3: Bitan pharmacy Docker 化 - -**全域驗收** (2026-04-11): -- 商業服務:aiops(307) / bitan(200) / mo(200) / tsenyang(200) ✅ -- 新 HTTPS:sentry/gitea/langfuse/signoz/stock 全部 307 ✅ - ---- - -## 📍 當前狀態 (2026-04-11 — 基礎設施重建計畫 ADR-069 規格完成) - -### 本 Session 完成項目 (2026-04-11 深夜) - -| 項目 | 內容 | -|------|------| -| 規格文件 v1.3 | `docs/superpowers/specs/2026-04-10-infra-rebuild-sprint-abc-design.md` | -| 涵蓋範圍 | Sprint A(清廢棄修錯誤)+ Sprint B(Ansible+ArgoCD GitOps)+ Sprint C(Velero+rsync DR) | -| 整合確認 | B2/B3/D1 Backlog 不受影響;K8s pods 全程不觸碰 | -| 文件更新時間表 | 每個里程碑明確指定需更新的 memory/LOGBOOK/ADR/Skills | - -**重要技術發現**: -- Sentry snuba crash loop 根因:Docker DNS 無法解析 `kafka:9092` hostname,非 worker 數量問題 -- K8s `SENTRY_DSN=CHANGE_ME` — Phase 6 未完成,需在 A-0 確認 Sentry 運作後修正 -- 188 `ollama.wooo.work` nginx 指向 :3000 (wooo-aiops frontend),應改為 :3010 (open-webui) -- Harbor nginx upstream :5050 錯誤,應為 :5000 -- bitan pharmacy 是完整 Next.js source code,Docker 化需含 build step - -**Backlog 狀態**: -- 新增 ADR-069 基礎設施重建計畫(Sprint A/B/C) -- B2/B3/D1 不動 - ---- - -## 📍 舊狀態 (2026-04-10 深夜 — 全站真實數據驗收 + AI 回覆修復 + Backlog 清零 ✅) - -### 本 Session 完成項目 (2026-04-10 深夜 第二輪) - -| Commit | 內容 | -|--------|------| -| `0b93f0e` | B2 拓撲圖 — useElkLayout.ts + 展開收合 + 過濾控制 (全展開/收合/只看異常) | -| `2a66bb1` | B5 CI — 改用 Gitea Actions `services:` 架構,徹底解決 DinD 網路隔離問題 | -| `527ce9f` | 後端 `/api/v1/notifications/channels` 路由補齊 (前端 404 修復) | -| `100e4d9` | AI 回覆截斷修復 — persona 強制注入 + Markdown 清理 + 600字截斷 | -| `cdccc7e` | SOUL.md v5.6 + capabilities.json v5.6 (B6 完成) | - -**全站真實數據清查結果**: -- 34 個頁面全部串接真實 API,零假數據 -- 唯一缺口:`/notifications/channels` 後端 404 → 已修復 -- notifications: 4 頻道 (OpenClaw TG / Nemotron TG / SSE / Redis Stream) 全 active - -**AI 回覆問題修復**: -- 根因:`_call_openclaw/nemotron` 未帶 persona,LLM 輸出 Markdown 且無字數限制 -- 修正:強制前置 PERSONA (300字規範) + `_clean_ai_reply()` 清除語法 + 600字硬截斷 - -**Backlog 狀態**: -- B2 ✅ 完成 -- B5 ✅ 完成 -- B6 ✅ 完成 -- **所有 Backlog 清零** - ---- - -## 📍 舊狀態 (2026-04-10 深夜 — ADR-067全完成 + CI B5通過 + SOUL v5.6 ✅) - -### 本 Session 完成項目 (2026-04-10 深夜) - -| Commit | 內容 | -|--------|------| -| `9a3002e` | CI B5 整合測試 — container IP 方案,解決 DinD port mapping | -| `527ce9f` | 後端 /api/v1/notifications/channels 路由 | -| `cdccc7e` | SOUL.md v5.6 + capabilities.json v5.6 — ADR-067五大應用 + Guardrail BLOCK層 | - -**CI Run 640 驗收**: -- Unit Tests: 499 passed ✅ -- B5 整合測試 (真實 DB): 5 passed ✅ -- K8s 部署: 3 API + 2 Web Pods Running,image `5d45499` ✅ - -**ADR-067 五大 Ollama 應用全部完成**: -- Phase 30-34:Drift摘要 / Log摘要 / PR審查 / RAG知識庫(5814 chunks) / 圖片分析 -- Telegram `/rag <問題>` 指令已驗收,E2E 回答 ADR-067 內容正確 - -**Backlog 剩餘**: -- B1: Sprint 5.2 全面監控 (P2) -- B2: Phase O-6 前端拓撲視覺化 (P3) -- D1: models.json 集中化 (P3) - ---- - -## 📍 舊狀態 (2026-04-10 下午 飛輪 Telegram 回饋閉環 + 心跳告警排除 ✅) - -### 飛輪 Telegram 回饋閉環 + 心跳排除 - -| Commit | 內容 | -|--------|------| -| `7768924` | 自動修復後移除 Telegram 按鈕(`mark_auto_repaired()`)+ `NoAlertsReceived2Hours` 排除飛輪 | -| `e1dfbed` | `HostHighCpuLoad` `auto_repair: false → true`(Prometheus rules 部署) | - -**根本原因診斷**: -- `GUARDRAIL_BLOCKED` 原因:`alerts-unified.yml` 裡 `auto_repair: "false"` 標籤封鎖所有 HostHighCpuLoad -- Telegram 按鈕不消失:`_push_to_telegram_background` 和 `_try_auto_repair_background` 獨立背景任務,無協調 - -**修正架構**: -- `telegram_gateway.send_approval_card`: 存 `tg_approval:{id}` → Redis -- `telegram_gateway.mark_auto_repaired()`: 新方法 — 移除按鈕 + reply 結果 -- `constants.is_heartbeat_alertname()`: `NoAlertsReceived2Hours` / `Watchdog` 等排除飛輪 - -**E2E 驗收**(2026-04-10 13:36): -``` -ALERT_RECEIVED → AUTO_REPAIR_TRIGGERED ok=True → EXECUTION_COMPLETED ok=True -TELEGRAM_RESULT_SENT ok=True auto_repair_card_updated ✅ (按鈕已移除) -``` - -**CI B5 整合測試**: continue-on-error 暫設,docker cp 方案待驗證 - ---- - -## 📍 舊狀態 (2026-04-10 ADR-068 飛輪冷啟動全閉環 ✅ 首席架構師審查 97/100) - -### ADR-068 飛輪冷啟動斷層修復 — 全閉環 - -| Commit | 內容 | -|--------|------| -| `c6edfb5` | 四階段修復:P1 affected_services / P2 alertname 變體 / P3 Jaccard 豁免 / P4 embedding 持久化 | -| `670cd5d` | 首席架構師審查修正:C1 Repository / C2 Router→Service / I1-I4 / M1 | - -**E2E 驗收**(2026-04-10 03:20): -``` -ALERT_RECEIVED → AUTO_REPAIR_TRIGGERED ok=True → EXECUTION_COMPLETED ok=True → TELEGRAM_SENT -HostHighCpuLoad 匹配 high-cpu-restart PB-20260406-488671 ✅ -``` - -**文件更新**: ADR-068 ✅ | Skill 02 v2.8 ✅ | Memory feedback ✅ | LOGBOOK ✅ - ---- - -## 📍 舊狀態 (2026-04-10 飛輪四階段系統性修復 ✅ E2E 驗收通過) - -### 飛輪冷啟動斷層修復 (c6edfb5 → ab6f6fa) - -| Phase | 根因 | 修復 | 驗收 | -|-------|------|------|------| -| P3 | Jaccard 空集合打 0 → 通用型 Playbook 永不匹配 | `similarity.py` affected_services/severity 空集合豁免 1.0 | ✅ | -| P2 | Redis index 缺少 HostHighCpuLoad 等真實 alertname | Redis 腳本執行 + alert_rules.yaml 擴充 5 條規則 | ✅ | -| P1 | affected_services=[alertname] 污染 + alert_name="custom" | `_extract_affected_services()` + 完整 labels → Signal | ✅ | -| P4 | 重啟後向量快取清空(冷啟動斷層) | `playbook_embeddings` pgvector 表 + 啟動自動重建 18/18 | ✅ | - -**E2E 驗收 log(2026-04-10 03:20):** -``` -ALERT_RECEIVED HostHighCpuLoad -AUTO_REPAIR_TRIGGERED ok=True high-cpu-restart ← 不再 NO_MATCH ✅ -EXECUTION_COMPLETED ok=True PB-20260406-488671 -TELEGRAM_SENT ok=True approval_card -``` - -### 下一步 Backlog -B5 整合測試框架 > B2 前端拓撲補完 > B6 SOUL.md - ---- - -## 📍 舊狀態 (2026-04-10 Phase O-6 視覺化驗收 ✅ + 全 Backlog 閉環) - -### Phase O-6 視覺化驗收 — 全部通過 - -| 項目 | 結果 | -|------|------| -| O-6.1 Grafana 3 dashboards | ✅ ai/infra/nvidia 已存在 | -| O-6.2 service-registry | ✅ 補齊9個K8s部署, prometheus 96%, 0 errors (ab3e266) | -| O-6.3 ADR-053 可觀測性統一架構 | ✅ 已存在 | -| E2E Prometheus 35/35 targets | ✅ | -| E2E Velero daily backup | ✅ | -| E2E API all components | ✅ | -| B1 Sensor Agent stream | ✅ awoooi:signals 活躍 | - -### 下一步 Backlog -B5 整合測試框架 > B2 前端拓撲補完 > B6 SOUL.md - ---- - -## 📍 舊狀態 (2026-04-10 Phase 33 架構審查完成 + RAG 5814 chunks E2E 驗收) - -### ADR-067 Phase 30-34 最終狀態 - -| Phase | 應用 | Commit | 狀態 | -|-------|------|--------|------| -| 30 | Drift 報告中文摘要 (qwen2.5:7b-instruct) | a30713b | ✅ | -| 31 | Log 異常摘要 (deepseek-r1:14b) | 63e840a | ✅ | -| 32 | PR 自動審查 (qwen2.5-coder:7b) | 63e840a | ✅ | -| 33 | RAG 知識庫 pgvector (nomic-embed-text) | cc8cabe | ✅ 5814 chunks 架構審查合規 | -| 34 | 圖片分析 Telegram (llava:latest) | 63e840a | ✅ | - -### Phase 33 架構審查修正 (2026-04-10 cc8cabe) - -首席架構師審查評分: **62/100 → 修正後預估 88/100** - -| # | 問題 | 嚴重度 | 修正 | -|---|------|--------|------| -| C2 | Router 層有業務邏輯 `_run_index()` | Critical | 移入 `KnowledgeRAGService.index_all_sources()` | -| C3 | `glob` 無法掃子目錄 | Critical | `glob → rglob` | -| C4 | docstring 寫 Ollama 188 (實際是 111) | Critical | 修正說明 | -| I2 | 重複索引累積 chunks | Important | `index_document()` 先 `_delete_by_source_id()` | -| I3 | debug endpoint 硬碼 188 IP | Important | 改用 `settings.OLLAMA_URL` | -| I4 | httpx client 未在 shutdown 關閉 | Important | main.py lifespan 加 `close()` | - -**C1 修正 (5c2db65)**: 新增 `rag_chunk_repository.py` — Service 不再直接碰 DB ✅ - -### RAG 知識庫關鍵坑記錄 -- K3s NetworkPolicy v1.3 已封閉 188:11434 → 必須用 `settings.OLLAMA_URL`(111) -- docs/ 被 .dockerignore 排除 → 明確移除排除規則讓 RAG 文件進容器 -- `_run_index()` 業務邏輯屬 Service 層責任 → leWOOOgo 原則 - -### 下一步 -- ~~C1 Repository 層重構~~ ✅ 完成 (5c2db65) -- ivfflat index 建立 (5814 chunks 已超過 100 筆門檻,可手動執行) -- ADR-067 五大應用全完成 → 待議下一個 Sprint - ---- - -## 📍 舊狀態 (2026-04-10 ADR-067 Phase 30-34 全部實作完成 🔄 CD 部署中) - -### ADR-067 Ollama 五大應用 — 實作完成 - -| Phase | 應用 | Commit | 狀態 | -|-------|------|--------|------| -| 30 | Drift 報告中文摘要 (qwen2.5:7b-instruct) | 89015d4 | ✅ 已部署 a30713b | -| 31 | Log 異常摘要 (deepseek-r1:14b) | 63e840a | 🔄 CD 中 | -| 32 | PR 自動審查 (qwen2.5-coder:7b) | 63e840a | 🔄 CD 中 | -| 33 | RAG 知識庫 pgvector (nomic-embed-text 768d) | 63e840a | 🔄 CD 中 | -| 34 | 圖片分析 Telegram (llava:latest) | 63e840a | 🔄 CD 中 | - -- Migration phase28 (rag_chunks) + phase29 (pr_reviews) 已執行 ✅ -- 今天額外完成: Sprint 5.1/5.2 + Phase 27 + nginx-exporter + sensor cron 清理 - ---- - -## 📍 當前狀態 (2026-04-10 ADR-067 Ollama 五大應用批准,Phase 30 即將開始) - -### ADR-067 Ollama 五大應用 — 2026-04-10 統帥批准 - -| Phase | 應用 | 狀態 | -|-------|------|------| -| 30 | Drift 報告中文摘要 (qwen2.5:7b-instruct) | 🔲 Next | -| 31 | Log 異常摘要 (deepseek-r1:14b) | 🔲 | -| 32 | PR 自動審查 (qwen2.5-coder:7b) | 🔲 | -| 33 | RAG pgvector (nomic-embed-text 768d) | 🔲 | -| 34 | 圖片分析 (llava:latest) | 🔲 | - -- pgvector 0.8.2 已在 prod ✅ -- 詳細規格: ADR-067, project_ollama_applications.md - ---- - -## 📍 前一狀態 (2026-04-10 Sprint 5.1 + Phase 27 部署中 🔄) - -### Sprint 5.1 Data Safety Guardrails — 全部確認已部署 - -| 項目 | 狀態 | 備註 | -|------|------|------| -| DB M-002: approval_records MultiSig 欄位 | ✅ 已在 DB | approval_level/votes/required_votes | -| DB M-003: alert_event_type ENUM +8 | ✅ 已在 DB | 18個 event_type | -| ops/config/service-registry.yaml | ✅ 已 commit | BLOCK/CRITICAL_HITL/STANDARD_HITL/AUTO | -| service_registry.py / velero_client.py / preflight_service.py | ✅ 已部署 | Sprint 3 時即已部署 | -| Playbook model 3 安全欄位 | ✅ 已部署 | requires_approval_level/stateful_targets/requires_pre_backup | -| auto_repair_service.py Guardrail 注入 | ✅ 已部署 | StatefulLevel.BLOCK 攔截 | -| alert_operation_log_repository 8 新 event_type | ✅ 已部署 | GUARDRAIL_BLOCKED 等 | -| K8s Velero RBAC | ✅ 已有 | awoooi-executor 已有 list backups 權限 | - -### Phase 27 frequency_snapshot 持久化 - -| 項目 | 狀態 | Commit | -|------|------|--------| -| incidents.frequency_snapshot JSONB | ✅ DB 已建立 | migration 執行 ✅ | -| incident_repository 序列化/反序列化 | ✅ | 9846a6c | -| CD 部署中 | 🔄 run/653 | — | - -**下一步**: CD 完成確認 → 下一 Sprint - -## 📍 當前狀態 (2026-04-10 Sprint 6 A+B+C+D 全完成 ✅) - -### Sprint 6 完整閉環 - -| Phase | 項目 | 結果 | Commit | -|-------|------|------|--------| -| A1 | SSH config 補 120/121 | ✅ | — | -| A2 | CD 狀態確認(正常) | ✅ | — | -| B | Sensor Agent 188+110 systemd service | ✅ active | 31d45f0 | -| C | blast_radius AIBlastRadius→BlastRadius | ✅ | 7e49862 | -| C | AIDataImpact .lower() → DataImpact | ✅ | 0571ad1 | -| C | telegram_chat_id INTEGER→BIGINT (K8s exec) | ✅ | — | -| C | E2E: approval_created_db ✅ + telegram_sent ✅ | ✅ | — | -| D | drift CAST(:param AS jsonb) SQL fix | ✅ | 5d591c4 | -| D | drift k8s/ 打包進 image | ✅ | c132fd4 | -| D | drift_reports DB 寫入驗證 total=1 | ✅ | — | - -**下一步**: Telegram 批准按鈕真實 E2E(需要統帥點按鈕驗收)/ 其他 Backlog - ---- - -## 📍 當前狀態 (2026-04-10 Sprint 6 Phase A+B+C 進行中) - -### Sprint 6 C — Telegram E2E + blast_radius bug 修復 - -| 項目 | 結果 | Commit | -|------|------|--------| -| SSH config 補 120/121 | ✅ | — | -| CD 狀態確認(正常,無積壓) | ✅ | — | -| Sensor Agent 188 systemd service | ✅ active | — | -| Sensor Agent 110 systemd service | ✅ active | — | -| E2E 注入告警 → signoz_telegram_sent | ✅ | — | -| blast_radius AIBlastRadius→BlastRadius bug | ✅ 修復 | 7e49862 | -| CD 部署 7e49862 | 🔄 進行中 | — | - -**下一步**: CD 完成後重跑 E2E 驗收 - ---- - -## 📍 當前狀態 (2026-04-10 Sensor Agent B1 部署完成 ✅) - -### Sprint 6 B — Sensor Agent 兩台主機部署 - -| 主機 | 狀態 | 採集週期 | Redis | -|------|------|---------|-------| -| 192.168.0.110 (wooo) | `active (running)` systemd user service | 30s | awoooi:signals DB10 | -| 192.168.0.188 (ollama) | `active (running)` systemd user service | 30s | awoooi:signals DB10 | - -- 三層採集:NodeMetrics + Journal + ServiceProbe 全正常 -- systemd enable → 開機自啟 -- 部署路徑:`~/awoooi-sensor/agent.py --loop --interval 30` - -**下一步**: C — Telegram E2E 批准閉環真實測試 / D — drift CronJob 診斷 - ---- - -## 📍 當前狀態 (2026-04-10 Sprint 5R Phase 3 完成 ✅) - -### Sprint 5R Phase 3 — Command Palette + 主機抽屜 - -| 項目 | 內容 | Commit | -|------|------|--------| -| ⌘K Command Palette | 全局指令面板,高斯模糊背景,9頁導航+Terminal快速動作,↑↓/Enter/Esc,100% i18n | 89db96f | -| 主機卡點擊抽屜 | 行內展開:CPU/RAM大字+服務清單(port/latency)+相關事件,✕關閉,選中藍框 | 5244235 | -| i18n commandPalette | zh-TW + en 兩語言完整 | 89db96f | - -**下一步**: Backlog B1 Sensor Agent / B5 整合測試 / 或統帥指示 - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5R Phase 2 完成 ✅) - -### Sprint 5R Phase 2 — Tab 3 COT + Tab 4 MTTR - -| 項目 | 內容 | Commit | -|------|------|--------| -| Tab 3 Chain-of-Thought 面板 | 點擊 SSE 事件展開 COT(provider/confidence/latency/tools/reasoning),COT badge | ab5ba70 | -| Tab 4 by_anomaly Top 5 | 水平進度條 + auto_rate 著色(≥80% 綠/≥50% 橙/其他紅) | ab5ba70 | -| Tab 4 MTTR | 大字顯示秒→分鐘換算,無資料 fallback | ab5ba70 | -| by_anomaly API 結構修正 | 適配真實欄位 `disposition.total` / `alert_name` / `anomaly_key` | af7b6be | -| i18n 插值修正 | `byAnomalyAutoRate` 補 `{pct}%` 插值,`mttrUnit` 改「分鐘」 | 764dcf2 | -| QA 驗證 | Tab 4 截圖確認真實資料渲染正確 | — | - -**下一步**: ⌘J Command Palette / 其他 Backlog 功能 - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5R 架構審查 + QA 全驗收 ✅) - -### Sprint 5R 完整閉環 - -| 階段 | 內容 | Commit | -|------|------|--------| -| 架構審查 (首席架構師) | 9 項問題發現:P0 import crash / i18n 10 個 hardcode / fake data / silent error | — | -| P0 修復 | `proposal_service.py` 補 `get_redis` + `INCIDENT_KEY_PREFIX` import | 890e2a9 | -| P1 i18n | 拓撲群組移除 emoji,host labels / ai-model-status / disposition / recent-activity 全走 i18n | 890e2a9 | -| P2 品質 | pending-approvals 靜默錯誤修復 + page-tabs 載入中 i18n + ↑5% 動態化 | 890e2a9 | -| Linter 強化 | pending-approvals 防重複點擊 + loading 狀態 | 896bef9 | -| CORS 修復 | `config.py` 補 K3s NodePort 3 個 origin | 8c2983b | -| sign body 修復 | `signer: 'web-ui'` → `signer_id/name: CURRENT_USER` (修前: 403/422) | 8c2983b | -| host_aggregator | 四台主機 probe 端點錯誤 → 全部顯示 unhealthy 修正 | 21567a7 | -| QA 全頁面驗收 | **9/9 通過**,無假資料,HTTP 200,真實 API 資料 | — | - -**下一步**: 下次 Session 繼續 Sprint 5R Phase 2 (Chain of Thought / MTTR 趨勢 / ⌘J Palette) - ---- - -## 📍 當前狀態 (2026-04-09 E2E 驗證 + K8s executor 連線修復) - -| 項目 | 結果 | Commit | -|------|------|--------| -| 部署驗證 (新版本) | ✅ `a4d6b3f3` → `34f0228` 全 Pod Running | — | -| DB migration telegram_message_id | ✅ K8s Job 執行成功,欄位存在 | 34f0228 | -| action 解析根本 bug | ✅ `RESTART_DEPLOYMENT` 成功解析 (以前 skip) | ae97808 | -| K8s ClusterIP 10.43.0.1 不可達 | ✅ `K8S_API_SERVER_URL=https://192.168.0.120:6443` 覆蓋 | 34f0228 | -| kubectl 實際執行 | ✅ `awoooi-worker` rollout restart `success=True` | 34f0228 | -| Telegram 按鈕移除邏輯 | ✅ code review 確認正確 | 1483218 | - -**根本問題**: K3s Pod 內 iptables/kube-proxy 未把 10.43.0.1 流量導到實際 API server -**修法**: executor.py 讀 `K8S_API_SERVER_URL` env 覆蓋 in-cluster host - -**下一步**: Sprint 5R Web 截圖驗收 - ---- - -## 📍 當前狀態 (2026-04-09 批准執行閉環修復 + TG 訊息持久化 + AI 鏈路透明化) - -| 項目 | 修法 | Commit | -|------|------|--------| -| **根本Bug: 批准後永遠不執行** | Nemotron tool 回填 `kubectl_command` | 2c7d5d0 | -| **根本Bug: action="未知操作"** | proposal_service 優先用 kubectl_command | ae97808 | -| **TG 按鈕按後無回應** | `_notify_approval_result()` reply 狀態行 | 1483218 | -| **message_id 僅 Redis 24h** | approval_records 加 telegram_message_id 欄位 | 1483218 | -| **AI 鏈路不透明** | TG 訊息顯示模型/後端 (Ollama/NIM/Gemini) | d8c2969 | -| **Ollama 取代 NVIDIA NIM** | OllamaToolProvider llama3.1:8b,44s→4s | 7857c25 | -| 5 筆孤兒 OBSERVE approval | 直接 EXPIRED 清理 DB | — | - -**根本問題鏈**: -``` -Nemotron→restart_deployment(sentry) → 只存 nemotron_tools[] → kubectl_command="" → -approval_records.action="未知操作 | " → parse_operation_from_action→None → -execute_approved_action SKIP → 幾個月來批准/拒絕按鈕完全無效 -``` - -**下一步**: 部署驗證 → 新告警完整執行閉環測試 - ---- - -## 📍 當前狀態 (2026-04-10 Sprint 5R 前端重構 13/14 完成 — CD 部署中) - -| 步驟 | 內容 | Commit | 狀態 | -|------|------|--------|------| -| S11 | Tab 2 approvals API 修正 | 289dac6 | ✅ | -| S12 | 安全合規/知識庫/拓撲圖修復 | 289dac6 | ✅ | -| S1 | KPI Strip 5 張卡片 | 7a2e07f | ✅ | -| S4 | 處置統計環形圖 | b85a0e2 | ✅ | -| S5 | 最近活動時間線 | b85a0e2 | ✅ | -| S6 | OpenClaw AI Terminal | a0f3a7d | ✅ | -| S7 | 待審批任務 | 895784e | ✅ | -| S9 | AI 模型狀態 2×2 | 895784e | ✅ | -| S10 | 監控工具 3×2 | 895784e | ✅ | -| S8 | 拓撲群組 2×2 + 主機 4 台 | 03b07d5 | ✅ | -| S2 | FlowPipeline OpenClaw icon | 09c6eb3 | ✅ | -| S3 | AI 提案橫幅確認 | 09c6eb3 | ✅ | -| G1 | 骨架屏取代載入中 | 49a15e1 | ✅ | -| CD 部署驗收 | 截圖對比設計稿 | — | 🔄 | - -**設計稿**: `.playwright-mcp/sprint5r-approved-design.html` -**ADR**: ADR-065 -**下一步**: CD 完成 → 截圖對比 → 統帥驗收 - ---- - -## 📍 當前狀態 (2026-04-09 自動修復全鏈路完整閉環 — 雙主機 E2E 驗證) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Bug #1 Jaccard 門檻阻擋 alert_exact_match | ✅ | af49a54 | -| Bug #2 NameError get_alert_operation_log_repository | ✅ | e4070b2 | -| Bug #3 _extract_symptoms 用 alert_name="custom" | ✅ | fc03eb1 | -| Bug #4 Signal.labels 缺 alertname key | ✅ | 1d88b7c | -| Bug #5 target_resource 未優先用 component label | ✅ | 1fb0c0c | -| Bug #6 Dockerfile 無 openssh-client | ✅ | 1fb0c0c | -| Bug #7 sentry 未在 service-registry 定義 | ✅ | 1fb0c0c | -| Bug #11 NetworkPolicy 缺 port 22 egress (110+188) | ✅ | 07a097c | -| Bug #12 Deployment 缺 fsGroup=1000 | ✅ | 77f2da9 | -| 8 個新 Playbook 自動產生+APPROVED | ✅ | API | -| repair-bot-188.sh 新增 momo/tsenyang/bitan | ✅ | 188主機 | -| repair-bot-110.sh 新增 stock-platform | ✅ | 110主機 | -| known_hosts 110+188 Secret 更新 | ✅ | kubectl | -| openclaw-down-repair 修正 docker-110→docker-188 | ✅ | API | -| service-registry 新增 signoz/bitan-app | ✅ | 07a097c | - -**E2E 雙主機驗證**: -- docker-110: SentryDown → REPAIR_OK:sentry (6208ms) ✅ -- docker-188: MoWoooWorkDown → REPAIR_OK:momo-app (3791ms) ✅ - -**Playbook 覆蓋**: 20 個 (含 8 個 auto-generated,全部 `auto_repair=true` 告警已覆蓋) -**下一步**: Sprint 5R 前端重構 (S11→S12→S1-S10→G1) - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5.2 全面完成 + 自動修復閉環) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| docker-health-monitor 升級自動修復 | ✅ | 8d0042e | -| L2-2 alerts-unified 14條規則 | ✅ | b43e1f1 | -| Nemotron placeholder 修復 | ✅ | d467fc1 | -| decision_manager resolved 不重送 | ✅ | b66263a | -| target_down 自動重啟 exporter | ✅ | b43e1f1 | -| Plan B exporters 188 全 UP | ✅ | — | -| Plan C Blackbox 13 targets 全 UP | ✅ | — | - -**自動修復鏈路閉環**: 容器 down → cron 偵測 → docker restart → 回報 API → Telegram -**下一步**: ADR-064 L1 Redis 分散式鎖(技術債,P3) - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5 全面完成 + 監控告警修復) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| C1 殘留 i18n 5 處 (badge/toggle) | ✅ | 28d2ff7 | -| I3 Approve/Reject API 串接 | ✅ | 4a94588 | -| I4 SIGNOZ_URL 改環境變數 | ✅ | 4a94588 | -| I5 ErrorsPanel nothing-gray | ✅ | 4a94588 | -| C4 TOOL_EMOJI → Lucide icon | ✅ | 5800533 | -| RedisMemoryHigh 誤報修正 (÷0) | ✅ | 85d4857 | -| node-exporter 部署 110+188 (Docker) | ✅ | 手動 | -| HostDown ×2 告警消除 | ✅ | 自動 | -| Prometheus 0 firing alerts | ✅ | — | -| 所有 Incidents 關閉 | ✅ | API | - -**Sprint 5 審查修正清零**: C1-C4 + I1-I5 全部修正完成 -**下一步**: Sprint 5.2 docker-health-monitor 部署 / alerts-unified L2-2 - ---- - -## 📍 當前狀態 (2026-04-09 Telegram 截斷根因修復 + Panel 全面抽取) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| `建議: kubectl rollout restart deployment/` 截斷根因修復 | ✅ | c5e4751 | -| telegram_gateway.py `[:35]→[:80]` | ✅ | c5e4751 | -| decision_manager.py enum string 補正 (用規則引擎查 kubectl) | ✅ | c5e4751 | -| Panel 全面抽取完成 (13 個 Panel) | ✅ | fb66ecd | -| /observability 5 Tab 全 Panel | ✅ | fb66ecd | -| /automation 3 Tab 全 Panel | ✅ | fb66ecd | -| /operations 5 Tab 全 Panel | ✅ | fb66ecd | -| CD 部署驗證 | 🔄 | 進行中 | - -**根本根因**: `suggested_action[:35]` = 35 字剛好截到 `deployment/` 後,name 永遠空白 -**下一步**: 等 CD 完成 → 驗收新告警顯示格式 → 關閉舊 Incident - ---- - -## 📍 當前狀態 (2026-04-09 Alert Rule Engine + Ollama M1 Pro + 首席架構師審查) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Ollama 切換 188→111 (M1 Pro, 0.45→40+ tok/s) | ✅ | 多個 | -| deepseek-r1:14b (RCA) + gemma3:4b (summary) | ✅ | f32b077 | -| Gemini fallback for NIM 完全失敗 | ✅ | d80153b | -| 告警規則引擎 alert_rules.yaml + alert_rule_engine.py | ✅ | d1ede7f | -| AI 自動規則學習 (generic_fallback 觸發) | ✅ | 71437db | -| 首席架構師審查 63/100 → 6 個問題修復 | ✅ | 本次 | -| ADR-064 Alert Rule Engine | ✅ | 本次 | -| Skills 02/03 更新 | ✅ | 本次 | -| model_registry fallback 同步更新 | ✅ | 89da2d2 | -| K8s 部署驗證 (image 89da2d2) | ✅ | 2 Pod Running | - -**已知技術債**: 多 Pod 規則重複生成(ADR-064 L1),lru_cache 跨 Pod 不同步(ADR-064 L2) - -**下一步**: 前端重設計整合頁面 Panel 抽取 (解決雙重 AppLayout) - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5.2 全面監控 + Alert Op Log API + 效能修復) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Plan A: docker-health-monitor 110+188 */5 | ✅ | 0e6c4b8 | -| Plan B: pg/redis exporter 確認 UP | ✅ | — | -| Plan C: 5 條外部網站告警規則 | ✅ | 9799a14 | -| Alertmanager telegram-direct fallback | ✅ | 7e327c8 | -| pg-backup.sh 每 6h 188 cron | ✅ | f98be41 | -| DR Drill cron 121 月第一週日 03:00 | ✅ | 手動 | -| 188 CD 自動同步 ops scripts | ✅ | c51d7ef | -| alert_operation_log API (list/stats) | ✅ | 5ea6c3f | -| /alert-operation-logs 前端頁面 | ✅ | 5ea6c3f | -| incidents 效能修復(Redis cache + fire-and-forget) | ✅ | 4b3fdd8 | -| Panel 抽取全面完成(雙重 AppLayout 修正) | ✅ | fb66ecd | -| **CD 部署 run #586** | 🔄 | fb66ecd2 | - -**下一步**: CD 完成 → API 驗收 → 告警鏈路 E2E 驗收 - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5 首席架構師審查 P0 修正完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| 首席架構師審查 | 72/100 有條件通過 | — | -| C1: 首頁 i18n 30+ 處 | ✅ 修正 | 7153395 | -| C2: 拓撲 i18n 10+ 處 | ✅ 修正 | 9e10305 | -| C3: Loading 改 LobsterLoading | ✅ 修正 | 7153395 | -| I1: 100ms 輪詢改 popstate | ✅ 修正 | 7153395 | -| I2: 13 Panel 全部抽取 (雙重 AppLayout) | ✅ 修正 | 7934ade | -| C4: TOOL_EMOJI (pre-existing) | 📝 後續 | — | - -**下一步**: Re-Review → 驗收 - ---- - -## 📍 當前狀態 (2026-04-09 Sprint 5 前端重設計完成 + 部署中) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Phase 0: 安裝 React Flow + elkjs + /classic | ✅ | 11ff517 | -| Phase 1: 首頁 4-Tab + Sidebar 精簡 6+2+經典 | ✅ | eaa6102 | -| Phase 2: React Flow 拓撲圖元件 (7 新檔) | ✅ | d276b39 | -| Phase 3: 5 個整合頁面 (觀測/自動/營運/安全/知識) | ✅ | 1413804 | -| Phase 4: 舊路由並存 | ✅ | 9188e49 | -| Sidebar label + Tab 同步 + 龍蝦動畫 + 效能優化 | ✅ | 多個 | -| OpenClaw 風格龍蝦 SVG (三色: 紅/綠/黃) | ✅ | 65e1edb | -| service_registry Docker 安全降級 | ✅ | c9f1bcd | -| 拓撲圖 Toggle 整合到首頁 | ✅ | 030f4f7 | -| 測試修正 (nemotron + smart_router) | ✅ | 多個 | -| **CD 部署** | 🔄 | 進行中 | - -**下一步**: CD 完成 → 統帥驗收 → 整合頁面 Panel 抽取 (解決雙重 AppLayout) - ---- - -## 📍 當前狀態 (2026-04-08 Sprint 5.1 L1-L5 + Review 修正完成) - -| 項目 | 狀態 | Commit | -|------|------|--------| -| Sprint 5.1 L1-L5 全部實作 | ✅ | 88696db | -| 首席架構師審查(70/100→修正) | ✅ | 0f5fecf | -| DB Migration M-002/M-003(已在 188 執行) | ✅ | — | -| service-registry.yaml(21 個服務分級) | ✅ | 88696db | -| 三個新 Service(registry/velero/preflight) | ✅ | 0f5fecf | -| Guardrail 注入 auto_repair_service | ✅ | 0f5fecf | -| ALERT_RECEIVED + auto_repair flag webhooks | ✅ | 0f5fecf | -| T1-T6 Telegram 通知 | ✅ | 0f5fecf | -| docker-health-monitor.sh 純感知層 | ✅ | 88696db | -| ADR-062/063 | ✅ | 6f7a4be | - -**當前焦點**: Sprint 5.1 L7 E2E 驗收(CD 部署後執行) -**待完成**: L2-2 alerts-unified.yml + docker-health-monitor 部署到 110/188 + E2E 驗收 -**Sprint 5.2**: Plan A(docker-health-monitor 部署)/ Plan B(Exporter)/ Plan C(Blackbox) - ---- - -## 📊 里程碑總覽 (壓縮版) - -### 2026-04-08 — Sprint 5.1 L1-L5 實作 + 首席架構師審查修正 - -- L1: DB Migration M-002(approval_records MultiSig)/ M-003(ENUM 8個新值)在 188 執行完畢 -- L2-1: ops/config/service-registry.yaml 建立(21 個服務,BLOCK/CRITICAL_HITL/STANDARD_HITL/AUTO) -- L3: service_registry.py / velero_client.py / preflight_service.py 三個新服務 -- L4: Guardrail 注入 auto_repair_service + ALERT_RECEIVED/auto_repair flag webhooks + MultiSig DB model -- L4-6: docker-health-monitor.sh 改造為純感知層(移除所有 docker restart) -- L5: telegram_gateway T1-T6 六個新通知方法(Guardrail/Pre-flight/Backup/MultiSig/ChangeApplied) -- 首席架構師審查 70/100 → 修正 S1×4 S2×2 S3×1 → 預計 90+/100 - - structlog 取代 logging(三個新 service) - - now_taipei() 取代 datetime.now(UTC) - - Guardrail 失敗改為保守拒絕(不放行) - - velero kubectl apply CRD 修正(原語法錯誤) - - T1-T6 補齊 try/except - - Langfuse URL 改用 settings.LANGFUSE_URL - -### 2026-04-08 — Sprint 5.1 資料安全護欄規劃完成 - -- 11 項首席架構師決策(Q1-Q11)完成 -- 服務分級(BLOCK/CRITICAL_HITL/STANDARD_HITL/AUTO)確立 -- Pre-flight 備份檢查機制設計完成 -- MultiSig 雙簽機制設計完成 -- ADR-062 Data Safety Guardrails 批准 -- ADR-063 Service Registry IaC 批准 -- 完整實施方案 + 規範驗證通過(P1-P5 問題修正) -- 關鍵發現:Playbook 存於 Redis(非 PostgreSQL),修正 M-001 方向 - -### 2026-04-08 — 全面監控+操作溯源架構 - -- 自動修復移除所有 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+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→前端→首頁→週報) -- 首次信任機制 (冷啟動破解) - -### 2026-04-06 — 四個網站修復+監控 - -- mo.wooo.work / www.tsenyang.com / stock.wooo.work / bitan.wooo.work 全部修復 -- Prometheus blackbox-http 新增 3 target -- nginx 110/188 路由修正 - -### 2026-04-05 — Phase 25 Review + ADR-057~059 + 備份 - -- 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-04-04 — Phase 25 驗證 + 自動修復閉環 - -- Phase 25 P0/P1/P2 全部驗證通過 (36/36 tests) -- 自動修復閉環打通 (Playbook→RAG→執行→KM沉澱) -- Ollama embedding is_closed 修復 -- phase8/9 DB migration prod 執行完成 - -### 2026-04-03 — Phase 24 + Monitoring Wave D + Layout - -- Phase 24 AI Provider Registry 全面完成 (Phase A→C) -- Monitoring Wave D: Grafana 3 dashboards + ClickHouse TTL -- Layout 對齊修復 (sidebar/header/metrics) -- 首席架構師 Review 88/100 - -### 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 - -### 2026-04-01 — Phase R 完整審查 + Phase 11 驗收 - -- Phase R ADR-047: 97/100 OUTSTANDING -- Phase 11 統帥驗收: ✅ 批准 -- R4-129 webhooks.py AlertAnalyzer 遷移 (-243行) -- ADR-046 IncidentConverter 型別統一 - -### 2026-03-31 — Phase 22 Nemotron + Telegram 重設計 - -- Phase 22 雙 AI 對話 + NemotronCollabService -- Phase 10.2 Session Replay 完成 -- Telegram 訊息格式 v7.0 重設計 -- NVIDIA NIM 整合 + Gemini fallback - -### 2026-03-29~30 — Monitoring + Gitea CI/CD - -- Monitoring 主計畫 Wave A-C 批准+執行 -- ADR-039 Gitea CI/CD 遷移完成 -- 前端內網 IP 禁令確立 -- NEXT_PUBLIC_* build-time 變數規範 - -### 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) - -### 2026-03-27 — Phase 16~18 完成 - -- Phase 16 架構大掃除 R1-R4 (50/50 OUTSTANDING) -- Phase 17 技術債清理 -- Phase 18 E2E Hardening (9.2/10) -- Phase 10.2 Sentry Telegram 通知+去重 - -### 2026-03-26 — Phase 13~15 完成 - -- Phase 13 Enterprise AIOps (6 MCP Tools + Router) -- Phase 14 紅區治理+依賴防護+共用型別 -- Phase 15 LLMOps (Langfuse+DeepLink+取樣) - -### 2026-03-25 — Phase 11+12 批准+開工 - -- Phase 11 對話式 AI 批准+實作 -- Phase 12 Ollama Tool Calling 100% - -### 2026-03-24 — Phase 6.5 + QA + Sentry - -- Statistics API 6 端點 -- Mock 測試全面禁止鐵律 -- Sentry Self-Hosted 整合 -- Phase 8 QA + 緊急修復 - -### 2026-03-23 — Phase 6.4 + Phase 9 - -- Decision Proposal API + Guardrails -- Agent Teams + ConsensusEngine 90/90 -- 技術債清理 (44 未用 import + 22 i18n) - -### 2026-03-22 — Phase 6 認知覺醒 - -- Event Bus (Redis Streams) 通電 -- Memory Layer (Redis + PostgreSQL) 雙層 -- Incident Engine v1 (聚合+GraphRAG+去重) -- Redis Multi-Sig 分散式鎖 - -### 2026-03-20~21 — Phase 0-4 MVP - -- Phoenix Rising 基建部署 -- BFF Gateway + 原子組件庫 -- SSE 前後端整合 + HITL 授權卡片 -- i18n 雙語引擎 135 鍵值 - ---- - -## 📊 專案統計 (截至 2026-04-07) - -| 指標 | 數值 | -|------|------| -| 已完成 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 筆歷史 + 即時寫入 | +| NetworkPolicy ClusterIP 10.43.16.201/32 | ArgoCD 重裝需更新 | +| `_collect_mcp_context` Provider 直接實例化 | 待 DI 化(I2)| +| B3 Phase 15.5 Trace Context UI | 統帥裁示暫緩 | +| A-3 bitan Docker 化 | P3 低優先 |