--- summary: "保留合并结果、调查恢复和所有权检查完成" read_when: - "恢复失败、已接受或不确定的 PR 合并或维持其清理生命周期" title: "PR 合并恢复" --- # PR 合并恢复 在采取行动之前调查保留的结果。失败的命令、打开 PR 或缺少进程并不能证明远程写入未执行。有关新的准入规则,请参阅 [PR 合并准入](/reference/scripts/merge-admission)。 - `merge-run` 拥有与进程锁分开的远程调度。在任何 merge/auto/queue 请求之前,它会在 `refs/openclaw/pr-merge-outcomes/` 中记录确切的存储库身份、PR、主要目标、准备头、观察到的主要、方法、路由和尝试。私有 Git 提交在工作树删除和 GC 中保留所需的对象。不要删除或推送这些引用;进程锁恢复永远不会清除它们。 - A 失败的请求可能已合并。报告精确的进程锁定恢复后,仅重复 `scripts/pr merge-run ` 进行协调。 `OPEN`,不同的头,reverted/partially应用的内容,经过的时间,或缺席的进程永远不会证明未执行。没有自动 clear/retry 覆盖。查看PR时间线、权威主历史、`git show refs/openclaw/pr-merge-outcomes/:outcome.json`;未解决的不确定性需要操作员在此自动路径之外采取行动。保留该调查的记录。如果较旧的包装器留下 `.local/merge-output.log` 没有结果记录,即使是空捕获也会阻止新的调度;保留它并手动协调之前的请求。 - 明确的 land/merge/ship 请求为常设操作员授权在相同准备好的磁头和合并方法上进行调查恢复,包括修复相同授权范围的新 reviewed/prepared 替换磁头。不要仅仅因为主要移动或请求失败而请求重新批准聊天。在决定有限恢复尝试之前调查每个保留的结果;长期授权并不构成不执行或允许盲目重新提交已接受、待处理或未解决的请求。 - 要修复已接受或不确定的非队列自动请求,请在更换远程头之前使用 `merge-recover --confirmed-operator-recovery --cancel-auto`。需要准确保留意图并匹配开放PR/head/base;当前请求还必须与保留的方法匹配。取消在分派之前被记录,保留原始确认状态,捕获和祖先,并协调并发合并。其两次稳定性重读可能仅改变`mergeable`和`mergeStateStatus`,不授权取消;每个身份、头、主要、队列、请求和策略事实都保持固定。普通合并准入和其他恢复比较保持不变。已经缺席的请求将被记录为已退休且没有取消突变;缺席并不能证明先前的提交从未被执行。这项调查的运营商决定使用常设土地管理局,而不是更新批准或更换 PR。不确定的取消仅在重试时进行观察。只有已确认的报废才允许在保留的或明确的 reviewed/prepared 替换头上进行普通恢复,并具有完整的门。 Queue/admin 不支持取消。切勿手动清除结果参考或编辑收据。 - 如果头已更改并且接受的非队列自动请求不存在,则使用 `merge-recover --confirmed-operator-recovery --cancel-auto --observed-head ` 显式选择当前头。全小写的 SHA 必须命名与保留头不同的本地可用提交。两个稳定的权威观察必须在 OPEN、PR、选定头、identity/base、运输、主要、缺席请求和 queue/policy 事实上达成一致;只有可合并性预测可能会得到解决。该命令不发送取消、合并或注释。一个已确认的取消后继者保留 `observedHead` 作为提交父级,并保留原始接受的意图、恢复来源和捕获。它不会首先记录请求的取消,因此并发合并或其他漂移会使原始收据可供调查。武装请求、未接受或之前取消的意图、队列路由、不可用的提交、陈旧的 OID 和 changed/missing/symlink 捕获仍然被拒绝。该记录记录了观察到的退休情况,而不是未执行的证明,并且不需要两个负责人之间的血统关系。后期更换还是需要自己重新审视、准备、录取;使用新结果 OID。 - 如果协作者在接受自动请求后推送,GitHub保持自动合并武装,因为头前提条件仅在提交时适用,并且可以合并推送的头。和解拒绝“PR identity/head/base漂移”并打印准确的恢复命令。检查后PR时间线和主要历史、用途`scripts/pr merge-recover --confirmed-operator-recovery --merged-head `:它需要准确的当前保留接受的非队列自动意图,没有任何取消记录,aMERGED PR与保留的identity/base,一个显式选择的头,等于权威合并头,并严格从保留头下降,以及可从权威主干到达的落地提交,其树在保留方法下重建;挤压收据需要单亲落地提交。一名继任者通过现有CAS祖先记录`phase: merged`, `landed`, 和`headDrift {actor, outcome, mergedHead}`; `head`保留准备好的意图头,并且合并的头对象保留为父对象。它从不调度、取消、重新武装或清除裁判。Identity/base/method漂移、非后代或未选择的头,OPEN/CLOSEDPR、未接受的意图、退休或不确定退休请求、queue/immediate/admin路由、陈旧的 OID 以及无法访问或不匹配的落地提交仍然被拒绝。`merge-run`然后核对收据并`merge-complete`在所有权检查清理后完成,完成注释命名两个头。 - 调查后,普通恢复在上述长期授权或明确的操作员授权下使用`scripts/pr merge-recover --confirmed-operator-recovery`进行一次新的尝试。这是操作员的决定,不能证明先前的请求未执行。它需要准确的当前保留意图,没有记录的接受或确认的自动取消,相同的准备头和合并方法,新的普通入场,以及新尝试的直接路线。对于现有着陆范围内的新 reviewed/prepared 替换头,请明确选择并附加 `--replacement-head ` 以及精确的全小写 40 个字符 SHA;常设着陆机构负责维修,无需其他聊天批准。范围或合并方法的更改仍然需要其自己的授权。切勿从 PR/main/prep 状态推断所选磁头。更换需要匹配 PR 审查印章并准备上下文、准备 tree/gate 装订以及完成的 CI 证明。当地证据在录取过程中必须保持不变。如果没有参数,换头恢复仍然会失败。恢复永远不会变基或绕过 CI、贡献者祖先、分支或所有者大门。后继意图 CAS 消耗确切的结果 OID,保留旧的结果和对象作为祖先,并在提供时记录操作符和显式替换头;每个调度都有自己的捕获。替换意图还会以原始基名在其私有 Git 树中对现有常规捕获文件进行快照,通过成功的工作树清理和 GC 保留字节;符号链接捕获失败关闭。重用旧结果 OID 失败。切勿从错误字符串、OPEN 读取或例程重试中推断授权,也切勿清除结果引用。 - A 已确认取消的自动挤压可能会恢复明确选择的已审核头,包括 `merge-recover --confirmed-operator-recovery --replacement-head --admin-evidence --confirmed-operator-admin` 未更改的保留头。需要当前选定的头审核、精确的头 `github_pending` 准备以及所有实时的先前 CI 管理检查。后继者通过现有的 CAS 血统保留原意、取消、捕获和显式替换;它从不发明拒绝提供者或拒绝派遣前的证据。 CI 失败归因必须绑定所选头和当前尝试。即使 SHA 未更改,退役自动管理转换仍需要显式 `--replacement-head` 选择;无参数拒绝管理恢复路线保持独立。未经确认的停用、更新的 auto/queue 请求、过时的 outcome/head/artifact 绑定以及不相关的管理路由仍然被拒绝。 - 不接受意图要求的例外:接受的立即 REST 意图以及保留的 UUID、`asyncMerge.status: "failed"` 和空 SHA 可以在未更改的头和方法上使用相同的显式 `merge-recover` 命令。重新读取新鲜普通 OPEN-head 入场之前的权威异步结果;通过后继者 CAS 血统保留 `recovery.asyncFailure` 和之前的准确结果。待处理、排队、missing/expired、SHA- 轴承或更改结果仍被拒绝;永远不要清除参考或自动重新提交。 - 一旦每个当前所需的检查通过并且 PR 是 `MERGEABLE/CLEAN`,则未接受的即时意图的相同头恢复可以重用精确头 `github_pending` 准备。使用普通确认的 `merge-recover` 命令,无需 `--auto-merge` 或更换头。待准备标记保持不变;审查、准备树和头部绑定、证据稳定性、实时权威以及保留结果 CAS 仍然门调度。待处理或失败的检查永远不会授权此恢复,并且错误消息和打开的 PR 都不会表明先前的请求未执行。 - 显式同头先验 CI 管理员恢复可以将 `merge-recover --confirmed-operator-recovery` 与 `--admin-evidence --confirmed-operator-admin` 配对,仅用于完整已知的 GitHub REST HTTP 405 碱基修改拒绝和匹配 `gh`诊断。请求已发送; `recovery.providerRejection` 将其合格拒收与本地预派发拒收分开记录。保留准确的原始常规捕获和任何以前合格的捕获。后继 CAS 保留这些字节和先前的意图,包括通过接受、完成、工作树清理和 GC。仍然需要新的审查、安全性、当前管理权限、证据完整性、合并树和精确头部检查;同头 `github_pending` 邮票永远不会被重写为成功。未知的额外捕获、更改或符号链接捕获、其他 405、超时、5xx/mixed/truncated 响应、接受的意图、其他管理路由和头部更换仍然被拒绝。每次进一步恢复都需要新的结果 OID 和明确的确认;切勿从 OPEN 读取或自动重试中推断权限。 - 对已退役磁头的未接受的先前 CI REST 管理意图可以仅通过 `merge-recover --confirmed-operator-recovery --replacement-head --auto-merge` 转换为新的当前磁头自动请求。显式替换必须与保留的管理头不同。其确切的 reviewed/prepared `github_pending` 头必须仍然是 OPEN、`MERGEABLE/BLOCKED` 或 `MERGEABLE/BEHIND`,没有现有的 auto/queue 请求,并通过正常的所需检查、安全和所有者大门。该路由不使用`--admin-evidence`:旧的exact-SHA REST请求仍然不确定,但被不同的活动头隔离,而`recovery.staleHeadRetirement`保留其意图祖先和每个常规捕获而不解释其字节;空捕获是有效的。后继路由是 `auto`,绝不是管理路由或立即路由。相同头、已接受、陈旧-OID、更改头、missing/symlink/extra-capture、准入时间捕获突变、route/method、生命周期、门和权限漂移仍然被拒绝。 - 经过检查的 Octopool 拒绝保留的、不可接受的自动挤压意图可以使用`merge-recover --confirmed-operator-recovery --pre-dispatch-refusal `具有明确选择的可选选项,reviewed/prepared更换头下的登陆权限上面。保留唯一原件`merge-output..log`和`qualification.json`在该目录中。资格徽章`outcome`,捕获 Git blobOID as `capture`, 和`inspected: true`;它是操作员证明,而不是从错误推断出的自动重试。为了`kind: "octopool-0.6.10-auto-refusal"`, 包括检查的`version`, `sourceRevision`, `parserSha256`,并且精确地`args`数组:助手只接受经过审核的0.6.10拒绝的解析器`--auto`发货前及其完全拒绝。`kind: "octopool-0.7.1-missing-subject-refusal"`使用相同的字段,固定到版本`0.7.1`, 来源`7ab9b348c99a7be4fdc82c75cb06ebce44e0007e`,和解析器SHA-256 `b32cb960537f5ffa1336a7689674afba9b4a2485b05e449acd2684a251ff8970`;它仅接受对其主体文件检查的自动挤压调用的完全拒绝,但不接受`--subject`,该解析器在启动突变子项之前会拒绝它。`kind: "octopool-0.7.1-policy-timeout-refusal"`仅限定从确切发布的已检查的初始策略获取超时0.7.1Darwin arm64 可执行文件和固定的八个源文件`merge-pre-dispatch-refusal.mjs`。除了常见的引脚外,还证明`producer: "octopool"`, `command: "pr merge"`, `diagnosticsEnabled: true`, `version`, `sourceRevision`, `executableSha256`,以及确切的`sourceSha256` path/digest地图。本店只接受完整单`class=timeout`错误线;诊断、政策否认和额外输出仍然被拒绝。保留的本机意图绑定repo/PR/head/method/route;不需要未捕获的主题或完整的 argv。该源修订版在诊断设置或突变分派之前返回此初始错误;切勿制造诊断产品。新的尝试仍然通过了实际的字符串重写策略和每个现有的审查,CI、权限和接收门。为了`kind: "octopool-merge-diagnostics"`, 证明`producer: "octopool"`和`diagnosticsEnabled: true`;捕获必须包含一个完整的诊断`child_started=false`,已知的预启动结果,没有突变退出状态,并且没有响应标头。本国的GraphQL调度请求这些诊断并将捕获的当前头部南瓜标题和正文提供给出版警卫。丢失、更改、符号链接、额外、已接受或模棱两可的证据将被保留。恢复保留先前结果祖先的资格和捕获字节。相同头和替换资格都将本地审查、准备和门绑定到批准的头,然后在等待准入后重新检查工件字节和准备好的分支。一头扎`github_pending`一旦强制执行,印章只能用于合格的恢复CI门和所有必需的检查均已通过,并带有新鲜的`MERGEABLE/CLEAN`立即入场;该标记永远不会被重写为成功证明,并且拒绝挂起、管理、队列或自动恢复。 - 运营商合格的遗留 gh v2.98 DIRTY 拒绝可以使用 `merge-recover --confirmed-operator-recovery --legacy-refusal --replacement-head `。在刷新准备之前冷冻原始 `merge-output.log`、`prep.env`、`prep.md` 和 `gates.env`。该命令不需要现有结果、唯一的原始常规捕获、其精确的 Git blob 哈希和完整的源限定预调度拒绝、历史 PR/head/base 身份以及所有普通的当前 review/preparation/CI/admission 门。空的、不确定的、额外的、更改的或符号链接捕获仍然被阻止。常设回收机构并经检查caller/source证据证明驳回合格;仅匹配文本并不授权重试。新的当前意图保留具有明确 `legacyRefusal` 出处的原始文件和源代码提交;它永远不会发明历史意图或删除原始捕获。随后的恢复通常使用记录的当前结果。 - Worktree 清理(包括 GC 空运行和过时条目配置)将 `.local/merge-output.log` 保留在其原始路径,除非相应的结果通过本地记录和保留对象验证。空捕获和悬空捕获符号链接计数。保留工作树、元数据和本地分支以供手动协调;请勿丢弃、重命名或制作收据。 `CLOSED`/`MERGED` 和缺席进程无法解决调度不确定性。符合条件的清理后,有效的保留结果仍然可用;清理不会协调它们或更改进程锁定恢复。 - A 在审核、评论和清理之前确认合并收据。评论 POST 有一个尝试标记,并且绝不会盲目重复。恢复搜索该标记的权威评论,报告待完成,并在所有权检查后将清理工作留给操作员;它无需原始 worktree/prep 工件即可工作。正常不间断的完成会保留注释和清理,并具有精确的头租用远程删除功能。权威分支缺席完成清理;检查高级或无法访问的分支的警告。延迟恢复永远不会按名称删除重新创建的分支。 - 所有权检查清理后,明确使用 `scripts/pr merge-complete --confirmed-operator-completion` 完成验证收据。它重新验证确切的保留收据和远程合并,需要本机 worktree/local branch/remote 头分支缺失,并且从不调度合并或删除资源。 `merged` 收据可以发布其第一个完成评论; `commenting`/`commented` 需要现有的准确尝试标记,并且切勿重新发布。缺少或不明确的注释会保留待处理状态。对于保留的先前 CI 管理收据,延迟完成会在检查清理缺失之前根据保留的准入主文件和已验证的落地提交重建历史父级比较。它标记了合并后重建的审计,声称没有原始的落地审计,并保留了历史 CI 警告。未保留先前 CI 证明的旧管理收据仍需要所有者审核;原始审计没有捏造。状态转换后再次读取当前结果OID;过时的 OID 会被拒绝。默认情况下 `merge-run` 保持仅调节。