Repository navigation
fix(benchmark): rebind checkpoint gateways before native admission - #7697
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
对当前 head 594b0e20a898374c78dc273b57a73f81ae19bdb6 建议通过代码审评:已复现原版恢复失败,并独立验证新接收端能够继续工作;benchmark 边界的人工评审与 merge readiness 仍分别保留。
动机 / Motivation
恢复完整 checkpoint 的运行者会遇到这个问题:新接收端分配了新的凭据网关端口,封存配置仍指向旧端口。 旧版在恢复历史后仍因网关配置不同而拒绝首轮 worker;本次让新接收端在准入前绑定当前启动环境的网关,再通过普通配置校验继续工作。 独立验证已观察到保留源配置、完整会话历史和旧研究证据的新会话能够继续执行,重复准入也不会再次 fork。 本次不交付运行中会话切换、额外预算、完整外部 provider 实验资格或 frontend restore,也不证明模型质量或长程净收益。 真实外部 provider 的完整 SForge 联合生命周期、read-only native 环境及安装采用仍未资格化,沿现有 qualification owner 继续验收。
改动思路 / Approach
让普通 worker 与恢复端复用同一配置 renderer,并把网关例外限制在现有 Host 准入 owner,能修复实际恢复路径而不增加第二套配置规则。 本 PR 只修复新接收端的配置 transport 与准入,当前会话、Goal 权限、机会、冷却和结算仍由原 owner 决定。
恢复端先核对封存源配置与显式选择的 model/effort,再用实际容器内启动环境生成目标配置;只有被选中的既有 custom provider 的 base URL 可以随当前网关变化。所有其他 TOML 值、provider 名称、协议、凭据环境变量、工具和权限继续完整比较。源配置没有被修改,两个完整配置摘要进入原有 transition provenance。
普通配置 writer 仍负责凭据、只读文件、skills 与活动 trial 的固定配置;纯 renderer 不创建目录、不接触凭据。网关省略或非 warm 路径没有隐式开启新行为,也没有新增 Goal 状态、CLI 选项或第二套控制面规则。
具体改动 / Changes
完整 diff 为 8 个文件、398 行增加与 88 行删除:4 个既有 Python provider/Host 模块、3 个测试模块和 README。eaf8478b 到当前 head 仅调整 native qualification fixture;其余七个文件一致。新 fixture 保留原始来源、完整历史、机会、冷却和一次结算断言,同时显式等待工具输出并提供当前 result API 所需 token。
关键代码讲解
codex_settings从普通 writer 提取纯配置生成;普通安装与 warm 接收端调用同一实现。凭据错误顺序及后续配置变更拒绝仍由原 writer 负责。SForgeWorker._install_worker读取当前容器网关,并从普通 worker 的 model、effort、wire 与 web 设置生成配置,避免封存端口与新 worker 各用一套来源。WarmStart._stage在上传前确认生成配置仍匹配显式 model/effort,并验证源摘要和完整配置语义;目标配置及声明按原方式保护,旧来源字节保留。checkpoint_destination_config只排除选中 provider 的 base URL 后比较其他全部 TOML 值;native admit/fork 入口还要求声明的 URL 等于当前启动环境。缺失、外来 route 或权限/协议漂移均不能靠这个例外越过准入。
审评依据是变更前的 benchmark/README.md,固定 revision a36e01c32b0a290a96466c766629a0b01850f823。其中 “Explicit warm worker composition (qualification in progress)” 的源字节、完整历史、独立接收会话及历史证据不继承权力已验证;model_reasoning_effort 的显式选择与其余设置不变,由完整配置比较与负例覆盖,新增加的 route 是已披露的 Host transport 例外;“frontend restore” 按原合同仍为 deferred,不能据此宣称完整前端恢复或研究资格。
对主干的风险 / Risks
最大的风险是把任意 provider/权限变化误当作网关变化,或者在 renderer 提取时改变所有普通 worker。前者通过非选中 provider、wire API、env key、sandbox、声明 model 与当前 route 不匹配等负例拒绝;后者使用同一独立 harness 比较基线与当前 head:30 组完整配置、文件模式、skills/history 及 4 组错误顺序完全一致。活动会话后续改配置仍拒绝。
独立本地验证:PASS 558 项 SDK 测试(0 skipped);PASS 4 个真实 Codex native 用例,版本 0.163.0-alpha.11.1,覆盖网关、准备、模型转换及 native opportunity 联合接续。相同冻结旧 harness 在不可变基线有 2 PASS / 1 FAIL,失败落在原来的配置比较;前一修复 head eaf8478b 3 PASS,当前生产代码不变且四个新用例继续通过。联合 fixture 的 candidate 8、incumbent 7 只是合成反馈,额外机会仍被拒绝。
标准 premerge 的 6 direct + 19 selected 全部 PASS、0 超时;整体 exit 1 来自 benchmark_sensitive 人工评审 hold,未被改写成 merge 通过。最初旧 head 的 helper 导入失败、可选 SDK 未装及 SOCKS 环境缺少 socksio 的失败均保留;修正隔离测试环境后,当前完整 SDK 与 native 路径覆盖了所暴露的配置不变量。作者另报的 read-only native/bubblewrap 和历史 CI 问题没有被本次认定修复;未查询、轮询或等待远端 CI。
网关 URL 一致只证明当前 transport 绑定,不能证明上游 provider 身份。真实外部 provider、Docker 的完整 SForge 联合生命周期、read-only native 系统支持、安装采用和模型效果均为 UNVERIFIED,由现有 qualification owner 继续验收;本地静态 Responses 不替代这些证据。该修复没有改 scoring、任务语义、权限、预算和通用 Goal/Task 规则。
我的整体评价 / Verdict
这是 justified_increment:解决真实的新接收端恢复阻塞,边界可独立回滚,已有 renderer 和 Host owner 足够,无需另建配置或状态体系。long_horizon 的证据/约束保持,恢复可用性有本地实证;完整长程效果与总成本收益仍未知。user_experience 在既有 CLI/Host 恢复任务上改善。已检查 SForge 安装、WarmStart、Codex Host 和 README 的改动范围;没有渲染页面、设置控件或布局变更,无需截图。
规模与问题相称,已应用有价值的同域重构;省略 route 的兼容路径和既有持久化 provenance 应保留。语义决策复用现有词汇及 owner;没有用 substring 分类,也没有把文档指导包装成新权力。审评通过不授予合并、安装或实验运行权限,精确 head 的 merge readiness 仍须独立核验。
English verdict: APPROVE — current-head local recovery and parity evidence support the bounded transport fix; broader qualification and merge authority remain separate.
|
追加资格结果(对应源代码 head
目前仅增加上述工程资格证据。完整 SDK 正例、context-on 接收与差分的完整成本/成果收益仍未资格化;未据此升级真实研究组或改变评测机会。失败记录保留。Full SDK acceptance remains unqualified. |
Goal And Delivered Outcome
完整 checkpoint 的新 SForge 接收端会分配新的凭据网关端口,但封存的 Codex 配置仍指向旧端口。原生会话恢复后,第一轮普通 worker 因配置不一致而拒绝执行。本修复在原生会话准入前,由宿主使用普通 worker 的同一配置 renderer 绑定当前网关地址,保留封存源配置和完整历史。
main。Author Declaration
benchmark/README.md的 checkpoint continuation / model transition 合同,基线a36e01c32b0a290a96466c766629a0b01850f823;新增宿主网关重绑定行为以本 PR 的复现与修复请求为依据,并在同一文档明确。loopx/hosts/codex_checkpoint.pycheckpoint_destination_config,admit_warm_sessioncodex_settings,WarmStart.stageScope And Continuation
完成本次 gateway/config 恢复修复。宿主在现有 transition provenance 中保留完整 source/destination 配置摘要和 session profile;网关 URL 本身不证明上游 provider 身份,上游一致性仍由实验准入独立核验。已有 CLI/Host 恢复入口继续承接,未新增用户选项。
完整 SForge custom-provider 联合接续已补实际 SDK/Docker 正负资格:本地确定性 Responses 服务、Codex CLI 0.162.1、普通 full-checkpoint 声明与当前源关联复盘。测试显式配置 VM host 映射;默认 Colima 路由、真实外部 provider 的付费模型任务、独立于研究 replan 的安全捕获及运行中总期限修订仍需各自验证。本 PR 不宣称研究完成、真实研究组采用或效果收益。
Validation
594b0e20a898374c78dc273b57a73f81ae19bdb6.test_checkpoint_model_transition.py,test_sforge_warm_start.py,test_shared_codex_runtime.py,test_sforge_runtime.py: 558 passed, 0 skippedmanual_review_required(exit 1),benchmark 边界需精确 head 人工评审。首次缺依赖的失败已按原要求补齐后重跑,未提高超时预算a36e01c3和前一提交eaf8478b均失败:隔离 native 可执行环境缺少 system/bundled bubblewrap,工具输出未消费保留证据;较早的临时 home 还出现 helper alias/argv 拒绝。该环境边界未资格化,本次实际 benchmark profile 的danger-full-access四个 native 用例通过;read-only 环境资格仍缺失新增联合用例沿原测试保留来源字节、native fork、Goal/Todo 采用、公开反馈、机会/冷却及一次结算断言。资格 fixture 同时补上当前原生 result API 必需的 token,并显式等待工具输出;首次观察到的“原始 stdout 完整、当前模型请求未见保留证据”未计为通过,修正后仍核真实模型输入。执行器明确核对实际导入的源码位置。
旧提交
eaf8478b的远端 CI 存在 Windows self-update 4 项断言失败,以及 dashboard lens switch 超过冻结 1s 门槛的失败;新提交 CI 独立运行,远端检查和精确 head 评审仍是交付 hold。windows-powershell仍失败;本次未证明它与基线等价,未据此解除验证 hold。Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
S4 runtime recovery / S11 可解释的长程实验;本次只交付可独立回滚的配置 transport 修复。
Shared-authority RFC fixture impact
N/A:未改变 Goal authority-store 的 provider 选择、路由或持久化,也未迁移 compatibility projection;改动归既有 Codex Host 的凭据网关 transport。
Boundary Checklist