在 kimi-code 仓库里 review 一个 PR 时使用:按 PR 模板逐节核对描述与 diff,并单独做一轮"回归与用户影响"评审,给出影响等级与评审摘要,评审摘要用用户当前使用的语言。
73
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
这个仓库过去的回归大多不是逻辑错误,而是"改动相对于自身意图是对的,但悄悄改掉了某个现有人群依赖的行为":方言分支收窄、默认值翻转、删 system prompt 句子、重构或移植时丢掉旧路径的功能、修复引入启动时序变化。通用 review 会把这类"有意的功能变更"排除在 bug 之外,所以这里把它单列成一轮。
评审判据只有一条:改动前能工作的任何输入(配置键、环境变量、命令行参数、provider 响应形态、旧版本写的会话数据、客户端请求、hook 载荷)改动后必须行为不变,除非 PR 明确声明了这个变化并给出了退路。
拉 PR 元数据与描述:
gh pr view <number> --json title,body,url,files,additions,deletions,baseRefName,headRefName读完整 diff(大 PR 按文件分批读):
gh pr diff <number>读足够的周边代码来验证描述里的每个断言。只看 diff 看不出"改动前谁走到这个分支"。
第一遍:定性。 判断改动类型,决定第三遍的深度,见"第一遍:定性"。
第二遍:按模板逐节核对。 见"模板逐节核对"。
第三遍:回归与用户影响。 尽量用一个独立子 agent 跑:只给它 PR 号、base 与 head、两三句改动简介和 surfaces.md 的路径,不给它作者关于影响范围的结论,让它先从 diff 和代码独立列清单,回来后再与作者填的表对比。没有子 agent 能力时自己按同样顺序做:先列清单,再读作者的表。见"第三遍:回归与用户影响"。
用用户当前使用的语言写评审摘要,格式见"输出"。
| 改动类型 | 第三遍深度 |
|---|---|
| 纯内部重构、测试、文档、测试 CI | 只需给出"没有可观测变化"的证据:哪些分支、默认值、契约文件没动 |
| 发布与打包:release、native 构建、VS Code 发布工作流,打包脚本,web 产物同步 | 全做,人群按安装方式与平台分:npm 包、各平台 native 二进制、VS Code 市场、内置 web 产物 |
| 新增功能,不动既有路径 | 只查新分支是否抢走了既有输入:新增条件是否排在旧条件之前 |
| 行为变更、默认值翻转、校验或权限收紧或放宽 | 全做 |
| prompt 文本变更:system prompt、工具描述、提醒、overlay、内置 skill | 全做,且每一句改动单独成行 |
| 移植、替换旧路径、大重构:v1 到 v2、runtime binding、协议替换 | 全做,并要求作者给出旧路径功能清单 |
| 协议、磁盘格式、SDK 导出、hook 载荷、命令行契约变化 | 全做,并点名仓库外的消费方 |
| 修复类改动改了启动顺序、生命周期、异步时序 | 全做,重点看谁依赖原来的顺序 |
一个 PR 可以同时属于多类,按最重的那类处理。
列出 diff 改变的每一个可观测行为,包括作者说"不变"的和作者认为"内部"的。内部包会打进 CLI 发布包,"内部"不等于用户无感。
每一行记录:行为、变化前、变化后、变化类型(新增 / 修改 / 删除 / 默认翻转 / 收紧 / 放宽)、证据(改动前后各一个 file:line,一侧不存在时给可达路径)。
读法:
surfaces.md 的"触发线索"。命中的 surface 必须在清单里有对应行,否则就是漏项。每一行对应到 surfaces.md 里的具体人群,写出人群名字和"这个人群存在"的证据:文档页、issue、配置示例、provider 载荷形态。找不到人群的,不进 finding,进"待作者确认"。
等级只由改动的事实决定,不看 changeset、文档、测试这些补救状态。三步判定:
广度三档,必须写出人群名字:全体用户 / 某类配置或平台人群 / 边缘环境。
每一行单独定级,PR 的等级取最高。静默升级的理由:没有信号就没有上报,回归会一直存活到有人偶然发现。
固定四问,逐条回答有 / 无 / 不适用,并给出证据:
再加一问:docs/en 与 docs/zh 里对这个 surface 的承诺是否同步更新。
file:line 证据,和一个具名人群及其存在证据。两者缺一,降级为"待作者确认"。新增整个文件或删除整段实现时一侧天然为空,这时给存在的那一侧加上受影响可达路径的 file:line 即可。输出为中文时节名用下表的译名,其他语言沿用模板原文的节名:
| English | 中文 |
|---|---|
| Requirement or Bug | 需求或 Bug |
| Bug Reproduction Steps | Bug 复现步骤 |
| Root Cause | 根本原因 |
| Code Changes | 代码变更 |
| Behavior Changes and Affected Users | 行为变化与受影响人群 |
| Checklist | 检查清单 |
旧 PR 若仍用 Impact Scope 这一节,按"行为变化与受影响人群"的标准核对。
None 的,证据是否成立?用用户当前使用的语言,按下面的顺序,示例为中文:
## 结论
一句话:可合 / 需修改 / 建议阻塞。附 PR 影响等级与改动类型。
## 回归与用户影响
- 改动类型:…
- 影响等级:Lx(广度:…;是否静默:…)
| 行为 | 变化前 | 变化后 | 受影响人群 | 证据 | 等级 | 退路 |
|---|---|---|---|---|---|---|
补救核对:
- 退路开关:…
- changeset 是否点明失去的行为:…
- 老数据与老客户端:…
- guard 测试:…
- 文档:…
待作者确认(最多 5 条):
1. …
## 模板逐节核对
逐节说明是否填写充分,指出缺失、不准确、与 diff 不一致之处。
## 需要修改的项
可执行的列表;没有则写"无"。每次线上回归复盘后,把新发现的人群或触发线索补进 surfaces.md,并在它的"历史案例"里加一行。清单不更新就会过时。
21406fb
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.