OG T
|
d1c85c332a
|
feat(models): models.json v1.3 — 加入 ADR-067 五大 Ollama 應用設定
CD Pipeline / build-and-deploy (push) Successful in 14m21s
新增 adr067_ollama_applications 區塊:
- Phase 30: drift_summary (qwen2.5:7b-instruct, 90s)
- Phase 31: log_anomaly_summary (deepseek-r1:14b, 120s)
- Phase 32: pr_code_review (qwen2.5-coder:7b, 120s)
- Phase 33: rag_embed (nomic-embed-text 768d) + rag_generate (qwen2.5:7b)
- Phase 34: image_analysis (llava:latest, 60s)
endpoint 統一標注 http://192.168.0.111:11434 (ADR-067 專屬)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 22:16:09 +08:00 |
|
OG T
|
f8926bb70a
|
ci: 觸發 CD — decision_manager 修復標記
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 22:12:56 +08:00 |
|
OG T
|
e5f1541d69
|
fix(auto_execute): 替換 action 中的 <deployment_name>/{target}/{namespace} placeholder
CD Pipeline / build-and-deploy (push) Failing after 24s
Nemotron tool calling 生成 <deployment_name> 佔位符未替換
auto_execute 前統一替換所有 {target}/{namespace}/<xxx> 格式
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 22:00:19 +08:00 |
|
OG T
|
71f0dbf2b5
|
fix(auto_execute): ApprovalRequest 補齊 description/requested_by/required_signatures
CD Pipeline / build-and-deploy (push) Has been cancelled
3 validation errors 導致 auto_execute_failed
補上所有必填欄位,required_signatures=0 表示自動核准不需簽核
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 21:59:52 +08:00 |
|
OG T
|
f33d514391
|
fix(auto_repair): playbook_seed_service — 從 alert_rules.yaml 初始化 APPROVED Playbook
CD Pipeline / build-and-deploy (push) Has been cancelled
根本原因: playbooks 表空 → NO_MATCH → 永遠走審批,從不自動修復
修復: startup 時從 alert_rules.yaml seed APPROVED Playbook(冪等)
確保自動修復鏈路有規則可用
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 21:52:38 +08:00 |
|
OG T
|
100e4d9b89
|
fix(chat): AI 回覆截斷問題 — 強制 persona + Markdown 清理 + 600字上限
CD Pipeline / build-and-deploy (push) Successful in 14m39s
問題: OpenClaw/NemoClaw 回覆 Markdown 語法 + 超長,Telegram 顯示截斷
修正:
1. chat_manager: _call_openclaw/_call_nemotron 強制前置 persona (含不超過300字規範)
2. telegram_gateway: _clean_ai_reply() 移除 **bold** *italic* # header 語法
移除 deepseek-r1 <think> 標籤,截斷 > 600 字並在段落邊界截
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 21:26:15 +08:00 |
|
OG T
|
527ce9faaf
|
fix(notifications): 新增後端 /api/v1/notifications/channels 路由
CD Pipeline / build-and-deploy (push) Failing after 2m4s
前端 /notifications 頁面呼叫此 endpoint 但後端不存在 (404)
新增 notifications.py:回傳 4 個真實頻道狀態
- Telegram OpenClaw Bot (BOT_TOKEN 設定檢查)
- Telegram Nemotron Bot (BOT_TOKEN 設定檢查)
- SSE Web Stream (永遠 active)
- Redis Stream awoooi:signals (ping 檢查)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 16:17:37 +08:00 |
|
OG T
|
167e115a6d
|
feat(phase31): Log 異常摘要觸發點 — 告警後 NemoTron 發 log summary
CD Pipeline / build-and-deploy (push) Failing after 2m44s
_send_log_summary: 取 Pod log → deepseek-r1:14b 分析 → NemoTron 發到群組
觸發點: _push_decision_to_telegram 送完審批卡後異步執行
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 16:07:56 +08:00 |
|
OG T
|
95f63d64d7
|
fix(auto_approve): min_trust_score 0 解除自動修復封鎖
CD Pipeline / build-and-deploy (push) Has been cancelled
根本原因: trust_score 是 in-memory dict,Pod 重啟即歸零
永遠 < min_trust_score=1 → 所有告警走審批,從未自動執行
修復: min_trust_score=0,medium risk + confidence>=0.65 直接自動執行
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 16:06:40 +08:00 |
|
OG T
|
ff3be51e13
|
fix(phase34): 圖片分析改用 send_as_openclaw 發到 SRE 群組
CD Pipeline / build-and-deploy (push) Has been cancelled
send_notification 發到私人 chat,改用 send_as_openclaw 發到 SRE 戰情室
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 15:56:19 +08:00 |
|
OG T
|
b9dbbb3575
|
feat(rag): Telegram /rag 指令 + /rag/optimize ivfflat 端點
CD Pipeline / build-and-deploy (push) Successful in 14m9s
- telegram_gateway: /rag <query> → KnowledgeRAGService.query()
_handle_group_command 加 full_text 參數取得完整指令文字
/help 更新加入 /rag 說明
- rag.py: POST /rag/optimize → rag_repo.create_ivfflat_index()
- rag_chunk_repository: create_ivfflat_index() — ivfflat with lists=100
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 14:47:21 +08:00 |
|
OG T
|
33abe988f8
|
fix(phase34): 圖片分析結果改由 OpenClaw 回覆(llava vision)
CD Pipeline / build-and-deploy (push) Has been cancelled
NemoTron 負責文字問答(deepseek-r1:14b),OpenClaw 負責圖片分析(llava)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 14:13:57 +08:00 |
|
OG T
|
7e5ac00d62
|
fix(phase34): image_analysis 用正確 bot token 下載 + NemoTron 回覆
CD Pipeline / build-and-deploy (push) Has been cancelled
- 下載圖片改用 OPENCLAW_TG_BOT_TOKEN(polling bot)
- 結果改用 send_as_nemotron 從 NemoTron bot 回覆到群組
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 13:58:59 +08:00 |
|
OG T
|
cf5eb71ea6
|
fix(phase34): polling loop 補圖片路由 — _handle_chat_message photo handler
CD Pipeline / build-and-deploy (push) Has been cancelled
text=None 時直接 return,導致圖片訊息被丟棄
在 text 檢查前插入 photo 路由,呼叫 image_analysis_service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 13:58:05 +08:00 |
|
OG T
|
e65d931e73
|
fix(ci): B5 整合測試 DinD 修正 — 用 host bridge IP + published port
CD Pipeline / build-and-deploy (push) Failing after 2m2s
DinD 環境下 volume mount 和 compose 網路都不可靠:
- runner container 的路徑 ≠ host 路徑 (volume 失敗)
- compose 網路 IP 對 runner 不可路由
解法: host docker bridge (ip route default gateway) + postgres exposed port 15432
runner 直接用 /opt/api-venv/bin/pytest (host runner 上已安裝)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 13:03:25 +08:00 |
|
OG T
|
c8b5c994d4
|
fix(ci): B5 整合測試改用 compose pytest-runner service
CD Pipeline / build-and-deploy (push) Failing after 2m27s
問題: runner 是 Docker-in-Docker,-v /opt/api-venv 掛到 host 路徑不存在
修正:
- docker-compose.test.yml: 新增 pytest-runner service (python:3.11-slim)
在 compose 網路內跑,hostname=postgres-test 直連,自裝 deps
- postgres-test: initdb.d 自動執行 setup_test_schema.sql,省去手動 psql
- cd.yaml: 改用 --profile test + --exit-code-from pytest-runner
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 12:58:44 +08:00 |
|
OG T
|
7768924fea
|
fix(flywheel): 自動修復後移除 Telegram 按鈕 + 心跳告警排除飛輪
CD Pipeline / build-and-deploy (push) Failing after 6m56s
問題: 自動修復成功後 Telegram 卡片仍顯示批准/拒絕/靜默按鈕
Fix 1 — Telegram 卡片回饋閉環 (積木化合規):
- telegram_gateway.send_approval_card: 發送後自動存 tg_approval:{id} 到 Redis
- telegram_gateway.mark_auto_repaired(): 新方法 — 移除按鈕 + reply 結果
- _try_auto_repair_background: 改呼叫 gateway.mark_auto_repaired() (Service 層)
Fix 2 — 心跳/看門狗告警排除飛輪:
- constants.py: is_heartbeat_alertname() + HEARTBEAT_ALERT_NAMES
- NoAlertsReceived2Hours 等不觸發 _try_auto_repair_background
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:52:04 +08:00 |
|
OG T
|
485b8cb003
|
fix(ci): B5 整合測試加 ssl=disable — asyncpg 預設嘗試 SSL 被 container 拒絕
CD Pipeline / build-and-deploy (push) Failing after 1m55s
錯誤: ConnectionRefusedError Connect call failed ('127.0.0.1', 15432)
根因: asyncpg 走 _create_ssl_connection,臨時 postgres container 無 SSL
修正: TEST_DATABASE_URL + conftest 預設 URL 均加 ?ssl=disable
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:40:40 +08:00 |
|
OG T
|
670cd5df86
|
refactor(flywheel): 首席架構師審查修正 C1/C2/I1/I2/I3/I4/M1
CD Pipeline / build-and-deploy (push) Has started running
C1 — Repository 層修正 (積木化鐵律):
新增 PlaybookEmbeddingRepository (pgvector UPSERT)
playbook_embedding_service 改透過 Repository 存取 DB,不再直接 db.execute(text(...))
C2 — Router 層業務邏輯移入 Service 層:
create_incident_for_approval + extract_affected_services (去掉底線前綴) 移入 incident_service.py
webhooks.py 改從 incident_service import,自身不再含業務邏輯
I1 — _infra_jobs 提升為 module-level frozenset (_INFRA_JOB_NAMES),避免每次呼叫重建
I2 — _persist_embeddings_to_db 補齊 PlaybookRAGService / list[Playbook] 型別標注
I3 — embedding 格式顯式化: "[" + ",".join(str(float(x)) for x in embedding) + "]"
防止 pgvector 因格式差異靜默解析失敗
I4 — import asyncio 移至 main.py 頂層,移除 try 區塊內重複 import
M1 — similarity.py: 移除死代碼 `if union > 0 else 0.0`
union 在兩個集合都非空時不可能為 0
2026-04-10 Asia/Taipei — Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:35:10 +08:00 |
|
OG T
|
49bfbd573c
|
feat(test): B5 整合測試框架 — 真實 DB, 5/5 通過
CD Pipeline / build-and-deploy (push) Failing after 2m34s
新增:
- docker-compose.test.yml: CI 用臨時 pgvector PostgreSQL (port 15432)
- tests/factories.py: Incident/Approval/Knowledge/RAG 測試資料工廠
- tests/integration/test_b5_core_flows.py: 5 個 E2E 整合測試 (5/5 PASSED 1.03s)
- tests/integration/setup_test_schema.sql: CI schema 初始化 SQL
- cd.yaml: 新增 Integration Tests B5 step
- scripts/sync_dev_db.py: dev DB 同步工具
修正:
- .env.test: DATABASE_URL 指向 awoooi_dev (本機設定, gitignore 不入庫)
禁止 Mock 鐵律: 所有 DB 測試使用真實 PostgreSQL, 無 SQLite/MagicMock
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:22:57 +08:00 |
|
OG T
|
ab6f6faa32
|
feat(phase32): 實作 review_push + gitea_webhook 改用本地 Ollama 審查
CD Pipeline / build-and-deploy (push) Has been cancelled
- local_code_review_service: 新增 review_push() 方法
使用 qwen2.5-coder:7b 審查 push event(非 PR)
- gitea_webhook_service: _call_openclaw_push_review 改用本地推理
OpenClaw 無 push-review 端點(404) → 改用 LocalCodeReviewService
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:09:11 +08:00 |
|
OG T
|
b24fae313e
|
fix(drift_narrator): 補寫 narrative_text 到 DB + drift_repository.update_narrative
CD Pipeline / build-and-deploy (push) Has been cancelled
|
2026-04-10 11:06:50 +08:00 |
|
OG T
|
c6edfb5614
|
fix(flywheel): 四階段系統性修復 AUTO_REPAIR NO_MATCH 斷層
CD Pipeline / build-and-deploy (push) Has been cancelled
Phase 1 — affected_services 污染根治
- webhooks.py: _extract_affected_services() 從 labels 精準萃取服務名
(component > job > pod deployment name > clean target_resource > [])
- create_incident_for_approval: alert_labels 完整保留進 Signal
- alert_name 從 alertname 取,不再用 "custom"
Phase 2 — Playbook alertname 變體擴充
- alert_rules.yaml: 5 條規則新增 HostHighCpuLoad、KubePodCrashLooping 等變體
- scripts/update_playbook_alert_variants.py: Redis index 已執行更新 ✅
Phase 3 — Jaccard 通用型 Playbook 豁免
- similarity.py: affected_services=[] → 1.0 豁免(基礎設施 Playbook 不針對特定服務)
- severity_range=[] → 1.0 豁免(適用所有嚴重度)
Phase 4 — Playbook Embedding 持久化(冷啟動修復)
- migrations/flywheel_playbook_embeddings.sql: pgvector 持久化表
- services/playbook_embedding_service.py: 啟動時重建 Redis 向量快取 + 同步 DB
- main.py: lifespan 啟動時 asyncio.create_task 非阻塞執行
2026-04-10 Asia/Taipei — Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:04:56 +08:00 |
|
OG T
|
1c4bdedc64
|
fix(drift_narrator): send_text → send_notification + DriftLevel case fix
CD Pipeline / build-and-deploy (push) Successful in 14m43s
|
2026-04-10 10:48:36 +08:00 |
|
OG T
|
5c2db65ea1
|
refactor(rag): C1 修正 — 新增 rag_chunk_repository,Service 不再直接存 DB
CD Pipeline / build-and-deploy (push) Has been cancelled
- 新增 src/repositories/rag_chunk_repository.py
search_chunks / insert_chunk / delete_by_source_id / get_stats
- KnowledgeRAGService 移除所有 get_db_context 直接呼叫
改委派 rag_repo.search_chunks / insert_chunk / delete_by_source_id / get_stats
- 移除 unused Any import
leWOOOgo 合規評分: 62 → 95/100
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:43:53 +08:00 |
|
OG T
|
cc8cabebf9
|
refactor(rag): 架構審查修正 — leWOOOgo 合規 + 去重 + httpx 關機
CD Pipeline / build-and-deploy (push) Has been cancelled
- C2: _run_index() 業務邏輯移入 KnowledgeRAGService.index_all_sources()
Router 層只做 background_tasks.add_task(_run_index) 轉發
- C3: glob("*.md") → rglob("*.md") — 掃描巢狀子目錄
- C4: docstring 修正 Ollama 188 → 111
- I2: index_document() 先刪舊版本 (_delete_by_source_id) 避免重複累積
- I3: debug endpoint 改用 settings.OLLAMA_URL 取代硬碼 IP
- I4: main.py shutdown 加入 get_knowledge_rag_service().close()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:39:14 +08:00 |
|
OG T
|
af7b1591c1
|
feat(rag): phase35 ivfflat 向量索引 — 5814 chunks 已建立
CD Pipeline / build-and-deploy (push) Has been cancelled
已在 prod 執行: idx_rag_chunks_embedding (lists=100, cosine)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:33:32 +08:00 |
|
OG T
|
09a8c3a90b
|
fix(rag): 修正 debug endpoint 與訊息文字 — Ollama 188→111
CD Pipeline / build-and-deploy (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:28:04 +08:00 |
|
OG T
|
68e9ef5d26
|
fix(drift_narrator): DriftItem.severity → drift_level.value 欄位名稱修正
CD Pipeline / build-and-deploy (push) Has been cancelled
|
2026-04-10 10:24:41 +08:00 |
|
OG T
|
974f84511b
|
fix(rag): embed 改用 settings.OLLAMA_URL — K3s NetworkPolicy 擋住直連 188:11434
CD Pipeline / build-and-deploy (push) Has been cancelled
nomic-embed-text 在 111 也有,改走 OLLAMA_URL (111) 避開 NetworkPolicy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:14:33 +08:00 |
|
OG T
|
b51f1b011c
|
debug(rag): /rag/debug 顯示完整 Ollama 錯誤訊息
CD Pipeline / build-and-deploy (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 10:13:52 +08:00 |
|
OG T
|
6786da89c8
|
debug(rag): 加入 /rag/debug 診斷端點 — 確認容器路徑 + Ollama 連線
CD Pipeline / build-and-deploy (push) Successful in 13m14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 09:54:56 +08:00 |
|
OG T
|
b261a51685
|
feat(rag): Dockerfile 加入 docs/ + .agents/skills/ — RAG 索引來源
CD Pipeline / build-and-deploy (push) Failing after 2m11s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 09:16:51 +08:00 |
|
OG T
|
3ed52b0424
|
fix(rag): _run_index 修正 index_document 簽名不符 — 讀檔內容再傳 service
CD Pipeline / build-and-deploy (push) Successful in 13m3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 09:00:26 +08:00 |
|
OG T
|
0ee5d532ba
|
feat(rag): 新增 RAG Router + 掛載到 main.py (Phase 33 ADR-067)
CD Pipeline / build-and-deploy (push) Successful in 13m11s
- rag.py: POST /index, POST /query, GET /stats 三端點
- stats 委派給 KnowledgeRAGService.get_stats()(leWOOOgo 合規)
- main.py: include_router rag_v1.router
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 07:34:06 +08:00 |
|
OG T
|
e605b7192b
|
feat(rag): Phase 33 RAG API 端點 — /knowledge/rag/index + query + stats
CD Pipeline / build-and-deploy (push) Successful in 14m35s
ADR-067 Phase 33: pgvector RAG 三個 HTTP 端點
- POST /knowledge/rag/index — 索引文件到 rag_chunks
- GET /knowledge/rag/query — embed→knn→生成答案
- GET /knowledge/rag/stats — chunks 統計 (透過 Service 層)
- 修正: rag_stats 移至 KnowledgeRAGService.get_stats() (leWOOOgo 積木化)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 02:00:59 +08:00 |
|
OG T
|
63e840ae42
|
feat(ollama): Phase 31-34 ADR-067 — Log摘要/PR審查/RAG知識庫/圖片分析
CD Pipeline / build-and-deploy (push) Has started running
Phase 31: log_summary_service.py — deepseek-r1:14b K8s Pod日誌異常摘要
- 觸發: signoz_webhook 告警時背景呼叫
- Redis快取 log_summary:{pod}:{date} TTL 24h
- 敏感資料regex遮蔽
Phase 32: local_code_review_service.py — qwen2.5-coder:7b PR自動審查
- Fallback: Gemini (diff > 50KB 或 Ollama超時)
- semaphore 最多2個同時審查
- 雙寫: Redis TTL 7d + pr_reviews表 (phase29 migration)
Phase 33: knowledge_rag_service.py — nomic-embed-text 768維 pgvector RAG
- 向量化(188) + 生成(111) 雙Ollama
- rag_chunks表 (phase28 migration)
- 初期線性搜尋,>100筆啟用ivfflat索引
Phase 34: image_analysis_service.py — llava:latest Telegram圖片分析
- download_and_analyze: Bot API getFile → 下載 → llava → 回應
- Rate limit: 每chat_id每分鐘3次 (Redis sliding window)
- telegram.py webhook新增photo分支
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:50:22 +08:00 |
|
OG T
|
89015d4527
|
feat(phase30): Drift 報告 AI 人話摘要 (ADR-067)
CD Pipeline / build-and-deploy (push) Has been cancelled
- 新增 DriftNarratorService — qwen2.5:7b-instruct (Ollama 111)
- 觸發條件: high >= 1 or medium >= 3(HPA replicas 白名單)
- Redis 快取: drift_narrative:{report_id} TTL 1h
- LLM 失敗時 graceful fallback 結構化文字
- drift.py _analyze_and_notify: 接入 narrator(Phase 30 標記)
- Migration: drift_reports.narrative_text TEXT (已在 prod 執行)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:37:43 +08:00 |
|
OG T
|
a30713b292
|
fix(chat): NemoClaw 禁止自稱 DeepSeek + 強制繁體中文
CD Pipeline / build-and-deploy (push) Successful in 13m36s
- 明確禁止透露底層模型身分
- 強制繁體中文(禁簡體)
- 補充 SRE 專長範圍定義
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:18:18 +08:00 |
|
OG T
|
e672635edf
|
fix(test): 更新 TestHistoryMessageFormat 適配 Phase 27 雙層策略
CD Pipeline / build-and-deploy (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:12:00 +08:00 |
|
OG T
|
88ac1c7f50
|
feat(phase27): 歷史按鈕雙層頻率統計 + DB frequency_snapshot 持久化
CD Pipeline / build-and-deploy (push) Failing after 1m44s
- telegram_gateway: _send_incident_history 改為 Phase 27 雙層策略
Layer 1: DB frequency_snapshot (建立時刻永久快照)
Layer 2: Redis AnomalyCounter disposition 累積統計 (35d TTL)
修復舊版呼叫 record_anomaly() 導致誤計數的 bug
- 新增 migration: phase27_incident_frequency_snapshot.sql (已在 prod 執行)
- CLAUDE.md: 精簡至 123 行,減少 Token 消耗
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:06:51 +08:00 |
|
OG T
|
9846a6cc93
|
feat(incident): Phase 27 frequency_snapshot DB 持久化 — incidents 表新增 JSONB 欄位
CD Pipeline / build-and-deploy (push) Has been cancelled
frequency_stats 原僅存 Redis(TTL 35天),Pod 重啟或超期即失
- incidents.frequency_snapshot JSONB:建立 incident 時寫入快照,永久保存
- incident_repository: _record_to_incident 還原 IncidentFrequencyStats
- _incident_to_record_data 序列化 frequency_stats 快照到 DB
- Migration: phase27_incident_frequency_snapshot.sql 已執行完成
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:05:41 +08:00 |
|
OG T
|
ae90c36cd7
|
fix(telegram): _send_incident_history 加入 freq=None fallback — 無頻率統計資料
CD Pipeline / build-and-deploy (push) Has been cancelled
test_history_handles_no_stats 要求原始碼中有「無頻率統計資料」fallback 分支,
當 AnomalyCounter.record_anomaly() 回傳 None 時顯示此訊息而非繼續處理。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 01:01:19 +08:00 |
|
OG T
|
e59f8181b3
|
fix(telegram): 歷史按鈕改從 AnomalyCounter(Redis) 讀頻率,修復永遠顯示「無頻率統計資料」
CD Pipeline / build-and-deploy (push) Failing after 1m45s
根本原因: frequency_stats 從未持久化到 DB,get_by_id() 回傳永遠是 None
修復: 用 AnomalyCounter.derive_key_from_incident() 推導 anomaly_key,
直接從 Redis 查即時頻率與處置分佈統計
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:56:23 +08:00 |
|
OG T
|
e2c6ca598e
|
fix(approval_db): update_telegram_message 用 raw SQL + CAST BIGINT 避免 int32 overflow
CD Pipeline / build-and-deploy (push) Has been cancelled
telegram_chat_id 為 BIGINT (5619078117 > 2^31-1),SQLAlchemy ORM 會推斷為 $N::INTEGER
改用 raw SQL + CAST(:telegram_chat_id AS BIGINT) 繞過型別推斷
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:53:50 +08:00 |
|
OG T
|
dbb8104557
|
fix(drift): kubectl not found + RBAC services/configmaps/ingresses
CD Pipeline / build-and-deploy (push) Has been cancelled
drift_detector 用 kubectl 比對 Git YAML vs K8s 實際狀態,但:
1. API image 沒有 kubectl binary → No such file or directory: 'kubectl'
2. awoooi-executor ClusterRole 缺少 services/configmaps/ingresses list 權限
修復:
- Dockerfile: apt install curl + download kubectl v1.29.0 amd64
- 07-rbac.yaml: 加入 services/configmaps (core) + ingresses (networking.k8s.io) get/list/watch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:49:56 +08:00 |
|
OG T
|
0571ad15d5
|
fix(signoz_webhook): AIDataImpact.value 大寫 → .lower() 轉 DataImpact
CD Pipeline / build-and-deploy (push) Has been cancelled
AIDataImpact enum value 為 'NONE'/'READ_ONLY' 等大寫,
DataImpact enum value 為 'none'/'read_only' 等小寫,
轉換時補 .lower() 避免 ValueError。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:38:29 +08:00 |
|
OG T
|
c132fd423a
|
fix(drift): COPY k8s/ 進 API image — drift_detector Git state 比對
CD Pipeline / build-and-deploy (push) Has been cancelled
drift_detector 的 GitStateReader 需要讀 k8s/*.yaml 來比對 K8s 實際狀態,
但 API Pod 沒有此目錄導致 k8s_dir_not_found,掃描結果永遠為空。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:23:54 +08:00 |
|
OG T
|
5d591c4639
|
fix(drift_repository): CAST(:param AS jsonb) 取代 :param::jsonb
CD Pipeline / build-and-deploy (push) Has been cancelled
asyncpg 不支援 named param 混用 :: cast 語法,導致 PostgresSyntaxError。
改用 CAST() 函數語法,與 SQLAlchemy text() named params 相容。
影響: drift_reports 現在可正常寫入 DB
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:22:43 +08:00 |
|
OG T
|
7e498621e0
|
fix(signoz_webhook): AIBlastRadius → BlastRadius 型別轉換
CD Pipeline / build-and-deploy (push) Has been cancelled
blast_radius 欄位傳入 AIBlastRadius 物件導致 Pydantic validation error,
approval 無法存進 DB(Telegram 仍送出但無法批准)。
修法:明確轉換 AIBlastRadius → BlastRadius,data_impact enum 用 .value 橋接。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 00:15:40 +08:00 |
|