Repository navigation
fix(context): keep native reader digests in private references - #7812
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>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
|
[P2] 将 reader reference 写入放回原捕获的错误恢复边界 首次在 0de0888 通过真实 最小复现是在现有 with patch(
"loopx.cli_commands.quota_capture.write_context_read_reference",
side_effect=OSError(errno.ENOSPC, "fixture"),
):
project_saved_context_capture(args)请将这一步纳入现有错误边界,失败时保留原 capture/digest、Turn receipt 与可执行 recovery,且不重新 guard、admission 或 spend;补一个经 CLI 入口断言 JSON 恢复输出与原始字节不变的回归测试。完整精确头评审仍在继续。 |
…vailable Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
|
已在 6642dd3 修复上述 P2:短引用 metadata 发布已移入原有 presentation 的 try/except。原 native view 与 journal 已有效时,发布失败返回同一份完整 legacy recovery,保留 capture/digest 和原 Turn,不重新 guard/admission/spend。 补充真实 CLI 的首个与第二个 reference ENOSPC 负例,原始字节及恢复读取断言通过;另核验 should-run 失败路径保留原 receipt。相关 34 项恢复/完整 Goal 测试和 4 项 projection 负例通过。完整 18 模块测试正在结束。standard premerge 的 6 direct + 19 selected 全部检查通过、0 failure/warning/advisory;因触及 benchmark 测试路径,保留 benchmark-sensitive maintainer review 的 manual hold,未作自合并。 同批还修正了模拟 native model 对 yielded exec 的跟随:使用实际 write_stdin session(包括 code-mode),完整工具结果后再判断工作与输入覆盖,原时间/字数/完整读取门槛不变。最终集成源码的真实 on/off source→fresh receiver→后续工作→再捕获正在复验,未启动付费 benchmark。 |
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 | model=gpt-6.1-sol | provider=OpenAI | runtime_reported | effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
评审对象:7812@78f02bc3cc644baa91d9109938822ade2b08ce75;实际 merge base 为 6b2d56089ad52abdc103328437609bc749b9b49d。本结论针对完整 15 文件 diff;CI 未查询、未轮询、未等待。
动机 / Motivation
同一份已保存的任务上下文被分页读取时,旧输出在多个命令里反复展示完整摘要和选择条件;新输出把它们放入私有不可变引用,模型执行短命令即可读取同样内容。受影响的是通过原生上下文入口恢复当前任务的 Agent,以及需要从原捕获中只读取部分字段的执行者。这里的摘要是绑定原始文件的 SHA-256,引用只是定位私有校验参数的文件,不能证明模型已经接收内容。反复展示相同校验参数会放大分页返回量;如果删除它们却不保留可靠校验,又会失去原文身份。同一合成输入经真实 CLI 读取,选择内容逐字节相同,分页从 9 页降为 8 页;磁盘写入失败后仍能读取完整原文并保留原 Turn,摘要变化仍被拒绝。本 PR 不改变任务授权、准入、结算或激活默认值,不交付安装升级、跨接收方资格,也不证明真实模型的 token 费用或长程收益。
改动思路 / Approach
选择语义仍由既有 TypeScript owner 决定,原生生命周期继续管理连续性;Python 只承担文件校验、私有元数据 IO 和输出适配,必要读取失败与可选短引用写入失败保持分离。本次边界是现有原生上下文读取的短引用与可恢复 IO:复用完整摘要和原 Turn,保留旧读取协议及完整页面观察器,不扩展执行权或新的产品入口。完整机器导航存入 descriptor 的 navigation;模型接收命令与字节游标。读取时先验证原捕获,再由原选择器决定字段,最后校验精确 selection。新文件是私有、派生的 IO 元数据,确实增加本地持久化格式,但没有迁移 canonical authority。文件名里的短后缀只是 locator,完整摘要仍在文件中。复用已有不可变发布和 legacy cursor,比另建上下文状态机更小;不相关的模块拆分与语言迁移留在本次范围之外。
具体改动 / Changes
关键代码讲解
write_context_read_reference复用原有原子、0600 发布;已有内容必须一致,不能覆盖。读取端检查物理普通文件、所有者、权限、大小和完整摘要格式。model_context_reference把重复摘要移入引用,保留可执行 recovery、mode 和连续读取指引;预算太小时仍保留有效 legacy view,没有截掉关键恢复信息。read_context_capture每页重验原文与 selection。compact selected page 使用独立 schema;选读 EOF 不算完整输入保留。元数据遇到 OSError 时退回带完整 capture/selection 摘要的 legacy cursor,损坏 descriptor 的 ValueError 仍拒绝。project_saved_context_capture把短引用 IO 放回原 try/except。第一次或第二次引用写入失败后,已经有效的 native view、journal 与原 Turn 仍可恢复。NativeContextReader先跟随模型实际可见的命令、session 和全部页面,完整覆盖后才读取 metadata oracle。引用、旧工具输出或单独 EOF 都不能填充 retained baseline;共享 oracle 也消除了各测试重复解码。
规范依据是在读 diff 前读取的 既有 required-work-context.md,revision 6b2d56089ad52abdc103328437609bc749b9b49d。相关段落为 1–240、418–636、881–1040;没有声称读完整份文档。下列 CTX 标签对应其中未编号的既有条款,不增加义务:
| 条款 | 当前头映射 |
|---|---|
| CTX-1:原 capture、Turn、准入与结算身份 | implemented;两次发布故障均读回原文与原 Turn,无新准入 |
| CTX-2:逐页原文/选择校验和连续字节 | implemented;完整内容相等,大整数与 stop 保留,篡改被拒绝 |
| CTX-3:legacy/完整观察兼容,选读不算全量 | implemented;旧字段集合保留,compact 与 fallback 选读均无 full receipt |
| CTX-4:私有物理文件与可恢复 IO | implemented;权限、symlink、损坏、缺失和 ENOSPC 覆盖 |
| CTX-5:关闭态与显式源隔离 | implemented;默认关闭输出等价,不发现或创建无关 Goal runtime |
对主干的风险 / Risks
主要风险是可选 metadata IO 被误当作必需恢复条件,以及新选读协议被误认作完整输入证明。此前 P2 评论 的 0de 故障确实产生空 stdout/traceback;它没有被改写为通过。6642 修复发布边界,但同一读取故障 oracle 仍发现 selection 写入失败会拒绝合法读取。当前 78f 的两个边界均经独立真实 CLI 复验;所有原捕获字节与 Turn 保留,3 类读故障与实际 base 内容一致,6 个 capture/selection 变更反例仍拒绝。source-hash bypass mutation 使独立 oracle 按预期失败,未修改头通过,说明检查能发现缺失校验。
| 独立检查 | 结果 |
|---|---|
| 当前头 18 个 owning modules | PASS:568 passed;82 个显式 native binary 用例 SKIP |
| 同一 CLI 输入的选读 | PASS:20938 bytes 完全一致;9 → 8 页,30345 → 27645 返回 bytes,导航 4236 → 3030 bytes |
| 原始完整读取、legacy 与关闭态 | PASS:21156 bytes 原文一致;旧字段保留,关闭态仅归一化临时 locator 后相等 |
| ENOSPC / 篡改 / unsafe reference | PASS:两个发布点与 select/list/initial-read 恢复;摘要、profile、权限、symlink、损坏或缺失拒绝 |
| Ruff、mypy、语义 advisory/full smoke、15 路径公开边界与 diff | PASS;mypy 17 个配置文件;语义扫描零候选不等于没有语义变化 |
| checkpoint 单元范围 | PASS:5 passed;19 个显式 native supervisor 用例 SKIP,当前文件 blob 未变 |
| standard premerge | PASS:6 direct + 19 selected 检查通过,0 failures/warnings/advisories;整体 manual_review_required,保留 1 个 benchmark-sensitive maintainer hold;exact-scope CQR 有效。 |
| 安装后 App / 真实模型 / 跨 receiver 后继工作 | UNVERIFIED;作者证据未继承为本次独立通过 |
关闭态与共享入口的隔离由真实 off/legacy 反事实、机器配置和生命周期回归验证;显式源在无关 registry 损坏时仍可读取。该头保留原文件、journal、完整机器导航与 full-page observer;私有短引用不赋予 freshness、授权或 model retention。这里没有渲染页面修改,视觉检查不适用;未独立验证安装后的 App、真实模型接收或跨接收方后继工作,本次是源码 checkout 的真实 CLI、私有文件 IO 与本地合成夹具。实际 native/model 的跳过项继续是未验证范围,不能冒充通过。
语义与 CI 对齐
三个新增 schema 标签属于本地 transport vocabulary;复用既有 TypeScript selection 和 full-page observation,不建立第二个政策或领域分类 owner。逐条比较了读取指引的执行者、顺序、强制条件、摘要来源、选择范围、继续/停止与结算:完整摘要由 CLI 持有并验证,选读连续覆盖与原 Turn 义务保留。完整 legacy 指引未删减。CI 未查询或等待,未知 CI 不作为拒批原因;当前回归、缺失的必要覆盖和既有 maintainer hold 仍分别保留。
我的整体评价 / Verdict
本头交付了完整且可回滚的源码 transport 修复,先前公开 P2 已用独立故障复现确认解决,当前完整 diff 未发现剩余阻塞。范围与机制成本相称:生产改动集中在五个既有 IO/CLI 文件,+162/-10,其他增量用于文档、测试和调用方迁移,没有新增 canonical owner。对 long_horizon 的判断是 preserved:原捕获、Turn 与恢复连续性保留,长期效果和完整成本未测量;对 user_experience 的判断是 improved:同样信息以较短可执行导航读回,元数据写入失败也能继续恢复。这里批准的是当前代码,不代表安装、真实 receiver 资格或 merge readiness;benchmark-sensitive maintainer hold 仍保留。本次没有合并或 dismiss。
English verdict: APPROVE for #781278f02bc. Transport and recovery invariants are independently verified; native adoption and merge readiness remain separate.
Signed-off-by: huangruiteng <huangrt01@163.com>
保存的 context 导航在元数据、命令和选读续页中重复完整 SHA 与选择器。现在用私有、不可变的 reader reference 保存这些校验参数,模型拿到可执行的读取命令、页内容和字节游标。
quota context-read --reference-file每页校验原 capture 和精确 selection。损坏、替换、权限或 selection 不匹配会拒绝读取;选读独立 schema 继续与完整输入保留证明隔离。完整机器导航、原 capture/journal、legacy reader、默认关闭、原 Turn 的准入与结算语义保留。可选引用元数据遇到磁盘错误时,已验证的保存投影或 select/list/initial-read 回退到完整 digest 绑定的 legacy 入口,保留原文与可执行恢复。静态 native fixture 同时修正了命令 yield 后提前结束的问题:跟随实际 session 调用 write_stdin,完整覆盖后才读取校验 oracle。
验证(PR head
78f02bc3c):bwrap: setting up uid map: Permission denied失败,保留失败记录;实际 App host 的上述复验通过。最终集成源码的 Linux 0.162.1 on/off checkpoint 联合验证均通过:本次新建 source、ordinary/stride、多代 receiver 实际工作、无 benchmark 的 core Goal,以及自动 full recapture。此为工程路径资格,长程科学收益仍待实验。引用 schema 是本地 IO vocabulary,复用已有不可变发布、typed selection 与 full-page observation owner;Python 仅承担该 IO adapter。调用方的原 SHA、生命周期、关闭态和完整覆盖断言保留。现有 native context 交互承载这些 reader,activation settings 与 rendered UI 保持原行为。独立 review 与未决资格分开记录,进入正常 PR review 不代表 merge readiness。