docs: spec复审终修——状态机②轮矛盾/资产表同步/标注出站派生零泄漏/更正触发落笔/推送v1不做correction/测试补项

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-08 15:10:59 +08:00
parent 8d07fc5ec1
commit 4c37ff0cb1
@@ -20,8 +20,8 @@
| 能力 | 现状 | 结论 | | 能力 | 现状 | 结论 |
|---|---|---| |---|---|---|
| WS 路由真实 IP | chat.py:24-27 已处理 X-Forwarded-For 第一段 | ✅ 复用 | | WS 路由真实 IP | chat.py:24-27 已处理 X-Forwarded-For 第一段 | ✅ 复用 |
| REST 路由真实 IP | chat_rest.py:107 仅 request.client.host(反代下=127.0.0.1) | ⚠️ 前置补 XFF(一行) | | REST 路由真实 IP | /session 的 client_info 来自请求体(自报);:107 仅喂限流 | ⚠️ /session 注入 Request 合并 XFF(§4.5) |
| IP→国家 | ip_service.resolve_country(iptocc,返回中文/ISO) | ✅ 复用(内部用 ISO code) | | IP→国家 | ip_service.resolve_country(中文/ISO 混合,另有 AU 重复键 bug) | ⚠️ 新增 resolve_iso 直返 ISO + 修 bug(§4.5) |
| 国家→电话前缀 | 无 | ❌ 新建映射表 | | 国家→电话前缀 | 无 | ❌ 新建映射表 |
| CC 强制墙骨架 | conversation.py cc_wall 缓冲/替换/Important-2 closing | ✅ 复用(换文案) | | CC 强制墙骨架 | conversation.py cc_wall 缓冲/替换/Important-2 closing | ✅ 复用(换文案) |
| 出站管道 | email_service + lead_push._build_payload | ✅ 挂补全点 | | 出站管道 | email_service + lead_push._build_payload | ✅ 挂补全点 |
@@ -35,7 +35,7 @@
│ → [_cc_conf] ②号码确认轮:"…reach you at {补全号} — is that right?" │ → [_cc_conf] ②号码确认轮:"…reach you at {补全号} — is that right?"
│ (墙白名单放行该精确号码;确认句墙保证必出) │ (墙白名单放行该精确号码;确认句墙保证必出)
│ ├─ Yes → [终态 _cc_done] 客户亲口确认 │ ├─ Yes → [终态 _cc_done] 客户亲口确认
│ └─ No / 无法判定(一次重试后仍无)→ 请给完整号一次[_cc_asked_full] │ └─ No / 无法判定(②仅此一次,不重试)→ 请给完整号一次[_cc_asked_full]
│ → 给了(带前缀)→ [终态 _cc_done,用客户号无标注] │ → 给了(带前缀)→ [终态 _cc_done,用客户号无标注]
├─ No(猜错)→ 请给带码完整号一次[_cc_asked_full] → 得到则 [终态 _cc_done] ├─ No(猜错)→ 请给带码完整号一次[_cc_asked_full] → 得到则 [终态 _cc_done]
└─ 无法判定 → ①重试一次 → 仍无 → 请完整号一次 → 仍无 → [超限终态 _cc_done] └─ 无法判定 → ①重试一次 → 仍无 → 请完整号一次 → 仍无 → [超限终态 _cc_done]
@@ -100,12 +100,17 @@ No 后不再重复②,直接进"请完整号一次";"请完整号"全会话
+标注的更正(信息升级)。 +标注的更正(信息升级)。
- **邮件**:更正邮件渲染 `_cc_full` 补全号 + 标注(`+966501234567(原号 - **邮件**:更正邮件渲染 `_cc_full` 补全号 + 标注(`+966501234567(原号
0501234567,据 IP+客户确认为沙特,已补国家码)`) 0501234567,据 IP+客户确认为沙特,已补国家码)`)——**标注由 `_cc_full`+
当前裸号在出站渲染时派生,不落 raw_info 正常键**(正常键会进三处 LLM 输入
路径被 GLM 当客户信息看见——泄漏前科教训,钉死为零泄漏面)
- **更正邮件触发机制(复审落笔说明)**:现有 correction 触发条件是 canon 变化
(Yes→Yes 路径 canon 不变、永不自然触发)——实现必须以"本轮 `_cc_done` 与
`_cc_full` **同时新出现**"为强制触发事件独立插入;额度耗尽
(correction_count≥3)时跳过;`ev.contact_info` 快照同步更新为补全号
- **推送(UniService,当前关闭)**:contact.phone/whatsapp 给**干净补全号** - **推送(UniService,当前关闭)**:contact.phone/whatsapp 给**干净补全号**
(E.164,无标注——对端契约要求"带国际区号且有效",中文标注串会被整条拒收, (E.164,无标注——对端契约要求"带国际区号且有效",中文标注串会被整条拒收);
见 docs/AI_INQUIRY_PUSH_API.md);标注写 profile 的正常键(如 **v1 明确不做** correction 推送(邮件主通道已完整;推送启用后靠自然轮/
`号码补全说明`,随画像进 CRM);推送时机=确认完结后的下一轮自然触发(或 届时再补)
correction 推送,与邮件对齐,v1 只做自然轮)
- ⚠️ 消费顺序:`_build_payload` 先读 raw_info 生成补全 contact → 再过滤 `_` 键 - ⚠️ 消费顺序:`_build_payload` 先读 raw_info 生成补全 contact → 再过滤 `_` 键
- DB 不改客户原文;聊天里仅②确认轮展示补全号(白名单放行) - DB 不改客户原文;聊天里仅②确认轮展示补全号(白名单放行)
@@ -135,6 +140,9 @@ bug:`"AU": "加拿大"` 重复键吞掉了加拿大(应为 CA),并新增
4. 墙测试:白名单精确放行(同号放/异号拦/无参数照拦);确认句替换 4. 墙测试:白名单精确放行(同号放/异号拦/无参数照拦);确认句替换
5. 出站测试:邮件/push 的补全与标注;`_` 键过滤与消费顺序 5. 出站测试:邮件/push 的补全与标注;`_` 键过滤与消费顺序
6. 真实 LLM 验收:全流程三路径 + 误判对照(长消息含 Yes 不触发) 6. 真实 LLM 验收:全流程三路径 + 误判对照(长消息含 Yes 不触发)
7. (复审补项)存量 `_cc_asked` 等价终态不重复问;旁路转移(流中给完整号→
①②全退);更正邮件补发时机(_cc_done+_cc_full 新出现触发)与额度耗尽
跳过;推送 contact 为纯 E.164 断言
## 7. 风险 ## 7. 风险