fix(next): four webview tests that are red at the tip follow the product again (status glyphs, table widths, warm New Tab, folder cut)
Summary
Four webview browser tests fail at the feat-cmux-next tip, so web / react-apps-check is red on every PR that touches webviews/. In every case the product was changed on purpose or is right, and the test, its fixture or the gallery's stand-in host had fallen behind. Each commit fixes one:
- status-glyphs (9 of 12 failed). 3207401535b6 removed the talk-bubble wait icon (the wait now uses the attention dot), and 301bd2794ea1 redrew the static
waitingglyph as a filled circle. The test still expected the bubble. It now expects["idle","dot","shieldLine","dot","info"]. Colors are checked by state position, so done stays Codex blue and the wait's tint must differ from done's. The wait and done dots must now match in shape exactly. The @2x edge probes now check the circle's edges. - markdown-table-obsidian (the resize-width test; the width came back 90 px off). 452cce0e668a moved column widths into the file's xattr through
cmux.markdown.setTableWidthsand the config'stableWidths. The gallery's mock markdown host (src/gallery/frame/pages.ts) implemented neither, so a reload lost the width. The mock now stores widths per path in the frame's sessionStorage and returns them in the config, the way the app's xattr store does. The test is unchanged. - new-tab-warm-first-frame (4 of 6 failed). 9215b25d8a75 made Cards, with 3 recent chats, the default New Tab template. The fixture had 3 sessions, so the device chat that arrives after the handshake never got a card. The fixture now has 2 sessions. The test still checks that the warm open paints exactly one state, and that state is the final one (the sessions plus "Older device chat").
- composer-location-strip (the 340 px folder cut). The 340 px step caps the folder button at 128 px. The
mid-folderfixture,atlas-checkout, measured 124 px in Linux Chromium's Noto Sans, so it never got cut. It fails at the commit that added the test (#20791), and CI only started running it again after #22197 and #22205. The fixture is nowatlas-api-checkout(102.7 px of text in Noto Sans). That cuts at 340 px and shows whole at 341 px in any font from about 17% narrower to 19% wider.
No skips, no loosened tolerances, no product code changes beyond the gallery's dev-only mock host.
Not in this PR, because other open PRs cover them:
- composer-type-scale: #22343.
- markdown-table-keys, the five unformatted settings files, and the
import.meta.hottype errors: #22490. - check:layers (findPill.css), check:text-focus and the lint warnings: #22509.
Testing
On big-red, with CMUX_BROWSER_TESTS=1 bun test in webviews/ and real Chromium. Each test failed at e9c6f20a63bc2 and passes at 0142fbf76f53:
- composer-location-strip: 21 pass, 1 fail before; 22 pass after.
- markdown-table-obsidian: 3 pass, 1 fail before; 4 pass after.
- new-tab-warm-first-frame: 2 pass, 4 fail before; 6 pass after.
- status-glyphs: 3 pass, 9 fail before; 12 pass after.
- Also run: markdown-wide-table-scroll (5 pass) and
bun run check:status-glyphs.vp fmt --checkandvp lintpass on the changed files.
Observed / Not run
Observed: the before and after results above.
Not run: the WebKit cases, because WebKit isn't installed on big-red. CI runs them. No Mac run.
Risk
Not UI: test expectations and fixtures, plus the gallery's dev-only stand-in markdown host. Nothing the app ships changes.
Changelog
None (tests only).
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes four webview browser tests that were red at the feat-cmux-next tip, so web / react-apps-check now passes on PRs touching webviews/. Product behavior is unchanged; only test expectations, fixtures, and the gallery's dev-only mock markdown host are updated.
- status-glyphs: expects the attention dot (not the removed talk bubble) for a wait, and checks colors by state position since wait and done dots now share a shape.
- markdown-table-obsidian: the gallery mock host now answers
cmux.markdown.setTableWidthsand returns saved widths astableWidths(kept in the frame's sessionStorage, forgotten on a null value like the app), so a reload keeps column widths. - new-tab-warm-first-frame: the fixture now has two sessions so the device chat gets the third card on the Cards New Tab page; the test still checks that a warm open paints the final state on its first frame.
- composer-location-strip: the
mid-folderfixture is nowatlas-api-checkout, which crosses the 128 px folder cap at 340 px in both Linux Noto Sans and macOS SF Pro.
No skips, no loosened tolerances, and no shipped code changes.