evidence-task-create-sc159-20261112.md 5.0 KB

S-cfc-159 实现使绿验证记录 · task.task.create(实测全绿 = 实现已覆盖)

归属:TDD 实现使绿任务 · 能力键 task.task.create(POST /api/tasks/create) 会话:local · 日期:2026-11-12 · 基线:origin/cfclub @ 014c885ec(worktree 检出时) 结论:红测试实测全绿,实现已存在(SC-P-10 f41da2779 已合入 cfclub),无需任何 src/main 改动。 本记录仅补执行证据/复验;未写任何业务实现代码、未触碰测试断言。

1. 红测试定位

项 值
契约测试类 cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTaskCreateContractTest.java
登记 commit 1ee56f5c6(test(tdd): 契约测试登记 task.task.create(POST /api/tasks/create)控制器层(S-cfc-149))
用例数 7:结构契约 3(@RestController 且类映射 /api/tasks;@PostMapping("/create") 且返回 Result<Long>;@RequestAttribute("userId") + @RequestBody)+ 正常流 2(委托 taskService.createTask 包 Result.success(taskId);userId/dto 原样透传)+ 异常流 1(校验异常上抛,GlobalExceptionHandler→400,不吞不裹)+ 权限流说明 1(/api/tasks 属 /api/** JWT 拦截区)
Service 层同键覆盖 TaskCreateScP10ContractTest · 14 例(SC-P-10,S-cfc-12)

登记 commit 内已注明预期:「若实测全绿即属『实现已存在,测试意外全绿』情形,汇报转编排侧登记为覆盖,不修改任何 src/main 实现。」

2. 基线核验(git 真值)

  • 分支隔离:git worktree add .worktrees/task_S-cfc-159 -b task/S-cfc-159 origin/cfclub,HEAD = 014c885ec
  • 该 HEAD 即 origin/cfclub 检出点,无任何未提交改动(git status --short 为空)。

3. 测试执行证据(本地实跑,确定性)

命令:cd cfc-backend && mvn -q "-Dtest=TaskTaskCreateContractTest,TaskCreateScP10ContractTest" test

surefire 输出(target/surefire-reports/*.txt):

Test set: com.etotem.cfc.unit.TaskTaskCreateContractTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.602 s
Test set: com.etotem.cfc.unit.TaskCreateScP10ContractTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.092 s

合计 21/21 通过,0 失败 0 错误(纯 Mockito + 反射,无 Spring 上下文 / 无 DB / 无外部服务)。

4. 实现现状(逐项核对通过,未被触碰)

  • TaskController.createTask:类映射 /api/tasks;@PostMapping("/create");@RequestAttribute("userId") Long userId + @RequestBody CreateTaskDTO;返回 Result<Long>;直接委托 taskService.createTask(userId, dto),无 try/catch 吞异常(业务校验异常由 GlobalExceptionHandler 统一转 Result.error(400, message),与契约 400 口径一致)。
  • TaskService.createTask:空标题 / 负积分 / 非法频率(0、负数、非枚举)/ 超期截止 → IllegalArgumentException;child 执行人(memberId/memberIds/executorId)跨家庭归属校验(防横向越权);member 分支家庭人数 ≥2、拒绝给自己分配、被分配成员归属校验;积分缺省 2;executorType 缺省 child;30s 幂等窗口(JVM 锁 + 内存登记表 + DB 兜底),重复提交 / 并发双发仅生成 1 条任务。

5. 处置结论与建议

按测试登记 commit 的既定规则,本键属「实现已存在,测试意外全绿」。建议编排侧将 task.task.create 登记为「覆盖」并归档(yellow_sha 可回填实现来源 f41da2779 / 契约 1ee56f5c6),不再派发实现任务。

6. 暴露的缺陷 / 观察项

  1. RED 登记错位导致同一键反复重派(编排侧记账缺陷):task.task.create 以「TDD-RED(实现未落地)」入池,但实现(SC-P-10 f41da2779)早已在 cfclub 链上;编排 2026-11-12-04:42 轮已注明「契约已交付,mark-red 属测试侧」。由此同一键经历 S-cfc-149(契约登记,7 例全绿)→ S-cfc-159(GREEN 实现)多次派发,0836 轮记录「4 会话 outcome=succeeded 无实现提交 → requeue 重派」——根因是「实现已覆盖」键无 git 产出可被编排拾取,形成 wedged→重派死循环。同类键(无 yellow_sha):admin.article.list、health.report.detail、dan.assessment.recordCreate(0807 轮 YELLOW 记录)。
  2. 派单元数据溯源失真(元数据缺陷):任务书引用「docs/tdd/SRS.md §5.5 task.task.create」——SRS.md 实际无 §5.5 章节(结构为「一~六」大节,anchors 到控制器/方法级,无能力键 § 编号);该键真实锚点为 docs/superpowers/api/API_REFERENCE.md §4.3 任务 · POST /api/tasks/create(第 490 行)。建议编排侧修正派单元「溯源·需求」字段,避免后续执行者按错误锚点检索。
  3. 控制器/服务实现层面未发现新缺陷:7+14 例断言与实现行为逐项一致。

7. 改动文件

  • docs/tdd/dev/evidence-task-create-sc159-20261112.md(本证据记录,唯一改动;未改 src/main、未改测试、未 git add -A)