Skip to content

fix(context): reuse immutable reader references across parent aliases - #7909

Merged
loopx-agent merged 3 commits into
mainfrom
codex/c1-opaque-reference-warm
Nov 2, 2026
Merged

loopx-agent merged 3 commits into
mainfrom
codex/c1-opaque-reference-warm

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

原生上下文先用父路径别名写入冷启动 reader descriptor,后续 warm baseline 经过现有文件读取器解析父目录,再次发布同一引用时会误报 original reader reference changed。本改动只在已有描述文件发生路径写法差异时比较解析后的父目录和精确末级文件名;完整摘要、其余元数据、私有文件及末级符号链接检查继续生效,已有描述文件不重写。

实际调用点仍是 model_context_reference → write_context_read_reference。修复复用现有不可变文件 IO owner;没有新增状态或协议词汇。相邻重构评估无需新增抽象:普通路径完全保留原分支,异常兼容仅增加这一处比较。配套更新双语读取说明和可复用自修复诊断。

验证(head 82dc675418fb8995cd59455632444cd8935a50e0):

  • 同一最终 fixture 在 main 基线为 3 失败/28 通过,修复后 31 全过。覆盖两种发布顺序、摘要/文件/硬链接/选择/导航变化拒绝,以及真实 cold/warm 发布、删除旧源后公共 CLI 读取当前文件、压缩后恢复与显式 off。
  • 13 个完整关联 Python 模块:512 通过、70 跳过;跳过项要求显式 native Codex binary,未以跳过认证模型旅程。
  • 固定合成输入、两个分页上限、显式/opaque 两种入口的 8 次隔离运行:修复前后 physical 路径的 16 对阶段在所选正文、调用数、stdout、argv、导航及所测 RPC 组件上相同;这不是模型保留、费用或长期结果的证明。
  • Ruff、diff-scoped semantic advisory、git diff --check 和四文件公开边界检查通过;全部改动含 DCO。

基线与 PR 目标均为最新 main(8d314af4955c86ea389b0916eda5f1a51f30b966)。作者实现完成,独立审查及维护者合并仍待进行;本提案不作 live 安装或默认提升。

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

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机

本次完整评审固定 head 82dc675,base 8d314af。受影响调用者:Already-authorized native-context caller recovering an immutable capture through a normal parent-directory alias.

具体场景:同一 capture 先用父目录别名发布 reader,再以物理父路径发布 warm baseline;主干错误拒绝,候选复用原 descriptor 并完成恢复。

可观察结果:原 descriptor 字节不变;cold、warm、compaction 后的实际 CLI 分页均读到完整当前正文;篡改摘要、叶文件或元数据仍拒绝。

范围之外:不新增准入、记账、权限、持久配置或 UI;不证明模型保留、净成本收益、跨宿主长程效果或合并资格。

依据 docs/reference/required-work-context.md,固定版本 8d314af,按 saved-context-cache(正常父路径别名与私有实体叶)、context-reader-integrity(原始摘要、选择和字节分页)、same-capture-recovery(压缩后恢复原 capture,不重新准入/记账)核对。评审先读了该父版本合同,没有用本 PR 新增说明反证自身正确。

改动思路

保留既有 Python 文件 IO owner:只统一父路径拼写,实体叶名称与完整 metadata 仍逐项比较;无需新增决策 owner、协议版本或配置。 本 PR 只修复 immutable reader 的父路径别名兼容并补原有读取链路验证,TS context projection 与准入/结算均不变。

既有链路是 native context projection → model_context_reference → write_context_read_reference → quota context-read。TS 继续拥有 full/delta 选择,Python 只处理文件 IO。路径/digest 依旧不授予新鲜性、模型保留或执行权限。

已有 reader 再发布 主干 本 PR
同一实体叶,仅父路径拼写不同 错误抛出 reference changed 复用原文件,字节不变
SHA、叶名称、selection/navigation 或额外 metadata 不同 拒绝 仍拒绝
leaf symlink 或 capture 内容损坏 拒绝读取 仍拒绝

表格来自固定 head 的源码和下述执行,不依赖 Mermaid 渲染。

具体改动

生产逻辑只增加 8 行,位于 write_context_read_reference 的 FileExistsError 分支:先按原规则读取私有 descriptor,再仅归一化父目录,保留实体叶名称,最后仍比较全部 metadata。它只修改比较用的内存对象,不覆盖已发布文件。model_context_reference 的 baseline/current/recovery 调用与 read_context_capture_file 的完整摘要、权限及叶 symlink 检查均保持。

其余 138 行是现有测试模块扩展、12 行引用合同说明和一行按需自修复诊断;没有新增模块、协议、CLI 参数或第二套状态 owner。无改动会保留可复现故障;覆盖 descriptor 或 resolve 整个叶路径会损失现有边界。保留局部修复比引入新抽象更合适。

对主干的风险

独立执行使用相同 head 测试源码和字节一致的辅助夹具,在各自固定源码环境运行:

  • PASS:head 31 项通过;base 3 项失败、28 项通过。3 个失败准确落在两种 alias 发布顺序及真实 warm baseline 路径,均是原 literal path 比较拒绝。
  • PASS:实际 cold full → warm delta → CLI 完整分页 → compaction → 原 current recovery → 新 full;删除 cold transport 文件后仍能恢复,descriptor 字节不变。CLI 显式关闭 context delivery,并验证未创建缺失的 registry/runtime。
  • PASS:摘要变动、其他叶文件、hardlink、leaf symlink、selection/navigation/extra metadata 的反例继续拒绝;未减少原有断言或 fixture。
  • PASS:6 项直接预检、maintainability、公开候选源边界和变更文件公开扫描。首次语义全树检查因缺少 TypeScript 开发依赖中断;在隔离工作树补齐依赖后,同一检查在 base/head 均通过。原失败记录保留。
  • UNVERIFIED:CI 未查询、未轮询、未等待,原因未知;它不是本次批准的前提。Goal-aware premerge 另报 quality_receipt_missing,仍是独立合并门禁,本评审没有创建该凭据或授予合并权限。

最强风险是把“父路径等价”扩大为“任何同内容文件等价”;代码保留 exact leaf 和完整 metadata 比较,真实反例覆盖了这条边界。仅在已存在且拼写不同的 reader 碰撞路径多做父目录解析;没有性能节省声明。证据是本机 source-checkout 合成输入与真实文件/CLI,不是 installed App、模型保留或跨宿主长程收益资格。

我的整体评价

APPROVE。没有发现该 head 的阻断问题;修复交付了原有调用者可直接使用的恢复结果,未增加人工确认轮次,也没有扩展准入、记账或权限。保留既有 Python 文件 IO owner:只统一父路径拼写,实体叶名称与完整 metadata 仍逐项比较;无需新增决策 owner、协议版本或配置。 本 PR 只修复 immutable reader 的父路径别名兼容并补原有读取链路验证,TS context projection 与准入/结算均不变。

视觉评审不适用:已检查四个变更文件及既有 App-hook/CLI 入口,没有产品页面布局或首屏变化;未验证的视觉范围:无。未验证的 installed-host/model 效果另按上述非目标保留。

这是同一 GitHub 账号下的 author-owned PR,因此以 COMMENTED 发布批准结论,GitHub 不允许 formal self-approval;review、独立合并门禁和 merge authority 继续分开。

English verdict: APPROVE 82dc675. The paired base/head oracle reproduces and repairs parent-alias reference reuse; complete recovery and integrity negatives pass. CI was not consulted; merge qualification remains separate.

@mergify

mergify Bot commented Nov 2, 2026

Copy link
Copy Markdown

This pull request has merge conflicts with main and cannot be merged
until they are resolved. Please rebase or merge the base branch, @loopx-agent.

Choose the remote for the base repository, not an out-of-date fork.
For a fork clone, first inspect git remote -v; upstream must point
to https://github.com/loopx-project/loopx.git. If it is absent, add it
with git remote add upstream https://github.com/loopx-project/loopx.git.
Then run:

git fetch upstream
git rebase upstream/main
# Resolve each conflict, git add the resolved files, then git rebase --continue.
git push --force-with-lease origin HEAD

For a same-repository clone whose origin points to
https://github.com/loopx-project/loopx.git, use origin instead of
upstream for fetch/rebase. If you prefer merging the base, use
git merge <base-remote>/main and push normally.

Keep the DCO Signed-off-by trailer on every commit when you rebase.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@mergify mergify Bot added the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 2, 2026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 2, 2026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gemini-4-argon-high; provider=Google; declaration_source=self_reported

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

本次完整评审固定 head 21315bd,base 1d4f473。受影响调用者:Already-authorized native-context caller recovering an immutable capture through a normal parent-directory alias.

具体场景:同一 capture 先用父目录别名发布 reader,再以物理父路径发布 warm baseline;主干错误拒绝,候选复用原 descriptor 并完成恢复。

可观察结果:原 descriptor 字节不变;cold、warm、compaction 后的实际 CLI 分页均读到完整当前正文;篡改摘要、叶文件或元数据仍拒绝。

范围之外:不新增准入、记账、权限、持久配置或 UI;不证明模型保留、净成本收益、跨宿主长程效果或合并资格。

依据 docs/reference/required-work-context.md,固定版本 1d4f473,按 saved-context-cache(正常父路径别名与私有实体叶)、context-reader-integrity(原始摘要、选择和字节分页)、same-capture-recovery(压缩后恢复原 capture,不重新准入/记账)核对。评审先读了该父版本合同,没有用本 PR 新增说明反证自身正确。

改动思路 / Approach

保留既有 Python 文件 IO owner:只统一父路径拼写,实体叶名称与完整 metadata 仍逐项比较;无需新增决策 owner、协议版本或配置。 本 PR 只修复 immutable reader 的父路径别名兼容并补原有读取链路验证,TS context projection 与准入/结算均不变。

既有链路是 native context projection → model_context_reference → write_context_read_reference → quota context-read。TS 继续拥有 full/delta 选择,Python 只处理文件 IO。路径/digest 依旧不授予新鲜性、模型保留或执行权限。

已有 reader 再发布 主干 本 PR
同一实体叶,仅父路径拼写不同 错误抛出 reference changed 复用原文件,字节不变
SHA、叶名称、selection/navigation 或额外 metadata 不同 拒绝 仍拒绝
leaf symlink 或 capture 内容损坏 拒绝读取 仍拒绝

表格来自固定 head 的源码和下述执行,不依赖 Mermaid 渲染。

具体改动 / Changes

生产逻辑只增加 8 行,位于 write_context_read_reference 的 FileExistsError 分支:先按原规则读取私有 descriptor,再仅归一化父目录,保留实体叶名称,最后仍比较全部 metadata。它只修改比较用的内存对象,不覆盖已发布文件。model_context_reference 的 baseline/current/recovery 调用与 read_context_capture_file 的完整摘要、权限及叶 symlink 检查均保持。

其余 138 行是现有测试模块扩展、12 行引用合同说明和一行按需自修复诊断;没有新增模块、协议、CLI 参数或第二套状态 owner。无改动会保留可复现故障;覆盖 descriptor 或 resolve 整个叶路径会损失现有边界。保留局部修复比引入新抽象更合适。

对主干的风险 / Risks

独立执行使用相同 head 测试源码和字节一致的辅助夹具,在各自固定源码环境运行:

  • PASS:head 31 项通过;base 3 项失败、28 项通过。3 个失败准确落在两种 alias 发布顺序及真实 warm baseline 路径,均是原 literal path 比较拒绝。
  • PASS:实际 cold full → warm delta → CLI 完整分页 → compaction → 原 current recovery → 新 full;删除 cold transport 文件后仍能恢复,descriptor 字节不变。CLI 显式关闭 context delivery,并验证未创建缺失的 registry/runtime。
  • PASS:摘要变动、其他叶文件、hardlink、leaf symlink、selection/navigation/extra metadata 的反例继续拒绝;未减少原有断言或 fixture。
  • PASS:6 项直接预检、maintainability、公开候选源边界和变更文件公开扫描。首次语义全树检查因缺少 TypeScript 开发依赖中断;在隔离工作树补齐依赖后,同一检查在 base/head 均通过。原失败记录保留。
  • UNVERIFIED:CI 未查询、未轮询、未等待,原因未知;它不是本次批准的前提。Goal-aware premerge 另报 quality_receipt_missing,仍是独立合并门禁,本评审没有创建该凭据或授予合并权限。

最强风险是把“父路径等价”扩大为“任何同内容文件等价”;代码保留 exact leaf 和完整 metadata 比较,真实反例覆盖了这条边界。仅在已存在且拼写不同的 reader 碰撞路径多做父目录解析;没有性能节省声明。证据是本机 source-checkout 合成输入与真实文件/CLI,不是 installed App、模型保留或跨宿主长程收益资格。

我的整体评价 / Verdict

APPROVE。没有发现该 head 的阻断问题;修复交付了原有调用者可直接使用的恢复结果,未增加人工确认轮次,也没有扩展准入、记账或权限。保留既有 Python 文件 IO owner:只统一父路径拼写,实体叶名称与完整 metadata 仍逐项比较;无需新增决策 owner、协议版本或配置。 本 PR 只修复 immutable reader 的父路径别名兼容并补原有读取链路验证,TS context projection 与准入/结算均不变。

视觉评审不适用:已检查四个变更文件及既有 App-hook/CLI 入口,没有产品页面布局或首屏变化;未验证的视觉范围:无。未验证的 installed-host/model 效果另按上述非目标保留。

这是同一 GitHub 账号下的 author-owned PR,因此以 COMMENTED 发布批准结论,GitHub 不允许 formal self-approval;review、独立合并门禁和 merge authority 继续分开。

English verdict: APPROVE 21315bd. The paired base/head oracle reproduces and repairs parent-alias reference reuse; complete recovery and integrity negatives pass. CI was not consulted; merge qualification remains separate.

@loopx-agent
loopx-agent merged commit bcc7171 into main Nov 2, 2026
10 of 11 checks passed
@loopx-agent
loopx-agent deleted the codex/c1-opaque-reference-warm branch November 2, 2026 19:32
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.

1 participant