关于 land-branch
land-branch 是一项分支收尾技能,可确定打开 PR、本地合并、保留、丢弃或阻止等操作,并按对应流程执行保护措施。它面向管理已完成分支的 Agent,要求验证证据对应当前版本,且删除前必须获得明确确认。
主要功能
- 01确定分支收尾操作
- 02准备分支并编排提交顺序
- 03核验当前版本的验证证据
- 04创建或更新 PR,或执行本地合并
- 05丢弃前要求输入指定确认词
适用场景
- 01准备分支后打开 PR
- 02验证通过后在本地合并分支
- 03按明确意图保留或丢弃分支
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jayden-dang/ skills --skill land-branch安装后在 Claude Code 中输入/land-branch确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
conventions.mdeval.jsonpassive-data-safety.mdprepare.mdTESTS.mdtickets.mdscripts/owner-notice.pyship-guard.sh详细介绍
完成一个分支
解决所请求的结果,准备分支,并执行该操作。
不变量
REUSE EVIDENCE BOUND TO THE CURRENT REVISION.
FALL BACK TO VERIFICATION WHEN THAT EVIDENCE IS ABSENT OR STALE.
NEVER DELETE WORK WITHOUT LITERAL CONFIRMATION.
由 Agent 撰写的 PR 标题和正文仍是评审依据。不设软件包审批流程,也不存在 .skills/pr-packages/ 目录树。
1. 明确意图
按以下顺序逐项判断,遇到首个能确定操作的条件即停止:
- 用户请求中的明确意图:
pr、merge、keep、discard或block(“打开 PR”之类的常见说法也算); - 该头部分支已有 PR →
pr; docs/agents/project.md中的Default landing action:,且其值为pr、merge或keep;- 提出一个简短问题:“PR、本地合并,还是保留分支?”
绝不推断 discard 或 block。用户明确指定的操作就是其选择;不要再提供第二组选项。
完成条件: 确定且仅确定一个操作。
2. 在本地准备
必须:加载 prepare.md 并按其要求执行,直到完成 Author commits,然后对
pr 和 merge 执行其 Ship guard 和 Sequence the branch into verifiable units 部分。
在其中确定并备忘基准分支。仅对 pr 撰写 PR 文本。
排序有意改写历史:评审者会按提交顺序阅读,因此顺序必须能说明问题。该操作有锚点,不具破坏性——prepare.md 会先记录一个可恢复的分支尖端。任何 HEAD 变更,无论来自残留提交还是改写,都会使先前的完成凭据过时;第 3 步负责处理此回退,因此排序必须在此处进行,绝不能在证据确立后再做。
完成条件: 已确定基准分支、约定、上下文、工单和提交;分支已按有序序列整理并记录锚点;没有尚未处理的范围内已跟踪残留内容。
3. 确立跨越证据
此步骤仅适用于 pr 和 merge。keep、discard 和 block 不声称分支已通过验证。
必须:加载 ../../execution/execute-common/close-receipt.md,并按其固定验证步骤检查 .skills/<CODE>/close-receipt.md。
- 有效凭据: 使用该凭据。不要重新运行等效的验证、可追溯性、评审或验收检查。
- 缺少凭据或凭据已过时: 必须使用子技能
prove-claim运行 每条验证命令,并重新执行audit-trace。如果尚未在当前修订版本上验证面向用户的行为,必须使用子技能validate-feature。如果验证失败,只阻止pr和merge;报告失败的证据,并保留keep、discard和block作为可选操作。
如果本会话中有可直接粘贴的已暂存区块,请重新打印这些区块,并注明
/record-debt;它们绝不会阻止跨越操作。
完成条件: pr/merge 有当前修订版本的有效凭据或全新且通过的回退证据;否则,明确说明无法执行跨越操作。
4. 检测环境
GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)
| 状态 | 含义 |
|---|---|
| equal | 普通检出——无需清理工作树 |
| differ,命名分支 | 关联工作树——适用经来源检查的清理 |
| differ,分离的 HEAD | 外部管理的工作区——不执行本地合并或清理 |
使用 prepare.md 备忘的基准分支;绝不要根据拓扑重新选择基准分支。
5. 仅记录已配置的边界
如果存在,读取 docs/agents/project.md 的 ## Decision boundaries。只有非占位行匹配
land-branch:<action> 或 land-branch:* 时才需要记录。没有此章节或没有匹配行,表示无需记录。
对于匹配的行,在产生副作用前,必须使用子技能 record-verdict,并附上已确定的判定、边界类型、层级/谓词事实,以及行内的持久证据。发布失败会阻止该已配置的跨越操作。绝不为 keep 生成记录。
完成条件: 未配置记录,或所需记录已发布。
6. 执行已确定的操作
PR
加载 prepare.md Author PR text(必需子技能:使用 speak-outer)。
推送分支——如果排序操作重写了已发布的分支,则使用 --force-with-lease——
然后为已记录的基分支创建或更新 PR。通过进程临时文件提交标题和正文的字节,
绝不要将它们插值为 shell 输入;保留工作树。
以就绪状态打开,绝不要作为草稿打开——省略 --draft,对默认创建草稿的
工具传入 draft: false,并将仍以草稿状态打开的 PR 设为就绪。草稿不算完成交接。
按照 prepare.md Post the verdict,将步骤 3 的证据发布到 PR 上,并按照
tickets.md After the PR opens 推进工单集。然后报告 URL 并停止:告知用户用
/tend-pr 监看 CI,而不是在此等待;等待会阻塞下一个分支,还会在后续推送重启
的提交上浪费运行次数。
本地合并
只有明确表达意图时才执行此操作。在主仓库根目录中:
git checkout "<base>" && git pull && git merge "<feature-branch>"
合并结果是一个新版本。进行任何清理之前,先对其运行完整验证套件。若失败,保留
工作树和分支并报告失败。若成功,执行步骤 7,并通过 git branch -d 删除功能分支。
保留
报告分支名称和工作树路径。不做任何更改。
丢弃
列出将被永久删除的分支、提交和工作树路径。
要求用户输入字面词 discard;“yes”和“confirm”均不算数。确认后,执行步骤 7,
并通过 git branch -D 删除。
阻止
报告最终阻止原因,并保留分支。
完成条件: 已完成已确定的操作,或因具体失败而未执行。
7. 清理工作树
仅适用于本地合并成功或确认丢弃之后。
- 仅移除位于
.worktrees/或worktrees/下的工作树,或位于.isolate-workspace/或isolate-workspace/下的残留树。 - 绝不移除由工具链管理或由外部管理的工作区。
- 移除前先
cd到主仓库根目录,然后运行git worktree prune。
8. 完成收尾
PR 或合并后,检查功能项的 Status::
| 状态 | 操作 |
|---|---|
Draft | 报告缺少审批;不要转换状态 |
Approved / In-progress + 每项任务均已勾选 + 追踪记录干净 + 有交接证据 | 必需子技能:使用 realign-spec |
Approved / In-progress + 证据不完整 | 报告缺少的证据 |
Implemented / Shipped,无偏差 | 跳过 |
Implemented / Shipped,存在偏差 | 必需子技能:使用 realign-spec |
对于 PR、合并或保留操作:若涉及多个任务或风险路径,告知用户使用
/understand <range>。此项可选,且绝不会阻止已确定的操作。
警示信号
- 重新运行已由当前有效版本回执证明通过的检查
- 信任其基准、HEAD、工作区干净状态或必需插槽不符合要求的回执
- 用户已明确表达意图后,仍显示选项菜单
- 因样例、研究资料包、团队简报或债务记录而阻止 PR/合并
- 没有匹配的项目边界配置时,仍发布决策记录
- 将“land this”推断为本地合并、丢弃或阻止
- 合并结果通过验证前就移除工作树
- 破坏性操作确认时,接受字面值
discard以外的任何内容 - 重写分支前未先记录可恢复的锚点
- 重写 execute 系列任务提交,使判定结果与其评估对象脱节
- 重用重写前建立的证据
- 写入
.skills/pr-packages/或添加 PR 文本审批环节 scripts/ship-guard.sh仍输出lockfile、generated或out-of-plan行时就推送
| 想法 | 实际情况 |
|---|---|
| “即使 HEAD 完全没变,保持新鲜也意味着重新运行” | 回执已将证明绑定到该版本;应验证绑定,而不是重放工作。 |
| “授权路径意味着抽样必须阻止流程” | 抽样用于分配人工注意力;审核并接受后,它只是建议。 |
| “打开 PR 只是菜单偏好” | 这是明确意图。证据问题解决后就应执行。 |
| “每次跨越边界都值得单独记录” | 平台历史记录是默认方式;自定义记录属于可选的项目策略。 |