Repository navigation
fix(benchmark): verify code provenance before checkpoint qualification - #7702
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: 70c8b3fedf7421685c5db84d69f3681545f5ee97;不可变 base:a36e01c32b0a290a96466c766629a0b01850f823。
动机 / Motivation
运行 checkpoint qualification、需要把结果准确归属到源码版本的开发者。
原入口只检查自身目录的 Git head,Python 却可能已从另一工作树加载实现;当前入口会在创建输出和接触 Docker 前拒绝这种混合来源。
正确来源可以继续到原 Docker 边界,错误 pin 或混合导入留下明确拒绝,并且不创建资格输出目录。
本 PR 不交付完整 SForge receiver、Linux 原生运行、模型实验或科学收益,也不改变评测机会、权限和原执行预算。 完整 Docker/native/SForge receiver 资格与长期结果、完整成本仍由既有 joint qualification 路径继续验证。
改动思路 / Approach
源码归属是本地资格入口的不变量;集中复用同一 preflight,比导入尚未核验的 LoopX helper 或复制多套检查更合适。 当前边界只修复 qualification main 的源码归属、文档调用和对应回归,不扩展 Core 决策或执行生命周期。
不改会继续允许错误归属;只记录 Git head 或设置 PYTHONPATH 仍挡不住 cwd 优先级和已缓存模块。这里把原先重复的 Git 检查收敛为同一个本地 helper,再检查实际加载文件,而不是增加通用 controller 或第二个 authority owner。已有 benchmark-toolkit source fence 负责本地与远端 ref 的运行准入,既不核 Python 导入,也不能在信任 LoopX 导入前替代本入口的自检。
Namespace package 的未使用 provider 搜索路径可以保留;真正加载的 foreign member 必须拒绝。初检、adapter 导入后的复检及通过结果前的复检分别守住分配和结果归属,原 provider、guest、阶段期限和清理 owner 不变。
具体改动 / Changes
完整三文件差异为 +172/-8:qualification utility +44/-8,真实子进程测试 +116,文档 +12。没有 Core、App、配额或已保存 capture 变更。
关键代码讲解
- require_source_checkout 先核完整 pin、实际 Git head 和 clean tree,再遍历当前
sys.modules的loopx、benchmark、tests成员。普通文件按物理路径判断;namespace 可保留未使用搜索路径,但外来可执行成员不能蒙混通过。 - main 新增必填
--source-revision。源码拒绝先于输出目录和 Docker;真实 adapter/fixture 导入后再核一次,最终生成 passing result 前仍调用同一检查。source_imports_verified是这次本地观察,不是 native provider、receiver 或研究效果认证。
规范依据为 AGENTS.md,spec_revision:a36e01c32b0a290a96466c766629a0b01850f823。按修改前要求映射:Source-Checkout Python Entry Points 已由真实 Git/Python 来源探针覆盖;Refactor Real-Path Validation 已由实际 main 的正反入口和恢复覆盖;Public And Private Boundary 已由三文件公开边界扫描及合成 fixture 覆盖。新 README 是调用说明,不充当自己的正确性 oracle。
对主干的风险 / Risks
未发现当前阻塞性问题。 独立 17 项测试全部通过,包含 cwd 优先级、缓存 foreign submodule、namespace member、脏树、错误或短 pin 和晚期导入。另通过真实 qualification main 执行同一来源反例:base 在 foreign LoopX 已加载时仍创建输出并走到 Docker 调用边界,独立拒绝 oracle 因而失败;当前 head 在两者之前拒绝。正确来源和修正后的同一未分配输出路径均可继续到原边界。
上述入口探针只适配 Linux/UID 资格值,并在 docker.from_env 处拦住调用;实际 Python import graph、Git 和 main 均执行,未启动 Docker 或模型。另一次未适配的 python -m 错 pin 调用真实退出 1,且无输出目录。这些证据证明来源检查,不冒充 Linux 内核或完整 receiver 验收。
当前标准 premerge 的 5 direct +19 selected 全部通过,零 warning、skip 或 timeout;Ruff 通过。整体 exit 1 来自仍有效的 benchmark_sensitive 人工审阅门,不能写成已具备合并资格。作者此前两项 120 秒 timeout 及后续重跑仍按原运行保留;本次通过没有解释或抹去旧失败,也不证明长期性能稳定。按配置未查询、轮询或等待 CI。
语义与 CI 对齐
新参数和结果 boolean 保持在现有本地开发者资格入口,没有新增共享 actor、权限或状态词汇。遗漏 pin 现在明确拒绝,是已披露的调用变化;普通 worker、source/receiver 的原阶段预算、评测机会与一次结算规则没有变化。相邻重构已采用同一 helper,扩大成 import framework 没有当前必要。
我的整体评价 / Verdict
APPROVE,作为可独立回退的来源归属修复;delivery 判断为 justified_increment。long_horizon 为 preserved:阻止错误资格归属,保留原有后续执行和预算边界;user_experience 为 improved:已有计划中的 pin 可直接传入,错误在分配前可见,不增加确认回合。完整 receiver 和科学收益继续沿既有资格工作推进。
视觉审阅不适用:检查的是 benchmark/tests/qualify_checkpoint_joint.py 的开发者 CLI、导入图和 JSON 资格结果,没有渲染页面变化。 完整 Linux/Docker/native receiver、模型采用和科学收益未在本次运行中验证。
GitHub 当前账号与 PR 作者同属 loopx-agent,因此使用 COMMENTED 自评限制回退;该平台状态不等于正式 GitHub APPROVED,也不授予合并、dismiss 或新的实验权限。
English verdict: APPROVE — 70c8b3f. Independent subprocess and actual-entry base/head probes verify source pinning, mixed-import refusal before output/Docker, clean continuation and recovery; 5 direct/19 selected local checks pass. Full Linux/Docker/native receiver and scientific qualification remain separate, with the benchmark manual hold retained.
Checkpoint qualification could report a checkout's commit while Python actually loaded LoopX or fixture code from another worktree: the current directory precedes
PYTHONPATH, and cached modules survive later path changes.Require an explicit full
--source-revision, verify the clean checkout and loaded implementation origins before output or Docker setup, and repeat the check before issuing a passing result. Namespace packages may retain unused provider search paths; an actual foreign implementation still rejects qualification. The documented invocation includes the new required argument.Validation at
70c8b3fedf7421685c5db84d69f3681545f5ee97:The adjacent refactor reuses one source check at preflight and completion. Full SForge receiver qualification and scientific outcome/cost measurements are not established by these provenance checks. No model job is launched by this change.