Repository navigation
fix(webviews): seven react-apps-check base reds (WebKit table drag, empty rows, dev host trust, four stale tests) - #27794
Conversation
…y rows, stale tests) - markdown tables: a drag across cells in WebKit stayed on its first cell. prosemirror-tables normalizes a text selection whose head lands at the next cell's start to the first cell's text; Chromium waits for the mouseup to write the editor's selection to the page, WebKit writes it at once and its drag stops there. tableTextSelectPlugin drops that normalization while the button is down. - transcript: a row whose renderer draws nothing took its padding again (`article.acpmux-row:empty` stopped matching once every row holds its `.acpmux-row__gap` target, #26704). The rule now matches a row with no child but the gap. - MarkdownMath: the test reads the text without the <wbr> break points #27277 adds. - bare-ref-repo: another agent's message is one line until opened (#27312); the test opens it before reading its chips. - transcript-send-remount: the fixture's turn ends with its footer, so the reply does not gain its own action row on send (#27313), a redraw the test is not about. - trailing-plates-tool-output: Reduce Motion still runs transitions for 0.01ms; the test reads the actions once their reveal has run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ffe9f4bb4afcf68decf6
chat-open-long (busy daemon) has been red since #24144. Before the pane's daemon client binds its actions, a trust read reaches the browser dev host, which answered every folder "unknown". That drew a "Trust cmux?" card (73px) over a folder acpmux trusts. Since #24144 scoped trust to its route authority, the client's bind reads the folder again and the card goes away, so the transcript shifts. Before #24144 the wrong card just stayed. The dev host now says it can't answer acp.trust.get (native.unsupported), as it does for other host-only reads. readFolderTrust treats that as "can't say" and draws no card, and the client's read after the bind gives acpmux's real answer. The shipped app's native host is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Stale: these images are of Gallery before/after for
States
Pick other states with a red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 6ee25f9 to compare; do not merge until green; see lane-rules |
|
Found 9 test failures on Blacksmith runners: Failures
|
Review (Codex, #27794): the drag flag ended only on a mouseup or dragstart the page saw. A button released over another app never reaches the page, so the flag stayed set, and the filter went on dropping a cross-cell text selection's narrowing (a keyboard caret move out of it). The window listeners also outlived an editor destroyed mid-press. The press now also ends on the window's own blur (not capturing, since the press's own focus change blurs an element), on a key, and on a mousemove with the primary button up (as prosemirror-view's own MouseDown does). The plugin view's destroy removes the listeners, and a new press clears any earlier one first. A browser test can't release the button without delivering a mouseup to the page (Playwright keeps it pressed, and so does prosemirror-view's own MouseDown), so the case isn't simulated. The existing drag, click and Shift-click tests cover the paths that must keep working. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review (Codex, delta at 11a2424): Shift or Cmd pressed during a cross-cell drag leaves the button down, but the capturing keydown listener ended the press, so WebKit's drag went back to sticking on the first cell. The window's blur and a mousemove with the primary button up still end a press whose mouseup never reached the page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Base red:
cmux-next web / web / react-apps-check("Test webviews") has been red on feat-cmux-next since 2026-10-29 ~02:14Z, and it hides signal for every webviews merge. This fixes seven of its failing tests. Each one fails the same way twice, and again when retried alone.test/markdown-table-obsidian.test.ts(webkit) "a drag across cells selects text…"normalizeSelectionstill cuts a text selection whose head lands on the next cell's start ($to.parentOffset === 0) down to the first cell's text. Chromium waits for mouseup before it writes the editor's selection back to the page (selectionToDOM'schrome && mouseDowndelay). WebKit writes it right away, so the drag stays stuck on the first cell.tableTextSelectPlugindrops that normalization: a selection-only transaction with nopointermeta that narrows a cross-cell text selection to its first cell's text, or to a caret. The press ends on mouseup or dragstart, on the window's own blur, or on a mousemove with the button up (a release over another app never reaches the page), and the plugin view's destroy removes its listeners. A key pressed mid-drag (Shift, Cmd) does not end it.test/transcript-fold-no-blank-space-browser.test.ts.acpmux-row__gapspan in every row, soarticle.acpmux-row:emptynever matches any more. A row whose renderer draws nothing gets its padding back.article.acpmux-row:not(:has(> :not(.acpmux-row__gap))). Specificity is unchanged at (0,2,1), so it still outranks the row-kind paddings.MarkdownMath.test.tsx"keeps shell command dollar signs…"<wbr/>insidehybrid_<wbr/>ref_…<wbr/>before reading the text.test/bare-ref-repo.test.tsx"an agent's message: its own address names…"#24175setMessageOpened) before reading the chips.test/transcript-send-remount.test.tsxreply-1drew twice on sendhasReplyActions). In the fixture the reply was the chat's open end with no footer, so the sent prompt gave it a new action row. That redraw is a real content change.test/browser/trailing-plates-tool-output.test.tsfocus()shared/desktop.css), so the reveal reads 0 in the frame it starts. #27560 passedreducedMotion=1, which removed the 120ms fade but not that 10µs transition. A probe on CI showedtransition: 1e-05swith a running opacity animation at time 0, and opacity 1 a moment later.test/chat-open-long.test.ts"a 700-turn chat opened cold on a busy daemon…"src/dev-host/host.ts), which answered every folder"unknown", and that drew a "Trust cmux?" card. #24144 scoped trust to its route authority, so the client's bind now reads the folder again (acpmux: trusted) and removes the card, and the rows move. Before #24144 the wrong card just stayed. A CI probe showed the dev host's "unknown" at ~3.0s, the authority change at ~3.4s, and acpmux's "trusted" at ~3.9s.acp.trust.getwithnative.unsupported, as it does for other host-only calls.readFolderTrustreads that as "can't say" and draws no card, and the client's read after the bind gives acpmux's answer. The shipped app's native host is unchanged.Verification (cmux-ci, Linux, real Chromium and WebKit)
At this branch's code: the six files above plus
test/markdown-selection-drag.test.tsgive 60 pass and 0 fail. For the dev host change:chat-open-long(quiet and busy) passes, and so do the trust and dev host suites (dev-host,trust-authority-switch,trust-pending-refusal-button,folder-trust-switch-no-blank,agent-pane-unknown-harness,agent-pane-btw-side-session,agent-pane-peer-chat,agent-pane-background-tasks): 55 pass. The one failure,classic-new-tab-trust"a start refused after a while…", fails the same way on base ("the chat composer is up", line 269) and is another fix's.vp lintis clean,bun run typecheckreports no type errors in 3140 files, andvp fmt --checkis clean on the changed files. After the drag cleanup (2788068): the table and selection-drag suites give 32 pass and 0 fail in Chromium and WebKit, and lint, fmt and typecheck are clean.Review (Codex gpt-6-astra, high, fast): CHANGES at 56ac5e6 (a release that never reached the page left the drag flag set), CHANGES at 11a2424 (keydown ended a drag with Shift held), and SHIP at 2788068.
At base (1dd8704, CI logs) every one of these tests failed, and failed again when retried alone.
Risk: low. One CSS selector in the transcript (same specificity, same intent as before). One ProseMirror filter that applies only while the mouse button is down after a press in a table cell, and only to prosemirror-tables' own normalization of a cross-cell text selection. One dev-only host answer (the browser dev slot, never the shipped app). Everything else is test-only.
Agent session: agent session
🤖 Generated with Claude Code