Skip to content

gallery: plays that wait on what their components no longer do (base red: health 0-3, part 2) - #25034

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
fix/gallery-health-stale-plays
Oct 25, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
fix/gallery-health-stale-plays

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Base red fix, part 2 of gallery health (0-3) on feat-cmux-next. It stacks on #25018, which fixes the touched.ts crash and is merged in here so health can render. That diff drops out of this PR once #25018 lands.

With #25018, every shard renders again and lists these as newly broken, the same set as base before 8125a40 (for example run 40148362582). Each one's play waits on something its component no longer does:

State Broke in Cause Fix
composer image-sent-as-path, file-saved-as-path, pdf-attached, image-failed #24652 Uploads start with chat.upload.begin and fall back to chat.upload only when the host refuses it as unsupported. The frame answered every unmocked call null, so every paste ended in "The upload could not be started." That note also shows on the passing image variants. Separately, intake now saves a pasted .md too, and sends a pasted PDF or undrawable image as its path. The frame refuses an unanswered chat.upload.begin the way an older host does, unless a variant answers or delays it (#24976's new variants do). file-saved-as-path expects 3 saved chips. pdf-attached and image-failed show the PDF card and the failed-image chip from a kept draft (chat.draftAttachments.get), the only path that still makes them.
new-tab model-picker-open #24676 The hidden width probe (QuickMenuSpacer) repeats "More models" after the real row, and a text target takes the last match. Hover the menuitem by role.
subagent-tray after-latest-message #24779 A command's live tail opens only with a connected process source, and the gallery's preview transport never has one. The play checks that the row opens (aria-expanded). The note says why the tail isn't shown.
transcript tool-result-envelopes #24986 Rows now scroll the transcript. The runner scrolls only as far as needed, so the last row ends up under Jump to latest, which takes the click. Center each row before clicking it.

Not in this PR (owned elsewhere):

Risk: low. Gallery fixtures and the gallery frame only; nothing in the app changes. No screenshots attached because no app UI changes; this PR's gallery-health run renders every agent-pane entry, since a frame change touches everything.

Agent session: cosmic-gray

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

teamleaderleo and others added 3 commits October 24, 2026 18:08
…e-web.sh derives them

8125a40 moved build-agent-pane-web.sh from a hand-kept list of `$SRC/...css` lines to the sheets
dev.tsx reaches (bundle.mjs --css-inputs-only). galleryHost.ts's agentPaneStylesheets still scraped
the script for those lines, found no shared/styles.css and threw, so scripts/gallery/touched.ts (and
every gallery health shard on feat-cmux-next) failed before rendering.

agentPaneStylesheets now runs the script's own command over dev.tsx, keeps the walk's order, puts
Tailwind's entry last as the script does, and strips every sheet's @import (the walk already lists an
imported local sheet before its importer, so inlining it again duplicated git.css). The list is
memoized; the dev server derives it again when a saved source imports a stylesheet. touched.ts
treats dev.tsx like the script: a change to it re-renders every entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
…menu, command tray, tool results)

Every agent-pane state below has failed gallery health on feat-cmux-next with "play: waitFor did not
hold within 5000 ms". Each play waits on something its component no longer does:

- composer image-sent-as-path, file-saved-as-path, pdf-attached, image-failed: #24652 moved uploads
  to chat.upload.begin and falls back to chat.upload only when the host refuses it as unsupported. The
  frame answered every unmocked call null, so every paste failed with "The upload could not be
  started." The frame now refuses an unanswered chat.upload.begin as an older host does, unless a
  variant answers or delays it. Intake also changed on purpose: a pasted .md is saved too (3 chips, not 2),
  and a pasted PDF or undrawable image goes as a path, so pdf-attached and image-failed now show the PDF
  card and the failed-image chip from a kept draft (chat.draftAttachments.get), the path that still
  makes them.
- new-tab model-picker-open: #24676's hidden width probe repeats "More models" after the real row, and a
  text target takes the last match; the hover now targets the menuitem by role.
- subagent-tray after-latest-message: #24779 opens a command's live tail only with a connected process
  source, which the gallery's preview transport never has; the play checks the row opens instead.
- transcript tool-result-envelopes: since #24986 the rows scroll the transcript, and the runner's
  nearest-scroll parked the last row under Jump to latest, which took the click; each row is centered
  before its click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by claude-sr2/base-red-checks on cosmic-gray · session

@blacksmith-sh

blacksmith-sh Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Found 102 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmporoh2yen/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpx8x3_zx9/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
bundle-cmux-tui.sh failed (/tmp/tmp.iRLv9yRhQW/new/cmux-tui) View Logs
bundle-cmux-tui.sh failed (/tmp/tmp.iRLv9yRhQW/new/cmux-tui) View Logs
bundle-cmux-tui.sh failed (tree, /tmp/tmp.OykKcZUj8U/build/one/cmux-tui) View Logs
bundle-cmux-tui.sh failed (tree, /tmp/tmp.OykKcZUj8U/build/one/cmux-tui) View Logs

...and 92 more test failures. View all on Blacksmith: run 40156953091, run 40156953203, run 40156953260

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-9x2rr created for this PR by the cmux coordinator.

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 8c5b4d8: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr25034 -f ref=fix/gallery-health-stale-plays -f platform=macos -f backend_mode=local

Probably yours: composer-paste-text.test.tsx fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): agent-pane-queue-scroll-bottom.test.ts, agent-pane-queue-scroll-bottom.test.ts, agent-pane-queue-scroll-bottom.test.ts and 28 more. This PR merged before its CI finished: fix forward on main.

CI failed on 8c5b4d8a9f (run 40156953260 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (3) code a web test failed
web / react-apps-base-check (2) code a web test failed
web / react-apps-base-check (4) code a web test failed
web / react-apps-base-check (1) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts chromium > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and cl...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the queue opened, the view scrolled to its end shows the last row whole, and it stays: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the queue closed at the latest row keeps the last row on the stack, with no room that glide...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and clos...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > a prompt past the opened queue's cap, run elsewhere, leaves no room when the queue closes: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > in a chat switched to, a queued prompt withdrawn leaves no room held for the last chat's qu...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > a new line in the composer leaves the transcript's distance from its end as it was: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the wheel beside the composer, left and right of the queue, its fold and the card, scrolls ...: failed (job)
  • seen on other PRs agent-pane-step-rows.test.ts every step is one 26px row on one rhythm, across transcript rows: failed (job)
  • seen on other PRs composer-bottom-space.test.ts (unnamed): failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-base-check (3): (fail) chromium > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and closes [5180.45ms]
web / react-apps-base-check (2): (fail) every step is one 26px row on one rhythm, across transcript rows [1233.66ms]
web / react-apps-base-check (4): (fail) a pooled Settings page claimed by the host reports its paint once its first screen is in [175.35ms]
web / react-apps-base-check (1): (fail) a long queue > an opened long queue keeps Show less and the focused row in sight, never a half row (capture, 2026-10-15) [1212.41ms]

Not re-run automatically: web / react-apps-base-check (3), web / react-apps-base-check (2), web / react-apps-base-check (4), web / react-apps-base-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 7921f4f to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 7921f4f; do not merge until green; see lane-rules
red: web / react-apps-base-check (1); no finished base run on 7921f4f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (2); no finished base run on 7921f4f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on 7921f4f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 7921f4f to compare; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 7921f4f to compare; do not merge until green; see lane-rules

Tour of 8c5b4d8a9f (run): no media. The tour did not run: only webview code changed (5 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label, then re-add media-tour, to tour it on a Mac.

Gallery before/after for 8c5b4d8: the capture produced no images (run).

@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Oct 25, 2026
teamleaderleo and others added 4 commits October 24, 2026 19:36
…mjs and its plugins re-render every entry

Review (Codex): a source that drops its last stylesheet import kept the sheet until a restart, and a
change to bundle.mjs (which now derives the list) touched no entry. Every saved source under src/
derives the list again off the save's path (one run more for saves during a run), and the combined
sheet reloads only when the list changed; bundle.mjs and the plugins its --css-inputs-only run loads
join touched.ts's EVERYTHING.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
…ays check what their notes say

Review (Codex): refusing every unanswered chat.upload.begin sent the gallery down the older single
call, so no play exercised begin, chunks and finish. The frame now answers the staged upload as the
app's host does (a variant that answers or delays a step takes it over; file-not-attached refuses
both, as a host that saves nothing). image-failed checks its text and remove button, pdf-attached its
file name, file-saved-as-path each chip's name, note and saved path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
… host does

Review (Codex): the frame ignored begin's batch manifest and never answered a batch token, so a
several-file paste never ran cloudUploads.ts's continuation. The first begin of a batch gets a token;
each later file must present it and be the manifest's next entry, else begin fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6-astra xhigh, cmux16): SHIP at 8c5b4d8

First pass blocked on four findings: legacy-only uploads in the frame, and attachment plays that didn't check what their notes say. The second pass blocked on one more: the batch token. All are fixed and the third pass found no remaining issues. Health at this head lists only pages.settings#server* (stale settings exports, #25009) and composer#reasoning-claude* (#24916), both base reds owned elsewhere.

@teamleaderleo
teamleaderleo merged commit 8881bba into feat-cmux-next Oct 25, 2026
122 of 136 checks passed
@teamleaderleo
teamleaderleo deleted the fix/gallery-health-stale-plays branch October 25, 2026 03:46
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant