Repository navigation
C1: unify work sources and validate recovery - #8266
loopx-agent wants to merge 295 commits into
Conversation
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent, gpt-6.1-sol, OpenAI, runtime_reported, reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
[P2] C1 仍可从旧捕获取得新租约。 旧版实际生成原捕获并写入 claim,ready 丢失后释放。当前 C1 读取未改动的同一捕获,在 File 和 SQLite 各取得活跃 epoch 2、不同 operation ID,并给原 Turn 返回 ready。 领取入口
[P2] 默认 Turn 预览越过现有预算。 真实默认 JSON turn plan 同一拥挤夹具,无 Vision 从 21,849 增至 54,074 字符,有 Vision 从 25,312 增至 61,473。既有 26,000 上限不变。base 两例通过,当前两例失败。 预览入口
动机 / Motivation
运行 Codex 原生会话、普通 quota、Turn CLI 和恢复流程的操作者依赖同一可信来源。 用户从旧版留下的 Codex 会话恢复,或者在拥挤 Goal 上先读默认计划。需要拿到完整约束并回到原 Turn,无需重新取得旧租约。 当前 C1 可运行同版本恢复和部分统一入口。真实本地入口复现升级恢复和默认预览各一项问题。 当前评审覆盖提交清单、实际 C1 CLI 路径、恢复、预算与主干组合的决定性阻塞。
改动思路 / Approach
quota 和 Turn compose 共享 work_contract,Host 与 journal 从绑定的 source 读取,authority 继续负责 lease 和结算。预览默认直接返回较大的同一工作来源。当前主干已有可复用的分页入口。 保留共享 TypeScript contract 和既有 authority 的职责分配。独立的上下文去重和读回修复可先复用,再验证当前真实单会话切换。 C1 切换 quota 和 Turn/Host 的来源。当前可审的独立传输切片在 #8285。当前 head 已合入 #8284,主干组合成功。恢复和预览需要分别通过实际入口。
具体改动 / Changes
基线为 32167518b3c2646fd9b6a3a6e0aaf74b258a7b70。C1 的单会话切换要求真实入口、完整义务、原身份与一次效果,加 §9 的原 quota 对照。 基线规范
- 原生来源。 当前 C1 在真实 File 和 SQLite 上各一次同版本对照通过。写入后中断并释放,重放同一捕获仍保留退休 epoch 1。
- 历史恢复。 旧版实际生成原捕获并写入 claim,ready 丢失后释放。当前 C1 读取未改动的同一捕获,在 File 和 SQLite 各取得活跃 epoch 2、不同 operation ID,并给原 Turn 返回 ready。
- 有界普通预览。 真实默认 JSON turn plan 同一拥挤夹具,无 Vision 从 21,849 增至 54,074 字符,有 Vision 从 25,312 增至 61,473。既有 26,000 上限不变。base 两例通过,当前两例失败。
- 完成单会话替换。 对更新后的真实组合补证据。
关键代码讲解
execute_codex_execution_preparation 从当前 capture 派生稳定 operation ID,随后让原 claim owner 和 guard 读回。handle_turn_command 将完整来源交给 build_loopx_turn_plan,默认预览省略 session 和 transaction,仍保留完整 work_contract。恢复已有 journal 时,保存的完整 lineage 与历史 decoder 分开走。 claim plan journal
对主干的风险 / Risks
当前 head 相对主干 32167518b3c2646fd9b6a3a6e0aaf74b258a7b70 的 diff 是 226 个路径。包含 #8284 的无写入主干组合通过。4 项 Anti-Entropy 对照通过,1 项 sparse numeric Effect 失败归因开放。原 capture 兼容反例从旧版真正创建的捕获开始,整个跨版本过程保留原文件。默认 preview 同一实测包含新增的 interaction、replan 与诊断正文。 已落地主干读回 旧 claim 审查
跨版本两例复现,同版本两例通过。默认 plan 的两个固定负载在 base 通过、当前失败。 Quick premerge 的 7 项直接检查和 4 项选中检查通过。当前路径还有 benchmark-sensitive 人工门。 本轮核对了当前 226 路径清单,并聚焦两个可复验的发布阻塞。整套 C1 的逐入口兼容和交付资格仍开放。 远端 CI 未取样。
语义与 CI 对齐
C1 复用了和 #8279 旧审查头相同的 digest 派生代码。旧 Host 写入普通随机 operation ID,当前派生 ID 查不到该操作,于是被既有 managed claim owner 当作新 claim。 通过既有 authority 核验并恢复真正的原 claim。旧捕获无法证明绑定时留作只读,要求使用原 Goal、Agent、Todo 和 Turn 取得新的合格 guard 捕获。保留两种 backend 的跨版本回归。 沿现有有界 preview 和已保存 source reader 分离首读与完整正文,保留所有原约束、可执行 Vision 指导和恢复命令。在 unchanged 上限重跑有无 Vision 的两例。 预算复验用 python -m pytest -q tests/control_plane/test_cli_output_budget.py::test_crowded_turn_plan_budget_preserves_executable_vision_authoring。
我的整体评价 / Verdict
对 fbd4c033e2042786dae637810c1391546ad69fcb 请求修改。先修复旧 capture 和默认预览,再基于包含 #8284 的主干组合复验。当前独立证据支持同版本原租约保护和上述两个反例。 更新后的组合须通过旧捕获恢复、默认预览、同一来源的完整消费和一次结算。全套原 quota 对照、实际安装采用和整题成本仍未验证。
English verdict: REQUEST_CHANGES. C1 still reacquires a released lease from a pre-upgrade capture on File and SQLite. Its default Turn plan also exceeds the existing budget in both matched workloads, while the clean composition with current main resolves the previous conflict.
| raise ValueError("Native execution preparation requires its original capture digest") | ||
| # The same capture can reappear after a lost readiness result. Let the | ||
| # managed claim owner recover the original receipt and current lease. | ||
| claim_operation_id = f"todo-claim:codex-capture:{source_sha256}" |
There was a problem hiding this comment.
[P2] 原租约释放后,旧版捕获仍可领取。 独立对照从旧版真实保存的原捕获和一次已写入的 claim 开始。释放 epoch 1 后,当前 C1 的 hook 取得 epoch 2 并返回原 Turn 的 ready。File 和 SQLite 都复现,同版本控制保留退休状态。请沿原 authority 证明原 operation 关联,或要求新的合格 capture。
| # The current plan has one source, so inspection retains it. | ||
| # Execution still requires its explicit surface, even if a | ||
| # caller restores omitted session/transaction metadata. | ||
| payload = dict(payload) |
There was a problem hiding this comment.
[P2] 默认 JSON 预览超出现有输出预算。 在相同的拥挤 Goal、有无 Vision 两个真实 CLI 用例中,base 为 21,849 和 25,312 字符,当前为 54,074 和 61,473,超过现有 26,000 上限。请保留有界首读和可执行 Vision 指导,把完整工作来源沿原 capture reader 提供,并重新验证两种负载。
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent, gpt-6.1-sol, OpenAI, runtime_reported, reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
[P2] 默认 Turn 计划超出既有预算。 同一拥挤 Goal 的默认 JSON 计划,有无既有 Vision 均超 26,000 字符。无 Vision 从 21,849 增至 54,074,有 Vision 从 25,312 增至 61,473。两边使用同一 workload、CLI 参数和字符上限。 当前入口 原线程
[P2] 升级前的捕获仍可重开退休租约。 升级前用真实 Host 从旧捕获领取,ready 中断后释放 epoch 1。当前 head 重放同一未改动捕获,在 File 和 SQLite 都生成不同 claim operation,取得活跃 epoch 2,并为原 Turn 返回 ready。当前 main 同样复现旧捕获问题。 当前入口 原线程
动机 / Motivation
在 Codex 上恢复中断工作的操作者,需要判断原任务能否继续。管理拥挤 Goal 的操作者还会先运行默认计划了解下一步。 同一任务在领取后丢失 ready,随后租约被释放。恢复时应先确认原租约状态。计划读取也应在拥挤 Goal 上保留可执行指导并符合原上限。 当前 head 已保住同版本退休租约,准备阶段可按需读取长范围。升级前的捕获仍会重开租约,默认计划也超过既有上限。 本次判断覆盖当前提交的来源和恢复增量,以及两个真实入口的阻塞。完整单会话切换和安装采用仍需独立验收。
改动思路 / Approach
C1 把 quota 和 Turn 的工作输入收进 work_contract,Host 与 journal 再从绑定来源恢复。现有 claim 和 settlement owner 保持权威。最新增量补上普通准备态范围补读,独立验证通过。 保留统一工作来源与既有 authority 的分工。有界预览及升级恢复可以分别修复,并从真实入口验收。 相对前次审查,完整差异有 233 路径。最后一组提交改 5 路径,并复用现有 progressive reader。当前主干合入 #8285 后在 loopx/control_plane/quota/turn_envelope.py 出现组合冲突。
具体改动 / Changes
基线为 94b91e48aa4a2cdafe9d4d31d918fe84d0112b41。C1 切换单位同时要求普通预览、Host 消费、保存捕获和历史恢复保留原义务与身份。CLI 默认计划仍有固定拥挤预算,完整原 quota 对照由主 RFC §9 管理。 基线规范
- 原生来源。 当前 head 的同版本对照在 File 和 SQLite 都保留退休的 epoch 1,也没有 ready。另测长范围的选择/领取指针可读,就绪时还原完整 220 条。
- 历史恢复。 升级前用真实 Host 从旧捕获领取,ready 中断后释放 epoch 1。当前 head 重放同一未改动捕获,在 File 和 SQLite 都生成不同 claim operation,取得活跃 epoch 2,并为原 Turn 返回 ready。当前 main 同样复现旧捕获问题。
- 有界普通预览。 同一拥挤 Goal 的默认 JSON 计划,有无既有 Vision 均超 26,000 字符。无 Vision 从 21,849 增至 54,074,有 Vision 从 25,312 增至 61,473。两边使用同一 workload、CLI 参数和字符上限。
- 单会话切换。 修复后仍需复验同一来源的逐入口消费、原 Turn 的一次结算、安装宿主和 §9 原 quota 对照。
关键代码讲解
handle_turn_command 给普通预览保留整个工作来源。execute_codex_execution_preparation 从捕获摘要生成 operation。progressivePreparationScope 仅把准备态的大范围放入同源按需读取。 默认计划 领取 准备态首读
对主干的风险 / Risks
本次核对了 233 路径清单。真实入口评审集中在默认预览、原生恢复、最近范围增量和关联回归。旧版生产者固定为 172d80d630f424b0b44dd513863ba02b5f13d55c。基于最新主干 8225c89cea 重跑两个默认预览和 File/SQLite 旧捕获,观察保持一致。组合冲突需作者处理,复验应基于处理后的新提交。 原 quota 对照
聚焦 Python 125 项和 TypeScript 199 项通过。默认计划独立配对在主干两项通过、候选两项失败。退休租约在候选同版本两项通过,候选旧版本两项失败。 Quick premerge 的 7 项直接检查和 4 项选中检查通过。仍有一项 benchmark-sensitive 人工门。 两项既有评审线程在当前提交仍开放。保留原线程方便作者对照本轮复验。 远端 CI 未取样。
默认 plan 的展示分支仅移除 session 和 transaction,仍把完整 v1 work_contract 放进预览。基线使用有界 v0 envelope。拥挤候选保留了新的 interaction、replan、Todo 和诊断正文。 复用现有有界计划和原捕获 reader。保留可执行的 Vision 写回字段和其他当前约束,在既有 26,000 上限复验两个默认预览。 新 Host 用捕获摘要构造稳定 claim ID。同版本可沿原 managed claim 回读;旧版留下的原 operation ID 与新派生值不同,managed claim 因此进入新领取。 先沿原 authority 核验旧捕获对应的原 claim 和状态。不能证明绑定时让旧捕获保持只读,要求新的合格 guard,复验升级与同版本的 File/SQLite 路径。 计划上限 回归夹具
我的整体评价 / Verdict
对 726ab94ccfecad83a8a0b8346e699ec62ca46c62 请求修改。准备态补读和同版本恢复的局部进展已复验,普通计划和升级恢复仍各有一项待修。 修复后仍需复验同一来源的逐入口消费、原 Turn 的一次结算、安装宿主和 §9 原 quota 对照。
English verdict: REQUEST_CHANGES. Both matched default Turn plans exceed the existing 26,000-character ceiling. Pre-upgrade captures still reacquire a retired lease on File and SQLite, while same-version replay is blocked.
…rated-20261107 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
…rated-20261107 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…-replan-integrated-20261107 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
评审提交 674398cb886533f11b44e26c6de9e17ca6c500ea,对照 PR base eba8a7f95f54fe09cb3dcc28bb1f55443898bbed 与上一评审头 86bbd89fd0e520fad0918d5d3488dc931b253185。
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选把六次输出中的额外第一页计入已完成组,导致整个计数相等判断失败。结果两个已读选区一同失效,连无关的单页也在下一轮重新交付。主干和前一评审头保留该单页。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 已完成页计数
动机 / Motivation
在 Codex 原生会话分批读完 Goal 约束、验收或工作资料,再经普通 resume 继续同一上下文的操作者。 过去可恢复已核验的单页选区,多页选区通常需要重读。候选让完整多页选区也能被 replay,且修复显式 C1 在长路径下的原捕获诊断。 File 和 SQLite 的旧反例现可逐页读回原诊断及原回执。没有重读时,普通 resume 可保留单页和多页选区,当前捕获与 epoch 一致。 本轮执行源码 CLI、真实 File/SQLite 和隔离的 Codex hook/replay 文件。正式宿主的模型保留、已安装版本的跨宿主行为和完整成本未独立验证。
改动思路 / Approach
Core 继续拥有原始 Turn、选择与结算。原生适配器只核验同一捕获的工具字节和重放覆盖。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 长路径失败现在复用原诊断与回执,并在必要时缩短私有 reader 路由。重放问题出在完成选区后又出现同一页,类型化的范围检查已验证全部原页,但历史比较把这次重读当成整组无法验证。 选择重放适配器
具体改动 / Changes
关键代码讲解
quota should-run 保留普通源和旧 envelope 入口,显式 C1 把当前选择、Host 准备、恢复、结算绑定同一来源。refusal view 核输出预算,并给原诊断建立较短的选区引用。原生适配器按当前文件、scope 和 epoch 保存页身份,TypeScript 按字节范围确认字面段落。已保存资料通过原捕获按需读取。Managed Host、MCP 与 benchmark 适配器沿用同一作用域和一次结算,安装验证由既有 smoke 覆盖。上一头之后合入的 workspace smoke 和 TraeX 续接已在当前 base,本轮把本 PR 的新增验证放在长路径 reader 与分页重放。 长路径诊断 同源段落恢复
以 eba8a7f95f54fe09cb3dcc28bb1f55443898bbed 的 docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9、docs/reference/contracts/interface-budget-contract.md 与 docs/reference/required-work-context.md 为准。One complete contract 有本地源矩阵与一次回执。Lossless context delivery 在重复页后的已验证段落上仍有缺口。Shared production paths 已核 CLI 和两个本地后端。Default adoption 仍需同任务、实际模型和完整成本资格。 C1 验收 原生上下文读回
对主干的风险 / Risks
相同的 276/271 字节路径下,当前显式失败返回 1,450 字节,File 和 SQLite 都能执行原样 reader,七页逐字读回原诊断和回执。普通路径的极窄预算在主干和候选均为 1,919 字节失败,均只写一张 guard 回执且零扣额。另一个同源 replay 对照中,主干和上一头无论是否重读均保留独立单页。候选不重读时保留两段,重读后两段都失效。下一选区的公开 CLI 观察由 11,473 增至 22,170 字节。完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
语义与 CI 对齐
156 个本地聚焦用例、五个 thin 预算用例通过。Standard premerge 六项直接检查和十九项选中检查无失败,benchmark 保留人工门。隔离的重放计数对照保留两段,原有缺页、历史变动和隔离测试继续通过。实际宿主模型输入、成本和托管 CI 未纳入本轮结果。
我的整体评价 / Verdict
请求修改。上轮的 1,700 字节恢复反例已修复。请让重复的已核验页不牵连另一段已经完整读过的资料,并保留当前缺页、换源和 compaction 的拒绝路径。本轮新增行为集中于原生 CLI 读回、恢复与续接。当前 workspace smoke 和 TraeX 修复已进入 base。
English verdict: REQUEST_CHANGES. At 674398c, deep refusal recovery works at 1,700 bytes. Rereading one completed page causes qualified native resume to discard independently verified sections.
| return False | ||
| cursor = max(cursor, stop) | ||
| return seen_pages == expected_pages and (selected or cursor == len(body)) | ||
| return seen_pages == expected_pages and (selected or _covers_bytes(ranges, len(body))) |
There was a problem hiding this comment.
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选把六次输出中的额外第一页计入已完成组,导致整个计数相等判断失败。结果两个已读选区一同失效,连无关的单页也在下一轮重新交付。主干和前一评审头保留该单页。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
评审提交 59e273e8473c0c3dd48e53713def337a1337f116,对照 PR base eba8a7f95f54fe09cb3dcc28bb1f55443898bbed 与上一评审头 674398cb886533f11b44e26c6de9e17ca6c500ea。
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选把六次输出中的额外第一页计入已完成组,导致整个计数相等判断失败。结果两个已读选区一同失效,连无关的单页也在下一轮重新交付。主干保留该单页,上一评审头与本次 head 均复现丢失。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 已完成页计数
动机 / Motivation
在 Codex 原生会话分批读完 Goal 约束、验收或工作资料,再经普通 resume 继续同一上下文的操作者。 过去可恢复已核验的单页选区,多页选区通常需要重读。候选让完整多页选区也能被 replay,且修复显式 C1 在长路径下的原捕获诊断。 File 和 SQLite 的旧反例现可逐页读回原诊断及原回执。没有重读时,普通 resume 可保留单页和多页选区,当前捕获与 epoch 一致。 本轮执行源码 CLI、真实 File/SQLite 和隔离的 Codex hook/replay 文件。正式宿主的模型保留、已安装版本的跨宿主行为和完整成本未独立验证。
改动思路 / Approach
Core 继续拥有原始 Turn、选择与结算。原生适配器只核验同一捕获的工具字节和重放覆盖。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 长路径失败现在复用原诊断与回执,并在必要时缩短私有 reader 路由。重放问题出在完成选区后又出现同一页,类型化的范围检查已验证全部原页,但历史比较把这次重读当成整组无法验证。 选择重放适配器
具体改动 / Changes
关键代码讲解
quota should-run 保留普通源和旧 envelope 入口,显式 C1 把当前选择、Host 准备、恢复、结算绑定同一来源。refusal view 核输出预算,并给原诊断建立较短的选区引用。原生适配器按当前文件、scope 和 epoch 保存页身份,TypeScript 按字节范围确认字面段落。已保存资料通过原捕获按需读取。Managed Host、MCP 与 benchmark 适配器沿用同一作用域和一次结算,安装验证由既有 smoke 覆盖。上次评审后四个提交只改了五个文件。重绑命令保留选项原顺序,已需要来源导航的视图按共同开销计算 Todo 行复用。深安装路径由原捕获 reader 返回明示的页预算。分页 replay 的计数实现逐字沿用上一头。 长路径诊断 同源段落恢复
以 eba8a7f95f54fe09cb3dcc28bb1f55443898bbed 的 docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9、docs/reference/contracts/interface-budget-contract.md 与 docs/reference/required-work-context.md 为准。One complete contract 有本地源矩阵与一次回执。Lossless context delivery 在重复页后的已验证段落上仍有缺口。Shared production paths 已核 CLI 和两个本地后端。Default adoption 仍需同任务、实际模型和完整成本资格。 C1 验收 原生上下文读回
对主干的风险 / Risks
相同的 276/271 字节路径下,当前显式失败返回 1,450 字节,File 和 SQLite 都能执行原样 reader,七页逐字读回原诊断和回执。普通路径的极窄预算在主干和候选均为 1,919 字节失败,均只写一张 guard 回执且零扣额。另一个同源 replay 对照中,主干在两组都保留独立单页。上一评审头与本次 head 在不重读时都保留两段,重读后均失效。下一选区的公开 CLI 观察由 11,473 增至 22,170 字节。完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
语义与 CI 对齐
两组本地验证分别有 85 项和 140 项通过,另有 1 项平台跳过、2 项重读反例失败、2 项与主干一致的普通窄预算失败。Standard premerge 六项直接检查和十九项选中检查无失败,benchmark 仍需人工复核。只调整已选页的计数下限时,两段都能保留,原有缺页、历史变动和隔离用例继续通过。实际宿主模型输入、成本和托管 CI 未验证。
我的整体评价 / Verdict
请求修改。深路径恢复和绑定后的 Todo 行复用通过当前本地验证。普通 resume 仍会把已核验资料再次送入上下文,并给操作者增加恢复成本。请补齐多余重复页的处理,保留缺页、换源和 compaction 的拒绝路径。本轮新增行为集中于原生 CLI 读回、恢复与续接。当前工作区 smoke 与 TraeX 续接已由 base 承担。
English verdict: REQUEST_CHANGES. At 59e273e, deep refusal recovery works. Rereading a completed page still causes ordinary resume to discard independently verified sections.
| return False | ||
| cursor = max(cursor, stop) | ||
| return seen_pages == expected_pages and (selected or cursor == len(body)) | ||
| return seen_pages == expected_pages and (selected or _covers_bytes(ranges, len(body))) |
There was a problem hiding this comment.
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选把六次输出中的额外第一页计入已完成组,导致整个计数相等判断失败。结果两个已读选区一同失效,连无关的单页也在下一轮重新交付。主干保留该单页,上一评审头与本次 head 均复现丢失。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…seout-20261113 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit 13b446a344346c6a65e4441953ecd90325740787) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit ab47144be5aaf88a3ced2ffbc9e0c3eb17fdf26b) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit 7daf90217a16cef7e9d47b6ab722feedfcb020a5) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit 9d7a2f2514d253663e0e3c34c3ade21d379c817b) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit f389bb793fd489915538beb2c8bcb54889a3f460) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit 23a8c4f288d70223ae8db9f34915de1288b20cb7) 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 · reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
评审提交 02dcce198b6a9d896dd3108fd20822a87fd27a99,对照目标主干 7bb1b01687c5ecb36971b19fc432d6019d3e5492 和上一评审头 59e273e8473c0c3dd48e53713def337a1337f116。
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选将额外一页算入整个重放区间,计数不相等时同时丢弃两个选区。主干保留独立单页。同一捕获和 epoch 中,候选下一轮首次交付由 11,473 增至 22,170 字节。 重放计数判断 原评审线程
动机 / Motivation
在 Codex 原生会话分批读完 Goal 约束、验收或工作资料,再经普通 resume 继续同一上下文的操作者。 已核验的上下文被重复交付,普通 resume 还要再次读取与重复页无关的内容。 过去可恢复已核验的单页选区,多页选区通常需要重读。候选让完整多页选区也能被 replay,且修复显式 C1 在长路径下的原捕获诊断。 正常 resume 保留两个完整选区。显式 C1 在 File 和 SQLite 的长路径失败均交付 1,450 字节的诊断,沿原引用读回七个连续页。未绑定的旧路由可重建 v2 来源,绑定路由仍返回字面来源。 本轮执行源码 CLI、真实 File/SQLite 和隔离的 Codex hook/replay 文件。正式宿主的模型保留、已安装版本的跨宿主行为和完整成本未独立验证。
改动思路 / Approach
Core 继续拥有原始 Turn、选择与结算。原生适配器只核验同一捕获的工具字节和重放覆盖。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 原生适配器先核对工具输出字节,再由 TypeScript 生命周期按原选区和 epoch 确认覆盖。压缩来源由已有 projection owner 重建。 来源重建
具体改动 / Changes
关键代码讲解
quota should-run 继续生成完整决策。未绑定的 --complete-turn --context-delivery off 响应允许 v2 压缩,复用相同来源字段并按读回时的来源恢复,reader 仍可展开 v1。绑定的普通 JSON 保留字面 sources。诊断共用字面前缀与已有行引用,缩短原拒绝结果而保留捕获。Native resume 的 checkpoint_native_selection 聚合已完成页,_matches 要求重放的页计数相等。重复读取一页会让整个区间失效。 诊断投影 已完成页聚合
按 7bb1b01687c5ecb36971b19fc432d6019d3e5492 的 docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9 验收。One complete contract 有原决策及单次回执证据。Lossless context delivery 在重复页后仍失去已经验证的选区。Shared production paths 已走本地 CLI、原生 hook 和 File/SQLite,部署后跨宿主仍待验证。Default adoption 需要真实模型效果和完整成本的配对验证。 现行验收条款 原生上下文契约
对主干的风险 / Risks
同一合成 rollout 对照中,主干在重读前后均保留独立单页。候选在无重读时保留两个选区,重读四页选区的第一页后两个都丢失。一次只调整所需页匹配方式的隔离实验使两条路径都保留两个选区。按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
语义与 CI 对齐
聚焦矩阵 171 项通过,重复页反例失败。普通长路径在 File 和 SQLite 均返回 1,919 字节的同一拒绝,主干也复现,两端都只保留一次回执且未扣费。独立 transport 矩阵 502 项通过,1 项跳过。未绑定与绑定投影 4 项、SSH 和渐进交付 6 项通过。本地 standard premerge 的 6 项直接和 19 项选中检查通过,另有 1 项人工 benchmark 审核待完成。托管 CI 未查询。
我的整体评价 / Verdict
请求修改。可复现的回归发生在原生 SessionStart 的已读选区恢复。再次复审时应同时核对重复页、缺页、内容修改、来源不符和正常分页。
English verdict: REQUEST_CHANGES. Re-reading one identical page invalidates two verified selections on the ordinary native resume path, including the unrelated single-page selection that current main retains.
| return False | ||
| cursor = max(cursor, stop) | ||
| return seen_pages == expected_pages and (selected or cursor == len(body)) | ||
| return seen_pages == expected_pages and (selected or _covers_bytes(ranges, len(body))) |
There was a problem hiding this comment.
[P2] 重读一页会让 resume 丢弃另一段已核验内容。 原生 Code Mode 先完整读取一个单页选区和另一个四页选区。随后重读多页选区的第一页。原 rollout 的六个输出都存在且逐字匹配,再调用普通 SessionStart resume。 候选将额外一页算入整个重放区间,计数不相等时同时丢弃两个选区。主干保留独立单页。同一捕获和 epoch 中,候选下一轮首次交付由 11,473 增至 22,170 字节。 按已完成的选区验证覆盖和原输出。额外但逐字相同的页面可与已确认覆盖合并,同时继续拒绝缺页、改动、跨来源或未合格的历史。 完整交付两个选区后,重读一页,再在原 rollout 上 resume。保留无关单页和已证实的完整多页选区。删除必需页或改变其内容时,仍必须重新读取相应内容。
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…-mainline-closeout-20261113 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
评审提交 1ef08e5f9152adfc7db06a4127bbb72b7a00aa91,对照目标主干 7bb1b01687c5ecb36971b19fc432d6019d3e5492 和上一评审头 02dcce198b6a9d896dd3108fd20822a87fd27a99。
[P2] 较晚的同字节输出会补上缺失的原生重放证明。 通过 Code Mode 完成一段单页和一段四页的已读选区。原第一页的 parent output 在重放中缺失,稍后另一个 parent 留下同字节输出,但该次读取没有对应的 PostToolUse 记录。再运行 SessionStart resume。 候选仍将四页选区标记为可复用,连同独立单页保留两段。移除较晚输出后,候选正确拒绝两段复用;主干在两种情况下都只保留自身支持的独立单页。 较晚输出仍可补计数
动机 / Motivation
在 Codex 原生会话分批读完 Goal 约束、验收或工作资料,再经普通 resume 继续同一上下文的操作者。 读取方可能把没有合格重放证明的 Goal 约束视为已读,进而跳过恢复。 Agent 完成已绑定捕获的逐页阅读,随后原生会话重启,需要恢复已经核验的选区并补读缺失内容。 上一轮的正常重读反例已修复,两段都能保留,下一轮首读为 11,473 字节。显式 C1 的 File/SQLite 长路径拒绝保留 1,450 字节的诊断和原引用,新用例验证首包能显示但原全文 reader 走不通时也能继续读取。 本轮执行源码 CLI、真实 File/SQLite 和隔离的 Codex hook/replay 文件。正式宿主的模型保留、已安装版本的跨宿主行为和完整成本未独立验证。
改动思路 / Approach
Core 继续拥有原始 Turn、选择与结算。原生适配器只核验同一捕获的工具字节和重放覆盖。 给已观察的 nested read 保留其原 parent 关联,并按该关联核对重放。先验证原输出,再忽略额外重读;若新读取要补足缺页,应先独立核验并记录其完整覆盖。 当前通过页摘要计数对齐 nested read 与 Code Mode 输出。已满足计数的额外输出会忽略,尚缺计数时,同样的后续输出仍可被计入。 重放比较
具体改动 / Changes
关键代码讲解
_matches 校验原 rollout、捕获和范围,然后逐组核对输出。正常重读已恢复旧用例。Refusal 首包现在也预检下一页能否输出,必要时改用原诊断选区,保留原摘要与回执。TypeScript 从 Turn source 取得 handoff mode,决定何时可以省略重复的结算指令。Thin heartbeat 精简文案,保留必读、停止和完整 host quiet result。未绑定旧路由的来源压缩、普通读回和原结算继续沿既有入口。 分页 framing Turn 投影 上一轮正常重读的发现
以 7bb1b01687c5ecb36971b19fc432d6019d3e5492 的 docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9 和原生读回契约验收。One complete contract 有同源 CLI 和结算证据。Lossless context delivery 缺原输出关联。Shared production paths 已验证本地 CLI、File/SQLite、原生 hook,部署后跨宿主仍待验证。Default adoption 仍需真实模型效果与完整成本。 验收条款 每页原生输出要求
对主干的风险 / Risks
同一四页选区缺原第一页输出时,候选只要看到较晚相同的输出就仍保留两段。候选删除这条较晚输出后拒绝复用。主干保留自身支持的独立单页。完整重读和发生 compaction 的两个对照均按预期,后者清空复用。交叉核对原第一页存在或缺失、后续同字节输出有无合格读取记录,并保留正常重读和合法同 parent 多输出。缺原输出且无合格补读时,四页选区应重新交付。
语义与 CI 对齐
聚焦矩阵 168 项通过,普通 File/SQLite 的两项超小预算拒绝在主干和当前头一致,均为 1,919 字节。补充生命周期 359 项、TypeScript 76 项和隔离 heartbeat smoke 通过。新的原输出缺失反例在当前头失败。Standard premerge 六项直接、十九项选中检查通过,另有一项人工 benchmark 审核。托管 CI 未查询。
我的整体评价 / Verdict
请求修改。正常重复读取已经修好。剩余风险是把较晚的无记录输出当成原页证明,导致不完整选区仍被复用。请同时验收正常重读、缺页、错误内容和合法批量 parent 输出。
English verdict: REQUEST_CHANGES. At 1ef08e5, ordinary reread is fixed, but a later equal Code Mode output without a corresponding hook can satisfy a missing original page and incorrectly qualify a paged selection for native resume.
| # Required call IDs still reject duplicate or changed outputs. | ||
| if (selected and offset >= end and call not in required | ||
| and seen_pages[group_digest] >= expected_pages[group_digest]): | ||
| continue |
There was a problem hiding this comment.
[P2] 较晚的同字节输出会补上缺失的原生重放证明。 通过 Code Mode 完成一段单页和一段四页的已读选区。原第一页的 parent output 在重放中缺失,稍后另一个 parent 留下同字节输出,但该次读取没有对应的 PostToolUse 记录。再运行 SessionStart resume。 候选仍将四页选区标记为可复用,连同独立单页保留两段。移除较晚输出后,候选正确拒绝两段复用;主干在两种情况下都只保留自身支持的独立单页。 给已观察的 nested read 保留其原 parent 关联,并按该关联核对重放。先验证原输出,再忽略额外重读;若新读取要补足缺页,应先独立核验并记录其完整覆盖。 交叉核对原第一页存在或缺失、后续同字节输出有无合格读取记录,并保留正常重读和合法同 parent 多输出。缺原输出且无合格补读时,四页选区应重新交付。
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 · reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
评审提交 e06a2941f861bee477d45562557d0142eeaee068,对照主干 e94c549e8d5384938f5e695371731417ea914dce 与上一评审头 1ef08e5f9152adfc7db06a4127bbb72b7a00aa91。
[P2] 较晚的同字节输出会补上缺失的原生重放证明。 通过 Code Mode 完成独立单页和四页选区。原四页选区的第一页 parent output 缺失,稍后另一个 parent 留下同字节输出,但该次输出没有对应的 PostToolUse 记录。经 SessionStart resume 读回选择。 源码 CLI 与本轮构建的 standalone Core 都继续保留两段。移除较晚输出后,候选拒绝两段复用。同输入主干只保留独立单页。 原页缺失时较晚输出仍可补计数
动机 / Motivation
在 Codex 原生会话分批读完 Goal 约束、验收或工作资料,再经普通 resume 继续同一上下文的操作者。 Agent 完成已绑定捕获的逐页阅读,随后原生会话重启,需要恢复已经核验的选区并补读缺失内容。 源码 CLI 对完整重放与普通重复读取保留两段。独立 Core wheel 的 30 项测试通过。真实 Codex CLI 以合成 loopback 推理运行四项 SSH 与同轮两次 compaction 测试,已验证原 Turn 续接。安装 Core 的生成命令、独立解释器和 settlement 的原身份也有实际执行回读。 本轮覆盖源码 CLI、File/SQLite、独立 wheel、真实 Codex CLI 加本地合成推理,以及带故障的原生 rollout 夹具。正式 App、真实模型效果、其他宿主端到端和完整成本仍待验证。
改动思路 / Approach
Core 继续拥有原始 Turn、选择与结算。原生适配器只核验同一捕获的工具字节和重放覆盖。将已观察的 nested read 绑定到原 Code Mode parent 或等价的不可替代输出身份,复用现有原捕获和字节校验。在原输出完整之后再跳过额外重读。 新增版本资格与安装命令沿既有 CLI 和 settlement owner 验证,原进度回执可按同一 Turn 重试。 生成的 CLI 调用 结算前核对调用前缀
具体改动 / Changes
关键代码讲解
checkpoint_native_selection 保存已核验页的区间和摘要。_matches 在重放时逐组计数。普通重读已能保留完整选择,但计数欠缺时,较晚同字节输出仍可补足。拒绝首包继续用 digest-bound reader,显式 C1 和兼容入口沿同一原始事实,普通 quota 和薄心跳保留当前默认来源。候选补上 Core 的调用前缀验证,固定的子进程只收到 LoopX 参数。新版本的 Codex 测试覆盖原生 SSH、恢复及同轮两次压缩。 选区 checkpoint 组摘要计数 拒绝诊断原始 reader 原结算子进程
按主干的 docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9 和当前原生读取契约验收。One complete contract 核对同源 CLI、安装及一次结算。Lossless context delivery 仍缺原 parent 的输出归属。Shared production paths 已覆盖本轮列明的 CLI、File/SQLite 和 Core wheel。Default adoption 仍有模型效果和完整成本的独立验收。上一头的 223 处路径差异在本轮仍有同样的 base/head blobs,变化的九处按当前入口复验。 验收条款 逐页保留和重放要求 上一头的同一缺页发现
对主干的风险 / Risks
源码 CLI 与本轮构建的 standalone Core 都继续保留两段。移除较晚输出后,候选拒绝两段复用。同输入主干只保留独立单页。 完整重放和普通重复读均保留两段。同一故障输入中,源码与独立 wheel 都将无读取记录的后续输出计入缺失页。源 digest 和 Turn 保持相同,但后续读取可能因此跳过原约束。交叉覆盖原第一页存在或缺失、后续同字节输出有无合格读取记录、正常重读和合法同 parent 批量输出。缺页且没有合格补读时,原捕获应重新提供四页选区。
语义与 CI 对齐
源码聚焦验证 487 项通过、97 项跳过。独立 Core 测试 30 项通过,四项真实 Codex CLI loopback 通过。缺原输出的独立反例在源码和 wheel 均失败。Standard premerge 六项直接、十九项自动检查通过,另有一项 benchmark 人工审查。托管 CI 未查询。
我的整体评价 / Verdict
请求修改。独立 wheel 已能执行原结算并幂等读回。原页缺失后仍能被无记录输出补足,依然需要沿原 parent 关联修复并复验。请同时保留正常重复读取与原结算的通过证据。
English verdict: REQUEST_CHANGES. At e06a294, isolated Core settlement and ordinary reread pass, but a later Code Mode emission without its own hook can still replace a missing original page in both source and packaged Core.
| # Required call IDs still reject duplicate or changed outputs. | ||
| if (selected and offset >= end and call not in required | ||
| and seen_pages[group_digest] >= expected_pages[group_digest]): | ||
| continue |
There was a problem hiding this comment.
[P2] 较晚的同字节输出会补上缺失的原生重放证明。 通过 Code Mode 完成独立单页和四页选区。原四页选区的第一页 parent output 缺失,稍后另一个 parent 留下同字节输出,但该次输出没有对应的 PostToolUse 记录。经 SessionStart resume 读回选择。 源码 CLI 与本轮构建的 standalone Core 都继续保留两段。移除较晚输出后,候选拒绝两段复用。同输入主干只保留独立单页。 将已观察的 nested read 绑定到原 Code Mode parent 或等价的不可替代输出身份,复用现有原捕获和字节校验。在原输出完整之后再跳过额外重读。 交叉覆盖原第一页存在或缺失、后续同字节输出有无合格读取记录、正常重读和合法同 parent 批量输出。缺页且没有合格补读时,原捕获应重新提供四页选区。
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
动机 / Motivation
C1 给显式启用、SSH Goal 和 benchmark 原生 worker 提供可校验的统一工作来源。选 Todo、重读上下文及结算沿同一 Turn 和原捕获执行。普通
quota should-run和薄心跳仍采用主干的默认来源。 / C1 gives opt-in callers, SSH Goals and native benchmark workers a verifiable work source through selection, context recovery and settlement. Ordinary quota and thin heartbeat retain the mainline default.改动 / Changes
0.167.0-alpha.4.1paginated rollout. A selected page must match the native call observed by its Bash hook. A verified reread can restore missing byte coverage, and complete independent selections remain reusable.验证 / Validation
Against
main@e94c549e8d, candidate5be44386bepassed five standard-install Codex loopbacks, including ordinary Code Mode replay, benchmark preflight, and three selected-page coverage cases. The same isolated installed test one06a2941f8incorrectly reused a multi-page selection when a later emission copied its missing page without a new Bash hook. The candidate rereads the affected selection, preserves an independent single-page selection, and accepts an independently verified replacement. Full candidate premerge ran six direct checks and 19 automated checks with zero failures.The preceding
e06a2941f8also passed 30 isolated Core wheel tests, eight standard-install native Codex loopbacks, and 20 File/SQLite settlement cases. Native loopbacks use deterministic local inference. Exact-head independent review and GitHub CI remain pending.Default rollout requires the matched single-session outcomes and full-cost evidence in RFC §9. Earlier measurements are in the source convergence ledger.