Repository navigation
fix(context): preserve native transport after checkpoint preflight - #7558
Conversation
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; OpenAI gpt-6.1-sol; runtime_reported; reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
[P2] 先移除新增测试中未使用的 warm 绑定;当前 required Ruff 在 test_saved_context_project.py:608 报 F841。相同 immutable base 文件通过该检查。功能修复已有实证,这项结论没有声称运行时传输存在同类失败。
动机 / Motivation
使用 checkpoint 预检和原生 Codex SessionStart 接续工作的 Agent。
预检保存原 quota 决策后,Agent 从实际投影选择 Todo;旧绑定命令丢失已开启的 context transport,选择后回到普通全量。当前 head 保留原设置和身份,使完整读取后的选择继续差分,压缩后则恢复全量。
真实 File/SQLite 的启用与压缩恢复用例、原生两次 worker 唤醒均通过;未新增投影准入或扣额,原捕获字节保持。
本次不改变默认开启、实验处理、模型权限或完整成本资格,也未验收安装 App 和真实模型的长程收益。
实现的传输修复已有实际证据,但新增测试留下一个 Ruff F841 失败;整体 C1 消费替换与真实采用仍归既有工作。
改动思路 / Approach
复用现有参数组合与原生生命周期 owner,仅修保存投影到实际选择命令的接线,不创建第二次决策或恢复状态。
只改 quota_capture.py 的展示参数组合及对应测试;原捕获、选择、准入与结算 owner 保持。
已有 bind_capture_selection_transport 负责 fresh quota 的选择参数;本次让 saved presentation 也消费它。保存的原始 JSON 和 hash 不变,当前 native 目录和已启用参数只进入派生展示。参数按 token 组合,保留原 capture root,显式替换时去掉重复参数,并处理 dir/root 互斥;不是再跑一次 guard 来补参数。
| 相同原始输入 | immutable base | 当前 head |
|---|---|---|
| File/SQLite,启用后选择 | 4 个启用/压缩分支缺参数而失败 | 4 个分支通过;有效基线用 delta,压缩后用 full |
| File/SQLite,关闭 | 2 个 full 对照通过 | 2 个对照通过,原始文件不变 |
| 真实 Codex、本地模拟推理 | 本轮不据旧版本推断 | 两次 worker 唤醒消费实际投递命令,原会话连续读回 |
这里的 native 证据验证实际进程和工具输入;推理响应来自隔离 loopback fixture,不证明模型理解、真实实验采用或净 token 收益。
具体改动 / Changes
规格依据:docs/heartbeat-automation-prompt.md,改动前 revision 19c213324fbb5990288bd374c1b79096f22bb152。该文未编号的要求按名称映射:saved-snapshot-presentation、selection-keeps-transport、full-recovery-after-invalidation、no-new-authority-or-default 均在本切片实现;不是用本 PR 的测试反过来定义规格。
关键代码讲解
- project_saved_context_capture:先校验源 hash、原 Goal/Agent/Turn 和私有实体目录,再补展示参数并交既有 native projector;异常仍给出原 capture 的 recovery,不能改写源或重新准入。
- bind_capture_selection_transport:复用已有 selection template,保留原 selector,按当前明确选项替换相应 argv token,避免重复 root、context 及互斥目录。saved/explicit/fallback 三种 root 与重复调用的 parser 断言通过。
- quota 的原 emitter:调用点保持,继续复用同一 helper。实际任务绑定仍走原 quota owner;投影不记新准入,随后显式绑定自身的 receipt 与原预检 receipt 分开,均不冒充 spend。
三文件 +219/-27,其中生产 +32/-11,其余为回归。完整检查这三个文件;没有新配置项、状态库、决策 RPC 或前端页面。
对主干的风险 / Risks
最强反例是“helper 生成了正确字符串,但 native worker 消费的是漏参数的命令”,或压缩后继续沿旧 baseline。已通过真实 checkpoint → context-project → 发出的 selection CLI 覆盖两种 backend 的 on/off/PreCompact;同一六例在 base 为4 FAIL/2 PASS,head为6 PASS。真实 Codex 0.163.0-alpha.11.1 的独立本地模拟推理案例通过两次 worker 唤醒,检查实际命令、full/delta 重建、原文件字节与原 receipt 数,没有云端推理或原生评分调用。
扩大 source 回归 276 PASS / 49 SKIP;49 项是默认未启用的显式 native 环境案例,本轮另外运行且通过其中 benchmark 路径,其他组合不因此算通过。Standard premerge 的 6 direct / 18 selected PASS。Ruff 单列 FAIL:新增 restore-loop 不再使用 warm,却保留第608行赋值;不可变 base 的同组三文件检查为 PASS。CONTRIBUTING.md 和验证指南的 Ruff 范围包含 tests,不能用 premerge 的绿色覆盖这个失败。最小修复仅删除 unused binding,再运行 uv run --extra test python -m ruff check tests/control_plane/test_saved_context_project.py,保留完整重建断言。
语义与 CI 对齐
继续使用既有 context/selection/Turn 词汇与 typed owner,没有 substring/prose 状态分类、默认开启或额外业务义务。关闭的真实 File/SQLite 对照保持 full、无 native 发布;hash/错身份/私有目录/完整读取的拒绝和恢复仍属原 owner。wait_for_ci=false,本轮未读取、轮询或等待远端 CI;发现来自当前本地检查。
我的整体评价 / Verdict
problem_context=justified_increment,long_horizon=preserved、user_experience=improved:实际选择保留已获授权的 native transport,零新增信息准备或确认轮次;压缩和源失效继续要求完整原文恢复。repository_reuse=reused、observable_semantics=intentional_change_validated、code_volume=necessary、change_proportionality=proportionate、default_off_isolation=isolated、authority_semantics=aligned、semantic_alignment=aligned。原 C1、安装采用与真实长程净收益仍独立开放。
检查全部三文件:仅 CLI 保存上下文投影、参数组合和测试,没有渲染页面或交互布局变化。
正式 App 安装、真实模型理解及完整费用收益未验证。
当前 REQUEST_CHANGES 只要求修复已引入的 required Ruff F841;不要求重做已通过的功能设计或补齐所有 parent roadmap。新 head 仍须核对实际变更和相称检查,当前结论不自动沿用。
English verdict: REQUEST_CHANGES b7e3d12; production CLI and native continuation evidence passes, but the changed test introduces required Ruff F841. Remove the unused binding and recheck the exact new head.
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
b7e3d12 to
362c9db
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · OpenAI · gpt-6.1-sol · max · runtime_reported
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
精确 head:362c9db1c8ba90175486f039a85ecd0fea4c0116;不可变 diff base:32407c22327395a99fe6fdf41459a2ef6691e0b4。
动机 / Motivation
使用 checkpoint 前置捕获恢复工作的 Codex worker,需要在绑定任务后继续正确读取原上下文。
旧路径在 native 会话启动后呈现保存的 guard,却在任务选择命令中丢失已启用的差分与目录;本次将传输参数带到真实绑定命令,并保留显式分页上限。
真实 File/SQLite 的开启、关闭和压缩恢复路径,以及实际 Codex 双次唤醒消费均已通过,原捕获和结算身份保持。
本次是既有上下文交付链的修复;不改变准入、模型保留假设、全局安装或科学实验,不证明净 token 或费用收益。
改动思路 / Approach
复用现有 selection transport composer;Python 只组合 argv 与保存快照的展示,native lifecycle 和 TS owner 继续分别负责基线及准入结算。
当前边界从 checkpoint preflight 到 native 呈现、任务绑定及后续读取,完整覆盖实际消费者;没有增加配置、状态或第二份策略 owner。
从保存前置决定到 native 呈现的时序保持:前置捕获不提前建立会话基线,SessionStart 后才呈现;绑定任务只重用已生成的选择入口。目录冲突按当前显式输入替换,重复组合不会累加同名选项。原始捕获不因展示参数改变而被重写,返回的恢复命令继续指向原来的完整来源。
具体改动 / Changes
关键代码讲解
全量3文件 +235/-28 已重新读取。当前head除了旧Ruff修复,还包含分页上限传递,不能继承旧头的审核结论。
project_saved_context_capture在核验原Goal/Agent/Turn、hash及私有cache根后,在 native 投影之前调用现有composer;原文件、原receipt和源身份保持。bind_capture_selection_transport将保存/显式/回退root与当前native目录合并到选择argv,替换冲突目录、保留单一root与turn-envelope,并带入显式--max-page-output-bytes。未提供cap时保留既有值,不新增默认上限。native_context_capture_view仍复用共享分页与原capture恢复,实际 native 消费者而非仅命令字符串检查证明整条路径可用。
预先读取的规范为不可变base heartbeat-automation-prompt.md / Opt-in native context delivery。saved-snapshot-presentation、selection-keeps-transport、full-recovery-after-invalidation、no-new-authority-or-default 在本head均为 implemented;这是已有承诺的修复,没有新增schema或第二份策略owner。
独立对照:同一六格真实CLI(File/SQLite × off/on/压缩后on),不可变base为2 PASS/4 FAIL,四败准确落在返回命令丢失context_delivery;当前六格均PASS。对父提交411a2c95的composer另测:三种root的显式32000均错误保持64000,当前均32000;未设置的三种组合仍64000,重复组合幂等。
对主干的风险 / Risks
最强风险是绑定时丢传输/上限、破坏原argv身份,或在基线失效后借旧delta继续。源码两套76 PASS/5 SKIP覆盖原capture完整性、错误身份/hash、非私有/符号链接根拒绝及恢复;相邻五模块的实际结果为 400 passed, 49 skipped in 574.28s (0:09:34)。跳过的native组合没有计为通过。
另显式开启真实 Codex 0.163.0-alpha.11.1 的benchmark消费者,1 PASS:两次worker wake使用同一会话,消费实际返回的绑定命令并逐份重建 full→delta→delta→delta;整个描述/分页保持32000限制。每次wake保留其原guard和一次合法任务绑定,只有两wake之间的显式结算产生一次扣额。推理仅隔离loopback模拟,无云端模型或原生评分调用,不证明模型遵从。
Required Ruff三文件PASS,standard premerge 6 direct+18 selected PASS、无manual hold。旧F841已移除,原完整重建断言保留;旧inline和作者回复已完整读过,解析修复不等于继承旧批准。off两格在base/head都通过且无native journal;普通无capture入口仍提前返回,未新增调度、权限、配置或确认轮次。native连续性仍是既有工程假设,未被改称保留证明。CI未查询、未等待。
我的整体评价 / Verdict
当前范围 goal_achieved,没有新增阻塞;旧Ruff问题已核实修复。长程维度为 preserved,实际接续可用性为 improved。
接续及压缩恢复保持原身份和完整源,双次实际worker没有重复前置准入或多扣额;这是工程链路资格,长程模型采用及全成本净收益未测。
既有worker实际消费返回argv,无需人工复制缺失的传输参数;错误沿原完整capture恢复,off 不新增设置或确认轮次。
视觉审阅不适用:修改只涉及CLI argv与上下文JSON交付,未改变渲染页面;正式App安装采用未验证。
Installed App and long-horizon model adoption not qualified.
同一composer消除参数重复追加是相称的局部收敛;更广controller迁移不属于本修复。批准仅绑定此head,线程收口、合并readiness和maintainer合并权分开处理。
English verdict: APPROVE — The exact head preserves native transport and explicit page limits through real task binding and recovery; live model benefit and installed adoption remain unverified.
Checkpoint 预检在原生 SessionStart 前保存 quota 决策,worker 随后通过
context-project读取。此前任务绑定命令遗漏已启用的差分设置和原生上下文目录,选择 Todo 后又回到普通全量。本修复复用既有 selection transport owner,将这些设置保留到实际绑定;原始捕获、Turn 和准入次数保持。本轮还修复同一接线中的分页上限丢失:调用者明确设置
--max-page-output-bytes后,后续绑定继续沿用该上限,包含 continuation 和原 capture recovery。未提供参数时保留原设置,支持已有参数替换及幂等调用,没有新增配置或全局缩小分页。并删除评审指出的未使用warm绑定,修复 Ruff F841。分支已 rebase 到核验时的
main(32407c223),仍以main为 PR base。当前改动只涉及一个 CLI 交付适配器和两份回归测试,没有视觉改动。验证 head:
362c9db1c8ba90175486f039a85ecd0fea4c0116;核验 base:32407c22327395a99fe6fdf41459a2ef6691e0b4。本轮验证:
0.163.0-alpha.11.1的 benchmark 路径:1 passed。使用隔离临时配置和本地模拟推理,两次独立 worker 唤醒恢复同一 Session,实际消费投递的绑定命令,验证 full → delta → delta → delta、每份完整输出不超过调用者的 32000 字节上限、完整重建与原捕获不变。没有云端推理或原生评分调用。failed_tracked_side_effect;该次无效结果保留,随后提交并保持工作区不变完成上述重验。原 head 的评审、验证失败和历史实验记录保留;旧 head 的结论不自动沿用。此提案修复交付接线和可配置上限,不证明模型理解、实验采用、完整计费收益或任务效果。运行中实验没有热换版本;评分、预算、机会、冷却与合并权限保持。