# 02 — Regression verification **What to build:** 票 01 合入后的回归核对——确认收拢只动了结构、没动行为。机械核对项打勾即可,不需要写新代码;发现任何偏差回票 01 修,不在本票内打补丁。 **Blocked by:** 01 **Status:** resolved - [x] `createLead` 编排 ≤ 20 行(validateLeadFields → plan → save → followOnCreate → record 五步;实际编排体 19 行) - [x] 重复计数核对:ADMIN_ONLY 判定 3→2 处(planner `requireSelfClaimable` 1 + `claimLead` 1)、归池仪式 3→1 处(`applyPoolBinding`)、领取仪式实体版 3→1 处(`applyClaim`);状态机 CAS 版仪式 2 处(applyClaim / applyAssignToUser)原样保留——那是锁不是规则 - [x] `mvn test` 全模块 BUILD SUCCESS(crm-base / crm-file / crm-auth / crm-dict / crm-rule / crm-preference / crm-lead / crm-app 全绿;crm-lead 106/106) - [x] BOM 扫描:全部 `*.java` 无 `EF BB BF` 前缀(全库八个 src 树扫描干净) - [x] wire 契约未动:Bruno 集合无需同步(git 变更清单不含 `LeadController` / `ILeadService`,错误码零变化) - [x] 三件套齐:`crm-lead/CONTEXT.md` 含「创建规划」条目、`docs/adr/0026-lead-creation-planner-deep-module.md` 存在、本目录票据 01-02 落位 ## Comments **2026-08-20 核对记录:** - 计数核对方式:全库 grep `setPoolNameSnapshot(pool.getPoolName())` = 1 处(planner)、`setOwnerNameSnapshot(owner.name())` = 1 处(planner)、`CLAIM_RULE_ADMIN_ONLY` 判定 = 2 处(planner + claimLead);`LeadTransitionImpl` 的 LambdaUpdateWrapper 版仪式(`Lead::getOwnerNameSnapshot` 等 7 处 `.set()`)原样保留 - 测试数目对账:crm-lead 97 → 106 = 97 − 5(迁移的旧 create 用例)+ 13(planner)+ 1(service 委派验证) - git 变更中 `.scratch/lead-defect-a2-a7-3-1/*`、`.scratch/opportunity-module/*`、`crm-opportunity/CONTEXT.md` 为其他会话遗留的工作区变更,与本票无关