SKILL.md 2.83 KB

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/<YYYY-MM-DD>-<REQ-id>.md
  2. Schema 改动前置(仅当 plan 声明需要):第一个任务必须是写 migration 文件 + 同步更新 docs/03,并一起 commit。
    • 文件命名 V<n>__<snake_case>.sql<n> = 现有 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. 按顺序处理每个代码类任务: 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. 全部任务完成 → 调用 Skill(feature-verify)

护栏

  • 绝不在主会话直接跑 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 后端阶段不允许写前端代码:<impl_file>。请检查 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)