Skip to content

fix(context): keep bounded native references readable - #7735

Open
loopx-agent wants to merge 1 commit into
mainfrom
codex/native-context-reference-budget-20261030
Open

loopx-agent wants to merge 1 commit into
mainfrom
codex/native-context-reference-budget-20261030

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

原生 quota should-run 已经完成准入后,较长的捕获路径会与重复的分页说明一起撑破调用方的 4 KB 输出上限,最终返回 quota_decision_transport_failed。本 PR 使该路径仍能返回可读的原始捕获引用。

复用 saved projection 已有的引用构造逻辑,统一 guard 与 context-project 的 path、digest 和有界读取命令。导航保留在外层;完整分页与截断恢复说明使用同一常量,随首个有界全文页返回。历史无界响应保持兼容,原始捕获、准入和结算身份不变。同步了中英文使用说明。

验证版本:af1808afb6fc7073f534c4875840cef9a0b2e0ad,不可变基线 a2c8c940c36e046beaef728750f2451bc46458d0。

  • 同一真实 CLI 回归在基线 File/SQLite 两例均失败,修复后均能在原 4096 字节上限内返回;随后读取同一 receipt,只有一次准入、没有扣额。
  • 相关 CLI、捕获、原生生命周期及选择恢复共 319 例通过;保留历史无界 wire、拒绝、错误摘要、重启与差分恢复覆盖。
  • 隔离构建 wheel 后,从工作树外调用已安装 CLI,File/SQLite 均通过有界返回、完整分页说明、原始 receipt 选读及错误摘要拒绝。CLI 未从源码目录导入;未安装或更新用户运行中的 App。
  • 标准 premerge:6 项直接检查及 19 项选中检查通过,沿用原预算;Ruff、配置内 mypy、双语差分和公开边界检查通过。首次检查因新工作树缺 npm 依赖失败、首次打包因缺前端产物失败,补齐构建环境后重跑通过,未放宽检查。

同一 33,657 字节合成捕获、7,900 字节输出上限下,引用由 4,978 降至 3,857 字节;完整投递计入首次分页说明后由 41,488 降至 41,330 字节,读取仍为 5 次。4 KB 路径由拒绝恢复为可用,该更小预算需要 10 次读取。此证据仅说明传输修复,不证明模型决策、实际 App 采用或长期成果收益。

这是可独立回滚的现有传输路径修复,可先于 #7430 合并;没有引入新的决策 owner、状态或协议选项。C1 的完整契约切换、旧 reader 退出和原 quota 单会话成果/完整成本验收仍保留在原任务。精确版本 change-quality 记录为 pass;合并留给维护者。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@songoow songoow 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 Astra Pro — OpenAI — self_reported

动机 / Motivation

使用 native context 的执行器在已经完成 should-run 准入后,仍可能因捕获路径较长和重复指引挤满 4 KB 返回预算,拿到 transport_failed 而非可用引用。

基线把完整分页说明重复放进文件引用,实际长路径下已 committed 的原 Turn 返回失败。本 PR 把 path、digest 和有界 reader 统一为小引用,外层保留导航,完整分页和截断恢复说明交给首个有界全文页。

同一长路径/4096 字节负载在 File 与 SQLite 的真实 should-run 上,base 两例失败,head 两例返回预算内引用;随后第一页包含原完整 guidance,选读的 receipt 精确等于原捕获,准入计数仍 1、spend 仍 0。

这是现有传输/读回修复,不增加准入、结算或模型保留证明,不完成完整 C1/#7430 切换,也不证明实际 App 采用、模型理解或长期费用收益;当前未归因 CI 仍阻止批准。

改动思路 / Approach

修复针对已决定事实的传输边界:保留原捕获与身份,引用中只放可定位、校验和读取的元数据,完整读页义务由实际第一页承载。导航、选读和完整读取的职责仍分明,未把展示成功变成新的工作授权。

这是可独立回滚的 bounded native reference 修复;实际 guard、保存投影与 reader 共同覆盖。完整 C1切换、旧reader退役与真实模型成果/完整成本验收不在本次交付声明内。

should-run 仍先完成原 admission并保存完整决策,再构造引用。外层导航告诉读者选取需要的事实;直接按 path/hash 读第一有界全文页时,reader 自动带上完整分页与截断恢复说明。选读回到原 receipt,读取结束不会制造新 guard、Host调用或扣额。

saved projection 已经使用 path/sha256/预算内 command 这组边界。抽成同一个 _capture_read_reference 后,guard 与 context-project 复用它;完整指引继续使用原常量,避免另写简化版义务、另建 reader 或让两个路径维护不同预算规则。

具体改动 / Changes

关键代码讲解

  • _capture_page:把完整分页义务交付给实际读者。首个有输出预算的全文页返回原 CONTEXT_CAPTURE_PAGE_GUIDANCE;selected 页继续用选读说明,历史显式无界响应保留原形状。
  • _capture_read_reference:统一文件身份与预算 reader。只构造原 path、sha256 和同预算 command,复用原命令 owner;导航或完整指引不在每个嵌套引用中重复。
  • native_context_capture_view:在原 capture 已持久化之后投影小引用。主引用与 recovery 复用同一 helper,外层导航保持;预算不足仍走原 transport failure,不伪造成功或重新准入。
  • project_saved_context_capture:让保存的投影与 guard 共用已有规则。移除局部重复 helper,成功与失败恢复仍指向原完整文件,并保留调用者预算和原捕获身份。

规范基准:docs/reference/required-work-context.md;修订 a2c8c94。独立基准是改动前 Native quota should-run/context-project 的持久化、7900或显式更小上限、完整页与原始恢复合同。以下标签按原段落定位,不把完整 C1 后续验收强加给这个有真实消费者的修复。

Criterion 当前结论 对应实现或剩余边界
small file reference implemented _capture_read_reference reused by native_context_capture_view and project_saved_context_capture
reader pages remain independently bounded implemented _capture_page adds original CONTEXT_CAPTURE_PAGE_GUIDANCE on first bounded full page
original Turn/capture/effect identities implemented Existing digest-bound read_context_capture and original decision_capture owner

实际验证 / Validation

本轮 root reviewer 在 exact head 执行 selection_replan_reentry、context_capture_read、context_capture_selection、progressive_native_context 四个模块,共79例通过(125.07秒)。我又独立核对测试、源代码与原日志,补跑 changed-file Ruff 和 git diff --check,均通过。作者319例、安装wheel及总传输字节统计没有冒充本轮执行。

root_7735_probe.py 用同一候选回归在不可变 a2c8c94 与 af1808 上跑真实 public should-run,保留90字符路径分量与4096字节预算。base File/SQLite 两例都在已 committed 后返回 quota_decision_transport_failed;head 两例均通过。生成的恢复命令经原 parser/reader实际读回:首个全文页等于原完整 guidance 且预算内;选读 heartbeat receipt 与原 capture精确相等,随后准入计数仍1、spend仍0。该修复的基线失败是预期修复对象,没有被规范化掉。

对主干的风险 / Risks

核心风险是为了变小而丢读页/截断恢复义务,或让恢复者重新准入。这里复用原完整常量,真实读回也核对原 receipt 和无重复 effects;历史无界路径与 selected scope 分支明确保留。没有发现阻断性代码缺陷。修复不是对任意超长路径/极小预算都成功的保证:原 metadata 无法容纳时仍须明确拒绝并保留原 capture。

语义与 CI 对齐

本次不宣称所有共享 reader 行为都只在 native on 时变化:直接的首个有界全文页也有意增加完整指导;它不激活 native capability或执行权限。原 native activation gate、无界wire及原始数据未改变,文档明确了这项呈现变化。

当前 exact-head dashboard-browser(2) 在 goal-workspace-m2.mjs:206 的既有1秒 loaded-lens预算失败,日志样本含1376.597014ms,aggregate checks红。已定位失败,但没有同命令不可变base/head的同签名归因。按照当前 verdict_policy,这是阻止批准的 required 验证缺口;不把它凭源码路径不同归为历史噪声。最小解除动作是补对应基线/候选归因或独立环境证据与当前资格;只有确认代码回归后才要求修代码,不能放宽预算掩盖失败。

我的整体评价 / Verdict

REQUEST_CHANGES:局部修复有直接证据,未发现阻断性的代码缺陷;当前 browser 失败缺少要求的归因,暂不具备批准资格。 审查绑定 exact head af1808a。

原 Turn、捕获和 effect 身份不变,恢复读取不再以重新准入补偿传输失败。这条真实恢复路径更可用,有利于长流程接续;完整 C1、真实模型保留与长期成果仍未被这一传输证据证明。

原 4 KB 上限内能获得可执行读回路径,读者在真正分页时仍收到完整说明,不需手工猜测恢复命令或额外询问 owner。首个有界页现在明确包含 guidance,这是有意的可观察变化。 变更为 CLI 原生引用、分页 JSON 和中英文说明;没有浏览器布局或视觉交互。

统一已有 reference helper 是有界且有真实消费者的复用;不需要新 capture 服务或另一个语义摘要。完整指引移动到第一页而未另写缩短版本,保留真正需要的恢复义务。

本轮证据是源码环境、合成原生会话与真实 File/SQLite CLI/reader;未独立复跑作者 wheel、319-case或模型实验声明。未证明真实 App 保留/采用,也未解决当前 browser 失败的要求归因,故不具备批准资格。

English verdict: REQUEST_CHANGES — exact head af1808a; The bounded-reference fix is supported by actual base/head admission and original-reader evidence, with no blocking code defect found. Approval is withheld because the current browser failure lacks required attribution.

This branch has not been deployed

No deployments
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.

2 participants