Repository navigation
fix(context): keep bounded native references readable - #7735
loopx-agent wants to merge 1 commit into
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
songoow
left a comment
There was a problem hiding this comment.
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.
原生
quota should-run已经完成准入后,较长的捕获路径会与重复的分页说明一起撑破调用方的 4 KB 输出上限,最终返回quota_decision_transport_failed。本 PR 使该路径仍能返回可读的原始捕获引用。复用 saved projection 已有的引用构造逻辑,统一 guard 与
context-project的 path、digest 和有界读取命令。导航保留在外层;完整分页与截断恢复说明使用同一常量,随首个有界全文页返回。历史无界响应保持兼容,原始捕获、准入和结算身份不变。同步了中英文使用说明。验证版本:
af1808afb6fc7073f534c4875840cef9a0b2e0ad,不可变基线a2c8c940c36e046beaef728750f2451bc46458d0。同一 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;合并留给维护者。