SKILL.md
3 KB
name: feature-tdd description: 功能循环第 3 步。逐任务执行计划:写失败测试 → 实现代码 → 测试通过 → 提交。所有测试运行均派发到子会话执行。 user-invocable: false
allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *)
所有输出必须使用中文。
feature-tdd
执行步骤
-
中断检查:调用
interrupt-check。 - 加载计划文件
docs/superpowers/plans/YYYY-MM-DD-<REQ>.md。 -
Schema 改动优先(如果计划声明了需要):若 plan 标注 "本 REQ 需要 schema 改动",第一个任务必须是写 migration 文件 + 同步更新 docs/03:
-
ls sql/migrations/V*.sql得最大版本号 n_max,新文件版本号 = n_max + 1 - 文件名格式
V<n>__<snake_case_desc>.sql,例V5__add_user_email.sql -
Write该文件(只含 DDL:ALTER TABLE ... ADD COLUMN .../CREATE TABLE ...等) -
同步把新 CREATE/ALTER 反向更新到
docs/03-数据库设计文档.md对应表小节(字段表格 / 索引 / 外键 / 业务注记),保持 docs/03 仍是 schema SSoT;新增表则按docs-03-table-template.md格式追加一节 - 把 migration + docs/03 改动一起 commit(避免 SSoT 与 migration 分裂)
- 之后的代码任务(entity / DAO / service / 测试)在此之后做;测试运行时 Spring Boot 启动会由 Flyway 自动 apply 这个新 migration(
scripts/setup-test-db.sh只负责清空库)
-
- 按顺序处理每个(代码类)任务:
a. 在
test_file::test_name处编写失败测试。 b. 派发子会话(通过Agent,general-purpose)运行测试并确认失败;子会话只返回{command, exit_code, failing_assertion}。主会话不直接运行测试。 c. 在impl_file处实现最小代码使测试通过。 d. 再次派发子会话运行测试并确认通过。 e. 持续失败(同一测试 >10 次修复尝试)→ 调用interrupt-check(中断 #1)。 f. 暂存变更并使用${CLAUDE_SKILL_DIR}/templates/commit-message-template.md提交;scope匹配任务的模块,subject≤50 字符,req_id必填。 - 所有任务完成后 → 交接给
feature-verify。
护栏
-
绝不在主会话直接运行
mvn test/pnpm test/scripts/test.sh,必须通过子会话。 - 每次提交必须包含 REQ-XXX-NNN 标签。
- 不要将不相关的变更合并到一次提交中。
-
禁止在主会话直接
mysql -e "ALTER ..."执行业务 DDL;所有业务 schema 变更必须走sql/migrations/V_n__<desc>.sql文件(只读查询 / 临时调试探索除外)。
衔接
立即调用 Skill(feature-verify) 进入下一步。
参考
${CLAUDE_SKILL_DIR}/templates/commit-message-template.md- 原则参考:
superpowers:test-driven-development(本插件未镜像;仅作为 TDD 原则手册参考,不做运行时 invoke — 本 skill 已把"子会话跑测试 + REQ tag commit"流程直接写死) - 守门:
interrupt-check