关于 engineering-small-prs
Engineering Small PRs 是一项将改动规划为聚焦且易评审的 PR 的开发技能。它帮助团队把工作拆成可构建的步骤,明确依赖与测试,并安排迁移顺序,使改动更易理解和合并。
主要功能
- 01明确单一改动目标
- 02拆分为独立 PR
- 03梳理依赖和合并顺序
- 04确保每个步骤均可构建
- 05规划迁移阶段与回滚
- 06记录评审背景和测试
适用场景
- 01将大型功能拆成易评审的 PR
- 02准备安全的架构或 API 迁移
- 03分离重构与行为改动
- 04规划改动的测试与合并顺序
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ agentara/ skills --skill engineering-small-prs安装后在 Claude Code 中输入/engineering-small-prs确认已加载。
详细介绍
小型 PR 的工程实践
小型 PR 更容易得到全面审查,合并起来更安全,回滚起来更容易;如果方向发生变化,也更不容易造成无用功。“小型”指的是概念上聚焦且自成一体,而不只是代码行数少。
改编自 Google 工程实践文档,尤其是《Small CLs》。来源:https://google.github.io/eng-practices/review/developer/small-cls.html。许可证:CC-BY 3.0。
优质小型 PR 的定义
优质 PR:
- 完成一项自成一体的改动。
- 包含验证该改动所需的测试。
- 合并后保持系统正常运行。
- 在 PR 描述、现有代码或更早审查过的 PR 中,为审查者提供足够的背景信息。
- 不会小到无法理解其行为。新 API 通常至少需要在同一个 PR 中包含一个用法示例。
- 将大型重构与行为变更分开,除非清理工作非常局部。
如果 PR 过大,无法得到良好审查,审查者完全可以仅以此为由拒绝它。
拆分工作流
- 用一句话描述最终目标。
- 列出相互独立的行为变更、重构、架构/配置变更、测试和文档。
- 找出必须先行合并的依赖项。
- 从下方章节中选择拆分策略。
- 安排合并顺序,确保每个 PR 合并后构建都能通过。
- 补充背景说明,帮助审查者理解每个 PR 如何融入整体工作。
- 对有风险或无法避免的大型变更,在提交 PR 前征得审查者同意。
拆分策略
- 先补准备性测试:在进行有风险的重构之前,为现有行为补充缺失的测试。
- 先重构:移动、重命名、提取或简化代码,但不改变行为。
- 垂直切片:端到端地交付一项小型、用户可见或 API 可见的行为。
- 水平切片:仅在同一个 PR 中配套真实的首次用法,或已有一个明确关联且正在审查中的依赖 PR 时,才添加共享接口、协议定义或适配器。
- 按文件或负责人分组:如果各项变更本身自成一体,可根据审查者的专长拆分文件。
- 单独处理配置:如果回滚时机不同,将发布配置、实验或部署接线与代码分开。
- 单独处理生成式或机械式变更:将可信的自动化改写与手写逻辑隔离开。
- 适时单独删除:移除无用代码可以形成简洁且易于审查的 PR。
迁移安全
对于架构、数据、API 或基础设施迁移,优先采用扩展/收缩流程:
- 扩展:添加向后兼容的架构/API/配置支持,不移除旧行为。
- 双路径:仅在必要时同时写入或读取两条路径,并监控差异。
- 回填:迁移现有数据,并跟踪进度、处理重试和进行验证。
- 切换:验证确认两条路径都安全后,再切换流量或调用方。
- 收缩:在清理 PR 中移除旧架构、代码路径、标志和兼容性垫片。
每个迁移 PR 都应说明部署顺序、回滚行为、验证信号,以及在下一个 PR 合并前绝不能发生的事项。
输出模板
## Goal
[Final outcome]
## Proposed PR Sequence
| # | PR | Purpose | Depends On | Tests | Reviewer Notes |
|---|----|---------|------------|-------|----------------|
| 1 | Add characterization tests for ... | Protect existing behavior before refactor | None | ... | ... |
| 2 | Extract ... without behavior change | Prepare smaller implementation | 1 | ... | ... |
| 3 | Implement ... vertical slice | User-visible behavior | 2 | ... | ... |
## Migration Safety
- Expand/contract phase:
- Backfill/validation:
- Observability:
- Rollback:
## Build Safety
- Each PR keeps:
- Rollback notes:
## Large-Change Risk
- What could not be split:
- Reviewer consent needed:
启发式原则
- PR 应比你认为必要的更小;审查者很少会反对聚焦的变更。
- 如果一项小型逻辑变更分散到许多文件中,就应将其视为比代码行数所显示的更大。
- 如果审查者需要大量未来背景才能理解 PR,说明拆分序列可能缺少更早的准备性 PR,或者 PR 描述不够完善。
- 如果无法拆分 PR,就让它特别易于审查:加强测试、改进描述、明确风险,并事先取得审查者同意。
常见错误
- 将大范围格式调整与功能逻辑混在一起。
- 引入没有实际用法的新抽象。
- 创建会导致中间 PR 无法通过构建的堆叠式提交序列。
- 在“重构” PR 中掩盖有风险的行为变更。
- 在安全的堆叠式工作流可行时,仍等一个 PR 合并后才开始下一个。
评论
支持 Markdown