diff --git a/apps/api/src/repositories/drift_repository.py b/apps/api/src/repositories/drift_repository.py index d365223e..a40c16b3 100644 --- a/apps/api/src/repositories/drift_repository.py +++ b/apps/api/src/repositories/drift_repository.py @@ -116,6 +116,11 @@ class DriftReportRepository: row = result.fetchone() return _row_to_report(row) if row else None + # 2026-04-19 Claude Opus 4.7 修 drift_view 按鈕 AttributeError + # 其他 repo 慣例皆 get_by_id,對齊介面供 telegram_gateway 呼叫 + async def get_by_id(self, report_id: str) -> DriftReport | None: + return await self.get(report_id) + async def list_recent(self, limit: int = 50) -> list[DriftReport]: """列出最近 N 筆(倒序)""" async with get_db_context() as db: diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py index 5aafdd0f..32b7f212 100644 --- a/apps/api/src/services/telegram_gateway.py +++ b/apps/api/src/services/telegram_gateway.py @@ -1957,9 +1957,12 @@ class TelegramGateway: diff_summary: Diff 摘要文字 detected_at: 偵測時間 """ + # 2026-04-19 Claude Opus 4.7 修 diff_summary 被
 包成 code block (copy 按鈕 UI)
+        # 根因:
 在 Telegram HTML mode 渲染為 code block,但 diff_summary 是 AI
+        #      研判敘述 + emoji 清單(非 code),應以純文字顯示
         # Diff 長度處理 (ADR-071, Section 14.9.6)
         if len(diff_summary) <= 500:
-            diff_block = f"\n
{html.escape(diff_summary)}
" + diff_block = f"\n━━━━━━━━━━━━━━━━━━━\n{html.escape(diff_summary)}" else: web_url = f"https://aiops.wooo.work/incidents/{incident_id}/drift-diff" diff_block = f"\n⚠️ 差異過大({len(diff_summary)} 字)\n🔗 查看完整 Diff"