From b20a619a3dfeeaebe4cf8730f5fe5beef869d0a7 Mon Sep 17 00:00:00 2001 From: OG T Date: Tue, 7 Apr 2026 13:09:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20CD=20=E4=BF=AE=E5=BE=A9=20=E2=80=94?= =?UTF-8?q?=20shared-types=20=E5=9E=8B=E5=88=A5=E5=90=8C=E6=AD=A5=20+=20?= =?UTF-8?q?=E6=B8=AC=E8=A9=A6=E5=86=B7=E5=95=9F=E5=8B=95=E8=A1=9D=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. pnpm shared-types generate — 同步 Sprint 4 新增的 Pydantic model 2. test_evaluate_not_high_quality 修復 — 加 MEDIUM risk step 避免 意外走冷啟動路徑 (Redis 未初始化 → COLD_START_DAILY_LIMIT) 11/11 auto_repair 測試通過 Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/api/tests/test_auto_repair_service.py | 12 +++++++-- packages/shared-types/schemas/api-types.json | 28 ++++++++++++++++++++ packages/shared-types/src/api-types.ts | 20 ++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/apps/api/tests/test_auto_repair_service.py b/apps/api/tests/test_auto_repair_service.py index 0f6de065..df5ca5b1 100644 --- a/apps/api/tests/test_auto_repair_service.py +++ b/apps/api/tests/test_auto_repair_service.py @@ -178,7 +178,7 @@ class TestAutoRepairService: @pytest.mark.asyncio async def test_evaluate_not_high_quality(self, service, mock_playbook_service): - """Test when playbook is not high quality""" + """Test when playbook is not high quality and not cold-start eligible (MEDIUM risk)""" playbook = Playbook( playbook_id="PB-LOW-QUALITY", name="Low quality playbook", @@ -188,7 +188,15 @@ class TestAutoRepairService: alert_names=["HighCPU"], affected_services=["test-service"], ), - repair_steps=[], + repair_steps=[ + RepairStep( + step_number=1, + action_type=ActionType.KUBECTL, + command="kubectl rollout restart", + risk_level=RiskLevel.MEDIUM, # MEDIUM → 不符合冷啟動 (需 LOW) + description="restart deployment", + ), + ], success_count=2, # < 3 (冷啟動門檻 2026-04-05) failure_count=0, ) diff --git a/packages/shared-types/schemas/api-types.json b/packages/shared-types/schemas/api-types.json index 76001854..c5436fa3 100644 --- a/packages/shared-types/schemas/api-types.json +++ b/packages/shared-types/schemas/api-types.json @@ -858,6 +858,34 @@ "default": null, "description": "最後一次修復是否成功", "title": "Last Repair Success" + }, + "human_approved_count": { + "default": 0, + "description": "人工按批准後執行次數", + "minimum": 0, + "title": "Human Approved Count", + "type": "integer" + }, + "manual_resolved_count": { + "default": 0, + "description": "無系統修復紀錄但 resolved 次數", + "minimum": 0, + "title": "Manual Resolved Count", + "type": "integer" + }, + "cold_start_trust_count": { + "default": 0, + "description": "首次信任自動放行次數", + "minimum": 0, + "title": "Cold Start Trust Count", + "type": "integer" + }, + "total_resolution_count": { + "default": 0, + "description": "總處置次數 (auto + human + manual + cold_start)", + "minimum": 0, + "title": "Total Resolution Count", + "type": "integer" } }, "required": [ diff --git a/packages/shared-types/src/api-types.ts b/packages/shared-types/src/api-types.ts index 3a8f4506..cea269ef 100644 --- a/packages/shared-types/src/api-types.ts +++ b/packages/shared-types/src/api-types.ts @@ -303,6 +303,22 @@ export type LastRepairAction = string | null; * 最後一次修復是否成功 */ export type LastRepairSuccess = boolean | null; +/** + * 人工按批准後執行次數 + */ +export type HumanApprovedCount = number; +/** + * 無系統修復紀錄但 resolved 次數 + */ +export type ManualResolvedCount = number; +/** + * 首次信任自動放行次數 + */ +export type ColdStartTrustCount = number; +/** + * 總處置次數 (auto + human + manual + cold_start) + */ +export type TotalResolutionCount = number; /** * 是否已執行修復提案 */ @@ -988,6 +1004,10 @@ export interface IncidentFrequencyStats { auto_repair_count?: AutoRepairCount; last_repair_action?: LastRepairAction; last_repair_success?: LastRepairSuccess; + human_approved_count?: HumanApprovedCount; + manual_resolved_count?: ManualResolvedCount; + cold_start_trust_count?: ColdStartTrustCount; + total_resolution_count?: TotalResolutionCount; [k: string]: unknown; } /**