SKILL.md 5.93 KB

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 阶段),渲染合并报告。approvephase-driver 推进;request-changes 自修复 must-fix 并从 verify 阶段重新开始,最多 5 轮。

入参(由 feature-tdd 传入):

  • phasebackend | frontend
  • idREQ-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)

  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

   {
     "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 行>"
     }
   }
  1. 渲染 ## 验证证据 节(填入 ${CLAUDE_SKILL_DIR}/templates/feature-review-template.md 的 verify 部分)。

  2. exit_code != 0failed > 0(任一目标失败)→ 停止,不进入 review 阶段。打印一行结构化摘要(feature-review[verify] 失败: <command> exit=<code> failed=<n>;详见 <reviews 路径>)+ 提示「修复后重跑 /erp-workflow:coding-start(loop 幂等会回到本步)」,然后停下,不调用下游。环境/依赖类失败可主动 Skill(interrupt-check)

  3. 全部通过 → 进入 review 阶段。


阶段二:审阅(Review)

  1. 派发 reviewer agent(把本 id 引入的代码 diff 与规格作为输入):

    • phase=backendAgent(subagent_type=superpower-code-reviewer)
    • phase=frontendAgent(subagent_type=fe-code-reviewer)(同时提供规格文件 + 关联 prototype 文件列表,见 spec 顶部 关联原型
  2. 渲染 ## 自审结论 节(填入 ${CLAUDE_SKILL_DIR}/templates/feature-review-template.md 的 review 部分),写入合并报告 docs/superpowers/reviews/<YYYY-MM-DD>-<id>.mdverdictapproverequest-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 重验)