Skip to content

feat(research): retain execution evidence through Explore replans - #6901

Merged
songoow merged 4 commits into
mainfrom
codex/split-research-execution-evidence
Oct 20, 2026
Merged

songoow merged 4 commits into
mainfrom
codex/split-research-execution-evidence

Conversation

@songoow

@songoow songoow commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

当前修复与验证(2026-10-20)

本 PR 保留独立 C2 的阶段接续、本地执行证据、Explore/replan 与研究历程,共 27 个文件;已合入最新 main 82b1a8c72159dedcbca3a3b69fac2c7eaad3192d,当前 head 为 35d2d0e801fb93fe08b83adc48d7dfee4ce9afc0。

已修复当前 REQUEST_CHANGES:RESEARCH_LOOP.md 英文和中文均明确,独立 C2 沿用原有 Host 准入,逐次 provider 发送检查只属于组合 C1 的入口;没有复制 C1 或宣称 C3/native 反馈资格。

  • 原 File/SQLite 完整实验链及 effective-turn 模块:29 passed、0 failed/skipped(325.11 秒);相关五个 TypeScript 模块 71 passed。
  • 这些后端源码、测试与 transitive owner 在本次 main 更新中逐字节未变,保留实际执行版本 b642b6771ab579b9b97e3bb5f36a01b74ba655ac。真实路径贯穿候选完成、实际 probe、Explore、当前决策、新 Todo 和改变后的实际程序。
  • 最新 head 的 Dashboard/Chat 再构建通过;更新后的原 packaged research-history 完整场景 73.941 秒通过,包括 main 新增的引用焦点、错误与恢复断言。显示输入为 public synthetic,历史 HTTP owner 为真实实现,没有模型调用。
  • 不可变 main 与修复源的 paired oracle 证明 status-only 不能消费实质研究结果;关闭 research flag 的三个 planning 输入与 main 逐字节相同。
  • 原固定 120 秒语义扫描在当时 main 与 C2 均超时;C2 未修改的完整扫描随后通过。其余 premerge 4 direct、Python compile 与 18/19 selected 通过,保留原超时和 benchmark-sensitive 人工 hold,不提高预算。

按用户本批指示,当前 review packet 为 wait_for_ci=false,不再获取、轮询或等待 CI。先前观察的静态 workspace 名称断言在不可变 main 与当时 head 同样失败;该历史门槛与独立代码审查分开保留。合并仍需有效 review、required checks/代码所有者与 merge readiness;本片不证明模型收益、C1/C3 全链、完整成本或安装后 App。

下面保留原来源、图片和历史验证的真实版本绑定;不将其改标为最新 head 的运行。

历史实现说明与原版本验证(原拆分链路线已由上述当前方式取代)

目标与交付边界

初始候选有效,并不代表原研究目标已经完成;执行耗时、实际方法与失败结果需要进入下一次决策和真实后继工作。

这是 #6784 / #6838 拆分中的 C2 研究阶段与执行证据:原候选 Todo → 保留的研究后继 → 实际本地探针 → 普通 Explore 写回 → replan 与研究历程。它提供完整的本地证据链;native 提交、外部反馈与显式等待由 C3 接入。

Author Declaration

Implemented against

Criterion (spec clause) Disposition Symbol / path Test or command
研究运行合同:候选完成只释放独立研究后继;准备不消耗工作 Turn、不重开已准备研究 implemented research_loop.py::prepare_research_continuation 原 test_candidate_stage_leaves_research_work_and_execution_reaches_next_context[sqlite] 本轮 1 passed(338.81 秒);File 参数保留未补跑。
研究运行合同 / RFC §6.2:实际 probe 保留候选、方法变更、耗时/退出,缺失计数未知,坏诊断不抹去宿主观测 implemented research_probe.py::run_probe;explore/execution_observation.py 现有 probe 回归及 execution observation codec;原 AST/Ruff 与 TS 文件已通过,真实路径见下表。
Structured stride control / RFC §6.3:同一执行观测进入 Explore、context、stride 判断及可验证后继工作;准备事件不消费实际 finding implemented explore_result_writeback.ts、explore_turn_context.ts、replan_context.ts、stride_policy.ts 原 5 个 TS 文件通过;本轮原 SQLite candidate→stride→新 Todo 的真实实验闭环 1 passed,原断言与期限未改。
RFC §4、§5:首次分数和长程收益需要匹配的实际 outcome 对照 out_of_scope 集成分支上的后续研究评测 本 PR 不执行模型或正式 benchmark,不宣称收益。
  • Self-check before submission: 核对与 C3 的 TS 输入一致性、三个 native 测试的同步迁移、旧测试回执与公开 synthetic 图片;本轮完整 SQLite 节点另记录实际 checkout、Python imports 和 Node/SQLite 资格。图片来自冻结原始来源,UI 输入未变;当前集成的 packaged 运行结果另列,不能用旧图片替代。

变更与结果

  • 显式 research_loop=True 使用既有 Todo 依赖保留研究后继;候选完成释放后继,准备阶段记录 surface_only,已有研究不会被重新打开。
  • Harbor planning/worker 使用同一执行指引和 evidence_conditioned_v1 策略,安装本地 loopx-research-probe。关闭处理时保留原入口行为。
  • 探针固定明确选择的候选文件,保留进程耗时、退出/超时和可选 solver 诊断。缺失计数保持未知,坏诊断保留可靠宿主测量,候选变化拒绝归因。
  • Explore attachment、追加事件、turn context、replan finding refs 和研究历程保留同一个可选 execution_observation,包括候选绑定、实际方法与变更理由。
  • 准备活动与未知历史 delivery outcome 不消耗被引用的实际结果;负结果和有效阻塞仍进入后续判断。

依赖与源码身份

  • PR base:codex/split-native-request-admission;前置 C1:feat(benchmark): enforce request admission at provider dispatch #6900;发布 head:1b243b9ac1aa056fc43d576bcb0758de8a924370。

  • 本片来源 tree:8c212cfa1d38af23fa1a126712414ad211f43f66;27 个文件。

  • 三个 native 自动注册测试与对应实现共同进入 C3;原始组合完整恢复;当前发布树另继承 A1 测试归属迁移与 B4 fixture 退出时先等 HTTP 请求完成、注销自身 Effect runtime,并等待子进程 close 后再删临时根的修复,未删除或放宽验收断言。

  • 后续继承 A3 的两文件 Markdown 诊断预算修复;当前 tree c7817a52772708aa4312231de88e401fcac6fabd。原测试/图片保留其实际来源版本;新 head 不是原测试输入的逐字节同一 tree。A3 修复的定向回归与最新检查状态见 #6899。

验证与边界

检查 验证输入与结果
Ruff / Python AST / 明确路径检查 / diff check 通过;本轮再次核对差异格式通过。
control-plane typecheck 通过。
Explore writeback、turn-context、history、replan-context、stride-policy 5 个 TypeScript 测试文件通过,0 failed / skipped;实际输入为 C3 tree 8f852d440aae2875e916463236c79fa5ee984aff,与本片的相关 TS/Node 测试输入相同。
本轮 SQLite 候选阶段 → 实际 probe → Explore → replan → 改变后的后继实验 原完整节点 test_candidate_stage_leaves_research_work_and_execution_reaches_next_context[sqlite],C2 commit 17b7c4d6e1315482212a0c34e1c350ca3bce2be9 / 上述来源 tree:1 passed / 0 failed / 0 skipped(338.81 秒)。实际 Python imports 来自该 checkout,Python 3.12.14 / pytest 9.1.1;Node v24.19.0、SQLite 3.53.3,原 runtime qualification=true。源码、断言与期限未改。
同一完整路径的 File 参数 本轮未补跑,保留为该路径的独立证据缺口;不能将 SQLite 通过记为 File 通过。
packaged Dashboard 浏览器路径 本轮 d1dc8/cb8 集成上原 research-history 完整功能场景 116.004 秒通过(场景 108.035 秒);不是独立 C2 新 head 的全量运行。中文新截图缺 CJK 字形,视觉资格未补齐,保留旧来源图片。

本轮 SQLite 原节点实际验证:初始候选完成仍保留独立研究工作;两步本地 probe 的同一观测进入 Explore、context 与 history;另一候选 SHA 的结果被拒绝且不追加;stride packet 传递实际测量并接受有证据的 replan,随后准入不同新 Todo 并实际执行五步候选,读回不同候选哈希和 stdout。它补齐 C2 独立阶段/stride/新 Todo 的完整路径,C3 的 native 反馈恢复路径另验。

这次通过对应明确的 C2 来源 tree,不是最终发布 head 的完整回归。发布组合还包含列明的前置修复与集成更新,其 packaged 验证按实际输入另列;File 参数本轮没有补跑。

视觉证据

本轮 d1dc8 集成的完整 research-history 功能场景已通过,包含分组图、指针命中、实际方法、未知成本、负面/native outcome、分析竞态/错误、locale/mobile 与只读导航。新中文截图缺 CJK 字形,因此未作为合格视觉证据发布;完整字形的新截图仍待补。以下图片继续明确属于旧来源。

冻结来源 eac81014fd3a8842ddd420d7908657af107c6787 中保留的 public synthetic research-history 示例;本轮相关 UI 输入未变。截图展示计划/实际方法、变更理由、耗时/上限、未知搜索次数、停止原因与候选 SHA-256;它们不是新的拆分 head packaged 验证。

研究执行证据:桌面示例

研究执行证据:窄屏示例

执行观测不认证方法收益,不判定 Goal 完成。本次没有模型调用或正式 benchmark,不能据此声称首次质量或长期收益改善。前置 C1 本轮在其来源 tree 上原背压 File 单例精确诊断 1 passed(31.05 秒),未改源码、断言或期限;C1/C3 历史同节点失败保留,不能将该单例结果赋给完整 native 矩阵。

发布、进入 main 与集成证据(2026-10-20)

  • 本片 source head:1b243b9ac1aa056fc43d576bcb0758de8a924370;tree:c7817a52772708aa4312231de88e401fcac6fabd。当前 base 为 codex/split-native-request-admission。按原小 PR 路线,前置进入 main 后再将本片改向 main,并核对本片差异、检查和审批。
  • 新版 #6784 与 B1/A1–A3 存在组合重叠;它们的承载路线会影响后继重定基线,详见总进度。 完整顺序、评审阻塞和操作步骤。
  • 原小 PR 路线按依赖逐片进入 main;本仓库允许 merge commit,保留原提交身份通常便于后继继续比较。若采用 squash/rebase,需按旧父提交边界整理后继自身增量后再复核;改 base 本身不完成这一步。
  • 14 PR 的检查/评审快照为 2026-10-20 00:14–00:15 UTC。本片当时为 检查未完成;尚无正式批准。后续合并资格以对应当前 head 与 main 基线的检查和审批为准。
  • 集成分支 已快进到 fe3b1f7b382e,tree 6bbf110b1cb2535975b2389558a86dff73792926。它保留原 d1dc8ebfe7ff0ce888c8e7a6b7a5051413f29af2 与最新 C3 7368ca0286d503a93e50b26ab24755a5fb429b2f 两侧祖先;真实 Git merge-tree 与 GitHub tree 一致、零冲突,仅增 A3 的两文件 Markdown 诊断修复。
  • 此集成继续使用已验证的冻结 main 45d742088a3f7896a0a008761f68d2437398bcd1。本轮观察的 main e4190c30d7f94886dddd8e06b899664df34120f9 已另有变化,进入主干前须另行更新与验证。原 d1dc8 的 supplied-candidate in_sync 收据保留历史绑定;后续正式 owner 收据见总进度,不将旧收据改标为新 main 的资格。
  • 构建及 UI 的实际运行版本仍为 d1dc8/cb8:control-plane TypeScript 50.754 秒通过,标准 Chat build 131.930 秒通过,Outcome 恢复 97.616 秒通过,独立正常首屏 41.605 秒通过,Worker readback 126.422 秒通过,research-history 功能场景 116.004 秒通过。该版本的 8 张可读截图与验证摘要 已发布;后继两文件修复不改变这些 UI 输入,截图保留真实拍摄版本。
  • 保留限制:首次 Outcome fixture 的 90 秒启动失败未抹去,后续通过使用正常缓存预热;research-history 新中文图仍需补全 CJK 字形;完整新 head Python/native/File/重放/并发矩阵、installed App 与模型/benchmark 收益未取得全面资格。摘要记录实际运行范围,原临时 raw logs 已随执行环境回收,未重建成伪收据。
  • 本轮最终对象核对确认 12 个 source heads 被保留、两文件补丁逐字节一致、UI/build 的 tracked 输入一致,以及源链 18/18 作者签署匹配。未修改的 integration owner 对已发布候选给出 preview_ready(execute=false);恢复的新 plan 仍是 never_synced,完整 CLI bootstrap 未执行,未重新签发 in_sync。

Rebuild PR #6901 from only its unchanged C2 delta on main 5853e15.
Keep its own complete execution-evidence behavior, tests, and docs,
without carrying the historical split branch ancestry.

Original source: ce9f90d
Original author: song <liusongstep@gmail.com>
Original patch-id: dde2731402d002c578287a5558650a4744a7aca5
Validated local source: 61fb992c99243f96acd32da203157320c8a07702
Validated tree: ba79760
Original history: codex/research-split-archive-20261020

Signed-off-by: song <liusongstep@gmail.com>
Signed-off-by: Codex <codex@openai.com>
@songoow
songoow force-pushed the codex/split-native-request-admission branch from 360c6ef to bea1519 Compare October 20, 2026 06:24
@songoow
songoow force-pushed the codex/split-research-execution-evidence branch from 1b243b9 to e907547 Compare October 20, 2026 06:24
@songoow
songoow changed the base branch from codex/split-native-request-admission to main October 20, 2026 06:24

@songoow songoow left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Reviewer: model_agent; OpenAI GPT-6 Astra; provider OpenAI; self_reported.

Code review comment — source-only review with a non-blocking documentation suggestion.

审阅版本:e907547b353816674407af37e704c7c194328c11;base:main 5853e151d97d9129bda9dce45a92a0944dcb9565。已逐文件对照本次重放:27 个文件的新增/删除内容与原 C2 切片一致;另外重读了随 base 改变的 worker、Explore context、replan 和 stride 调用处。本次是源码评审,没有执行测试、构建或浏览器检查,不用 CI 状态代替代码结论。

动机

做出一个有效的初始候选之后,研究者仍可能需要比较其他方法、理解失败结果并继续优化。若候选通过就把原研究目标一起结束,或者下一次决策只看到“做过实验”而看不到实际方法、候选版本和资源测量,后续工作就容易脱离已经取得的证据。C2 把初始候选与后续研究分别保留为现有 Todo,并让本地进程产生的执行观测贯穿 Explore、replan 和研究历程。

这个本地证据链可以独立交付;它不需要在本片接入 native 提交与自动反馈,也不认证实验方法有效或原 Goal 已完成。

改动思路

实现沿用了已有 Todo 依赖、Vision 写回、Explore finding 和 stride 决策入口,没有另造研究调度器。准备阶段写 surface_only,初始候选完成后释放后继;probe 负责选定文件的前后哈希及宿主进程测量,TypeScript codec 负责字段与归因关系,原 Explore 追加日志继续负责持久记录。

当前改为直接面向 main 后,本片保留的是“阶段接续和本地执行证据”,不再包含原祖先 C1 的逐请求准入。这一拆分可以成立;建议运行说明明确哪些保证来自组合 C1,便于读者理解本片的独立发布范围。

具体改动

非阻塞建议:明确逐请求准入由 C1 组合提供

位置:benchmark/runtime/RESEARCH_LOOP.md:7–9。

这里先介绍本片的 research_loop=True,随后描述当前 request guard 会在每次 provider send 检查普通 Host admission,且该边界要求 Responses-compatible endpoint。已按固定 head 重新核对:worker.run_once 的启动路径 没有 C1 的 ResearchRequestGuard 创建、serve()、bind() 或 invocation-only gateway 路由;heartbeat body:88–95 只是追加执行证据指引。因此,这几句应帮助读者区分独立 C2 与 C1 组合后的能力。

建议把这几句限定为“组合 C1 后提供的保证”,并明确独立 C2 提供研究阶段与本地执行证据。这是拆分后的非阻塞文档范围建议,不要求把 C1 实现恢复入 C2,也不改变本片可独立交付的判断。

关键代码讲解

  • prepare_research_continuation:把研究后继持久化为 todo_done:<initial> 的 deferred Todo,并给初始 Todo 写 successor 关系;已有研究直接返回,不把已完成或真正等待的工作重新打开。
  • run_probe:先验证归因并保留选定文件清单,再启动受本地期限约束的进程,记录退出/超时;可选 solver 诊断与宿主事实分开处理。前后文件变化会拒绝归因,未测量计数不补零,非零退出在 CLI 继续表现为失败。
  • normalizeExploreExecutionObservation:实际方法与计划方法不同必须给出理由,数值必须有限且符合范围,结果引用必须同时保留同一候选 SHA。附件层继续验证其 input revision 和 evidence refs 属于当前 finding,避免把另一候选的结果附到这里。
  • workResultUse:复用 MATERIAL_DELIVERY_OUTCOMES 判断后续记录是否有资格消费被引用结果;状态更新与未知历史结果不能冒充实际后续交付,负结果和真实 gap 仍可参与后续判断。
  • GoalResearchHistory.findingBody:为有观测的 finding 展示实际方法、资源和候选标识,空测量显示“未测量”,并提示它不能证明方法收益或当前候选验收。

已检查现有 probe、codec、status-only followthrough 及 File/SQLite 全路径测试的断言。它们明确区分“证据已传递”和“后续实验实际改变”,也覆盖错误候选引用与坏诊断;本轮未运行,不能据此声称当前 head 已通过这些场景。

对主干的风险

持久化影响集中在可选的 execution_observation:旧事件缺省仍沿原投影处理,新事件需要支持该字段的 reader。回滚不能只考虑 Python 入口,也应考虑已经落盘的 finding 与 Dashboard reader。候选哈希只覆盖显式选择的文件和两个观测边界,不能扩展解释为所有依赖、执行期间所有瞬间或 native 归档的认证。

runtime 的 research 引导受显式开关控制;共享 Explore affordance、可选附件和读回投影也有新增能力,因此应区分“未启用研究 treatment”与“整个 Explore 接口逐字不变”。准备动作分多次 canonical 写入,已有成功准备的重复调用有测试,但任一步部分失败后的恢复没有在本轮执行验证。UI 的实际渲染、持久化往返和完整组合运行同样未实测;这些是本次评审的证据边界,不作为阻断结论的依据。

我的整体评价

在 C2 自己的生产增量中,暂未建立新的执行逻辑阻断缺陷:状态分类使用既有类型,执行观测使用单一 codec,后续决策和展示保留原证据而不夸大其证明力。代码量主要用于本地 producer、归因校验与既有通路上的小幅传递,和这一独立交付边界相称。

这份意见按 COMMENT 发布,暂未确认 C2 自身需要阻断的实现缺陷。建议补一句 C1 组合前置的文档说明,随后继续按本地阶段与执行证据的独立范围推进;C1 的请求生命周期问题和 C3 的 native 恢复分别保留自己的结论。

English verdict: COMMENT — no blocking implementation defect was established in C2's execution-evidence logic during this source-only review. Clarifying that per-request admission is supplied by the C1 composition is a non-blocking documentation suggestion, not a request to restore C1 into C2.

Comment thread benchmark/runtime/RESEARCH_LOOP.md Outdated

@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; gpt-6.1-sol; provider OpenAI; runtime_reported; reasoning_effort=max.

[P2] 将逐次 provider 请求保护限定到 C1 组合入口。 本片独立 head 尚未接入 C1 的逐次 provider 请求守卫,但使用文档把这项保护写成当前入口已具备的行为。 将文档改为明确的 C1 组合条件,并分别说明独立 C2 与组合后的请求边界;本片无需为此合入 C1 或复制其实现。

动机

需要 Agent 持续研究、分清实际执行与方法收益,并查看候选资源消耗的使用者。 初始候选通过后,旧路径可能只留下阶段完成;新路径保留后续研究,并把真实耗时、未知计数和方法变化带到下一次决策。 真实 File/SQLite 流程完成阶段接续、观测写回、下一次重规划及改变后的实际实验;打包界面保留未知值、旧记录和读取失败恢复。 本片独立 head 尚未接入 C1 的逐次 provider 请求守卫,但使用文档把这项保护写成当前入口已具备的行为。 不证明真实模型或 benchmark 得分、C3 原生提交反馈、安装后 App、Windows 实机或长期完整成本净收益。

本评审绑定 6901@e907547b353816674407af37e704c7c194328c11,actual merge-base 为 5853e151d97d9129bda9dce45a92a0944dcb9565。研究过程中,已运行、已记录、已采用和确有收益是不同事实;丢失候选或资源归属会令后续重复试验、错误归因。当前 #6838 明确允许 C2 独立推进,我按这个边界评审,不要求把 C1、B5 或 C3 旧祖先一并合入。已有来源和授权足够,本次新增用户确认轮次为零。

改动思路

阶段依赖和研究证据分别复用 Todo/Vision 与 Explore 的现有 owner,探针只负责本地 IO,界面只展示来源;不另造研究调度器或结果认证服务。 保留可独立验证的 C2:阶段接续、本地观测、结果写回与研究历程。最小修复只需纠正文档的 C1 保护范围;native feedback、完整研究效益和成本归约留在现有 C3/研究计划。

显式 research_loop=True 才建立初始候选与 deferred 研究后继,使用既有 todo_done 与 successor 语义。探针把宿主耗时/退出与 solver 自报计数分开,固定调用者明确选择的文件清单;它没有 native submit、隐藏 evaluator 或结果认证权限。单个 TS codec 负责字段约束,Python 负责 transport/cache 和本地进程,现有 Explore 写回、replan、history 接收同一个来源。核心没有新增研究专用 planner 或手工结果账本。

下表是当前源码行为说明,执行证据由后面的真实检查单独提供:

触发 可观测行为与边界
候选阶段结束 释放原研究任务;不等于研究目标验收
本地探针完成,solver 未报告 保留耗时/退出,搜索次数为未知
所选候选前后变化 拒绝归因,保留这次尝试
只有状态整理、没有实质工作 不消费被引用的旧研究结果
使用独立 C2 已有阶段/证据流程;不能据此宣称 C1 每次请求保护

具体改动

完整27路径 +871/-15 包含阶段 composer、本地 producer、共享 typed metadata、旧事件读取、五处结果消费者、现有研究历程详情、说明、真实 CLI 回归与两张 synthetic 图片。图片是历史来源,当前独立打包观察另行执行,未把截图或字段存在当作方法收益。读过现有 comments/inline 与本片完整增量,相关 #6838/#6900/#6902 边界也分别核对。

关键代码讲解

  • prepare_research_continuation:Opt-in creates deferred research; existing row is returned without reopening or overwriting later Vision。Retain real research scope using ordinary Todo and Vision owners;The original initial candidate id and exact claimed owner must exist。
  • run_probe:Fresh output only; timeout and optional bad diagnostics preserve distinct facts。Own local process measurements and candidate boundary pins;Candidate changes reject attribution; missing solver counters remain null。
  • normalizeExploreExecutionObservation:Adds explicit optional fields; refuses conflicting method/result attribution。Single typed execution metadata codec;Changed method requires reason; bare candidate hash and finite measurements/null。
  • workResultUse:Surface-only/unknown outcomes no longer consume or create work results。Derive cited-work followthrough from material outcomes;Reuse MATERIAL_DELIVERY_OUTCOMES and append order。
  • findingBody:Legacy finding stays readable; optional measurements do not become success。Show producer observations in existing detail disclosure;null renders 未测量; no second current-state owner。

spec_ref:docs/reference/protocols/goal-vision-replan-contract-v0.md;spec_revision:5853e151d97d9129bda9dce45a92a0944dcb9565,采用改动前文本。criterion_id decision_followthrough.work_result_use 已实现:必须有随后 material writeback,原 status-only 反例在 actual base 失败,在当前 File/SQLite 流程通过。criterion_id execution_and_goal_gain=unknown 已保留:recorded observation 和路线采用不认证科学收益。criterion_id Ownership Boundary 已满足本片的领域分工:benchmark 指导与测量由 adapter 提供,通用 Vision/Todo/replan 仍由 kernel 负责。下述文档错误是独立的实际能力范围问题,不要求把 C1 当成本协议已经规定的 C2 实现前置。

对主干的风险

阻断项限于上述错误的请求保护声明。RESEARCH_LOOP.md:7–9 使用当前完成时;独立运行 prepare_codex_home 的真实配置直接保留 caller 的 provider URL,完整 runtime 没有 ResearchRequestGuard/research_request_guard 接入,research_loop 在 worker 这里只添加研究指导。#6900 与当前 C3 的依赖说明也明确该模块属于 C1。不能让研究使用者依据这段文字误判 Stop/预算在每次网络发送时都会重查。最小修复是写清“组合 C1 时”及独立 C2 的边界,无需扩成本 PR 的实现依赖。

另做了四个真实 File/SQLite 准备中断:在 add 后/update 前,或 update 后/Vision refresh 前退出,再重试。现有 early return 不补齐全部 annotation/Vision,但研究 Todo 仍由 canonical resume 选中,successor_replan_required、可运行、非 terminal 均实际读回。因此我没有把缺少附属写入误报为研究丢失或新增 blocker;可在原 helper 内做有界幂等整理,不必新建任务或覆盖后来 Vision。候选清单仍只固定显式文件的两个边界,不覆盖 transitive imports、独立 writer 或 native archive bytes,已按现有说明保留这些限制。

语义与 CI 对齐

独立执行的两项 Python 模块 29 passed;五个相关 TS 模块 71 passed;control-plane typecheck、正常 Dashboard 与 Chat build 通过。把相同 current-head oracle 放到 actual base 的真实 CLI/File 路径,原 surface_only 整理会消费旧结果,新增的 unresolved 断言在585行失败;当前头的同一 File/SQLite 路径通过,未弱化断言。研究入口关闭且省略 execution attachment 时,两 provider 的实际任务、状态写回、旧 finding shape 与 base 一致。通用 Explore 的可选指导文字确有独立扩展,不宣称整个 off prompt 逐字相同;它没有把 metadata 变为 settlement 必填或授权。

当前 build 在真实 production history HTTP owner 上检查了1512×982与390×844:方法变化、未知计数、宿主耗时、旧 finding、reload、Escape 返回,以及实际损坏日志导致的 unavailable 与恢复。没有前端 mock 替换 history 规则;展示 events 是合成输入,执行观测来自本次本地子进程。readback 确认源字节恢复且未变;三次自动偏好写入被只读 fixture 拒绝,没有配置模型 executor。这不等于运行了原全量浏览器套件、已安装 App、完整 Harbor 打包或真实模型。

native premerge 的 6 direct +19 selected 检查全部通过,退出码1来自显式人工 review hold,没有检查失败;未提高预算。没有获取、轮询或等待 GitHub CI。原 measurement model §6.2/§6.3 的模型、完整成本和科学资格继续由既有研究计划验收,不从本批工程测试推导提升。

我的整体评价

REQUEST_CHANGES,修复范围很小:纠正文档的 C1 保护条件。 long_horizon 在本片范围得到改善,真实观测已进入后续实际实验;user_experience 的实际读回成立,但公开入口的保护说明仍不足以安全理解,当前不予批准。结构和体量与已验证功能相称,TS 扩展既有 Explore vocabulary、复用 material outcome owner,Python 保留本地 IO 职责;无需新的框架、强制全量重写或把父研究计划做完。保留旧事件兼容与有效负结果。文档修正后,对新 exact head 检查实际 diff、原有正反例和当前组合边界即可;现有源码验证不能替未来 head 的完整判断,也不授予 merge、安装或付费运行权限。

English verdict: REQUEST_CHANGES at e907547b353816674407af37e704c7c194328c11. The independent C2 stage/evidence/replan flow is supported by real File/SQLite execution, 29 Python and 71 TypeScript cases, baseline counterfactuals and packaged history recovery. Its usage guide nevertheless promises per-provider-send admission from C1, which this standalone tree does not integrate. Make that guarantee explicitly conditional on C1 composition; do not require C1 implementation or broaden this independently useful slice merely to correct the documentation.

Comment thread benchmark/runtime/RESEARCH_LOOP.md Outdated
…901-20261020

Signed-off-by: song <liusongstep@gmail.com>
Signed-off-by: song <liusongstep@gmail.com>
…901-20261020

Signed-off-by: song <liusongstep@gmail.com>

@songoow songoow left a comment

Copy link
Copy Markdown
Collaborator Author

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; provider=OpenAI; declaration_source=self_reported.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

APPROVE 6901@35d2d0e801fb93fe08b83adc48d7dfee4ce9afc0 的代码结论;没有剩余的本片实现阻断项。 原 REQUEST_CHANGES 中的逐次请求保护范围已经双语修正。远端红色检查和合并权限仍是独立门槛,下面保留其实际结果。

动机

在初始候选通过后继续研究、查看实际实验与资源消耗的使用者。候选通过后仍保留研究任务,真实探针的候选、方法与未知计数进入下一次决策和改变后的实际实验。这样可以避免把初始候选完成当成整个目标完成,也减少重复试验及把迟到结果归给错误候选的风险。

当前 File/SQLite 完整流程与打包研究历程均通过;文档现在明确逐次 provider 守卫只属于 C1 组合入口。本片不接入 C3 原生反馈,不证明真实模型或付费评测收益、完整成本净收益或已安装 App。C1/C3 组合和研究收益仍由既有后继与研究计划独立验收。

本轮按 #6838 明确允许 C2 独立落地的边界,先读既有评论和规格,再复核完整 27 文件增量及最后一次评审后的修复。没有要求复制 C1,也没有通过删负例或扩大父研究目标来制造完成结论。

改动思路

阶段接续、实验观测与结果读取沿用既有 Todo、Explore 和 replan owner,避免第二份执行或调度权威。本片保留可独立使用的阶段接续和本地证据链;只纠正 C1 文档条件,不复制 native 请求或反馈实现。

显式 research_loop=True 才组合初始候选与延期研究后继,真正的准入、结算、Stop 和预算仍由原 owner 决定。Python 探针只执行调用者明确选择的本地命令;单个 TypeScript codec 检查候选、输入、方法和结果引用的一致性。已有研究历程在原详情里展示来源,既不增加配置屏幕,也不自动采用候选。

触发 当前行为及边界
候选完成 原研究后继可继续;不等于 Goal 完成
探针结束,solver 未报告 保留宿主耗时和退出;计数保持未知
候选变化或结果属于另一候选 拒绝归因,错误附件不追加
后来只有状态整理 不消费旧的实质研究结果
独立 C2 / 组合 C1 前者沿用已有 Host 边界;后者才提供逐次 provider 发送检查

表格是源码职责说明,执行证据另列。与完全不改相比,这个边界确实补上后继工作;比加入另一套研究调度或只交付 serializer 更合适。

具体改动

当前 head 已合入最新 main 82b1a8c72159dedcbca3a3b69fac2c7eaad3192d,相对该基线 为 27 文件、+876/-15。包括研究阶段 composer、本地进程探针、Explore 的可选执行附件及严格旧事件读取、context/stride/replan/history 消费者、原有前端详情、双语说明及原正反例。两张仓库图片仍是标明来源的历史 synthetic 证据;本轮当前打包界面另行执行,没有将旧图重新标成新 head 验收。

关键代码讲解

  • prepare_research_continuation:使用现有 Todo 依赖保留独立研究;已有工作不会被准备流程重开,准备写 surface_only,不支出工作 Turn。
  • run_probe:在进程执行前后固定明确文件清单,拥有本地进程组并保留退出/超时。可选诊断损坏时仍保存可靠宿主测量;候选变化则拒绝归因。文件清单摘要不冒充 native 归档摘要。
  • normalizeExploreExecutionObservation:共享 typed owner 校验方法变化原因、未知值和确切结果候选;Python transport、事件与前端读取没有另设一份判断源。
  • workResultUse:复用 MATERIAL_DELIVERY_OUTCOMES,让纯整理及未知历史分类继续可读,但不能消费实质工作结果;有效负结果和具体阻塞仍保留。

spec_ref:docs/reference/protocols/goal-vision-replan-contract-v0.md;spec_revision:82b1a8c72159dedcbca3a3b69fac2c7eaad3192d。使用改动前的不可变文本判断:criterion_id decision_followthrough.work_result_use 已实现真实后继与来源关系;Ownership Boundary 由原 Todo/Vision/Explore owner 保持;execution_and_goal_gain=unknown 仍保留,不把记录、采用或低耗时认证成研究收益。协议补文是需要论证的修改,没有反向作为自身正确的唯一依据。

最后一次旧 head 的阻断位于 RESEARCH_LOOP.md:独立树没有 C1 的逐请求 guard,原文却说当前每次发送都会检查。当前英文与中文均明确区分 standalone 和 C1-composed 入口,已与实际 runtime 调用及 C1/C3 frame 对照;其余生产行为没有因这项文档修复扩大。

对主干的风险

在 b642b6771ab579b9b97e3bb5f36a01b74ba655ac 独立执行的两项 Python 模块为 29 passed、0 failed/skipped,325.11 秒,包含原 File/SQLite 的候选完成→真实探针→Explore→重规划→新 Todo→实际改变程序。坏诊断、真实超时、失败退出、变化候选、错误迟到结果不追加及负结果继续可用均保留原断言。五个相关 TypeScript 模块 71 passed;本次再合入 main 的 8 文件只涉及已接受的分析引用焦点、界面验证与设计说明;上述 Python、typed owner 与测试输入的字节均未变,按此失效检查复用证据,不将旧执行改标为新执行。control-plane typecheck、正常 Dashboard/Chat build、Ruff、双语 RFC 与 diff 检查通过。

同一个当前 oracle 对不可变 main 的真实 typed replan owner 为 24 passed、1 个预期失败:纯整理错误地消费被引用结果;当前对应 25 个用例全部通过。planning renderer 在省略、0、false 三种关闭输入下与 main 逐字节一致,仅显式 1 增加研究指导。普通 Explore 的可选 metadata 说明属于已披露的通用附件扩展,不能把它说成所有 off 提示逐字节相同;它没有变成必填、结算义务或研究执行授权。

合入最新 main 前,打包 research-history 场景 70.333 秒 PASS,使用真实 production history HTTP owner,覆盖完整分页、有效负结果、未知资源、reload/back/forward、窄屏和失败读取恢复。我实际查看了 1280 与 390 宽执行详情,CJK 可读,资源与来源在原有详情中展开,没有新增常驻控制。显示输入为 public synthetic 事件;真实进程和后继实验由上述 Python 路径验证。它不等于已安装 App 或真实模型采用。合入最新 main 后,当前 35d2d0e801fb93fe08b83adc48d7dfee4ce9afc0 的 Dashboard/Chat 再构建通过,更新后的原 packaged research-history 完整场景再次 73.941 秒 PASS,包括 main 新增的引用焦点与错误恢复断言。整个任务没有新增必需的人类确认轮次。

语义与 CI 对齐

新增可选 explore_execution_observation_v0 是 Explore 的共享来源契约;material 分类复用现有 vocabulary。diff advisory 没发现其支持语法内的新 carrier,不能据此漏掉动态/schema 字面量;完整 semantic-vocabulary-drift-smoke.py 在 b642b6771ab579b9b97e3bb5f36a01b74ba655ac 实际通过;之后 main 没有改变任何受检控制面 owner,只新增已接受的前端焦点处理。这里保留实际执行版本,没有将其改标成新 head 的整树运行。通用核心没有加入 benchmark 专属结算义务,方法建议与机器检查的区别也保留。

此前 b642b6771ab579b9b97e3bb5f36a01b74ba655ac 标准 premerge 的 4 个直接检查、Python compile、19 个选检中的 18 个通过;唯一失败为完整语义扫描的原 120 秒 timeout,同阈值独立重跑仍 timeout。依赖一致的不可变 main 用相同命令也以 124 超时;当前未改脚本的完整扫描随后以 0 结束。没有提高预算或将 timed-out gate 写成 passed,benchmark_sensitive 人工 hold 也仍保留。

用户改为本批不等待 CI 前读取的远端 build 及三个 chat-bundle-browser shard 都在同一个旧静态断言 “Personal workspace prefers the registered Goal display name” 退出。我对不可变 main 4a6a43cccd34a9eadc2c6e465c26e60bf0df2e8e 和当时的 b642b6771ab579b9b97e3bb5f36a01b74ba655ac 执行同一 personal-workspace-contract.test.mjs,均失败于该断言;该测试及它读取的 workspace 页面两边 SHA-256 完全一致,本片只改已有 history 详情。判为主干既存、与本片因果路径无关,保留远端红色 gate;独立的当前功能、打包界面和错误恢复证据不依赖该断言。没有把其他待完成 CI 记成通过,也没有为了转绿修改无关测试。当前新 packet 按用户本批指示设置 wait_for_ci=false,不再获取、轮询或等待 CI;上述只是保留历史归因。

我的整体评价

APPROVE 代码审查结论,合并仍需满足远端检查、有效 review reconciliation 和代码所有者权限。 long_horizon 与 user_experience 在这片的边界内为 improved:证据确实走到后续真实工作,用户能在原界面看清未知、负结果与实际方法;研究效益和 C1/C3 全链没有被提前宣称完成。

体量与交付相称;未来改动可定位到已有 typed owner。此次做了有界重构判断:直接复用 material delivery 分类已消除重复知识,没有必要再引入框架或新 ledger。可选字段兼容旧事件,历史收据不重写。当前 head 已读回保持不变;作者自评的 COMMENTED 记录不等于 GitHub formal approval,更不自动清除另一 reviewer 的 REQUEST_CHANGES 或授予合并权。

English verdict: APPROVE 35d2d0e801fb93fe08b83adc48d7dfee4ce9afc0. The standalone C2 guarantee is now correctly conditional on C1 composition. Independent File/SQLite continuation, actual revised execution, 29 Python and 71 TypeScript cases, main/head counterfactuals, current builds and packaged history recovery support this bounded slice. Backend evidence is retained at its actual execution revision with unchanged-source checks after integrating latest main; fresh UI validation is recorded above. Preserve the separate CI/merge holds: the same unchanged workspace assertion fails on main, and the original semantic scan deadline times out on both trees although the unmodified complete head scan passes. No live-model, native-chain, installed-App or research-benefit qualification is claimed.

@songoow
songoow dismissed loopx-agent’s stale review October 20, 2026 11:34

Verified resolved at 35d2d0e: RESEARCH_LOOP.md now explicitly distinguishes standalone C2 from the C1-composed per-provider-send guard in both English and Chinese. The requested repair remains documentation-only and does not copy C1 implementation. Current source/readback, 29 Python cases, 71 TypeScript cases and packaged history/recovery were qualified in exact-head review #6901 (review) . Dismissing only this resolved scope statement; independent Code Owner approval, GitHub protection and merge authority remain separate.

@songoow
songoow merged commit 332aa0f into main Oct 20, 2026
20 of 40 checks passed
@songoow
songoow deleted the codex/split-research-execution-evidence branch October 20, 2026 11:37
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