From 2625d442f21ad16273091db080a9fbd71150a4c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Thu, 8 Oct 2026 20:03:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AE=A1=E6=9F=A5=E6=94=B6?= =?UTF-8?q?=E5=B0=BE=E2=80=94=E2=80=94=E6=8B=AC=E5=8F=B7=E5=8F=AF=E8=AF=BB?= =?UTF-8?q?=E6=80=A7/outbound=5Fnumber=E5=89=8D=E6=8F=90=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- app/services/cc_completion.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/services/cc_completion.py b/app/services/cc_completion.py index f145721..2f846cd 100644 --- a/app/services/cc_completion.py +++ b/app/services/cc_completion.py @@ -328,7 +328,10 @@ def cc_state_for(cc_map: dict | None, channel: str, value: str) -> dict | None: def outbound_number(value: str, state: dict | None) -> str: - """邮件正文联系方式行的展示值(spec §5 首封矩阵): + """ + + ⚠️ 前提: state 必须来自 cc_state_for 的产物(canon 已匹配); + 裸传 state 会失去残留态防御(审查 Issue 2)。邮件正文联系方式行的展示值(spec §5 首封矩阵): - 有 e164 且 confirmed → 纯 e164(prefix_normalized/ip_confirm/ customer_stated,码是客户自己写的/确认过的,零标注); @@ -341,7 +344,7 @@ def outbound_number(value: str, state: dict | None) -> str: raw = str(value or "") e164 = str((state or {}).get("e164") or "") if not e164: - return raw + NOTE_MISSING_CC if state is not None else raw + return (raw + NOTE_MISSING_CC) if state is not None else raw if state.get("confirmed"): return e164 return e164 + NOTE_UNCONFIRMED