Reference · Model-invoked · 主 build 链收尾审查

code-review 速查

双轴 diff 审查的口袋版。完整教学见 Lesson 0013; 原文见 SKILL.mddocs 页aihero.dev/skills-code-review)。

一句话

以你给的固定点为基准,把 HEAD 的 diff 交给两条轴各审一遍—— Standards(写得对吗:合不合仓库的标准)和 Spec (做对事吗:有没有实现当初的需求)——并行子代理、并排报告、永不合并排名。 全程只读,产物只有对话里的报告。

何时伸手

流程卡(5 步)

  1. 钉固定点:用户没给就开口问;git diff <点>...HEAD(三点 = 对比 merge-base)+ git log <点>..HEAD --oneline;先 git rev-parse 验证、确认 diff 非空——错了就地失败,别进子代理再炸
  2. 找 spec:提交信息里的 Issue 引用(按 docs/agents/issue-tracker.md 取)→ 用户传的路径 → docs//specs//.scratch/ 下匹配的 PRD → 问用户;没有就 Spec 轴跳过,注明 "no spec available"
  3. 找标准:仓库写下的标准(CODING_STANDARDS.mdCONTRIBUTING.md…)+ 固定携带的 Fowler 异味基线(12 条,见下)
  4. 并行派两个子代理:一条消息两个 Agent 调用,都用 general-purpose;Standards 的 prompt 里照贴基线全文(它没有别的渠道拿到);两个任务书都限 400 词
  5. 聚合## Standards / ## Spec 两节原文照摆;结尾一行:逐轴总数 + 本轴最严重一条

两条绑定规则(异味基线)

聚合红线

12 条异味基线(是什么 → 怎么修)

异味是什么怎么修
Mysterious Name名字看不出它做什么、装了什么改名;想不出诚实的名字 = 设计含糊
Duplicated Code同一逻辑形状在多处 hunk / 文件重复抽出公共形状,两处都调它
Feature Envy方法读别人对象的数据多过自己的把方法搬到它羡慕的数据上
Data Clumps同样几个字段 / 参数总结伴出现捆成一个类型,传这个类型
Primitive Obsession基本类型顶替该有自己类型的领域概念给概念一个小类型
Repeated Switches对同一类型的同一串 switch/if 反复出现多态,或抽一张共享映射表
Shotgun Surgery一个逻辑改动逼你散开改很多文件一起变的收进同一模块
Divergent Change一个模块因多个无关原因被改拆开,每个模块只为一个原因变
Speculative Generality为 spec 没有的需求预建抽象 / 参数 / 钩子删掉,内联回去等真实需求
Message Chains长长的 a.b().c().d() 导航链在第一个对象上藏一个方法
Middle Man类 / 函数大部分只是往下转发砍掉,直接调真目标
Refused Bequest子类忽略 / 覆盖掉继承来的大部分放弃继承,改用组合

依赖关系

会改什么 / 下一步

微调入口(都在 code-review/SKILL.md)

症状改哪段
两轴被合并、给了总排名「### 5. Aggregate」+「## Why two axes」
异味被当硬性违规报「### 3…」的 "Always a judgement call" + 第 4 步 Standards 任务书
仓库认可的做法被基线挑刺「### 3…」的 "The repo overrides."
主干新提交混进审查范围「### 1. Pin the fixed point」三点写法与 rev-parse
没 spec 时子代理编需求「### 2. Identify the spec source」第 4 条
报告又臭又长第 4 步两个任务书的 "Under 400 words"
说「review 一下」时 AI 不主动用frontmatter description 的 "Use when…"