用途
merge-change 是 jan-jan/guardrails 技能集中的合规合并技能,用于在 develop-change 完成后,将一个变更以一次经过验证、签名的 squash 合并方式整合进基础分支。它把合并过程变成受控的检查点,确保每一步都经过验证,任何失败都停止并修复。
主要能力
- 前置条件检查:确认 develop-change 已完成且测试套件全绿。
- 基础分支检测:通过
.guardrails/scripts/lib.sh中的gr_base_branch检测基础分支,不假设为 main。 - 合并最新基础分支:在变更工作树中合并最新基础分支,处理冲突,并运行
prune-plans.sh清理计划。 - 合并前预检:运行
merge-preflight.sh --before-review,读取警告,失败则停止并给出修复行。 - 独立审查:派发全新子代理或人工审查者,提供 diff、计划、相关 ID 的
find-items.sh show输出,审查者回答代码是否满足每个声明的 REQ/LLR、测试是否会在行为破坏时失败、是否覆盖异常输入、是否有未标记的派生工作。 - 验证记录:复制
.guardrails/templates/verification.md到docs/verification/<date>-<branch>.md,填写并提交,记录解决的 ID、红转绿、审查结论和发现。 - 验证套件:按 verify-before-merge 描述派发验证套件,读取门禁摘要的通过/失败计数。
- 再次预检:运行
merge-preflight.sh <change-branch>,包含审查检查。 - Squash 合并:在主检出中执行
git merge --squash <branch>,生成提交消息文件,交由用户执行签名提交。 - 清理:
finish-merge.sh验证签名后删除工作树和分支。
使用方式
技能以步骤形式执行,每一步都有明确的命令和检查。开始时会宣布:“Using the merge-change skill to integrate this change.” 所有步骤在变更工作树中运行,直到第 7 步。失败时停止,将修复派发到嵌套任务工作树 .worktrees/<change-branch>-<tag>,使用 task-worktree.sh start <tag> 创建,修复报告绿色后运行 task-worktree.sh merge <tag> 合并任务分支、移除工作树并删除任务分支,然后从第 1 步重新运行。
关键命令包括:
- 检测基础分支:
BASE=$(. .guardrails/scripts/lib.sh && gr_base_branch) && [ -n "$BASE" ] - 合并基础分支:
git merge "$base_ref" - 预检:
sh .guardrails/scripts/merge-preflight.sh --before-review <change-branch> - 标记审查提交:
git -c commit.gpgsign=false commit --allow-empty -m 'review dispatched' - 移除审查工作树:
sh .guardrails/scripts/task-worktree.sh remove review - 验证记录:复制模板并填写
- 最终 squash:
git diff --cached --quiet && git merge --squash <branch> - 用户执行:
git commit -S -F /tmp/merge-<branch>.msg && sh .guardrails/scripts/finish-merge.sh <branch>
适用场景
适用于使用 jan-jan/guardrails 工作流的项目,在 develop-change 完成后需要将变更合规地合并进基础分支时。特别适合需要严格审查、验证记录和签名提交的团队。
限制
- 必须由用户执行签名提交,技能本身不运行
git commit -S。 - 签名失败且无密钥配置时,停止并指向 ratchet 设置清单,没有未签名回退。
- 审查发现必须逐条处理,不能通过删除发现来回应 REVIEW 失败。
- 工作树清理必须通过脚本,不能手动使用
--force或-D。 - 基础分支移动后需要重新运行相应步骤。
- 技能依赖
.guardrails/scripts/下的多个脚本和模板,缺失时无法执行。 - 部分细节(如具体脚本实现、模板内容)在资料中未提供。