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.
 
 
 
 
 
 

6.2 KiB

01 — 缺陷修复白盒验收(重点 D-01 根因修复)

Type: task Status: resolved Blocked by: 无

任务

对三个前置 effort 的缺陷修复做代码级白盒复核(不起服,静态审查 + 单测),产出验收核对清单:

  1. D-01 新建商机 500(opportunity-fix,重点)
    • OpportunityIntakeImpl.applyInitialStage 现状 = fail-fast(无发布中模板/版本无节点 → OpportunityIntakeException → 60001 友好错,非 500),确认无零值兜底残留、无回归
    • OpportunityRuleConstants.CODE_STAGE_TPL_SEED_PROTECTED = 64018OpportunityStageTemplateServiceImpl.deleteDraft / disableTemplate 预设保护在位(OPP_STAGE_TPL_01 不可删不可停;publish 内部 updateStatus 不走 disableTemplate 不破坏不变式);
    • buildOpportunity 组装路径与 current_stage_id 赋值链完整性核对(票 02 将做运行时断言,本票锁代码语义)。
  2. opportunity-bugfix D-01~D-22 逐条静态复核:对照 retest-verdicts.md 裁决与 e2e-report.md §四终版状态,核对各修复锚点代码在位——owner 快照组件(crm-opportunity/owner/)、6 写端点(customer×3 / team×3)、OpportunityActionGuard(66003 暂缓禁写 / 66014 禁领预检)、OpportunityViewFilter(board viewType)、fillEchoFields(D-16 六字段)、bizType 四值封闭(D-21)、三族 versions DTO(D-22)、工作计划四端点(票 12)。
  3. 工作区状态核对:git status 中票 12 未 commit 代码(OpportunityWorkPlanAddDTO/UpdateDTO 等 untracked 文件)确认在位且完整;git log 最新 commit 与工作区差异盘点,确认「待打包进 fat jar 的增量」清单。
  4. 全量单测mvn test(10 模块),基线 = 票 09 的 394/0/0 + 票 12 增量;crm-auth ResourceServiceImplTest.save_editCatalog_noButtonFields 既有红灯豁免记录。

验收

  • 验收核对清单落盘(23 条 = opportunity-fix D-01 + bugfix D-01~D-22,每条:缺陷 → 修复锚点(文件#行为)→ 代码现状 → 结论 /);
  • 单测结果记录(模块 × 通过/失败,豁免项单独列);
  • 若发现修复缺失/回归 → 记录并按地图 fog 口径处置(少量就地修,成批开新票);
  • Answer 记录结论摘要 + 清单文件路径。

Answer

20260831 白盒验收通过:23/23 修复锚点全部在位,0 条 ;全量单测 873/0/0(BUILD SUCCESS)。无需修复,票 02 可直接进入 E2E 重跑。

核对清单(23 条逐条:缺陷 → 锚点 → 现状 → 结论):../defect-fix-audit.md(本次产出);原始日志:../mvn-test.log

① 重点 D-01(opportunity-fix)五点全绿

  • applyInitialStage fail-fast 在位:无发布中模板 / 版本无节点 → OpportunityIntakeException → seam 译 BusinessErrorException(=ResultCodeEnum.BUSINESS_ERROR 60001),stage 三列零值兜底无残留
  • 64018 预设保护在位:disableTemplate/deleteDrafttemplateCode=OPP_STAGE_TPL_01 拦截(任何版本不可删/停);publish 内部直调 updateStatus 顶替旧版,编辑发布中预设模板再发布不受误拦,不变式保持;
  • buildOpportunitycurrent_stage_id 赋值链完整(三列命中后落位);L96-103 空串/0 兜底仅覆盖 7 个非 stage 字段(线索转入防御),非 D-01 兜底残留。

② bugfix D-01~D-22 全锚点复核

  • 19 条已修复项锚点全部在位(6 写端点+66011/12/13 三步事务、ActionGuard 66003×17 接线点/66014 claim 全量预检、三族清三毒、owner 三件套+五端点服务端解析、D-14 create+edit merged、ViewFilter 六视图、fillEchoFields 六字段、submitCard 显式两列回写、recordStatusFlowOplog ×10 流转边、bizType 四值封闭、三族 versions DTO、workplan 四端点含 finishTime 回填);
  • 3 条翻案项(D-08/18/19)「非缺陷形态保持」核对通过:close 不拦、surveySeq 必填、surveyDesc 非必填——与裁决一致。

③ 次要瑕疵 3 处(不阻塞,不另开票)

  1. OpportunityIntakeImpl 文档残留 ×2:applyInitialStage javadoc(L128-133)+ buildOpportunity L119 注释仍描述已撤销的「零值兜底/走法 A」旧方案,与 fail-fast 方法体矛盾 → 建议票 03 改 demo 时顺手修正
  2. OpportunitySubController L36-37 import java.util.Set; 重复 ×1(javac 合法,纯整洁性);
  3. 错误码 64018 两族同值CODE_STAGE_TPL_SEED_PROTECTEDCODE_SCHEME_TPL_INVALID)——D-01 插码时方案卡族区间未顺延的既有债务,排查日志需按接口路径区分,不在本图修。

④ 全量单测(10 模块 reactor,mvn test)

关键 结果
总计 873/0/0,BUILD SUCCESS,01:26 min(crm-app 无测试段;crm-opportunity 209/0/0 与票 12 一致)
豁免项 失效——crm-auth ResourceServiceImplTest.save_editCatalog_noButtonFields 红灯未复现(auth-perms 票 02 已把用例改写为「perms 只读保留原值」语义并实测通过)
工具链 mvn=D:\apache-maven-3.9.9\bin\mvn.cmd、JDK17=C:\Users\luowj\.jdks\jdk-17.0.15(bugfix 票面 IDEA 捆绑 mvn 路径已失效)

⑤ 工作区状态核对(待打包增量清单)

  • 票 12 增量在位且完整:untracked OpportunityWorkPlanAddDTO/UpdateDTO + OpportunitySubController/OpportunitySubServiceImpl/IOpportunitySubServiceMM 二次未暂存修改 + SubServiceImplTest(30 用例);bugfix 主体为已暂存未 commit(HEAD=32ac292)。
  • 并行 effort 混入:crm-auth ResourceServiceImpl(+Test) 有 auth-perms 票 02 未暂存改动——票 02 clean package 打包会一并带进 fat jar(auth 域测试全绿,无冲突,知悉即可)。
  • logs/crm-app.log 残留 DU unmerged 状态(已被 32ac292 停止跟踪,不影响构建,commit 时留意)。

对下游票的影响

  • 票 02:零缺陷前置,直接 seed 重置 → clean package(留意 auth-perms 混入)→ 起服 → 全量 E2E;
  • 票 03:顺手修 §③-1/2 两处小瑕疵(同文件触碰,不必开新票);
  • fog「E2E 重跑发现新缺陷的处置口径」维持不变(本轮无新缺陷线索)。