Commit c95e4cbdc9f6b9daac2a03db2be5e93ecd4e2ef5
1 parent
a31056b0
fix(coding): 冒烟集尚未生成时不设 ERP_E2E_SCOPE,避免全新项目首跑撞上空跑判红
边界:前端骨架(含 frontend/e2e/__smoke__/)要到**前端阶段**才建,而后端模块的 test-gate 跑在它之前。全新项目首跑第一个后端模块时该目录根本不存在,设 ERP_E2E_SCOPE=smoke 会匹配 0 条 → 撞上 4dea0e57 的"禁止空跑"判红 → 自动重试 + 仲裁 retry 反复重跑到 ADJUDICATE_MAX 才 halt,而重跑变不出还没生成的目录。 改为先探测:__smoke__/ 下无 spec → **完全不设** env(= 改动前行为,跑项目原样 e2e 命令),e2eScope 填 unscoped-no-smoke-yet、e2ePassed 留空不填。guardEmptyE2e 只惩罚 "明确回报 0 条"(`e2ePassed !== 0` 即放行),留空天然豁免,JS 侧无需改动。 明确禁止本门顺手生成冒烟集——那是 fe-skeleton stage 的职责,越界。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Showing
1 changed file
with
6 additions
and
2 deletions
workflows/coding.mjs
| @@ -797,8 +797,12 @@ function gatePrompt(module, phase, attempt = 1, c) { | @@ -797,8 +797,12 @@ function gatePrompt(module, phase, attempt = 1, c) { | ||
| 797 | `- 把它们相对 \`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 里跑)。`, | 797 | `- 把它们相对 \`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 里跑)。`, |
| 798 | '- 一个 test_file 都取不到(plan 缺失 / 无 e2e 任务)→ 退到 `ERP_E2E_SCOPE=smoke`(骨架期生成的冒烟集),**不要**因此改成全量、也不要跳过 e2e 段。', | 798 | '- 一个 test_file 都取不到(plan 缺失 / 无 e2e 任务)→ 退到 `ERP_E2E_SCOPE=smoke`(骨架期生成的冒烟集),**不要**因此改成全量、也不要跳过 e2e 段。', |
| 799 | ].join('\n') | 799 | ].join('\n') |
| 800 | - : `- 本模块本轮无待跑 FE(后端模块 / 本轮无前端改动),e2e 范围退到冒烟集:\`ERP_E2E_SCOPE=smoke\`(骨架期生成的 \`frontend/e2e/__smoke__/\`,验"栈起得来 + 首页可达 + 登录态有效")。**不要**跳过 e2e 段——它同时是起栈健康检查。`, | ||
| 801 | - '- **禁止空跑**:e2e 段匹配到 **0 条**用例即视为**范围推导错误**,按 `red` 返回(`failures` 写明推导出的范围与来源),**绝不**当成绿。这是收窄唯一真正的风险,宁可报错重来。', | 800 | + : `- 本模块本轮无待跑 FE(后端模块 / 本轮无前端改动),e2e 范围退到冒烟集:\`ERP_E2E_SCOPE=smoke\`(骨架期生成的 \`frontend/e2e/__smoke__/\`,验"栈起得来 + 应用没整体炸")。**不要**跳过 e2e 段——它同时是起栈健康检查。`, |
| 801 | + // 全新项目首跑的边界:前端骨架(含冒烟集)在**前端阶段**才建,而后端模块的 test-gate 跑在它之前。 | ||
| 802 | + // 此时 __smoke__/ 根本不存在,设 ERP_E2E_SCOPE=smoke 会匹配 0 条 → 撞上"禁止空跑"判红 → 反复重跑 | ||
| 803 | + // 到仲裁上限 halt,而重跑一万次也变不出还没生成的目录。故先探测,不存在就退回"不设 env"(= 改动前行为)。 | ||
| 804 | + `- **前置探测(先做,再决定设不设 env)**:确认 \`${c.root}/frontend/e2e/__smoke__/\` 下确有 spec 文件。**不存在**(全新项目首跑:前端骨架要到前端阶段才建,本后端模块跑在它之前)→ **完全不设** \`ERP_E2E_SCOPE\`,按项目原样跑 e2e 命令(即改动前的行为),\`e2eScope\` 填 \`unscoped-no-smoke-yet\`、**\`e2ePassed\` 留空不填**(下方空跑判据只惩罚"明确 0 条",留空即豁免)。这**不是**缺陷、**不要**为此 halt,也**不要**在本门里去生成冒烟集(那是 fe-skeleton stage 的职责,越界)。`, | ||
| 805 | + '- **禁止空跑**:e2e 段匹配到 **0 条**用例即视为**范围推导错误**,按 `red` 返回(`failures` 写明推导出的范围与来源),**绝不**当成绿。这是收窄唯一真正的风险,宁可报错重来。(例外只有上面那条「冒烟集尚未生成」——那种情形根本不设 env,不走本判据。)', | ||
| 802 | `- 证据里必须逐字写一行 \`e2eScope: <你实际用的 ERP_E2E_SCOPE 值>\`,并在返回里回填 \`e2eScope\` / \`e2ePassed\`(e2e 段通过的用例条数)。`, | 806 | `- 证据里必须逐字写一行 \`e2eScope: <你实际用的 ERP_E2E_SCOPE 值>\`,并在返回里回填 \`e2eScope\` / \`e2ePassed\`(e2e 段通过的用例条数)。`, |
| 803 | '- **全量回归不在本门**:本次跳过的那些 e2e 由用户按需跑 `/erp-workflow:full-test` 兜底,你**不需要**、也**不许**为"回归覆盖不足"halt 或改回全量。', | 807 | '- **全量回归不在本门**:本次跳过的那些 e2e 由用户按需跑 `/erp-workflow:full-test` 兜底,你**不需要**、也**不许**为"回归覆盖不足"halt 或改回全量。', |
| 804 | ] : [ | 808 | ] : [ |