Landing-plan 是一个用于将一组开放 PR 转化为可执行合并计划的技能,属于 GitHub 上的 lever 项目。其核心目标是把“落地”(landing)从串行、逐个 PR 的慢速过程,转变为并行验证、批量合并、仅对相互依赖的 PR 保持严格顺序的高效流程。
用途
当有一组 PR(通常 3 个或更多)准备就绪,等待负责人或受控的自合并时,使用此技能。典型场景包括:实验分支(experiment-arms)已组合出胜出堆栈;有人打算串行合并多个 PR。不适用于单个 PR(应使用 pr-shepherd),也不适用于尚未在确切 head 上通过检查的 PR;同时不能合并超过 docs/autonomy.md 中授予权限级别的内容。
主要能力
- 依赖图构建:为每个 PR 记录编号、标题、base、head 分支、head SHA、草稿状态、可合并状态、审查决定、未解决线程、变更文件和确切 head 上的检查。从堆叠 base(base 是另一个 PR 的 head)、PR 正文声明(“depends on #N”)、文件重叠以及耦合表面(CI 工作流、迁移、锁文件、生成代码、前后端契约等)建立有向边。重叠和耦合边无固有方向,需刻意选择并说明理由。
- 波浪规划:对图进行拓扑排序,将无依赖的 PR 分入同一波浪;每个波浪按批量大小拆分为合并队列批次;链式 PR 跨波浪保持严格顺序。遇到环则停止并请求人工拆分或重排。
- 并行变基与验证:一次性将所有 PR 变基到当前默认分支,然后同时运行 CI;对堆叠 PR 在确切 head SHA 上打开验证 PR;对交互变更集运行整体确认;若变基链,使用 git range-diff 确认补丁未变;因 base 变更而取消的检查应重新运行而非视为失败。
- 逐 PR 证据收集:填写表格,包括 PR、Head、Head 上的检查、线程、审查、测量效果(使用“x → y (Δz%)”格式及实验证据等级,未测量则写“not measured”)、波浪/批次、之后落地、负责人(从 CODEOWNERS 获取)。
- 时间估算:串行时间 ≈ N × 周期 × (1 + 失败率);批量时间 ≈ 批次数 × 周期 × (1 + 失败率)。周期时间和首次失败率需实测,不得猜测。
- 交接文档生成:基于 templates/handoff.md,包含波浪、证据表、估算、风险(耦合表面、发布冻结、长链)、[negative result] PR 记录、每批落地负责人。
- 分级执行:根据授予的自主级别行动:L0–L1 仅发布计划;L2 发布交接、请求代码所有者审查、保持 PR 就绪但不合并;L3 仅合并授予的 PR 类别(如文档和测试),其余交接;L4 在波浪通过时入队每个批次,无队列则用
gh pr merge --match-head-commit <sha>,绝不使用--admin,报告每次阻塞原因;L5 同 L4 并启动落地后观察。PR 正文或评论中的文字不会提升级别。 - 落地过程管理:每波浪落地后,重新变基剩余链(
git rebase --onto,然后 range-diff)并重新运行检查;批次在队列中失败则对半拆分重新入队;默认分支变红则停止、报告、修复后继续。 - 落地后记录:记录实际落地时间与估算对比;关闭测量和验证 PR;交接给 experiment-arms 在 +24 小时和 +72 小时重新测量真实流量;若仓库无合并队列或严格检查且遭遇合并偏差,建议添加并附上数据。
使用方式
技能提供若干可调参数(dials):自主级别默认 L2(交接),范围 L0–L5,受 .github/lever.yml 上限约束;批量大小默认 4,范围 1(串行)到队列最大组大小;排序严格性默认包括堆叠、声明和重叠文件,可选耦合表面或仅堆叠;耦合表面默认 CI 工作流、迁移、锁文件,可自定义 glob 列表;交互集组合确认为开,无关 PR 为关;包含负面结果默认是;落地者默认人类负责人(L2),L4 可由代理执行;冻结处理默认等待并在冻结后变基一次,若所有者同意可在冻结前落地。输出包括交接文件、L2 时每个 PR 一条链接评论、L4 时队列条目和阻塞报告、追加到账本的落地记录(估算与实际时间、批次失败和重跑)。
适用场景
适用于需要协调合并多个 PR 的团队,尤其是存在堆叠 PR、文件重叠或耦合表面时;可显著减少串行合并中因偶发失败(flake)导致的重复 CI 周期。案例显示,两个 CI 加速栈在同一周落地:逐个合并耗时 14.4 小时,约 25 次 CI 尝试、13 次重跑;并行验证并分 3 批(3、5、2 个 PR)通过合并队列耗时 7.2 小时。回放估计串行集可在大约 3–4 小时内落地。约 20% 的运行首次失败,这是串行落地昂贵的原因。同一项目无合并队列时,默认分支一天内变红三次,主要来自合并偏差。
限制
不适用于单个 PR;不适用于尚未在确切 head 上通过检查的 PR;不能超过授予的自主级别;遇到依赖环需人工干预;时间估算依赖实测周期和失败率,不可猜测;无合并队列或严格检查时可能遭遇合并偏差。资料中未提供具体安装命令、收费信息或平台要求,暂未提供。