目标
实现 tdd_checkpoint 工具的状态机(内存存储),管理 RED→GREEN cycle 的完整生命周期。
实现要点
Evidence 状态机 (
src/flowrun/state.ts)createTaskEvidence()— 初始化空 evidencestartCycle(taskEvidence, cycleId, criterionId, testPaths, selector, workspaceDigest)— 验证 Task running + criterion 存在 + testPaths 匹配recordRed(taskEvidence, cycleId, evidence)— 验证:有测试变化、RED 分类有效recordGreen(taskEvidence, cycleId, evidence)— 验证:已有 RED、RED 输入 digest 不变、有实现变化recordFinalRegression(taskEvidence, headSha, treeSha, runs)— 验证 worktree cleanrecordFinalVerification(taskEvidence, headSha, treeSha, runs)— 执行 verifyCommandsabandonCycle(taskEvidence, cycleId, reason)— 仅允许未通过 cycle- 所有函数纯函数,输入 state → 输出 new state
Tool handler (
src/plugin/tdd-tool.ts)handleTddCheckpoint(req: TddCheckpointRequest): TddCheckpointResponse- 从 ToolContext 提取 repo/worktree/session
- 验证 Task 分支绑定(executionBinding)
- 不接受自报 cwd 或 shell command
- 根据 op 分发到 state.ts 各函数
- 返回结构化 response(ok: true/false + evidence revision)
错误码
TASK_NOT_FOUND,TASK_NOT_RUNNING,CRITERION_NOT_FOUNDRED_EXPECTED_FAILURE,RED_INFRASTRUCTURE_FAILUREGREEN_EXPECTED_PASS,IMPLEMENTATION_CHANGE_REQUIRED,TEST_CHANGED_AFTER_REDCYCLE_CONFLICT,REGRESSION_FAILED,COMMAND_TIMEOUT
验收标准
- [ ] Cycle 生命周期测试通过(创建→RED→GREEN→abandon 全部路径)
- [ ] 边界条件测试:RED 直接 pass、infrastructure 错误、测试被修改、无实现变化
- [ ] 幂等测试:相同参数返回原结果
- [ ] final-regression/verification 测试
Worktree
- 路径:
.worktree/tdd-c2-checkpoint-sm/ - 分支:
feat/tdd-c2-checkpoint-sm