SKILL.md 2.68 KB

name: erp-feature-tdd description: 功能循环第 3 步。逐任务执行计划:写失败测试 → 实现代码 → 测试通过 → 提交。所有测试运行均派发到子会话执行。 user-invocable: false

allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *)

所有输出必须使用中文。

erp-feature-tdd

执行步骤

  1. 红旗检查:调用 erp-red-flag-check
  2. 加载计划文件 docs/superpowers/plans/YYYY-MM-DD-<REQ>.md
  3. Schema 改动优先(如果计划声明了需要):若 plan 标注 "本 REQ 需要 schema 改动",第一个任务必须是写 migration 文件
    • 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 ... 等),commit
    • 之后的代码任务(entity / DAO / service / 测试)在此之后做;测试运行时 Spring Boot 启动会由 Flyway 自动 apply 这个新 migration(scripts/setup-test-db.sh 只负责清空库)
  4. 按顺序处理每个(代码类)任务: a. 在 test_file::test_name 处编写失败测试。 b. 派发子会话(通过 Agent,general-purpose)运行测试并确认失败;子会话只返回 {command, exit_code, failing_assertion}。主会话不直接运行测试。 c. 在 impl_file 处实现最小代码使测试通过。 d. 再次派发子会话运行测试并确认通过。 e. 持续失败(同一测试 >10 次修复尝试)→ 调用 erp-red-flag-check(红旗 #1)。 f. 暂存变更并使用 ${CLAUDE_SKILL_DIR}/templates/commit-message-template.md 提交;scope 匹配任务的模块,subject ≤50 字符,req_id 必填。
  5. 所有任务完成后 → 交接给 erp-feature-verify

护栏

  • 绝不在主会话直接运行 mvn test / pnpm test / scripts/test.sh,必须通过子会话。
  • 每次提交必须包含 REQ-XXX-NNN 标签。
  • 不要将不相关的变更合并到一次提交中。
  • 禁止在主会话直接 mysql -e "ALTER ..." 执行业务 DDL;所有业务 schema 变更必须走 sql/migrations/V_n__<desc>.sql 文件(只读查询 / 临时调试探索除外)。

衔接

立即调用 Skill(erp-feature-verify) 进入下一步。

参考

  • ${CLAUDE_SKILL_DIR}/templates/commit-message-template.md
  • 原则参考:superpowers:test-driven-development(本插件未镜像;仅作为 TDD 原则手册参考,不做运行时 invoke — 本 skill 已把"子会话跑测试 + REQ tag commit"流程直接写死)
  • 守门:erp-red-flag-check