name: full-test description: 全量回归入口——按需跑一次完整测试闸(build + lint + 后端单测/集成 + 前端 vitest + 全量 e2e),出证据报告并提交。coding-start 的增量模式只跑本轮改动关联的 e2e(省时),跨功能连带回归靠本命令兜底:改完一批需求、合并前、发布前、或怀疑历史功能被打破时手动运行。只跑测试、不改任何源码;红了只报告不修复。 user-invocable: true
allowed-tools: Read Write Edit Glob Grep Bash(node *) Bash(git *) Bash(ls *) Bash(cat *) Bash(sleep *) Bash(pnpm *) Bash(npm *) Bash(npx *)
所有输出必须使用中文。
full-test — 全量回归闸(按需触发)
/erp-workflow:coding-start 缺省跑 affected 增量模式:test-gate 的 e2e 段只覆盖本轮改动关联的用例,
其余 e2e 不跑(testScope: "affected",见 workflows/coding.mjs 顶部 TEST_SCOPE)。
这是为省时刻意留的缺口——跨功能连带回归由本命令兜底。
什么时候该跑: 一批需求做完准备合并 / 发布前 / 改过共享组件·router·全局状态·API 契约·DB 迁移 / 怀疑某个没动过的功能被打破了 / 距上次全量回归已过去若干轮增量。
本命令不做的事: 不改任何源码、不修红灯、不打 tag、不合并分支、不动 docs/08。红了只出报告。
步骤 0:打印横幅
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[full-test] 全量回归闸
跑 scripts/test.mjs 完整链:
setup-test-db(复制源库→一次性副本)
→ build(前后端)→ lint(前后端)
→ 单测 + 集成(后端 + 前端 vitest)
→ e2e(**全量** playwright,不设 ERP_E2E_SCOPE)
→ 绿则晋升本轮新迁移到源库 → 无论红绿删副本
只跑测试、不改源码。预计耗时较长(含冷起全栈),跑完出证据报告。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
步骤 1:前置校验(任一不满足即停下,不启动测试)
-
取 projectRoot:
Bash(git rev-parse --show-toplevel),stdout 记为projectRoot(绝对路径)。失败 → 缺口「当前目录不在 git 仓库内」。 -
闸门脚本存在:
Globscripts/test.mjs。不存在 → 缺口「项目缺 scripts/test.mjs,先跑 /erp-workflow:plan-start 生成骨架」。 -
工作树干净:
Bash(git status --porcelain)无输出。有输出 → 缺口「工作树不干净:<摘要>」。 > 为什么是硬门:test.mjs绿后会把副本上验证过的新迁移 晋升到源库(promote-to-source.mjs)。 > 带着未提交改动跑,等于让一份没进版本库的状态去改源库 schema,事后无法复现是哪次改动导致的。 -
不在跑其它闸门:
Glob.tmp/behavior-gate//.tmp/seed-gen/下是否有本次之外的活动痕迹,并确认没有正在运行的coding.mjs。有 → 提示用户「检测到可能正在运行的编码流程,全量回归会冷起同端口的栈、互相击杀,请等它结束再跑」并停下。
任一缺口 → 输出拦截横幅(逐条列缺口 + 处理位置),停下,末尾附 [ERP-HALT]。
步骤 2:确认 e2e 范围开关不会误伤
Grep frontend/playwright.config.* 是否含 ERP_E2E_SCOPE:
- 含 → 本命令必须显式清空该变量再跑(见步骤 3),保证跑的是全量而不是继承了外壳里的残留值。
- 不含 → 说明该项目的 config 还没接范围开关(存量项目),此时 e2e 本来就恒为全量,直接跑即可;在报告里注记一句即可,不必修 config(补齐由 coding.mjs 的 fe-skeleton stage 负责)。
步骤 3:跑闸门(后台子进程 + 轮询,绝不在主推理流里同步跑)
scripts/test.mjs 动辄几十分钟,必须派隔离后台子进程跑,主会话只轮询、只读回结构化摘要:
- 建日志目录
.tmp/full-test/(Bash(node -e "...")用fs.mkdirSync(..., {recursive:true}),跨平台)。 - 用
Bash的run_in_background起 detached 子进程,显式清空ERP_E2E_SCOPE,输出重定向到.tmp/full-test/run.log,退出码写.tmp/full-test/exit:
ERP_E2E_SCOPE= node scripts/test.mjs > .tmp/full-test/run.log 2>&1; echo $? > .tmp/full-test/exit
Windows/PowerShell 环境下改用
node -e起一个spawn包装(env: {...process.env, ERP_E2E_SCOPE: ''}), 效果等价——关键是子进程 env 里ERP_E2E_SCOPE为空,且日志落盘、退出码落盘。
- 在同一回合内轮询到终态:反复
Bash调用(每轮sleep 60~120后读.tmp/full-test/exit是否存在 + 读run.log尾部若干行),多少轮都行。 绝不用 Monitor / ScheduleWakeup / 「装个监听器然后结束回合等通知」——结束回合就等于宣告完成。- 每轮向用户播报一行当前进度(从
run.log里[test.mjs] N/5 <阶段>行取),让长跑可见。- 拿到 exit 码后,从
run.log只提取结构化摘要(不要把全文灌进上下文):
- 各阶段(build / lint / 单测 / e2e)的通过与否;
- 失败用例名 + 断言摘要(≤30 行);
- e2e 实跑条数(playwright 的
N passed行)——0 条即异常,说明范围开关被误设,按红处理。
步骤 4:证据报告 + 提交
写 docs/superpowers/module-reports/full-regression-<YYYY-MM-DD>.md(同日多次跑加 -r<N> 后缀,绝不覆盖前一次):
# 全量回归报告 <YYYY-MM-DD>[-r<N>]
- 触发:/erp-workflow:full-test(人工按需)
- 分支 / HEAD:<branch> @ <短哈希>
- 命令:ERP_E2E_SCOPE=(空,全量) node scripts/test.mjs
- 结论:GREEN / RED
- e2e 实跑条数:<N>(0 条 = 范围开关误设,按 RED 处理)
- 各阶段:build <ok/fail> / lint <ok/fail> / 后端单测集成 <ok/fail> / 前端 vitest <ok/fail> / e2e <ok/fail>
- 迁移晋升:<已晋升 V<n>... / 无新迁移 / 未晋升(红)>
## 失败摘要(RED 时必填)
<失败用例 + 断言摘要,≤30 行>
## 距上次全量回归的增量
<git log --oneline <上次 full-regression 报告的提交>..HEAD 摘要;首次跑写「首次」>
Bash(git add <报告> && git commit -m "docs(full-test): 全量回归报告 <日期> <GREEN|RED>")。
commit 失败 → 报告已落盘即可,把 stderr 摘要告诉用户,不 halt。
步骤 5:输出结论横幅
绿:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[full-test] ✅ 全量回归 GREEN
e2e 实跑:<N> 条(全量)
报告:docs/superpowers/module-reports/full-regression-<日期>.md
迁移晋升:<已晋升 V<n>... / 无新迁移>
[ERP-HALT] 全量回归通过。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
红:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[full-test] ⛔ 全量回归 RED
失败阶段:<build / lint / 单测 / e2e>
失败用例:<逐条列出,不截断关键断言>
报告:docs/superpowers/module-reports/full-regression-<日期>.md
这些失败**不在**最近几轮增量的 e2e 覆盖范围内——属于跨功能连带回归。
下一步:把失败功能作为变更单元跑 /erp-workflow:add-req 重新走编码,
或直接修复后再跑一次 /erp-workflow:full-test。
[ERP-HALT] 已停下,本命令不修复。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
本 skill 到此结束,不调用任何下游 skill、不自动修复。
参考
-
scripts/test.mjs(项目内闸门脚本:setup→build→lint→test→e2e→promote→drop 全时序) -
frontend/playwright.config.*(ERP_E2E_SCOPE范围开关的消费端,由 coding.mjs 的 fe-skeleton stage 生成/补齐) -
workflows/coding.mjs顶部TEST_SCOPE(增量模式定义与收窄边界) -
coding-start(编码入口,缺省 affected 增量模式;传testScope: "full"可让它自己跑全量) -
add-req(增量需求入口,本命令报出的连带回归从这里回流)