fix(next): keep trailing control highlights local
Hovering the running tray's Stop button or a Session Info pull request's ellipsis currently highlights the surrounding row. These controls now highlight only themselves; hovering the main row control still highlights that row.
Adds one gallery-wide browser guard for trailing-control surfaces and hover bounds. It discovers every web gallery entry, opens its default state plus Summary's shared-tab-row states, rejects backgrounds/borders/shadows on icon-button groups, and compares each small control's paint and its ancestors before/after hover. It also rejects a painted sibling pane intersecting the shared native tab row. The existing PR webview browser suite discovers the test automatically; no workflow, job or gate is added.
Leo, 2026-10-28:
"There must still be so f***ing many if you look at the patterns of all the nonsense I've sent out there. You get them. You read between the lines. You fix the underline. You look elsewhere where the problem might also have propagated, where similar problems might be existing. And you look, right?"
Leo, 2026-10-27:
"why are you giving it the entire row when it's only this small little section? Just don't do that. Don't ever do that."
Risk: normal. The product diff changes two hover selectors, restores Stop's own existing hover, and updates their comments.
Coverage and exceptions
The guard checks icon controls up to 40 × 40 px with a 2 px highlight tolerance. It scrolls controls into view, hit-tests before hovering, and isolates each gallery entry in a fresh browser context. Native gallery descriptors have no DOM and are excluded. This is coverage of each web entry's default state and the named shared-row cases, not every interactive state or every variant.
Two exact allowances:
.pw-rowchanging paint when.pw-row-buttonis hovered: fixed by #27086..diff-pill[role="toolbar"]: the standalone floating diff toolbar is its own glass surface, not trailing tools on a row. Its individual controls' hover bounds remain checked.
No broad menu/ancestor exemption. The sweep's other findings are fixed here. #27045's harness hover fix and #27122's Summary fix are already on base; #26499 owns header-icon plates and this diff does not duplicate it.
Verification
Rebased exact head 384ed2e7474850670d7041ba404208d611a74fe0: combined browser guard and web checks passed. The receipt confirms the source SHA and exit code 0.
From webviews:
CMUX_BROWSER_TESTS=1 GALLERY_CONTROL_ENTRIES=agent-pane.agent-message-row,agent-pane.changes-from-cache bun test test/browser/gallery-control-surfaces.test.ts
CMUX_BROWSER_TESTS=1 bun test test/browser/gallery-control-surfaces.test.ts
The first command failed before the CSS changes on the tray Stop and PR ellipsis, then passed with both fixes. The failing test is committed before the fix (58fb4ac162f). Historical .acpmux-diff-tools and Summary overlap red proof are recorded below. The final focused guard and full current-base sweep are green; the initial sweep found and the allowlist documents the standalone diff toolbar surface.
Observed / Not run
Observed: real Linux Chromium focused red/green tests, light/dark before/after gallery stills, and Node 24 web lint. The full current-base sweep visited 237/237 states, 694 groups and 1,825 hovered controls and the independent exact-head review is complete. Native capture is not applicable to this webview CSS/test change.
Before / after
| Surface | Before | After |
|---|---|---|
| Tray, light | ![]() | ![]() |
| Inspector, light | ![]() | ![]() |
| Tray, dark | ![]() | ![]() |
| Inspector, dark | ![]() | ![]() |
These captures show the unchanged CSS patch before and after; the rebase preserves all three patches (git range-diff).
Changelog
Fixed: hovering Stop in the running tray or a pull request's menu in Session Info highlights only that control.
Red on base
These are real browser failures from the same guard on detached historical trees; the logs remain local for review:
- Pre-plates
20cc32d7bf1814e4f9c31547da3b1fe2078fb481,GALLERY_CONTROL_ENTRIES=agent-pane.diff-panel:
agent-pane.diff-panel/small-split: plate div.acpmux-diff-tools: {"background":"lab(... / 0.07) none","border":"","shadow":"inset ..."}. - Pre-#27122 Summary
8d8de3faae79f705e3c10668265eec9056dfdf6fwith red fixture/test602f4699f48:
agent-pane.summary-card/shared-tab-row: overlap aside.acpmux-summary-card pane top 0 overlaps tab row bottom 32.
The current tree passes both focused cases. The initial current-base full sweep visited 237/237 states, 720 groups, 1848 controls hovered; after the standalone toolbar was identified, it is covered by the exact reasoned allowlist above.
Agent session: agent session







