Your Name
02362eddcf
CD Pipeline / build-and-deploy (push) Failing after 2m0s
feat(wave4-5): P1.3+P1.4 真接線 + Ollama_188 provider 註冊 + quota atomic 修復
3 個 engineers 在限額前的 Wave 4/5 完成工作(補 commit):
Engineer-B3 — Wave 4 P1.3+P1.4 真飛輪閉環(auto_repair_service.py 才是正確接線位置):
- execute_auto_repair 成功後 fire-and-forget 啟動 PostExecutionVerifier
- record_verification_result 觸發 EWMA trust_score 演化
- snapshot=None(不依賴 EvidenceSnapshot,避免我之前 webhooks.py 補丁的 B2 bug)
- _pending_tasks 管理生命週期,Lifespan shutdown 時等任務完成
Engineer-A4 — Wave 5 B1-fix Ollama188Provider 註冊:
- ai_providers/ollama.py: 新增 Ollama188Provider(OllamaProvider) 子類
- name="ollama_188", is_enabled 看 ENABLE_OLLAMA_188 + OLLAMA_FALLBACK_URL
- analyze() 用 OLLAMA_FALLBACK_URL(192.168.0.188:11434)作為推理端點
- ai_router.py:_init_registry 補 registry.register(Ollama188Provider())
- 修復 BLOCKER:原本 failover_manager 決策返回 "ollama_188",但 executor 查不到
→ not_registered → 188 從未被打到。Wave 2 P1.1 整套容災系統前段卡住。
Engineer-A4 — Wave 5 B3-fix Gemini quota TOCTOU 修復:
- ollama_failover_manager.py:_check_gemini_quota 改用 redis.pipeline()
原 GET → 判斷 → INCR → EXPIRE 四步分離,並行請求在 GET/INCR 間競爭超發
修法:SET NX(首次設 TTL) + INCR atomic pipeline,用 INCR 後新值判斷
Engineer-B3 — test_learning_chain_e2e.py(377 行 No-Mock 整合測試):
- 純 Python Stub + monkeypatch(feedback_no_mock_testing.md 合規)
- execute_auto_repair 成功 → verifier 被呼叫 ✓
- execute_auto_repair 失敗 → verifier 不被呼叫 ✓
- matched_playbook_id=None → log warning 不 crash ✓
- verifier 拋例外 → 修復回傳成功,trust 不更新 ✓
Tests: 42 passed (failover_manager + ai_router_failover_integration 全綠)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Engineer-A4 + Engineer-B3 (上 session) <noreply@anthropic.com>
2026-04-26 20:44:19 +08:00
..
2026-04-25 03:29:38 +08:00
2026-04-26 20:19:46 +08:00
2026-03-26 16:06:20 +08:00
2026-04-25 02:33:43 +08:00
2026-04-05 14:45:02 +08:00
2026-03-31 16:25:00 +08:00
2026-04-10 11:22:57 +08:00
2026-04-06 11:49:24 +08:00
2026-04-26 20:39:53 +08:00
2026-04-22 01:33:30 +08:00
2026-04-20 04:13:02 +08:00
2026-04-22 01:41:34 +08:00
2026-04-20 19:40:01 +08:00
2026-04-20 19:40:01 +08:00
2026-04-14 14:39:14 +08:00
2026-04-14 15:10:10 +08:00
2026-04-25 00:14:07 +08:00
2026-03-29 15:27:49 +08:00
2026-04-14 14:39:14 +08:00
2026-03-29 15:27:49 +08:00
2026-04-08 18:17:48 +08:00
2026-04-14 20:43:40 +08:00
2026-03-29 15:48:03 +08:00
2026-04-12 22:50:20 +08:00
2026-04-11 22:05:52 +08:00
2026-04-26 20:28:29 +08:00
2026-03-31 12:16:54 +08:00
2026-04-15 12:44:53 +08:00
2026-04-14 18:43:29 +08:00
2026-04-11 21:33:19 +08:00
2026-04-26 20:17:17 +08:00
2026-04-01 11:11:50 +08:00
2026-04-07 11:17:40 +08:00
2026-03-31 16:16:16 +08:00
2026-04-26 20:44:19 +08:00
2026-03-31 12:20:29 +08:00
2026-04-26 20:18:33 +08:00
2026-03-26 16:06:20 +08:00
2026-04-15 13:08:38 +08:00
2026-04-12 13:32:42 +08:00
2026-03-29 20:49:23 +08:00
2026-04-03 14:00:21 +08:00
2026-04-26 20:18:33 +08:00
2026-04-26 20:18:33 +08:00
2026-04-26 20:18:33 +08:00
2026-04-16 00:13:00 +08:00
2026-04-09 08:55:21 +08:00
2026-04-05 00:14:50 +08:00
2026-04-05 00:14:50 +08:00
2026-03-26 16:06:20 +08:00
2026-04-14 15:19:54 +08:00
2026-04-15 13:08:38 +08:00
2026-04-15 13:08:38 +08:00
2026-03-31 14:17:36 +08:00
2026-03-29 16:23:30 +08:00
2026-03-23 23:51:37 +08:00
2026-04-14 14:39:14 +08:00
2026-04-15 13:08:38 +08:00
2026-04-20 04:23:09 +08:00
2026-04-09 09:01:59 +08:00
2026-04-10 01:12:00 +08:00
2026-04-26 20:17:17 +08:00
2026-04-12 21:08:48 +08:00
2026-04-12 21:20:16 +08:00
2026-03-31 16:16:16 +08:00
2026-04-22 01:27:39 +08:00