Repository navigation
fix(checkpoint): recheck native binding without mutating capture witness - #7240
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 | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
需要在已完成的一轮研究工作后封存源代码、权威状态和原生会话的调用者。
完整项目目录属于快照时,封存前的第二次绑定检查重新创建会话准入对象,改写刚刚见证过的 registry 锁文件,导致静止的源也被当作变化而拒绝。
在同一个已结算的隔离源和同一原生会话上执行完整目录 capture:基线拒绝并且没有产物;当前提交得到可校验的封存产物,同时不新增捕获期间的推理调用。
同物理路径、同会话、同完整源种子的实际 CLI 配对,基线 exit 1/source moved,当前 exit 0/摘要验证成功;原生 fork/adopt/续接的既有真实入口另有3项通过。
交付限于源封存前的只读绑定复核;初次准入、全量字节见证、原生历史游标、writer barrier、完整 canonical store 和原结算身份仍由既有 owner 负责。没有授予执行、安装、发任务、评分或公开发布权限,也没有完成长期研究收益资格。
改动思路
初次准入拥有授权;最终复核只观察所见是否仍成立,两者不能用同一个有写副作用的构造过程。合并为共享 Host 层只读复核,比排除锁文件、扩大白名单或放松 source-moved 检查更小且保留完整来源。Python 位于原生 Host/provider I/O 边界,不新增 Python 领域决策 owner。
初次 native_binding_participant 保留原准入并返回原 registry 字节;新 verify_native_binding_participant 只读取同 agent 的原绑定、当前 CLI 和 profile digest,再比较完整绑定。三个封存调用者复用它,不再在见证后构造新 CodexAgentSession。
沿用现有 owner 的一次准入和完整字节见证,在观察阶段共享只读复核;不忽略目录中的锁文件,不豁免 registry、绑定或 profile 变化。同步现有原生负例的错误文字断言即可,毋须再建协议或框架。
具体改动
[P3] 同步既有原生绑定变化负例的错误文字断言。按 fixture 自带的 canonical 初始化恢复该扩展用例后,probe-binding 的拒绝、无产物、原 reader 关闭及调用数断言均通过,最后仍期待 profile changed,当前实际返回 checkpoint source session binding or profile moved before sealing。这是本次诊断变化的测试同步项;不影响已经验证的安全拒绝,但不能将完整原生变体称为全绿。
不可变已接受规格:docs/reference/research-checkpoint.md,版本 7c48375df5aa4824c8d6fba0baef1f96de6cc87e。先读原规格再审补丁;下列为本审计映射标签,非伪造原编号。
-
quiescent-complete-source(implemented):Capture requires a quiescent complete source, including declared directory bytes and original canonical settlement. -
native-binding-cursor(implemented):Original native binding/profile/full history/cursor must remain current through sealing. -
preview-no-authority(implemented):Preview is default and artifacts grant no execution authority.
5 files +121/-28; production +38/-24。完整差异、相关既有 owner、全量讨论、DCO 与公开边界已核验。初次准入可更新原 advisory 锁;两臂均从完全相同的初始完整种子开始,不把整个源从调用前到调用后完全不变当作证明。见证后的复核不再写锁;所有生产调用者一同更新三元返回值。没有外部入口或持久化格式变化。
关键代码讲解
native_binding_participant(loopx/hosts/research_checkpoint.py:413):初次会话准入前后比较 registry 原字节,并把绑定文件纳入完整组件;现在返回初始字节给最终复核。
verify_native_binding_participant(loopx/hosts/research_checkpoint.py:436):只读当前 agent 绑定与 CLI/profile,完整比较原绑定;不再构造会触发准入写锁的会话。
capture_research_checkpoint(loopx/hosts/research_checkpoint.py:502):普通 CLI 路径保留实际 reader、完整字节探针、游标、canonical 来源和原结算复核后封存。
capture_after_wake(benchmark/runtime/checkpoint.py:234):在同一已拥有 reader 中做最终观察;捕获失败只报告附加证据失败,不改写已经完成的 wake 结果。
对主干的风险
专项66通过、4项 Linux process-group 环境跳过;普通 capture/fork/adopt/原生续接3通过;同源实际 CLI 基线拒绝而当前封存并验证成功;缺省关闭与 preview 的完整输出和无副作用配对相同。
实际后续原生 Turn 或 binding/profile 移动仍拒绝产物,原 reader 被关闭、已完成 wake 保持成功。额外6个 canonical 初始化后的原生变体中5通过;probe-binding 已通过拒绝/无产物/无额外推理断言,但最后的旧 profile changed 文字断言失败。
原生扩展变体的1个诊断文字失败是当前改动相关,不能归为无关旧失败或称全部通过。未初始化 canonical authority 的旧 fixture 在基线与当前均先行失败,另行保留。预合并6项直接/编译/模块检查和10项 catalog 检查通过,但整体为 manual_review_required,benchmark_sensitive 人工审查 hold 仍在;没有合并、live 模型或安装版资格。
基线只加载三个不可变旧生产模块,其余实际入口、file 源根和原生/SQLite/provider 路径一致。初次准入的锁更新不是被忽略或排除;两臂从同源开始,当前产物验证的是准入后实际完整见证。普通原生续接使用静态本地响应服务,不使用 live 模型或用户凭据。
语义与 CI 对齐
没有新增状态枚举、receipt、Goal/Todo 规则或持久化字段;registry 字节是当前调用的见证事实,不是新的权限或用户意图。 接受规格的完整来源与拒绝条件保持,诊断文字变化如实保留为非阻塞同步项。 CI 按契约未查询、轮询或等待。
我的整体评价
APPROVE,仅对应 7240@96f54989e8a35bbd038a2ee507e8a86c5ea67020。捕获自触发锁变化的局部目标已实现;P3 诊断断言与独立人工审查 hold 不被当作通过或解除。
长期工作:preserved;使用体验:improved。同物理路径、同会话、同完整源种子的实际 CLI 配对,基线 exit 1/source moved,当前 exit 0/摘要验证成功;原生 fork/adopt/续接的既有真实入口另有3项通过。
已检查实际 CLI/Host caller、完整输出、失败与恢复路径;没有页面、布局或视觉素材改变,故不需截图。 未验证范围:原生扩展变体的1个诊断文字失败是当前改动相关,不能归为无关旧失败或称全部通过。未初始化 canonical authority 的旧 fixture 在基线与当前均先行失败,另行保留。预合并6项直接/编译/模块检查和10项 catalog 检查通过,但整体为 manual_review_required,benchmark_sensitive 人工审查 hold 仍在;没有合并、live 模型或安装版资格。
有界重构判断:沿用现有 owner 的一次准入和完整字节见证,在观察阶段共享只读复核;不忽略目录中的锁文件,不豁免 registry、绑定或 profile 变化。同步现有原生负例的错误文字断言即可,毋须再建协议或框架。 当前不增加新框架、领域 owner 或仪式化后续任务。交付限于源封存前的只读绑定复核;初次准入、全量字节见证、原生历史游标、writer barrier、完整 canonical store 和原结算身份仍由既有 owner 负责。没有授予执行、安装、发任务、评分或公开发布权限,也没有完成长期研究收益资格。
这是 author-owned COMMENTED 结论,不是 GitHub 正式 self-approval/rejection;approval-closeout、readiness、人工 hold 和合并权限另行读回。本评审不执行合并。
English verdict: APPROVE. The readonly verification fixes the self-induced lock movement without weakening full-source or native-binding fences. Real native capture and continuation were exercised using an isolated static loopback provider. The diagnostic assertion mismatch, legacy fixture failure, platform skips and benchmark-sensitive manual hold remain disclosed; no merge or installed qualification is claimed.
| home=Path(env["CODEX_HOME"]), model=env["MODEL_NAME"], reasoning_effort=env["REASONING_EFFORT"], | ||
| sandbox=env.get("LOOPX_CODEX_SANDBOX", "danger-full-access")) | ||
| if binding != source_wake.binding or digest != source_wake.digest: | ||
| raise ValueError("checkpoint source session binding or profile moved before sealing") |
There was a problem hiding this comment.
[P3] 同步既有原生绑定变化负例的错误文字断言。按 fixture 自带的 canonical 初始化恢复该扩展用例后,probe-binding 的拒绝、无产物、原 reader 关闭及调用数断言均通过,最后仍期待 profile changed,当前实际返回 checkpoint source session binding or profile moved before sealing。这是本次诊断变化的测试同步项;不影响已经验证的安全拒绝,但不能将完整原生变体称为全绿。
Problem and change / 问题与改动
Checkpoint sealing re-created the Codex session owner after capturing its byte witness. That constructor writes advisory launch locks, so an otherwise unchanged checkpoint could invalidate its own witness.
Recheck the complete session binding, profile digest and registry bytes through read-only observation instead. Keep the original native cursor and byte-fence checks, including rejection of subsequent lock-file changes. Apply the same owner to normal, interrupted and research checkpoint capture; observation grants no launch authority.
Checkpoint 封存时再次构造会话 owner 会改写启动锁,导致捕获流程破坏自己的字节见证。此改动复用只读校验,同时保留会话、配置、注册表、原生游标及字节围栏的完整性检查,不增加启动权限。
Scope and provenance / 范围与来源
Port #7130, previously merged into the experimental integration branch, independently onto
main. This PR contains only its checkpoint fix; no other integration features or scoring changes.将此前仅合入实验集成分支的 #7130 独立提向
main,不携带其他集成功能或评分变化。Validation / 验证
96f54989e8a35bbd038a2ee507e8a86c5ea67020; base:7c48375df5aa4824c8d6fba0baef1f96de6cc87e.uv run --extra test python -m pytest -q benchmark/tests/test_checkpoint_binding_observation.py benchmark/tests/test_checkpoint_handoff.py: 66 passed, 4 skipped on macOS. Linux-specific process-group coverage is not claimed by this run.git diff --checkand public-boundary scan passed.This is a review proposal, not a merge-readiness or benchmark-benefit claim. Exact-head review, CI and merge qualification remain separate.
本次提交进入评审;测试通过不代表已获合并资格或已证明实验收益。