本页内容
本页内容
发布流程
继续失败的验证
继续失败的子作业
完整发布验证可以采用对其不可变计划中记录的确切子运行的单调更新尝试。仅当运行 ID、工作流路径、工作流引用、工具 SHA、调度标题和事件未更改时,才会接受较新的尝试。对于每个逻辑作业,最新观察到的尝试获胜,包括较新的失败;较新尝试中缺少的作业将从包含该作业的最后一次尝试中继承。一次尝试中重复的作业名称、丢失的尝试或来源漂移都会被拒绝。在 GitHub 的重新运行尝试实现窗口期间,status 和 continue 在最新的重试尝试中重新读取重复身份长达 60 秒。跑步的身份和尝试始终保持固定;请求超时、分页和传输退避共享重试期限。持久重复、先前尝试中的重复以及更改的身份仍会被拒绝;模棱两可的争论永远不会成为证据。
检查或继续现有父级:
prioritize --restore 恢复由前一个释放优先级门延迟的运行(请参阅 释放优先级 )。主动验证不再暂停 CI 或支持工作流程。
rerun --job 在 status --json 显示的子键内选择精确执行的终端作业名称(例如,normalCi、pluginPrerelease 或 releaseChecksIndependent)。它仅等待该子进程成为终端,然后在作业接受的尝试上使用 GitHub 的作业重新运行 API。 GitHub 还重新运行相关作业。其他故障仍然可见,需要自己重试;当阻塞程序仍然存在时,有针对性的重试永远不会声明父级已恢复。
watch 从父级的 Dispatched <workflow>: <url> (attempt N) 调度作业日志行解析子级运行,并使用运行器标签报告每次尝试转换和失败的作业一次。瞬时网络故障会在下一次轮询时重试,而不会重复未更改的警告。限速读取暂停,直到 GitHub 的 Retry-After 或耗尽主重置边界;无标头节流至少等待一分钟,重复节流具有指数退避。观察者打印下一张合格支票并自动恢复。权限被拒绝的 403 响应仍然是终端状态。 $TMPDIR/openclaw-frv/ 下的本地状态文件保留重试边界并在观察程序重新启动时报告事件。
一旦不可变执行计划可用,watch 就会报告其冻结候选 SHA 并最新观察已承认的上下文引用的当前提示。如果该提示前进,观察者将继续观察原始运行并标记候选 superseded:此运行不符合新提示的条件。缺少的计划、SHA-only 上下文或不可用的提示仍然是 unknown,从未从父级工具 SHA 推断出来。 NDJSON候选事件包括候选SHA、上下文引用、观察到的提示SHA和current、superseded或unknown状态;没有一个是资格判定。
使用相同的 watch --run 命令和状态路径恢复缺席或退出的观察程序。它会重新检查运行和可变提示,而不发送任何内容。现有状态抑制重复尝试、候选观察和终止事件;报告稍后重新运行或新观察到的提示。丢失本地通知状态可以重复通知,但不能授权重试或发布。
rerun --child 等待一个失败的子级,仅发送一个重试请求,确认新的尝试没有重复的作业,并记录审核行。它拒绝超过 --max-attempts 的子级(默认值 2,允许重新运行一次)。当失败的消费者绑定到绿色生产者的运行尝试时,它会重新运行该生产者及其依赖者。新的尝试开始后返回; continue --failed 仍然拥有最终的重新密封。
当每个工作负载都通过并且只有 Seal 子收据 失败时,预览会报告 mode: receipt。相同的有界 rerun --child 命令选择确切的接收作业,而不是重新运行传递的工作负载。它会延续他们已接受的尝试,针对确切的子尝试密封新的收据,并且在接受报告资格之前仍然需要 continue --failed 加上严格的验证。元数据重试开始并不意味着资格成功。
一旦子进程终止,continue --failed 就会重新运行每个失败的子进程的作业,而同级子进程和原始父进程仍可能运行。它采用主动尝试而不重复它们,并且使绿色子工作流程保持不变。在生成的子证据变为绿色并且原始父证据完成后,它会重新运行父证据一次。提前重试后,最初的决定和 Drain 可能会出现分歧;最终父尝试恢复相同的不可变执行计划并密封更新的证据。现有计划和尝试绑定检查仍然是强制性的。
最终清单记录了计划的有效儿童尝试、每个逻辑工作的可接受尝试以及综合证据摘要。控制器的 JSON 结果还列出了请求的重新运行及其源和观察到的尝试;目标条目包括作业名称和操作作业 ID。将命令保留在长时间运行的 shell 中:其默认运行预算为 12 小时,包括最终收集和严格验证。
Npm 资格参与相同的失败作业恢复:控制器在原始生产者运行上重试其失败作业,而不重新运行成功的诊断子项。它等待每个生产者尝试,采用经过验证的较新 npm 生产者尝试,然后重新运行父收集器一次。成功的包准备工作及其精确的工件描述符得以延续;重试不得用已测试的候选替换重建字节。
父级验证原始调度身份和最新成功的生产者收据。打包和资格认证工作可以来自不同的尝试;每个任务都必须在该运行的尝试历史记录中保持有效的成功作业。更改来源、工具、调度身份、被取代的工作、丢失证据和过期收据仍然是错误,而不是信任陈旧证据的理由。
失败的 npm 生产者是重试目标,而不是拒绝继续的理由。控制器在同一运行中使用 GitHub 的失败作业重新运行操作,然后收集其结果。冻结的工作流程仍然执行其原始代码:升级本地控制器不会将收据采用改造到旧的工作流程中。在报告恢复成功之前,必须通过最终验证。
每个子项或父项重新运行突变都只发送一次。如果 GitHub 返回不明确的瞬态错误,控制器将执行只读协调,直到更新的尝试变得可见或有界协调截止时间到期。它永远不会重复突变,并且起源漂移会停止操作。 frv status 在资格、证据接受、诊断消耗、工作负载故障和下一个支持的命令方面处于领先地位。通过的 GitHub 徽章或绿色子列表不是可接受的印章:终端成功的父项由恢复使用的相同严格验证程序进行检查。丢失或不可读的证据仍然明显不可用。 JSON 保留子事实并标记不完整的集合。候选人承认的上下文参考被重新读取以标记被取代的提示;那个被冻结的候选人的资格永远不会要求新的提示的资格。重试建议是试运行预览;突变仍然执行新鲜的入场。
超时或命令中断后,在决定再次重试之前检查 frv status 和确切的 GitHub 尝试;本地过程无法证明未观察到的突变被拒绝。
该命令不存储延续分类帐或本地日记帐。 GitHub 运行尝试、不可变的执行计划、生产者调度记录和收据、Decision/Drain 工件和最终清单是完整的状态模型。它从不标记、发布、更改注册表或准备新的候选者。
父母如果其不可改变的计划早于尝试感知证据,就不能继续下去。开始新的全组完整发布验证;控制器永远不会重建旧状态或调度替换父级。
对于新的调度(包括试运行),帮助程序首先通过在新的临时存储库中获取裸 SHA 来证明 GitHub 提供准确的验证 SHA。它在独立 P 准入后推送一个固定到 Q=C 的不可变 release-ci/* 工作流引用,通过 ref 和 expected_sha 的精确验证 SHA,并在成功验证和严格证据验证后删除临时引用。当父进程处于活动状态时,帮助程序会读取发布决策工件,以便在 Diagnostic Drain 收集故障时阻止程序可以浮出水面。它每两分钟检查一次父状态和精确尝试决策元数据,完整的进度作业读取频率不超过每 15 分钟。每个常规迭代最多发出两个元数据请求;它仅在其指定的工件出现后才下载决策,并在后续迭代中重试不可用的下载。经过验证的通过决定仅针对该尝试保留。当没有经过验证时,父完成还会触发决策下载,因此元数据滞后无法跳过终端处理。 Discovery 立即进行一次检查,最多重试 3 次,两次检查之间等待 30 秒、60 秒、然后 120 秒。所有读取均使用正常的缓存感知 GitHub 路由;缓存和请求延迟会增加这些间隔。帮助者保留 12 小时的等待期限。成功的临时引用清理仍然需要父级完成和严格的证据验证。失败的验证保留工作流程参考以供重新运行和诊断; --keep-branch成功后也保留了它。验证 SHA 是合格的确切提交:代码 SHA,也可以是版本 SHA,或更高版本的仅更改日志版本 SHA。它不是第三个发布标识。工作流在子调度之前拒绝格式错误或不匹配的预期 SHA。每个孩子必须报告相同的问题。通过 -f reuse_evidence=false 强制重新运行。新的发布请求保留 Q=C 并使用准入工作流程参数选择 P。只有P需要独立的trusted-main或protected-tag权限; Q 需要审查候选人背景并冻结资格合同。缺失的合同需要故意向后移植候选者,而不是更新的工具替代。现有的历史要求保留其原始身份。工作流程本身从不创建或更新存储库引用。
取消拥有的验证树
预览确切的取消目标,然后请求取消:
该命令验证原始密封的执行计划和调度生产者日志。它取消记录的 Telegram 后代、拥有的诊断和工件子代,然后是父代。被重用的儿童是借来的证据,并且保持不变。在每次请求之前立即检查当前的运行身份和尝试;不相关的运行永远不会被分支或最新运行顺序选择。
取消接受并不是完成。 JSON 列出请求的操作、剩余的活动运行 ID、排除的借用子项、失败和下一个命令。缺失的计划、未解决的调度日志、改变的尝试或不可用的观察结果都保持明确;他们从未证明这棵树是终结的。 Exit 0需要完整的终端树(或只读预览);不完全取消退出 1. 在中断或延迟响应后重复相同的命令。它重新读取 GitHub 状态并跳过终端运行,而不创建取消分类帐、替换父项或候选者。等待完成后再派遣替代品。
如果较早的取消未解决,请显式使用 pnpm frv cancel --run <parent-run-id> --force。 GitHub的强制取消操作会绕过always()等条件;这不是自动后备。
GitHub 的取消端点没有原子运行尝试比较和交换。 FRV 在每个请求之前刷新目标及其原始沿袭,并在协调期间再次验证准确的身份。并发重播仍然是外部协调风险;取消树时不要重新运行它。
声明的薄片自动重试
自动测试重试已禁用。失败或超时的作业仍然是阻碍因素; known_flaky_jobs_json 新发货被拒绝。在请求再次执行之前检查原始故障。显式 frv rerun 和 frv continue --failed 命令保留操作员恢复操作,并且永远不会作为对测试结果的自动响应运行。
已发布的工件可能包含空的 knownFlakyJobs 和 automaticRetries 字段。读者保留其原始计划摘要并拒绝非空配额或重试记录。目前的资格要求成功选定的结果。已使用较旧的固定工具 SHA 发送的营销活动仍归该不可变工具所有,并且不得在运行中重新定位。当前严格的工装拒绝保留windows-node-ci咨询证据;开始一场新的战役来满足恢复的封锁门。候选者拥有的资格仍然使用 Q=C:如果冻结的工具需要策略修复,请故意向后移植并冻结新的候选者,而不是替换更新的主要工具。退役的豁免和预先宣布的咨询失败津贴仍然被拒绝,必须以新的排位赛取代;他们不能授权出版。
阅读出版物观察结果
可选的发布选择器在验证状态旁边添加只读视图:
JSON 响应保留紧凑的验证摘要并添加 publication。该选择器仅在status上有效;它不会更改 continue 或 verify。 FRV 根仍然需要一个尝试感知的、全组不可变的计划。
读者将在条目中观察到的出版尝试固定下来。它独立地验证 FRV 和发布工作流程身份,然后将支持的 release-postpublish-diagnostics 版本 1 证据加入到该发布者记录的确切验证清单中。尝试 1 的原始计划可以绑定尝试 2 的最终验证清单。这两次尝试分别报告;两者都没有被最新的尝试默默地取代。链接的子项保留其自己观察到的工具 SHA/ref. 该报告保留发布者诊断的发布版本、标签、npm dist 标签和请求的源 SHA。 Windows调度观测也保留目标标签和源标签;来源可能与整体发行版本不同。
此视图报告观察结果,未发布授权或当前注册表可见性。作者选择、验证选择、工作结论、注册表读回、绑定和资产检查保持独立。失败的发布者可以保留成功的回读和部分打包结果。 Docker 和 VCR 仍然是父作业; VCR 复制、烟雾和别名值是 API 步骤结论。分离的 Windows 确认、其预上传标记和当前子结论是单独的观察结果。 Linux 请求同样保留为 awaiting-admission,直到下游构建器记录许可为止。读写器绑定请求尝试、构建者身份、选择的标签、来源SHA; main 推进可以产生明确的接收者拒绝,而不是静默的待处理请求。建造者完成和入场不属于发表资格。 Linux App Release 工作流程仅接受通过 workflow_run 完成的发布请求。仅分离的镜像调度使用 Linux App Mirror (linux-app-mirror.yml);他们从不选择或构建发布标签代码。
如果在捆绑包构建完成后 Linux 打包检查失败,构建器会将 linux-app-release-unqualified-<run-id>-<attempt> 保留 14 天。它的 identity.json 记录源、工具和失败的检查; SHA256SUMS 绑定保留的捆绑字节。在对下载的输出重新运行打包检查器之前验证这些事实。这些诊断结果不能签署或公布;没有捷径可以将保留的失败包转换为合格的版本。正常的ClawHub发货记录不是完整的子库存。 Mac assets/feeds 和网站部署不是本读者收集的。使用本机出版物和网站部署所有者来获取当前的回读。 网站所有者的下载检查可以在不部署的情况下检查生产。对于稳定版本,pnpm release:stable <version> --status 显示原始编排状态目录中保留的 Mac 运行和 appcast 事实,而不是新的实时验证。
如果没有经过身份验证的外部所有者链接,预发布激活仍然未知。成功的内部发布者或跳过的最终确定作业并不能证明已激活。提供的历史子 ID 会保留诊断缺少的未知记录尝试。没有确切的发布者尝试、不受支持的模式和缺乏诊断的传统成功收据不会通过推断而成为成功。对于这一历史观察,受保护的出版物参考文献不必仍然存在;现场特权作家仍然必须执行自己的最终权限检查。
Exit 0表示收集完成,而不是发布通过。丢失或过期的历史证据可能会产生具有明确的未经验证关系的退出 0。矛盾的身份、access/transport 错误、不完整的分页、截断的诊断和更改尝试会产生具有分类部分输出的出口 1。没有自动重启或恢复操作。不相关的子故障会留下已验证的 publisher/validation 链接,同时将收集标记为不完整,前提是最终的父身份检查仍然通过。任何一方加入的父母的变更都会使该关系失效;不可读的最终父级使其未经验证。这些检查也会在收集失败后在原始读取预算内运行。最终检查绑定不可变的 run/workflow/repository/ref/SHA 身份和尝试。相同的尝试生命周期或显示更改不会使该关系无效;报告的生命周期值仍然是来自其各自读数的观察结果。
读取使用选定的 GitHub CLI 凭证路由、显式身份验证的 GET、精确工件 metadata/digests 和有界 ZIP 检查。限制为总共三分钟、每个请求 20 秒、256 个请求、32 次观察运行、每个验证子项尝试 8 次、十页 100 条记录、每个 JSON response/archive 2 个 MiB、每个扩展工件 1 个 MiB(用于诊断的 128 个 KiB)、32 MiB 累积响应字节和 256 KiB 输出。极限是不完整的观察,而不是不存在的证据。如果输出过大,阅读器将保留经过验证的 publisher/validation 链接和表面观察结果,将每个 job/package 列表限制为四个具有明确遗漏计数的条目,并标记任何省略的验证详细信息。它不会用未知结果替换已知结果。不会发生注册表读取、候选执行、重新运行、调度或发布突变。
合并后延续证明
对于注册管理机构认可的发布父级,在任何重新运行或分派之前,继续验证原始尝试一计划及其成功的受保护上传。重试根据原始受保护上传后记录的摘要恢复缓存的字节,然后为其使用者重新上传相同的计划和准入。它不会记住公共注册表状态、重新标记准入时间或替换准入中嵌入的观察工件描述符。没有摘要证人合同的历史登记处承认的父母无法继续;控制器在重新运行子级或父级之前拒绝。他们幸存的文物仍然可读,可以进行严格验证。更新本地控制器无法改造其冻结的工作流程。历史上的父母严格遵守冻结合同;非出版父母没有出版许可。现有的对父母拥有的文物和不完整的儿童身份的拒绝仍然适用。
仅当审核后的 SHA 登陆受保护的 main 后,才可使用非发布的 FRV Proof Broker 和 FRV Proof Fixture 工作流程。该装置包含一个固定的无操作作业,该作业故意在第一次尝试中失败并在第二次尝试中通过。在选择确切的失败操作作业 ID 并调用 GitHub 的作业重新运行端点之前,代理会验证确切的维护者、合并的拉取请求、受保护的主 SHA、固定工作流程和运行元组。提供合并的拉取请求编号及其确切的提交。代理要求将拉取请求合并到 main,要求其记录的合并提交等于落地提交,并要求落地提交与可信代理工作流程 SHA 相同或者是其祖先。它会在夹具重新运行之前立即重复维护者、合并拉取请求和祖先检查。
仅当确切的装置运行前进到尝试两次并通过时才接受托管突变证明。代理发出收据,并且不得创建发布候选、发布工件、发布、存储库引用、替换父项或其他工作流突变。这证明了 GitHub 目标作业重新运行边界;重点控制器测试证明计划资格、绿色尝试保存、同父收集和严格验证者调用。不要使用真正的完整版本验证运行来进行此证明。
上述主线要求适用于初始验证工具选择。一旦发布发布将该工具 SHA 绑定到受精确保护的轻量级 release-publish/<12sha>-<provenance-run> 标签,即使 main 前进,实时标签到 SHA 的映射仍然具有权威性。后缀记录标签创建来源,而不是当前父运行 ID。在每个核心或插件 npm 发布或 dist-tag 突变之前,发布必须重新读取该确切标签并重新验证确切的父运行元组。丢失、移动、注释或错误的 SHA 标签、父级不匹配或不允许的父级状态会阻止发布。其他特权作者需要在受保护标签发布路径全局完成之前对其相关强制执行进行更改。