Skip to content

test(dashboard): read the optional user action after it is listed - #7576

Merged
loopx-agent merged 2 commits into
loopx-project:mainfrom
LIHUA919:codex/goal-suggestions-live-optional-20261028
Oct 28, 2026
Merged

loopx-agent merged 2 commits into
loopx-project:mainfrom
LIHUA919:codex/goal-suggestions-live-optional-20261028

Conversation

@LIHUA919

Copy link
Copy Markdown
Contributor

Goal And Delivered Outcome

  • Outcome basis / optional anchor: the required dashboard-browser and chat-bundle-browser lanes, red on main at f5e9be367. They fail at goal-suggestions-live.mjs:65 with "the lane itself shows the item as optional", and the vitals text shows 状态 0/0 工作 0 项未完成 暂无等待 等你决定.
  • Goal/source and gap: the scenario adds an optional user_action Todo through the real CLI after the page has already loaded, then reads the Goal vitals without refreshing status. The view still shows the empty Goal. The old assertion /0 等你决定|可选/ passed only because the empty needs-you cell used to render a bare 0. fix(dashboard): readable Explore thirds and Goal empty states #7478 changed that cell to read 暂无等待, which exposed the stale read. A first-parent bisect over 5a65338fa..f5e9be367 names adfcfb5a2 (fix(dashboard): readable Explore thirds and Goal empty states #7478) as the first failing commit.
  • Fix: refresh status after adding the item, as the user-gate step a few lines later already does. Then assert the optional count the lane really renders (另有 1 项可选).
  • Observable before → after: the scenario fails at the main head before this change and passes after it. The "optional item is listed, but not as a decision" check now proves the item is actually loaded.
  • Issue/task and intended base: related to CI: chat-bundle-browser and dashboard-browser shards time out on main #7389. Follows fix(dashboard): readable Explore thirds and Goal empty states #7478. Base main.

Author Declaration

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

Implemented against

  • Specification and revision: the scenario's own header contract ("An optional user action raised through the CLI is listed but never becomes a 'decision' suggestion") and vitals.needsYouOptional (另有 {count} 项可选).
Criterion (spec clause) Disposition Symbol / path Test or command
The optional item is read after it is listed implemented examples/personal-workspace-browser/goal-suggestions-live.mjs LOOPX_PERSONAL_WORKSPACE_SCENARIO=goal-suggestions-live
The lane shows it as optional, not a decision strengthened same same
  • Self-check before submission: negative control. Without the added refresh(), the new assertion fails with the same stale 0/0 vitals that main shows.

Scope And Continuation

  • Completed scope: test only. No product code changed.
  • Not covered: on the same main head, kernel-contracts and windows-powershell fail the CLI output budget. quota_should_run/multi_agent/json emits 25,836 characters against a 25,500 ceiling. That growth comes from Preserve complete context in shared quota diagnostics #7557, because the budget smoke passes at 5a7cc8195. Choosing a ceiling or compaction belongs to the quota owner, so this PR leaves it alone.

Validation

  • Tested revision: f5ed559e0 on main f5e9be367 (rebased without conflicts to e5e16a414 on 1a7234c2a).
  • Run state: finished (local); hosted CI pending on this PR.
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
real_entrypoint passed goal-suggestions-live: 3/3 in development mode and 2/2 packaged, at main f5e9be367.
regression_parity passed The main head fails before the change. Without the refresh, the new assertion fails.

Frontend / Visual Evidence

  • UI impact: none (test only).

Type of Change

  • Test update

LoopX Area

  • Build, packaging, installer, or CI

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

goal-suggestions-live adds an optional user action through the real CLI
after the page has loaded, but read the Goal vitals without refreshing,
so the view still showed the empty Goal. The assertion /0 等你决定|可选/
matched only because the empty needs-you cell rendered a bare 0. Since
loopx-project#7478 that cell reads "暂无等待", so the scenario fails on main in
dashboard-browser and chat-bundle-browser.

Refresh status after adding the item, as the user-gate step already
does, and assert the optional count the lane actually shows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Lihua <1017343802@qq.com>

@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

未发现阻塞问题,批准准确 head e5e16a4148fd29ef93e0a35635b3e179932e977c。

动机 / Motivation

运行 Dashboard 与 Chat browser smoke 的维护者需要确认 CLI 新增的可选事项确实被页面读取。以前页面仍是空 Goal 就检查可选状态;现在先刷新,再要求实际出现一项可选事项。旧脚本及移除刷新后的负控都失败,新 head 的开发态和打包态沿真实 Todo/status 路径通过。本 PR 只修现有测试,不改变产品页面、自动刷新策略、Todo 权限或其它主干问题。

改动思路 / Approach

沿用 user_gate 步骤已经使用的 refresh(),让普通页面读取真实新增项;再把允许空状态混过的正则收紧为实际可选计数。不增加 sleep、轮询器、场景或产品刷新规则。只改一处既有 smoke,边界足够完整且容易回退。

具体改动 / Changes

依据 examples/personal-workspace-browser/goal-suggestions-live.mjs 在 spec_revision 1a7234c2afcc3fd7897b63d5bab78d3e6a9f7959 的原头部合同:optional_not_decision 要求 CLI 可选事项确实列出、但不成为决定;gate_uses_owner_count 要求真正 gate 的建议与 typed lane 同数并打开原 gate。两项在本 head 都执行通过。

关键内容讲解

optional 段落 在 CLI add 成功后刷新;随后第 66 行断言“另有 1 项可选”,而不是仅满足空的零决定。后半段真实 gate 的 count equality 与导航断言保留。实际源是临时真实 Todo/status backend,只有 status 路径被代理,未把期望计数直接塞给组件。

对主干的风险 / Risks

PASS:精确 head 的开发态一次、重新构建后的打包态一次,完整走到 gate 导航;Dashboard/Chat build 和 standard premerge 的 4 个直接、3 个选中检查均通过,0 hold。保留 Vite 的大 chunk advisory warning。另在完全相同产品源码下执行不可变 base 的原场景,以及 head 仅移除首次刷新后的 mutation:两者都在可选计数处失败,呈现同一空 Goal,而新 head 能读到可选项。没有删除 gate 断言、放宽预算或隐藏失败,也未查询 CI。

对比既有纯 fixture goal-suggestions、同作者近期 #7554 折叠组、#7550 来源返回、#7569 CLI 参数测试,此处修复的是不同的真实读取边界;没有新增重复 smoke,保留有实际维护价值。

我的整体评价 / Verdict

这个测试修复达成原场景目标:持续回归的可信度提高,产品交互保持原状。测试没有改变渲染组件;检查了 goal-suggestions-live.mjs 与 goal-masthead.tsx 的既有可选/阻塞计数路径。未据测试通过宣称视觉质量、正式 App 采用、整个 browser shard 或持续时序稳定已验收。普通 fixture 不能替代真实 CLI 新增后的读回,因此现有 live case 应保留;无需额外架构或跟进任务。批准源码与测试结论,合并资格另由当前 native closeout/readiness 判断。

English verdict: APPROVE e5e16a4148fd29ef93e0a35635b3e179932e977c; the real optional-item read passes in development and packaged modes, while immutable-base and no-refresh controls fail as expected.

@loopx-agent
loopx-agent merged commit c6f5dd2 into loopx-project:main Oct 28, 2026
4 of 5 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.

2 participants