--- name: feature-review description: 统一功能循环第 3 步(后端 REQ / 前端 FE 共用,由 phase 参数区分)。先派子会话跑验证测试(verify 阶段),通过后再派相应 reviewer agent 做 AI 自审(review 阶段),approve 回 phase-driver;request-changes 自修复 + 重验,最多 5 轮。 user-invocable: false allowed-tools: Read Write Edit Skill Agent Bash(git add *) Bash(git commit *) --- **所有输出必须使用中文。** # feature-review 统一功能循环第 3 步(verify + review 合并)。先派子会话运行功能测试(verify 阶段),通过后再委托对应 reviewer agent 做 AI 自审(review 阶段),渲染合并报告。`approve` 回 `phase-driver` 推进;`request-changes` 自修复 must-fix 并从 verify 阶段重新开始,最多 5 轮。 **入参(由 feature-tdd 传入):** - `phase`:`backend` | `frontend` - `id`:`REQ-XXX-NNN`(backend)或 `FE-NN`(frontend) 内部维护 `round` 计数器(首次 = 1)。 --- ## 阶段差异 | 项目 | phase=backend | phase=frontend | |------|-------------|----------------| | 测试目标 | `./scripts/test.sh`(plan 确认)| vitest/jest 单测 + Playwright E2E(从 `docs/04 §零 frontend.test_command` / `frontend.e2e_command` 取;缺失用 `pnpm test:ci` / `pnpm e2e:ci`)| | 测试 JSON 结构 | 单层 JSON(见"验证阶段")| 两层 JSON:`unit` + `e2e`(见"验证阶段")| | Reviewer agent | `superpower-code-reviewer` | `fe-code-reviewer` | | approve 写 docs/08 | §二 该 REQ 行 `[ ]`→`[x]` | §三 该 FE 行 `[ ]`→`[x]` | | approve 输出 | `feature-review: round 通过` | `feature-review: round 通过` | --- ## 执行步骤 ### 阶段一:验证(Verify) 1. **确定测试目标**: - `phase=backend`:从 plan 文件或项目标准命令确定(如 Maven profile / `scripts/test.sh` path) - `phase=frontend`:从 `docs/04-技术规范.md § 零 frontend` 取测试栈和测试命令;按 plan 中 task 的"测试先行类型"拆分单测目标(jsdom)和 E2E 目标(playwright) 2. **派发 Agent 子会话(general-purpose)** 运行测试目标,子会话只返回结构化 JSON(不输出描述文字): `phase=backend`: ```json { "command": "", "exit_code": , "passed": , "failed": , "failed_list": ["", ...], "stdout_excerpt": "<最后 30 行或最相关的失败片段>" } ``` `phase=frontend`: ```json { "unit": { "command": "", "exit_code": , "passed": , "failed": , "failed_list": ["", ...], "stdout_excerpt": "<最后 30 行>" }, "e2e": { "command": "", "exit_code": , "passed": , "failed": , "failed_list": ["", ...], "stdout_excerpt": "<最后 30 行>" } } ``` 3. 渲染 `## 验证证据` 节(填入 `${CLAUDE_SKILL_DIR}/templates/feature-review-template.md` 的 verify 部分)。 4. **`exit_code != 0` 或 `failed > 0`**(任一目标失败)→ **停止,不进入 review 阶段**。打印一行结构化摘要(`feature-review[verify] 失败: exit= failed=;详见 `)+ 提示「修复后重跑 `/erp-workflow:coding-start`(loop 幂等会回到本步)」,然后停下,不调用下游。环境/依赖类失败可主动 `Skill(interrupt-check)`。 5. 全部通过 → 进入 review 阶段。 --- ### 阶段二:审阅(Review) 6. **派发 reviewer agent**(把本 id 引入的代码 diff 与规格作为输入): - `phase=backend` → `Agent(subagent_type=superpower-code-reviewer)` - `phase=frontend` → `Agent(subagent_type=fe-code-reviewer)`(同时提供规格文件 + 关联 prototype 文件列表,见 spec 顶部 `关联原型`) 7. 渲染 `## 自审结论` 节(填入 `${CLAUDE_SKILL_DIR}/templates/feature-review-template.md` 的 review 部分),写入合并报告 `docs/superpowers/reviews/-.md`。`verdict` 取 `approve` 或 `request-changes`。 --- ### 阶段三:按 verdict 分派 **approve** - `Edit docs/08-模块任务管理.md`: - `phase=backend`:在 §二 找 `- [ ] ...` 改为 `- [x] ...` - `phase=frontend`:在 §三 找 `- [ ] ...` 改为 `- [x] ...` - (仅功能级可视化;模块 / 阶段完成仍以 `里程碑:` 字段 + 本地 `git tag -l` 为准,不依赖此勾选) - 输出状态行(见上方阶段差异表),调用 `Skill(phase-driver)` 传入 `{ phase }` **request-changes(round < 5)** - 逐项编辑 `must_fix[]` 指向的代码文件 - 按 `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` 格式 commit: `fix(): 修复 review round must-fix ` - **重新执行本 skill 的验证阶段**(阶段一);通过后进入 round `` 的 review 阶段 **request-changes(round == 5)** - 停止并打印摘要(本 id、5 轮 must-fix 列表汇总),升级给用户手工介入 - 不再自动修复,不回调 `phase-driver` --- ## 护栏 - **绝不**在主会话直接跑测试,必须通过子会话 - **绝不**自由编写证据正文,必须从模板渲染 - 不要把原始 stdout 全文塞进主会话(`stdout_excerpt` ≤ 30 行) - verify 失败(exit_code≠0 或 failed>0)→ 硬停,不进 review --- ## 参考 - `${CLAUDE_SKILL_DIR}/templates/feature-review-template.md`(verify 证据 + review 结论合并文档) - `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md`(fix commit 格式) - 委托:`superpower-code-reviewer`(backend,本插件 `agents/superpower-code-reviewer.md`) - 委托:`fe-code-reviewer`(frontend,本插件 `agents/fe-code-reviewer.md`,前端专用,硬编码 7 维 review checklist) - 上游:`feature-tdd` - 下游:`phase-driver`(approve)/ 本 skill 验证阶段(request-changes 重验)