AWOOOI CD
|
f9b052d648
|
chore(cd): deploy 0ab92c2 [skip ci]
|
2026-04-17 05:37:19 +00:00 |
|
OG T
|
0ab92c20d6
|
fix(telegram): root_cause 截斷上限 300→500 — 修復「質疑:無(通」幽靈重現
CD Pipeline / build-and-deploy (push) Successful in 10m31s
根因:debate_summary 結構為「診斷(≤220字);方案;安全審查;質疑」
診斷假設長時總長超過 300 chars → root_cause 截斷在「通」字
修復:300 → 500(Telegram 單卡 4096 限制,安全)
2026-04-17 ogt + Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 13:28:16 +08:00 |
|
OG T
|
58d9c0637a
|
fix(drift): drift_narrator 改用 OpenClaw AI Router — 修復「研判原因」空白
根因:drift_narrator_service.py 的 _generate_narrative() 直接呼叫
Ollama httpx (192.168.0.111:11434),繞過 AI Router,無 fallback。
192.168.0.111 為死亡 IP → httpx 連線失敗 → 降級 fallback_narrative()
→ fallback 中 interpretation.explanation 存在但顯示層截斷 → 空白
修復:改用 get_openclaw().call(prompt),統一走 AI Router
同 drift_interpreter.py 的修法(d952435)
移除 unused httpx import
2026-04-17 ogt + Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 13:28:16 +08:00 |
|
AWOOOI CD
|
0247058d92
|
chore(cd): deploy 5dae610 [skip ci]
|
2026-04-17 05:26:42 +00:00 |
|
OG T
|
5dae6108fb
|
fix(cd): rebase 衝突改 -X theirs,kustomization.yaml 永遠採用當次 image tag
CD Pipeline / build-and-deploy (push) Successful in 10m47s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 13:17:20 +08:00 |
|
AWOOOI CD
|
2f3d2faf4d
|
chore(cd): deploy ce731c8 [skip ci]
|
2026-04-17 04:49:52 +00:00 |
|
OG T
|
e0bfcc7bd6
|
fix(phase5): 修復 Solver action 格式 — 強制輸出 kubectl 命令
CD Pipeline / build-and-deploy (push) Failing after 9m33s
根因:_build_prompt() 的 action 範例為 "restart_service:awoooi-api"(自訂格式),
LLM 模仿此格式輸出自然語言描述而非 kubectl 命令。
影響鏈:
Solver action = 自然語言描述
→ auto_approve Condition 1c 拒絕(無 kubectl 關鍵字)
→ _auto_execute() 永不被調用
→ blast_radius_calculator 永不被調用
→ blast_radius_score fill rate = 0/14 = 0%(Phase 5 驗收指標未達)
修復:
1. blast_radius 參考從抽象描述改為實際 kubectl 命令示例
2. 明確要求 action 欄位必須是真實 kubectl 命令(不可用自然語言)
3. 正確範例:kubectl rollout restart deployment/awoooi-api -n awoooi-prod
預期效果:LLM 輸出 kubectl 命令 → auto_approve 通過(低 blast_radius 情境)
→ blast_radius_calculator 被調用 → fill rate 趨向 100%
2026-04-17 ogt + Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 12:44:36 +08:00 |
|
OG T
|
ce731c8ceb
|
fix(ci): volume mount 不可 rm -rf,改 find -mindepth 1 -delete
CD Pipeline / build-and-deploy (push) Failing after 2m41s
/opt/api-venv 是 Docker volume mount,刪目錄本身會 Device or resource busy
改清空內容保留 mount point
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 12:26:37 +08:00 |
|
OG T
|
b7c2b691bb
|
fix(p2-backlog): 修復 suggested_action「待分析」— action 空時 fallback 到 description
CD Pipeline / build-and-deploy (push) Failing after 1m26s
根因:_push_decision_to_telegram() 的 suggested_action 只有兩條路:
- action 有值 → 顯示 action[:120]
- action 空 → 顯示「待分析」
但 _package_to_proposal_data() 已從 hypothesis 組出 description
(含「根因:...(信心 X%);方案:...」),此時 action="" 卻還是顯示「待分析」
導致 SRE 在 Telegram 卡片看不到 AI 的診斷結論。
修復:action 空時,優先用 description[:120] 作為 suggested_action
(description 已包含根因摘要,比「待分析」有意義)
fallback chain: action → description → "待分析"
2026-04-17 ogt + Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 11:48:49 +08:00 |
|
OG T
|
78b9bfa2ac
|
ci: 觸發 pipeline 驗證 python3.11 runner image + 快取
|
2026-04-17 11:43:24 +08:00 |
|
AWOOOI CD
|
f5ca9bfb1b
|
chore(cd): deploy 0388e50 [skip ci]
|
2026-04-17 03:30:44 +00:00 |
|
OG T
|
0388e50d0e
|
fix(p1-backlog): 修復「待分析」死結與 Telegram 訊息截斷
CD Pipeline / build-and-deploy (push) Successful in 30m25s
問題 1:REQUEST_REVISION → 待分析
根因:safe_candidates=[] → selected=None → recommended_action=None
→ decision_manager action="" → TG 卡顯示「待分析」(資訊流斷裂)
修復 coordinator_agent.py:
無安全候選時回退至 Solver 原始最優方案
標記「[Reviewer 未核准,僅供參考] {action}」
SRE 永遠能看到 AI 建議,資訊流絕不中斷
問題 2:debate_summary 在 (blast_radius... 中間截斷顯示 (bl
根因:root_cause=reasoning[:150] — 150 字元對中文 debate_summary 過短
修復 decision_manager.py:
root_cause 截斷 150 → 300
suggested_action 截斷 80 → 120
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 11:12:02 +08:00 |
|
AWOOOI CD
|
00e9fb8d4b
|
chore(cd): deploy d952435 [skip ci]
|
2026-04-17 02:46:34 +00:00 |
|
OG T
|
d952435b60
|
fix(drift): 改用 OpenClaw AI Router 取代 Ollama httpx 直連
CD Pipeline / build-and-deploy (push) Successful in 32m34s
根因:_call_nemotron() 直接呼叫 Ollama httpx(settings.OLLAMA_URL)
繞過 AI Router,無 fallback → "All connection attempts failed"
→ Telegram 卡顯示「意圖分析失敗:All connection attempts failed」
修復:改走 get_openclaw().call(prompt)
自動享有 Provider 降級與 fallback 機制(與其他 Agent 一致)
廢棄:BUG-001 httpx 直連繞過法(nvidia_provider 介面已穩定)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 10:27:39 +08:00 |
|
OG T
|
0c15fa5988
|
refactor(decision): 狀態機重構 — YAML NO_ACTION 閘門上移至決策路由中樞
CD Pipeline / build-and-deploy (push) Has been cancelled
架構師指令(2026-04-17):通知層禁止查詢業務邏輯。
撤銷 c05bcdb 的 inline YAML 查詢(義大利麵補丁),
將 NO_ACTION / INVALID_TARGET 判斷移至正確位置。
重構方向:
① 移除 _push_decision_to_telegram() 的 inline YAML 查詢
→ 通知層只做 blocked_reason → NotificationType 轉譯(Single Responsibility)
② 新增 decide() 第 4c 步:YAML NO_ACTION 路由閘門
位置:_dual_engine_analyze() 返回後、auto_approve.evaluate() 之前
邏輯:
- NO_ACTION → blocked_reason="YAML: NO_ACTION" + is_informational_only=True
→ 短路跳過 auto_approve + Blast Radius → TYPE-1(或 critical → TYPE-4)
- INVALID_TARGET → blocked_reason="INVALID_TARGET-..." → 短路 → TYPE-4
- 閘門查詢失敗 → 靜默降級,繼續正常流程
Checkpoint 覆蓋:
CP1 上移 YAML 評估層 ✅
CP2 短路跳過 auto_approve ✅
CP3 通知層純粹轉譯 ✅
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 10:20:01 +08:00 |
|
OG T
|
c05bcdbbd4
|
fix(decision): inline YAML NO_ACTION 補查 — 修復 Phase 2 路徑盲點
CD Pipeline / build-and-deploy (push) Failing after 4m0s
根因:Phase 2 (agent debate → auto_approve 拒絕 → 直接推 TG) 不經過
auto_execute() 的 YAML check,Coordinator 不設 blocked_reason。
PostgreSQL disk / host resource 等 NO_ACTION 規則告警在 Phase 2
路徑仍顯示「ACTION REQUIRED」卡片(TYPE-3),而非 TYPE-1 資訊卡。
修復:_push_decision_to_telegram() 在 blocked_reason 為空時,補做一次
alertname inline YAML 查詢,任何路徑(Phase 2 / Expert / Webhook)
都能正確偵測 NO_ACTION → TYPE-1 / critical NO_ACTION → TYPE-4。
生產驗證觸發:INC-20260416-C365D0 PostgreSQL disk alert 顯示 ACTION REQUIRED
而非 TYPE-1,確認全景 Code Review 遺漏此執行路徑。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-17 10:15:28 +08:00 |
|
AWOOOI CD
|
f9d08de3a2
|
chore(cd): deploy 149065e [skip ci]
|
2026-04-16 16:05:05 +00:00 |
|
OG T
|
149065e3de
|
perf(e2e): CI smoke test 改 retain-on-failure 降低錄影 overhead
CD Pipeline / build-and-deploy (push) Successful in 51m8s
E2E Health Check / e2e-health (push) Successful in 3m18s
video/screenshot 從 'on' 改為 retain-on-failure/only-on-failure
CI 遠端 smoke test 預計從 13min+ 降至 ~1min
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 23:44:20 +08:00 |
|
AWOOOI CD
|
a6a1d4d95c
|
chore(cd): deploy 83ab5e3 [skip ci]
|
2026-04-16 15:24:24 +00:00 |
|
OG T
|
83ab5e32d7
|
fix(happy-path): Happy Path 全境加固 — INVALID_TARGET + critical NO_ACTION + 空指令攔截
CD Pipeline / build-and-deploy (push) Has been cancelled
問題 1 (P0) — deployment/unknown 無效重啟:
- alert_rule_engine: 追蹤 _invalid_target flag,回傳 blocked_reason="INVALID_TARGET-..."
- decision_manager: auto_execute 路徑偵測 INVALID_TARGET → 提早返回 + TYPE-4 人工確認
- auto_approve: 新增條件 1c — action 為空字串直接拒絕,防止誤報「即將執行」
問題 2 (P1) — critical+NO_ACTION 靜默:
- decision_manager: blocked_reason 感知層重構
① INVALID_TARGET → TYPE-4
② NO_ACTION + critical → TYPE-4(升級,SRE 不可錯過)
③ NO_ACTION + 非 critical → TYPE-1(維持純資訊卡)
問題 3 (P1) — 規則匹配信心黑洞:
- auto_approve 條件 1c 確保空 action 不通過 auto-approve
即便 is_rule_based=True 也無法在無指令時自動執行
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 22:57:50 +08:00 |
|
OG T
|
0077ff9758
|
fix(solver): 傳遞 hypothesis 作為 alert_context 給 OPENCLAW_NEMO
CD Pipeline / build-and-deploy (push) Has been cancelled
根因:solver 呼叫 openclaw.call(prompt) 不傳 context
→ nemo fallback 把 prompt[:500](系統說明「軍師 Agent」)
當 signal description → LLM 回傳垃圾方案描述
修復:把 top.description 放進 alert_context.signals
讓 nemo 看到真實根因假設(與 diagnostician 同模式 7eb8375)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 22:51:30 +08:00 |
|
OG T
|
92b39ab840
|
fix(no-action-notify): YAML NO_ACTION 告警改為 TYPE-1 資訊通知(移除無意義審核按鈕)
CD Pipeline / build-and-deploy (push) Has been cancelled
根因:
- host_resource/postgresql_disk_monitoring YAML 規則設 NO_ACTION
- 但 classify_notification() 不知道 NO_ACTION
- confidence=0.2(感應器無資料)→ 判為 TYPE-4(信心不足需人工審核)
- SRE 看到「審核批准/拒絕」按鈕,卻沒有任何自動修復動作可執行 → 毫無意義
修復:
- _push_decision_to_telegram 偵測 blocked_reason 含 "NO_ACTION"
- 強制 _notif_type = TYPE-1(純資訊通知,無審核按鈕)
- SRE 看到資訊卡「主機 CPU/負載/磁碟告警 (觀察即可)」而非假的審核請求
2026-04-16 ogt + Claude Sonnet 4.6 (台北時區)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 22:37:15 +08:00 |
|
OG T
|
7eb837567d
|
fix(diagnostician): 修復 'AI 深度診斷' 垃圾根因顯示
CD Pipeline / build-and-deploy (push) Has been cancelled
根因三層鏈:
1. openclaw.call(prompt) 不傳 context
2. OPENCLAW_NEMO fallback 把 prompt[:500](系統說明文字)當 signal description
3. Nemo LLM 回傳 action_title="調查 AWOOOI SRE 系統的偵探 Agent"(任務描述)
4. _extract_hypotheses() 用 action_title 作為根因假設描述 → Telegram 顯示垃圾
修復:
- openclaw.call() 新增 alert_context 可選參數,透傳給 _call_with_fallback
- diagnostician._analyze() 建立 alert_context(incident_id + evidence_summary as signal)
→ nemo 使用結構化 API 收到真實感應器資料而非系統說明文字
- _extract_hypotheses() nemo 格式轉換:優先用 reasoning(為什麼)作為假設描述
而非 action_title(做什麼)— reasoning 更接近根因分析
2026-04-16 ogt + Claude Sonnet 4.6 (台北時區)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 22:34:48 +08:00 |
|
OG T
|
54d6818b8d
|
fix(sensors+rules+dedup): 全景三根因修復 — asyncssh缺失/YAML規則空洞/重複卡片
CD Pipeline / build-and-deploy (push) Has been cancelled
Fix 1: asyncssh 未安裝 → sensors_succeeded 永遠=0
- apps/api/pyproject.toml 加入 asyncssh>=2.14.0
- 根因:ssh_provider.py 的 import asyncssh 在 try/except 外,ImportError 直接噴出
- 效果:15 個 SSH tool 全部恢復可用
Fix 2: YAML 規則空洞 → HostHighLoadAverage/PostgreSQLDiskGrowthRate 落 generic_fallback → restart
- 合併 host_cpu_high 為 host_resource_alert,覆蓋 25+ 個主機層 alertname
- 新增 postgresql_disk_monitoring 規則,覆蓋磁碟增長/exporter/vacuum 類告警
- 所有主機層/磁碟監控告警 → NO_ACTION,禁止 kubectl restart
Fix 3: 同一 incident 被多 pod 同時處理 → 送出 3 張重複 Telegram 卡
- decision_manager.get_or_create_decision(): ANALYZING 狀態加入早返回
- 根因:ANALYZING 不在 (READY/EXECUTING/COMPLETED) 條件 → pod-B/C 各自建新 token
2026-04-16 ogt + Claude Sonnet 4.6 (台北時區)
|
2026-04-16 22:23:49 +08:00 |
|
AWOOOI CD
|
f08d175365
|
chore(cd): deploy 02a2761 [skip ci]
|
2026-04-16 13:12:57 +00:00 |
|
OG T
|
02a276127e
|
fix(sensors+drift+repair-card): 全景修復三個節點問題
CD Pipeline / build-and-deploy (push) Successful in 1h1m39s
Fix 1: sensors 7/8 失敗 — SSH host 短名展開 (pre_decision_investigator.py)
根因: Prometheus instance label 為 "110:9100",split(":")[0]="110"
SSH_MCP_ALLOWED_HOSTS 存完整 IP "192.168.0.110" → 7 個 SSH 工具全部失敗
修復: 加入 _SHORT_HOST_MAP,"110"→"192.168.0.110",四台主機全覆蓋
Fix 2: Config Drift 誤報 — K8s 預設欄位加入白名單 (drift_detector.py)
根因: kubectl rollout restart 後 restartedAt annotation 被偵測為 "medium" drift
restartPolicy/dnsPolicy/terminationGracePeriodSeconds 等 K8s 自動填入欄位未白名單
修復: _DEFAULT_ALLOWLIST_FIELDS 加入 13 個 K8s 執行時自動填入欄位
Fix 3: 修復請求卡內容垃圾 — fallback 帶入真實 error context (failure_watcher.py)
根因: LLM 分析失敗時 root_cause = "規則引擎分類: K8S_ERROR"(無任何有用資訊)
修復: fallback 改為 "[K8S_ERROR] {operation_type} 在 {target_resource} 失敗\n錯誤:{error_message[:200]}"
2026-04-16 ogt + Claude Sonnet 4.6(亞太)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 20:50:06 +08:00 |
|
AWOOOI CD
|
5a2bfc3699
|
chore(cd): deploy 513232e [skip ci]
|
2026-04-16 12:34:19 +00:00 |
|
OG T
|
513232e90b
|
fix(decision_manager): Agent 分析結果覆寫 Webhook 垃圾 action
CD Pipeline / build-and-deploy (push) Successful in 28m30s
根因 (INC-20260416-C365D0 事故完整根因分析):
- Webhook inline LLM 建立 ApprovalRecord.action = "kubectl rollout restart awoooi-prod"
- Agent 分析正確(postgres disk → NO_ACTION)但只發新 Telegram 卡,未覆寫 DB
- 用戶批准 Agent 卡 → 系統查 incident_id → 找到 Webhook 舊 ApprovalRecord
→ 執行垃圾 action(rollout restart 一個磁碟告警!)
修復:
- approval_db.py: 新增 update_action_by_incident_id()(按 incident_id 更新 PENDING 記錄)
- decision_manager.py: Agent 確認 action 後立即覆寫 ApprovalRecord
若 action="" (NO_ACTION): 存 "NO_ACTION - {description}" 讓用戶知道 Agent 建議觀察
用戶批准時執行的是 Agent 的正確建議,而非 Webhook 的通用 action
2026-04-16 ogt + Claude Sonnet 4.6(亞太)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 20:07:15 +08:00 |
|
OG T
|
a258d87767
|
fix(webhooks+prompts): 修復 LLM 對所有告警一律輸出「重啟 AWOOOI 服務」的根本問題
CD Pipeline / build-and-deploy (push) Has been cancelled
根因 (INC-20260416-C365D0 postgres 磁碟告警事故):
1. alert_context 中 alertname 埋在 labels 深處,LLM 看到 alert_type="custom" → 不知道是什麼告警
2. 快取鍵用 alert_type:target_resource → 不同 alertname 共用同一快取 → 全部回傳第一個 LLM 結果
3. 系統 Prompt 無 alert-category 指導 → LLM 永遠輸出 kubectl rollout restart
修復:
- webhooks.py: alert_context 置頂加入 alertname + alert_category + annotations
- openclaw.py: 快取鍵改用 alertname:target_resource(告警名稱才是主要識別符)
- prompts.py: OPENCLAW_SYSTEM_PROMPT + NEMOTRON_SYSTEM_PROMPT 加入 Alert-Specific Analysis Rules
database/storage 告警 → NO_ACTION + 調查指令;K8s 告警 → 對應重啟指令
禁止對非 K8s 告警輸出 kubectl rollout restart deployment/awoooi-prod
2026-04-16 ogt + Claude Sonnet 4.6(亞太)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 19:56:13 +08:00 |
|
AWOOOI CD
|
6048102139
|
chore(cd): deploy 9239538 [skip ci]
|
2026-04-16 11:08:30 +00:00 |
|
OG T
|
9239538b4d
|
fix(ci): 修復 apt index 失敗導致 python3.11 找不到
CD Pipeline / build-and-deploy (push) Successful in 42m19s
症狀:apt-get update 下載 index 失敗 → python3.11 裝不上 → CI 全部失敗
修復:clean apt cache + --fix-missing + deadsnakes PPA fallback + python3 symlink fallback
影響:所有 2026-04-16 的修復 commit 都因此無法部署
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 18:49:35 +08:00 |
|
OG T
|
8b2a3df64b
|
fix(telegram): 修復 Telegram 卡片 description 顯示 debug garbage
CD Pipeline / build-and-deploy (push) Failing after 3m12s
問題:description = debate_summary[:500],用戶看到的是內部審計文字
修復:從 diagnosis.top_hypothesis + action_plan.top_candidate 組出人類可讀摘要
格式:「根因:[描述](信心 X%);方案:[動作]」
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 18:42:13 +08:00 |
|
AWOOOI CD
|
5c4efb8d15
|
chore(cd): deploy ded93cb [skip ci]
|
2026-04-16 08:42:52 +00:00 |
|
OG T
|
ded93cbba3
|
fix(aiops): 修復 evidence 空白 → AI ABSTAIN 問題
CD Pipeline / build-and-deploy (push) Successful in 32m33s
問題:
- signal.alert_name 在頂層,但 _get_alertname() 從 labels["alertname"] 讀 → 空字串
- 所有 sensor 失敗時 evidence_summary 只有 120 字元,AI 無法分析 → ABSTAIN
- labels 為空時 AI 根本不知道是什麼告警
修復:
1. _get_alertname(): 優先讀 signal.alert_name,fallback labels["alertname"]
2. _get_labels(): 自動補 alertname 到 labels dict
3. EvidenceSnapshot.alert_info: 新增告警基礎欄位(sensors=0 時的最小情報)
4. build_summary(): alert_info 永遠放在最前,讓 AI 至少知道告警類型+嚴重度
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 16:26:07 +08:00 |
|
OG T
|
588b0d745b
|
fix(aiops): 修復 sensors=0/0 根因 — MCPToolRegistry 從未在 startup 初始化
CD Pipeline / build-and-deploy (push) Failing after 1m44s
三個問題同時修復:
1. main.py: 補上 init_mcp_tool_registry() 呼叫
- ADR-081 Phase 1 建立了 MCPToolRegistry 但從未在 lifespan startup 被呼叫
- 導致 PreDecisionInvestigator sensors=0/0,evidence_summary 永遠空白
- 空白 evidence → Diagnostician 永遠 ABSTAIN
2. signal_producer.py: str(dict) → json.dumps()
- labels/annotations 用 Python str() 序列化,寫入 Redis 後無法反序列化
3. brain/incident_engine.py: 新增 _parse_dict_field() helper
- 從 Redis 讀回的 labels/annotations 可能是 JSON 字串
- isinstance(..., dict) 防禦不足,需先 json.loads()
2026-04-16 ogt + Claude Sonnet 4.6(亞太): 飛輪感官修復
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 15:35:19 +08:00 |
|
OG T
|
d294caf830
|
fix(solver): 相容 openclaw_nemo 回傳格式 → candidates 格式轉換
CD Pipeline / build-and-deploy (push) Failing after 3m51s
與 diagnostician 同步:openclaw_nemo 回傳 action_title/risk_level/confidence,
solver 的 _extract_candidates() 找不到 candidates key → 空方案 → no_candidates
修復: 檢測 action_title 存在時轉換為 candidates 格式
risk_level → blast_radius 映射: critical=60, high=40, medium=25, low=10
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 14:34:50 +08:00 |
|
OG T
|
d31e491585
|
Merge remote-tracking branch 'gitea/main'
CD Pipeline / build-and-deploy (push) Has been cancelled
|
2026-04-16 14:32:42 +08:00 |
|
OG T
|
c27709d11b
|
fix(diagnostician): 相容 openclaw_nemo 回傳格式 → 解除全面 ABSTAIN
根因: AI Router DIAGNOSE→openclaw_nemo 回傳 ClawBot 格式:
{"action_title":"...","risk_level":"...","confidence":0.85}
Diagnostician 只解析 {"hypotheses":[...]} → 永遠 0 hypotheses → ABSTAIN
修復: _extract_hypotheses() 新增 openclaw_nemo 格式檢測與轉換
action_title→description, confidence→confidence, risk_level→category
影響: 所有 critical alert 自 2026-04-15 收到後一律 ABSTAIN,無任何修復動作
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 14:32:32 +08:00 |
|
AWOOOI CD
|
11a3522d39
|
chore(cd): deploy eff40a4 [skip ci]
|
2026-04-16 05:54:04 +00:00 |
|
OG T
|
eff40a4949
|
fix(ci): 修復 cd.yaml YAML 解析失敗 — ├ 字元缺縮排導致 CI 全停
CD Pipeline / build-and-deploy (push) Successful in 23m35s
根因: commit 5ee76dc 引入 HTML 結構化格式時,MSG 多行字串的
├/└ 行縮排為 0,YAML block scalar 解析失敗
(yaml: line 72: could not find expected ':')
影響: 2026-04-16 03:27 後所有 commit 均無法觸發 CI build
包含: cd1c0ff (5-tuple 修復) + 9ea1f77 (ghost button) + 8582439 (KB fix)
修復: 兩處 MSG 改用 printf 單行格式,消除多行 YAML 縮排陷阱
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 13:38:23 +08:00 |
|
OG T
|
8582439d2d
|
fix(kb): Signal 無 description 欄位,改用 alert_name + annotations
knowledge_extractor_service 兩處直接訪問 s.description:
- L87 signals_text 組裝:改用 alert_name + annotations.summary/description
- L198 Fallback 標題:改用 alert_name[:60]
Signal model 只有 alert_name, annotations(dict),無 description 屬性。
此修復防止 KB 萃取時 AttributeError 導致草稿無法建立。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 08:54:11 +08:00 |
|
OG T
|
9ea1f77e41
|
fix(telegram): 移除 7 個 ghost button (3-part/無handler)
違規 buttons 一覽:
- flywheel_diag / flywheel_dashboard (META告警卡)
- pause_1h / ignore (業務告警卡)
- postmortem / escalation_ack / dr_manual (升級通知卡)
- secops_block_ip / secops_evict (SecOps 卡,spec=nonce 但用 2-part)
所有 buttons 均無 callback handler,點擊無回應 = 鬼魂按鈕
鐵律: 寧可沒按鈕,不可有死按鈕 (feedback_no_ghost_buttons.md)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:29:41 +08:00 |
|
OG T
|
cd1c0ffdb8
|
fix(openclaw): call() 5值→3值 — 修復全部 AI 分析降級根因
根因: _call_with_fallback() 回傳 5-tuple,但 call() 直接 return
導致呼叫端 (diagnostician/solver/critic agents) 3-var unpack
→ ValueError: too many values to unpack → 全部 降級 20%
修復: call() 明確解包再回傳 (response, provider, success)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:27:48 +08:00 |
|
OG T
|
5e4dbbbb41
|
fix(alertmanager): webhook URL 改指向 VIP 192.168.0.125:32334
根因: Alertmanager 打 120:32334 → Connection Refused
120/121 NodePort 直接訪問不通,只有 VIP 125:32334 可通
影響: 告警完全無法送達 AWOOOI API,鏈路靜默失效 (自 2026-04-12 起)
修復: url → http://192.168.0.125:32334/api/v1/webhooks/alertmanager
驗證: 手動 inject 測試告警,API 端收到並觸發完整 LLM 分析流程
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:19:58 +08:00 |
|
AWOOOI CD
|
9a4fa5edf5
|
chore(cd): deploy 27ba97e [skip ci]
|
2026-04-15 19:12:19 +00:00 |
|
OG T
|
62e2efda85
|
fix(heartbeat): 恢復 30 分鐘心跳報告到 SRE 戰情室
2026-04-15 停用理由(forwarded_to_separate_group)有誤,
SRE 戰情室就是 SRE_GROUP_CHAT_ID,不應停用。
恢復 start_heartbeat_monitor(interval=30min)。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:05:01 +08:00 |
|
OG T
|
5ee76dc30d
|
fix(cd): CI/CD Telegram 通知改用 HTML 結構化格式
Deploy Start / Failure 從純文字 pipe 格式改為:
🚀 AWOOOI 部署開始
├ 📝 <commit>
├ 🔖 <sha>
└ 👤 <actor>
commit message 做 HTML escape 防特殊字元
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:04:23 +08:00 |
|
OG T
|
27ba97e586
|
fix(ollama): 清除所有硬寫 188:11434 fallback — 全部改指向 111 GPU
CD Pipeline / build-and-deploy (push) Successful in 15m59s
- decision_manager.py: 兩處 getattr fallback 188 → 111
- routes/agent.py: OLLAMA_BASE_URL 188 → 111
- knowledge_extractor_service.py: _OLLAMA_BASE 188 → 111
config.py 預設早已是 111,此次清掉 code 層殘留的 188 硬寫值。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:01:31 +08:00 |
|
OG T
|
5f9c9d84a2
|
fix(configmap): Ollama 改指向 111 GPU + fallback 順序調整
CD Pipeline / build-and-deploy (push) Has been cancelled
- OLLAMA_URL: 188(CPU-only) → 111(RTX GPU,avg 10s)
- AI_FALLBACK_ORDER: nvidia→gemini→ollama→claude
改為 ollama→nvidia→gemini→claude
本地 GPU 優先,外部 API 備援,雲端 Claude 最終兜底
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 03:00:16 +08:00 |
|
OG T
|
7e3cc8b3b0
|
fix(agents): 移除人工 per-agent timeout,LLM 必須等完整回應
CD Pipeline / build-and-deploy (push) Has been cancelled
原設計 asyncio.wait_for(timeout_sec=25s) 是任意截斷,
只要 LLM 超過時限就降級為 confidence=20%,根本沒有分析。
正確做法:
- 移除所有 4 個 agent 的 asyncio.wait_for() 包裝
- 只留 except Exception 捕真實異常(連線失敗、模型崩潰)
- 全流程由 Orchestrator GLOBAL_TIMEOUT_SEC=90s 防掛死
- _PER_AGENT_TIMEOUT_SEC 常數廢棄移除
影響:LLM 推理多久就等多久,不再人工截斷,
deepseek-r1:14b 等模型得以完整輸出分析結果。
2026-04-16 ogt + Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-16 02:54:34 +08:00 |
|