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: <REQ> round <N> 通过 |
feature-review: <FE-NN> round <N> 通过 |
执行步骤
阶段一:验证(Verify)
-
确定测试目标:
-
phase=backend:从 plan 文件或项目标准命令确定(如 Maven profile /scripts/test.shpath) -
phase=frontend:从docs/04-技术规范.md § 零 frontend取测试栈和测试命令;按 plan 中 task 的"测试先行类型"拆分单测目标(jsdom)和 E2E 目标(playwright)
-
派发 Agent 子会话(general-purpose) 运行测试目标,子会话只返回结构化 JSON(不输出描述文字):
phase=backend:
{
"command": "<cmd>",
"exit_code": <int>,
"passed": <int>,
"failed": <int>,
"failed_list": ["<test>", ...],
"stdout_excerpt": "<最后 30 行或最相关的失败片段>"
}
phase=frontend:
{
"unit": {
"command": "<vitest/jest 命令>",
"exit_code": <int>,
"passed": <int>,
"failed": <int>,
"failed_list": ["<test>", ...],
"stdout_excerpt": "<最后 30 行>"
},
"e2e": {
"command": "<playwright 命令>",
"exit_code": <int>,
"passed": <int>,
"failed": <int>,
"failed_list": ["<spec>", ...],
"stdout_excerpt": "<最后 30 行>"
}
}
渲染
## 验证证据节(填入${CLAUDE_SKILL_DIR}/templates/feature-review-template.md的 verify 部分)。exit_code != 0或failed > 0(任一目标失败)→ 停止,不进入 review 阶段。打印一行结构化摘要(feature-review[verify] 失败: <command> exit=<code> failed=<n>;详见 <reviews 路径>)+ 提示「修复后重跑/erp-workflow:coding-start(loop 幂等会回到本步)」,然后停下,不调用下游。环境/依赖类失败可主动Skill(interrupt-check)。全部通过 → 进入 review 阶段。
阶段二:审阅(Review)
-
派发 reviewer agent(把本 id 引入的代码 diff 与规格作为输入):
-
phase=backend→Agent(subagent_type=superpower-code-reviewer) -
phase=frontend→Agent(subagent_type=fe-code-reviewer)(同时提供规格文件 + 关联 prototype 文件列表,见 spec 顶部关联原型)
-
渲染
## 自审结论节(填入${CLAUDE_SKILL_DIR}/templates/feature-review-template.md的 review 部分),写入合并报告docs/superpowers/reviews/<YYYY-MM-DD>-<id>.md。verdict取approve或request-changes。
阶段三:按 verdict 分派
approve
-
Edit docs/08-模块任务管理.md:-
phase=backend:在 §二 找- [ ] <REQ-id> ...改为- [x] <REQ-id> ... -
phase=frontend:在 §三 找- [ ] <fe_id> ...改为- [x] <fe_id> ... - (仅功能级可视化;模块 / 阶段完成仍以
里程碑:字段 + 本地git tag -l为准,不依赖此勾选)
-
- 输出状态行(见上方阶段差异表),调用
Skill(phase-driver)传入{ phase }
request-changes(round < 5)
- 逐项编辑
must_fix[]指向的代码文件 - 按
${CLAUDE_SKILL_DIR}/templates/commit-message-template.md格式 commit:fix(<module_id 或 scope>): 修复 review round <N> must-fix <id> -
重新执行本 skill 的验证阶段(阶段一);通过后进入 round
<N+1>的 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 重验)