--- 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-.md`。 3. **Schema 改动优先(如果计划声明了需要)**:若 plan 标注 "本 REQ 需要 schema 改动",**第一个任务必须是写 migration 文件**: - `ls sql/migrations/V*.sql` 得最大版本号 n_max,新文件版本号 = n_max + 1 - 文件名格式 `V__.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`(红旗 #4)。 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__.sql` 文件(只读查询 / 临时调试探索除外)。 ## 衔接 立即调用 `Skill(erp-feature-verify)` 进入下一步。 ## 参考 - `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` - 委托:`superpowers:test-driven-development` - 守门:`erp-red-flag-check`