diff --git a/workflows/coding.mjs b/workflows/coding.mjs index 34b2f79..16c6ccf 100644 --- a/workflows/coding.mjs +++ b/workflows/coding.mjs @@ -797,8 +797,12 @@ function gatePrompt(module, phase, attempt = 1, c) { `- 把它们相对 \`frontend/e2e/\` 的路径片段用逗号连成一串,作为 env \`ERP_E2E_SCOPE\` 前置到 e2e 命令上(例:\`ERP_E2E_SCOPE=order/create.spec.ts,order/list.spec.ts pnpm e2e:ci\`;Windows 下用 \`cross-env\` 或在派发的子进程 env 里设,**不要**写成 PowerShell 语法而在 sh 里跑)。`, '- 一个 test_file 都取不到(plan 缺失 / 无 e2e 任务)→ 退到 `ERP_E2E_SCOPE=smoke`(骨架期生成的冒烟集),**不要**因此改成全量、也不要跳过 e2e 段。', ].join('\n') - : `- 本模块本轮无待跑 FE(后端模块 / 本轮无前端改动),e2e 范围退到冒烟集:\`ERP_E2E_SCOPE=smoke\`(骨架期生成的 \`frontend/e2e/__smoke__/\`,验"栈起得来 + 首页可达 + 登录态有效")。**不要**跳过 e2e 段——它同时是起栈健康检查。`, - '- **禁止空跑**:e2e 段匹配到 **0 条**用例即视为**范围推导错误**,按 `red` 返回(`failures` 写明推导出的范围与来源),**绝不**当成绿。这是收窄唯一真正的风险,宁可报错重来。', + : `- 本模块本轮无待跑 FE(后端模块 / 本轮无前端改动),e2e 范围退到冒烟集:\`ERP_E2E_SCOPE=smoke\`(骨架期生成的 \`frontend/e2e/__smoke__/\`,验"栈起得来 + 应用没整体炸")。**不要**跳过 e2e 段——它同时是起栈健康检查。`, + // 全新项目首跑的边界:前端骨架(含冒烟集)在**前端阶段**才建,而后端模块的 test-gate 跑在它之前。 + // 此时 __smoke__/ 根本不存在,设 ERP_E2E_SCOPE=smoke 会匹配 0 条 → 撞上"禁止空跑"判红 → 反复重跑 + // 到仲裁上限 halt,而重跑一万次也变不出还没生成的目录。故先探测,不存在就退回"不设 env"(= 改动前行为)。 + `- **前置探测(先做,再决定设不设 env)**:确认 \`${c.root}/frontend/e2e/__smoke__/\` 下确有 spec 文件。**不存在**(全新项目首跑:前端骨架要到前端阶段才建,本后端模块跑在它之前)→ **完全不设** \`ERP_E2E_SCOPE\`,按项目原样跑 e2e 命令(即改动前的行为),\`e2eScope\` 填 \`unscoped-no-smoke-yet\`、**\`e2ePassed\` 留空不填**(下方空跑判据只惩罚"明确 0 条",留空即豁免)。这**不是**缺陷、**不要**为此 halt,也**不要**在本门里去生成冒烟集(那是 fe-skeleton stage 的职责,越界)。`, + '- **禁止空跑**:e2e 段匹配到 **0 条**用例即视为**范围推导错误**,按 `red` 返回(`failures` 写明推导出的范围与来源),**绝不**当成绿。这是收窄唯一真正的风险,宁可报错重来。(例外只有上面那条「冒烟集尚未生成」——那种情形根本不设 env,不走本判据。)', `- 证据里必须逐字写一行 \`e2eScope: <你实际用的 ERP_E2E_SCOPE 值>\`,并在返回里回填 \`e2eScope\` / \`e2ePassed\`(e2e 段通过的用例条数)。`, '- **全量回归不在本门**:本次跳过的那些 e2e 由用户按需跑 `/erp-workflow:full-test` 兜底,你**不需要**、也**不许**为"回归覆盖不足"halt 或改回全量。', ] : [