Repository navigation
fix(benchmark): capture full checkpoints after settled work - #8005
Conversation
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
当前 head 无阻塞发现,APPROVE。 旧 head d69329a724f6a90680fec6d290f3c06b0c85e7af 的 P2 未因换头而遗失:我先用两个真实 CLI/SQLite 已结算 Turn 和非 root POSIX 权限复现首次索引写失败,确认同一 destination 会错误绑定后来状态。新 head df2eb06b8d183fbc5c56691a68694b779bd2a258 在原封不动的同一复现上通过;另验了后续合法新 destination 可继续、同 Turn 改 destination 不能逃过原见证。旧失败及未发表旧结论的事实保留,当前结论针对完整新 head。
动机 / Motivation
显式请求 settled-work 完整 checkpoint 的 benchmark 操作者。 原先完整声明省略 trigger 会被 parser 拒绝;现在已结算 work wake 可沿现有 controller 捕获完整参与者。首次索引写入权限失败后,同一 destination 仍保留原 missed point,另一个合法 point 必须显式使用新 destination。 已验证显式 settled-work 入口及首次尝试恢复:同一权限 oracle 从旧 head 失败变为新 head 通过,后续新 destination 可继续且同 Turn 改声明被拒绝。 不增加自动 fresh-replan cadence,不修改活动运行、计分、机会、预算或权限;不声称科学收益、热集成或通用恢复 UI 已交付。 真实研究任务的长期收益、完整成本、持续容量及通用 frontend restore 仍按原 §7.7 边界另行资格化。
改动思路 / Approach
共享 parser 原来拒绝省略 trigger 的完整 controller 声明,使已有 settled-work 路径不可用。现在允许这个显式输入,仍要求 native_session、loopx_state、evaluation_opportunity 与 controller_handoff 一起开启;非法新 trigger 不被接受。工作本身必须先在原身份下结算,捕获继续沿既有 native/research/artifact owner 与外部 controller writer barrier,不再造 restore、预算或工作授权。
首次尝试以现有 wake 见证为来源,可选 artifact marker 只是索引;同一个私有写入 helper 复用 O_EXCL/fsync。既有 settlement、artifact、controller 与 fresh receiver 权限 owner 均保留。当前边界是完整显式 settled-work 捕获及失败点恢复,不增加自动 cadence;机械资格、科学收益和在线推广分别判定。无声明路径仍在 IO/receipt 修改前返回;同一原 point 的失败不会授权再捕获,另一个 point 则需新声明和 destination。
具体改动 / Changes
完整 diff 为9文件 +381/-54:生产 checkpoint.py +82/-9,测试/资格化 +234/-41,README 与双语 RFC +65/-4。同时检查了原 base 到当前 head,以及上一审阅 head 到当前 head 的修复。规格 docs/architecture/rfcs/hierarchical-agent-stride-control-v0.md 的 spec_revision 为 576b8a6,按改动前 §7.7 的原步骤判断,而非用新文档自证实现。
| 原规格条目 | 当前实现与证据 |
|---|---|
| §7.7 step 1 | 原 settlement owner 仍检查已结算身份;独立复现的两个真实 Turn 没有重放 debit。 |
| §7.7 step 2 | 保留 native cursor、canonical research、workspace、incumbent、机会和原 phase;当前 exact head 的 Context off/on 联合结果均完成六段机械链。 |
| §7.7 step 3 | P2 已修复:原 wake 先封存声明,索引权限失败后,旧 destination 或同 Turn 改声明仍在后来参与者 IO 前拒绝;另一个合法 point 可用新 destination 继续。 |
| §7.7 step 4 | 捕获保持 inert;普通/Stride receiver 及再次捕获后的 receiver 使用隔离环境与 fresh authority。 |
关键代码讲解
parse_checkpoint_request(43行)只扩大已显式请求的完整输入,不增加新的自动 trigger。_write_checkpoint_attempt(121行)共享私有 O_EXCL/fsync 写入;_mark_completed_capture_attempt(142行)先读既有 wake 见证并保留原 destination/effect/声明,再写可选索引,弥补“索引根本未写成”的缺口。capture_after_wake(323行)在读声明前拒绝封闭 phase,按实际声明选择完整90秒/普通30秒窗口,仍受原 phase 约束。
资格化入口只新增显式 --capture-boundary settled_work,默认仍 fresh_replan。worker/cadence、fresh-replan handoff、controller、continuation、研究参与者及关键依赖在两次 head 间保持字节相同;已逐项验证证据复用的失效条件。没有改启动中的运行,也没有显著增加自动捕获频率的配置变更。
对主干的风险 / Risks
PASS:当前三个完整相关模块 82 passed / 4 Linux-only skipped;原权限 oracle 与独立 scope 扩展各通过一次,使用真实 CLI、SQLite、物理权限和禁止越界读取的 tripwire。Tripwire 没有伪造 native/controller 成功。相同8项输入在 base/d693/df2 的探针保留 off、失败 wake、过期 phase 与普通声明语义;完整 omitted-trigger 接受是明确的预期差异。
另读回独立执行者在当前 exact head 的 Context off/on 完整结果:source、ordinary、Stride、recapture、grandreceiver、Core 均完成,来源 clean/import-verified,五个资格化脚本的 SHA-256 与当前 source 独立匹配,native binary pin 对应0.162.1。这里记录为他路执行结果的来源核验与 readback,不冒称本 reviewer 运行了 VM/模型,也不把确定性本地推理与合成反馈扩大为科学收益。
旧完整六模块的失败没有被抹掉:d693 为132过/77跳/1失败,base 为122过/73跳/1失败。额外权威拒绝用例在新 head 也有一次失败,随后实际 argv 跟踪证实:旧 synthetic executable 将 app-server 元数据查询也当作 exec,关闭 reader 时会写 host-input/candidate。未修改的 base 与 df2 假 Host 在没有 exec 请求的同一元数据命令下,产物与完整规范化指纹相同;实际拒绝 wake 的 host_invoked=false 且没有 stdout/exec。由此归因于既有 fixture 的控制协议混淆,而非用后一次绿宣布修复。建议测试维护区分元数据查询与 exec,保留原“拒绝后不得工作”断言。
本轮当前 head 标准 premerge 的5项 direct、19项 selected 全通过;exit1 保留 benchmark_sensitive 人工门。实际仓库 lint 的3项旧 Lark 测试错误在 base/d693 完整 stdout 字节相同,相关源与依赖在 df2 未改变。远端 CI 未查询、未轮询、未等待;未知 CI、已归因的旧 lint 与 fixture 诊断均未冒充当前行为回归。
语义与 CI 对齐
复用既有 settlement、artifact 与 restore vocabulary;新记录属于 Host 私有传输事实,artifact marker 是原 wake 见证的索引。原 phase、90秒 live capture 与既有 sealing 界限、机会、cooldown 和 no-replay 义务未放宽。普通权限失败只影响可选捕获,不能回滚已结算工作或制造新的 budget。伴随的小重构已应用于共同私有写入函数;无需引入平行权威或无关语言迁移。
我的整体评价 / Verdict
APPROVE df2eb06b8d183fbc5c56691a68694b779bd2a258。 long_horizon 与 user_experience 在本切片为 improved:原 point 在失败恢复后可信,后续合法 point 有明确继续路径,没有额外自动 cadence、确认轮次或执行授权。整体 scope 与维护成本 proportionate,原 P2 的失败到修复有同一独立 oracle,完整当前 head 与上次修复 delta 都已判断;合并授权与人工 benchmark 门仍分开。
仅 benchmark CLI/Host、测试与文档变动;未修改渲染界面。通用恢复 UI、科学收益与活动运行热集成未资格化;本轮读回独立执行者的 native 结果,未接管其运行。完整成本、长期容量和真实研究采用仍待原 owner 的后续验收,不由通过测试、capture 数量或本次批准推断。
English verdict: APPROVE df2eb06. The original permission-recovery counterexample now passes unchanged, legal future-point scope is preserved, and exact-head mechanical evidence is source-bound. CI was not consulted; scientific benefit and merge authority remain separate.
显式完整 checkpoint 声明省略
trigger时,parser 会拒绝已有的 settled-wake controller 路径,捕获只能等到 fresh replan。此修复允许在原工作 Turn 已结算、原生 Turn 完成后,通过现有 controller writer barrier 保存会话、canonical 研究状态、工作区、incumbent、反馈机会和原 phase clock。自动捕获沿用既有 fresh-replan cadence;额外的 settled-wake 捕获只在必要交接/升级时单次显式请求,不作为每个工作 wake 的默认。
同一声明的 destination 只尝试一次,失败或回执不确定后保留首次边界;原 wake 先保存不可变声明见证,再写 artifact 侧索引;索引权限恢复后,重试不会把后续工作替换成原研究点,同一 Turn 换 destination 也拒绝。原 phase 耗尽时先拒绝 IO;完整文件声明使用与预加载声明一致的 90 秒窗口及现有 sealing 上限。普通文件捕获仍是 30 秒。原自动 fresh-replan 策略和未启用路径保持既有行为。
验证与边界:
df2eb06b8d183fbc5c56691a68694b779bd2a258在原生 CLI 0.162.1、Context off/on 下完整联合验证通过:每组 6 段,共 12 段,覆盖实际 worker、controller、隔离普通/Stride receiver、再次完整 capture、后继 receiver 和无 benchmark 的 Core 入口。源完整首读/后续 delta,以及新 receiver 首读 full 均校验。manual_review_required(退出 1),保留benchmark_sensitive人工评审门。联合验证使用确定性本地推理和合成反馈,证明机械恢复与采用;科学收益及真实任务的整段接续仍需单独资格化。所有捕获与恢复继续复用现有 owner。
当前状态:
df2eb06b独立批准已读回。远端 CI 被 main 既有的 Lark 测试 Ruff E731 阻塞,后续聚合失败/跳过未算作通过;独立修复见 #8008(6 项相关用例及 CI 同范围 Ruff 通过),待该依赖解决后再重跑 CI。