Skip to content

Agent chat: a video's Open in tab and Expand each take their own click - #24472

Merged
teamleaderleo merged 7 commits into
feat-cmux-nextfrom
inline-media-video-hit-targets
Oct 27, 2026
Merged

teamleaderleo merged 7 commits into
feat-cmux-nextfrom
inline-media-video-hit-targets

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

A video’s Open in tab and Expand controls now have separate 28 px click targets, an 8 px gap, and a margin that absorbs near misses instead of playing the poster. On videos shorter than 126 px, both actions sit in a reserved row above the player. Normal and tall videos keep the existing corner placement, clear of native playback controls.

Leo (2026-10-22, relayed by claude-sr2), with Lawrence’s screenshots: “the thing i had in the henlo chat was just pasting some images lawrence said”. Lawrence’s caption: “trying to click between the two of them”.

The prior reviewed head put playing actions at y=45–73 px, which overlaps a 100 px video’s native bottom bar. The short-video row is reserved before playback, so starting playback does not move the video. One ResizeObserver watches only this video and disconnects on unmount or media-kind change. No animation loop, timer, or transcript scan was added.

Design reference: Claude’s apps/claude/live/image-viewer-masonry-layout.png in manaflow-ai/cmux-design-references, retaining quiet media surfaces and small hover controls. Existing glass and icons are unchanged.

Before / after

Actual gallery captures from agent-pane.inline-media, Chromium, 420 px, dark and light. Before is 11eaf48; after is d065c37. Normal and poster states are included to show they keep their existing layout.

State Before After
100px playing video, dark Before After
100px playing video, light Before After
Normal playing video, dark Before After
Normal playing video, light Before After
Poster, dark Before After
Poster, light Before After

Verification

Focused command: CMUX_BROWSER_TESTS=1 bun test test/inline-video-controls-browser.test.ts.

  • Red at b2ce227, hosted 40483541593: 24 pass/4 fail. Both engines reproduce the 100 px playing overlap and resize failure.
  • Final head d065c37, hosted 40486364338: 28 browser tests pass in Chromium/WebKit; 2719-file typecheck and scoped format/lint pass; all 12 before/after gallery cases are ready and their plays pass. Captured 32 PNG/step images, each decoded with SHA256 and PIL verification.
  • 96 related inline-media tests pass in hosted 40484125645 at e2eafed, whose production files are identical. That combined run later failed in the old gallery fixture; the final run fixes its setup boundary.

Observed / Not run

The browser cases cover near misses, 100/180/280 px videos, resizing, actual separate Open in tab/Expand effects, and identical frame bounds before/after Play. Native app playback was not run; the runtime evidence is Chromium and WebKit browser layout.

Full independent Codex gpt-6-astra xhigh review: SHIP at d065c37.

Current head ca6e9513c8599f8fbbe98664563468700e0294e9 changes only the short-player padding from literal 40px to calc(var(--ds-space-6) + var(--ds-space-2)). The shared desktop tokens are 32px and 8px, so computed geometry stays exactly 40px. The matching design-token gate, scoped format/lint, and prepush gate pass at this head. Browser tests and captures above remain accurately bound to d065c37; no duplicate browser run was needed for the equivalent spacing expression. Independent Astra xhigh delta review and primary inspection confirm the same computed layout.

Review (independent Codex gpt-6-astra, xhigh): SHIP at ca6e951.

Changelog

  • Fixed: Inline videos’ Open in tab and Expand actions can be clicked independently and stay clear of the player’s own controls.

Agent session: agent session

teamleaderleo and others added 2 commits October 23, 2026 05:05
Lawrence, relayed by Leo (2026-10-22): "trying to click between the two of them". A browser-lane
test measures the inline video's controls in real layout (Chromium and WebKit): every hit area at
least 28 x 28 px, 8 px apart, a click on each lands on it, a click just off one lands on nothing
that acts, and while it plays our buttons stay clear of the player's own rows. It fails on the
base: Open in tab and Expand are 24 px, 4 px apart, a near miss plays the video, and while it plays
they sit in WebKit's top corner row.

The gallery gets the hovered and playing states for the before/after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lawrence, relayed by Leo (2026-10-22): "trying to click between the two of them". Each button is
now a 28 px square click with its 24 px glass drawn inside, 8 px from the other, and their row keeps
a 4 px margin that takes a near miss and does nothing (before, a click just off either played the
video with sound). While the video plays they sit below the player's top row of controls (WebKit's
Full Screen, Picture in Picture and Mute corner bars) instead of over it. What each button does is
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

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

Review ca6e951: 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=pr24472 -f ref=inline-media-video-hit-targets -f platform=macos -f backend_mode=local

Probably yours: chat-inspector-overlay-toggle.test.ts, accent-glass-invariants.test.ts, composer-caret-focus.test.ts and 1 more fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): agent-pane-peer-chat.test.ts, agent-pane-step-rows.test.ts, agent-pane-turn-tokens-muted.test.tsx and 25 more. This PR merged before its CI finished: fix forward on main.

CI failed on ca6e9513c8 (run 40522129440 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (2) code a web test failed
web / react-apps-base-check (3) 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-peer-chat.test.ts a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-...: 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 agent-pane-turn-tokens-muted.test.tsx the live line at the bottom (Thinking.tsx): the count is its own span, which the quieter rule keys o...: failed (job)
  • seen on other PRs agent-pane-turn-tokens-muted.test.tsx the line over the turn (WorkingFor.tsx): the count is its own span, which the quieter rule keys on: failed (job)
  • seen on other PRs changelog-pictures.test.tsx a change's picture opens enlarged on a click, and Close closes it: failed (job)
  • seen on other PRs chat-inspector-overlay-toggle.test.ts chromium, header: the toggle is above the open overlay and a click on it closes the Inspector: failed (job)
  • seen on other PRs chat-inspector-overlay-toggle.test.ts chromium, tab row: the toggle is above the open overlay and a click on it closes the Inspector: failed (job)
  • new in this PR chat-inspector-overlay-toggle.test.ts webkit, header: the toggle is above the open overlay and a click on it closes the Inspector: failed (job)
  • new in this PR accent-glass-invariants.test.ts no orange or system accent and no opaque glass on 2146 gallery stages: failed (job)
  • seen on other PRs agent-pane-agents-pill.test.ts by default the running agents sit in the tray above the composer, not in the transcript: failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-base-check (2): (fail) a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-chat [31086.67ms]
web / react-apps-base-check (3): (fail) no orange or system accent and no opaque glass on 2146 gallery stages [614544.95ms]
web / react-apps-base-check (4): (fail) answered live, the card goes and the record takes its place [6065.31ms]
web / react-apps-base-check (1): (fail) the summary card lists the chat's background tasks: running ones first, the finished folded [992.80ms]

Not re-run automatically: web / react-apps-base-check (2), web / react-apps-base-check (3), 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 7b17b7e to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 7b17b7e; do not merge until green; see lane-rules
red: web / react-apps-base-check (1); no finished base run on 7b17b7e to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (2); no finished base run on 7b17b7e to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on 7b17b7e to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 7b17b7e to compare; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 7b17b7e to compare; do not merge until green; see lane-rules

Gallery before/after for ca6e951: 16 states rendered, 6 images differ, 1925 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40522129361 -R manaflow-ai/cmux -n gallery-advisory-24472-ca6e9513c8599f8fbbe98664563468700e0294e9 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.inline-chips/before Apple System Colors Light unchanged 0% own chips.css
agent-pane.inline-chips/before Apple System Colors unchanged 0% own chips.css
agent-pane.inline-chips/after-minimal Apple System Colors Light unchanged 0% own chips.css
agent-pane.inline-chips/after-minimal Apple System Colors unchanged 0% own chips.css
agent-pane.inline-chips/after-accent Apple System Colors Light unchanged 0% own chips.css
agent-pane.inline-chips/after-accent Apple System Colors unchanged 0% own chips.css
agent-pane.inline-chips/after-hairline Apple System Colors Light unchanged 0% own chips.css
agent-pane.inline-chips/after-hairline Apple System Colors unchanged 0% own chips.css
agent-pane.inline-media/video-hovered Apple System Colors Light new 0% own ReplyMedia.tsx
agent-pane.inline-media/video-hovered Apple System Colors new 0% own ReplyMedia.tsx
agent-pane.inline-media/video-playing Apple System Colors Light new 0% own ReplyMedia.tsx
agent-pane.inline-media/video-playing Apple System Colors new 0% own ReplyMedia.tsx
agent-pane.inline-media/video-short-playing Apple System Colors Light new 0% own ReplyMedia.tsx
agent-pane.inline-media/video-short-playing Apple System Colors new 0% own ReplyMedia.tsx
agent-pane.inline-media/before-after Apple System Colors Light unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/before-after Apple System Colors unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/labelled-lines Apple System Colors Light unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/labelled-lines Apple System Colors unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/path-in-sentence Apple System Colors Light unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/path-in-sentence Apple System Colors unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/pr-media Apple System Colors Light unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/pr-media Apple System Colors unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/pr-media-pair Apple System Colors Light unchanged 0% own ReplyMedia.tsx
agent-pane.inline-media/pr-media-pair Apple System Colors unchanged 0% own ReplyMedia.tsx
agent-pane.open-in-menu/closed Apple System Colors Light unchanged 0% own chips.css
agent-pane.open-in-menu/closed Apple System Colors unchanged 0% own chips.css
agent-pane.open-in-menu/several-browsers Apple System Colors Light unchanged 0% own chips.css
agent-pane.open-in-menu/several-browsers Apple System Colors unchanged 0% own chips.css
agent-pane.path-chip/file Apple System Colors Light unchanged 0% own chips.css
agent-pane.path-chip/file Apple System Colors unchanged 0% own chips.css
agent-pane.path-chip/folder Apple System Colors Light unchanged 0% own chips.css
agent-pane.path-chip/folder Apple System Colors unchanged 0% own chips.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

@teamleaderleo

teamleaderleo commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by nx-chat on big-red · took over from session 01a1602e

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 23, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Found 9 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpabtpgkr9/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpd5zgxv_u/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
nightly.yml must derive the embedded key and sign every appcast through the helper/
nightly.yml must derive the embedded key and sign every appcast through the helper
View Logs
test_every_routed_input_triggers_the_workflow (main.PullRequestTiers.test_every_rou
ted_input_triggers_the_workflow) (path='.claude/settings.json')
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

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-er3na created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 14 of 19 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 69 h, and no lane holds a lease on it. Adopted by the orphan sweep: merged feat-cmux-next in at 11eaf48. A later pass queues it for the merge hub if it is reviewed, small and red only on base reds.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra xhigh, next-review): BLOCK at 11eaf48

  • [P2] chips.css:311: The fixed playback offset overlaps native controls on short videos. Videos have no minimum height. A 1920×400 recording renders at 480×100; the new buttons occupy y=45–73, overlapping WebKit’s bottom control bar at y=63–94 and intercepting its clicks. Previously, these buttons occupied y=6–30. Use a height-aware placement or move actions outside short players, and cover a short video in the browser tests.

@cursor

cursor Bot commented Oct 27, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo
teamleaderleo merged commit 575ec4d into feat-cmux-next Oct 27, 2026
145 of 152 checks passed
@teamleaderleo
teamleaderleo deleted the inline-media-video-hit-targets branch October 27, 2026 14:42
@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant