Repository navigation
[Bug]: the required chat-bundle-browser lane is red on main — the read-only source badge repeats the visible Goal title #7378
Description
Problem
Since #7376 merged (c56f55307, "fix(workspace): keep source restrictions readable on narrow screens"), the chat-bundle-browser job of the required Python Tests workflow fails deterministically at its first step, Qualify the actual compiled UI, because the shipped SSR smoke throws:
AssertionError [ERR_ASSERTION]: The source badge does not repeat the visible Goal title
actual: '<div class="context-help"><button type="button" class="context-help-trigger" aria-label="Historical run · 只读" ...>
<div class="context-help-popover" role="tooltip"><strong>Historical run · 只读</strong>
<p>显示 Historical run 的原始记录;执行控制在原运行环境</p></div></div><small>只读</small>'
#7376 replaced the badge's span (title tooltip) with a ContextHelp whose accessible name is `${readOnlySourceLabel} · ${t("common.readOnly")}`. When the Goal title already names the source (selectedGoal.title === readOnlySourceLabel) the visible label is deliberately omitted, but the new control's aria-label and disclosure heading now repeat the title — exactly the invariant the SSR smoke guards. Screen-reader users hear the source name twice: once from the visible Goal title and once from the help button.
Impact
chat-bundle-browseris one of the five jobs thatchecksverifies (scripts/ci/review_gate.pyCHECK_OUTPUT), andchecksis a required dependency ofpytest, somerge-gateis red for every PR whose change classification runs core tests. The failure is a pure server-rendered assertion (no browser, no timing), so it reproduces on every run.- PR fix(chat): preserve latest reply through layout changes #7377 (run 40297894327) shows
chat-bundle-browser (1),(2)and(3)all failing at this step, and therelease-artifactsbuild job (40297894021) failsExercise the installed page in a real browserwith the same assertion. 30 PRs were open against this main line when this report was filed, and every one of them must pass the same gate. - The duplication itself is user-visible to assistive technology in every read-only/historical source view whose Goal title matches the source label.
Minimal reproduction
cd apps/presentation/dashboard
npm ci --ignore-scripts
npm run -s smoke:chat-model-menuAt 93bb1ed27: exit 1 with the assertion above. With only channel-header.tsx restored to its parent 60d6f7a39, the same command exits 0 (Chat model/header: 64 bilingual model, defaults and accessible refresh assertions passed (SSR only)).
Expected behavior
The read-only source badge keeps #7376's narrow-screen help, but its persistent accessible name and visible text do not repeat the visible Goal title. The hidden disclosure may explain the source in prose once the user opens it.
Actual behavior
The badge's help trigger is labelled Historical run · 只读 and its disclosure heading repeats the same string, so the source name is announced twice and the SSR contract "The source badge does not repeat the visible Goal title" fails.
Diagnostics
- LoopX version or commit:
93bb1ed27(regression introduced byc56f55307, merged as fix(workspace): keep source state and folded actions readable #7376) - Host or runtime surface: not host-specific — Personal Workspace dashboard (browser / SSR)
- Area: public docs or presentation surface
- Issue origin: observed and reproduced in a real environment
Activity
fix(workspace): stop the read-only source badge from repeating the Go…
fix(workspace): stop the read-only source badge from repeating the Go…