Repository navigation
fix(review): separate unknown CI from approval evidence - #7774
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: af8418d;不可变比较基线:dfc53993743d36af84fd1b23e1e628f870500487。这是作者自评,未宣称第二位独立 reviewer。
动机 / Motivation
需要对已验证代码作出结论的 PR reviewer 和维护者。
CI 摘要缺少失败原因时,旧指导可能要求逐项归因才批准;现在先判断当前改动的决定性证据,未知 CI 原因原样保留,减少无关修复和重复等待。
必要证据充分且无阻断发现时允许 APPROVE;已确认的 PR 回归即使标成非必需仍拒绝,缺少必要验证也继续阻断。
本次不改变 CI 等待默认、分支保护、merge 权限或业务持久状态,也不认证安装采用与模型遵从。
源码与当前 CLI 已验证;已安装旧版本的采用、跨 Agent 的实际拒绝率及长程收益仍未认证。
改动思路 / Approach
判断义务复用现有 required/disposition,能力指导和一致性检查各守原 owner,不新增 CI 豁免状态或第二权限层。
本 PR 交付七文件源码、CLI 与指导修复;不改变 CI 默认或合并权限,不认证安装和模型采用。
旧指导把“当前失败未归因”与“必要代码证据缺失”混在一起;仅把 CI waiting 关掉并不能消除这个冲突。现在先确认改动涉及的不变量是否已有决定性证据,再保留 CI 观察,未知原因继续写 unresolved,不能编造为基线故障或外部 outage。确实缺少必要证据时,仍应指出具体不变量及最小验证,而不是要求先跑完整 CI。
| 当前观察 | review 结论条件 | integration |
|---|---|---|
| CI 未知、红色、跳过或待完成 | 必要证据充分且无 blocker 可批准 | 保留独立 readiness 门 |
| 必要证据尚缺 | 指出具体缺口,继续阻断 | 不能由 CI 诊断豁免 |
| 已确认 PR 回归 | required=false 也阻断 | 修复后重新核验 |
这是该 head 的源码控制流说明,执行证据在下面。没有增加 waiver、配置、状态表或第二套权限模型;类型注解只明确原有 decision-text 表的类型和值边界。
具体改动 / Changes
全量审阅七路径、+118/-35:两个 production 文件、三份测试、能力 README 与薄 skill adapter。规范依据是修改前的 loopx/capabilities/pr_review_queue/README.md#configure-ci-waiting--配置是否等待-ci,spec_revision=dfc53993743d36af84fd1b23e1e628f870500487。CI-review-separation、review-invariant-evidence、merge-authority-separation 均 implemented:原规范已经区分 CI 完成与代码判断,本次按修复要求有意纠正未归因 CI 的一票否决;没有拿改后的文档给自身作证。
关键代码讲解
- VALIDATION_FAILURE_ATTRIBUTION 保留原 dispositions 与真实归因条件。新的规则先区分诊断和必要证据;只有确实声称 pre_existing_unrelated/external_unrelated 时,才需要相应 base/head 或外部证据。
- _check_validation_failures 在 optional-row 的 early return 前识别已有 pr_regression,返回原 blocker;状态类型、必要验证及归因分支仍由同一个循环处理,不新增 IO。
- validation_matrix 对两种 waiting 模式交付同一判断边界;false 模式保留不得 fetch/poll/wait,true 模式保留独立 merge policy。completion 与 verdict 条款同步,policy revision 为26。
- CLI matrix 把四种 CI 观察与四种必要覆盖状态交叉,实际调用公开 --check-result;另一个回归测试证明已确认缺陷不能用 required=false 隐藏。行为案例的两位正反 twins 留给显式模型资格实验,本次没有运行它们的模型调用。
对主干的风险 / Risks
最强反例是把真正缺陷也写成诊断。先在未改 production 的 base 上加入同一 oracle,得到 FAIL:1 failed/1 passed,旧检查器错误接受 optional 的已确认回归;最终 head 的两个 required 值均拒绝批准。16项公开 CLI 组合只有必要覆盖 passed 时可批准,pending/unverified/failed 的决定性覆盖继续阻断;无 blocker 的 REQUEST_CHANGES 也被拒绝。这里证明的是声明一致性,未把合成 fixture 当作真实 CI 故障根因。
最终精确 head 的完整 capability 套件 PASS:513 passed,45项显式 live-model 实验未启用,不记为通过。实际 isolated-registry CLI smoke、五文件 Ruff、两个改动源文件 scoped mypy、七路径公开边界扫描及 committed RFC/diff 检查通过。标准 committed premerge 的6项直接检查、8项 catalog、8项 risk 和1项边界检查均 PASS,零失败、零 manual hold;精确 CQR receipt 已读回 valid。
初次 exploratory mypy 跟随整个导入图,FAIL:864 errors/140 files,保留这次失败;随后现有 decision-text 常量补类型注解,当前仅认证两个改动源文件的 scoped mypy,不声称全仓类型检查已通过。初次 smoke 的宿主 runtime 路由冲突在独立 registry 后通过;ignored patch 扫描路径被拒,改为扫描实际七个公开文件后通过。这些预备失败没有改写成原先已通过。
语义与 CI 对齐
不可变 base/head 的两种 waiting 模式,各只有六个已披露 contract 路径变化,UTF8 JSON 分别增加1350/1384字节;保留有用约束,没有因压缩而丢失含义。配置、GitHub IO、readiness 和 closeout 四个 owner 的 blobs 与 base 完全相同;默认、override、no-query 与 readiness fixtures 全过。无新 schema、状态词或 CI heuristic,diff-scoped advisory 为0个支持的新增词汇候选;这不认证所有语义形式。
未查询、轮询或等待远端 CI,也未执行模型、Docker 或 benchmark jobs。未知 CI 是诊断;必要证据缺口、具体回归、既有讨论、readiness 与合并授权仍各自有效。
我的整体评价 / Verdict
APPROVE,delivery 为 justified_increment。改动复用既有 typed owner 和字段,范围与实际冲突相称:不必新建 CI 豁免框架或改变等待默认。局部简化保留单个判定循环,并用显式常量类型消除该触点的推导问题;没有把维护工作扩大到全仓重构。
long_horizon 与 user_experience 均为 preserved:原持久结果、调度、后续工作与用户入口仍由原 owner 决定,不增加设置或确认步骤;跨 Agent 的拒绝率、安装采用、模型遵从及完整成本收益未认证。七路径均为合同、检查器、测试或 Markdown 指导,没有渲染页面变化,因此 visual review 不适用。本 PR 交付七文件源码、CLI 与指导修复;不改变 CI 默认或合并权限,不认证安装和模型采用。
English verdict: APPROVE — af8418d. Decisive review evidence is separate from unknown or red CI; confirmed PR regressions remain blocking even on diagnostic rows. Final capability tests and scoped source/CLI checks pass; CI, model/installed qualification and merge authority remain separately stated.
songoow
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; runtime_reported; reasoning_effort=medium
Exact head: af8418d
动机 / Motivation
维护者和执行 PR 评审的 Agent。
独立验证充分但 CI 原因未知时,旧指导可能反复阻止批准;新指导允许保留未知原因并作出代码判断。
当前 CLI 拒绝被标成诊断的已确认回归,同时继续接受未知诊断并阻断必要证据缺失。
不改变 CI 等待默认、分支保护或合并权限;不认证模型遵从和安装采用。
改动思路 / Approach
规则与一致性检查复用同一能力及既有字段,局部修复无需新建豁免状态或权限层。
本 PR 仅交付源码评审规则、检查器与指导修复,合并授权及模型行为资格保持独立。
先区分“当前改动缺少决定性验证”和“远端 CI 状态未知”,再选评审结论。仅把 wait_for_ci 关掉不能修复原合同中逐项归因的要求;只改文字又会留下把已确认回归设成 required=false 的既有绕过。当前方案同时修正两处,判断权仍由原 capability 持有。
| 当前证据 | 检查器结果 |
|---|---|
| 独立必要验证通过,CI 诊断原因未知 | 可以批准 |
| 必要验证尚未证明 | 阻断批准 |
| 已确认 PR 回归,required=false | 阻断批准 |
具体改动 / Changes
审阅全部七文件,+118/-35:两个 production 文件、三份测试、README 和安装用 skill。检查器的输入、结果 schema、required 布尔值与归因枚举沿用原契约,policy revision 从25升到26,使旧规则结果不能直接作为当前结论。
- _check_validation_failures 将 pr_regression 检查放在 optional/passed 的提前返回之前;已确认缺陷不能靠非必需标记消失。其他必要失败的基线/外部归因条件保留。
- build_review_execution_contract 同步归因规则、validation_source、completion 与 verdict。两种 waiting 模式都保留必要证据门,false 模式仍禁止 fetch/poll/wait。
- README、薄 skill 与断言保持同一含义;pyproject 的既有 skill 安装路径仍有效。新增 CLI 测试交叉覆盖四类诊断状态与四类必要验证状态;模型正反案例属于显式启用实验,本轮没有调用模型。
对主干的风险 / Risks
最强反例是真正缺陷被包装成诊断。独立使用公开 --check-result 入口,对不可变基线 2f2c4ef 和当前 head 各执行四种相同语义 fixture,共八次:未知诊断和正常通过均可批准,必要证据缺失均拒绝;已确认 optional 回归在基线错误通过、当前版拒绝。这证明预期修复敏感性,同时检查了相反方向的过度阻断。首轮探针误用包的 python -m 入口,因仓库没有 main 未执行;改为真实 entrypoint 后八项均完成,未将前次失败计作通过。
PASS:针对 result_check、contract、behavior、configuration 四文件测试,286 passed;五个改动 Python 文件 Ruff 全通过。45 项模型实验 SKIPPED,不记作模型行为通过。两种 wait_for_ci 模式的 base/head 合同各仅六条路径变化,字段形状、CI 等待默认和独立合并门保持原规则。源码未包含新的 IO、状态迁移或自动授权。
正式 packet 的首次生成因本机旧 GitHub 客户端不支持 baseRefOid 失败;临时新版客户端重试成功,未修改产品以适应旧工具。packet 快照为12项 CI success、21项 pending;没有等待完成,也没有从 pending 推断通过。检查器只查声明一致性:若 reviewer 把已知回归错误写成 unresolved,它不能证明证据真伪;模型是否遵守新指导、安装采用及实际长程收益仍未认证。
我的整体评价 / Verdict
未发现可复现、需要本 PR 修改的阻断问题。当前源码与 CLI 结果支持这次局部修复;其工程成本与原规则冲突相称,复用同一判定循环足够,无需增加豁免机制或扩大重构。long_horizon 与 user_experience 的既有调度、持久状态和授权路径保持不变;不宣称已证明模型遵从或效率收益。
七文件仅涉及评审合同、检查器、测试及 Markdown 指导,没有渲染界面改动。
APPROVE 是代码评审结论;远端 CI、分支保护、其他讨论及合并权限仍按各自门槛处理,本评审没有执行合并。
English verdict: APPROVE — af8418d. No actionable regression found. Required evidence and confirmed PR regressions still block approval; independent focused tests and public CLI counterfactuals pass. Model compliance and pending CI remain unqualified.
PR reviewer 已独立验证改动,却可能因为 CI 结果未知或未逐项归因而一直不批准。本改动把 CI 诊断与必要评审证据分开:未知、失败、跳过、取消或待完成的 CI 可以保留未决原因;有决定性当前证据且无阻断发现时允许 APPROVE。
复用 validation matrix 的
required与原有 failure dispositions,不新增配置、schema 或豁免令牌。能力规则、completion gate、verdict、语义指导及薄 skill adapter 同步修正。检查器仍拒绝必要验证缺口,并补上required=false不能隐藏已确认pr_regression的反例;policy revision 升至 26。CI waiting 默认与 Goal override、merge-readiness、精确 head、讨论及授权门保持原行为。验证:完整 capability 套件 513 passed、45 个显式模型实验未启用;独立 CLI smoke、changed Ruff、两个源文件的 scoped mypy、RFC bilingual check 与七文件公开边界扫描通过。先写反例在旧实现复现 1 failed/1 passed,再修复检查器。初次 exploratory mypy 跟随全部导入,报 864 errors/140 files;该失败保留,当前仅认证改动源文件,不声称全仓 typecheck 通过。初次 smoke 的宿主 runtime 路由冲突在隔离 registry 后通过;扫描 ignored patch 路径被拒后对真实七文件重新扫描通过。未查询、轮询或等待 CI,未执行模型或 benchmark jobs。
范围:源码 capability 与公开指导,未认证安装采用、模型遵从或长程收益;无 UI/状态迁移、merge 权限或 CI 默认变化。精确 scope 的 change-quality、committed premerge 与完整 head 自评在合并前完成。