Repository navigation
Validate recorded Turn versions before journal recovery - #8518
Conversation
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 · gpt-6.1-sol · OpenAI · runtime_reported · max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
评审提交 c5d9aa5
动机 / Motivation
涉及的操作者是:升级后继续一个已入账的 Turn,或判断某份原日志能否安全恢复的 CLI 操作者。 预览必须先回答当前版本能否安全读这份日志。同一真实 v0 日志中,未修改的记录可回放;已声明未知版本的记录在进入 Host 或扣额之前明确停止。操作者使用原来的检查或恢复命令,保存原记录即可。主干的恢复入口直接取原始 plan 的身份字段,历史解释分支也漏查了部分版本。真实 v0 日志只改一处版本字段,主干仍返回 preview。这让操作者无法区分原轮次可以续跑,还是该保留日志并换兼容的读取器。已验证旧日志可回放,未知版本在恢复前停止,原回执与扣额均保持原样。 只在已记录 Turn 的解码处执行兼容性校验。新准入、Host 调用授权、原事务身份与结算没有改动。
改动思路 / Approach
已记录的版本、签名 coverage 和捕获摘要由现有 TypeScript envelope 解码器检查。Python 保留路径、文件锁、Goal/Agent/Turn 身份检查;解释器决定检查结果,原事务继续拥有所有实际副作用。 只在已记录 Turn 的解码处执行兼容性校验。新准入、Host 调用授权、原事务身份与结算没有改动。v1 和带 sidecar 的过渡日志仍走现有摘要校验;早期 v0 日志原本省略版本的情况仍按兼容规则读取,显式 null 或未知版本不能借此降级。旧日志继续保留,直到对应恢复窗口核对完成。
具体改动 / Changes
- 恢复入口 从共享读路径取得身份;校验失败时,在准备 Host 前返回错误。
- 版本和 source 校验 按现有版本选择解码器。当前 plan 校验唯一 source,过渡格式校验 adapter 与原 source 的绑定,历史 v0 则检查已声明的版本和签名 coverage。
- 日志解释 把同一失败投影为 work_contract_invalid、恢复 blocked 和空 effects。
依据 Native Turn Host capture 和 C1 §9 验收 的基线 d3ac3bd:Explicit unsupported version refusal 在预览、检查和执行三路通过;Original journal and effect identity 用原日志回放通过;Integrity-bound current recovery 用 File/SQLite 的当前及过渡格式、原始数值、捕获与重试用例通过。全量 C1 部署(Complete C1 adoption)不在本轮范围。六个变更文件中,生产文件 +41/−17;测试 +71/−8;文档及修复指引 +13。
对主干的风险 / Risks
我用 22b0f6c 的真实 CLI 生成 File、SQLite 日志,再用此提交构建的 wheel 读回。旧版真实 CLI 写入 File 与 SQLite;候选 wheel 检查及显式回放,均返回原 receipt,Host、扣额仍各一次。 原日志上独立替换 plan 版本、envelope 版本、签名版本和签名 coverage,各试未知字符串和显式 null。主干 16 项均给出预览;候选预览和执行全部拒绝,检查返回 work_contract_invalid、blocked、effects=[]。原日志、决策捕获、Host 事件和扣额读回保持原值。
候选 Python 75 项、TypeScript 151 项、类型检查和 quick premerge(6 项直接、4 项选定)通过。主干的相同 Python 范围为 69 项通过、4 项失败,四项均是旧数值夹具没有独立原始捕获。没有查询远端 CI;Host 是受控替身。旧记录的恢复预览增加一次本地只读运行时调用,未测稳态延迟。
我的整体评价 / Verdict
已满足这次日志恢复的交付目标。长程影响是有效的旧轮次仍按原回执结算一次,错误格式不会进入恢复;CLI 操作者沿用原命令,就能区分这两种情况。没有新版本词表或迁移。核对了 turn CLI 路由、日志读取器和公开协议。变更没有改动 App、Lark 或网页的呈现,视觉检查不适用。 本结论不覆盖真实模型或 App/Lark 的完整 C1 部署。
English verdict: APPROVE. Recorded Turn recovery rejects unsupported declared formats before effects and preserves original historical receipts on File and SQLite.
songoow
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · GPT-6 Astra Pro · OpenAI · self_reported
评审提交 c5d9aa51d6bd13637ab5a2bea991946f0a6022e6。本轮独立核查完整六文件改动;未继承作者已有的同 head 自评结论。
动机 / Motivation
升级后检查或恢复已保存 Turn 的 CLI 操作者,需要知道当前程序能否理解原日志。历史 v0 日志只改成未知 envelope 版本或显式空的版本/coverage,主干预览仍接受它;候选在预览和执行前明确拒绝,并由检查入口报告无效来源。
本次验证的结果是:不支持的历史声明不会进入恢复,有效原记录仍能读回,已完成 Turn 可沿原回执重放且不重复 Host 或扣额。范围限于已有日志读取和兼容性校验,不改变新工作准入、授权、事务身份或完整 C1 的发布资格。
改动思路 / Approach
原恢复入口对历史记录直接提取身份;journal inspection 则已经进入 TypeScript 的 plan reader。PR 把两者接到同一个 checkedTurnPlanSource,先按原版本校验,再读取身份。Python 继续拥有文件读取、锁和 Goal/Agent/Turn 比对,TypeScript 继续拥有 complete source、版本和签名 coverage 的解释。
复用既有 typed source owner 比在 Python 再维护一套版本表更合适。历史上缺省版本的兼容入口只在 recorded reader 内启用,实时 Host consumer 的默认严格检查保留。当前 PR 边界是统一已有恢复读路径,保留仍在恢复窗口内的历史记录;不增加 writer、迁移状态或新的恢复流程。
具体改动 / Changes
关键代码讲解
checkedTurnPlanSource从已有turnPlanWorkSource抽出共同源校验。v1 继续要求唯一完整 source 及原摘要;过渡 v0 sidecar 继续校验 adapter/source 绑定;纯历史路径新增已有 consumer 的显式版本和 coverage 检查。read_recorded_turn_plan_lineage只做 Python 到 Effect RPC 的传输,保留数值 token 信息。load_loopx_turn_plan_from_journal不再另走 raw identity 分支,校验失败转成 CLI 可见错误,之后的身份匹配仍保留。turnPlanWorkSource继续为 journal interpreter 派生 settlement identity;已有解释器把来源失败投影为work_contract_invalid、blocked和空 effects。它不会为了展示一个错误而执行恢复。- 数值回归夹具现在分别准备原 complete capture 与历史 raw capture。四个基线失败原本都是夹具没有 original decision capture;这次补齐独立原件,保留
1.0、负零和大整数的检查,没有降低 source integrity 断言。
判断依据为Native Turn Host capture 契约,修订 d3ac3bd8d69821ae5843b7cef5fdb6dcbc7cae74,并结合 C1 §9 的兼容性和原身份恢复要求:
| 契约项 | 当前 head 判断 |
|---|---|
unsupported_declaration_refusal |
已实现。File/SQLite 上历史 plan 的 null、未知 envelope、null signature coverage,base 预览通过,head 预览及执行拒绝;检查没有 effects。 |
original_identity_and_receipts |
已实现。真实 CLI 完成的 Turn 在原日志恢复后重放成功,Host 次数、quota ledger 和 journal bytes 不变。 |
current_and_historical_source_integrity |
已实现。当前 complete、过渡 sidecar、历史解码、数值原件及错误源校验由定向测试覆盖;缺省历史声明不被当成未知显式声明。 |
complete_C1_adoption |
范围外。本次没有据此认证真实模型采用、App/Lark 或整个 C1 部署。 |
对主干的风险 / Risks
PASS:四组相关 Python suite 在 head 为 148 passed;对照的不可变 main beff0f3e55d1f70eceebbd8e78c11f1cff34643b 为 142 passed、4 failed,失败均为上述缺原捕获的数值夹具。已检查 d3ac3bd 到该 main 的三个提交,受影响 production/test 文件无变化。151 项 TypeScript、控制面 typecheck,以及 quick premerge 的 6 项直接、3 项选定检查通过。
独立真实 CLI 对照使用同一 File/SQLite 原件:历史版本反例在主干被接受、候选被阻断;当前 v1 的未知版本两边本来就拒绝,候选改为准确的 plan-version 错误,不能把这个对照称作新修复收益。恢复原件后,两边均重放已有完成回执;没有第二次 Host、扣额或原日志改写。初次探针对当前 v1 的旧行为假设错误,已保留该记录并改用实际受影响的历史路径验证。
语义与 CI 对齐
新本地 RPC operation 复用既有版本、签名与完整源 vocabulary。新增修复指引要求先验证原日志、再恢复,保留旧 reader 直到恢复窗口完成,没有新增执行权限。远端 pytest、checks、typescript-core (2/3) 及 merge-gate 当前为 failure,另有 cancelled/skipped;本轮未归因所有远端失败,不能称为已修复或 CI 全绿。它们作为诊断记录保留,实际改动的不变量由上述本地验证独立覆盖,合并资格仍需单独处理。
我的整体评价 / Verdict
建议 APPROVE。该改动完成了声明的日志读取修复,长程恢复保留原身份与一次性结算,同时让不支持的历史数据显式停止。用户继续使用原检查和恢复命令,不需要额外确认或重建日志。复用同一个 typed owner、删除 Python 的 raw identity 旁路,生产 +41/−17、测试 +71/−8、文档及修复指引 +13,成本与问题相称。
本轮仅验证源码 CLI、真实 File/SQLite 与受控 Host;未复跑作者的旧 wheel、C1 合并组合或付费模型。历史恢复增加的一次本地只读 RPC 未单独测量延迟。本改动不改变渲染界面,视觉检查不适用;未验证范围为已安装 App/Lark、真实模型采用及长期性能收益。
English verdict: APPROVE at c5d9aa5. The shared typed reader rejects unsupported recorded formats before recovery and preserves original-source readback and once-only replay; remote CI failures remain diagnostic and merge readiness is separate.
Recorded Turn recovery
Journal inspection, resume preview and explicit resume use the same TypeScript source reader. Unsupported plan, envelope or action-signature versions and coverage block recovery. Inspection reports the invalid record with an empty effect list. Supported historical records retain their original bytes and settlement receipts.
This replaces the resume loader's separate raw identity path. Legacy resume now makes one local read-only source check before recovery. Complete plans and transitional sidecars use the existing digest-bound source. The compatibility reader serves supported recorded Turns through their recovery window.
Author validation for
c5d9aa51d6bdmaind3ac3bd8d698and C141205dcfb2ef. An unknown plan version passed preview. An unknown historical envelope or action signature passed inspection and replay.22b0f6c25a04and a synthetic Codex host. The exact wheel rejects all three unsupported declarations and replays the original journal without another Host invocation or debit. The captured source, journal and original host evidence stay byte-identical.mainso C1 can inherit the shared fix.已保存的 Turn 预览、检查和恢复共用版本校验。旧版原始记录仍可按原身份回放,未知格式会被拒绝。File 和 SQLite 的打包读回覆盖原捕获、拒绝结果及一次性结算。独立评审仍待完成。