SKILL.md
2.92 KB
name: test-gate description: MR 创建前的硬闸门。子会话跑 scripts/test.sh 全量测试,绿则进入 module-report,红则停下并按失败类型引导用户。 user-invocable: false
allowed-tools: Read Write Skill Agent Bash(git add *) Bash(git commit *)
所有输出必须使用中文。
test-gate
模块所有 REQ 完成后的硬闸门:子会话跑 ./scripts/test.sh(含本模块新增 + 已合并模块回归),按模板渲染证据并 commit 到 module 分支。绿色继续,红色停下,按失败类型给用户恢复路径。
执行步骤
- 派发 Agent 子会话(general-purpose)运行
./scripts/test.sh,子会话只返回结构化 JSON(不输出描述文字):json { "command": "./scripts/test.sh", "exit_code": <int>, "passed": <int>, "failed": <int>, "stdout_excerpt": "<最后 30 行,含 FAIL 摘要>" } - 按
${CLAUDE_SKILL_DIR}/templates/test-gate-result-template.md渲染证据,写入docs/superpowers/module-reports/<module_id>-test-gate.md。 - Commit evidence 到 module 分支(保证证据随 MR 合并进默认分支可审计):
bash git add docs/superpowers/module-reports/<module_id>-test-gate.md git commit -m "chore(<module_id>): add local test-gate evidence" -
exit_code = 0→ 调用Skill(module-report)。 - 失败 → 打印以下横幅并停止,不调用下游 skill;不自动重试、不自动修复(失败分类需人工判断):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[test-gate] ⚠️ 未通过
失败清单: <子会话 JSON 的 failed 摘要>
详细证据: docs/superpowers/module-reports/<module_id>-test-gate.md
按失败类型选恢复路径:
① 测试脆弱(偶发 flakey)→ 重跑 /erp-workflow:coding-start
(module-start 幂等:reviews 已全 approve 会跳过功能循环,直接重跑本闸门)
② 真有回归(某 REQ 破坏其它 REQ 或已合并模块)
→ rm docs/superpowers/reviews/*-<REQ-id>.md
→ 重跑 /erp-workflow:coding-start(module-start 视该 REQ 未完成,重走功能循环)
③ 环境/依赖问题(DB 连不上 / 外部 API 失败 / 证书失效)
→ Skill(interrupt-check) 追加 Blocker 到任一 plan 文件 → 修复环境 → 重跑
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
护栏
-
绝不在主会话直接执行
./scripts/test.sh,必须通过子会话 -
绝不通过
git push --no-verify绕过(hookdeny-no-verify.sh会硬拦)
参考
${CLAUDE_SKILL_DIR}/templates/test-gate-result-template.md- 上游:
module-start(本模块 REQ 全 approve 后派发到此) - 下游:
module-report(绿色时)