在 kimi-code 仓库里创建或更新 PR 时使用:如何把 PR 模板的每一节写得简洁、便于 reviewer 理解,包括"行为变化与受影响人群"表。
72
91%
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
为当前分支创建或更新 PR,描述要让 reviewer 明白这个改动为什么存在、实现长什么样、现有用户会失去什么。
读 PR 模板:
Read(.github/pull_request_template.md)
找到或创建 PR:
gh pr view --json url,number,title,state 2>/dev/null。git status --short --branch 和当前分支上的提交。gh pr create 创建 PR。收集解释改动所需的上下文:
git diff main...HEAD)和足够的周边代码,理解行为与归属。gh pr view 拿元数据和改动文件列表。按模板各节写描述。描述用用户当前使用的语言,行为变化表也一样;只有三样固定:PR 标题保持英文 Conventional Commit,changeset 保持英文(见 gen-changesets skill),节标题沿用模板原文。
Resolve #<number>。不要多写。N/A。步骤已在 issue 里的写 See linked issue。N/A。说明根因,以及这是根本修复还是绕过。发布描述:
gh pr edit <number> --body-file <path> 或 gh pr create --body-file <path>。这一节回答一个问题:合入之后,现有用户会失去什么。这个仓库过去的回归大多来自没人回答这个问题,而不是逻辑错误。
判据:改动前能工作的任何输入(配置键、环境变量、命令行参数、provider 响应形态、旧版本写的会话数据、客户端请求、hook 载荷)改动后必须行为不变,除非这里明确声明了变化并给出退路。
写法:
列出 diff 改变的每一个可观测行为,一行一个。包括你认为"不变"但分支条件挪动了的:新增的条件会不会先于旧条件命中既有输入;删除或收窄的分支改动前谁在走。内部包会打进 CLI 发布包,"内部"不等于用户无感。表格用 PR 描述的语言,下面的示例用英文只是示意形状:
| Behavior | Before | After | Who relies on the old behavior | Escape hatch |
|---|---|---|---|---|
reasoning parsing when reasoning_details is an array | string reasoning also read | string ignored | OpenAI-compatible gateways that send both (OpenRouter dialect) | none |
人群要具名,不要写"部分用户"。从 .agents/skills/review-pr/surfaces.md 里取:客户端(TUI、print 模式、desktop 与 web、VS Code、ACP、SDK)、provider 方言、平台、配置状态、数据年代、外部脚本。
改了 prompt 文本(system prompt、工具描述、提醒)的,每一句单独成行,写清这句改动前约束了什么行为、谁依赖、现在由什么来约束。"没有测试引用这句"不是无影响的证据。
替换或绕过旧路径的(移植、runtime binding、协议替换),额外列出旧路径的功能清单:它认哪些环境变量、有哪些兜底、接受哪些输入,以及每一项在新路径里的位置。
确实没有可观测变化的,写 None,并说明证据:哪些分支、默认值、契约文件没动。
表后面列受影响模块与每一行对应的测试覆盖。默认翻转或删除行为的,必须有一条测试把未被改动的人群的旧行为钉住,并且 changeset 要写明用户失去了什么,见 gen-changesets skill;没有退路的,在 PR 里请维护者显式拍板。
优先用结构化视图,少用散文。用能说清实现的最小组合,没变的类别不要列。
逻辑或算法变化用伪代码 diff:
on(save)
- write content
+ if content is unchanged
+ return cached result
+ write new content
+ invalidate cache运行时控制流用调用树 diff:
submitForm
createSession
persistPrompt
+ expandSkillMention
launchAgent
- navigateToSession
+ navigateToSession
+ subscribeToEvents文件职责变化用浅层文件树 diff:
src/
├── commands/
+│ └── show-me.ts # expands the slash command
├── sessions/
-└── transport.ts
+└── transport/
+ ├── client.ts
+ └── stream.ts组件或 UI 结构变化用树 diff:
<SessionPage>
useSessionEvents()
<SessionToolbar>
+ <RunSkillButton />
<SessionTimeline>
+ <SkillResultCard />组件交互、控制流或数据流用 Mermaid,解释 bug 机制时尤其有用:
sequenceDiagram
participant User
participant UI
participant Daemon
User->>UI: choose command
UI->>Daemon: send expanded prompt
Daemon-->>UI: stream result关键数据结构或类型变化用对应语言的代码块:
interface SessionEvents {
onTurnStart(cb: (turn: Turn) => void): void;
onTurnEnd(cb: (turn: Turn) => void): void;
}可视化大纲的规则:
diff 块。text 块给出完整目标形状。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.