Skip to content

fix(explore): retain every selectable outcome on expanded result pages - #6982

Merged
loopx-agent merged 2 commits into
mainfrom
codex/explore-wide-page-selection-20261021
Oct 21, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/explore-wide-page-selection-20261021

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

An expanded Explore page could display up to twenty linked findings while each comparison card retained only three. An Agent could read a fourth result, then have ordinary source-replayed writeback reject its selection. This change keeps every linked outcome on the requested page and reuses its existing twenty-result limit in projection and validation.

Default three-result reads, the separate number-of-cards bound, considered-reference/page limits, exact source checks and execution authority remain unchanged. Intended base: main. Quantitative findings reuse the measurement owner shipped in #7011.

Author Declaration

  • Written by: model_agent — OpenAI GPT-6.1 Sol (current refinement); DCO sign-offs retained.

Implemented against

Specification: Explore contract and source-bound selection, revision d5665210e24ddb7c2836a20579e7c684b5339fc6.

Criterion Disposition Existing symbol / path Validation
Explore Harness Modes: default three, explicit pages 1–20 implemented projectExploreTurnContext, normalizeExploreResultPages Same 3/4/20 tests fail on base and pass head; four full default/off/unlinked comparisons
Source-bound comparison selection: current source and retained Todo implemented strideReviewMismatch, ordinary page replay Real File/SQLite wrong-source no-effect, corrected writeback and independent readback
Role Boundaries: evidence/planning does not execute or certify value implemented Existing harness and stride owners Unrelated-work adoption remains refused; no scoring, claim, lease or quota change

The existing result-page and stride decoders share EXPLORE_RESULT_PAGE_MAX. Cards retain all outcomes only after the existing actionable Todo, ownership and node-link filters. Their digest still covers the full finding, including measurements. Bilingual capability docs and the formal source-bound protocol now distinguish the default three from explicit expansion.

Scope And Continuation

Complete within the reproduced result-page-to-selection defect. This is independently reversible and introduces no scorer, ledger, command, configuration or state schema. A selection remains evidence-bound planning intent.

Historical producer metric bindings, actual model adoption, native research value and complete costs remain with the existing research work. This PR launches no model, solver or native benchmark job and does not claim installed acceptance or close that work.

Validation

  • Tested revision: b228bdd08a42053f22fb70aaa3b51f984aa849bc; base d5665210e24ddb7c2836a20579e7c684b5339fc6.
  • Run state: finished.
  • Input classes: synthetic, public_fixture.
Check kind Result Evidence / limitation
unit passed 67 current TypeScript context/measurement/writeback/stride checks
static passed Full control-plane typecheck, Ruff, semantic advisory, RFC bilingual and diff hygiene
real_entrypoint / real_backend passed Four current CLI cases on isolated real File/SQLite: omitted quantified result selected, wrong source rejected without history append, corrected same-Turn writeback and separate metric readback; unrelated work cannot prove the chosen work executed
integration passed Earlier 135-test Python suite on byte-identical production modules; reuse audited all three production modules and unchanged fixtures, and both changed test files were rerun at this head
regression_parity passed Same final tests fail on immutable base: 4/20 pages lose later choices; both real backends show five results but only three selectable outcomes. Current head passes
regression_parity passed Four complete default/disabled/unlinked projections equal base with no normalization
integration passed Standard native premerge: five direct and nineteen selected checks, no failures/warnings; exact quality receipt cqr_e576eae841c992886a63
static passed Eight changed public files and publication text scanned; no private/raw evidence published

An initial alternate integration fixture depended on second-resolution timestamps and had one ordering failure. The final fixture selects an actually omitted quantified result without relying on timestamp ordering; the changed tests were independently rerun. These checks qualify synthetic fixtures and real local owners. Installed use, live model choice and scientific benefit remain unqualified. Remote CI was not fetched or polled.

Frontend / Visual Evidence

UI impact: none. No component, layout, asset, screen or navigation changes. Before/after viewport capture and preview are N/A. The changed Agent context/readback path is exercised with its real owning backend; no installed visual acceptance is claimed.

Type of Change

  • Bug fix
  • Documentation update
  • Test update

LoopX Area

  • Control plane
  • Capability or extension
  • Public docs

Shared-authority RFC fixture impact

N/A: no authority-store, provider promotion, runtime routing or shared-state migration is changed. Real File/SQLite callers are covered above; PostgreSQL authority code is unchanged.

Boundary Checklist

  • Public-safe code, synthetic fixtures and aggregate results only; no private state, raw traces, credentials, internal URLs or local paths.
  • Existing Explore owners and related PR reused; no duplicate research implementation.
  • Scoped to the demonstrated consumer failure.
  • No RFC pair changed; bilingual diff check passed.
  • UI impact is none.
  • Every commit retains a DCO sign-off.

@mergify

mergify Bot commented Oct 21, 2026

Copy link
Copy Markdown

This pull request has merge conflicts with main and cannot be merged
until they are resolved. Please rebase or merge the base branch, @loopx-agent.

Choose the remote for the base repository, not an out-of-date fork.
For a fork clone, first inspect git remote -v; upstream must point
to https://github.com/loopx-project/loopx.git. If it is absent, add it
with git remote add upstream https://github.com/loopx-project/loopx.git.
Then run:

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 HEAD

For a same-repository clone whose origin points to
https://github.com/loopx-project/loopx.git, use origin instead of
upstream for fetch/rebase. If you prefer merging the base, use
git merge <base-remote>/main and push normally.

Keep the DCO Signed-off-by trailer on every commit when you rebase.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@mergify mergify Bot added the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 21, 2026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent
loopx-agent force-pushed the codex/explore-wide-page-selection-20261021 branch from 3c10a78 to f4e2337 Compare October 21, 2026 19:49
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 21, 2026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent 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.1-sol · max · runtime_reported

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

动机

需要比较多条研究结果、再选择下一步工作的 Explore Agent。启用 Explore 的 Agent 扩大结果页后,能读到第四条以后的结论,却无法把它们绑定为下一步工作的依据;修复后,该页所有明确关联的结果都可按原有规则选择。真实 File/SQLite CLI 已读出五条结果、拒绝错误来源且不写入,再成功保存默认视图之外的量化结果选择,并在独立读回中保留原指标。本 PR 不自动排名、不启用能力、不发起模型或实验,不把选择声明当成实际执行、科学收益或安装验收。真实研究运行中指标是否被采用、是否改变后续候选及带来实际价值,仍需原执行端和独立验收证据。

本次按完整 PR 与当前 head b228bdd08a42053f22fb70aaa3b51f984aa849bc 评审。契约依据为 loopx/capabilities/explore/README.md,不可变修订 d5665210e24ddb7c2836a20579e7c684b5339fc6,对应 Explore Harness Modes、Source-bound comparison selection 与 Role Boundaries。同时核对 docs/reference/protocols/goal-vision-replan-contract-v0.md 的同修订来源选择契约。原协议中“每张卡片最多三条”的文字也在本次同步改为默认三条、显式扩页最多二十条,避免说明和已支持的页坐标相互冲突。这不是研究评分或权限预算的放宽。

改动思路

保留现有 Explore 证据、结果页与普通写回,只删除卡片上的第二次三条截断,并把校验端的独立上限改成同一个已有结果页上限。只改投影会留下解码拒绝;另造评分器、选择命令或同步状态则会增加新的真相来源,均不能作为更小的等价方案。当前 PR 的边界是把已读出的合法证据传到现有下一步声明,尚未覆盖真实研究运行的收益验证。

路径 修改前 当前 head
默认读取 三条 完整输出逐字节相同
显式扩大结果页 最多二十条可读,每张卡片仅三条可选 该页全部明确关联的结论可选
证据模式、全部关闭或无 Todo 关联 无新增选择权 完整输出逐字节相同
错误来源摘要 拒绝 仍拒绝,主记录无写入

这张表是源码与执行证据的归纳,不是额外的运行状态。当前页投影和严格来源校验共用一个既有上限即可解决断点。当前 PR 边界是:已有结果页到普通规划声明及独立读回,不认证后续实验执行或收益。保留的机制只有既有 TS 页投影和来源校验;缺失关联继续表示未知。卡片数量、每次考虑的引用数量与最多三页重放没有一起扩大,读到更多结果也不自动认领或执行工作。

具体改动

关键代码讲解

  • projectExploreTurnContext 内的 comparisonCandidates(loopx/control_plane/capabilities/explore_turn_context.ts:128)先检查真实 Todo 的可执行状态、负责人及明确节点关联,再保留当前页全部关联结论。摘要仍覆盖完整 finding,包括量化指标,不能拿已变化的分数内容复用旧摘要。
  • comparisonCandidates(loopx/control_plane/work_items/stride_policy.ts:105)复用 EXPLORE_RESULT_PAGE_MAX 校验一至二十条结果,保留字段、身份及摘要验证。normalizeExploreResultPages(loopx/control_plane/capabilities/explore_result_page.ts:9)的坐标范围本身没有改变。
  • strideReviewMismatch(loopx/control_plane/work_items/stride_policy.ts:307)继续验证当前源页、确切内容与同一 Todo 的 retain 声明。它不因卡片变长而放松来源或后续执行核验;其他 Todo 的活动仍不能充当所选工作的采用证据。

验收映射:Explore Harness Modes 的默认与显式页大小已实现;Source-bound comparison selection 的当前页重放、来源摘要与保留原 Todo 已实现;Role Boundaries 的只读规划及执行/收益独立边界保持。并行更新的中文说明和量化回归全部保留,仅补正正式协议中的旧上限陈述。

验证包括当前 head 的 67 项 TypeScript 检查、完整 control-plane typecheck、4 项真实 File/SQLite CLI 检查。较早独立集成版本的 135 项 Python 回归也通过;复用前逐字节确认三个生产模块与相关未变 fixture,当前两个改动测试文件已重跑。最终同一回归在不可变主干重现 4/20 条页与两种后端的失败,随后在当前代码通过;四组完整默认、关闭或无关联投影无任何归一化即相等。

对主干的风险

最强反例是同一个 Todo 有第四条及以后有用结论:只有三条或多个 Todo 各一条的旧测试可能通过,实际选择却被丢掉。新增 TS 和真实 CLI 用例覆盖了这个边界,并验证错误摘要拒绝且不追加主记录,纠正后可在原轮写回并独立读回,量化反馈不被选择动作改写。对后续复盘则保留了“B 工作不能证明 A 执行”的真实后端用例。

原本扩大的本地组合用例曾依赖秒级记录时间,出现一次测试顺序不稳定;该观察已保留,当前采用远端不依赖时间并列的量化用例,且已独立重跑通过。生产模块未因这次 fixture 整理改变。标准原生 premerge 的直接检查、选中 canary、公开边界和精确范围质量回执均通过;没有获取、轮询或等待远端 CI。

语义与 CI 对齐

复用已有二十条页上限与现有 source-bound selection 语义,没有增加状态词汇、评分规则或兼容分支。关闭能力时的完整诊断、指导、字段、状态及副作用边界与基线相同。量化比较仍不能证明来源声明为真,也不能把历史最佳、当前保留与最后有效结果混为一谈。本次没有修改 UI,因此没有新的首屏截图;安装采用、真实模型选择、实际研究价值与完整成本仍未验证。

我的整体评价

未发现阻塞问题,结论 APPROVE。长程工作的增量是修复结果读入到合法下一步声明之间的断点;用户流程保持,既有授权下不增加准备、复制或确认轮次。共用上限与删除重复截断是已应用的局部简化,新增选择器或评分框架没有必要。这个可独立回滚的修复不关闭真实研究采用与收益的后续验收。合并仍需此准确 head 的发布评审、原生 ready 读回及已有维护者授权,检查通过自身不授予合并权。

English verdict: APPROVE — b228bdd08a42053f22fb70aaa3b51f984aa849bc preserves every linked outcome on an explicitly expanded page through existing exact-source selection. Current TS, full typecheck, real File/SQLite CLI, base/head counterfactuals and native premerge pass. Default/off output is identical. Installed adoption, live model decisions and research benefit remain unqualified.

@loopx-agent
loopx-agent merged commit f182500 into main Oct 21, 2026
24 of 30 checks passed
@loopx-agent
loopx-agent deleted the codex/explore-wide-page-selection-20261021 branch October 21, 2026 20:11
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.

1 participant