Skip to content

feat(benchmark): add an independent native Claude Code runner - #7082

Merged
huangruiteng merged 1 commit into
mainfrom
codex/claude-stop-adapter-20261023
Nov 3, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/claude-stop-adapter-20261023

Conversation

@songoow

@songoow songoow commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Goal and current implementation

Add an explicit native Claude Code entrypoint for file-submission research trials. The operator supplies a versioned, SHA-256-pinned binary. The adapter reuses SForge's native Stop hook, session continuation, submission, grading and deadline; it adds no LoopX Goal/Todo controller or cohort launcher.

Current repair · 2026-11-04

Commit: 59839de7e915ddde397344c034bad13a5370cba9. Integrated main 576b8a6f9839037be50d369fbc56fbf1badae90d.

  • Guard the optional SForge imports with pytest.importorskip("sforge"). Without the provider, ordinary benchmark test collection succeeds instead of aborting.
  • Reuse the pinned provider's ordinary DockerBackend and complete task-file installer. Remove the prompt-only copy override: the production installer already ran after that override and replaced its 0600 mode with 0644.
  • State the actual permission contract explicitly. The pinned provider defines generated task files as non-secret and installs them at 0644 (0755 for executable scripts); this runner does not promise prompt confidentiality between container users. General private uploads retain their original restricted modes. The Docker fixture now calls the actual task-file installer and checks final permissions, alongside unrelated-private-file rejection for agent and nobody.
  • Native binary digest/version checks, model/effort pinning, Stop-hook readability under umask 077 and native continuation remain in their existing owners.

Provider basis: _install_task_file at upstream 118f9257d39c71d0805bb5b9cd4eb85d13a1e6d2. The existing nonfinite compatibility patch yields source commit cedd08b962f6eae25b0825bb47a7031626d13dc2; this repair does not change that frozen asset or the source-selection owner. The old 0600 promise is superseded, not claimed as a preserved guarantee.

Validation and remaining qualification

  • Reproduced the original absent-provider ModuleNotFoundError before the fix.
  • Ordinary environment without SForge: 1,502 benchmark tests collected successfully; the optional module is skipped before provider imports.
  • With the pinned provider: 3 PASS / 1 SKIP. The skipped case requires real Docker, unavailable in this environment. This is not a current-head container-permission pass.
  • Rebased standard premerge: all 19 selected checks passed with zero failures; the expected benchmark_sensitive manual hold remains and is covered by the maintainer's explicit self-merge authorization.
  • Ruff, Python compilation, PR-diff whitespace, bilingual RFC and public-boundary checks passed.
  • The integration merge inherits two whitespace findings in unchanged main test files; neither is in this PR's diff. No whitespace gate or budget was changed.
  • Existing source-backed review verified that the provider's actual installation order overwrote the former prompt override. The revised fixture covers that complete helper rather than only its copy call.

Full synthetic Docker execution/scoring success, live native-model streaming/continuation, gateway accounting, long-run reliability, wheel qualification and current CI/independent review remain separate qualification work. Earlier evidence at 81d84aaa67385730992c1262cabef93934883236 remains historical in the discussion and is not reported as a rerun on this head. No model task, paid execution, score improvement or merge is claimed.

Scope and boundaries

This is an opt-in research transport. Default runner behavior is unchanged. The provider retains task, submission, scoring and execution authority; native effort values remain local to this adapter. Raw logs, credentials and private experiment state are excluded. The obsolete duplicate prompt-permission override is removed in favor of the current provider owner; no new shared protocol or permission selector is introduced.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T04:08:27.992576Z 372d7d8 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2b306c3042

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread benchmark/tests/test_native_claude.py Resolved

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

REQUEST_CHANGES at 81d84aaa67385730992c1262cabef93934883236。 有一项已独立复现的 P1:未选择此 runner、未安装可选 SForge 的常规测试环境无法完成收集。已读取现有机器人提出的同一问题;以下是完整精确头审查及独立验证,不另发重复 inline。

动机

需要用独立原生 Claude Code 执行文件提交研究试验的操作者。目前既有 runner 没有这个明确固定二进制版本的入口;本提案复用原生会话、Stop hook 和 SForge 计分,减少为新宿主另建执行循环的成本。预期用户能显式选定模型、版本和预算,运行一次隔离试验并读取真实执行与评分记录。该入口仍是研究 transport,不能据此声称长期可靠性或 benchmark 收益,也不应影响未选择它的开发者。

已有入口的缺口值得补齐;独立 provider 适配比再建 LoopX Goal 控制器更合适。不过当前头把可选运行环境变成所有测试收集者的隐性必需条件,实际扩大了影响范围。这个回归需要先修复,不能因为四项配置了依赖的测试通过而忽略。

改动思路

现有 source bootstrap 冻结 SForge,现有 clean-revision 检查绑定研究源码;NativeClaudeWorker 只负责本地二进制校验、上传、权限与模型参数。原生 Claude/SForge 继续拥有会话恢复、Stop 协议、工具、提交、评分和执行期限,没有第二套编排状态。固定prompt之外的上传沿用原模式;没有增加通用chmod或扩展数据读取范围。Python 放在已有 provider transport 有明确理由,不需要为了本次适配改写通用控制平面。

已重新检查17:02的新提交:普通CLI改用一个仅处理固定prompt目标的NativeClaudeDockerBackend,上传后归agent所有并保持0600。相关源码/调用和跨UID测试已重验;旧默认依赖阻断仍存在。

当前 PR 只提供独立研究 transport、原生二进制/参数适配和对应测试文档;既有 runner 与实验保持原 owner。

本轮最强反例是“功能显式选择,却在关闭路径破坏普通测试”。同时检查了实际 Docker 安装与普通 CLI 的失败记录。下表描述当前源码和本轮观察,不能当作真实模型完成了任务:

输入/边界 实际观察
未安装 SForge,收集 benchmark/tests 基线退出0;当前头退出2,新增模块导入失败
显式冻结 SForge,隔离 Docker,umask077 四项测试通过,agent 可以执行 hook 和提交入口
普通 CLI、合成可执行文件、真实 Docker/provider 已实际到达执行并保留 unknown/harness_error,CLI退出1;完整成功评分链未取得

具体改动

规格依据为 docs/architecture/rfcs/long-horizon-harness-benchmark-research-program-v0.md,不可变版本 e6a862958e219c111c0830074044b48c47e2a7aa。按 C0: Reproduction and adapter fidelity,固定原生 runner、生命周期与结果边界是资格要求;当前二进制/权限 seam 有实证,完整原生运行资格仍有缺口。按 6.5 Benchmark integrity and anti-cheating,计分、隐藏材料和权限归原生 owner;本轮仅使用合成任务、合成二进制和独立 disposable 环境,无模型调用或真实研究试验。另读同版本 benchmark/README.md 的可复用 provider/原生权威边界,不能将实验接入改成默认依赖。

关键代码讲解

  • NativeClaudeWorker.__init__/_verify_binary 要求明确模型、局部 effort、endpoint/credential、digest/version,再校验实际文件;install 前再次检查,避免文件替换后仍沿用旧声明。漂移反例在复制前拒绝。
  • augment_env/format_run_cmd 将辅助模型别名绑定同一选择,并在初次与 continue 命令都追加 effort。这里复用 provider 的命令和联网工具限制;配置相等仍不证明网关按该模型实际计费。
  • install_stop_hook 在容器内以 agent 验证 digest/version,再复用原 Stop hook;显式0755修复私有umask留下的脚本读取权限,settings保持0600。实际上传测试通过,未把宿主或个人 Claude 设置改成持续执行。
  • main 经 source lock、runner pin、文件任务校验进入原生 run_agent,保存 claude-result,要求实际 runtime、complete grading 和可接受 execution status 才返回成功。没有仅以评分存在判完成。

对主干的风险

[P1] 可选 provider 的无条件 import 破坏默认测试收集。 新增测试12–13行 在 skip 标记执行之前导入 sforge 和适配器。项目 test extra 不包含 SForge;本地在新头与基线使用相同 uv run --extra test python -m pytest --collect-only -q benchmark/tests 在不可变基线收集1101项并退出0,当前头收集同一批后因 ModuleNotFoundError: No module named 'sforge' 退出2。仓库 workflow 源码明确对整个 collection 分片,所以未启用新 runner 也受影响。这里没有查询、等待或推断远端 CI 状态。

最小修复是采用相邻可选 provider 测试的 pytest.importorskip("sforge"),放在两次 provider 导入之前;保留显式提供依赖时的四项测试。重验上述常规收集和显式 SForge/Docker 测试,不能通过全局安装依赖、排除整目录或删除有效回归来掩盖隔离失败。已有 同一 inline 保留,不需要重复留言。

当前新头的四项显式 provider 测试重新通过,包含不同宿主/容器UID下prompt可读、unrelated-private仍拒绝、nobody拒绝;原生参数、hook与digest测试同时保留。真实 CLI help 的原检查对应未变的参数定义。标准本地 premerge 的4项直接检查、compile、10项catalog、8项risk及公私边界均通过,但保留原生 benchmark_sensitive 人工 hold,整体不称可合并。旧头2b306c的更完整本地 CLI/Docker 探针在 provider e8d10a887d5173382d484afd4b3f2f2e86e8a206 的 Docker SDK stream.close 遇到 ENOTCONN,保存 unknown/harness_error 并返回1;这是未改动的外部 provider 路径,本轮没有伪装修复或归罪给新适配器。首次 Docker build 的缺失本地内容摘要也保留,改用独立容器准备环境后才取得这条失败观察。成功评分、resume与deadline全链本轮独立资格仍未知,作者的模型/Goal/Plan声明没有被冒充为我的执行。新头没有修复该外部stream owner,本次不继承旧头运行或批准。

我的整体评价

当前请求修改。long_horizon 为 not_yet_proven:适配边界与失败保存合理,但成功的完整运行及续作未独立取得;user_experience 为 regression:未选择功能的开发者仍被阻断测试收集。局部 effort 词汇留在 provider 内,未新增共享状态或通用权限协议;主体机制与问题相称,最有价值的有界修正是恢复可选依赖隔离。需要依照修复后的完整新头重新判断,原生评分和长期收益分开证明。

已检查研究 CLI、文档和测试入口;此 PR 没有渲染页面变更,视觉评审不适用。本轮未独立验证真实 Claude 模型、完整评分成功、长期可靠性或安装后的产品界面。此次审查没有合并、安装共享 CLI、运行付费模型或启动研究 cohort。

English verdict: REQUEST_CHANGES at 81d84aaa67385730992c1262cabef93934883236. Default collection passes on the base but fails on the head because optional SForge imports are unconditional. Four explicit-provider/Docker tests pass. The full synthetic CLI path retains a truthful unknown failure from unchanged provider streaming; successful end-to-end qualification is not claimed. Restore optional-dependency isolation and rerun both environments.

@songoow
songoow marked this pull request as draft October 22, 2026 17:22
@songoow
songoow marked this pull request as ready for review November 3, 2026 04:06
@mergify

mergify Bot commented Nov 3, 2026

Copy link
Copy Markdown

This pull request has merge conflicts with main and cannot be merged
until they are resolved. Please rebase or merge the base branch, @songoow.

Choose the remote for the base repository, not an out-of-date fork.
For a fork clone, first inspect git remote -v; upstream must point
to https://github.com/loopx-project/loopx.git. If it is absent, add it
with git remote add upstream https://github.com/loopx-project/loopx.git.
Then run:

git fetch upstream
git rebase upstream/main
# Resolve each conflict, git add the resolved files, then git rebase --continue.
git push --force-with-lease origin HEAD

For a same-repository clone whose origin points to
https://github.com/loopx-project/loopx.git, use origin instead of
upstream for fetch/rebase. If you prefer merging the base, use
git merge <base-remote>/main and push normally.

Keep the DCO Signed-off-by trailer on every commit when you rebase.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@mergify mergify Bot added the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 3, 2026
loopx-agent
loopx-agent previously approved these changes Nov 3, 2026

@loopx-agent loopx-agent left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

动机 / Motivation

需要显式选择原生 Claude Code、固定二进制版本并运行隔离文件提交试验的研究操作者。
此前没有这个独立的离线二进制适配入口,上一评审头还在未安装可选 SForge 时阻断普通测试收集;新头提供显式入口,并让未选择它的开发者正常收集测试。
本轮验证了固定 provider 下的二进制漂移拒绝、初次及 continue 参数、原生 hook 与提交脚本可执行性,以及真实 Docker 中不同 UID 的文件权限;默认无 SForge 的收集与基线一致。
不认证真实 Claude 模型执行、完整提交评分成功、原生 Goal/Plan、长期试验可靠性或效果提升,也不授予运行试验和合并权限。
完整 C0 运行、真实模型身份与计费、成功评分、会话续作和长期收益仍待研究维护者在获授权的原生试验中资格化;当前仅交付可独立验证的 transport。

改动思路 / Approach

既有 SForge 拥有工具、会话、Stop、恢复、执行期限和计分;本地适配仅固定可执行文件与参数、恢复必需的脚本权限,避免另建执行或评分 owner。
当前 PR 的边界是显式研究入口和原生二进制安装 transport,普通产品、依赖、CI 配置和默认测试路径保持原 owner。
主入口复用既有 source bootstrap 和 clean-revision 检查,NativeClaudeWorker 继承原生 ClaudeCodeAgent。调用方只需在一次显式命令中给出已有模型、版本、digest 和预算;这些是决定具体运行的必要输入,不增加额外确认轮次。provider 是否安装、文档是否可见,都不能自动启动试验。

原提案的 prompt 专用上传 override 没有形成承诺的0600边界:原生 _install_task_file 随后会设为0644。当前使用普通 DockerBackend,并明确生成的任务文件不得含秘密;实际 Docker 证明任务可读,其他私有上传仍受原权限限制。这个有界简化移除了无效的第二个写文件 owner。

具体改动 / Changes

精确 head 372d7d8dfbe508551a265c65ac5dd22a4a546246,公共祖先 ec5c9702c79cbc68ab994b18031e9069b0935b59,完整五文件 +373/-0。规范依据 docs/architecture/rfcs/long-horizon-harness-benchmark-research-program-v0.md,不可变版本 ec5c9702c79cbc68ab994b18031e9069b0935b59;同时读取同版本 benchmark/README.md 的 engineering build map。

C0 — deferred: 复现与 adapter fidelity 要求仍由完整原生运行资格负责;本次安装、参数与权限 transport 有独立实证,真实模型、成功评分和续作尚未资格化,由既有研究维护者在获授权后完成,不能提前宣称长期试验可用。

6.5 — implemented,限定本次变更边界: 没有修改任务、评分、提交机会或 native Stop/resume owner;二进制、任务内容与工件权限由固定 provider 和调用方声明约束。实际验证使用合成二进制和隔离容器,没有模型调用、私有题目或研究提交。

关键代码讲解

  • NativeClaudeWorker._verify_binary:reject file drift before copy。 在初始化和安装前重新计算实际文件 digest,声明值与实际字节不符时拒绝,防止预检后替换文件仍被采用。
  • NativeClaudeWorker.augment_env / format_run_cmd:pin aliases and effort for initial and continue。 将辅助模型别名绑定同一模型,并在初次与 continue 命令追加相同 effort;只证明参数运输,不证明服务端实际模型或计费。
  • NativeClaudeWorker.install_stop_hook:agent byte/version readback and native hook permissions。 上传后以 agent 身份核对 digest/version,再安装原生 Stop hook;只修正固定 executable/hook/submit 的0755和 settings 的0600,检查实际可执行、可读,保留其他文件权限。
  • main:explicit pins/task scope, native runner and truthful result/exit。 校验 runner/task/budget 后调用普通 native run_agent,保留原超时、恢复、提交与评分;保存真实 result,只有实际 runtime、complete grading 与允许的 execution status 才返回0。此成功分支的真实模型全链未在本轮执行。

对主干的风险 / Risks

上一评审的阻断已独立复现并验证修复。旧 81d84aaa67385730992c1262cabef93934883236 测试源在当前同一无 SForge 环境收集退出2,错误为 ModuleNotFoundError;新头先 importorskip 再导入 provider。以同一 Python3.12.15/pytest9.1.1 在当前基线与新头收集,1488 个测试 ID 和顺序完全一致。最初两个环境的 pytest 版本不同导致自动参数 ID 不同,不能用那次直接比较证明一致;这里使用的是修正环境后的完整 ID 对比。

显式固定 SForge 的四项测试全部 PASS、零 skip,包含真实 Docker、不同宿主/容器 UID、umask077、替换 binary 拒绝和 unrelated-private/nobody 拒绝。Ruff、changed-Python compile、双语校验与公私边界 PASS。核心 loopx、apps、packages、workflow 和 pyproject 的完整 Git 对象与基线相同;没有把 provider 变成普通开发者的新依赖。

原生 premerge 仍 FAIL:5项 direct PASS、19项 selected 中 lifecycle smoke 在读取 Markdown 投影的 evidence 时 KeyError,raw maintainability ratchet 也有 advisory FAIL,benchmark_sensitive 人工 hold 保留。使用同一原生 canary 隔离环境与解释器,在公共祖先和新头取得完整相同失败,除 checkout 前缀外未归一化;实际 domain gate 已转为 done,失败点是未改变的旧投影读取。整个产品树、相关 smoke、runner、projection 均未改变,故判为既存且与此 transport 无关,不据此制造新的代码 finding。严格 CQR 将继续记录 required FAIL;本次不把 premerge 或可合并状态记为通过。不读取、等待或轮询远端 CI。

语义与 CI 对齐

局部 CLAUDE_EFFORTS 和 native status 比较留在 provider 内,不创建通用状态或 peer 权限协议。默认关闭路径经实际收集与完整产品树对比验证;显式运行仍受原生权限和期限约束。当前 source 与 main 存在 merge conflict;发布后的只读 approval-closeout 为 clear,raw reviewDecision 为 APPROVED,没有有效 blocking review,旧 REQUEST_CHANGES 保留为历史。这里不 rebase、dismiss 或合并。模型身份、完整成功评分和长期收益的未知项不能由上述测试数量代替。

我的整体评价 / Verdict

APPROVE 当前 head 的有界 transport 增量。 problem_context 为 justified_increment;long_horizon 与 user_experience 在本次边界判为 preserved:保留原生生命周期、恢复普通贡献者的关闭路径,同时没有声称完整模型任务已经成功。机制与安装/隔离问题相称;复用原 owner,移除被后续 native installer 覆盖的 prompt override 是已应用的有界简化,不需要另建通用框架。

已检查 benchmark 研究 CLI、运行文档与测试入口;本次没有渲染页面变更,视觉评审不适用。
真实模型、成功评分全链、长期会话与安装后产品界面未独立资格化。
完整 C0 运行、真实模型身份与计费、成功评分、会话续作和长期收益仍待研究维护者在获授权的原生试验中资格化;当前仅交付可独立验证的 transport。
严格 CQR、premerge 与 benchmark hold 保持独立,approval-closeout 已 clear,merge conflict 仍需维护者处理;这个代码结论不授予合并、安装或运行试验的权限。

English verdict: APPROVE at 372d7d8dfbe508551a265c65ac5dd22a4a546246 for the bounded native transport. Default collection matches the base and all four explicit-provider tests, including real Docker, pass. Full C0/model/grading qualification remains unverified; premerge/CQR and merge-conflict holds remain; approval closeout is clear.

Rebuilt the PR on current main while preserving its opt-in provider boundary, native Stop-hook ownership, pinned binary checks, and explicit task-file permission contract.

Co-authored-by: song <liusongstep@gmail.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
@huangruiteng
huangruiteng force-pushed the codex/claude-stop-adapter-20261023 branch from 372d7d8 to 59839de Compare November 3, 2026 17:15
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 3, 2026

@huangruiteng huangruiteng left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent · GPT-5 · OpenAI · self_reported

动机 / Motivation

需要显式选择原生 Claude Code、固定二进制版本并运行隔离文件提交试验的研究操作者,原先没有可复用、可审计的离线二进制入口。研究入口若自行另建 Goal、Todo、提交或评分循环,会形成第二个执行 owner;若直接依赖可选 SForge,则普通开发者在未安装该 provider 时连测试收集都会失败。

这个 PR 让操作者用一次显式命令交付既有模型、版本、摘要、任务和预算,并复用 SForge 的原生 Stop hook、会话续接、提交、评分与期限。可观察结果是:明确输入的二进制在复制前后都会校验,初始与 resume 使用同一模型和 effort,原生 hook/submit 对容器内 agent 可读可执行,普通 benchmark 收集不选择该入口时与原基线完全一致。

本轮边界只覆盖可由合成二进制和冻结 provider 独立验证的 transport,不认证真实 Claude 模型执行、成功评分、计费、长期收益或安装后的产品界面。完整 C0 资格、真实 Docker 权限链、成功评分与 session resume 仍是剩余缺口,由获授权的研究维护者在真实原生 trial 中完成。

需要运行隔离原生 Claude 文件提交试验的研究操作者,以及未安装 SForge 的普通 benchmark 开发者和测试收集者。改动前,未安装 SForge 的开发者收集 benchmark tests 会因无条件 import 退出 2,且研究操作者缺少固定 binary 的统一入口;改动后,显式 runner 在复制前后校验 binary、复用冻结 provider 生命周期,而不选择入口时 collection 与 base 保持相同 1,502 个测试 ID。合成 binary 的 digest drift 会被拒绝,模型与 effort 会同时进入初始和 resume 命令,原生 Stop hook transport 可执行,普通 benchmark collection 保持 parity,provider result 被保存且只有完整 grading/有效 runtime 才返回成功。不新增默认 runner、不调度 cohort、不修改任务语义、评分、提交机会或隐藏材料,不认证真实模型长期收益,不安装到普通个人 Claude settings。真实 Docker task-file 权限、真实模型 stream/tool/Stop 行为、成功评分、gateway accounting、session resume 和长期稳定性还没有当前环境 PASS。

改动思路 / Approach

入口是 python -m benchmark.edgebench.claude_run。它在 import provider 之前让既有 bootstrap() 冻结并断言 SForge source,再由 main() 校验 runner revision、任务身份、资源预算与 file-submission 类型。决定模型、会话、工具、提交、评分和恢复的 owner 仍是冻结的 SForge;新增的 NativeClaudeWorker 只拥有 provider I/O 中的二进制、环境参数和安装后读回,不创建 LoopX 控制面状态。

正向路径是:调用方显式提供 binary/digest/version → NativeClaudeWorker 先校验宿主文件 → run_agent 创建和启动隔离容器 → worker 安装并读回同字节的 binary/version → 原生 Stop hook 与 submit 获得所需执行权限 → provider 运行、续接、提交和评分 → 入口写出带 provider source receipt 的 claude-result.json。失败或 retry 仍归 provider;入口不会把被 provider 捕获的 launch failure 转成成功。

反例路径同样重要:没有 SForge 时,测试模块在 provider import 之前 importorskip,不改变未选择入口的普通收集;binary 在构造后、安装前被替换时,第二次 digest 校验拒绝继续;原 prompt-only 上传 override 已被删除,因为 provider 的 task-file installer 随后会把非秘密任务文件设为 0644。当前 PR 边界是“显式研究 transport”,不是新的默认 runner、评分策略或 cohort launcher;在 benchmark/tests、benchmark/edgebench/claude_run.py 和 benchmark/runtime/sforge_claude.py 中以较小、可逆的增量交付。

架构判断的边界是:The explicit CLI is a research provider IO seam, not a new default control-plane policy; provider lifecycle and scoring remain the authoritative owner. Deliver the explicit native transport and diagnostic receipts only; defer full C0, live Docker, model, grading and long-run qualification to the authorized research path.

具体改动 / Changes

精确 head 59839de7e915ddde397344c034bad13a5370cba9,相对 base 576b8a6f9839037be50d369fbc56fbf1badae90d 为五文件 +373/-0:production code 188 行、tests 111 行、docs 74 行,没有 generated 或 mechanical move。规范依据是 docs/architecture/rfcs/long-horizon-harness-benchmark-research-program-v0.md,不可变版本 576b8a6f9839037be50d369fbc56fbf1badae90d。

C0 — deferred: 完整原生生运行必须证明在固定任务语义下可以 provision、execute、grade 和 reduce;本次只证明了二进制/参数/安装 transport,真实模型、成功评分、session resume 和长期稳定性尚未资格化。该剩余缺口由 benchmark/runtime/NATIVE_CLAUDE.md 明确为真实 trial 的前置条件,不提前冒充完成。

6.5 — implemented,限定本次运行边界: 没有修改隐藏材料、verifier、提交机会、评分或权限策略;任务文件被明确标为非秘密,普通 private upload 仍保留 provider 限制。验证只使用合成二进制与隔离 fixture,没有访问隐藏答案、真实题目或私有研究数据。

关键代码讲解

  • NativeClaudeWorker._verify_binary 在构造和安装前重算实际文件 SHA-256;声明值与当前字节不符时拒绝,避免预检后替换的 binary 被使用。输入是 file drift,输出是 ValueError,没有容器副作用。
  • NativeClaudeWorker.augment_env / format_run_cmd 把 native small-model aliases 绑定到选定模型,并在初次与 --continue 命令都传递同一 effort;这是 provider 参数运输,不证明网关实际计费或 provider 身份。
  • NativeClaudeWorker.install_stop_hook 复制、chmod、以 agent 身份读回 digest/version,再设置原生 hook、submit 和 settings 的权限;失败由异常返回给 provider 的安装阶段,最终写入 claude-install.json 作为安装 receipt。
  • main 校验 runner/task/budget,调用 run_agent 并保存真实 result;只有实际 runtime、grading_status == complete 和可接受的 execution status 才返回 0。成功分支的真实模型全链本轮未执行。

对主干的风险 / Risks

没有发现当前 head 的 blocking finding。最强回归场景是“新增研究入口意外成为未选择开发者的必需依赖”;当前用 pytest.importorskip("sforge") 修复了旧头的 collection 回归,并以同一 Python/pytest 环境在当前 base 与 head 收集到完全相同的 1,502 个测试 ID 和顺序,默认路径因此已验证为隔离。另一个风险是安装顺序把 prompt 专用权限覆盖成 0644;当前删除无效 override,改由 provider 的 _install_task_file 统一安装,并保留 unrelated-private 对 agent/nobody 的拒绝断言。

验证矩阵如下:

  • PASS:显式冻结 SForge 的 3 个合成 transport 测试通过;binary drift、初始/continue effort/model、无网络工具限制和原生 Stop hook 决策均有断言。
  • SKIP:真实 Docker 容器权限测试因本机 Colima socket 不存在而跳过;这证明的是当前环境无法取得容器权限 PASS,不是通过。最小修复由有 Docker 的隔离环境执行 LOOPX_EDGEBENCH_DOCKER_SMOKE=1 python -m pytest benchmark/tests/test_native_claude.py。
  • PASS:无 SForge 的普通 benchmark 收集 1,502 项,与 base 的测试 ID 和顺序完全一致;Ruff、changed-Python compile、CLI --help、git diff --check、RFC bilingual check 和 public/private scan 均通过。
  • PASS:当前 head 的本地 loopx canary premerge 执行了所有直接检查、10 个 catalog canary、8 个 risk smoke 和 public-boundary check;19 项 selected 检查通过、零失败。唯一保留项是预期中的 benchmark_sensitive 人工 hold,不把它改写成自动通过。
  • UNVERIFIED:真实 Claude 模型、成功原生评分、session continuation 的完整链、gateway accounting、长期可靠性,以及 Docker 中的最终 task-file 权限;这些是运输层之外的独立资格,不能由合成单元测试替代。

语义与 CI 对齐

CLAUDE_EFFORTS 和 native-claude-offline 名称留在 provider transport 内,没有扩展共享控制面 vocabulary、权限、Todo 或持久化状态;claude-install.json 与 claude-result.json 是本地诊断 receipt,不成为第二 authority。按 packet 的 wait_for_ci=false,本轮没有等待或轮询远端 CI,也不把旧提交的取消/失败记录冒充当前 head 的可合并证明。合并 readiness 是独立的 gate,仍会在发布 review 后单独读取。

我的整体评价 / Verdict

APPROVE 当前 head 的有界 transport 增量。 problem_context.verdict=justified_increment:显式二进制、source receipt、参数与安装/权限读回已经形成可独立审查、可回滚的切片;长期原生执行和完整 C0 资格仍明确 deferred,由既有 benchmark 研究维护者在真实运行中完成。long_horizon 与 user_experience 均判为 preserved:原生 provider 保留会话、Stop、期限和评分生命周期,未选择入口的开发路径不被改变,失败与未知状态保持可见。

仓库复用判断为 reused:入口复用现有 source admission、DockerBackend 和 run_agent,NativeClaudeWorker 只扩展 provider IO;没有新增并发执行器或通用权限协议。architecture_assessment 为 retain,当前边界是 transport 和本地 receipts,验证覆盖二进制拒绝、参数/Stop transport、默认收集 parity 与 premerge;这是与问题规模相称的最小可交付 owner。

已检查 CLI、研究 runner、文档、测试入口和 receipt 路径;本 PR 没有渲染页面或安装后产品界面变更,视觉评审不适用。残留风险主要是真实 Docker 权限测试与完整模型/评分/续作尚未验证;这些缺口已如实记录,不阻塞本次有界 transport 的代码结论。合并权限由用户本轮显式授权,仍需 exact-head 发布 review、approval closeout 与 merge readiness 通过;该结论本身不授予运行付费试验或改写默认 runner 的权限。

English verdict: APPROVE at 59839de7e915ddde397344c034bad13a5370cba9. The opt-in native transport is isolated from the default 1,502-test collection, reuses the frozen provider lifecycle, and its synthetic transport checks plus 19 local premerge checks pass. Real Docker permissions, successful native grading/resume, model accounting and long-run qualification remain unverified and are explicitly deferred.

@huangruiteng
huangruiteng merged commit 477df45 into main Nov 3, 2026
20 of 44 checks passed
@huangruiteng
huangruiteng deleted the codex/claude-stop-adapter-20261023 branch November 3, 2026 17:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants