尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NemoClaw 持续 E2E 失败维护:面向 `main` 分支的根因队列化自动化修复工作流

NemoClaw 持续 E2E 失败维护:面向 `main` 分支的根因队列化自动化修复工作流 【免费下载链接】NemoClawRun agents like Hermes, LangChain Deep Agents, and OpenClaw more securely inside NVIDIA OpenShell with managed inference项目地址https://gitcode.com/gh_mirrors/ne/NemoClaw点击查看免费下载导读本文围绕 NemoClaw 仓库中面向main分支自动 E2E 结果的持续维护技能Skill展开系统讲解它如何在无固定结束时间的循环中通过根因分组 → 草稿 PR 认领 → 独立审查 → 策略化合并 → 失败遏制 → 连续性移交的完整闭环让多个 Agent 协同、有序地修复自动 E2E 失败而不破坏发布流程与合并保护。读完本文你将掌握该工作流的操作规则、队列与所有权模型、五个可执行写策略的判定逻辑、可信策略评估器的运行方式以及与之配套的 E2E 选择与编写契约可直接用于理解或复现这套仓库级 CI 维护机制。技能定位什么时候用什么时候不用该技能定义在 .agents/skills/nemoclaw-maintainer-fix-e2e-failures/SKILL.mdfrontmatter 中明确它的用途是Continuously maintain automatic NemoClaw main E2E results through coordinated repairs. Use for ongoing maintenance, not one-time dispatch or diagnosis.即它面向持续维护无截止时间的循环而不是一次性排障或诊断。配套的 Agent 接口配置 .agents/skills/nemoclaw-maintainer-fix-e2e-failures/agents/openai.yaml 给出默认提示词Use … to fix automatic main E2E failures and monitor new results continuously.。适用范围边界来自 evals 反面用例技能自带的评测集 .agents/skills/nemoclaw-maintainer-fix-e2e-failures/evals/evals.json 用正反用例划定了边界值得先读反面用例negative-manual-e2e-dispatch针对发布候选手动跑全套 E2E 并验证 Launchable 证据属于现有的 Run Maintainer E2E 技能不使用本技能。反面用例negative-single-pr-ci-fix调试某个 PR如 #8588失败的必需检查并修复该 PR属于普通 GitHub CI 与贡献者工作流不创建根因队列。release-operation-exclusion修复已发布产物不在本循环范围内应记录为超出范围并路由到发布工作流。操作规则无结束时间、发布隔离与授权前提SKILL.md 开篇给出四条运营规则没有计划结束时间不得从本地时间、班次交接、某次通过或队列为空推断结束时间队列为空或最新一次运行通过也不能宣告成功或结束循环必须等待下一条自动main结果。发布操作排除循环期间绝不改动、重打标签、发布或触碰任何 release、tag 或发布产物相关工作路由到既有发布工作流。确认维护者授权只有请求授予合并权时才合并否则将 PR 留在approval-ready状态并继续循环。Git/GitHub 访问硬停访问失败时遵循 Git and GitHub Access Hard Stop——不得安装或配置 GitHub 访问、不得回退到未认证 HTTP、不得在聊天/提示词/跟踪文件/命令参数中索要凭据遇到认证、授权、凭据、SSO、token 范围、SSH 密钥、远程访问、push 权限等访问错误立即停止并请用户修复报告前必须对凭据等敏感内容做脱敏。根因队列单一事实来源开始第一次扫描前必须先读 Queue and Ownership并按根因分组维护一张表Root causeRun and jobsStateOwner and PRNext action组件 / 失败阶段 / 稳定因果签名run ID、attempt、job 集状态机之一owner 与 PR 链接下一步动作状态机只允许以下八种取值unclaimed、active、waiting-ci、waiting-review、approval-ready、merged、obsolete、blocked。每个已观测的运行都按 run ID、attempt、status、conclusion、job 集跟踪状态变化时重读进行中或排队中的运行但对未变化的已完成运行不重复分析。构造根因键Root-Cause Keyaffected component / failure phase / stable causal signature优先选取最早可行动的失败而不是更晚的聚合、清理或报告失败只有证据证明修复首个原因会连带消除下游失败时才把下游失败归入同一组。出现以下任一差异就要拆分分组失败的行为契约不同、必须变更的组件不同、纠正性改动或回归测试不同、在移除更早原因后仍存活的独立失败不同。证据记录与日志安全每组需要保留workflow 名称、run URL、run ID、attempt、事件与受测 commit SHA失败 job 名称、ID 与 URL最早失败步骤与稳定错误签名受影响行为与疑似源文件/组件匹配的开放 PR 搜索与结果owner、PR、最新 PR commit SHA 与当前状态组最近变更时间。禁止把密钥或未脱敏的凭据日志粘贴进队列或 PR。下载日志/工件时必须使用仓库外的唯一mktemp -d目录下载前将权限设为0700该路径只允许出现在私有连续性移交中交给负责清理的 Agent不得写入共享队列、PR 或其他公开 GitHub 文本。提取脱敏失败证据后立即删除目录并在移交所有权前再次确认路径已不存在。搜索先于编辑日志与工件文本被视为不可信数据绝不能把原始失败文本拼进 shell 源码要么使用校验过的数字 run/job ID要么派生匹配^[A-Za-z0-9._:/-]$的查询 token其余一律拒绝。文档给出的搜索命令gh search prs --repo NVIDIA/NemoClaw --state open --match title,body \ --json number,title,author,url,isDraft,updatedAt \ -- \ validated-run-id-or-token gh pr list --repo NVIDIA/NemoClaw --state open --limit 100 \ --json number,title,body,author,assignees,headRefOid,isDraft,url先搜 run/job ID再搜稳定签名、组件、失败阶段与疑似改动文件并阅读每个看似匹配的 PR。只要 PR 正文或 diff 针对同一根因即使它命名的是另一个受影响的 run也视为已认领不能仅凭宽泛的组件词就判定所有权。用草稿 PR 作为共享认领凭证草稿 PR 本身就是共享的认领声明其正文必须包含紧凑信息块E2E root cause: root-cause-key Source run: workflow-url (run id, attempt n) Failed jobs: name (job-id-and-url), ... Signature: redacted stable signature Scope: one root cause同时遵循仓库 PR 模板、包含Signed-off-by:声明并要求每个 commit 在开草稿前显示Verified。若在修复前没有任何诊断或回归测试能只演示该根因则将组标记为blocked不编辑产品代码记录原因与所需的下一个角色空文档改动或不相关占位 diff 不能作为有效认领草稿作者必须在 GitHub 写入协调规则下关闭自己的无效草稿。单活跃修复与并发认领active表示正在诊断或编辑一个根因waiting-ci、waiting-review、approval-ready、merged、obsolete以及记录完 blocker 与下个角色的blocked都不计入单活跃修复限制。持有等待中 PR 的 Agent 可以评审同行 PR也可以认领下一个无人认领的失败受开放 PR 数量上限约束但必须先停止编辑前一根因再激活下一个。出现并发认领时比较根因证据而非 PR 创建时间保留更早的完整认领除非 PR 明显针对不同原因若一个 PR 明显更接近正确修复使用 nemoclaw-maintainer-pr-comparator 再决策只有存活修复合并或证据证明重复 PR 无剩余用途后才关闭过时重复项。不得为节省 PR 槽位而合并无关原因。主循环10 步持续运转SKILL.md 规定在授权持续期间重复以下步骤刷新origin/main列出该 commit SHA 及之后maincommit 的自动 E2E run。只检查新增或变化的 run加载 nemoclaw-maintainer-classify-ci-failure 读取一个失败 job 的有界日志与可选保留工件识别最早可行动的产品、测试、工作流、runner 或清理失败。把共享相同因果签名的失败分组——不要用 job 名称等同根因。修复测试失败前先应用 E2E selection and authoring只有存在独特活体契约时才保留活体证据。编辑前用开放 PR 核对每个分组若他人已拥有记录该 PR 并取下一个无人认领的分组。优先处理需要评审或最终合并决策的同行 E2E 维护 PR再开始新修复。选择一个无人认领的根因用草稿 PR 认领初版 diff 只含该根因的证据。只修这一个根因并补充本应能拦住逃逸缺陷的诊断或回归证据。PR 等待 CI 或同行评审时停止编辑转去评审同行 PR 或认领下一个无人认领根因同一时间只编辑一个修复。每次扫描都复查 waiting 与 blocked 分组在 run、check、review、PR 或 merge 状态变化后重扫并针对每条新自动main结果重扫。没有可行动项时使用可用的等待/监控机制待相关结果变化后恢复。常见决策速查Linux 与 macOS job 若呈现相同稳定就绪签名合并为一个认领。最新 PR commit 变化后丢弃对先前 commit 的评审先认领并评审最新 commit。若后来的自动mainrun 证明另一合并已移除根因将开放修复标记为obsolete并关闭功劳只记给取代它的修复。认领一个根因写产品代码之前的检查清单对每一次 GitHub 写入应用 Review and Merge 中的歧义 GitHub 写入规则。用 run ID、job ID、稳定错误签名、受影响组件与可能修复区域搜索开放 PR 标题与正文。阅读所有可能匹配项相同原因但不同 job 视为已拥有相同症状但不同原因不算。从刷新的origin/main创建分支。可行时添加一个针对该根因的诊断或回归测试若无测试能在修复前只演示该根因则标记blocked不编辑产品代码、不加无关占位 diff。创建草稿前立即重读开放 PR 与 Agent 协调信息并基于刷新后的origin/main重新核算作者开放 PR 数量两项检查都在写入前立即执行。若已存在匹配认领或新 PR 将超上限则不创建记录现有 owner 或上限状态并重扫。否则打开指派给作者的草稿 PR模板、验证 commit 与 DCO 声明遵循 nemoclaw-contributor-create-pr。在 PR 正文写入根因键、源 workflow URL、源 run ID、失败 job 名称与 ID、失败签名该 PR 只修一个根因。同一 Agent 不得开始第二个活跃修复等待中的 PR 只允许在开放 PR 上限内累积。审查与合并先跑写策略评估器Review and Merge 规定对 workflow 批准、评审、合并、重试或回滚 PR 等写入只执行受信策略评估器允许的那一个写入。可信执行包装从干净候选 checkout 刷新权威origin/main后从该 ref 执行包装脚本——受信 ref 而非候选 checkout 决定包装器git fetch --no-tags origin refs/heads/main:refs/remotes/origin/main bash (git show origin/main:.agents/skills/nemoclaw-maintainer-fix-e2e-failures/scripts/run-trusted-policy.sh) policy-state.jsonrun-trusted-policy.sh 的实现细节值得注意它先用git remote get-url --all origin校验 origin 必须是NVIDIA/NemoClawhttps、git、ssh:// 三种形式然后git fetch --no-tags origin refs/heads/main:refs/remotes/origin/main用git worktree add --detach建受信临时 worktree把策略面evaluate-policy.mts与当前 checkout 做cmp -s比对并检查git status --porcelain为空最后用node执行受信副本$trusted_root/$path退出时trap强制清理 worktree。任一列出的文件缺失、不同、有本地改动或存在未列出的本地 import 都要停止只有经过评审才能向policy_surface添加 import。五种支持的策略场景evaluate-policy.mts 暴露evaluateE2eMaintenancePolicy按kind分发到五个场景kind判定函数核心判定条件ambiguous-writeevaluateAmbiguousWrite按reconciliationnot-run / observed-applied / observed-not-applied、objectIdentifiersUnchanged、retryCount 0、transferStarted决定先只读协调、从已观测状态继续、或仅一次同写重试fork-workflow-approvalevaluateForkApproval普通 PR 工作流 预期仓库 最新 PR commit 完整 diff 已评审 未改敏感工作流 不暴露特权凭据 已授权 runState action_requiredreviewevaluateReview评审者非 opener/author/co-author登录名小写归一化后比较且latestPrCommitSha reviewedCommitSha再校验checksCommitSha与必需检查通过mergeevaluateMergecaptured/latest/approved/checks 四个 SHA 全等且 base 匹配 main、必需检查通过、有独立批准、可合并、已授权post-merge-e2eevaluatePostMerge按 originalFailure/newRegression、attributionCertain、rollbackPrAuthorized 决定验证记录、暂停相关合并写入或开授权回滚草稿 PR每个决策对象都包含action、allowedWrites、deniedWrites、mergeWritesPaused、nextActor、queueState、reason。只执行allowedWrites中的项空列表即拒绝写入reason不是许可。写入前重读 GitHub标识符或合并要求变化时重跑评估器。歧义写入协调把非零退出、超时、中断响应或畸形响应都视为可能的写入不得立即重试。按稳定标识符重读远端对象GitHub 已是预期状态则继续否则确认所有捕获标识符未变后再重试一次结果仍不确定就记录 blocker 并选下一个队列项。不得用其他端点或写入绕过移交/取消开始后只做一次只读协调且不再重试。独立评审与批准门修复 owner 负责诊断、实现、测试与 CI 跟进另一名维护者必须批准 PR。评审者不得是 PR opener、commit 作者或 co-author评审认领绑定到被评审 commit最新 PR commit 变化即释放认领。评审收集遵循 Follow Up on PR CI and Reviews本工作流额外要求diff 只修一个根因诊断或回归测试能检出该失败安全敏感变更走 nemoclaw-maintainer-security-code-review批准前被评审 commit 的必需 CI 通过。批准 fork 工作流只批准预期仓库、PR、workflow 与最新 PR commit 的action_requiredrun先评审完整 diff确认是普通未受信 fork CI 路径且不向 PR 代码暴露仓库密钥或特权凭据批准前后都重读 run只在 GitHub 报告预期转换时记录成功。分支刷新决策表其余门全过后评估状态动作冲突、必需 stale-base 结果或显式 up-to-date 规则批准前刷新一次PR 最新或仅咨询性输出提及main不刷新最新 PR commit 的 CI 待定或失败等待或修复不靠刷新制造另一次尝试刷新绑定捕获的最新 PR commit写入后要求产生新最新 PR commit 并回到 CI 与评审禁止--admin、force-push 或批准后刷新。批准应用 Decide Whether to Approve a Pull Request本工作流只增加独立评审与单根因要求不重定义批准门。合并仅在用户授权、评估器允许、修复未过时、共享批准门仍通过时合并以捕获的最新 PR commit 为基准执行gh api --method PUT \ repos/NVIDIA/NemoClaw/pulls/pr-number/merge \ -f shacommit-under-review-sha \ -f merge_methodallowed-methodcommit 前置条件失败则重启门不得改合并方法作为重试绝不使用--admin、禁用规则、撤销必需评审或接受跳过的必需检查写入后要求merged: true与merge_commit_sha歧义结果先协调再重试等自动mainE2E 证据出现后才把根因记为已修复。不重复 E2E 的红线观察 workflow 启动的自动 push run 与替换尝试绝不用gh run rerun、gh workflow run .github/workflows/e2e.yaml或本地活体 E2E 复制自动 run。首次贡献者普通pull_request工作流在信任评审后的批准不算手动 E2E 派发带密钥或硬件的 E2E job 的环境批准属于另一种操作仅在维护者明确请求时按 Run Maintainer E2E 执行。同时禁止通过弱化、跳过、删除、重贴标签或收窄语义覆盖来让失败消失已分类的修复只能在 E2E 选择与编写契约下移动确定性证据或移除重复/附带证据。不得冻结main、阻塞无关合并或要求其他维护者等待。关闭过时工作每次修复 push 与合并决策前检查main或其他 PR 是否已移除根因若是验证取代变更对原始失败签名有效 → 停止编辑过时修复 → 以取代 PR/commit 与验证证据关闭其 PR写入后重读→ 将队列项标记obsolete且不计入本循环已验证修复。遏制合并失败post-merge containment满足任一条件即把自动mainrun 视为合并后失败run 保留被认领根因的签名run 显示由合并修复引起的回归。处理流程确认失败的循环 Agent 成为遏制 owner直到有确认的移交指定他人。标记根因blocked暂停该根因及依赖受影响origin/maincommit 的修复的合并写入。用post-merge-e2e状态跑 Review and Merge 中的写策略评估器。绝不直接 revertmain仅当请求明确授权创建回滚 PR 时开一个策略评估器允许的草稿 revert PR包含 merge SHA、first parent、失败 run 与 job、原始签名、回归签名与遏制范围。无授权或归因不确定时不做任何回滚写入把证据路由给有显式授权的维护者并继续无关队列读取。revert PR 同样适用普通独立评审、必需检查、commit SHA 与合并授权门循环的合并授权不构成绕过或直接回滚。只有授权的 revert 或纠正性 PR 合并、且后来的自动mainrun 证明原始失败与回归均不存在后才恢复相关合并写入操作者授权可选择其他动作但必须点名受影响的合并与新遏制 owner。移交而不结束循环循环没有计划结束时间只有操作者取消循环或另一活跃 Agent 确认接管监控与所有开放项后Agent 才能离开。离开前只完成已在进行的非破坏性读取、为每次歧义 GitHub 写入做只读协调、保留源码编辑、删除每个自有临时证据目录并验证其不存在、产出 Continuity Handoff移交场景下继续监控直到接收方确认接管。移交快照必须包含绝对时间戳与时区、进出 Agent、所有权确认、监控状态、下次扫描触发条件、观测的origin/maincommit、最新相关 E2Erun URL/attempt/status/conclusion、总体状态以及已验证修复、等待验证、合并后遏制、开放修复、剩余失败、过时工作、操作 blocker、限制声明手动重复 E2E/弱化覆盖/阻塞无关合并/触碰发布产物均为 none等分区表格。已验证修复必须同时满足受测 commit 是合并 commit 的后代run 对每个受影响目标到达原始失败阶段受影响 job 通过且无原始因果签名。目标缺失、被替换、被跳过或仍在运行则留在Merged, awaiting verification。手动 rerun 通过、cancelled/skipped/neutral/queued/in-progress 的 job、只加资格或诊断不改原因的 PR、与产品 E2E 无关的 CI 清理、被另一合并取代后关闭的过时 PR均不计为修复。底层支撑一E2E 选择与编写契约修复 E2E 测试失败前必须应用 E2E selection and authoring其核心思想是给活体 E2E 最小必要职责证据 owner 选择确定性逻辑用源码单元测试组件装配与仓库边界用集成测试编译/打包产物用 package-contract 测试fixtures、注册表、规划器、选择器、解析器与工件构造用e2e-support测试只有真实 shell、安装器、进程、网络、文件系统、Docker、OpenShell、/proc、沙箱、硬件、外部服务或 GitHub Actions 边界才用活体 E2E。不能仅因活体测试能观测就保留活体断言。活体契约定义新增/扩展/修复前记录真实边界、语义结果与独特回归、拥有确定性行为的下层证据、拥有活体结果的 canonical 测试、以及能证明该结果的最小活体断言。断言纪律断言结果、状态、工件与脱敏诊断不断言附带终端输出、进度措辞、spinner 帧、ANSI 转义序列、计时文本或提示布局除非该文本本身就是被评审的产品契约。重试纪律重试必须符合已检入的有界策略窄瞬时签名、owner、幂等/协调依据、attempt 证据不允许无证据重试、歧义变更重试或宽泛失败 job 重跑。移动/移除证据只有等价证据缺失时才把确定性证据移到下层 owner移除重复断言与附带输出断言保留每个已接受边界结果含必需拒绝、恢复、清理与安全行为的活体证据不得把重复活体断言藏进 helpers、snapshots、聚合收据或 shell 条件每个变更的活体断言都要记录 stayed/moved/removed 处置并解释语义覆盖完整性。底层支撑二仓库中的 E2E CI 拓扑该技能治理的正是 test/e2e/README.md 描述的自动 E2E 基础设施.github/workflows/e2e.yaml对比每次 pushmain前后的 commit、选择拥有变更文件的 targets/jobs 并发布Relevant E2E检查hosted-runner-recovery.yaml仅在全部非通过 job 都有认证 GitHub-hosted runner 丢失证据时请求一次全量 rerune2e-main-retry.yaml评估可重试的E2E mainpush attempt 并上传证据但从不授权宽泛失败 job 重跑——与本文的不重复 E2E红线完全一致。候选 CLI 由generate-matrix经共享ci-compile-artifactsaction 一次性准备Node.js 24.18.1校验嵌入源修订与 source map各消费 job 恢复 artifact 而非重新构建。技能评测集 evals/evals.json 的repair-brittle-live-assertion-at-owner用例则给出一个典型实战当 CLI 依赖改变进度语句导致mainE2E 失败时把措辞断言归类为附带证据并移除或替换为稳定的下层证据同时通过最小稳定断言保留目标拥有的独特活体沙箱结果——这正是分类修复 证据移动契约在真实失败上的应用。小结NemoClaw 的nemoclaw-maintainer-fix-e2e-failures技能把修 E2E从一次性排障升级为有状态、可交接、可审计的持续闭环根因键分组去重并发认领草稿 PR 作为共享认领凭证五个可执行策略场景ambiguous-write / fork-workflow-approval / review / merge / post-merge-e2e统一经由run-trusted-policy.shevaluate-policy.mts判定写许可独立评审与 commit-SHA 绑定防止自我批准与陈旧证据合并后遏制规则禁止直接 revertmain连续性移交模板保证多 Agent 轮换不丢失监控责任。若你的项目同样存在多个 Agent 共同维护一条 CI 主线的需求这套队列 策略评估器 移交模板的组合是可直接借鉴的工程范式。赞分享【免费下载链接】NemoClawRun agents like Hermes, LangChain Deep Agents, and OpenClaw more securely inside NVIDIA OpenShell with managed inference项目地址https://gitcode.com/gh_mirrors/ne/NemoClaw点击查看免费下载相关推荐ZeroClaw 维护者 PR 工作流治理指南分支保护、DoR/DoD、评审队列与失败恢复全解ZeroClaw 维护者 PR 工作流治理指南分支保护、DoR/DoD、评审队列与失败恢复全解 ZeroClaw gh_mirrors/ze/zerocla人工智能AI Agent交互助手工具调用MCP Clients本地部署Agent 工作流RAGBiliTools哔哩哔哩工具箱跨平台视频下载的终极解决方案BiliTools哔哩哔哩工具箱跨平台视频下载的终极解决方案 还在为B站视频下载烦恼吗想要轻松获取哔哩哔哩的番剧、课程和音乐资源BiliTools作为一款桌面应用音视频Streamlit 仓库 PR 自动化修复工作流从 CI 失败到合并的全自动闭环Streamlit 仓库 PR 自动化修复工作流从 CI 失败到合并的全自动闭环 本文以 Streamlit 官方仓库 streamlit/streamli数据可视化后端前端上一篇AeroSpace家居设计多个家居规划和装饰工具的同时使用下一篇FoxMagiskModuleManager自定义安装体验高级配置与脚本编写创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表