fix(next): four webview tests that are red at the tip follow the product again (status glyphs, table widths, warm New Tab, folder cut)

Closed
TE
17d ago
+50-28

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 waiting glyph 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.setTableWidths and the config's tableWidths. 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-folder fixture, 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 now atlas-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.hot type 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 --check and vp lint pass 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


View with [code]smith Autofix with [code]smith
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.setTableWidths and returns saved widths as tableWidths (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-folder fixture is now atlas-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.