SKILL.md
4.29 KB
name: test-gate description: 打里程碑 tag 前的硬闸门。后端阶段子会话跑 scripts/test.sh,前端阶段跑前端测试命令;绿则进入 module-report,红则停下并按失败类型引导用户。 user-invocable: false
allowed-tools: Read Write Skill Agent Bash(git add *) Bash(git commit *) Bash(git branch *)
所有输出必须使用中文。
test-gate
模块(后端阶段)或整个前端阶段所有功能完成后的硬闸门。按当前分支自动推断 phase:
-
module-*分支 →phase=backend:子会话跑./scripts/test.sh(含本模块新增 + 已合并模块回归) -
frontend-phase分支 →phase=frontend:子会话跑前端测试命令(vitest + playwright)
按模板渲染证据并 commit 到当前分支。绿色继续,红色停下。
执行步骤
步骤 0:推断 phase 与目标命令
git branch --show-current:
-
module-<id>→phase=backend,phase_id=<id>,command=./scripts/test.sh -
frontend-phase→phase=frontend,phase_id=frontend-phase;命令从docs/04-技术规范.md § 零 frontend.test_command/frontend.e2e_command拼接(缺失则pnpm test:ci && pnpm e2e:ci) - 其它分支 → 硬停打印
test-gate 仅在 module-* 或 frontend-phase 分支可调用,当前 <branch> [ERP-HALT]
- 派发 Agent 子会话(general-purpose)运行上述
command,子会话只返回结构化 JSON(不输出描述文字):json { "command": "<command>", "exit_code": <int>, "passed": <int>, "failed": <int>, "stdout_excerpt": "<最后 30 行,含 FAIL 摘要>" } - 按
${CLAUDE_SKILL_DIR}/templates/test-gate-result-template.md渲染证据,写入docs/superpowers/module-reports/<phase_id>-test-gate.md(后端:<module_id>-test-gate.md;前端:frontend-phase-test-gate.md)。 - Commit evidence 到当前分支(保证证据随里程碑 merge 进默认分支可审计):
bash git add docs/superpowers/module-reports/<phase_id>-test-gate.md git commit -m "chore(<phase_id>): add local test-gate evidence" -
exit_code = 0→ 同一 turn 内立即Skill(module-report)(直接调用,不要先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 - 失败 → 打印以下横幅并停止,不调用下游 skill;不自动重试、不自动修复(失败分类需人工判断):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[test-gate] ⚠️ 未通过 (phase=<phase>) [ERP-HALT]
失败清单: <子会话 JSON 的 failed 摘要>
详细证据: docs/superpowers/module-reports/<phase_id>-test-gate.md
按失败类型选恢复路径:
① 测试脆弱(偶发 flakey)→ 重跑 /erp-workflow:coding-start
(module-start / frontend-start 幂等:reviews 已全 approve 会跳过功能循环,直接重跑本闸门)
② 真有回归
后端:rm docs/superpowers/reviews/*-<REQ-id>.md
→ 重跑 /erp-workflow:coding-start(module-start 视该 REQ 未完成,重走功能循环)
前端:rm docs/superpowers/reviews/*-FE-<NN>.md
→ 重跑 /erp-workflow:coding-start(frontend-start 视该 FE 未完成,重走功能循环)
③ 环境/依赖问题(DB 连不上 / 外部 API 失败 / 证书失效 / Playwright 浏览器未装)
→ Skill(interrupt-check) 追加 Blocker 到任一 plan 文件 → 修复环境 → 重跑
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
护栏
-
绝不在主会话直接执行
./scripts/test.sh/pnpm test/pnpm e2e,必须通过子会话 - 本闸门是里程碑 tag 前唯一的硬测试门:红色时绝不跳过直接进入
module-report/milestone-tag
参考
${CLAUDE_SKILL_DIR}/templates/test-gate-result-template.md- 上游:
module-start(后端阶段 REQ 全 approve 后派发到此);frontend-start(前端阶段 FE 全 approve 后派发到此) - 下游:
module-report(绿色时;后端 + 前端共用,phase 由当前分支推断)