--- name: fe-feature-verify description: 前端功能循环第 4 步。把 FE 的组件测试 + E2E 派发到子会话执行,按模板渲染证据。无证据不声称完成。 user-invocable: false allowed-tools: Skill Read Agent --- **所有输出必须使用中文。** # fe-feature-verify 把当前 FE 的测试派发到 Agent 子会话执行,按模板把结构化结果渲染成证据。**主会话从不直接跑测试**,也不自由编写证据。 ## 执行步骤 1. 从 plan 文件确定本 FE 的测试目标: - 单测目标:plan § 二中所有 `测试先行类型 = jsdom` 的 test_file 列表 → 拼成 vitest/jest 过滤模式 - E2E 目标:所有 `测试先行类型 = e2e` 的 test_file 列表 → 拼成 Playwright spec 过滤模式 2. 派发 Agent 子会话(general-purpose)依次运行两个目标,子会话只返回结构化 JSON(不输出描述文字): ```json { "unit": { "command": "", "exit_code": , "passed": , "failed": , "failed_list": ["", ...], "stdout_excerpt": "<最后 30 行或最相关的失败片段>" }, "e2e": { "command": "", "exit_code": , "passed": , "failed": , "failed_list": ["", ...], "stdout_excerpt": "<最后 30 行或最相关的失败片段>" } } ``` 命令从 `docs/04-技术规范.md § 零 frontend.test_command` / `frontend.e2e_command` 取,缺失则用默认 `pnpm test:ci` / `pnpm e2e:ci`。 3. 按 `${CLAUDE_SKILL_DIR}/templates/fe-feature-verify-evidence-template.md` 渲染证据并打印到会话。 4. **任一目标 `exit_code != 0` 或 `failed > 0`** → 停止,不进入 review。 5. 全部通过 → **同一 turn 内立即** `Skill(fe-feature-review)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 - **绝不**在主会话直接跑测试,必须通过子会话 - **绝不**自由编写证据正文,必须从模板渲染 - 不要把原始 stdout 全文塞进主会话(`stdout_excerpt` ≤ 30 行) ## 参考 - `${CLAUDE_SKILL_DIR}/templates/fe-feature-verify-evidence-template.md` - 上游:`fe-feature-tdd` - 下游:`fe-feature-review`