Skill Learning

pr

1. Bilingual SKILL.md

左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 16 处。

入口 skill:pr左右滑动切换语言 · 段落位置自动对齐
Use this template for writing the :
```markdown ## Summary <diagram, diff-sketch, or tree> ## Evidence - **Before:** <screenshot/output/failing test run> **After:** <screenshot/output/passing test run> ## Merge Danger **Door:** <one-way or two-way> <optional: description> **:** <> <optional: potential ramifications of merge> ```
## Sections Skip all preambles and keep prose brief. Use the user's domain language from `GLOSSARY.md`. ### Summary
Pick . - Show logic or an algorithm as pseudocode:
```text on(save) if content is unchanged return cached result write new content return fresh result ```
- Show runtime control flow as a call tree: ```text submitForm createSession persistPrompt launchAgent navigateToSession ``` - Show UI structure as a component tree, including state and module boundaries that matter:
```text <SessionPage> (apps/example/src/routes/session.tsx) useSessionEvents() <SessionToolbar> <RunSkillButton> (packages/ui) ``` - Show file responsibility or a broad refactor as a shallow file tree:
```text src/ ├── commands/ # parses user actions ├── sessions/ # owns session state └── transport/ # sends API requests ``` - Show component interaction, control flow, or data flow with Mermaid:
```mermaid sequenceDiagram participant User participant UI participant Daemon User->>UI: choose command UI->>Daemon: send expanded prompt Daemon-->>UI: stream result ``` - Use `diff` when the point is what changes and . Match the diff shape to the topic.
For a component change:
```diff <SessionPage> useSessionEvents() <SessionToolbar> + <RunSkillButton /> <SessionTimeline> + <SkillResultCard /> ``` For a file-layout change:
```diff src/ ├── commands/ +│ └── show-me.ts # expands the slash command ├── sessions/ -└── transport.ts +└── transport/ + ├── client.ts + └── stream.ts ``` For a call-tree or call-stack change:
```diff submitForm createSession persistPrompt + expandSkillMention launchAgent - navigateToSession + navigateToSession + subscribeToEvents ``` For a state or control-flow change:
```diff on(save) - write content + if content is unchanged + return cached result + write new content + invalidate cache ``` - Show the whole block when most of it is new, when , or when the user needs :
```ts function expandSkill(command: string): string { const skillName = command.slice(1); return `use the ${skillName} skill`; } ``` #### Guidance
Place each visual next to the short text it supports. Keep only the calls, files, props, states, and boundaries needed to answer the user's current question or the options to resolve the current discussion point. You may use one of these, you may use several, it is unlikely you will use all of them. Use your judgement and . ### Evidence
that the change works. Show a . - when the environment is set up for it and the change is visual.
. Test results, console output. Show the exact test that now fails and passes, using pseudocode.
### Merge Danger
Describe whether it's a . You can walk back through two-way doors, but not one-way doors. A PR that is is lower risk. Changes that involve destructive actions or hard-to-reverse decisions are one-way doors. The is the potential impact or scope of the changes introduced by this PR. Consider all possibilities. Examples are layout shift, breakages for consumers, mobile responsiveness, etc.
撰写 PR 正文时使用以下模板:
```markdown ## 摘要 <图示、diff 草图或目录树> ## 证据 - **之前:** <截图/输出/失败的测试运行> **之后:** <截图/输出/通过的测试运行> ## 合并风险 **门:** <单向或双向> <可选:说明> **影响半径:** <一个词的描述> <可选:合并的潜在后果> ```
## 各部分 跳过所有开场白,保持文字简短。使用 `GLOSSARY.md` 中用户所在领域的语言。
### 摘要 选择能够清楚表达关键点的最小视图。
- 用伪代码展示逻辑或算法: ```text on(save) if content is unchanged return cached result write new content return fresh result ```
- 用调用树展示运行时控制流: ```text submitForm createSession persistPrompt launchAgent navigateToSession ```
- 用组件树展示 UI 结构,并包含重要的状态和模块边界: ```text <SessionPage> (apps/example/src/routes/session.tsx) useSessionEvents() <SessionToolbar> <RunSkillButton> (packages/ui) ```
- 用浅层文件树展示文件职责或大范围重构: ```text src/ ├── commands/ # 解析用户操作 ├── sessions/ # 管理会话状态 └── transport/ # 发送 API 请求 ```
- 用 Mermaid 展示组件交互、控制流或数据流: ```mermaid sequenceDiagram participant User participant UI participant Daemon User->>UI: 选择命令 UI->>Daemon: 发送展开后的 prompt Daemon-->>UI: 流式返回结果 ```
- 当重点在于“发生了什么变化”,且周围结构已经存在时,使用 `diff`。让 diff 的形态匹配主题。
对于组件变更: ```diff <SessionPage> useSessionEvents() <SessionToolbar> + <RunSkillButton /> <SessionTimeline> + <SkillResultCard /> ```
对于文件布局变更: ```diff src/ ├── commands/ +│ └── show-me.ts # 展开斜杠命令 ├── sessions/ -└── transport.ts +└── transport/ + ├── client.ts + └── stream.ts ```
对于调用树或调用栈变更: ```diff submitForm createSession persistPrompt + expandSkillMention launchAgent - navigateToSession + navigateToSession + subscribeToEvents ```
对于状态或控制流变更: ```diff on(save) - write content + if content is unchanged + return cached result + write new content + invalidate cache ```
- 当大部分内容都是新的、缺失的上下文会掩盖职责归属或顺序,或者用户需要一个可复制的目标形态时,展示整个代码块: ```ts function expandSkill(command: string): string { const skillName = command.slice(1); return `use the ${skillName} skill`; } ```
#### 指南 把每个可视化内容放在它所支撑的简短文字旁边。只保留回答用户当前问题或解决当前讨论点的选项所必需的调用、文件、属性、状态和边界。 你可以使用其中一种,也可以使用几种,但你不太可能全部使用。运用判断,不要让用户承受过多信息。
### 证据 证明变更有效的具体证据。展示变更前和变更后的对比。
当环境已为此做好准备且变更是视觉上的,截图属于 S 级证据。
基于执行的证据属于 A 级。包括测试结果、控制台输出。使用伪代码展示现在会失败和会通过的确切测试。
### 合并风险 说明它是单向门还是双向门。双向门可以退回去,单向门则不能。回滚成本低的 PR 风险更低。涉及破坏性操作或难以逆转决策的变更属于单向门。 影响半径是这个 PR 引入的变更可能造成的影响或作用范围。考虑所有可能性,例如布局偏移、消费者侧故障、移动端响应性问题等。

Entry SHA-256: ab63f1cf78647389edcd386c9427c5dfca27ed2836930c24773ffee834c19bcd

2. Why This Skill Is Clever

一句话核心机制

pr 用固定三段式把 PR 正文变成一次可扫读、可验证的合并决策:用最小充分视图说明变化,用前后对照证明效果,再显式标注可逆性与影响范围。

触发与边界

直接来源: frontmatter 的 description: "Use when writing a PR body." 把触发点限定为“撰写 PR 正文”,不是执行代码评审、生成提交记录或替人决定是否合并。

支持性上下文: skills/engineering/README.md 将它列为 promoted engineering skill,并概括为“最小视觉摘要 + before/after 证据 + merge-danger 判断”;agents/openai.yaml 的界面说明是“Write a PR body that's fast to review”。CREDITS.md 说明 Summary 的视觉表达菜单源自 Dex Horthy 的 show-me,但为保证独立安装而复制机制、保留署名,不建立运行时依赖。

解释: 它不是“自动写一篇漂亮 PR”的大包大揽流程,而是一套信息选择协议。作者仍必须理解真实 diff、读取 GLOSSARY.md、取得执行证据,并判断哪一种视图最能回答评审者的问题。

信息架构与执行顺序

  1. 先采用固定骨架:Summary → Evidence → Merge Danger。
  2. 在 Summary 中识别变化类型:算法、调用流、UI 组件、文件职责、跨组件交互,或已有结构中的局部差异。
  3. 选择最小充分视图;若省略会掩盖职责、顺序或可复制的目标形态,就展示完整代码块。
  4. 把视图放在它支撑的短文本旁,只保留当前讨论所需的调用、文件、属性、状态与边界。
  5. 在 Evidence 中给出同条件的 before/after;视觉变化优先截图,行为变化优先真实执行结果。
  6. 最后判断 Door 与 Blast Radius:先给出可扫读的短结论,再按需解释回滚难度和潜在后果。

最巧妙的设计点

1. 固定骨架同时覆盖理解、证明与风险

Summary · Evidence · Merge Danger

直接来源: 模板只有三个一级部分。解释: 它们分别回答“改了什么”“凭什么相信”“合并会怎样”,避免 PR 只复述实现而漏掉验证与风险。

2. 表达方式由变化的结构决定

Match the diff shape to the topic.

直接来源: skill 为逻辑、调用流、UI、文件职责、时序和局部变化提供不同表示法。解释: 它不迷信 Mermaid 或 diff,而是让表示法匹配问题结构,降低评审者的解码成本。

3. “最小”带有明确停止条件

the smallest view that makes the key point clear

直接来源: Summary 先要求最小视图,随后规定当省略会隐藏 ownership or order 时展示完整块。解释: 这不是机械压缩字数,而是以信息损失为边界的最小充分原则。

4. 视图必须与论点共址

Place each visual next to the short text it supports.

直接来源: Guidance 要求视觉内容紧邻它所支撑的文字。解释: 这减少长 PR 中的来回映射,也迫使作者说清每张图究竟证明什么。

5. 证据按目标行为分级

Screenshots are S-tier

Execution-based evidence is A-tier.

直接来源: 视觉变化在环境可运行时优先截图,测试和控制台输出是高等级执行证据。解释: 关键不是字母等级本身,而是使用离目标行为最近的证据:不要用“测试通过”代替视觉验收,也不要用截图代替逻辑执行。

6. 风险被拆成可逆性与影响范围

one-way or two-way door

blast radius

直接来源: Door 判断是否容易回退,Blast Radius 判断出错会波及多大范围;模板先要求短值,再允许补充说明。解释: 这让快速扫描与深入评审共享同一结构,同时防止笼统的“低风险”把两个不同维度混为一谈。

防失败机制与 trade-off

源中明确的不变量: 跳过开场白;使用 GLOSSARY.md 中的领域语言;选择能讲清关键点的最小视图;diff 的形态匹配主题;不要让用户信息过载;Evidence 必须有 before/after;Door 必须分类;Blast Radius 先给一个词的描述,复杂情况再补充潜在后果。

权衡: 高度压缩依赖作者判断,选错视图会隐藏关键上下文;截图和执行输出可能受环境影响;“S-tier/A-tier”只是启发式,不保证证据天然可靠;一个词的 Blast Radius 提高扫描速度,却可能过度简化数据迁移、法规或长期运维风险,所以复杂 PR 不能省略后续说明。

可移植性风险: GLOSSARY.md 是仓库约定;Markdown diff、Mermaid 和代码块的渲染依赖 PR 平台;“PR body”的自动调用方式依赖具体 harness。迁移时应保留最小充分表达、真实证据和可逆性分析,而不是照搬文件名或语法。

可迁移原则

今日实践题

选一个最近的 PR:如果 Summary 只能保留一种视图,你会选调用树、文件树、Mermaid 还是 diff?哪一条职责或顺序信息一旦被省略,就说明这个视图已经不再“最小充分”?

Evidence note

三段式模板、视觉表示法、最小充分原则、before/after、证据等级,以及 Door/Blast Radius 风险框架均来自所选 pr 原文;promoted 状态、界面描述与来源说明来自仓库 skills/engineering/README.md、agents/openai.yaml 和 CREDITS.md,仅作为支持性上下文;“信息选择协议”“理解、证明、风险”与扫描成本的归纳属于设计解释。

Source & provenance
Repository path
skills/engineering/pr/SKILL.md
Generated
2026-10-01 08:23 Asia/Shanghai
Upstream commit
d81f3a183412e71a5b1e84ca21bc1a35eea03a60
Source
View on GitHub