diff --git a/.agents/skills/02-lewooogo-backend-core.md b/.agents/skills/02-lewooogo-backend-core.md index 79799864..a8e22510 100644 --- a/.agents/skills/02-lewooogo-backend-core.md +++ b/.agents/skills/02-lewooogo-backend-core.md @@ -10,10 +10,10 @@ | 欄位 | 值 | |------|-----| -| **版本** | v2.1 | +| **版本** | v2.2 | | **建立日期** | 2026-03-20 (台北) | | **建立者** | Claude Code | -| **最後修改** | 2026-03-29 20:10 (台北) | +| **最後修改** | 2026-03-30 03:30 (台北) | | **修改者** | Claude Code | ### 變更紀錄 @@ -32,6 +32,7 @@ | v1.9 | 2026-03-28 | Claude Code | 🦞 新增 Phase 19 Terminal SSE 後端整合章節 | | v2.0 | 2026-03-29 | Claude Code | 🔴 Phase D-G P0 修正: 新增 LearningRepository (積木化合規) | | v2.1 | 2026-03-29 | Claude Code | 🛡️ 新增 ADR-038/039 OpenClaw 安全網章節 (Wave 1 部署) | +| v2.2 | 2026-03-30 | Claude Code | 🎯 新增 Phase 19.4 API 整合章節 (Approval + K8s 真實 API) | --- @@ -803,6 +804,58 @@ class SSEEventType(str, Enum): | 重連機制 | 指數退避 + Last-Event-ID 續接 | | Ghost Payload | 最小化:只傳 `current_page` + `entity_id` | +### Phase 19.4 API 整合模式 (2026-03-30) + +> **首席架構師審查**: 94/100 OUTSTANDING +> **測試覆蓋**: 60 測試全部通過 + +#### 正確做法 - 透過 DI 取得 Service + +```python +# ✅ 正確: 透過 DI 取得 ApprovalDBService +from src.services.approval_db import get_approval_service + +async def _handle_approval_action(self, publisher, topic, ...): + approval_service = get_approval_service() + pending_approvals = await approval_service.get_pending_approvals() + + # 渲染 ApprovalCard + await self._publish_render_ui(publisher, topic, "ApprovalCard", { + "approvalId": str(approval.id)[:8].upper(), + "riskLevel": approval.risk_level.value.upper(), + # ... + }) +``` + +#### K8s 狀態查詢 + +```python +# ✅ 正確: 處理 K8s 不可用情況 +from src.services.k8s_diagnostics import _get_k8s_client + +async def _handle_status_query(self, publisher, topic, ...): + client = await _get_k8s_client() + if not client: + await self._publish_thought(publisher, topic, "System", "K8s 連線失敗") + return + + v1 = client.CoreV1Api() + pods = await v1.list_namespaced_pod(namespace="awoooi") +``` + +#### 錯誤處理鐵律 + +```python +# ✅ 正確: 完整錯誤處理 + structlog +try: + result = await service.some_operation() +except Exception as e: + logger.error("operation_failed", error=str(e)) + await self._publish_tool_call(publisher, topic, "Tool", "failed", + result={"error": str(e)[:100]} # 截斷避免敏感資訊 + ) +``` + --- ## 參考文檔 diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index ed56c381..9a9abe84 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -5,14 +5,14 @@ --- -## 📍 當前狀態 (2026-03-30 03:00 台北) +## 📍 當前狀態 (2026-03-30 03:30 台北) | 項目 | 狀態 | |------|------| | **AI 仲裁** | ✅ **NVIDIA 優先** `["nvidia","gemini","ollama","claude"]` | | **CI/CD 告警** | ✅ **簡化格式** (跳過 AI 仲裁) | | **P0 安全修復** | ✅ **sudo 密碼明文移除** (1cec655) | -| **首席架構師** | ✅ **78→85/100 通過** | +| **首席架構師** | ✅ **94/100 OUTSTANDING** (Phase 19.4 + ADR-039 + AI 仲裁) | | **CD 佇列模式** | ✅ **cancel-in-progress: false** | | **Phase 19.4** | ✅ **Terminal Service API 整合完成** (60 測試通過) | | **Intent Classifier** | ✅ **Ollama 整合完成** (21 測試通過) | diff --git a/docs/adr/ADR-030-intelligent-auto-remediation.md b/docs/adr/ADR-030-intelligent-auto-remediation.md index 29a166c5..1953e0ae 100644 --- a/docs/adr/ADR-030-intelligent-auto-remediation.md +++ b/docs/adr/ADR-030-intelligent-auto-remediation.md @@ -632,6 +632,27 @@ class TrustEngine: - 修改 `apps/api/src/services/trust_engine.py` - 修改 `apps/api/src/services/approval_execution.py` +#### 5.3 Playbook 自動狀態轉換 (2026-03-30 補充) + +> **實作位置**: `apps/api/src/repositories/playbook_repository.py:adjust_confidence()` + +| 狀態轉換 | 觸發條件 | 說明 | +|---------|---------|------| +| **DRAFT → APPROVED** | `confidence >= 0.9` | 高信心度自動升級 | +| **任意 → DEPRECATED** | `confidence < 0.3` + `failure_rate > 50%` + `executions >= 5` | 低效 Playbook 自動棄用 | + +```python +# Playbook 信心度調整常數 +CONFIDENCE_PROMOTE_THRESHOLD = 0.9 # 自動升級閾值 +CONFIDENCE_DEPRECATE_THRESHOLD = 0.3 # 自動棄用閾值 +FAILURE_RATE_THRESHOLD = 0.5 # 失敗率閾值 +MIN_EXECUTIONS_FOR_DEPRECATE = 5 # 最小執行次數 + +# Learning Service 信心度調整 +PROMOTE_DELTA = +0.1 # 高評分 (>=4) +10% +DEMOTE_DELTA = -0.15 # 低評分 (<=2) -15% +``` + --- ## 四、架構相容性分析