SKILL.md 4.27 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=backendphase_id=<id>command=./scripts/test.sh
  • frontend-phasephase=frontendphase_id=frontend-phase;命令从 docs/04-技术规范.md § 零 frontend.test_command / frontend.e2e_command 拼接(缺失则 pnpm test:ci && pnpm e2e:ci
  • 其它分支 → 硬停打印 test-gate 仅在 module-* 或 frontend-phase 分支可调用,当前 <branch>
  1. 派发 Agent 子会话(general-purpose)运行上述 command,子会话只返回结构化 JSON(不输出描述文字): json { "command": "<command>", "exit_code": <int>, "passed": <int>, "failed": <int>, "stdout_excerpt": "<最后 30 行,含 FAIL 摘要>" }
  2. ${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)。
  3. 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"
  4. exit_code = 0同一 turn 内立即 Skill(module-report)(直接调用,不要先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。
  5. 失败 → 打印以下横幅并停止,不调用下游 skill;不自动重试、不自动修复(失败分类需人工判断):
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    [test-gate] ⚠️ 未通过 (phase=<phase>)
    失败清单: <子会话 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 由当前分支推断)