From 914c7e7a9083768279cf1c4beb43229752c020e9 Mon Sep 17 00:00:00 2001 From: OG T Date: Tue, 14 Apr 2026 20:01:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=209b9ff5b=20=E5=BC=95=E7=99=BC=E7=9A=84=20?= =?UTF-8?q?NoneAttr=20bug=20=E2=80=94=20incident=5Fid=20=E4=B8=8A=E7=A7=BB?= =?UTF-8?q?=E5=88=B0=20Base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bug: 'ApprovalRequestCreate' object has no attribute 'incident_id' Live-fire #6 整個 webhook 500 fail。 根因: 9b9ff5b 在 approval_db 寫 request.incident_id, 但 ApprovalRequestCreate 繼承 Base 沒這 field(只在 ApprovalRequest 才有)。 修復: 把 incident_id 上移到 ApprovalRequestBase - ApprovalRequestCreate 自動繼承 → webhook 可建帶 incident_id 的 request - ApprovalRequest 不重複定義 - 786/786 回歸測試全過 Co-Authored-By: Claude Haiku 4.5 --- apps/api/src/models/approval.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/api/src/models/approval.py b/apps/api/src/models/approval.py index 182cf4b6..0775c311 100644 --- a/apps/api/src/models/approval.py +++ b/apps/api/src/models/approval.py @@ -140,6 +140,9 @@ class ApprovalRequestBase(BaseModel): requested_by: str = Field(..., description="請求發起者") expires_at: datetime | None = Field(default=None, description="到期時間") metadata: dict | None = Field(default=None, description="額外元資料") + # 2026-04-14 Claude Sonnet 4.6: 上移 incident_id 到 Base, + # 讓 ApprovalRequestCreate 也能攜帶(修 9b9ff5b 的 NoneAttr bug) + incident_id: str | None = Field(default=None, description="關聯的 Incident ID") class ApprovalRequestCreate(ApprovalRequestBase): @@ -161,8 +164,7 @@ class ApprovalRequest(ApprovalRequestBase): fingerprint: str | None = Field(default=None, description="告警指紋 Hash") hit_count: int = Field(default=1, description="聚合觸發次數") last_seen_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="最後觸發時間") - # 2026-04-06 ogt: 關聯 Incident — 萃取 Playbook 與 KM 寫入必須知道 incident_id - incident_id: str | None = Field(default=None, description="關聯的 Incident ID") + # 2026-04-14 Claude Sonnet 4.6: incident_id 已移至 Base(避免 ApprovalRequestCreate 缺欄位) @property def current_signatures(self) -> int: