# 联调 demo 走查记录(票 09 用户验收 · 2026-09-11) **环境**:localhost:8080 verify profile(jar 2026-09-11 15:58 重建,含票 10 全部修复)+ 远程共享库 8.129.84.155。 **脚本**:`demo_walkthrough.py`(纯 API 级,即前端联调所见契约);全量请求/响应 → `demo-walkthrough-log.txt`。 **结果**:**23/23 全绿**(16:38 终轮;此前四轮为脚本本身调试——industryCode 缺失 / 13 位电话 / 等级语义反置 / 断言笔误,非产品问题)。 ## 走查步骤与结果 | # | 链路 | 要点 | 结果 | |---|---|---|---| | ① | 鉴权 | debug token → Bearer | PASS | | ② | 核心 CRUD | create 表单绑定 / detail 全字段回显 / edit 带 version / 旧 version → **67005** | PASS | | ③ | 脱敏/明文 | contact create(data 直出 id 字符串)/ 列表 `phone` 即脱敏值 / reveal 明文 | PASS | | ④ | 图谱 | 联系人自动落图 / save 建边 / **N1** isInternal+giftRemark 出参 / **N2** oplog GRAPH_EDIT / 旧 version → **67018** | PASS | | ⑤ | 关联项目 N3 | project/page 反查 crm-project 真数据(阶段/状态/报备名回退链)/ detail-head.projectCount='1' | PASS | | ⑥ | 文档对拍 | 《关联项目页签》15/15、《图谱全量读》13/13、《详情公共头部》23/23 文档示例字段 ⊆ 实跑响应 | PASS | | ⑦ | 清理 | 项目夹具行 DB 删 + 客户 archive 正门(oplog ARCHIVE 行复核) | PASS | ## 走查反证的实跑契约要点(全部能在文档找到出处) 1. **edit 也走相似名闸门**:`needConfirm=true + similarHits`(code=0,**未落库**),带 `confirmSimilar=1` 重发才应用;命中含**已归档**客户(`archiveStatus=2`)——《编辑客户.bru》已写明。 2. **contact create 成功时 `data` 直接是 id 字符串**,非对象。 3. **脱敏字段名分场景**:联系人列表/详情出参 `phone` 字段即脱敏串(`130****5693`);图谱节点出参才叫 `phoneMasked`;明文一律走 reveal。→ 报告 §五第 4 条已据此修正。 4. **图谱等级语义**:上级等级数值须**严格大于**下级(`1 ≤ 2` 报 67019 等级倒挂)。 5. **联系人创建即自动落图**:graph version 随 CONTACT_ADD 递增(非首读空白懒建)。 6. **计数类一律字符串出参**:`projectCount='1'`、`total='1'`(ADR 长整型字符串口径,防 JS 精度丢失)。 7. **归档 ≠ 删除**:archive 后 detail/oplog 仍可读,oplog 落 ARCHIVE 行;归档客户对图谱读不可见(67002)。 8. **冲突文案实测**:67005「客户已被他人修改,请刷新后重试」/ 67018「图谱已被他人修改(版本冲突),请刷新后重试」。 ## 对拍口径说明 《图谱全量读》对拍为 13/13「文档示例字段 ⊆ 实跑」且实跑恰多 `edges[].parentId/childId` 两键——纯数据态差异(走查建了真实边,文档示例 edges 为空),顶层键 `version/nodes/edges` 两侧完全一致,无契约漂移。 ## 残留 全部归零:走查客户 5 例全走 archive 正门(含崩溃轮残留 753654021008392192),项目夹具行即插即删。归档夹具在回收站可查(`e2c-集成走查-*`)。