| name | review1-raise |
| description | [Reviewer] Analyze local git diff (with optional user-supplied extra scope) and produce a structured review document with numbered findings (R1, R2...). Part of a 5-stage adversarial ping-pong review: raise(R) → reply(D) → confirm(R) → execute(D) → accept(R). |
review1-raise — 产出评审报告
分析代码改动,生成结构化 review 文档,为后续 review2-reply / review3-confirm / review4-execute / review5-accept 提供输入。
角色
Reviewer Agent — 本阶段由 Reviewer 执行,是五阶段对抗性 ping-pong 流程的第一棒:
raise(R) → reply(D) → confirm(R) → execute(D) → accept(R)
对抗假设:代码中存在作者未察觉的缺陷、设计短视或一致性问题。积极挖掘,不因代码"能跑"就放水。严重程度要客观标定——风格偏好可以提,但不得标为"严重"。预设 Defender 在 review2-reply 中会反驳弱势 Review,因此每条 Review 必须有充分依据,禁止模糊措辞。
分析范围
- 前提:本工作流基于未提交的改动(staged + unstaged)
- 默认:
git diff HEAD(已暂存 + 未暂存)
- 补充:用户可在调用时追加范围,如特定路径、提交区间、额外文件等
- 最终执行:
git diff HEAD [补充范围] 及 git diff --stat HEAD [补充范围]
步骤
-
检查历史 review 记录(由主 Agent 执行):
- 执行
ls -t .temp/review-*.md 获取历史文档列表
- 逐个用
head -n 15 .temp/review-xxx.md 读文档开头,查看"评审范围"中涉及的文件路径
- 若和当前
git diff --stat HEAD 涉及的文件有重叠,视为相关文档;用 read 读取完整内容
- 从相关文档中提取精简信息:各 Rn 的共识状态(
已共识·实施 / 已共识·延后 / 已共识·否决 / 已共识·存档(旧) / 验收退回 等)及核心问题描述
- 这些精简信息作为约束提供给子 Agent,避免子 Agent 上下文被大量历史内容占满
-
收集 diff(默认 + 用户补充)
-
若无改动,直接退出
-
同时启动两个并行子 Agent 评审——不等其中一个完成再启动另一个;让 Agent 自行读取代码与 diff,不要把 diff 文本直接传给 Agent;任一 Agent 启动失败时,不得单独继续,向用户确认后再决定下一步:
Agent A — 实现质量,聚焦:
- 正确性:逻辑是否有 bug,边界条件是否处理
- 健壮性:错误处理、空值、异常分支覆盖
- 测试:改动是否有对应测试,现有测试是否需要更新
- 代码风格:是否符合项目已有规范(命名、注释、结构)
- 对抗视角:假设代码有隐藏 bug,主动构造反例和边界情况验证,不因代码"能跑"就放过
Agent B — 设计质量,聚焦:
- 过度设计识别:不必要的抽象层、提前泛化、"以防万一"的冗余代码
- 短视识别:硬编码常量、缺少迁移路径的 breaking change、未来明显会痛的耦合
- 一致性:是否与项目已有模式保持一致,还是引入了孤立的新范式
- 长远可维护性:改动是在清偿技术债,还是在累积新的技术债
- 对抗视角:假设实现者知道自己在做什么——挑战的是架构层面的合理性,不是代码细节
每个 Agent 的输出须包含:
- 每条问题按严重程度标注(严重 / 警告 / 建议)
- 每条严重或警告问题必须附修改建议:具体到文件 / 函数 / 改法,有多种改法时简述取舍
- 无问题时明确写「此方面未发现问题」,禁止留空
子 Agent 约束:
- 子 Agent 只负责分析代码并输出评审意见,不需要运行 pytest 测试,测试由主 Agent 在后续步骤统一执行
- 若子 Agent 运行超过 15 分钟,说明可能陷入无限循环,主 Agent 应终止该子 Agent 并重新启动调查
- 如有历史 review 精简信息,子 Agent 应先阅读,避免重复提出之前已闭环(已共识·存档 或 已共识·实施)的同类问题
-
收集两个 Agent 的完整输出,将其作为参考线索而非最终结论——最终报告由本 Agent 独立负责,不得直接照搬任一 Agent 的原文:
- 逐条回到代码重新核查,形成独立判断后再写入报告
- 两个 Agent 结论互相矛盾时,重新审查代码后统一意见,不得将分歧直接暴露在报告中
- 仅一个 Agent 提出的条目,独立核查后决定是否成立,不因"只有一个提到"而自动降级或升级
- 类似问题合并后重新描述,不得压缩成仅含标题的清单,修改建议必须具体可执行
- 对照历史 review:若某条问题在之前的 review 中已被标记为
已共识·否决 或旧版 已共识·存档,本轮不再重复提出;若之前标记为 已共识·实施 但当前代码仍未修复,可再次提出并注明"历史遗留";若之前标记为 已共识·延后,本轮不重复提出,但可在新问题中引用 backlog ID
-
用户体验改动门禁:检查所有问题中是否存在影响功能设计或用户体验的建议(即不是代码 bug 修复或内部实现优化的条目)。若有,逐一和用户确认,用户明确同意保留的建议方可写入文档,未确认的直接剔除
-
整理问题列表,按 R1, R2... 编号
-
一次性写入:调用脚本创建文档,通过 heredoc 直接传入完整内容(仅允许这一次写入操作):
python .claude/skills/review1-raise/review_record.py create <主题slug> <<'EOF'
...
EOF
脚本自动生成时间戳,输出完整文件路径(如 .temp/review-260420-1530-<主题>.md),后续步骤使用此路径。
文档格式
## 本地改动与分支 Review
**评审范围**
- 默认范围: git diff HEAD
- 补充范围: (若有)
- 当前分支: <branch>
---
### R1 — <标题>
**Review**
- 严重程度: 严重/警告/建议
- 问题描述: ...
- 修改建议: ...
### R2 — <标题>
**Review**
...
Worktree 路径规范
当评审对象是 worktree 中的未提交改动时,所有操作必须在目标 worktree 中执行,不可写入 dev 目录:
- 历史 review 检查:步骤 1 的
ls -t .temp/review-*.md 必须在目标 worktree 根目录下执行,读取目标 worktree 中的历史 review 记录。
- diff 收集:
git diff HEAD 必须在目标 worktree 目录下执行,确保 diff 来自目标 worktree 的未提交改动。
- 评审报告生成:步骤 8 的
review_record.py create 必须在目标 worktree 目录下执行,生成的 .temp/review-*.md 位于目标 worktree 根目录,随 worktree 一起清理/提交。
- 脚本路径:
review_record.py 等脚本的调用必须在目标 worktree 目录下执行,确保相对路径解析正确。
输出
向用户报告生成的文件路径(位于 .temp/),并提示下一步:
review2-reply <文件名>