Skip to content

test(workspace): open every closed work disclosure in goal-workspace-m2 - #7554

Merged
loopx-agent merged 1 commit into
loopx-project:mainfrom
LIHUA919:codex/goal-workspace-m2-expand-20261028
Oct 28, 2026
Merged

loopx-agent merged 1 commit into
loopx-project:mainfrom
LIHUA919:codex/goal-workspace-m2-expand-20261028

Conversation

@LIHUA919

@LIHUA919 LIHUA919 commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Goal And Delivered Outcome

Author Declaration

  • Written by: model_agent (Claude Opus, Anthropic), at the account owner's direction.

Implemented against

  • Specification and revision: the scenario's own assertions ("All work remains reachable in the original owner order", "Full 200-item expansion exceeded 2s budget"), unchanged.
  • Criteria:
Criterion (spec clause) Disposition Symbol / path Test or command
Every owner's remaining work is opened by keyboard, independent of group positions implemented examples/personal-workspace-browser/goal-workspace-m2.mjs LOOPX_PERSONAL_WORKSPACE_SCENARIO=goal-workspace-m2
Assertions and budget unchanged preserved same file same
  • Self-check before submission: derived the two-closed-groups reading from the fixture's owner split and the hosted count. I didn't confirm the reorder in a local trace, because the hosted failure has not reproduced locally. The new loop handles both a reorder and a late-mounted closed disclosure.

Scope And Continuation

  • Completed scope: test only. No product code changed.
  • Separate from fix(workspace): let Back restore its source over an in-flight re-scope #7550 (a product fix for the goal-hierarchy source restore), whose dashboard-browser (2) run hit this failure.
  • Rebased onto the latest main. The conflict with main’s owner-id-bound loop is resolved by retaining the still-closed disclosure locator, which covers both owner reordering and late-mounted disclosures without toggling an open group shut.

Validation

  • Tested revision: 4a00f4b52 (on main ffc90182b).
  • Run state: finished (local); hosted CI pending on the rebased head.
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
real_entrypoint passed Final exact head: 2/2 development and 2/2 installed-wheel packaged; the immediately preceding rebase also passed 3/3 development and 3/3 packaged. Every run reached 200 items with expansion still below 2s.
regression_parity untested The hosted 126 !== 200 failure does not reproduce locally, so there is no local negative control.
real_entrypoint pending Hosted checks are queued for the rebased head; earlier browser jobs passed on the prior head, while unrelated long-running test shards were red.
  • Coverage and gaps: hosted Linux timing is only covered by CI, and the failure is intermittent, so one green run is weak evidence. Repeated green shard-2 runs are the real signal.

Frontend / Visual Evidence

  • UI impact: none (test only).

Type of Change

  • Test update

LoopX Area

  • Build, packaging, installer, or CI

Technical Direction

  • Direction / acceptance reference, when applicable: required dashboard-browser lane.

Shared-authority RFC fixture impact

N/A

Boundary Checklist

  • Neither the diff nor this PR body/comments/attachments disclose private state, credentials, raw traces or verifier output, internal links, or local machine paths.
  • I did not duplicate maintainer-owned benchmark work.
  • I kept the change scoped to the linked issue/task.
  • No paired RFC changed.
  • UI impact none.
  • Every commit includes a DCO Signed-off-by trailer.

🤖 Generated with Claude Code

@LIHUA919

Copy link
Copy Markdown
Contributor Author

All six browser jobs passed on this head (dashboard-browser (1/2/3), chat-bundle-browser (1/2/3)). checks is red only because typescript-core (3/3) failed at tests/control_plane_ts/effect_runtime_io.test.ts:32 ("Windows persistent replacement denial keeps its error"). This PR changes only examples/personal-workspace-browser/goal-workspace-m2.mjs and doesn't touch that test or its code. The same shard passed on main at 322591fb9. I can't rerun jobs here, so could a maintainer rerun typescript-core (3/3)?

@mergify

mergify Bot commented Oct 28, 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, @LIHUA919.

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 28, 2026
loopx-agent
loopx-agent previously approved these changes Oct 28, 2026

@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 · OpenAI · runtime_reported · reasoning_effort=max

动机

维护者运行工作台浏览器验收时,需要区分产品不可达与测试自己误关分组。 在真实页面第一次展开后控制一次负责人组重排,旧循环只留下126项可见;新循环达到200项,并继续满足原两秒展开限制。
同一产品包和一次重排条件下,原脚本126/200失败、新脚本完整通过;真实无法展开的情况仍会失败。 本 PR 只修已有验收驱动,不改变产品排序、权限或性能预算,也不认证所有历史CI失败的原因。

不稳定的驱动会制造错误红项、重复重跑,并削弱对真实200项可达性回归的判断。 原测试有真实维护价值:它保护200项工作展开可达及性能。此次是否值得接受,取决于驱动修正后仍能发现产品回归;不能只看新脚本一次通过。

改动思路

只修改原M2的操作驱动:每轮从当前DOM查找仍关闭的details,用原键盘Enter打开,直到原200项oracle成立。原两秒预算仍从第一次操作前计时,5秒只限制错误情况下的重试,不能让2秒至5秒之间的结果通过。

依据 docs/development/good-smokes.md,固定修订 843be494266774b63b3de61d0adf5dd7f4f877a2,使用其中未编号的两条原文,评审引用标签为 SMOKE-DURABLE(已交付路径的稳定不变量)和 SMOKE-ORACLE(独立规则定义期望结果)。两个标签仅用于本次引用。改动复用既有场景、fixture和catalog,没有新增一份同形验收。

具体改动

完整diff仅 examples/personal-workspace-browser/goal-workspace-m2.mjs,+8/-3。第151–164行以closed locator和可见数替换旧positional列表,保留200项、初始15项、展开2秒与后续任务选择/视图/只读断言。原RemainingWork仍使用native details,负责人key及选中任务自动打开逻辑未改,产品行为没有被此PR修改。

独立验证使用同一个新编译产品包,分别加载不可变base与exact head的原M2脚本:

  • PASS:head原packaged完整场景11.93s;base原驱动普通场景11.47s也通过。这说明一次普通绿测无法解释历史间歇失败。
  • PASS(回归敏感性):只在第一次native disclosure toggle后,把已打开的负责人组移动一次位置。旧脚本重按位置并关闭已打开组,实际 126/200 失败;新脚本完整场景10.79s通过,且原展开 <2秒 断言仍成立。控制只改变测试DOM的顺序,未改产品或断言,不能据此声称这是所有历史CI失败的唯一成因。
  • PASS(防止假绿):在同一实际页面禁止summary Enter的默认展开动作,新head仍在原断言得到 15/200 FAIL;预期的负例确认循环退出没有被误当作成功。
  • PASS:node --check、public/private扫描、standard premerge 4直接+3选中,零失败/跳过/人工hold;strict CQR cqr_9e52aef14800bc381420 当前有效。编译包来自本次源码。未启动模型或真实任务执行。

已有覆盖审查:M2从主catalog和现行browser分片执行,包含200项、长中英文任务、地图/看板/恢复与remote readonly;goal-work-map、selection和hierarchy保护其他独立语义。此次没有重复它们。同作者本批#7550是生产来源恢复修复,本PR是现有M2驱动维护;当前完整队列/实际diff未见同形批量造smoke证据,也无可据此建议限制贡献的重犯事实。最高价值的精简就是保留在这一处,不增加wrapper或新测试平台。

对主干的风险

重点防止重试掩盖真实不可达或放松性能。实际拒绝展开的反例仍失败;200项与2秒预算均原样,deadline之后仍先断言200再验证耗时,没有吞异常或无限等待。测试fixture仍是合成状态/delivery响应,实际编译页面和native键盘/DOM是真实的;这不认证真实后端状态或原历史CI完整因果。

作者评论中的CI/Windows说明及冲突机器人评论已读,未查询、等待或重跑远端CI。本结论绑定此head;与当前main的冲突/集成须由作者维护,并在新head重新验证,不以本评审替代merge-readiness。

我的整体评价

APPROVE。改动直接修复已有有价值验收的驱动,独立控制重现旧126并让新200通过,而且真正不能展开仍会报错;属于可审阅、可回退的维护结果。没有要求把旧自然间歇失败的未知历史原因写成已确定,也没有把5秒deadline当性能预算放宽。

视觉审阅不适用:完整diff只改测试驱动,没有DOM/CSS、可见文案或页面构图变化;不宣称视觉改善。正式安装App、独立用户理解和全站视觉质量未验,合成API与测试层重排控制也不替代实际生产采用。维护者仍从原入口运行,无新增准备、确认或配置轮次;合并资格与冲突处理另行保留。

English verdict: APPROVE — head 026d26d; the unchanged 200-item/two-second oracle distinguishes the old positional retoggle from the corrected driver on the same compiled UI, and deliberately blocked expansion still fails. Local validation passes; historical CI causality and current-main integration are not certified.

The 200-item expansion toggled each "其余 N 项任务" summary from a
positional list taken before the first toggle. Hosted dashboard-browser
shard 2 still stops at "All work remains reachable" with 126 of 200
visible, even after polling for five seconds: exactly two of the five
37-item disclosures stay closed. A positional list that re-resolves
while owner groups re-render can toggle an open disclosure shut and skip
another.

Open, by keyboard, whichever disclosure is still closed until all work
is visible, inside the same budget. The assertions and the 2s budget
are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Lihua <1017343802@qq.com>
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 28, 2026
@loopx-agent
loopx-agent force-pushed the codex/goal-workspace-m2-expand-20261028 branch from 4630c86 to 4a00f4b Compare October 28, 2026 14:44

@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-5 | OpenAI | self_reported

动机

维护者和 CI runners 执行现有的 goal-workspace-m2 浏览器验收,以证明全部 200 个合成任务仍然可达。旧驱动在切换前缓存了 summary locator;owner 分组重渲染后,后续 positional locator 可能关闭一个已打开分组,同时跳过另一个分组。

Maintainers and CI runners executing the existing goal-workspace-m2 browser acceptance.

The scenario captured summary locators before toggling. A re-render could make a later nth locator target the wrong group, leaving exactly two of five 37-item groups closed and producing 126/200.

Before, the scenario toggled a precomputed positional list and intermittently stopped at 126 visible items. Now each loop iteration focuses a currently closed disclosure and presses Enter until the unchanged 200-item oracle succeeds.

At the final head, two development and three installed-wheel packaged runs observed nodeCount 200, with expansion times between 85ms and 115ms under the unchanged 2s budget.

This is test-only maintenance; it does not change product behavior, permissions, benchmark scoring or installed native WebView behavior.

改动思路

复用现有场景、200 项合成状态、原生 details 控件和断言。只替换不稳定的 positional 展开循环:每次从当前 DOM 选择 .goal-work-more:not([open]) > summary,聚焦第一个仍关闭的 disclosure 并按键展开,直到原断言看到 200 项。这样同时覆盖 owner 重排和延迟挂载,不新增第二套 smoke,也不放宽两秒性能预算。

浏览器场景仍是权威的可执行验收。fixture 提供五个 owner 分组和 200 项;Playwright 执行真实键盘与 DOM 交互;既有 visibleWork 计数和渲染耗时保持独立 oracle。真实展开失败仍会到达原断言,而不会被重试改写成通过。

具体改动

精确 diff 为一个测试文件,+8/-9。它移除预先取得 positional summary 的循环,新增一个有界循环,持续聚焦第一个仍关闭的 disclosure,直到 200 项可见或既有重试截止时间到达。

Spec basis: docs/development/good-smokes.md#review-checklist at revision ffc90182bc2a896aa9980cf24dcf23a0e3276e3d; durable-smoke-boundary implemented and independent-oracle implemented.

关键代码讲解

  • goal-workspace-m2.mjs 每一轮都从当前 DOM 得出 closedWork,owner 分组位置变化不会让后续操作命中已失效的分组。
  • 循环保留原 visibleWork() === 200、两秒展开预算,以及后续任务选择、看板、readonly 和顺序断言。
  • rebase 与 main 的 owner-id 快照循环冲突时,选择当前仍关闭 disclosure 的 selector;一条规则同时覆盖 owner 重排和延迟挂载。

对主干的风险

目前没有阻断性发现。最强回归风险是真实无法展开时被重试掩盖;但有界循环结束后仍执行原 200 项断言,独立反例在禁止展开时保持 15/200 FAIL。旧 positional 驱动在受控 owner 重排后复现 126/200,修复后的驱动达到 200。

最终 head 通过 2/2 开发页面和 3/3 安装 wheel 后的 packaged 运行,每次 nodeCount 都是 200,展开耗时 85–115ms。前一个 rebase head 也通过 3/3 开发页面和 3/3 packaged。node --check、diff hygiene 和 premerge 均通过,包含 4 个 direct checks、2 个 catalog canaries 和 public-boundary scan,没有 manual hold。托管 Linux 时序和无关的长跑 CI shard 保持为独立观察项。

我的整体评价

APPROVE. This is a necessary, minimal repair to an existing valuable browser regression. It preserves the product oracle and performance budget, handles the observed owner-group re-render mode, and does not add duplicate smoke scaffolding. Product behavior is preserved; visual review is not applicable because no DOM, CSS, copy or navigation code changed. Hosted timing and unrelated CI failures are not claimed as resolved.

long_horizon behavior is preserved, while user-facing product experience is unaffected because the scope is test-only. The CQR receipt cqr_e3761af6a6d89f0ece69 is valid; exact-head merge readiness remains a separate gate.

English verdict: APPROVE - 4a00f4b5226155e25768fcfee1d69c9dd95906af makes the existing 200-item goal-workspace expansion reachable after owner-group reordering while preserving the unchanged two-second oracle. Final-head development and installed-wheel runs pass, and genuine expansion failure remains observable.

@huangruiteng huangruiteng 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-5 | OpenAI | self_reported

动机

维护者和 CI runners 执行现有的 goal-workspace-m2 浏览器验收,以证明全部 200 个合成任务仍然可达。旧驱动在切换前缓存了 summary locator;owner 分组重渲染后,后续 positional locator 可能关闭一个已打开分组,同时跳过另一个分组。

Maintainers and CI runners executing the existing goal-workspace-m2 browser acceptance.

The scenario captured summary locators before toggling. A re-render could make a later nth locator target the wrong group, leaving exactly two of five 37-item groups closed and producing 126/200.

Before, the scenario toggled a precomputed positional list and intermittently stopped at 126 visible items. Now each loop iteration focuses a currently closed disclosure and presses Enter until the unchanged 200-item oracle succeeds.

At the final head, two development and three installed-wheel packaged runs observed nodeCount 200, with expansion times between 85ms and 115ms under the unchanged 2s budget.

This is test-only maintenance; it does not change product behavior, permissions, benchmark scoring or installed native WebView behavior.

改动思路

复用现有场景、200 项合成状态、原生 details 控件和断言。只替换不稳定的 positional 展开循环:每次从当前 DOM 选择 .goal-work-more:not([open]) > summary,聚焦第一个仍关闭的 disclosure 并按键展开,直到原断言看到 200 项。这样同时覆盖 owner 重排和延迟挂载,不新增第二套 smoke,也不放宽两秒性能预算。

浏览器场景仍是权威的可执行验收。fixture 提供五个 owner 分组和 200 项;Playwright 执行真实键盘与 DOM 交互;既有 visibleWork 计数和渲染耗时保持独立 oracle。真实展开失败仍会到达原断言,而不会被重试改写成通过。

具体改动

精确 diff 为一个测试文件,+8/-9。它移除预先取得 positional summary 的循环,新增一个有界循环,持续聚焦第一个仍关闭的 disclosure,直到 200 项可见或既有重试截止时间到达。

Spec basis: docs/development/good-smokes.md#review-checklist at revision ffc90182bc2a896aa9980cf24dcf23a0e3276e3d; durable-smoke-boundary implemented and independent-oracle implemented.

关键代码讲解

  • goal-workspace-m2.mjs 每一轮都从当前 DOM 得出 closedWork,owner 分组位置变化不会让后续操作命中已失效的分组。
  • 循环保留原 visibleWork() === 200、两秒展开预算,以及后续任务选择、看板、readonly 和顺序断言。
  • rebase 与 main 的 owner-id 快照循环冲突时,选择当前仍关闭 disclosure 的 selector;一条规则同时覆盖 owner 重排和延迟挂载。

对主干的风险

目前没有阻断性发现。最强回归风险是真实无法展开时被重试掩盖;但有界循环结束后仍执行原 200 项断言,独立反例在禁止展开时保持 15/200 FAIL。旧 positional 驱动在受控 owner 重排后复现 126/200,修复后的驱动达到 200。

最终 head 通过 2/2 开发页面和 3/3 安装 wheel 后的 packaged 运行,每次 nodeCount 都是 200,展开耗时 85–115ms。前一个 rebase head 也通过 3/3 开发页面和 3/3 packaged。node --check、diff hygiene 和 premerge 均通过,包含 4 个 direct checks、2 个 catalog canaries 和 public-boundary scan,没有 manual hold。托管 Linux 时序和无关的长跑 CI shard 保持为独立观察项。

我的整体评价

APPROVE. This is a necessary, minimal repair to an existing valuable browser regression. It preserves the product oracle and performance budget, handles the observed owner-group re-render mode, and does not add duplicate smoke scaffolding. Product behavior is preserved; visual review is not applicable because no DOM, CSS, copy or navigation code changed. Hosted timing and unrelated CI failures are not claimed as resolved.

long_horizon behavior is preserved, while user-facing product experience is unaffected because the scope is test-only. The CQR receipt cqr_e3761af6a6d89f0ece69 is valid; exact-head merge readiness remains a separate gate.

English verdict: APPROVE - 4a00f4b5226155e25768fcfee1d69c9dd95906af makes the existing 200-item goal-workspace expansion reachable after owner-group reordering while preserving the unchanged two-second oracle. Final-head development and installed-wheel runs pass, and genuine expansion failure remains observable.

@loopx-agent
loopx-agent merged commit 53dcb03 into loopx-project:main Oct 28, 2026
10 of 32 checks passed
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.

3 participants