From 9b9ff5bec64759290e3a98768c9a82d342d3dc46 Mon Sep 17 00:00:00 2001 From: OG T Date: Tue, 14 Apr 2026 19:21:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(critical):=20approval=5Frecords.incident=5F?= =?UTF-8?q?id=20=E6=AC=84=E4=BD=8D=E6=9C=AA=E5=AF=AB=E5=85=A5=20=E2=80=94?= =?UTF-8?q?=20Telegram=20=E5=8D=A1=E7=89=87=E6=89=BE=E4=B8=8D=E5=88=B0=20I?= =?UTF-8?q?NC=20=E7=B7=A8=E8=99=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🚨 統帥實測發現(live-fire #2, #3 反復找不到卡片): DB 查詢證據: SELECT id, incident_id, telegram_message_id FROM approval_records → incident_id=NULL, telegram_message_id=NULL (所有新 approval) 但 incidents 表確實有對應的 INC-20260414-3318E8 / 5C90CC。 根因: approval_db.approval_request_to_record_data() dict 定義完全沒有 incident_id 欄位。ApprovalRequestCreate schema line 165 明明有 incident_id: str | None, 但轉 record 時被丟掉 → DB 永遠 NULL → Telegram 卡片顯示 INC 號空白。 影響: - 用戶 Telegram 上根本認不出是哪個 incident 的審核卡 - 人工審核閉環名存實亡(即使批准也無法連回 incident) - update_telegram_message_id 路徑也無法 fallback 補回(查 NULL 找不到) 修復 (最小侵入): 在 dict 補 "incident_id": request.incident_id 影響範圍零破壞: - 舊 approval 繼續 NULL (不動) - 新 approval 此後會正確寫入 - DB schema 本來就有此欄位 (line 280 Mapped[str|None]) Co-Authored-By: Claude Haiku 4.5 --- apps/api/src/services/approval_db.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/api/src/services/approval_db.py b/apps/api/src/services/approval_db.py index 0a635006..9ae36fff 100644 --- a/apps/api/src/services/approval_db.py +++ b/apps/api/src/services/approval_db.py @@ -159,6 +159,10 @@ def approval_request_to_record_data( "fingerprint": fingerprint, "hit_count": 1, "last_seen_at": now, + # 2026-04-14 Claude Sonnet 4.6: 補漏 — 原本 incident_id/telegram_message_id + # 不在 dict 裡導致 DB 欄位永遠 NULL,Telegram 卡片顯示 INC 號是空白 + # 用戶在 Telegram 根本認不出對應的告警,審核閉環名存實亡 + "incident_id": request.incident_id, }