fix(mcp): normalize audit session ids
This commit is contained in:
@@ -3931,3 +3931,35 @@ ruff check apps/api/src/jobs/km_backfill_reconciler_job.py apps/api/tests/test_k
|
||||
### 影響
|
||||
|
||||
- KM / PlayBook / RAG 飛輪的 backfill 補救鏈恢復可持續執行,避免 DLQ 堆積後造成知識庫關聯缺口。
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-06(台北)— MCP audit session_id 長度止血
|
||||
|
||||
**觸發**:production log 出現多筆 `mcp_audit_write_failed`,錯誤為 `value too long for type character varying(36)`。根因是 legacy MCP caller 新增 `_mcp_audit.session_id` 後,像 `incident:INC-20260505-E8033A:pre_decision` 這類可讀 session id 超過既有 `mcp_audit_log.session_id` 欄位長度,導致 MCP 稽核落地失敗。
|
||||
|
||||
### 已修正
|
||||
|
||||
| 範圍 | 結果 |
|
||||
|------|------|
|
||||
| `mcp_audit_context.py` | 新增 `normalize_mcp_audit_session_id()`,針對 incident / callback / approval / mcp_bridge 等已知格式壓縮到 36 字元以內,同時保留 incident 可讀性與 hash 去重 |
|
||||
| `mcp_audit_service.py` | 在真正寫入 `mcp_audit_log` 前再做一次 session_id 正規化,補住手動 `_mcp_audit` 呼叫路徑 |
|
||||
| 測試 | 新增 helper 與 `record_mcp_call()` 回歸測試,驗證 live incident 型 session id 不會再超出 DB 欄位 |
|
||||
|
||||
### 驗證
|
||||
|
||||
```text
|
||||
pytest apps/api/tests/test_mcp_audit_context.py apps/api/tests/test_mcp_audit_service.py apps/api/tests/test_pre_decision_investigator.py::TestCollectOne::test_collect_one_injects_mcp_audit_context apps/api/tests/test_post_execution_verifier.py::TestCollectPostStateAuditContext::test_collect_post_state_injects_mcp_audit_context apps/api/tests/test_callback_dispatcher.py::test_dispatch_action_injects_mcp_audit_context apps/api/tests/test_platform_router_order.py
|
||||
# 8 passed
|
||||
|
||||
py_compile apps/api/src/services/mcp_audit_context.py apps/api/src/services/mcp_audit_service.py apps/api/tests/test_mcp_audit_context.py apps/api/tests/test_mcp_audit_service.py
|
||||
# 通過
|
||||
|
||||
ruff check --select F401,F821,I001 apps/api/src/services/mcp_audit_context.py apps/api/src/services/mcp_audit_service.py apps/api/tests/test_mcp_audit_context.py apps/api/tests/test_mcp_audit_service.py
|
||||
# All checks passed
|
||||
```
|
||||
|
||||
### 注意
|
||||
|
||||
- 這次先做 runtime 止血,避免 AwoooP / AI 飛輪的 MCP audit 盲點擴大。
|
||||
- 後續仍建議用正式 migration 將 `mcp_audit_log.session_id` 放寬為 `varchar(128)` 或 `text`,讓 trace / run / session 語義可以完整保留。
|
||||
|
||||
Reference in New Issue
Block a user