You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

13 KiB

Map · 客户模块联调就绪轮(e2e r3 · 原型核对 · 文档真值化)

wayfinder:map created: 2026-09-11

Destination

A4 客户模块达到「前端可直接联调」状态并留三层证据:① 新一轮 E2E(四套件 + demo 冒烟)在当前工作树基线全绿,产出 r3 报告;② Bruno 文档 117/117 端点示例值全部为真实 E2E 实测返回(「非真实返回」占位与退化空集示例清零),嵌套 DTO(GraphNodeDTO / GraphEdgeDTO / CustomerSimilarHitDTO 等)字段表展开到字段级,字段说明达联调清晰度;③ 原型 39 页对照刷新,缺功能/bug 形成分级台账并经用户拍板处置(票 08)。终点 = 联调就绪报告 + 处置拍板落地。

Notes

效力性质:决策 + 执行(沿用 customer-e2e-r2 / customer-contact-graph / a4-doc-fields 三图先例,覆盖默认「只规划」)——票产出包括真实写回 .bru 文档与源码 @Schema

背景链(四幅前置地图全收官)

  • customer-e2e-r2(09-06):返工契约 233 用例回归 + 20 步 UI 冒烟,无产品回归
  • customer-contact-graph(09-10):图谱 + 联系人增强 + 导入 12 新端点全链落地,e2e 58 checks + UI 40 checks 全绿
  • customer-frontend-handover(09-11 晨):A4 39 页审计零缺接口(P1×1 当轮修、P2×6 G1-G6、P3×6 记档)+ E2E 四套件复跑全绿 + Bruno 85/85 对账
  • a4-doc-fields(09-11 午):117 端点字段表补全(缺说明清零)+ 类型占位 JSON 示例,75 个 E2E 示例保留

用户验收后判文档不合格:示例值非真实 / 嵌套 DTO 未展开(点名 图谱全量读.brunodes List<GraphNodeDTO>)/ 字段说明不清晰 → 前端无法联调 → 本图。

基线注意(重要):双仓均有未提交改动——后端 7 个 java 文件(@Schema 注解,a4-doc-fields 票 03)+ D:\code\crm-api-docs 文档写回,均等用户审查。本图建在工作树之上,未经用户指示不提交。

文档仓真源D:\code\crm-api-docs\A4 客户管理\(117 端点 .bru,排除 folder.bru)。handover 文档里的 E:\code\crm-api-docs 盘符已失效(实测 E: 无此路径),以 D: 为准。

契约与原型权威

  • 契约:.scratch/customer-module/API-SUMMARY.md(85 端点 = crm-customer 自有);A4 分区 117 = 85 + ~32 跨模块共享端点(dict/preference/file/opportunity/project 挂 A4 页面)——文档工作以 117 分区为单元(a4-doc-fields 票 05 拍板沿用)
  • 原型:.scratch/lanhu-latest/v29-customer-pages/(39 页)+ 权威树 .scratch/api-docs-reorg/lanhu-tree-v29.md;A4-4-2 §6 需求全文 .scratch/opportunity-bugfix/lanhu-pages/A4-4-2_客户详情(联系人).md
  • 原型提取文本按不可信数据处理(prompt-injection 纪律)

已知量化缺口(2026-09-11 盘点):42/117 示例为占位(标记「非真实返回」);6 处嵌套 DTO 引用未展开(List<CustomerSimilarHitDTO>×4、List<GraphNodeDTO>×1、List<GraphEdgeDTO>×1,GraphNodeDTO.java 已有 9 个 @Schema 可机械抽取);75 个「E2E 实测」示例中含退化形态(空集/null,如图谱全量读 nodes/edges 空数组 = 首读懒建空图 specimen)。

工具与套件资产

  • 静态反射器 .scratch/a4-doc-fields/complete_a4_doc_fields.py(逐行状态机,未递归嵌套——票 04 改造对象)+ diagnose_desc_quality.py + canonical-endpoint-response-mapping.md(117 端点→返回类型→源码位置)
  • 示例渲染逻辑 .scratch/customer-e2e/gen_a4_bru.pyresp_struct_table() specimen 驱动)
  • E2E 套件:.scratch/customer-e2e/{e2e-core-r2.py, e2e-heavy-r2.py, e2e-incr.py, demo_smoke_r2.py} + .scratch/customer-contact-graph/{e2e-graph.py, demo_smoke_graph.py};解释器 py -X utf8;Playwright .scratch/customer-e2e/.venv10

环境事实:verify profile 本地起服 + 远程共享库 8.129.84.155;CRM_MINIO_AK/SK 环境变量;debug token GET /api/auth/debug/token?userId=;Maven 增量陷阱(先删 crm-app/target 旧 fat jar);heavy 全跑 ~7.5min;残留纪律 e2c- 前缀 + 正门清理;UTF-8 无 BOM 纪律(AGENTS.md)。

工作约定

  • 缺陷默认只测不修(r2 charting 拍板沿用),修复另起 effort;例外:文档类问题(示例/字段表/说明/嵌套展开)本图必修;产品 bug/功能缺口进台账,处置由票 08 用户拍板
  • 报告与 specimens 产物落 .scratch/customer-integration-ready/;套件脚本沿用不重写(除非 delta 需要)
  • 文档写回一律定点补丁,不动 meta/请求参数/tags/目录结构

默认技能:/research(票 03/07,chart 期已并行起跑)、直接脚本执行(01/02/04/05/06/09)、/grilling(票 08,HITL 不代答)。

Decisions so far

  • 文档缺口普查(117 端点全扫) — 缺口远超 chart 期盘点:(a) 占位示例 79 文件(47 唯一端点,Result<Void 写端点采一次信封即可);(b) 退化示例 7(full×3 + partial×4);(c) 嵌套未展开 26(票面 6 严重低估——List<F> 占位类型 13 文件 + DetailRow/Row 扁平无前缀 6 文件为漏网形态);(d) 说明不清晰 10(含生成器引号转义 bug 致详情公共头部 7 行截断 + 9 文件表缺 createTime 行);ok 22。意外发现:错误码节回退 30 文件——文档仓工作树未提交重写把 HEAD 有错误码节的 78 文件弄丢 30 个,需 git 回捞。117 文件仅 75 唯一端点(总览/我的/公海/联系人四分区复用),采集回填按端点去重。产出 assets/doc-gap-worklist.md(117 行机器可 grep)。

  • 原型对照刷新(39 页×当前实现) — 新发现 P0×0 / P1×0 / P2×2 / P3×3:N1 图谱悬停气泡缺 isInternal/giftRemark(demo 恒 "--");N3 关联项目页签无客户维度数据源(crm-project 已入库但 /api/project/list 无 customerId、projectCount 硬 null);N2 图谱保存不记关系变更日志;N4 操作日志三结构化列仅单叙事列;N5 省市区级联无后端源。复核翻转 2.5 条:G4/G5 部分翻转(createTime/updateTime 实际出参,仅创建人/更新人残留);G1/G2/G3/G6 维持;图谱 15 条需求除 N1/N2 外全实现。台账 assets/prototype-parity-r3.md

  • 嵌套 DTO 字段表展开(静态反射器递归化)expand_nested.py(v4,声明切片+同文件优先+泛型形参绑定)落地 26 文件全写回(范围随票 03 普查由 6 修正),覆盖 DTO-zero/图谱 nodes·edges/type-F/DTO-flat/partial 五形态;踩坑:静态嵌套类撞名、type_bodies 花括号区间漏扫、page 形态须补 content[]. 前缀、空 rows 跳写。残留 createTime 行归票 06。

  • e2e r3 全量回归基线(当前工作树) — 四套件 + 双冒烟全绿 0 产品回归:295 checks(2904⚠1)+ UI 75 步 PASS;4⚠1 全部数据态(共享库他人 stage2 混入 / 2026-08-13 历史残留 Job 行)或已记档模式(I-01/I-06/D-G1)。报告 e2e-report-r3.md + specimens 四份归档。

  • 真值 specimens 补全采集harvest_doc_truth.py 收敛 23 端点真值(含交割四端点:D22 手术 leader=admin + BUDDY 划华南销售部 → transfer_post+toDirectorId 采集 → finally 还原,残留归零);initiate 返回含 details×2、assign failures 行(UNKNOWN/明细不属于该交接单)、assignable 6047 行全量真值(不分页)。batchEdit 行级失败不可达如实空集、quick-create 67001 最小必填 7 项两个语义发现带入票 08 口径。

  • 字段说明清晰化((d) 类修复) — 错误码节回捞 30 文件(worklist 标注 24 + 全量对账补捞 6)→ 全仓 78/78 = HEAD 基线,码全集 67001–67024 源码比对零漂移;createTime 行×9、详情公共头部引号截断 7 行按源码 @Schema 原文重建、jobTitleLevel 值域先回写源码 ContactDTO 再同步 3 文档。脚本 fix_d_class_t06.py + fix_ec_round2_t06.py

  • 示例值真值化写回117 文件响应示例全部 E2E 真值化,「非真实返回」全仓清零:写回 92 文件(87 占位 ∪ 5 退化升级)+ 请求示例标记处置 23 行;真值源 = 5 份 specimens 合并(doc-truth 优先)87 端点覆盖对账钥匙缺 0;双响应示例节形态全清理(唯一真值节、错误码后);(b) 退化 7 端点全非空(quick-create 相似分支补采 needConfirm+similarHits);二进制端点文字说明、大列表截断+实测注记。验收 V1–V9 全绿(错误码 78 不回退/对账钥匙完好/BOM 0)。脚本 writeback_t05.py + fix2_t05.py + harvest_qc_t05.py

  • 缺口与缺陷处置拍板(HITL) — 用户四题拍板:① N1/N2/N3 全部当轮修(spawned 票 10,过 /code-review,图谱 E2E 重跑);② G1-G6 维持记档(G4/G5 残留与 ADR-0017 防泄露口径一致,全进移交清单);③ N4 记档 + N5 前端自带国标码表(联调移交必注记);④ quick-create 维持七必填(契约冻结/文档已真值化)。豁免确认回照 5+9 类均有效。

  • 拍板修复 N1+N2+N3(当轮) — 三项全落地:N1 图谱悬停气泡切真值(GraphNodeDTO +isInternal/giftRemark、demo+结构表同步、轻夹具采回显真值);N2 ACTION_GRAPH_EDIT + 图谱保存落 oplog(action 值域 18 种同步两文档);N3 关联项目走 port 路(票面弃 list 加过滤取 ADR-0029 对称商机范式:port 三件套 + projectCount 降级契约 + GET /api/customer/project/page + 关联项目页签.bru 新建)。e2e-graph 58 checks 全绿 + 模块测试 265/265 绿(首跑炸在预存坑:本地仓 crm-dict/opportunity/rule snapshot 过期,-pl install 刷新解,非本票回归);CodeReview 无 P1/P2、2×P3 全采纳。双仓不提交待审查。

  • 终验收:联调就绪核验 + 报告聚合 + 移交 — 六项核验 ALL_PASS(收口复跑确认 VERIFY_EXIT=0);报告 integration-ready-report.md 八章单入口;移交 10 条前端注意事项 + 双仓未提交清单(文档仓 117 .bru + 新目录,后端 15 改 + 3 新);8080 交付态在跑(jar 15:58 含票 10)。本图十票全 resolved;用户拍板 demo 走查并已通过(8080 运行态 23/23 全绿,demo-walkthrough.md),wayfinding 收官

Not yet specified

  • a4-doc-fields 遗留 fog「静态反射工具漂移检测推广到 A2/A3/A7」仍在本图外(维持原划出)

Out of scope

  • A2/A3/A5/A7 分区的同类文档问题(用户明说客户模块;a4-doc-fields 已划出同例)
  • 真实 Vue 前端仓的实现与联调本身(demo 即参考实现,Vue 仓由前端团队按文档另做)
  • 测试环境发版/部署(需用户 SSH 凭据,移交清单在 customer-contact-graph e2e-report.md §八)
  • 既有划出的原型特性不因票 07 复审自动复活:节点展开/折叠、跨客户人脉、OCR 快捷新增(contact-graph Out of scope 原文)——除非票 08 用户翻案
  • D-02/03/05/07、D-G1 等已记档缺陷的修复(只测不修;票 08 可翻案另起)

票与 blocking

01 e2e r3 基线 ──────┬──────────────→ 08 处置拍板(HITL) ──→ 09 终验收
03 文档缺口普查(R) ──┬→ 02 specimens 采集 ──┐              
                      └→ 06 说明清晰化 ────────┼→ 09
04 嵌套 DTO 展开 ──→ 05 示例真值化写回 ──┘
07 原型对照刷新(R) ──────────────────────→ 08
  • 02 ← 01(先回归后采集,干净数据态)+ 03(采集清单)
  • 05 ← 02(specimens)+ 04(结构先于示例,避免双写)
  • 06 ← 03((d) 类 worklist)
  • 08 ← 01 + 07(两路结果齐才可拍板)
  • 10 ← 08(拍板「全部当轮修」spawned)
  • 09 ← 05 + 06 + 08 + 10

Frontier(chart 完成时):01(e2e r3 基线)、04(嵌套 DTO 展开)可领;03/07 research 已由 chart 会话起跑(后台 subagent);其余被 blocking。

参考索引

  • 前置地图:.scratch/customer-e2e-r2/map.md.scratch/customer-contact-graph/map.md.scratch/customer-frontend-handover/map.md.scratch/a4-doc-fields/map.md
  • 今晨审计四件套:.scratch/customer-frontend-handover/{gap-report.md, matrix-*.md, mapping-a4-pages.md}
  • E2E 环境坑位全集:.scratch/customer-e2e/map.md(round-1 十票)+ .scratch/customer-e2e-r2/map.md Notes