Skip to content

Retire protocol action packet readers and legacy witnesses - #7161

Merged
huangruiteng merged 7 commits into
mainfrom
codex/turn-envelope-legacy-projection-20261023
Oct 23, 2026
Merged

huangruiteng merged 7 commits into
mainfrom
codex/turn-envelope-legacy-projection-20261023

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Old protocol_action_packet reconstruction remained in current readers after producers stopped emitting it. This deliberately breaking input-format change removes that machinery and rejects old packet-bearing decisions and capsule witnesses at both the decision root and its contract capsule, before conversion, signature use or CLI fallback. Packet-free v0 records keep their original signature interpretation; historical records are never stripped or re-signed.

The existing TypeScript Effect reader owns rejection. Python renderers use its existing adapter only for retired carriers, so supported rendering adds no RPC. Field selection/rendering, reconstruction/residue/opaque fallback, unused transport inputs and the dated acceptance verifier are removed. Current contracts replace the old reader-compatibility promise; historical ledger evidence remains explicitly historical. No new question, permission or admission workflow is introduced.

Current validation at a7ee1eafc8ed1101e876bc9dd61602d547e4af67:

  • Fixed the review finding where direct Effect/build/signature/capture entrypoints silently dropped nested retired witnesses while CLI/rendering rejected them. One typed guard now checks both declared source locations before projection; redundant caller checks were removed.
  • The added regression failed all six nested cases on the previous head; all twelve root/nested cases now pass, including null, empty, malformed and unknown-version values. The same fixture exercises all affected entrypoints and verifies source immutability.
  • 103 focused Python tests pass, including real isolated File/SQLite CLI/replay, frozen modern signature/Host authority and settlement/failure paths. 57 TypeScript tests, control-plane typecheck, changed-file Ruff, diff-scoped semantic advisory and staged/exact-head bilingual checks pass.
  • Standard diff-selected premerge canary and its isolated public-boundary scan pass on the repaired source. No active Goal state is modified by validation. This author repair awaits fresh review/CI and grants no merge or installation qualification.

Earlier qualification at 365560cc3c700284674210f3e09799b42c340ad9 (base 334da0973f786e748013b926cc85b5680a5343b0), retained as historical evidence rather than a fresh-head rerun:

  • 140 focused Python tests pass, covering real File/SQLite CLI and replay, Codex App/generic/SSH settlement commands, context capture, signatures, failure projection and budget diagnostics. The final shared adapter/rejection checks pass 45 tests again.
  • 62 TypeScript tests and control-plane typecheck pass. Configured Python mypy (17 source roots), changed-file Ruff, semantic vocabulary and bilingual RFC checks pass.
  • 54 identical modern state/profile inputs produce identical full envelopes, signature documents and Host authority against the base. Full canonical result SHA-256: 41b89faa72764c8e65cb92c41ddfa7023a59b7cd7b276c68691c194b0fe014b5. This is semantic parity, not a latency or token-saving claim.
  • The disposable installed wheel matches eight packaged source files; twelve old-record entrypoint checks reject, and the packet-free frozen release record retains its original signed Host authority. The frozen fixture bytes are unchanged.
  • Standard diff-selected premerge canary, public-boundary scan and exact-head RFC checks are recorded with this proposal. No live installation, merge, release or model experiment is performed.

Known qualification gap: test_bound_replan_reaches_actual_host_with_original_evidence[file/sqlite] returns blocked instead of replan_required on both the unchanged base and candidate (2 failures, 6 passes in that suite). This proposal does not claim full replan Host qualification. Two other stale CLI fixtures are now explicitly initialized through the existing canonical-authority fixture helper; no active state is migrated by tests.

Scope: 25 files changed, 447 insertions(+), 1018 deletions(-). This is a cleanup prerequisite; #7166's benchmark-solver and productized Codex App incremental-context acceptance remains separate and open. Fresh producers already omit the old field, so this removal alone does not shrink their quota packet.

中文:彻底结束旧包及旧 witness 的读取兼容,删除重建、residue、opaque fallback 与无调用者依赖。现代签名含义、身份、权限、重放及原始历史记录保持不变;旧格式明确报错,正常路径不新增 RPC、问询或准入步骤。File/SQLite 真实 CLI、回放及现代包等价检查已覆盖;两项主干同样失败的 replan→Host 用例继续作为明确缺口,不宣称安装态或完整产品验收完成。

本次评审修复:共享 typed guard 在投影前同时检查 decision 顶层与 contract_capsule,消除直接构建、签名、捕获和 CLI 对旧 witness 的处理差异。新增回归在旧提交的六个嵌套输入上失败,修复后两处位置及全部读取入口均通过;正常冻结样例的签名和原始数据保持不变。当前 103 项 Python、57 项 TypeScript 与标准 premerge canary 通过,仍待新提交评审和 CI。

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

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent loopx-agent changed the title refactor(turn): skip unused legacy packet reconstruction Consolidate historical protocol-packet reconstruction in the Turn reader Oct 23, 2026
…egacy-projection-20261023

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

Exact head: cacf609d61090ef2334994b64d4a79b0d1a46c22;immutable baseline: cde8f0354ca1738f3b6ed8a175f01283cdb3e2db。

[P2] 新增 Python 旧字段消费者违反冻结退役上限,且被更早的既有失败遮住。 第47行新增 protocol_action_packet 读取;修改前 ledger的 Python carrier 与 migration surface 上限均为1。对两个实际 Git 版本使用同一完整 tracked-source census,基线两项都是1,当前都是2,既有读取位于 presentation/renderers/quota_markdown.py。完整 smoke 在两版都先因无关 goal_boundary 32/30失败,不能据相同首条错误推断此 PR 没有新增退役回归。修复新增 Python 旧字段读取面,使现有冻结上限继续成立;复用已有 typed reader 边界。若不能在单次粗粒度事务内保留该优化,可收回 Python 预判、如实缩小现代分支收益声明;不要隐藏字段、提高上限或为检查存在性增加一轮 RPC。

动机

通过 Python 兼容 API、quota signature 与 TurnEnvelope 读取现代决策或历史 witness 的调用方。

原始历史字段在 Python 选择和组装,TS 又有 compact-derived 有序组装;现代无旧包的调用也提前运行历史 provider。

本次六文件改动将历史字段选择和有序组装收敛到 TS,保留兼容 API;完整输出及有序文本对照相同。新增 Python 旧字段消费者仍违反冻结上限。

不缩减模型输入,不新增准入、状态、provider 或 UI,不声称安装采用、端到端提速或模型收益。 新增字段迁移面须修复;当前源码对照不结算安装态资格、完整成本和整个 quota/Turn 融合。

改动思路

原始字段选择与共同有序组装收敛到既有 TS Turn owner,Python 保留共享 provider 与原文本转换,历史/compact 两份输入仍独立;但新增 Python 字段预判使冻结迁移面从1增至2,必须修复。

本 PR 可交付历史字段 owner 收敛及兼容 API;当前必须去除新增字段迁移面。保留全部历史 witness、完整输出和签名,不以无关旧失败替代这个新回归,也不扩展为新桥接框架。 最小边界是复用已有 reader、保留原 codec、同次事务完成字段选择;独立兼容 API 新增一次 TS 交易,已在协议文档披露。历史格式有明确持久支持义务,不能为减少行数删除。若现代无包优化不能在冻结边界内保留,应明确缩小该收益,不能掩盖字段或新增属性探测 RPC。

具体改动

spec_ref: loopx/semantics/vocabulary_v0.json;spec_revision: cde8f0354ca1738f3b6ed8a175f01283cdb3e2db。以修改前退役 ledger、既有历史格式/API契约和 TurnEnvelope 原验收判断,没有用新加协议段落自证。

  • protocol_action_packet.python_module_budget:not_met,完整 Python carrier 与迁移面均1→2;最小修复见首条 P2。
  • historical-witness-and-signature:implemented,原始与 compact-derived 输入独立,verified/residue/opaque/missing 及冻结签名保留。
  • capture-and-outer-effects:implemented,原 capture、来源检查、重试、Host 拒绝与外层恰好一次效果保留。
  • ordered-field-api:implemented,原 Python 标量、空白、Unicode codepoint、字段顺序与兼容 API 在本次独立对照中保持。

关键代码讲解

  1. interaction_contract.py::protocol_action_packet_inputs保留共享 user/action provider、严格 bool 与 Python v0 文本转换,替代原 actor/字段组装分支。protocol_action_packet_fields成为已有 TS reader 的兼容入口,并覆盖回原 metadata 值,避免 1.0被 JSON 改成1。
  2. turn_envelope.ts::originalProtocolActionPacketFields负责原始 actor/action 选择;orderedProtocolActionFields与 derived 路径共享有序组装。原始文本与 compact codec 仍分别进入 residue 核验,没有用当前动作改写历史摘要。
  3. _protocol_action_projection在无有效旧包时跳过历史 provider;存在时携带准备输入加入原 build/signature 事务。34次实际 build/signature 调用各只有一次 owning coarse transaction;第47行新增 Python key 读取本身仍违反冻结门禁。
  4. 新15例 literal API 测试覆盖严格 bool、非标量、emoji/控制空白、Python whitespace、float与顺序;原 history 文件增加4例现代路径不依赖旧指导 reader 的回归。协议新增段落明确 owner、转换与独立 API 的桥接成本。

对主干的风险

对新基线与本 head 重新执行17组同输入生产投影:完整 envelope 与两份 signature document 共191609字节逐项相同,无输出归一化。另96组独立字段 API 输入覆盖12种状态和8种文本/类型变体,完整有序字段、嵌套标量类型和摘要全部相同,零拒绝。新15例 literal 在两版都通过;4例现代 callback sentinel 在新基线失败、在 head 通过。

本方较广 Python 运行183通过、24失败、1跳过,包含10项真实 File/SQLite CLI 到子进程 Host 的 capture/recovery 测试;基线相关子集33通过、同24失败。完整24项 pytest 诊断逐项相同,仅归一化源码根、pytest临时根和对象地址,没有去掉语义字段、断言、错误码或 hash。原 depth12用例在两版均因相同宿主临时目录条件跳过,保持未资格。42项 TS 测试与配置内 control-plane typecheck 通过。Host 模型端为合成可执行程序,不是活模型或安装采用验证。

标准 premerge 的6项直接检查及18/19项范围检查通过,含公开边界。唯一执行失败先报告既有 goal_boundary;其完整错误和全部计数在新基线与 head 相同,单独保留为合并限制。同时,完整 census 明确证明新增的 packet1→2回归,不能因前一失败提前退出而漏掉。旧九行版本的结果保留为历史,没有当作本次六文件 head 的验收。未查询 CI,未测得净延迟、模型输入或完整请求成本收益。

我的整体评价

REQUEST_CHANGES:字段选择向既有 TS owner 收敛有实际维护价值,原格式/API兼容和输出对照证据也成立;当前仍需修复首条冻结迁移面回归。没有要求此 PR 修复无关旧 fixture 或整个父级融合。原始字段选择与共同有序组装收敛到既有 TS Turn owner,Python 保留共享 provider 与原文本转换,历史/compact 两份输入仍独立;但新增 Python 字段预判使冻结迁移面从1增至2,必须修复。 本 PR 可交付历史字段 owner 收敛及兼容 API;当前必须去除新增字段迁移面。保留全部历史 witness、完整输出和签名,不以无关旧失败替代这个新回归,也不扩展为新桥接框架。

长程要求、完整文本、权限和恢复边界按 preserved 判断,新增 key guard 的位置仍不满足退役契约。检查 Python/TS 投影与兼容 API、协议文档和原调用方;没有渲染页面或首屏改动。 视觉未验证范围:none within this internal projection presentation boundary。随包经验用于核对真实调用方、完整成本和最小有用边界;没有把代码减少、经验投递或测试数量当作模型收益。

English verdict: REQUEST_CHANGES — cacf609d61090ef2334994b64d4a79b0d1a46c22. The six-file TS consolidation preserves17 complete envelope/signature observations and96 ordered API/type/text observations. However the new Python legacy-key read expands both frozen packet carrier and migration counts from1 to2 against1. The identical earlier goal_boundary failure masks this additional regression in the fail-fast smoke. Repair the new carrier boundary without hiding the token, raising the budget or adding a property RPC. Positive Host/TS checks and unrelated fixture failures remain separately credited; no model or latency benefit is claimed.

Comment thread loopx/control_plane/quota/turn_envelope.py Outdated
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent loopx-agent changed the title Consolidate historical protocol-packet reconstruction in the Turn reader Retire protocol action packet readers and legacy witnesses Oct 23, 2026

@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: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

Exact head: 365560cc3c700284674210f3e09799b42c340ad9;immutable baseline: 334da0973f786e748013b926cc85b5680a5343b0。

[P2] 在 source 投影前拒绝退役的 capsule witness。 quotaActionSignatureDocument 第866行先调用 turnActionProjection(payload),而 source guard 只检查 top-level key。若给一份有效的 packet-free decision 加上 contract_capsule.protocol_action_packet,原 capsule 会在投影中被重建,随后签名检查看不到旧 witness。实际以仓库冻结 missing_packet decision,加 null、空对象和非空 witness 三种值:直接 builder/quota signature 均成功并丢掉 witness;同一输入在 CLI/renderer 明确报 unsupported。Effect reader 也接受这三例。在 source 转成 action projection/新 capsule 之前,用同一 typed 拒绝 owner 校验 top-level 与 contract_capsule 两种已声明位置;空值也按 presence 拒绝。补充同一输入跨 builder、quota signature 与 CLI 的反例,保留现代全输出及原签名检查。 这是格式拒绝不一致,未声称已经绕过 Host 权限或伪造签名。

动机

读取普通 quota、历史输入、TurnEnvelope、CLI/Markdown 与签名文档的现有调用方。

原实现仍读取历史 packet,重建字段与 residue/opaque witness;当前源码改为显式退出该格式,现代 packet-free v0 仍受支持。

现代10组完整输出与签名保持一致,旧格式改为明确拒绝且原件不改;但同一 nested capsule 输入在 CLI 拒绝、直接 builder/signature 接受并丢掉 witness,退出契约尚未完整落实。

不自动迁移或重签历史记录,不新增准入、执行权限或模型步骤,不声称安装采用、性能或 token 收益。 投影前的 capsule 拒绝缺口须修复;实际 release/安装及未知外部归档不由本次源码评审资格化。

改动思路

旧格式选择、重建和传输准备已删除,当前普通路径直接复用原 TS owner;但 Python 渲染路由与 TS source 路由的 capsule 判定不一致,应在既有 typed 边界统一。

本 PR 现在是25文件的显式格式退出,历史原件保持,旧格式有意不再受支持;当前须补齐投影前的同一拒绝条件,而不是恢复全部旧解析器或另建迁移服务。 这已是显式 breaking input-format proposal,不能沿用旧六文件版本“保留历史兼容”的判断。修改前协议允许另行声明 reader 退出和迁移政策;新文明确源码/首个正式 release 边界、原件保留和恢复办法,评审不把该声明当作合并、安装或发布授权。

具体改动

spec_ref: docs/reference/protocols/protocol-action-packet-decision-v0.md;spec_revision: 334da0973f786e748013b926cc85b5680a5343b0。以修改前的 reader lifetime、未来 breaking policy、原始记录与签名约束判断。当前新增的退役文字是被核验的改动,不能自证实际拒绝已经完整。

  • separate-reader-removal-policy:implemented,显式退出特定格式,公布源码/首次 release 边界和恢复;不是所有 v0 退出,也不重写/重签原件。
  • canonical-source-and-witness:not_met,首条 P2 的 nested source capsule 被直接 API 归一化掉,和同一输入的 CLI 判定矛盾。
  • packet-free-signatures-and-effects:implemented,现代 typed 动作、必读、权限、原 capture、重试及外层效果在本次对照中保持。
  • preserve-original-history:implemented,冻结 fixture 原字节与 digest 不变;3个旧包记录现在有意拒绝,1个无包原记录仍按原签名/Host 读取。旧兼容结果只保留为历史。

关键代码讲解

  1. effect_program.ts::assertSupportedQuotaPacket新增 own-key presence 拒绝,quota 的 protocol_summary固定 null;独立 turn-result family 仍保留该 observation 字段。
  2. Python 原字段选择/摘要 renderer、TS reconstruction/residue/opaque、准备字段传输及旧 verifier 被删除。现有 Turn/Effect owner 继续控制动作、签名与效果,没有新服务或持久状态。
  3. 直接 envelope signature、capture bind 和 replan identity 明确检查 envelope 与其 capsule;但 source build/signature 经投影重建 capsule,漏掉输入 capsule。这正是新增不一致的路径。
  4. CLI 在可选投影/fallback 前调用 effect_program.py::reject_retired_quota_format,两个 Markdown renderer 复用该共享 Effect 适配器。现代 rendering 无额外 RPC;该 Python 路由对 nested capsule 已拒绝,不能代替补齐 typed source owner。
  5. 十份协议/RFC/ledger 文档声明格式边界与原证据保留;六份测试改为现代支持/旧格式拒绝,并为 settlement、File/SQLite CLI 建立 canonical fixture。两组 RFC 镜像已核对。当前说明与验证应对应这25文件 head,旧 cacf609 的兼容 API 数字不能充当本版资格。

对主干的风险

本 head 标准 premerge 的6项直接检查和19项范围检查全部通过,含完整语义扫描、双语与公开边界,零 manual holds。当前 census 为 packet Python1、TS1,既有上限未提高;前次 review 的1→2问题已解决,不再作为阻断。

10组相同 packet-free 输入的完整 envelope 和两份 signature document 共123371字节逐项相同,无输出归一化。TS 全部源码、测试与依赖声明未变,按 blob 对照复用 439cb5f 的47项 TS 与 typecheck;新 head 的 Python/CLI 路由已重跑。本方 Python 较广运行135通过、20失败、1跳过,包含真实 File/SQLite CLI/Host capture、来源变化、丢失/损坏拒绝、重试和终态不重复效果。基线相关子集10通过、同20失败、同1跳过。20项 setup 失败的节点与完整 pytest 诊断逐项相同,仅归一化源码根、pytest临时根和对象地址;未移除断言、语义字段或 hash。原 depth12用例在两版均因相同宿主布局跳过,保持未资格。

这些通过不覆盖首条反例:冻结无包 source 加 nested witness 后,3个值经5个实际入口形成9次错误接受和6次正确拒绝,输入完全未改。提交测试覆盖 top-level 旧包和直接 stored envelope,遗漏了 source 内的 capsule。未查询 CI,未安装、运行模型或验证未知私有归档,未证明成本/性能收益。

我的整体评价

REQUEST_CHANGES,依据是当前 head 的实际 capsule 拒绝缺口。承认前次字段数量问题已修复,承认现代全输出、真实宿主和标准检查通过;不把有意撤销的旧格式兼容误说成已保持,也不要求恢复全部旧 reader。旧格式选择、重建和传输准备已删除,当前普通路径直接复用原 TS owner;但 Python 渲染路由与 TS source 路由的 capsule 判定不一致,应在既有 typed 边界统一。 本 PR 现在是25文件的显式格式退出,历史原件保持,旧格式有意不再受支持;当前须补齐投影前的同一拒绝条件,而不是恢复全部旧解析器或另建迁移服务。

现代长程要求和效果边界保留;相同输入的错误/恢复行为目前不一致,必须补齐。检查既有 CLI/Markdown/Host 错误与恢复入口;没有页面或首屏布局改动。 视觉未验证范围:none within this internal projection presentation boundary。随包经验用于核对真实调用方、完整行为与最小修复;测试数量、删行数与文档声明都不能替代拒绝条件的实际覆盖。

English verdict: REQUEST_CHANGES — 365560cc3c700284674210f3e09799b42c340ad9. The declared legacy-format retirement is explicit, the old carrier-count finding is resolved, and all6 direct/19 selected premerge checks pass. However a valid source carrying a retired nested capsule witness is accepted and normalized by build/quota-signature while the same input is rejected by CLI/rendering. Reject that capsule before source projection; cover null,empty and witness values across the same public APIs. Ten complete modern pairs,47 source-validated reused TS checks and real Host coverage remain positive evidence; unrelated20 fixture failures and the native-layout skip remain separate.

Comment thread loopx/control_plane/quota/turn_envelope.ts
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.

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

APPROVE:未发现当前 head 的阻断项。此前嵌套 contract_capsule witness 被源投影丢弃的问题已通过共享入口修复;本结论重新评估完整 25 文件变更,不沿用旧结论。评审对象是 a7ee1eafc8ed1101e876bc9dd61602d547e4af67。这是有意退出旧输入格式的源代码提案;批准评审不代表已批准合并、安装或发布。

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

动机

受影响的是读取 quota 决策、构建或校验 TurnEnvelope,以及使用 CLI/Markdown 读取这些结果的调用方。TurnEnvelope 是携带当前动作与签名事实的执行输入;旧 packet 是已经停止由新决策生成的兼容摘要。

调用方读取旧 quota 决策时,过去会重建兼容摘要;本次改为在读取、投影和签名前明确拒绝,并提示获取当前 typed 决策,避免不同入口把同一旧 witness 解释成不同执行事实。

普通无旧字段决策保持完整输出和原签名;携带旧字段的输入在所有已声明入口一致报 unsupported format,原始历史记录保持不变。价值是删除已经退出写入路径的重建、残留和 opaque 分支,并使支持边界一致;没有测得速度、token 或长期效果收益。

本 PR 不完成父任务的主干性能改进,不发布或安装版本,不证明模型采纳、外部存档升级或完整 replan→Host 路径,也不授予合并权限。父项 #7166 的共享 typed 投影与实际后续执行仍待其 owner 完成;当前两个基线一致的 replan→Host 用例未到达 Host,不能把本次清理视为该路径或长期效率验收。

独立规范依据是改动前的 docs/reference/protocols/protocol-action-packet-decision-v0.md,spec_revision 为 334da0973f786e748013b926cc85b5680a5343b0。原规范明确:停止写入不等于删除 reader,后者必须单独声明 breaking protocol 与数据政策;不能用本 PR 改写后的文档反证自己。逐项判断:

  • separate-reader-removal-policy:当前文档单独提出 source/首个包含该变更的官方 release 边界,说明原件保存与恢复方式,不宣称已经发布或认证未知客户端。
  • canonical-source-and-witness:共享 guard 在原 source 转为新 capsule 之前检查 root 和原 capsule;同一输入的跨入口反例现已全部明确拒绝。
  • packet-free-signatures-and-effects:10 组现代完整输出及两种签名文档逐字节一致,现有真实 capture/CLI/File/SQLite/Host 正向路径得到覆盖;完整 replan→Host 缺口另外保留。
  • preserve-original-history:冻结记录原始字节与哈希未变,不删除字段或重签。三种旧格式现在明确拒绝,原 packet-free 历史记录继续通过原签名和 Host 校验。

改动思路

把两种已声明位置的 presence 判断放在现有 TypeScript Effect owner,删除三个调用方的重复 capsule 检查,既统一了拒绝次序,也避免新增 Python 决策副本;现代输出不增加 RPC。

当前 PR 是完整的旧输入格式退出与维护成本收敛:保留原件、明确拒绝、保留现代签名语义;共享投影、安装升级和长期效果由现有父项及发布 owner 验证。最小的 root-only 修复已经被独立反例证伪;另建迁移服务或在签名前删字段会扩大实现或改变历史含义。保留全部旧 decoder 则没有兑现本次明确提出的退出边界。

下面是从 exact head 源代码归纳的比较表,属于说明,不替代执行证据:

输入与入口 改动前/上一轮缺口 当前结果
普通 packet-free source/历史记录 当前 typed 路径与原签名 完整输出与原签名保持
root 旧字段,含 null/空值 兼容重建;上一轮已拒绝 在解释、投影和 fallback 前拒绝
原 source 的 capsule 内含旧 witness 上一轮 builder/source signature 会丢弃它,CLI 则拒绝 同一共享 guard 在转换前拒绝,15 个独立调用全部一致
原始旧格式历史记录 原 reader 接受 明确 unsupported;保留原件,用隔离的兼容旧 reader 查看或重新取得当前决策

这不是 default-off 功能:旧格式接受范围有意改变,不能声称旧输入仍然兼容。新规则不增加问题、确认、admission 或能力激活流程;普通现代调用无需额外操作轮次。

具体改动

完整 base→head 为 25 文件、+447/-1018:删除 Python 字段选择/渲染和 TS 重建/残留/opaque 分支、废弃 transport 参数及过时 acceptance verifier;增加小型共享拒绝入口,并同步协议、两组双语 RFC/ledger 与回归测试。共享 protocol_summary 仍服务独立 turn-result 家族,quota 返回 null;不能为删除旧 quota reader 顺带破坏另一输入家族。

相对上一轮 365560cc3c700284674210f3e09799b42c340ad9,只有 3 文件 +33/-8:guard 覆盖原 capsule、三个 reader 去掉重复判断,以及扩展真实入口的 presence 回归。已核对其余 source/配置/依赖/文档/测试不变,重跑变化所影响的 typed、Python、实际入口及 whole-output 证据;没有继承上一轮 verdict。

关键代码讲解

  1. assertSupportedQuotaPacket 同时遍历原对象及 asObject(packet.contract_capsule),用 Object.hasOwn 判断。null、空对象、未知或 malformed 值都按 presence 明确报错;不依赖文本关键词、不改原输入。interpretQuotaShouldRunPacket 在解释执行事实前调用它。
  2. actionProjection 先把原 payload 交给上述 interpreter,再构造动作和新 capsule。这个顺序修复了“先投影掉 witness,再把它当不存在”的真正漏洞;只在构造后的 Envelope 上补 guard 无法覆盖它。
  3. turnEnvelopeActionSignatureDocument 仍由原签名 owner 读取 canonical 维度,但先复用完整 guard。capture binding 和 replan identity 同样复用它,因此删除各自的 capsule 重复检查有实际依据;旧 witness 不能通过重算签名转成当前权限。
  4. reject_retired_quota_format 仅在原 root/Mapping capsule 出现旧字段时路由到实际 TS reader。它不重建动作事实;支持输入不新增 RPC。两个 Markdown renderer 使用这个已有桥接,错误由现有 typed adapter 传回。
  5. _project_quota_cli_payload 在可选投影和 fallback 之前执行同一拒绝路由。这样 full 输出也不能绕过拒绝。正常决策取得、capture/retry/terminal replay 继续由原 authority owner 管理。

对主干的风险

主要风险是有意 breaking 的 reader 支持政策,而非新增状态:未知独立旧客户端需要升级。历史 packet、witness、receipt 和签名必须保留原样;拒绝后通过正常入口取得当前 typed 决策,或用隔离的兼容旧 reader 查看原件。不能手删旧字段、重签、据此重放活跃状态,也不能从格式级回滚推导整库降级安全。

本次独立验证:

  • 同一冻结 packet-free source,只增加 nested witness 的 null/空对象/非空对象,经过实际 Effect、builder、quota signature、Python renderer guard、CLI full projection 共 15 次调用:上一轮是 9 次错误接受、6 次拒绝;当前 15 次均为明确 unsupported,0 次错误接受,输入不变。提交中的回归另覆盖 6 值×root/capsule 两位置及相关 capture/Host 入口。
  • 10 组现代全输出与签名观察共 123371 字节,不做归一化即可与不可变基线完全一致。当前 head 实际重跑;基线复用已绑定 334da0973f786e748013b926cc85b5680a5343b0 且源/配置/依赖假设复核过的实际观察,不冒称本轮重跑。
  • 冻结历史 reader 在基线和当前均新执行:基线 4 种原记录都接受;当前 3 种旧格式在 source signature、Envelope signature、Host 三入口明确拒绝,packet-free 原记录继续通过原哈希/Host。冻结文件 SHA-256 为 da0520a7f1b41402229e31a690b6b5a5e1e83144cb21f9b2960d4aebd4dccb14,未改写。
  • 当前 62 项 TypeScript 测试和配置的 control-plane typecheck 通过。九文件 Python 结果是 147 通过、22 失败、1 跳过,不能写成全绿。20 项 capability/vision 在原有 todo fixture 准备阶段失败;另 2 项 bound replan→Host 在到达 Host 前实际 route 为 blocked。所有 22 项的完整归一化诊断与不可变基线逐项一致,摘要 a964b5c96c020fed19d7b76daf3c337d1ddc6baccf518b6b10bdba76beaca264;20 项基线复用原实际运行且复核未变条件,2 项则本轮重新运行整个基线 context suite,结果 6 通过/2 失败。仅归一化已知源目录、pytest 临时序号、对象地址及同一 Python 3.14.8 标准库相对前缀,未删除断言或语义诊断。当前修复未改变这些失败的因果路径,改变的 reader 不变量有独立通过证据。depth-12 因原生临时目录无法容纳限定布局而跳过,保留平台缺口。

语义与 CI 对齐

按仓库当前本地风险选择执行标准 premerge:6 项直接检查+19 项选中检查全部通过,0 manual hold,包含完整语义、双语、编译与 public boundary 检查;没有放宽预算、删冻结记录或用 mock 提供所评审的后置条件。未查询、轮询或等待 GitHub CI;该信息不构成本次评审缺口。

现代完整动作、required reads、actor scope/lease、stop、先后次序及 settlement 文本与签名原义保留。旧格式拒绝是机器执行的支持边界,不是“建议”;不能把格式变化包装成义务压缩或 default-off。新错误文案保持 domain-neutral,不按项目或 benchmark 字符串判断。本地通过和 APPROVE 仍不授予 maintainer merge、release、安装或 active-state replay 权限;广测中的基线失败也没有被声称修复。

我的整体评价

未发现当前 head 的阻断项,建议接受这份边界明确的源代码提案。修复不仅增加检查,还把原 source 与 stored Envelope 的拒绝规则收回同一已有 owner,删除重复判断和真实旧知识;独立历史反例现在通过,完整现代语义与冻结历史含义分别得到验证。这里的简化判断针对整个 25 文件退出提案,不只针对最后 3 文件或测试数量。

未修改渲染布局:检查的是 Effect/TurnEnvelope、CLI 投影与两个 Markdown renderer 的输入支持和错误路径,不涉及页面层级、折叠或首屏构图。未验证安装中的 App、未知外部客户端及私人历史档案的升级,也未把源级 CLI 检查当作视觉或模型采纳证明。

剩余最强缺口是完整 bound replan→Host、实际安装/独立消费端升级和长期收益;它们不能从 guard 正确、签名相等或本次批准推导。父项及 release owner 继续承担对应验收;本次无需新建迁移框架、界面或确认流程。

English verdict: APPROVE a7ee1eafc8ed1101e876bc9dd61602d547e4af67. The original nested-witness counterexample now rejects consistently before projection, and the complete 25-file proposal fits the existing typed owner. Modern full outputs/signatures remain identical; legacy-format withdrawal is explicit and original history stays immutable. The 22 independently base-attributed Python failures, native-layout skip, installed rollout and full replan-to-Host qualification remain disclosed; this review grants no merge or release authority.

@huangruiteng
huangruiteng merged commit 542b7d5 into main Oct 23, 2026
29 of 39 checks passed
@huangruiteng
huangruiteng deleted the codex/turn-envelope-legacy-projection-20261023 branch October 23, 2026 18:57
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