Repository navigation
Isolate native receiver preflight before starting benchmark solver time - #8176
loopx-agent wants to merge 1 commit into
Conversation
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
APPROVE;本次完整评审未发现阻塞问题。精确 head:e9beb144a6f9984c9cb2129bf1d52690fa446d2b,实际 merge base:d602248c53298f256ea72fe75091a39f35c6ae4b。
运行原生 ChatGPT 登录的 SForge LoopX worker 的操作者。接收端登录或代理不可用时,旧入口仍建立求解截止并进入调度;新入口先观察原生账户与额度路由,失败后保留原状态并退出。已验证三种 LoopX profile 的失败均发生在计时与调度之前,健康接收端仍继续;没有模型调用或旧请求重放。不恢复已提交但结果未知的旧 Turn,不变更评分、实验条件、期限、账户选择或重试授权。新 runner 在真实接收端的完整安装、续跑和长程收益仍由既有运行负责人单独验收。
改动思路 / Approach
在已有 SForge 接收端命令入口复用原生 stdio transport,避免引入第二份账户、调度或恢复状态;一次启动观察与求解计时分工明确。本 PR 仅交付新启动的接收端路径预检;不接管旧 Turn 的恢复,也不改变 official/single 或自定义 API 的执行入口。
入口没有重新实现登录或恢复控制器。SForgeWorker.format_run_cmd 保留 official/single 的早返回以及自定义 API 的原路径,仅在原生登录的 LoopX 分支给既有 clock/scheduler 命令加一次检查。检查复用 native_checkpoint_reader 的初始化、stdio 请求和清理。既有 codex_auth._native_refresh 会请求刷新凭证,解决的是可信宿主授权,不能拿来替代此次接收端观察;从宿主读取登录文件也不能证明远端 workspace route 可用。
具体改动 / Changes
规范依据:benchmark/runtime/RUNTIME.md,spec_revision d602248c53298f256ea72fe75091a39f35c6ae4b。RUNTIME.md:406 的独立 trial home/config 边界已保持;RUNTIME.md:583 的 setup 不调用模型、原 phase deadline 和 scheduler 资格分别验证。新增文档说明启动拒绝的边界,不能倒过来把预检成功解释为旧 Turn 已恢复。
关键代码讲解
SForgeWorker.format_run_cmd(benchmark/runtime/sforge.py:419)先处理原 profile 及 API 选择,把 module 调用放在既有持久化 deadline 之前;没有增加每次 heartbeat 的查询、求解器超时或新账户选择。check_native_receiver(benchmark/runtime/codex_readiness.py:16)用LOOPX_CODEX_HOME指向原 trial,account/read明确refreshToken=false,随后读取额度路由。25 秒是这次一次性观察的总 I/O 预算;后续请求使用剩余额度,不是给每项请求重新发一整段预算。main(同文件39行)只把成功/失败、局部 code 和inference_invoked=false写到 stdout;不转发可能含账户或私有路由的异常。失败 exit1 配合 shellset -e,阻止后面的计时和 scheduler。
完整范围是5个文件:两处生产代码 +62/-1、两处测试 +133、文档 +11。局部 Python 模块适配已有原生 transport,没有第二个 quota、调度、凭证或 pending journal owner;错误码保持在 runner 的局部诊断边界。
对主干的风险 / Risks
PASS:相同准备条件下,immutable base 的既有 SForge runtime 324 项通过;head 的完整相关集合332项通过,0 skipped,覆盖 native-goal、heartbeat-resume、heartbeat-explore、official/single 和自定义 API 隔离。Ruff 对全部变更 Python 文件通过;原生 premerge 的5项 direct和9项 selected 均已执行且无失败,语义 advisory 与完整选定语义检查通过。
独立的同条件 shell 对照使用真实 format_run_cmd 生成入口,控制账户 RPC、scheduler sentinel 和 timeout fixture:base 的三种拒绝场景仍创建 deadline 并进入 scheduler,健康三种正常;head 拒绝三种均 exit1,deadline/start marker/scheduler 均未产生,健康三种仍成功。两边原 auth/pending 字节不变;调用序列只含 initialize、initialized、account/read 与健康时的 rateLimits/read。另用真实本机 Codex app-server 和空的隔离 home 跑模块,得到脱敏拒绝、空 stderr,没有模型请求。这些证据证明入口和原生传输失败边界,不证明远端已登录账户的长期可用性或 Linux deadline 精度。
初次隔离依赖缺少 SOCKS transport 的 socksio:base/head 分别85/88个用例在同一 httpx 初始化处失败。补齐两个隔离环境的 httpx[socks] 后重跑上述完整集合,保留原失败,不修改源码或断言。最初自建 shell fixture 在 macOS 缺少 timeout;修复该测试环境并固定 seeded-todo 后重新做两侧完整对照,未用第一次不完整结果认证健康路径。
语义与 CI 对齐
局部诊断复用现有 native account/profile 词义,不按错误 prose 推断账户或工作状态。新的启动拒绝是明确披露的行为改变;无新默认开启的模型、hook 或安装指令。wait_for_ci=false,未查询、轮询或等待 CI。premerge 整体 exit1 仍为 manual_review_required,原因是 benchmark_sensitive 要求维护者审阅后才能自合并;它没有执行检查失败,也不由本次代码批准解除。 独立 exact-scope change-quality 回执亦保留 fail:唯一 blocker 为同一 premerge 维护者 gate,未将退出1改写为通过。
我的整体评价 / Verdict
该切片有独立价值,属于 justified_increment。long_horizon 与 user_experience 在此启动边界 improved:失败可以在消耗新求解时段之前显式暴露,原请求与恢复职责保留,没有增加用户确认轮次。未验证远端完整安装/续跑、历史卡住根因、模型实际采用和净成本收益;不将332项通过或一次真实原生拒绝当成这些结论。
代码与问题规模相称,复用现有 transport、删除重复账户/调度状态比新建控制器更合适。无 rendered presentation 改变,visual_review 不适用。保留维护者 merge hold;本评审未合并、安装或启动实验。
English verdict: APPROVE e9beb14; receiver rejection precedes solver timing across the three LoopX profiles, with 332 passing runtime tests and no inference or pending-work replay. The maintainer merge hold remains.
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
e9beb14 to
fbdc2fb
Compare
Benchmark workers could start their solver clock before verifying the native account and receiver route. The preflight now uses the existing Codex stdio owner to read account and rate-limit availability before scheduling, without a model request or credential refresh. Its temporary private Codex home copies only the selected auth/config, so installed skills and live trial profiles remain unchanged.
Native Goal packaging also uses a dependency-free checkpoint reader in the shared stdio transport; the historical host import remains compatible. Official/plain and custom API execution keep their existing paths. This is an entrypoint check, not per-heartbeat polling, and does not clear pending requests, replay unknown turns or adjust budgets.
Validation on
fbdc2fb8d7c7e5592c364c29662b06e8882bd995: independent focused receiver/host/runner regression run 224 passed, 93 skipped (skips require the unavailable SForge/Harbor environment in that checkout). A frozen Native Goal source archive imports successfully with an empty environment and isolated Python, covering the packaged dependency closure. Earlier native receiver experiments verified available/unavailable proxy routes without model calls; those are supporting evidence, not a complete installation or resumed-run qualification of this head.The change remains a Python transport adapter, with no new control-plane state machine. Full Linux packaged launch and live continuation qualification remain outstanding before claiming operational recovery or score benefit.