From 6e644d4fd0510fab249e3b37d8abc9ceeac3e6fd Mon Sep 17 00:00:00 2001 From: OG T Date: Tue, 24 Mar 2026 10:28:46 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E7=A6=81=E6=AD=A2=20Mock=20=E6=B8=AC?= =?UTF-8?q?=E8=A9=A6=E8=A6=8F=E5=89=87=E6=95=B4=E5=90=88=E8=87=B3=20HARD?= =?UTF-8?q?=5FRULES=20+=20CLAUDE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 統帥鐵律 (2026-03-24): - HARD_RULES.md 新增 No Mock Testing 章節 - CLAUDE.md 新增測試主題引用 - Skill 05 新增禁止 Mock 詳細規範 - LOGBOOK.md 更新當前狀態 Co-Authored-By: Claude Opus 4.5 --- .agents/skills/05-awoooi-sre-qa.md | 43 ++++++++++++++++++++++++++++++ CLAUDE.md | 1 + docs/HARD_RULES.md | 24 +++++++++++++++++ docs/LOGBOOK.md | 22 +++++++++++---- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/.agents/skills/05-awoooi-sre-qa.md b/.agents/skills/05-awoooi-sre-qa.md index 0e89c55e2..dab89d883 100644 --- a/.agents/skills/05-awoooi-sre-qa.md +++ b/.agents/skills/05-awoooi-sre-qa.md @@ -6,6 +6,49 @@ --- +## 🔴🔴 禁止 Mock 測試鐵律 (2026-03-24) + +> **統帥明確指示**: 「全面禁止!!!」 + +### 禁止使用 + +```python +# ❌ 禁止 +from unittest.mock import Mock, AsyncMock, MagicMock, patch +mock_service = AsyncMock() +with patch("src.services.xxx", mock_service): + ... +``` + +### 允許使用 + +```python +# ✅ 允許: 修改 settings 配置值 +from unittest.mock import patch +with patch.object(settings, "HMAC_SECRET", "test-secret"): + ... + +# ✅ 允許: 真實 HTTP 端點測試 +from httpx import ASGITransport, AsyncClient +async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client: + response = await client.post("/api/v1/xxx", json=payload) +``` + +### 測試分類 + +| 類型 | 允許 | 說明 | +|------|------|------| +| E2E 測試 | ✅ | 撞擊真實端點 | +| 整合測試 | ✅ | 使用真實 PostgreSQL/Redis | +| Mock 單元測試 | ❌ | 全面禁止 | + +### 已移除的 Mock 測試 + +- `test_stats_api.py` (2026-03-24) +- `test_webhook_telegram_integration.py` (2026-03-24) + +--- + ## 核心約束 (絕對禁止人工 QA) ### 絕對禁止指令 diff --git a/CLAUDE.md b/CLAUDE.md index 5050fcbca..f8458446f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,6 +59,7 @@ | 模組化 | `feedback_modular_architecture.md` | | API 整合 | `feedback_api_response_verification.md` | | 構建部署 | `feedback_build_from_git_only.md` | +| **測試** | `feedback_no_mock_testing.md` 🔴🔴 禁止 Mock | ## Skills 載入 diff --git a/docs/HARD_RULES.md b/docs/HARD_RULES.md index 2b529489b..059d90ed8 100644 --- a/docs/HARD_RULES.md +++ b/docs/HARD_RULES.md @@ -14,6 +14,7 @@ | 數據 | 假數據 Demo | 真實 API | [→ No Fake Data](#no-fake-data) | | 架構 | 刪除 OpenClaw | OpenClaw 是核心 | [→ OpenClaw](#openclaw) | | Git | `--force` | 正常 push | [→ Git Safety](#git-safety) | +| **測試** | **Mock 測試** | **真實 DB/服務** | [→ No Mock Testing](#no-mock-testing) | --- @@ -146,6 +147,29 @@ git revert --- +## No Mock Testing + +**Memory:** `~/.claude/projects/-Users-ogt-awoooi/memory/feedback_no_mock_testing.md` + +```python +# ❌ 禁止 - 全面禁止 Mock 測試 +from unittest.mock import Mock, AsyncMock, MagicMock, patch +mock_service = AsyncMock() +with patch("src.services.xxx", mock_service): + ... + +# ✅ 正確 - 使用真實資料庫/服務 +async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client: + response = await client.post("/api/v1/xxx", json=payload) +``` + +**原因:** 統帥 2026-03-24 明確指示「全面禁止!!!」Mock 無法反映真實系統行為。 + +**允許例外:** +- `patch.object(settings, ...)` 修改配置值(非 Mock 服務) + +--- + ## 如何新增規則 1. 在此文件新增章節 diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 56b523463..c4395f7c9 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -5,14 +5,15 @@ --- -## 📍 當前狀態 (2026-03-23) +## 📍 當前狀態 (2026-03-24 10:30) | 項目 | 狀態 | |------|------| -| **當前 Phase** | **Phase 6.5c 完成** - UX 改善 + 錯誤回饋優化 | -| **Day** | Day 5 | -| **下一步** | 驗證 Y 按鈕 UX 改善效果 | -| **重大變更** | 🎨 **UX 改善**: 錯誤訊息明顯顯示 + 30秒超時警告 + 重試按鈕 | +| **當前 Phase** | **Phase 6.5 Stats API 完成** - 統計分析 6 端點 | +| **Day** | Day 6 | +| **下一步** | 整合測試 (真實 PostgreSQL) | +| **重大決策** | 🔴🔴 **全面禁止 Mock 測試** - 必須使用真實資料庫/服務 | +| **已完成** | ✅ Statistics API (6 端點) + Y/n 決策重置修復 + Mock 測試移除 | ### 🧠 認知覺醒計畫 Phase 6 施工順序 (C-Suite 2026-03-23 統帥方案) @@ -40,6 +41,17 @@ | 時間 | 事件 | 負責人 | |------|------|--------| +| 2026-03-24 10:30 | **🔴🔴 禁止 Mock 測試鐵律**: 統帥明確指示「全面禁止!!!」Mock 測試 + 移除 `test_stats_api.py` 與 `test_webhook_telegram_integration.py` + 新增 `feedback_no_mock_testing.md` | Claude Code | +| 2026-03-24 10:15 | **📊 Statistics API 完成**: 6 端點 (summary/timeline/trends/top-resources/feedback/themes) + PostgreSQL date_trunc 優化 + Redis 快取 (5分鐘 TTL) + 12 領域主題萃取 | Claude Code | +| 2026-03-24 10:00 | **🔧 Y/n 決策重置修復**: DecisionManager 活躍事件自動建立新 Decision (原本返回舊 COMPLETED 導致按鈕永久禁用) | Claude Code | +| 2026-03-23 21:20 | **🔧 Y/n 按鈕雙重修復**: (1) mapToDualState 遺漏 decision prop (2) `result.status` → `result.approval.status` API 回應結構錯誤 + 新增 feedback_api_response_verification.md 鐵律 | Claude Code | +| 2026-03-23 19:55 | **📝 CLAUDE.md 完整重構**: 整合 31 個 feedback 規則 + 六大章節鐵律 + 危險操作分級 + Session 協議 | 資深顧問 | +| 2026-03-23 19:51 | **🔧 OpenClaw Ollama 修復**: host.docker.internal → 172.17.0.1 + 容器重啟成功 | 資深顧問 | +| 2026-03-23 19:45 | **🛑 舊 AIOPS 清理**: 停止 192.168.0.188 + 192.168.0.110 Alertmanager | 資深顧問 | +| 2026-03-23 19:39 | **✅ Telegram Token #3 成功**: OpenClaw 啟動正常,AWOOOI API 完全停用 Telegram | 統帥 | +| 2026-03-23 19:31 | **🔴 Telegram Token #2 失效**: 舊 Pod 呼叫 logOut,Token 再次失效 | 災難 | +| 2026-03-23 19:35 | **📜 ADR-012 危險操作治理**: 三層架構 (預防+執行+審計) + Tier 0-3 分級 | 資深顧問 | +| 2026-03-23 11:09 | **🔴 Telegram Token #1 失效**: AWOOOI API 呼叫 logOut,Token 永久失效 | 災難 | | 2026-03-23 14:35 | **🎨 Phase 6.5c UX 改善**: 錯誤訊息明顯顯示 (非 hover) + 30 秒超時警告 + 重試按鈕 + 取消自動恢復 (讓用戶看到錯誤) | Claude Code | | 2026-03-23 14:20 | **🔧 Y 按鈕執行修復**: 中文 Action 解析擴充 (擴展/重新啟動) + StatefulSet Pod 自動識別 (`xxx-0` → DELETE_POD) + `-deployment` 後綴自動移除 | Claude Code | | 2026-03-23 14:15 | **📝 Memory 同步**: feedback_modular_core_spirit.md (模組化核心精神鐵律) + MEMORY.md 索引更新 | Claude Code |