Skip to content

feat(benchmark): add one settled-work handoff without changing capture cadence - #8070

Merged
loopx-agent merged 5 commits into
mainfrom
codex/checkpoint-settled-handoff-20261105
Nov 5, 2026
Merged

loopx-agent merged 5 commits into
mainfrom
codex/checkpoint-settled-handoff-20261105

Conversation

@huangruiteng

@huangruiteng huangruiteng commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

显式的一次交接捕获现在保留正常 fresh-replan 捕获频率,并遵守原阶段截止时间。普通请求不增加捕获、模型调用、preparation Todo 或重规划频率调整;额外交接仍需显式声明,成本计入原阶段。

本次同时修复评审指出的两处 P2:首次声明丢失或字节改变后,不能用后来的工作补写同名 checkpoint;原阶段到期或截止值无效时,在读取声明和恢复来源前拒绝。

当前 head:08dbb5e7077959a644960a64fd00605df5eea98f。分支已接入 main e7a6c8d5f09a8c7e5d6021aabce00223c9324fce;目标仍为 main。

实现继续使用现有 benchmark I/O adapter、原 Turn settlement、首次尝试 witness 和 artifact/native/controller owner。preflight 保留原目标;确认原工作已结算后,先消费该目标的首次尝试,再重读声明。截止检查、声明读取、来源 gate 和实际捕获在同一原有路径执行,避免外围 helper 绕过顺序。声明目标校验由两个调用点复用,没有新增控制平面决策 owner、设置或权限。

验证:

  • 在原生产代码上复现 5 个新增负例:声明丢失/变更后确实能补写后来状态,已到期或非有限截止也确实先读取声明;5 项全部失败。
  • 修复后的交接/接续定向集:93 passed,32 项平台/native opt-in 跳过。生产代码相同,随后包含最后新增“结算读取期间到期”用例的研究状态和单次交接回归:37 passed,1 skipped。两组有重叠,不求和。
  • 当前精确 head 的 Linux 真实 native CLI、SQLite、controller 与独立容器联合资格,context on/off 各自新建源点、全链通过:新建源点 → ordinary/Stride receiver → 自动完整 recapture → 再次 receiver 实际工作 → 普通 Goal 对照。使用合成 inference endpoint 和 native feedback,无付费模型;两种模式分别捕获了自己的源点,没有复用或补写。
  • 精确 head、上述 main 基线的 quick premerge:5 个 direct、4 个 selected 检查通过,0 failure。返回仍为 manual_review_required,不宣称合并资格。Ruff、diff hygiene、双语 RFC diff 与 8 个公开路径扫描通过。
  • 完整 premerge、当前 head 独立复审、活动宿主部署、真实模型采用、完整费用和科学收益仍未验证;原评审和历史失败保留,不以机械资格覆盖它们。

这是原有私有 runner 声明与回执路径的修复,没有新增前端/Lark 页面或设置。原成功 work 与 before-replan 回执保持;没有原目标的旧 pending 记录保守拒绝,不能靠重读修复文件重建原点。普通捕获频率不变,省略显式交接声明即可保持原行为。

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 loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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

REQUEST_CHANGES:两项 P2 分别涉及丢失声明后的检查点补写和原阶段到期后的额外读取。

动机 / Motivation

需要在既定研究阶段中交接当前工作状态、同时保留原有重规划频率的 benchmark 操作者。检查点是将来重建和比较工作过程的固定取样点,其价值依赖保存的是原来声明的状态。

原来同一声明只能沿原重规划节点捕获;补丁让操作者额外声明一次工作完成后的交接,但首次声明读取失败后恢复文件,当前实现仍会把后来改过的工作状态写到同一目标。

定向测试通过,独立反例仍证明错过的点可以被后来状态补写,并且原阶段到期后仍先读取声明和恢复来源。这会使同名取样点对应不同时间的证据,或把阶段结束后的准备成本漏出原边界;即使文件完整性校验通过,也不能修复取样时间错误。本 PR 不证明科学收益、付费模型效果、线上升级、完整研究恢复或新的工作与合并权限。

改动思路 / Approach

保留现有请求和捕获 owner 的设计是合理的:一个显式、不可从普通重规划推导的交接意图,交给原工作 Turn 的结算、原阶段时钟和原文件/native/controller 参与者处理。另存 checkpoint_handoff 能保留原 before_replan 观察,无需修改重规划频率、创建准备 Todo 或增加模型调用。当前 PR 的合理边界就是这一次可回滚的额外交接;修复应留在同一 adapter 和既有 attempt owner 中,不需要新服务或无关语言重写。

最强反对理由是额外交接很容易把“稍后还能拍到一份完整文件”误当作“原来那个点可以恢复”。下面按实际入口而不是字段存在与否比较:

状态 合同要求 当前头的观察
没有额外交接声明 保持原执行与捕获策略 两个基线/候选无 IO 对照相等
首次交接声明丢失或变更后恢复 保留错过的原点;另声明新点 后来状态仍能写入同一目标
原阶段已到期 不读取声明或任何来源 先读声明并调用恢复来源 gate,随后才返回窗口关闭

表格解释已执行反例的控制流,不证明完整 native 交接或科学有效性。

保留小型显式 adapter 与现有 owner,在本 PR 修复首次尝试和阶段时钟的两处顺序错误,无需增加抽象或无关重写。

当前边界是保留普通重规划的一次显式工作交接;首次尝试和阶段门仍阻断接受,完整 native/receiver 与科学资格另行验收。

具体改动 / Changes

关键代码讲解

  1. parse_checkpoint_request 把显式嵌套声明限制在 fresh_replan 下,并验证直接子目录和非空用途。已有声明仍可省略新字段;这不是从 provider 可用性推断激活,也不新增普通工作权限。
  2. _capture_declared_settled_handoff 在原工作结束后复制已有声明,移除 trigger,交回原 capture_after_wake;独立结果不会覆盖重规划前的观察。但 pending 只保留 Turn 与请求 hash,不能在文件丢失时给原目标留下首次尝试证明。
  3. _mark_completed_capture_attempt 已有原 wake 证明和 artifact 侧索引,能够抵御索引权限恢复后的补点。新路径的声明读取和 hash 失败发生在调用它之前,因此尚未受到这项保证保护。
  4. capture_after_wake 仍在原结算身份下复用文件、native 和 controller owner;新增 helper 的调用却排在既有原阶段检查之前。restored_capture_gate 可以读取规范绑定、artifact 和 native history,其自身超时不能代替已经结束的阶段预算。

独立依据是已接受的 benchmark/README.md#inert-checkpoint-capture,spec_revision 0423908e9cf46afd7a765552323b842441bd6512,以及同版本 RFC §7.7 的首次尝试和阶段条款。按原文映射:Each destination is attempted once 与 An exhausted original phase 在当前头 not_met;Capture failures are recorded separately 已由原结果保持不变的测试和反例观察覆盖;Omitting the declaration 的无额外读取/effect 路径由不可变基线与候选的同输入对照覆盖。新增 README 不能替代这些原有约束。

8 份文件的生产改动集中在原 checkpoint adapter,其余是说明、新的局部反例与现有 inline/full/delta policy reader 的复用。没有新的通用控制面义务、并行结算 owner 或前端入口;局部请求字段和 receipt 也不构成另一套 Agent 生命周期。

对主干的风险 / Risks

[P2] 首次声明失败后仍可补写同名检查点(声明重读)。 在已经成功结算且有 pending 记录的工作结束时,删除声明文件,或者只在字节末尾加一个换行;首次 hook 都记录失败,但没有 checkpoint-completed-request.json。恢复原声明、修改候选证据并进入后来的工作 wake 后,同一目标实际捕获成功,返回 integrity_verified=true。本轮使用真实 TS 文件 probe/capture;结算和恢复来源资格是受控 fixture,故不冒称完整 native/controller 验证。最小修复是在现有首次尝试 owner 中保留原声明目标,并让这种已开始的失败保持被消费;追加“失败→修复文件→后来源码变化仍拒绝”的反例,同时保留原工作成功与原重规划结果。

[P2] 阶段到期仍先读取声明和来源(成功 wake 判断)。 budget_exhausted 不能表示所有绝对时钟到期:模型正常结束后的 session observation 或其他收尾也可能越过原 deadline。给成功 receipt 和 pending handoff 设置过去的 LOOPX_PHASE_DEADLINE_EPOCH,当前 helper 仍调用声明读取和恢复来源 gate,进入原捕获函数后才返回 capture_window_closed。应在这些操作前复用现有有限时钟检查,测试两个 IO sentinel 均未被触发,不能增加阶段时间或放宽门槛。

验证:精确头四个定向模块 99 PASS / 5 SKIP;不可变生产文件的 feature-off 与普通 replan 无额外交接对照相等、没有额外声明/effect IO;改动 Python Ruff、committed diff 与 RFC 双语 diff 检查均 PASS。最初独立脚本因导入路径错误尚未执行生产代码,改用当前 checkout 的 run_path 后才取得上述结果,失败保留而未算作产品缺陷。5 个可选平台/native 前提的 SKIP、完整 native/controller 与 ordinary/stride receiver 串接、真实模型和科学收益均保持未验证。这里没有用测试数量抵消两项已复现违反,也未查询或等待 CI。

语义与 CI 对齐

这是现有显式请求的局部扩展;问题在于原先已有的首次尝试与阶段顺序没有贯穿新路径。先修复两处顺序并加入真实入口回归,再在授权环境完成最终头的 settled_once 联合机械资格;本次 REQUEST_CHANGES 不声明 CQR、完整 premerge 或合并资格,也不要求无关改动为此让路。

我的整体评价 / Verdict

机制规模与一个明确的额外交接意图相称,保留原 owner 比更改频率或增加准备工作更合适。long_horizon 与 user_experience 当前均为 regression:操作者无法可靠保留原声明点,原阶段成本边界也会漏出;这两个结果需要在本 PR 内修复。Inspected benchmark/runtime/checkpoint.py and benchmark/README.md: internal runner declaration and artifact receipts only; no rendered presentation change.完整 native 恢复、已安装产品采用和研究收益不在本轮证据范围。

接受“小 adapter 加原 owner”的边界,不接受用后来成功的文件校验替代原时间点。重新评审需要上述两个失败分支在同一真实入口通过,原 work/periodic receipt 保持不变,并如实保留联合资格和成本验证的剩余范围。

English verdict: REQUEST_CHANGES — head 35b404daa673c9a35baeafb100deea6850cceccd can backfill a missed declared handoff with later state after request recovery, and reads declaration/restored sources after the original phase has expired. Preserve the first point and enforce the original clock before those reads.

Comment thread benchmark/runtime/checkpoint.py Outdated
request, raw = read_checkpoint_request(env["LOOPX_CHECKPOINT_REQUEST"])
if (pending.get("turn_id") != receipt.get("turn_id")
or pending.get("request_sha256") != hashlib.sha256(raw).hexdigest()):
raise ValueError("settled-work handoff request or original Turn changed")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[P2] 保留首次声明目标后再处理读取失败。成功且已结算的 wake 在 preflight 有 pending Turn/hash;若此时删除声明或只追加换行,本次会抛错,尚未留下原 wake/destination 的首次尝试证明。恢复原声明、修改候选文件并进入后来 wake 后,同一个 destination 实际捕获成功,形成了原本禁止的后来状态补点。现有 changed-request 测试只断言首次拒绝,未断言恢复后仍拒绝。请复用既有 attempt owner 保留并消费原目标,补上失败→恢复声明→后来状态不能补写的回归;保持原 work 和 periodic receipt 不变。

Comment thread benchmark/runtime/checkpoint.py Outdated
return # No eligible completed boundary; keep the request unconsumed.
result = {"captured": False, "research_point_qualified": False, "phase": "after_settled_work"}
try:
request, raw = read_checkpoint_request(env["LOOPX_CHECKPOINT_REQUEST"])

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[P2] 在这里的声明/source IO 前检查原阶段时钟。budget_exhausted 只覆盖显式预算/超时分支,模型正常结束后的 session observation 等收尾仍可能跨过绝对 phase deadline。以成功 receipt、pending handoff 和已经过去的 LOOPX_PHASE_DEADLINE_EPOCH 调用实际 capture_after_wake,会先读取声明并调用 restored_capture_gate,之后递归进入原捕获函数才返回 capture_window_closed;恢复 gate 可继续读取绑定、artifact 与 native history。这违反原合同的 exhausted phase no declaration/source reads。请先复用有限原 deadline 检查,并用两个 IO sentinel 验证到期时均未调用,不能延长阶段或放宽截止。

…led-handoff-20261105

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

Choose a reason for hiding this comment

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

APPROVE — exact head 08dbb5e7077959a644960a64fd00605df5eea98f.

Both previously reported P2s are closed:

  • The declared handoff reserves the original destination with the existing wake witness before rereading a missing or modified declaration, so later work cannot backfill the missed point.
  • The original finite phase deadline is checked before declaration/source reads and again after settlement observation; expired, non-finite, and expire-during-settlement cases stop without declaration or restored-source reads.

Exact-head verification: benchmark/tests/test_checkpoint_settled_once.py 19 passed; the changed checkpoint/control-plane set 42 passed, 29 platform/native opt-in skipped; changed Python files pass Ruff. Existing unrelated baseline failures remain separate from this verdict.

@loopx-agent
loopx-agent merged commit 03d6ab2 into main Nov 5, 2026
24 of 35 checks passed
@loopx-agent
loopx-agent deleted the codex/checkpoint-settled-handoff-20261105 branch November 5, 2026 04:41
@loopx-agent

Copy link
Copy Markdown
Collaborator

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

Post-merge audit:新增一项 P2,需要跟进修复。该 PR 已合并为 03d6ab2864a54e86ab4f97854854d0e4acd7dd48;复核时当前主干相关 adapter、worker、声明 staging 和恢复 gate 与下述精确 head 一致。原批准覆盖两项旧 P2,本条审计补充更早的首次预检失声明分支。

动机 / Motivation

受影响的是需要在正常重规划捕获之外,显式保存一次已完成工作状态的研究者。交接点必须对应原来声明的时间边界,不能只保证最后生成的文件完整。

例如,启动器已接受一次交接声明,首次工作预检时该文件暂时丢失;工作继续完成,文件恢复后又完成了一轮工作。当前补丁仍可把第二轮的候选写到原来的交接目录,并返回完整性验证成功。

预期改善是在不改变正常重规划频率的前提下增加一次显式交接;本轮验证正常路径可用,但上述失败路径仍未保住原点。此 PR 不承担科学收益、真实模型采用、活动安装或新的执行权限。

改动思路 / Approach

复用原 adapter 和首次尝试 owner 是合理边界;在声明早期失败时仍须保留原点身份。交接意图不能从普通 replan 推导,因此显式目的和目标目录有必要;结算、阶段时钟、artifact/native/controller 验证继续由原 owner 负责,无需新增服务或调整重规划策略。

当前边界是保持正常重规划捕获的一次显式交接;合并后须沿原 owner 修复首次预检失声明的补点漏洞,完整研究资格另行验收。最强反对理由仍是:文件完整不等于时间点正确。现有首次尝试机制足以承接这项约束,但 pending 身份目前只有在成功重读声明后才建立。

已执行的场景 观察
无声明,或原 fresh-replan 声明不含新字段 不可变 base/head 的正文、回执与一次 guard 调用相等
首次预检可读声明 首轮捕获原候选;后来工作不能覆盖
启动时声明有效,首次预检前丢失,随后恢复 首轮没有 handoff/witness;后来同名捕获成功并保存后来候选

表格是适配器入口与真实文件 artifact 实验的结果。quota/settlement admission 和恢复来源资格受控,未冒称完整 native/controller 联合资格或真实模型结果。

具体改动 / Changes

关键代码讲解

  1. parse_checkpoint_request 在原显式请求中增加 settled_work_capture_once,限制 fresh-replan、直接子目录及非空目的,并避免覆盖已有 operator metadata。新字段是局部、不可推导的操作意图,不是新的通用控制面 authority。
  2. capture_before_replan 在声明成功读取后保存目标、原 Turn 和字节摘要;这一顺序留下本次 P2。声明丢失时只记录普通 checkpoint 失败,没有保存一次交接的原点身份。
  3. _capture_declared_settled_handoff 复用 capture_after_wake,单列 checkpoint_handoff,保留原 before-replan 结果。已知 pending 后的丢失/变更现在会先消费原目标,旧评审所述后置读取漏洞已有修复。
  4. capture_after_wake 先检查有限的原阶段时钟,在结算读取后再检查一次,并复用原 wake witness 与 artifact-side index。原阶段已过期时不读取声明或恢复来源;原两项 P2 的六个定向场景在旧生产文件失败、当前头通过。

完整 PR 为 8 个路径:一个生产 adapter、一个联合资格命令的选项、五个测试/fixture 消费路径及 README。现有 policy reader 的复用避免把导航当决策正文,没有新增产品 writer、模型调用或普通捕获频率。

独立依据是 benchmark/README.md#inert-checkpoint-capture,spec_revision e7a6c8d5f09a8c7e5d6021aabce00223c9324fce,并核对同版本 hierarchical-agent-stride-control RFC §7.7。四项映射如下:Each destination is attempted once 当前 not_met;An exhausted original phase implemented;Capture failures are recorded separately implemented;Omitting the declaration implemented。新增 README 中的说明不能替代修改前已接受的首次尝试约束。

对主干的风险 / Risks

[P2] 首次预检失去声明后仍能补写同名交接点(215–218 行)。 启动时已通过 parse_checkpoint_request 的声明在首次 capture_before_replan 前丢失时,declaration_error 使新增 pending 分支完全跳过。原工作继续成功,但 capture_after_wake 因没有 pending 且原 checkpoint 已是 before-replan 而不留下交接尝试。恢复完全相同的声明,修改候选并进入第二轮后,真实 TypeScript artifact probe/capture 返回 captured=true、integrity_verified=true;发布目录实际包含第二轮候选字节。可读声明对照则只保存第一轮候选,并拒绝第二轮覆盖。

这与已修复的“预检成功后才丢声明”不同,违反原先失败后不得用后来状态补点的约束。最小修复是在既有启动/Host wake owner 中让已声明的一次交接目标及首次失败身份不依赖再次读到可变声明,或在这种失败后明确拒绝复用原点;新点仍用新的显式目标。不要新增执行器或要求重新批准普通工作。回归应覆盖“启动校验 → 首次预检失声明 → 原工作完成 → 恢复同字节声明 → 后来工作仍不得写原目标”,同时保留可读声明正例和独立的新目标恢复。

验证:当前头六个相关模块 112 PASS / 71 SKIP;原两 P2 的六个定向回归在不可变旧生产文件 35b404daa673c9a35baeafb100deea6850cceccd 上全部失败,在当前头通过。旧文件比较使用相同当前 harness/依赖,只归因该 adapter 顺序,不冒称完整旧版本联合运行。上述新增反例使用真实声明 IO、首次尝试持久化和 TypeScript 文件 artifact;原 guard、settlement 及恢复资格受控。首次独立脚本因外部脚本导入路径未执行到产品,修正启动路径后才取得结果;不归为 PR 缺陷。

改动 Python Ruff、diff hygiene、编译及 quick premerge 的所有直接检查和 4 项选中检查 PASS;整体仍是 manual_review_required,不是合并通过。71 个平台/native opt-in 跳过、完整 premerge、完整 Linux native/controller 联合链及真实模型成本保持 UNVERIFIED,没有查询或等待 CI。独立 probe 的自有 runtime 已认证停止并等待退出。

语义与 CI 对齐

新字段扩展的是局部 benchmark 请求,原通用 quota、Todo、调度和结算规则没有新增词表或领域义务。现有一次尝试 owner 应在首次声明失败路径继续生效;当前问题是该不变量未覆盖新增入口的更早失败点。保留当前阶段门修复及已有负例,再加入上述入口回归;无需为此放宽预算或修改研究结果。

我的整体评价 / Verdict

整体机制与一次明确交接相称,原两项修复也有实际回归证据。当前 long_horizon 与 user_experience 仍为 regression:操作者修复声明后会得到“完整但属于后来工作”的同名证据,时间身份与恢复结果不可信,因此需要合并后跟进修复。

已检查 benchmark/runtime/checkpoint.py 与 benchmark/README.md;只涉及私有 runner 声明和回执,没有渲染页面变更。视觉未验证范围:无。本次没有资格化活动部署、完整 native 联合接续、真实模型采用或科学收益。重新评审需要早期失声明不再补点的真实入口反例通过,并保留原工作结果、普通频率、原阶段预算和合法新点恢复。

English verdict: REQUEST_CHANGES — post-merge audit of head 08dbb5e7077959a644960a64fd00605df5eea98f. The head fixes the prior post-preflight failures, but losing an already accepted declaration before the first preflight still allows later work to fill the original handoff destination. Retain the missed first point across declaration recovery.

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