Repository navigation
fix(benchmark): explicitly continue repaired quota failures on the original session - #8217
huangruiteng wants to merge 1 commit into
Conversation
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6-astra; provider=OpenAI; reasoning_effort=ultra; declaration_source=runtime_reported.
动机 / Motivation
实验运营者在订阅额度恢复后,需要接着完成原来未完成的实验。旧外部调度器仍把已返回的额度失败保持在停止状态,没有共享 Turn 已有的显式重试入口;手工清空失败或新建会话会丢失故障和预算依据。此改动让运营者绑定这一次失败、原会话及独立批准的有限时间,再进入普通调度。它保留原失败和尝试次数,不负责重建已删除的工作区,也不自动增加评分机会。完整旧工作区缺失的实验仍不能直接恢复。
改动思路 / Approach
现有入口 benchmark.runtime.scheduler 接收失败状态摘要,而不是新增恢复守护进程。摘要表达明确的本次重试意图;历史、Goal 和账号观察来自已有事实。TypeScript 的 hostFailureRetryCheck 统一决定失败能否显式重试,Python 只负责文件、进程及原生客户端读取。账号容量判断复用现有可选 provider,既不轮换账号也不购买容量。
关键边界是先证明原进程已退出、原会话和配置未改变,再只读确认原生末轮确为额度失败并检查当前容量。通过后追加有限新阶段,随后照常接受 Stop、工作准入和未结算 replan 的约束。重复同一请求只能返回同一阶段,不能清掉其后的新失败。该分层保留旧协议读回,同时避免在 benchmark 里再写一份通用失败决策;当前 PR 只完成原文件系统内的显式失败接续,不承担完整丢失数据恢复或自动补时服务。
具体改动 / Changes
审查头 d442384c8259c56bbe63709b0b76106db07b5e04,基线 1a309ccb3278b68f79d674b66833fadffd8ad476。14 个文件,新增 631 行、删除 45 行;其中生产代码新增 285/删除 42,测试新增 295/删除 3,文档新增 51。共同规则从既有 Turn Journal 提取,原调度与自动重试默认值未改变。
关键代码讲解
hostFailureRetryCheck保留自动重试次数上限,并继续拒绝盲目重放输出预算耗尽;效果运行时严格验证意图布尔值和失败结构。read_failed_host关联唯一返回回执、进程终止窗口及当前绑定,检查容量前后重新执行 Goal 准入,并核对原状态没有被并发改变。native_failed_turn只读完整原生历史,拒绝未知错误、未完成效果或变化的历史;保留 failed 状态,不冒充 completed checkpoint。resume_state_file按有限截止选择追加阶段,保留会话、失败次数和 replan 记录;相同请求不能延长阶段或擦掉后续失败。
验收依据为既有恢复契约 https://github.com/loopx-project/loopx/blob/1a309ccb3278b68f79d674b66833fadffd8ad476/benchmark/README.md#continue-an-interrupted-host-in-its-retained-filesystem ,固定修订 1a309ccb3278b68f79d674b66833fadffd8ad476。对应 original-state:保留原文件、会话及失败,已实现并由真实 SQLite/worker 子进程用例验证;finite-phase:新阶段有限且重复请求不能补充时间,已实现;normal-admission:下一轮仍受 Stop、配置和 replan 约束,已实现。以上是审查对原契约三段要求的索引,不是新产品协议。跨容器完整恢复、丢失文件修复及科学分数收益不在本次实现范围。
对主干的风险 / Risks
最危险的回归是重复恢复请求把新的失败清掉,从而不断执行或重置次数。本次实际运行生产调度器、真实 SQLite 和原生协议替身,覆盖首次失败、重复失败、另一次明确修复、原会话继续工作,以及准备前后 Stop。独立执行新增 33 项全部 PASS;有意把恢复次数改为零时,同一生产路径的断言 FAIL,证明该用例能识别次数丢失。正常原生付费模型和线上历史实验完整恢复未执行,不能从这些测试推出得分提升。
默认关闭证据包括基线和当前头 9 组完整 Turn 决策相同、自动 quota 仍不重试、默认 readiness 行为未改;新增的 CLI help/README 仅解释显式入口,不会进入自动模型提示。作者相关回归 249 项 PASS、1 可选跳过;最终 focused 72 项 PASS、3 可选 SDK 跳过,最终 owner/journal 65 项 PASS。Premerge 直接 6 项和选中 19 项均 PASS,但 benchmark-sensitive 总状态仍是 manual_review_required,不等于允许合并。
语义与 CI 对齐
新增的是现有失败枚举与 Turn 决策的调用入口;没有按错误文案子串判断重试资格,也没有把 benchmark 术语写进通用规则。外部容量仅是当前观察,不是未来容量保证;后续失败仍需新的显式决定。按照当前 review 契约不查询或等待远端 CI。缺少可选原生 provider、未知容量、变更绑定或缺失完整源时均保持停止,不能用旧 checkpoint 绕过。部署时必须保留这项可选依赖和原始文件系统。
我的整体评价 / Verdict
该切片是 justified_increment:已经打通可验证的原会话有限接续,长程连续性与运营恢复体验均改善;当前不需要新增界面设置或反复确认。保留 legacy 停止容器适配是因为存在持久化旧回执,不能只因请求端同步发布就删除其读取能力。实现范围与持续停机和历史丢失风险相称,共用 TypeScript 决策是本批最有价值的简化。
本次没有渲染页面变更,视觉评审不适用;未验证范围是线上完整历史数据恢复与最终分数收益。最新完整工作区和评分机会的联合资格仍由既有恢复流程负责,缺失时继续阻塞。没有发现当前精确头的阻断缺陷;审批不代表 main 合并、线上安装或旧实验恢复已经完成。
English verdict: APPROVE d442384c8259c56bbe63709b0b76106db07b5e04 for the bounded explicit same-session continuation; historical source recovery, deployment qualification and merge authorization remain separate.
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6-astra; provider=OpenAI; reasoning_effort=ultra; declaration_source=runtime_reported.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
实验运营者在订阅额度恢复后,需要接着完成原来未完成的实验。旧外部调度器仍把已返回的额度失败保持在停止状态,没有共享 Turn 已有的显式重试入口;手工清空失败或新建会话会丢失故障和预算依据。此改动让运营者绑定这一次失败、原会话及独立批准的有限时间,再进入普通调度。它保留原失败和尝试次数,不负责重建已删除的工作区,也不自动增加评分机会。完整旧工作区缺失的实验仍不能直接恢复。
改动思路 / Approach
现有入口 benchmark.runtime.scheduler 接收失败状态摘要,而不是新增恢复守护进程。摘要表达明确的本次重试意图;历史、Goal 和账号观察来自已有事实。TypeScript 的 hostFailureRetryCheck 统一决定失败能否显式重试,Python 只负责文件、进程及原生客户端读取。账号容量判断复用现有可选 provider,既不轮换账号也不购买容量。
关键边界是先证明原进程已退出、原会话和配置未改变,再只读确认原生末轮确为额度失败并检查当前容量。通过后追加有限新阶段,随后照常接受 Stop、工作准入和未结算 replan 的约束。重复同一请求只能返回同一阶段,不能清掉其后的新失败。该分层保留旧协议读回,同时避免在 benchmark 里再写一份通用失败决策;当前 PR 只完成原文件系统内的显式失败接续,不承担完整丢失数据恢复或自动补时服务。
具体改动 / Changes
审查头 d442384c8259c56bbe63709b0b76106db07b5e04,基线 1a309ccb3278b68f79d674b66833fadffd8ad476。14 个文件,新增 631 行、删除 45 行;其中生产代码新增 285/删除 42,测试新增 295/删除 3,文档新增 51。共同规则从既有 Turn Journal 提取,原调度与自动重试默认值未改变。
关键代码讲解
hostFailureRetryCheck保留自动重试次数上限,并继续拒绝盲目重放输出预算耗尽;效果运行时严格验证意图布尔值和失败结构。read_failed_host关联唯一返回回执、进程终止窗口及当前绑定,检查容量前后重新执行 Goal 准入,并核对原状态没有被并发改变。native_failed_turn只读完整原生历史,拒绝未知错误、未完成效果或变化的历史;保留 failed 状态,不冒充 completed checkpoint。resume_state_file按有限截止选择追加阶段,保留会话、失败次数和 replan 记录;相同请求不能延长阶段或擦掉后续失败。
验收依据为既有恢复契约 https://github.com/loopx-project/loopx/blob/1a309ccb3278b68f79d674b66833fadffd8ad476/benchmark/README.md#continue-an-interrupted-host-in-its-retained-filesystem ,固定修订 1a309ccb3278b68f79d674b66833fadffd8ad476。对应 original-state:保留原文件、会话及失败,已实现并由真实 SQLite/worker 子进程用例验证;finite-phase:新阶段有限且重复请求不能补充时间,已实现;normal-admission:下一轮仍受 Stop、配置和 replan 约束,已实现。以上是审查对原契约三段要求的索引,不是新产品协议。跨容器完整恢复、丢失文件修复及科学分数收益不在本次实现范围。
对主干的风险 / Risks
最危险的回归是重复恢复请求把新的失败清掉,从而不断执行或重置次数。本次实际运行生产调度器、真实 SQLite 和原生协议替身,覆盖首次失败、重复失败、另一次明确修复、原会话继续工作,以及准备前后 Stop。独立执行新增 33 项全部 PASS;有意把恢复次数改为零时,同一生产路径的断言 FAIL,证明该用例能识别次数丢失。正常原生付费模型和线上历史实验完整恢复未执行,不能从这些测试推出得分提升。
默认关闭证据包括基线和当前头 9 组完整 Turn 决策相同、自动 quota 仍不重试、默认 readiness 行为未改;新增的 CLI help/README 仅解释显式入口,不会进入自动模型提示。作者相关回归 249 项 PASS、1 可选跳过;最终 focused 72 项 PASS、3 可选 SDK 跳过,最终 owner/journal 65 项 PASS。Premerge 直接 6 项和选中 19 项均 PASS,但 benchmark-sensitive 总状态仍是 manual_review_required,不等于允许合并。
语义与 CI 对齐
新增的是现有失败枚举与 Turn 决策的调用入口;没有按错误文案子串判断重试资格,也没有把 benchmark 术语写进通用规则。外部容量仅是当前观察,不是未来容量保证;后续失败仍需新的显式决定。按照当前 review 契约不查询或等待远端 CI。缺少可选原生 provider、未知容量、变更绑定或缺失完整源时均保持停止,不能用旧 checkpoint 绕过。部署时必须保留这项可选依赖和原始文件系统。
我的整体评价 / Verdict
该切片是 justified_increment:已经打通可验证的原会话有限接续,长程连续性与运营恢复体验均改善;当前不需要新增界面设置或反复确认。保留 legacy 停止容器适配是因为存在持久化旧回执,不能只因请求端同步发布就删除其读取能力。实现范围与持续停机和历史丢失风险相称,共用 TypeScript 决策是本批最有价值的简化。
本次没有渲染页面变更,视觉评审不适用;未验证范围是线上完整历史数据恢复与最终分数收益。最新完整工作区和评分机会的联合资格仍由既有恢复流程负责,缺失时继续阻塞。没有发现当前精确头的阻断缺陷;审批不代表 main 合并、线上安装或旧实验恢复已经完成。
English verdict: APPROVE d442384c8259c56bbe63709b0b76106db07b5e04 for the bounded explicit same-session continuation; historical source recovery, deployment qualification and merge authorization remain separate.
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max.
动机 / Motivation
持有完整失败研究现场的操作者,在账户额度修复后需要继续原来未完成的工作。 旧外层调度器在额度修复后仍保持硬配额失败;本头允许绑定这一次失败和原会话,在另行获准的有限阶段继续工作,同时保留旧失败和尝试次数。 手工清空失败或新建会话会损失归因和预算依据,继续停住则无法利用已修复的现场。真实 SQLite、生产 worker 子进程与本地确定性 native 协议流程完成同会话后续工作;重复请求、后来失败、Stop 和阶段耗尽均不能清除原记录或补充时间。 本 PR 不重建丢失现场、不把 failed 尾部当作 completed checkpoint,不授予账户、预算、执行或合并权限,也不证明线上模型恢复和科学分数收益。 真实历史现场的正向恢复、安装采用、真实模型与完整科学成本收益仍需原运行和 native qualification owner 单独验收。
改动思路 / Approach
显式重试意图无法从额度可用推导;资格判断复用共享 TypeScript owner,进程、文件和账号读取留在现有 provider,有限阶段与历史留在原调度器,避免另建恢复决策 owner。 当前 PR 只交付保留现场内的一次精确硬配额失败接续,打通原会话的有限后续工作;默认自动重试、completed checkpoint 和原语义 replan owner 保持原边界。 不改动的代价是无法从已修复的配额失败继续;只删除 scheduler 的失败标记会绕过来源、会话、当前 Stop 和有限时间。已有 interrupted-Host 路径负责预算中断,不能用它把 quota failed 假装成已完成 checkpoint。这里复用其文件锁、原始来源、完整 native history 和 phase 机制,扩展一个明确的调用分支。
资格检查只决定能否准备阶段,普通下一轮仍决定是否执行。来源 digest 可由现有状态自动计算;已知 Goal、session、配置继续沿用,不增加新 Goal、登录切换或确认回合。操作者仍需真实修复账户并提供原本独立批准的有限余量;这个 consequential decision 不能由“额度看起来可用”替代。
具体改动 / Changes
审查完整基线 1a309ccb3278b68f79d674b66833fadffd8ad476 到精确头 d442384c8259c56bbe63709b0b76106db07b5e04,实际 PR base 为 codex/edgebench-integration-r30-20261107。14 路径新增631/删除45:10个生产路径285+/42−、3个测试路径295+/3−、1个文档路径51+。完整差异与两个既有作者 review 已读;它们是证据输入,没有继承其批准。此前集成版的14个组件文件、frozen source 与依赖声明在本头相同,但本轮在独立 checkout 重新执行实际入口和对照。
关键代码讲解
hostFailureRetryCheck从原 Journal 提取现有显式重试规则。自动 quota 不重试,output budget 不盲重放,retryable 错误仍受次数限制;新 Effect 入口拒绝缺失意图、字符串布尔、未知字段和畸形失败。Python 只调用该 owner,不复制通用决定。read_failed_host将状态 digest、唯一返回 wake、已结束进程组、原 session/profile 和 native failed 尾部绑定;账号观察前后都检查当前准入,最后重读原始字节。只留下有界 availability 观察,不输出账号、令牌或原始响应。native_failed_turn复用既有完整 history reader,要求结构化 quota 错误、正确进程窗口、无 pending effects,重读历史一致。它只观察 failed,原 completed-checkpoint gate 继续拒绝同一尾部。resume_state_file在现有独占锁中追加 hash 绑定的有限 phase,保留原失败、attempt 和 replan。相同请求返回相同阶段,即使其中已有新的失败也不擦除;后来的修复必须重新绑定那个失败。生产 worker 下一次 attempt 从保留计数增加。
验收依据 benchmark/README.md,固定修订 1a309ccb3278b68f79d674b66833fadffd8ad476,以改动前的“Continue an interrupted Host in its retained filesystem”原契约为准,而非新增的解释反证自身。original_session:保留 scheduler attempt、wake、Goal/Todos/native conversation,已实现;finite_phase:追加阶段并禁止重放补时,已实现;current_admission:下一轮维持 quota、Stop、profile/session 检查,已实现;semantic_replan:未结算 replan 仍由原 owner 处理,已实现;transport_only:不授予 evaluator、执行或科学可比性,保持现有边界。对应证据是本轮真实 SQLite/worker 流程、反例和9组共享决策对照。
对主干的风险 / Risks
最强反例是首次恢复成功后,同一个旧 digest 反复擦除后来失败或把 attempt 重置为零。生产流程先返回一次 quota 失败、准备阶段、再次失败并保持 attempt=2;重放旧请求保留阶段字节,随后另一次绑定新失败的明确修复才让原 session 完成工作。故意把恢复计数改成0时,同一实际路径在 recovered_attempt_count == 1 断言得到预期 FAIL,原始失败记录保留;未修改产品代码或放宽断言。额外两个并发反例覆盖额度观察成功后的 Stop 与截止耗尽,均拒绝新阶段且原失败字节不变。
本轮 PASS:224项 Python,2项独立并发反例,60项 TypeScript,共享 turn_journal.inspect 的9组 base/head 完整结果逐项一致且零归一化。Python SKIP 保留4项:3项缺可选 SForge SDK,1项显式真实 Docker qualification;legacy quota 分支经过真实文件清单和消费方检查、Docker transport 使用本地替身,不能宣称本轮真实 Docker 恢复成功。共享 TS typecheck 和 premerge 的6项直接、4项选中检查均通过;总体仍为 manual_review_required 的 benchmark hold,exit1没有改写成 merge gate 通过。按当前策略未查询或等待远端 CI。
默认路径未添加 required fields、自动重试、账号轮换或额外 quota spend。require_allowance=false 的旧 readiness 用例与普通 scheduler/Host/replan 回归通过;新增 README/CLI help 只解释显式操作,不是自动加载 prompt/skill。缺 provider、未知或耗尽额度、错误 session/profile/digest、活动进程、变化历史、未知错误与未结算 replan 仍保持原失败。账号可用只是观察,不预留将来容量。回退可撤销这一显式入口,旧失败和追加阶段继续保留给原 owner 检查。
语义与 CI 对齐
共享 loopx_turn_host_failure_v0 枚举与 Journal 的决定含义复用原词表;host_failure.retry 暴露原决策的有类型入口,failed_host_recovery 是原 scheduler 的派生来源记录,没有第二套通用生命周期。没有根据错误 prose 子串猜测 quota,没有把 benchmark 专用义务写进通用 Goal/quota/Todo 规则,也没有将强制准入称作建议。语义、编译、公共边界和现有 ratchet 检查通过;不放松科学门槛或原始预算。当前不触及 PostgreSQL authority owner。
我的整体评价 / Verdict
交付判断 justified_increment。long_horizon=improved 指已验证的失败保留、同会话有限后续工作;user_experience=improved 指操作者可沿已有入口修复并继续,所需额外输入来自真实缺失的 repair intent 和独立预算授权。没有从测试数量推断长期净收益。显式重试意图无法从额度可用推导;资格判断复用共享 TypeScript owner,进程、文件和账号读取留在现有 provider,有限阶段与历史留在原调度器,避免另建恢复决策 owner。 当前 PR 只交付保留现场内的一次精确硬配额失败接续,打通原会话的有限后续工作;默认自动重试、completed checkpoint 和原语义 replan owner 保持原边界。
兼容性保留给已存在的 persisted failure、phase 和停止容器证据;删除这些 reader 会把完整旧现场变成不可用,不能以版本同步替代历史读取。共用 TypeScript predicate、移除 Journal 重复分支是适用且已覆盖 parity 的同域简化;新建通用恢复框架或整条语言重写没有本次需要。本头没有修改渲染页面;检查了 benchmark scheduler CLI、README、账号观察与 worker 失败读回,并搜索了既有 App/capability 消费方,当前是专用实验操作者入口。 未验证范围:安装态前端、真实账号修复、真实 Docker 失败现场和线上历史模型恢复未由本次本地检查认证。 真实历史现场的正向恢复、安装采用、真实模型与完整科学成本收益仍需原运行和 native qualification owner 单独验收。 本轮未发现当前精确头的阻塞问题;批准与合并、安装和实际实验恢复授权分别处理。
English verdict: APPROVE d442384c8259c56bbe63709b0b76106db07b5e04 for bounded explicit same-session continuation; live historical recovery, scientific benefit and maintainer merge authorization remain separate.
…ed sessions Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> (cherry picked from commit d442384) Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
d442384 to
8bc878b
Compare
|
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 |
A benchmark Host that returned
quota_exhaustedstayed held even after an operator repaired the account, because the outer scheduler had no equivalent of the shared Turn's explicit failed retry. This adds an explicit, digest-bound continuation of that exact failure into a separately admitted finite phase, preserving the original session, failure history and attempt count.The path verifies the returned wake and terminated process, current Goal/session/profile binding, stable native quota-failed cursor, and fresh account allowance through the existing native provider policy. Unknown or exhausted allowance stays held. A repeated request cannot erase a later failure in the new phase. The native cursor remains
failed; ordinary completed-checkpoint requirements, unresolved semantic replan holds, automatic quota holds, and default startup behavior remain unchanged.The shared TypeScript Host retry decision is reused by the Turn Journal and this caller. A stopped legacy container can supply the existing complete-source proof only for its exact returned quota failure; unknown failures, missing identities and cross-container copies remain refused. This does not recreate a missing workspace, reset scorer opportunities, switch accounts or infer a remaining budget. The existing operator supplies the independently authorized finite deadline. The stricter path requires the optional native Codex provider; its absence fails closed. No new persistent option or settings form is introduced.
Validation:
manual_review_requiredfor the benchmark-sensitive boundary; no merge readiness or authority is inferred. Bilingual RFC and whitespace checks passed.This PR intentionally targets the integration branch that owns its benchmark prerequisites, not main. Independent exact-head review and maintainer merge authorization remain separate.
Main target
This proposal now targets
mainas its independent 14-file continuation change. The interrupted source prerequisite and native receiver startup prerequisite are inmain. The source tree of the continuation is identical before and after dropping the now-landed receiver dependency from this proposal. The previous integration review remains available, and this main-target head needs its own review. Original stopped-source prerequisite #8208 · Receiver startup #8262