Repository navigation
test(dashboard): read the optional user action after it is listed - #7576
loopx-agent merged 2 commits into
Conversation
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
left a comment
There was a problem hiding this comment.
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.
Goal And Delivered Outcome
dashboard-browserandchat-bundle-browserlanes, red onmainatf5e9be367. They fail atgoal-suggestions-live.mjs:65with "the lane itself shows the item as optional", and the vitals text shows状态 0/0 工作 0 项未完成 暂无等待 等你决定.user_actionTodo 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 bare0. fix(dashboard): readable Explore thirds and Goal empty states #7478 changed that cell to read暂无等待, which exposed the stale read. A first-parent bisect over5a65338fa..f5e9be367namesadfcfb5a2(fix(dashboard): readable Explore thirds and Goal empty states #7478) as the first failing commit.另有 1 项可选).mainhead 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.main.Author Declaration
Implemented against
vitals.needsYouOptional(另有 {count} 项可选).examples/personal-workspace-browser/goal-suggestions-live.mjsLOOPX_PERSONAL_WORKSPACE_SCENARIO=goal-suggestions-liverefresh(), the new assertion fails with the same stale0/0vitals thatmainshows.Scope And Continuation
mainhead,kernel-contractsandwindows-powershellfail the CLI output budget.quota_should_run/multi_agent/jsonemits 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 at5a7cc8195. Choosing a ceiling or compaction belongs to the quota owner, so this PR leaves it alone.Validation
f5ed559e0onmainf5e9be367(rebased without conflicts toe5e16a414on1a7234c2a).real_entrypointpassedgoal-suggestions-live: 3/3 in development mode and 2/2 packaged, atmainf5e9be367.regression_paritypassedmainhead fails before the change. Without the refresh, the new assertion fails.Frontend / Visual Evidence
Type of Change
LoopX Area
Shared-authority RFC fixture impact
N/A
Boundary Checklist
none.Signed-off-bytrailer.🤖 Generated with Claude Code