From 3a6acae408fc91469f28ba56097844f47dd68d02 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 1 May 2026 11:03:03 +0800 Subject: [PATCH] fix(km): add phase25 knowledge enum labels --- apps/api/migrations/phase25_knowledge_enum_names.sql | 6 ++++++ apps/api/tests/integration/setup_test_schema.sql | 2 +- docs/LOGBOOK.md | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 apps/api/migrations/phase25_knowledge_enum_names.sql diff --git a/apps/api/migrations/phase25_knowledge_enum_names.sql b/apps/api/migrations/phase25_knowledge_enum_names.sql new file mode 100644 index 00000000..c28aca3e --- /dev/null +++ b/apps/api/migrations/phase25_knowledge_enum_names.sql @@ -0,0 +1,6 @@ +-- Phase 25 Knowledge Auto-Harvesting enum compatibility +-- SQLAlchemy stores Enum names (AUTO_RUNBOOK / ANTI_PATTERN) for EntryType. +-- Older production DBs only had lowercase labels from the first migration. + +ALTER TYPE entrytype ADD VALUE IF NOT EXISTS 'AUTO_RUNBOOK'; +ALTER TYPE entrytype ADD VALUE IF NOT EXISTS 'ANTI_PATTERN'; diff --git a/apps/api/tests/integration/setup_test_schema.sql b/apps/api/tests/integration/setup_test_schema.sql index 4312ed12..fec999de 100644 --- a/apps/api/tests/integration/setup_test_schema.sql +++ b/apps/api/tests/integration/setup_test_schema.sql @@ -26,7 +26,7 @@ DO $$ BEGIN CREATE TYPE entrystatus AS ENUM ('DRAFT','REVIEW','APPROVED','ARCHIVED','published'); END IF; IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'entrytype') THEN - CREATE TYPE entrytype AS ENUM ('INCIDENT_CASE','RUNBOOK','BEST_PRACTICE','POSTMORTEM','auto_runbook','anti_pattern'); + CREATE TYPE entrytype AS ENUM ('INCIDENT_CASE','RUNBOOK','BEST_PRACTICE','POSTMORTEM','auto_runbook','anti_pattern','AUTO_RUNBOOK','ANTI_PATTERN'); END IF; END $$; diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index e320f757..de3b7d25 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -15,6 +15,7 @@ Live e2e 用 `HostBackupFailed` 打 Alertmanager 後發現 aged backup 告警會 - `AutoRepairService` 追加 host/backup Playbook guard:主機/備份 incident 若匹配到 K8s rollout 類 Playbook,阻擋為 `HOST_BACKUP_K8S_PLAYBOOK`,改走緊急介入。 - `AutoRepairService` post-verification rollback guard:host/backup 或非 K8s Playbook 驗證失敗時,不再合成 `kubectl rollout restart deployment/{target}`,改走 emergency escalation,且不自動 resolve incident。 - `EmergencyEscalationService` 沿用既有 `APPROVAL_ESCALATED` DB enum 寫 AOL,避免緊急通道因新 enum 未 migration 而留痕失敗。 +- 補 `phase25_knowledge_enum_names.sql`,讓 `AUTO_RUNBOOK` / `ANTI_PATTERN` enum name 可寫入 PG,修復 auto runbook KM 沉澱失敗。 - `NodeExporterDown` Prometheus rule `auto_repair` 改為 `true`,與 YAML rule catalog 的 exporter restart 策略一致。 - 補 `backup_failure` NO_ACTION / SSH_DIAGNOSE 單元測試。