Repository navigation
fix(explore): preserve current-task evidence order across planner links - #7053
Conversation
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: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
审查 7053@d80ae34299a2afc2d03327afbdb41c6b91276633,基线 bb6e78ee62129e256bc53093cc1c164f1b780825。结论:APPROVE,未发现本次引入的阻断问题。完整读取五个文件与既有调用链,并执行独立基线对照。标准预合并检查仍有两个既有 fixture 失败,另有四个同源测试失败,均在下文保留;批准审查不将这些红项改写为通过。
使用作者账号时以 COMMENTED 发布批准结论。
动机
正在继续一个已有研究任务的 Agent 或使用者,需要先读到这个任务关联的当前证据,再决定下一步工作。
当前任务同时关联“当前问题”和“共享问题”,另一个高优先级任务也关联共享问题时,旧实现会把较旧的共享证据放到当前任务的新证据前;本次让当前任务内部按来源顺序展示,并继续先保留反例。
相同原生 CLI 输入分别运行在真实 File、SQLite 权威存储:基线首项均为 observation-1,当前提交均为 observation-2;两次读取后的原始证据日志字节保持不变。
本次只完成既有任务证据排序修复,不改变任务选择、评分、执行权限或 Explore 的默认开关,也不声称已证明模型采用证据或长程收益。
这里的“来源顺序”是证据所有者交给只读视图的顺序;当前任务的真实关联来自已有 canonical Todo,不从标题、正文或优先级猜测。排序错误虽没有删除记录,却可能让只有一条预算的上下文反复先看到不适用的旧结论。扩大页面或手工按问题筛选能暂时找到结果,但让每个使用者重复排查不是必要操作。原来的 --todo-id 已包含所需意图,这次沿用即可,没有额外设置、确认或人工准备轮次。
规范 loopx/capabilities/explore/README.md#explore-harness-modes(不可变基线 bb6e78ee62129e256bc53093cc1c164f1b780825):Current task evidence、Unchanged authority and default-off、Complete bounded pages 三项原有要求均已映射到源码和独立验证。依据是不可变基线中 Explore 指南的 Ordinary Work Writeback、Explore Harness Modes 与已有当前任务/反例/分页约定,随后才评估本次新增说明。父级研究工作的真实采用与收益仍需原验收衡量,不能由页面读回替代。
改动思路
排序属于现有 TypeScript 只读投影;复用原排序函数并区分当前任务来源和外部回退即可,不需要新状态、第二套策略或新的前端操作。
当前 PR 完整交付现有 CLI 与下一轮上下文中的任务内排序修复;研究质量、真实 Agent 采用和完整成本仍由既有 Explore 验收负责。
旧路径先用独立 planner 的问题集合重排全部结果,再从这个中间结果提取当前任务的关联证据,所以共享问题继承了其他任务的优先级。新路径仍保留这份 planner 视图,当前任务部分改从原始 attachedResults 提取;只有当前任务之外的剩余项才接回原 planner 顺序。既有函数多一个默认回退参数,无任务范围的调用保持原行为。
| 范围 | 旧行为 | 本次行为 |
|---|---|---|
| 当前任务内部 | 共享问题可能获得其他 planner 的额外优先级 | 保留各关联问题的最新反例,再按来源顺序 |
| 当前任务之外 | 独立 planner 顺序 | 继续保留 |
| 无任务范围、仅证据、默认关闭 | 既有输出与权限边界 | 完整输出对照相同 |
测量摘要也需要同一修复:两个组都属于当前任务时,比较器返回零,保留测量所有者原顺序;只有当前任务之外才用 planner 关联作排序补充。它没有改测量值、比较域、候选资格或分数。这个机制属于投影,原有任务和执行决策仍由原所有者负责。进一步抽象独立排序框架或新增排名状态反而会扩大维护成本,当前局部复用已足够。
具体改动
完整范围为 +111/-4:生产 TypeScript +8/-4,两个既有测试文件新增 91 行,两份指南新增 12 行。没有新增模块、CLI 参数、协议字段或持久化数据。两份说明对应解释普通任务范围读取与按节点筛选的对照,不新增执行义务。
关键代码讲解
prioritizeLinkedResults接收结果、当前关联集合和可选外部回退。它先保留每个关联问题的一条最新refuted结果,然后输出其余关联项,最后拼接未关联回退项。原来的计数、证据内容、摘要、来源摘要与缺省回退都保留。这个分支确保负面结论不会被新的正面记录简单挤掉。projectExploreTurnContext保留plannerResults,但当前任务从原始附着结果读取。没有当前任务、或者没有当前关联时仍走原路径。入口继续要求精确且可用的开放 Todo;其他 Agent 的 claim、已结束任务或错误身份不会因排序修复得到访问/执行许可。真实调用来自 effect runtime 的explore.turn_contexthandler 与原 Python CLI/下一轮上下文读者。measurementFeedback比较器 首先区分是否属于当前任务;两个组都在范围内时不再用外部 planner 打破平局。实际稳定排序保留原组次序,组内最佳值、记录数、输入/评估身份和证据引用仍由既有测量投影生成。
正向路径是:已有任务与证据日志 → 原生 CLI/上下文读者 → canonical 任务检查 → 当前关联内部排序 → 绑定来源的结果页/下一页/审阅页。File、SQLite 的相同冻结用例在基线均精确失败于首项 observation-1 != observation-2,当前均通过,读取前后原始日志字节未变。
负向路径覆盖不存在、不同 id、他人已领取、结束任务,以及关联改变后的旧页重放。完整错误对象在两个版本一致;合法新页可以重新读取,旧 revision 继续拒绝,缺失任务范围的重放不泄漏旧选择。TS 同时覆盖有/无反例、首条与全页、重叠 planner、来源摘要和测量组,避免仅靠“当前问题与其他问题完全分离”的温和样例。
对主干的风险
本次主要风险是修复内部顺序时破坏反例、遗漏其他结果或扩大任务权力。独立冻结 harness 导入实际基线与当前 TypeScript 所有者,比较默认关闭、无范围、仅证据和按节点筛选四种完整输出;全部相等。另行验证当前范围的完整预期序列、测量组序列、原输入不变、selected_branches 与 authority boundary 相同、第二页与审阅页重放,以及关联变化使旧页失效。这不是只断言字段存在,也不是让两个新 provider 互相比对。
本地执行结果:25 项 TypeScript(12 上下文、13 测量)通过;Python 三模块 41 通过、4 失败;同一冻结真实 CLI 基线 2 项按预期失败、当前 2 项通过;当前控制平面 typecheck 通过。标准 premerge 的 5 个直接检查、7 个 catalog、8 个风险检查与 1 个公私边界检查通过,2 个 catalog 失败,0 个 manual hold。最初一次命令使用错误测试路径退出 4,保留为调用准备错误,随后使用真实路径执行,未把它计作产品失败或通过。
两个失败 canary 分别是 explore-configure-goal-smoke.py 的 KeyError: status_health_ok,以及 explore-worker-plan-gate-smoke.py 的子 CLI 失败。对不可变基线和当前头各自重跑原命令,完整 traceback 在仅替换 checkout/临时路径后相同;进一步捕获实际 quota/子进程 JSON,二者都先因 canonical_authority_required 失败。quota 仅归一化随机事件 id/时间,其他诊断完整相同。四个 request-scope 用例也在 fixture 初始化 canonical authority 前失败,两侧四份完整失败块一致。八个相关 fixture/读取/分页/测量所有者 blob 相同,因果路径不经过本次改变的排序;改变的排序另有独立真实 CLI 正向证明。因此归类为 pre_existing_unrelated,不伪称修复,也不降低原检查。它们的既有 fixture 恢复与 merge readiness 继续由原流程处理。
语义与 CI 对齐
按当前 wait_for_ci=false 契约未获取、轮询或等待远端 CI。上述失败是本地实测归因;当前预合并整体仍为失败,审查批准与合并就绪分别读回。没有安装共享运行时、发布版本或调用付费模型。
默认 off 的全部输出、缺省字段和无关任务输入都与基线一致。已有文档补充不自动开启 Explore,也没有自动加载新的 Agent 指令。状态分类依赖精确 id/集合与现有类型,没有子串或正文启发式;通用所有者没有嵌入具体研究领域。读取到证据不会生成 claim、执行、quota 或选择义务。现有 CLI/会话中的内部上下文能力修复无需新界面或新设置入口;未改变视觉布局,未借用截图宣称真实安装或长期采用。
我的整体评价
批准这个完整、可回滚的排序修复。 生产代码继续使用现有所有者,测试能在旧缺陷上精确失败、在当前头通过;回退顺序、负面证据、分页和权限边界有独立对照,增加的维护表面与问题成比例。没有需要本次再拆的空前置层,也没有必要为已完成的局部修复新增形式化后续任务。
排序属于现有 TypeScript 只读投影;复用原排序函数并区分当前任务来源和外部回退即可,不需要新状态、第二套策略或新的前端操作。
当前 PR 完整交付现有 CLI 与下一轮上下文中的任务内排序修复;研究质量、真实 Agent 采用和完整成本仍由既有 Explore 验收负责。
本结论只覆盖这个精确头。真实 Agent 是否据此改变工作、研究成果是否提高、完整成本是否下降均未验证;这些仍属于既有 Explore 验收,不能从图关联、读回记录或测试数推断。保留上述既有红项与其恢复责任,当前批准不授予合并权限,也不撤销其他头的审查。
English verdict: APPROVE at d80ae34299a2afc2d03327afbdb41c6b91276633. The existing task-scoped read projection now preserves own-source evidence and measurement order while retaining scoped counterexamples and external planner fallback. Same frozen real File/SQLite CLI tests fail at the intended ordering assertion on the immutable base and pass on this head; full off/unscoped/evidence-only output and authority parity are independently verified. Four fixture tests and two premerge canaries remain red with identical baseline diagnostics and unchanged causal owners; they are unrelated existing canonical-authority setup failures, not relabeled passes. Agent adoption and long-horizon benefit remain unmeasured. This COMMENTED approval grants no merge authority.
When an explicitly bound task shares a question with an independently planned task, the planner's ordering can put older shared findings ahead of newer evidence for the current task. A bounded default page can therefore omit the most recent relevant result even though its canonical task link exists.
This change orders the focused subset from source recency, retaining the existing reserved counterexample rule, and applies planner ordering only outside that subset. Measurement groups follow the same boundary. Unscoped and feature-off behavior, planner selection, evidence contents, admission and persisted graph state remain unchanged. Existing pagination and review-page replay use the same typed projection.
The implementation extends the existing Explore helper; it adds no vocabulary, provider, configuration or new capability. The existing CLI/quota/managed-turn evidence reader is the affected entrypoint. No dashboard layout or independent frontend journey is added. Both capability guides now distinguish successful filtered lookup from evidence actually reaching and informing the next agent.
Validation on the proposed head:
explore-configure-goal-smoke.pyraisesKeyError: status_health_ok;explore-worker-plan-gate-smoke.pyfails its worker-branch-plan CLI call. Both reproduce without this implementation change. Five direct checks and the other 16 selected checks pass. These failures remain validation holds, not passing skips.This qualifies the reader-order repair and preservation properties. Actual agent adoption and better outcomes under comparable complete budgets remain separate acceptance work; the PR does not claim either or authorize experiments/merge.