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

资讯详情

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

NemoClaw PR Comparator Tier 3 决策指南:加权评分、决胜规则与降级模式实现解析

NemoClaw PR Comparator Tier 3 决策指南:加权评分、决胜规则与降级模式实现解析 NemoClaw PR Comparator Tier 3 决策指南加权评分、决胜规则与降级模式实现解析【免费下载链接】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 开源仓库中针对同一个 issue 往往存在多个竞争性 Pull RequestPR。.agents/skills/nemoclaw-maintainer-pr-comparator/目录下的 PR Comparator 技能通过 Tier 0资格门禁、Tier 1正确性、Tier 2质量三层流水线对候选 PR 打分而Tier 3 负责最终排名与裁决当至少一个 PR 通过全部资格门禁时进入 Happy mode按加权分数与四条决胜规则选出合并赢家当全部候选都被门禁拦截时进入 Degraded mode按距离可合并状态distance-to-ready排序并给出可挽救salvage建议。本文以 tiebreakers.md 为主体结合仓库内的评分脚本、检查清单与输出模板逐条拆解 Tier 3 的判定逻辑、输出约束与源码级实现帮助维护者与贡献者理解裁决的每一步。1. 前置背景Tier 0–2 如何为 Tier 3 提供输入Tier 3 的输入来自前两级流水线的产出理解这些输入是读懂本指南的前提Tier 0 — 六项资格门禁定义于 checks/tier-0-gates.md包括state_openPR 状态为 OPEN、ci_green_shaPR SHA 上 CI 全绿、mergeable无冲突、contributor_complianceDCO 声明与 GitHub Verified 提交、branch_protection分支保护通过、coderabbit_threads_resolved自动化评审线程已解决。六项全部为true的 PR 才有资格进入 Happy path 评分。Tier 1 — 六项正确性检查定义于 checks/tier-1-correctness.md覆盖测试是否命中 bug 路径、评论即规范comment-as-spec覆盖、负向测试覆盖、覆盖形态、重构与行为变更扫描、Mock 边界纯净性。每项检查满分 2.0。Tier 2 — 四项质量检查定义于 checks/tier-2-quality.md覆盖描述与 diff 漂移、迁移完成度、公共表面公共 flag、帮助文本、错误消息、退出码保持、绕过问题根因的工作区手法。每项检查满分 1.0。在 SKILL.md 的 Step 7 中加权评分规则明确pass 满分、yellow 半份、fail 0 分Tier 1 权重 2.0、Tier 2 权重 1.0因此理论最高加权分为6 × 2.0 4 × 1.0 16.0。Tier 3 的职责就是把这些分数、资格门禁结果与行为覆盖证据汇总为最终裁决。2. 模式判定Happy mode 与 Degraded modeTier 3 的第一步是根据 Tier 0 的结果推导运行模式而不是接受调用方传入的模式Happy mode至少一个 PR 通过 Tier 0 全部六项门禁进入加权评分 决胜规则的正常排名流程。Degraded mode没有任何 PR 通过 Tier 0进入距离可合并状态的挽救排序流程。这一模式必须从门禁推导的约束在 render-verdict.py 中有强校验mode happy if eligible_numbers else degraded若调用方提供的mode与推导结果不一致渲染器直接以非零退出码拒绝输出。此外SKILL.md 的 Step 8 明确要求Compute the mode from the Tier 0 results. Do not accept a mode from the caller防止人工或脚本干扰模式判定。3. Happy mode加权评分、行为覆盖矩阵与决胜规则当至少一个 PR 通过 Tier 0 时执行如下步骤消除资格不合格者任何未通过 Tier 0 的 PR 立即出局不参与后续排名。计算 Tier 1–2 加权分数将六项 Tier 1 检查与四项 Tier 2 检查的 pass/yellow/fail 换算为加权分得到每个幸存者的总分。构建行为覆盖矩阵behavior-coverage matrix以矩阵作为加权分数与决胜规则的证据基础。按顺序应用决胜规则当证据足以区分两个 PR 时选定 winner若证据不足以区分则winner保持null。关键的输出约束是winner只能设置为幸存者通过 Tier 0 的 PR同时closest_to_ready必须为null。closest_to_ready仅用于 Degraded mode两者互斥。3.1 替代关系Supersession relationship的边界在排名之前必须先处理 PR 之间的替代关系。supersession 语句如supersedes #N、replaces #N、closed in favor of #N、folded into #N由 scripts/parse-supersession.sh 以大小写不敏感的方式解析并输出superseder_pr - superseded_pr的边。但需要注意supersession 语句只记录候选之间的关系不证明某个 PR 的 diff 实际包含了另一位贡献者的工作coverage也不证明归属attribution更不能用于给候选排名。对于声明或疑似被替代的 PR需要对比 commits 与 diffs将其分类为independent独立实现、transferred携带他人实质工作或unclear证据不足。若分类为transferred在设置 winner 或建议关闭源 PR 之前必须先完成被替代 PR 的规范归属canonical attribution核查——包括确认Signed-off-by:声明、提交的 Verified 状态以及通过Co-authored-by:或git cherry-pick -S -x保留源贡献者身份详见 templates/verdict.md 的 Suggested action 列表。若分类为unclear则winner必须保持null交由维护者人工判断。3.2 四条决胜规则按顺序应用当两个幸存者加权分数接近、无法直接区分时按下述顺序逐条尝试打破平局更小的 diffSmaller diff当两个 PR 都覆盖了 issue 范围时优先选择 diff 更小的 PR。更小的改动面意味着更低的回归风险与更快的评审成本。更好的边界用例测试覆盖Better edge-case test coverage比较 Tier 1.3负向测试覆盖的输出。Tier 1.3 关注空输入、边界值0、max、min、off-by-one、类型混淆、畸形输入、纯空白/非 ASCII/Unicode 等负向断言对于 Dockerfile 等基础设施变更包存在性断言与版本固定断言也算负向覆盖。覆盖更全面的 PR 胜出。最近的活动Most recent activity优先选择最近一次 commit 更新的 PR。更新的提交通常意味着更贴合当前main分支状态、修复了更多评审反馈。更低的 PR 编号Lower PR number若以上全部无法区分选择 PR 编号更小的候选。编号更低代表提交时间更早作为纯粹、确定性的最终兜底保证裁决可复现。决胜规则的触发情况需要被记录。在 render-verdict.py 的推理轨迹Reasoning trace中tiebreaker_fired字段会被输出为- Decided by tiebreaker: smaller_diff之类的行使裁决可审计。4. Degraded mode距离可合并状态的挽救排序当没有 PR 通过 Tier 0 时Tier 3 转入 Degraded mode按合并前还需要多少工作对合格 PR 排序而不是直接选出 winner。4.1 对每个 PR 的 Tier 0 失败分类首先必须对每个 PR 的每项 Tier 0 失败做三分类该分类体系同样记录在 checks/tier-0-gates.md 的输出规范中Trivial可轻易修复作者无需改变提交合规性即可自行修复的问题例如缺少 issue 链接、base 分支过旧stale base、自上次评审后有 force-push。Ineligible不合格直接拒绝PR 正文缺少 DCO 声明或 GitHub 未将每个提交显示为Verified。此类 PR直接拒绝不参与挽救排序——贡献者必须提供合规的提交历史。维护者不得代为 amend、签名、force-push、批准或合并。Substantive实质工作CI 变红、存在合并冲突mergeability conflicts、缺少 CODEOWNERS 批准、存在未解决的 CodeRabbit 线程等需要真实返工的问题。4.2 距离可合并状态的排序规则排序遵循严格的优先级链不合格 PR 排在任何合格 PR 之后若所有候选都不合格则返回仅含拒绝意见rejection-only的裁决。在合格 PR 中实质失败substantive更少的优先。平局时琐碎失败trivial更少的优先。仍平局时比较 Tier 1 与 Tier 2 的加权分数分数更高的优先。若现有证据无法支撑排序则closest_to_ready保持null——宁可不下结论也不可臆断。4.3 输出约束与裁决文本Degraded mode 下的输出必须严格遵守winner必须为null它只用于合法的合并推荐。closest_to_ready只能设置为处于 OPEN 状态且通过贡献者合规contributor compliance的 PR拒绝类裁决中它必须为null。输出每个 PR 的 Tier 0 失败列表含 ineligible/trivial/substantive 分类。输出每个 PR 的 Tier 1 与 Tier 2 计分卡scorecard。输出裁决文本格式类似Neither mergeable yet. PR A is closer — fix [substantive list]. PR B has [issues].将每个合格 PR 的挽救步骤salvage steps写入该 PR 的证据映射evidence map使渲染器能够在推理证据reasoning evidence中呈现它们。值得注意的是与Trivial 失败排在 Substantive 之前处理的直觉相反排序时实质性失败的权重更高——fewer substantive failures wins优先于fewer trivial failures wins原因是实质问题代表真实的返工量而琐碎问题通常可以快速补齐。5. 行为覆盖矩阵跨 PR 覆盖对比与工作转移行为覆盖矩阵是 Tier 3 最重要的证据工具。对于 issue 正文与评论中提取的每一个验收标准acceptance criterion建立一行标注每个 PR 是否覆盖该标准| Criterion | PR #A | PR #B | |------------------------------|------------|------------| | Empty input rejected | covered | covered | | Boundary value handled | covered | missing | | Preserve Y (commenter) | missing | covered | | Error message preserved | covered | partial |每个单元格有三种取值语义清晰covered完整覆盖绿色partial部分覆盖黄色missing缺失红色在 render-verdict.py 中矩阵由render_matrix函数渲染每个 criterion 一行缺省值为missing——这意味着任何未在矩阵中显式声明的 criterion 都会被视为未覆盖属于fail-closed设计。5.1 矩阵的用法矩阵的实战价值在于发现所选 PR 未包含的测试或变更找出候选 PR 各自缺失的验收标准missing或partial单元格。裁决可以建议从另一个 PR 做小范围转移transfer。完成转移与必需的归属声明后必须重新运行比较器再决定 winner——即 SKILL.md Step 8 强调的Do not setwinnerfor a replacement with transferred work until the required attribution is present and verified.转移操作的建议路径见 templates/verdict.md优先使用git cherry-pick -S -x source-sha保留源贡献者的 Git 作者身份若必须重组工作则用已验证的源提交身份追加Co-authored-by: Name email同时在接收 PR 的正文中添加Supersedes #B并指明被转移的测试。6. 源码级验证render-verdict.py 如何强制执行 Tier 3 约束render-verdict.py 是 Tier 3 语义的机器可执行化身它读取 JSON spec 并做严格校验任何违规都以退出码 64 拒绝输出门禁键严格校验每个 PR 的tier_0必须恰好包含state_open、ci_green_sha、mergeable、contributor_compliance、branch_protection、coderabbit_threads_resolved六个布尔键缺键、未知键或非布尔值都会报错。模式推导mode happy if eligible_numbers else degraded其中eligible_numbers来自六门全过的集合调用方传入的mode若与推导值矛盾则报错。winner 合法性winner必须引用候选 PR 编号且必须是六门全过的 PR否则报winner PR #N did not pass every Tier 0 gate。closest_to_ready 合法性仅在degraded模式下允许非空且该 PR 必须同时满足state_open与contributor_compliance对应脚本中的salvageable_numbers集合。计分复算渲染器按score_for将 pass/yellow/fail 换算为weight/weight*0.5/0Tier 1 权重 2.0、Tier 2 权重 1.0并输出每个 PR 的x.x / 16.0总分最大总分 16.0 与 checks/tier-2-quality.md 末尾的说明一致。值得注意的细节渲染器默认将缺失的 Tier 1/Tier 2 键视为failpr.get(tier_1, {}).get(key, fail)同样遵循 fail-closed 原则——证据缺失即按失败计。7. 裁决输出模板与两种模式的差异templates/verdict.md 定义了最终 scorecard 的人类可读形态由render-verdict.py渲染验收标准清单来自 issue 正文与评论每项以- [ ]呈现。逐 PR 计分卡Tier 0 六门、Tier 1 六项、Tier 2 四项、加权总分一行逐列对比。行为覆盖矩阵criterion × PR 的 covered/partial/missing 表。裁决块Happy mode 输出Verdict: MERGE PR #N或Verdict: No clear winnerDegraded mode 输出Verdict: Neither mergeable yet并附PR #N is closer to ready.或No open, contributor-compliant PR is eligible for salvage.。推理轨迹Reasoning trace列出 supersession 边、触发过的 tiebreaker、各 PR 的分数。推理证据Reasoning evidence每条判断必须包含File:line或 SHA/log 行号、观察到的客观事实、做出的推断、贡献的分数full / half / zero。Degraded mode 的裁决块会替换为分 PR 的失败清单格式不合格 PR 列出其 substantive/ineligible 失败如Rebase against current main (3 conflicts in )、Missing PR-body DCO declaration、Missing GitHub Verified commit history可挽救 PR 列出需要修复的实质问题如5 unresolved CodeRabbit threads、macos-e2e check failing随后给出 Suggested action。8. 回测与调优验证 Tier 3 决策质量Tier 3 的决胜规则并非一成不变validation/backtest.md 提供了在历史案例上回测比较器的流程挑选 5–10 个已解决的历史竞争案例如同步竞速中先合并的字节相同 PR、workaround 与 root-cause 的架构分歧、停滞 PR 被新 PR 替代的链条、CI 红绿对比、DCO 重切案例记录为(issue, [pr_a, pr_b, ...], actual_winner_pr)。对每个案例运行技能与真实 winner 对比分类为 Match、False positive、False negative、Ambiguous。目标阈值误报率 10%、漏报率 5%、歧义率 10%。超阈值则定位具体 tier 或检查项改进 prompt 或增删 tiebreaker 后重跑。回测暴露过的两类 Tier 3 相关问题与缓解手段值得注意Tier 3 tiebreaker 噪声tiebreaker 触发过于激进选出更差的 PR。缓解回测时记录每个案例由哪条 tiebreaker 决出若某条规则持续选错则降级或移除它。Tier 0 过严因可自动恢复的 CI 抖动而淘汰 PR。缓解交叉比对最新 commit 与上一次运行的 CI 结果。这属于 Tier 0 层但直接影响 Tier 3 的模式判定——门禁过严会把本应 Happy mode 的场景压入 Degraded mode。9. 实战工作流从 issue 到 Tier 3 裁决把 Tier 3 放回完整流水线一次典型运行如下全部命令与脚本见 SKILL.md解析 issuegh issue view issue-number --json title,body,comments提取每个验收标准评论也可能新增需求。发现候选 PRscripts/find-candidates.sh issue-number按固定顺序展开显式链接 issue 的 PR → issue 正文提及文件相关的 PR → 标题 token Jaccard ≥ 0.4 的 PR找到至少 2 个后停止。检测替代关系scripts/parse-supersession.sh pr-1 pr-2 ...解析 supersed/replace/close in favor of/fold in 语句族并分类关系。Tier 0 门禁scripts/collect-gates.sh pr门 1–5scripts/check-coderabbit-threads.sh pr门 6走 GraphQL 查询pullRequest.reviewThreads.isResolved。Tier 1 / Tier 2 检查按两份检查清单逐项给出 pass/yellow/fail 与File:line证据。加权评分Tier 1 权重 2.0 × 6 项 Tier 2 权重 1.0 × 4 项满分 16.0。Tier 3 排名按本文所述流程先判定模式再走 Happy/Degraded 分支。输出裁决scripts/render-verdict.py spec.json verdict.md渲染器退出码非零则立即停止不得推荐合并。关于环境前提技能要求ghCLI 已安装并完成认证且面向同一个 issue 有 ≥2 个开放 PR的场景仓库策略CODEOWNERS 团队、DCO 位置、自动评审 bot 登录名、docs 目录、覆盖阈值文件集中在 repo-policy.md 中配置换仓库使用时需按需调整。10. 结语Tier 3 的设计哲学纵观整个 Tier 3其核心设计取向可以概括为三点证据优先宁可空置不臆断无论 Happy 还是 Degraded 模式当证据不足以支撑结论时winner或closest_to_ready必须保持null把决定权交还给维护者。Fail-closed 贯穿始终门禁键缺失报错、矩阵单元格缺省为missing、计分卡缺省为fail——任何未验证的输入都不会被当作通过。可审计、可回测、可演进每条判断必须携带File:line证据与推理链tiebreaker 的触发被显式记录回测框架允许用历史案例持续校准规则。对于 NemoClaw 的维护者这套流程把多个 PR 抢一个 issue的模糊竞争转化为可复现、可解释的裁决对于贡献者它清晰地揭示了什么才让一个 PR 从合格走向胜出——资格合规是前提正确性与质量是分数而决胜时刻往往落在边界测试覆盖与 diff 规模这些细节上。相关参考文件tiebreakers.md — Tier 3 排名与降级模式本文主体SKILL.md — 九步工作流总览checks/tier-0-gates.md — 六项资格门禁与失败分类checks/tier-1-correctness.md — 六项正确性检查checks/tier-2-quality.md — 四项质量检查与满分 16.0 说明scripts/render-verdict.py — 裁决渲染与约束校验实现templates/verdict.md — 输出模板与 Suggested actionscripts/parse-supersession.sh — 替代关系解析repo-policy.md — 仓库策略配置validation/backtest.md — 历史回测与规则调优【免费下载链接】NemoClawRun agents like Hermes, LangChain Deep Agents, and OpenClaw more securely inside NVIDIA OpenShell with managed inference项目地址: https://gitcode.com/gh_mirrors/ne/NemoClaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表