纪律:本台账条目由开发/研发角色写入,push 到远端才算送达测试; 测试处理完后在本文件追加「回复」段并置状态,再 push。 与状态机解耦:本文件不改变
state.json的stage,阶段推进仍由--mark-*+ git 真理证据驱动。 编号规则:TR-*单调递增,不复用、不跳号。
| 编号 | 关联键/对象 | 类型 | 描述 | 经办 | 登记时间 | 状态 |
|---|---|---|---|---|---|---|
| TR-1 | guide.trainingPlan.getPlanDetail |
用例缺失 | 能力键已于 2026-11-04 02:47 手动入池为 RED(manual_entry: true),但全仓 src/test/ 下无任何 getPlanDetail 引用(grep -rln "getPlanDetail" cfc-backend/src/test/ 无匹配),即 RED 契约测试尚未落地,阶段无法从 RED 推进。请测试侧补契约级单测。详见下方「TR-1 详情」。 |
开发(研发负责人1) | 2026-11-04 04:30 | 已回复 |
getPlanDetail 契约级 RED 测试guide.trainingPlan.getPlanDetail,当前阶段 RED。cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TrainingPlanController.java
(实现引入于 0af81d688,随 origin/cfclub 可读)。测试负责人 2026-11-04 02:16 汇报中上报的后端编译回归(dfc78e9d3 为 CfBalanceController 5 个方法新增 @RequestAttribute currentMemberId 形参,
但 CfBalanceControllerTest 仍以旧签名直接调用,导致 mvn test-compile BUILD FAILURE,阻断全部后端单测),
已由研发侧修复并推送:
c9f9ec948 — fix(test): 同步 CfBalanceControllerTest 到 dfc78e9d3 新签名(currentMemberId 形参),解除后端全量单测编译回归cfclub(data_ref = origin/cfclub),已推送 ✅mvn -o -B test-compile → BUILD SUCCESS;定向跑 4 个契约测试类 → Tests run: 29, Failures: 0, Errors: 0, Skipped: 0 + BUILD SUCCESS即:当前后端单测已可正常编译执行,测试侧补 RED 的环境前提已具备。
| 项 | 内容 |
|---|---|
| 能力键 | guide.trainingPlan.getPlanDetail |
| 端点 | POST /api/guide/training-plans/detail |
| 请求体 | {"planId": <Long>}(Map<String,Object>,经 ParamUtils.getLong 解析) |
| 成功响应 | Result.success({plan, items}),code=200,data 为 LinkedHashMap,含 plan(TrainingPlan)与 items(List<TrainingPlanItem>)两个键 |
| 参数缺失 | planId 为 null → Result.error("planId不能为空") |
| 方案不存在 | planId 有效但查无方案 → Result.error("方案不存在") |
| 调用链 | trainingPlanService.getPlanById(planId) → trainingPlanService.getPlanItems(planId) |
planId 有效 → code=200,data.plan 非空、data.items 为数组。planId 缺省 / null / 非数字 → 返回「planId不能为空」(ParamUtils 语义:null/空串/非数字均视为未传)。getPlanById 返回 null → 返回「方案不存在」。getPlanItems 返回空集合 → data.items 为空数组而非 null。@PostMapping)。@RequestAttribute("role"),
也未列入 JwtInterceptor 的 LOGIN_REQUIRED_PATHS(对照同文件 getPlanList 既有测试的同类观察记录),
因此「规划师角色约束」名义成立但实际任何已认证角色(乃至匿名 userId=-1)均可到达 handler,属潜在越权缺口。
请按「缺陷观察」记录并回写研发侧,本轮研发侧不改实现(越权修复涉及鉴权面收敛,另案处理)。参考同目录既有 RED 契约测试 cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanListTest.java
(能力键 guide.trainingPlan.getPlanList,已 DONE):
TrainingPlanService,无 Spring 上下文 / 无 DB;ReflectionTestUtils.setField(controller, "trainingPlanService", ...) 注入;jsonPath + status()。POST /api/session(能力键 guide.trainingPlan.getPlanDetail)→ --mark-yellow ... --commit <sha> 置 YELLOW;--mark-green 完成闭环(研发侧无权代置 GREEN)。待测试填写。回复后请将对应
TR-*状态置为「已回复」或「已关闭」并 push。
| 编号 | 回复人 | 回复时间 | 回复内容 | 状态变更 |
|---|---|---|---|---|
| TR-1 | 测试负责人(自动化 6255181e,本会话) |
2026-11-04 10:10 | 契约级单测已落地并实跑通过:新增 cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java,8 个用例(正常路径 / planId 缺失·null·空串·非数字 / 方案不存在 / 空 items 数组 / GET→405),standalone MockMvc + Mockito,风格与 TrainingPlanControllerGetPlanListTest 一致。离线实跑 mvn -o test -Dtest=TrainingPlanControllerGetPlanDetailTest → Tests run: 8, Failures: 0, Errors: 0 ✅;并入全量纯单元测套件复跑(155 类 / 1087 用例 / 通过 1044 / 失败 25 / 错误 18,与既有基线逐类一致 + 新增 8 例全绿)。鉴权缺口观察已按第 6 点记录为缺陷观察并另立台账 B-9(见 docs/tdd/test/blockers.md),未断言为红灯。P0 编译回归修复 c9f9ec948 已由本轮全量套件编译通过实证,测试台账 B-8 已置「已解除」。RED 提交即将随本回复一并 push;请研发侧随后对本键执行 --mark-yellow --commit 0af81d688(实现已在远端),测试侧将复验后 --mark-green 收口。 |
待测试处理 → 已回复 |
| TR-2 | dimension.registry.getTree |
用例缺失 | 能力键已手动入池为 RED(manual_entry: true,2026-11-04 21:53),但全仓 src/test/ 下无任何 DimensionRegistryController 契约测试(`git ls-tree origin/cfclub |
grep -i DimensionRegistry仅实现类,无*Test),即 RED 契约测试尚未落地,阶段无法从 RED 推进。实现**已推送远端**(57e162242已入origin/cfclub,controller/admin/DimensionRegistryController.java#tree`)。请测试侧补契约级单测。详见「TR-2 详情」。 |
dimension.registry.getTree 契约级 RED 测试dimension.registry.getTree,当前阶段 RED(S-cfc-7)。cfc-backend/src/main/java/com/etotem/cfc/controller/admin/DimensionRegistryController.java
(实现引入于 57e162242,已合入 origin/cfclub;对应 DimensionRegistryService#getTree)。| 项 | 内容 |
|---|---|
| 能力键 | dimension.registry.getTree |
| 端点 | GET /api/dimension-registry/tree?sourceSystem=<可选>(本仓虽统一 @PostMapping,但 DimensionRegistryController 设计文档 §5.1 明确为 @GetMapping,按设计契约执行) |
| 参数 | sourceSystem 可选(null/空 → 全量树) |
| 成功响应 | Result<List<DimensionNode>>,code=200,data 为维度树节点列表(含 code/name/nodeKind/children) |
| 调用链 | dimensionRegistryService.getTree(sourceSystem) |
sourceSystem 缺省 → code=200,data 非空且每节点含 code/name。sourceSystem → 仅返回该源节点(或空列表)。getTree 返回空列表 → data 为空数组而非 null。@GetMapping)。沿用既有契约测试风格(如 DimensionAdminControllerTest):MockMvc standalone 模式 + Mockito mock DimensionRegistryService,无 Spring 上下文 / 无 DB;ReflectionTestUtils.setField 注入;断言 jsonPath + status()。
--mark-yellow --commit 57e162242(实现已在远端)置 YELLOW;随后测试角色 --mark-green 收口。| 编号 | 关联键/对象 | 类型 | 描述 | 经办 | 登记时间 | 状态 |
|---|---|---|---|---|---|---|
| TR-3 | auth.guest.wechatLogin / auth.guest.jwtGuard / family.parent.switchRole / task.parent.createTask |
用例缺失 + 复验 | 研发本轮按 DEV_GOAL_user_scenarios.md 建立并派发 4 个场景打通任务(S-cfc-9~12,对应 SC-G-02 微信授权登录 / SC-G-06 越权接口拦截 / SC-P-03 双角色切换 / SC-P-10 创建任务下发),均带需求+设计双锚点、独立 feature 分支与独立目录。请测试侧:① 对照 tests/user-scenarios/应用场景总览.md 与 tests/test-cases/*.md,为这 4 个 SC 各补齐【正常流 / 异常流 / 权限流】三类用例(不修改原始场景与用例文件,新增脚本/报告入独立分支);② 会话产出后独立复验并回写 docs/tdd/test/automation-status.md 执行状态;③ 只有三类用例有实际执行证据 + 实现与用例已推 origin/cfclub + --clean-check 0,才计入场景覆盖矩阵「已跑通」。注意:cfc-backend/pom.xml:28 有 <skipTests>true</skipTests>,任何 mvn test 必须显式 -DskipTests=false,否则假绿 |
研发负责人(闭环巡检轮) | 2026-11-05 05:47 | 待测试处理 |
| 编号 | 回复方 | 回复时间 | 回复内容 | 状态 |
|---|---|---|---|---|
| TR-3 | 研发负责人1(自动化 ce26ad68) |
2026-11-05 06:20 | SC-G-02 / SC-G-06 会话产出已合入 origin/cfclub:merge 3aebf9b16(SC-G-02 契约测试+权限流测试+e2e 用例+执行证据报告,源自 feat/sc-g-02-wechat-login)+ merge 73e2f194e(SC-G-06 越权拦截实现+契约测试+执行报告,源自 feat/sc-g-06-jwt-guard);合并树 mvn -o -B test-compile BUILD SUCCESS(2041 主源+208 测试源)。S-cfc-10 auth.guest.jwtGuard 已补登 YELLOW(commit 73e2f194e)。测试侧可直接基于主干对两场景派生/复验三类用例;S-cfc-11/12 会话仍在推进,产出后同样合入 |
待测试处理(evidence 已就绪) |
| TR-4 | SC-B-01~12(空号 03/08)/ SC-H-01~07 / SC-X-22 |
用例缺失 | 18 个新登记 SC(AI 成长教练 10 / 真人管家 7 / 跨角色 SC-X-22)场景已定,但派生用例待补(TC-B-01~12 空号 03/08、TC-H-01~07、TC-X-22 均待补)。实现侧:SC-B/SC-H 已在 origin/cfclub(ButlerController/ai/AIChatController);SC-X-22 后端 RewardRuleService/expectedCf 未实现。请测试侧:① 为 SC-B/SC-H 补正常/异常/权限三类用例并执行 e2e(O-2 方案 C);② 为 SC-X-22 补 TC-X-22(因 expectedCf 契约未定,请先与主理人/设计侧对齐契约再写用例)。 |
开发(研发负责人) |