Repository navigation
feat(research): retain execution evidence through Explore replans - #6901
Conversation
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>
360c6ef to
bea1519
Compare
1b243b9 to
e907547
Compare
songoow
left a comment
There was a problem hiding this comment.
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.
loopx-agent
left a comment
There was a problem hiding this comment.
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.
…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
left a comment
There was a problem hiding this comment.
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.
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.
当前修复与验证(2026-10-20)
本 PR 保留独立 C2 的阶段接续、本地执行证据、Explore/replan 与研究历程,共 27 个文件;已合入最新 main
82b1a8c72159dedcbca3a3b69fac2c7eaad3192d,当前 head 为35d2d0e801fb93fe08b83adc48d7dfee4ce9afc0。已修复当前 REQUEST_CHANGES:
RESEARCH_LOOP.md英文和中文均明确,独立 C2 沿用原有 Host 准入,逐次 provider 发送检查只属于组合 C1 的入口;没有复制 C1 或宣称 C3/native 反馈资格。b642b6771ab579b9b97e3bb5f36a01b74ba655ac。真实路径贯穿候选完成、实际 probe、Explore、当前决策、新 Todo 和改变后的实际程序。按用户本批指示,当前 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
eac81014fd3a8842ddd420d7908657af107c6787;研究运行合同 的初始候选/研究后继与本地 probe 条款;Goal Vision 的 Structured stride control;研究 RFC §6.2、§6.3。research_loop.py::prepare_research_continuationtest_candidate_stage_leaves_research_work_and_execution_reaches_next_context[sqlite]本轮 1 passed(338.81 秒);File 参数保留未补跑。research_probe.py::run_probe;explore/execution_observation.pyexplore_result_writeback.ts、explore_turn_context.ts、replan_context.ts、stride_policy.ts变更与结果
research_loop=True使用既有 Todo 依赖保留研究后继;候选完成释放后继,准备阶段记录surface_only,已有研究不会被重新打开。evidence_conditioned_v1策略,安装本地loopx-research-probe。关闭处理时保留原入口行为。execution_observation,包括候选绑定、实际方法与变更理由。依赖与源码身份
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。验证与边界
8f852d440aae2875e916463236c79fa5ee984aff,与本片的相关 TS/Node 测试输入相同。test_candidate_stage_leaves_research_work_and_execution_reaches_next_context[sqlite],C2 commit17b7c4d6e1315482212a0c34e1c350ca3bce2be9/ 上述来源 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。源码、断言与期限未改。本轮 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)
1b243b9ac1aa056fc43d576bcb0758de8a924370;tree:c7817a52772708aa4312231de88e401fcac6fabd。当前 base 为codex/split-native-request-admission。按原小 PR 路线,前置进入 main 后再将本片改向 main,并核对本片差异、检查和审批。fe3b1f7b382e,tree6bbf110b1cb2535975b2389558a86dff73792926。它保留原d1dc8ebfe7ff0ce888c8e7a6b7a5051413f29af2与最新 C37368ca0286d503a93e50b26ab24755a5fb429b2f两侧祖先;真实 Git merge-tree 与 GitHub tree 一致、零冲突,仅增 A3 的两文件 Markdown 诊断修复。45d742088a3f7896a0a008761f68d2437398bcd1。本轮观察的 maine4190c30d7f94886dddd8e06b899664df34120f9已另有变化,进入主干前须另行更新与验证。原d1dc8的 supplied-candidatein_sync收据保留历史绑定;后续正式 owner 收据见总进度,不将旧收据改标为新 main 的资格。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 输入,截图保留真实拍摄版本。