--- name: feature-tdd description: 功能循环第 3 步。按 plan 逐任务做 TDD(失败测试 → 实现 → 通过 → commit),测试运行强制派发到子会话。 user-invocable: false allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *) --- **所有输出必须使用中文。** # feature-tdd 按 plan 文件逐任务做 TDD:写失败测试 → 写最小实现 → 确认通过 → commit。**所有测试运行强制派发到 Agent 子会话**,主会话只接收 JSON 结果。 ## 执行步骤 1. 加载计划文件 `docs/superpowers/plans/-.md`。 2. **Schema 改动前置**(仅当 plan 声明需要):第一个任务必须是写 migration 文件 + 同步更新 docs/03,并一起 commit。 - 文件命名 `V__.sql`,`` = 现有 `sql/migrations/V*.sql` 最大版本号 + 1;文件只含 DDL - **同步**把新 CREATE / ALTER 反向更新到 `docs/03-数据库设计文档.md` 对应表小节,保持 docs/03 是 schema 的 SSoT;新增表按表小节模板追加 - migration + docs/03 改动**同一 commit**,避免 SSoT 与 migration 分裂 - 测试运行时 Spring Boot 启动 Flyway 会自动 apply 这个新 migration;`scripts/setup-test-db.sh` 只负责清库 3. 按顺序处理每个代码类任务。**全程自主连续执行(静默编程)**:每个 task 跑完 a~f 立刻进入下一个 task,直到全部任务完成才进步骤 4。 > **不要输出桥接叙述**(同 `feature-plan` 步骤 7):task 之间、子会话验证返回后、commit 之后,都**不要**输出 "Task N 完成 / 接下来 / 下一步 / 准备继续 / 请检查 / 等你确认" 之类的收尾过渡话——那些会被解读为 **turn 结束信号**,导致你被迫手敲 `continue`。完成一步就直接动手做下一步,不旁白、不停顿。 > 唯一允许的停点:3.e 的中断 与「护栏」节的硬停。 a. 在 `test_file::test_name` 处写**失败**测试 b. 派发 Agent 子会话(general-purpose)运行测试确认失败,子会话只返回 `{command, exit_code, failing_assertion}` JSON c. 在 `impl_file` 处写**最小**实现使测试通过 d. 再次派发子会话确认通过 e. 同一测试 >10 次修复仍失败 → 调用 `interrupt-check`(中断 #1:测试反复失败) f. 按 `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` 格式 commit(`scope` = 任务模块;`subject` ≤ 50 字符;`req_id` 必填) 4. 全部任务完成 → **同一 turn 内立即** `Skill(feature-verify)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 - **绝不**在主会话直接跑 `mvn test` / `pnpm test` / `scripts/test.sh`,必须通过子会话 - **绝不**在主会话直接 `mysql -e "ALTER ..."`;业务 schema 改动一律走 `sql/migrations/V*.sql` 文件(只读查询 / 临时调试除外) - 每次 commit 必须含 `REQ-XXX-NNN` 标签;不混合无关改动到同一 commit - **后端阶段路径硬护栏**:任务表里的 `impl_file` 路径以 `frontend/` 开头 → 硬停并打印 `feature-tdd 后端阶段不允许写前端代码:。请检查 plan 任务定义;UI 推迟到前端阶段(fe-feature-*)`,不再继续 TDD 循环 ## 参考 - `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` - 守门:`interrupt-check`(仅在步骤 3.e 触发,条件 1) - 原则参考:`superpowers:test-driven-development`(外部 TDD 原则手册,本 skill 已固化"子会话跑测试 + REQ-tagged commit"流程,不做运行时 invoke)