| name | pr-review |
| description | 对指定 PR 跑一次自动分级 gocell-web 六维度 review。按 diff 净增删行数自动分配 2/3/6 reviewer agent 并行(< 200 行不派发,主 agent 自审);主 agent 做根因聚类 + Cx 分级 + 修复分流建议,不自动 fix。 |
| argument-hint | <PR 编号> |
| allowed-tools | ["Read","Glob","Grep","Bash","Agent"] |
| disable-model-invocation | true |
gocell-web PR Review — 自动分级六维度审查
按 PR diff 净增删行数自动分配 2/3/6 个 reviewer agent 并行做六维度审查(< 200 行不派发,主 agent 自审),主 agent 做根因聚类与修复分流建议。只 review,不自动 fix。
六维度定义(与 ship skill §阶段 7 一致):
- Vue 模板正确性
- TS 类型安全
- 包边界 / 包架构
- 可访问性 (a11y)
- 性能 / Bundle
- 设计 token / 产品一致性
阶段 1:输入解析
参数必须是 PR 编号(纯数字或 #NNN)。
- 缺参 → 输出
错误:缺少 PR 编号;用法:/pr-review <PR 编号>,不执行后续
- 非法格式 → 输出
错误:参数 "<原值>" 不是合法 PR 编号,不执行后续
阶段 2:取 diff 行数
gh pr view <N> --json additions,deletions --jq '.additions + .deletions'
gh 命令须 dangerouslyDisableSandbox: true。取不到 PR → 报错退出。
阶段 2.5:定位或自动创建 review worktree
BRANCH=$(gh pr view <N> --json headRefName --jq .headRefName)
WORKTREE=$(git worktree list --porcelain | awk -v b="refs/heads/$BRANCH" '/^worktree /{w=$2} $0=="branch "b{print w; exit}')
情况 A:找到既有 worktree → 直接用 $WORKTREE,不动其状态。
情况 B:无既有 worktree → 自动创建 review-only worktree:
git fetch origin <BRANCH>
git worktree add --detach worktrees/review-pr<N> origin/<BRANCH>
WORKTREE="$(git rev-parse --show-toplevel)/worktrees/review-pr<N>"
创建失败 → 报错退出,不静默回退。情况 B 在阶段 5 末尾追加:🧹 清理:git worktree remove worktrees/review-pr<N>。
阶段 3:分级表
区间左闭右开,边界归更高档。
diff < 200:不派发 sub-agent,主 agent 在自身上下文按 .claude/agents/reviewer.md 的六维度 / Finding 格式 / Cx 分级,在 $WORKTREE 上 Read/Grep 完成审查,直接进入阶段 5。
diff ≥ 200 按下表派发:
| diff 行数 | reviewer 数 | 维度切分 |
|---|
200 ≤ diff < 600 | 2 | A:Vue 模板 + TS + 设计/产品;B:包边界 + a11y + 性能 |
600 ≤ diff < 1500 | 3 | A:Vue 模板 + TS;B:包边界 + 设计/产品;C:a11y + 性能 |
diff ≥ 1500 | 6 | 六维度各 1 agent |
阶段 4:并行派发 reviewer agent
diff < 200 跳过本阶段,直接进入阶段 5。
单消息内多 Agent tool call 并行启动 subagent_type: reviewer。
每个 sub-agent prompt 必须自包含:
- PR 编号 + 取 diff 命令
gh pr diff <N> / gh pr view <N> --json title,body,files,headRefOid(gh 须 dangerouslyDisableSandbox: true)
- 工作目录
$WORKTREE 绝对路径,所有 Read/Grep 路径前缀 $WORKTREE/
- Finding 输出的
文件:行号 必须是 repo-relative(去掉 $WORKTREE/ 与 worktrees/<name>/ 前缀),便于主 agent 汇总
- 分配的维度子集(阶段 3 表格)
- 必读:CLAUDE.md +
.claude/rules/gocellweb/*.md + PRD 相关章节
- Finding 格式、Cx 分级、输出契约 → 沿用
.claude/agents/reviewer.md
阶段 5:主 agent 分析与汇总
收齐 Finding 后(diff ≥ 200 来自 sub-agent;diff < 200 来自主 agent 自审),主 agent 必须自己读关键文件、做根因分析,不允许原样转发。
5.1 去重 / 冲突裁决
- 同
文件:行号 + 同描述 → 重复,保留更详细一条
- 同
文件:行号 不同 P 级 → 保留更高 P 级,Read 代码裁定是否降级
- 同
文件:行号 不同 Cx → 按 5.2 整簇重评,不简单取大
- 冲突结论(P0 vs LGTM)→ Read 代码亲自裁决
5.2 根因归类(不允许跳过)
按共同根因聚类(不按文件 / 不按维度)。例:request 拦截器漏挂 Authorization → TS + 包边界 + a11y(401 跳转丢焦点) 三维度同时被命中。
Grep 验证系统性:≥ 3 处 = 架构缺陷,1-2 处 = 局部 bug。
每簇标注:涉及维度 / Finding 数(按 P 级拆分)/ 系统性(Grep 数)/ 整簇 Cx(按整簇改动量重评)。
5.3 输出 5 块(顺序固定)
输出语言:中文。
- 根因簇视图(主输出)— 每簇:根因一句 / 维度 / Finding 数 / 系统性 / 整簇 Cx / 子 Finding ID / 修复顺序建议
- Finding 详表 — list 形式(不用表格,避免 CJK 竖排)。按 P0→P2、同级 Cx1→Cx4 排序,每条两行:
**F{n}** [P·Cx·维度] repo-relative-path:line → 簇 C{m}
- 缩进 2 空格的摘要 ≤ 60 字,纯文本,禁反引号包裹中文短语;详细建议放根因簇视图
- 复杂度汇总 — 按根因簇 + 按 Finding 两套:
Cx1: N / Cx2: N / Cx3: N / Cx4: N
- 修复分流 — Cx1 / Cx2 簇 →
/fix;Cx3 / Cx4 簇 → "需人工决策" + 三级方案种子(最小 / 彻底 / 重构)。若 PR body(阶段 4 已取)含 GitHub closing keyword(close[sd]? / fix(e[sd])? / resolve[sd]? / refs,大小写不敏感)后跟 #<N>,分流条目附 ← issue #<N>
- 总体结论 —
通过 / 需修复 / 需讨论 + 一句话理由
输出前自检:
- 每个根因簇都 Read 过代表文件?
- 根因到了根本层(不停在症状)?
- 系统性判定有 Grep 证据?
任一不通过 → 补做。
约束
- 不调用
/fix,不写代码,不评 CI
gh 命令 dangerouslyDisableSandbox: true
验证清单
- 缺参 / 非法参数 → 立即输出错误,不执行后续
- 分级处理:
diff < 200 主 agent 自审不派发;diff ≥ 200 按行数派 2/3/6 个 reviewer agent(覆盖三档)
- 无 worktree 自动创建
worktrees/review-pr<N>;既有 worktree 复用,不重建
- 主 agent 输出含 Read/Grep 证据 + 根因簇视图先于 Finding 详表;维度名内部一致