Skip to content

ui/motion: spring token, sliding indicator, view swap, hover and depth primitives - #33766

Merged
teamleaderleo merged 11 commits into
feat-cmux-nextfrom
lane/ui-motion
Nov 3, 2026
Merged

teamleaderleo merged 11 commits into
feat-cmux-nextfrom
lane/ui-motion

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Leo (2026-11-03), after sending a short game menu animation: "i thought was cute and cool and i wanted to have more... nice stuff? around the app". The reference shows a chunky pill tab bar whose highlight slides between tabs, panels swapping while it moves, a stylised wipe between views and a slowly moving background layer for depth.

This PR adds that vocabulary as shared, budgeted primitives and puts the first one to use:

  • Motion tokens. schemas/motion-scale gains the one spring (the chat switch's SWITCH_SPRING) as a linear() easing run over the large step (240 ms; visibly settled by about 140 ms). The generator writes --cmux-ease-spring (CSS) and MOTION_SPRING / MOTION_SPRING_STEP (TypeScript); the native copy is unchanged (the app keeps its own spring physics). chatSwitch.ts now reads the token instead of its own copy. Where the engine has no linear() easing (WebKit before Safari 17.2, which macOS 14.0 and 14.1 ship), Element.animate() throws on it, so every spring use (these primitives and the chat switch) goes through springEasing(), which checks CSS.supports and falls back to the ease-out. The popup's --ui-enter-ease / --ui-exit-ease are not folded in: cubic-bezier(0.2, 0, 0, 1) and the scale's ease-out draw visibly different curves, so folding them would change every popup's close and the panels' entrance.
  • ui/motion/SlidingIndicator: a selection highlight for tab bars, segmented controls and pickers. The item's selected state changes on the click; the highlight is placed on the new item in the same commit and one finite Web Animation carries it there on transform only (no layout shift), interruptible from its drawn position. First frame is final (no motion on mount or on resize).
  • ui/motion/ViewSwap: an entrance for swapped content (fade, edge slide, a slanted wipe, an accent sweep). The new content is in the DOM and interactive on the frame of the swap; there is no snapshot of the old content.
  • Hover and press utilities (.ui-hover-fill, .ui-reveal-host / .ui-reveal): fill over 80 ms, a revealed control fades in over 120 ms and out over 80 ms, stays shown while its menu is open (data-popup-open), and a press changes nothing (no flash).
  • ui/motion/DepthLayer: two soft accent washes behind a surface that lean toward the pointer (event-driven), or drift once.
  • Applied first to the ACP inspector's Wire / Session view switch (the Session Info event inspector's only tabs in the webviews: Session Info's own panel has no tab bar today). The pressed plate now travels between the two.

Not touched: the model picker (waits on #32980), Home and New Tab (another lane is migrating them right now). The depth layer and view swap are applied to Home and New Tab in a follow-up once that migration lands.

Gallery variants and picks

Entry Variants Picked, and why
ui.motion-sliding-indicator pill-spring, pill-ease, plate-spring, underline-spring, today pill-spring: the reference's chunky pill, landing fast with a touch of give. The inspector uses the plate look of the same primitive to match its toolbar.
ui.motion-view-swap slide, fade, sweep, wipe, none slide: says where the view comes from in 8 px and never hides content. Sweep is the stylised wipe kept for surfaces that want a performance; wipe leaves part of the new view unclickable for up to 180 ms.
ui.motion-hover-feedback scale, blink, slow, press-dip scale (80 fill, 120 / 80 reveal, no press): the motion-and-polish rules 6 and 8.
ui.motion-depth-layer parallax, drift, drift-parallax, still parallax: costs nothing while the pointer is still. Drift gives a live background but runs the compositor for 24 s after each show.

Design references: zenless-zone-zero/live/motion-sunbringer-menu-animation-sheet, claude/live/settings-transcript-controls, cursor/live/hover-thread-row-pin-and-details.

Loops, timers and observers (stop conditions)

  • SlidingIndicator: no timer, no frame loop. One finite Web Animation per selection change (240 ms), cancelled by the next change and on unmount. One ResizeObserver on the host and its items (re-places with no motion), disconnected on unmount.
  • ViewSwap: no timer, no frame loop. Finite Web Animations per swap (at most 240 ms), cancelled by the next swap and on unmount.
  • DepthLayer: drift is one CSS animation with iteration-count: 1 (24 s), paused while the page is hidden (one visibilitychange listener); parallax runs only on pointermove over the surface and settles within 240 ms of the last one. Both listeners are removed on unmount. Motion off, a zero motion token or Reduce Motion: still, and no pointer listener.
  • Every primitive reads one motionMode(): motion off or a hidden page places at once; Reduce Motion places the indicator at once and turns every swap look into the fade.

Performance

bench/motion-tabs.bench.ts (new; the model-picker-open bench pattern on the shared bench/stability.ts and PERF_ROW): a real press and release on the next tab, 5 contexts x 6 switches, headless Chromium and WebKit on the Linux pool. "Before" for the gallery is the today variant (each item fills itself at once, the base behavior); "before" for the inspector is the same bench run against the base tree.

metric before after delta harness or run link
inspector switch, press to selected frame p50 / p95 (Chromium) 15.0 / 15.5 ms 15.1 / 15.6 ms +0.1 ms (noise) before 41630104068, after 41628201530
inspector switch, press to selected frame p50 / p95 (WebKit) 15.0 / 15.0 ms 15.0 / 16.0 ms 0 / +1 ms (one frame quantum) same
inspector shift frames (max, both engines) 0 0 0 same
inspector CLS (max, Chromium) 0.0002 0.0002 0 (on base already, not this change) same
inspector settle p50 (Chromium / WebKit) 98 / 96 ms 265 / 257 ms +167 / +161 ms: the 240 ms slide, on transform, after the selection already painted same
inspector idle wakeups after settle (both) 0 0 0 same
inspector idle renderer CPU, 2 s (Chromium) 2.3 ms 1.9 ms -0.4 ms (noise) same
gallery tabs, press to selected frame p50 (Chromium, today to pill-spring) 15.9 ms 15.8 ms -0.1 ms after run
gallery tabs shift frames / CLS (max) 0 / 0 0 / 0 0 after run
gallery tabs idle wakeups / CPU (Chromium) 0 / 1.1 ms 0 / 1.1 ms 0 after run

The selection paints in the first frame either way; the highlight's travel happens after it and leaves nothing running.

Testing

  • src/ui/motion/motion.test.tsx (jsdom): first frame places the highlight with no animation; a selection change places it at once and slides on transform only, on the spring; Reduce Motion and motion off do not slide; an engine without linear() easing slides on the ease-out instead of throwing (fails before the fallback); a view swap shows the new content in the same commit and animates paint only; every swap look keys only opacity, transform or clip-path.
  • test/motion-scale.test.ts: the CSS and TS copies carry the spring; the spring starts and ends at rest and settles within its step.
  • bun run check and the tests above ran on the fleet: bun run check exit 0, 18 tests pass with the chat switch suite (41636481602).

Observed / Not run

  • Observed: the bench numbers above; the unit tests and bun run check on the fleet.
  • Not run: a look in a tagged app build (the inspector is a Debug surface; the gallery variants show every look).

Changelog

Changed: The ACP inspector's Wire / Session switch slides its highlight between the two views.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits November 3, 2026 03:31
…th primitives

The motion scale gains the one spring (chatSwitch's SWITCH_SPRING) as a
CSS linear() token, --cmux-ease-spring and MOTION_SPRING, run over the
large step. ui/motion adds four primitives with gallery variants:
SlidingIndicator (a selection highlight that travels on transform),
ViewSwap (an entrance on swapped content that never delays it),
hover and reveal utilities (fill 80 ms, reveal 120 in / 80 out, no
press), and DepthLayer (washes that lean toward the pointer, or drift
once). The ACP inspector's Wire / Session switch uses the indicator.
bench/motion-tabs.bench.ts measures response, shift, settle and idle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 8d73ef1: 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=pr33766 -f ref=lane/ui-motion -f platform=macos -f backend_mode=local

Gallery before/after for ca23caa: 16 states rendered, 10 images differ, 3319 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41659499980 -R manaflow-ai/cmux -n gallery-advisory-33766-ca23caaab82325d9ae51d471feb7de997e36ce20 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-switch/first-chat Apple System Colors Light unchanged 0% own chatSwitch.ts
agent-pane.chat-switch/first-chat Apple System Colors unchanged 0% own chatSwitch.ts
agent-pane.chat-switch/second-chat Apple System Colors Light unchanged 0% own chatSwitch.ts
agent-pane.chat-switch/second-chat Apple System Colors unchanged 0% own chatSwitch.ts
agent-pane.inspector/chat-menu Apple System Colors Light unchanged 0% own Inspector.tsx
agent-pane.inspector/chat-menu Apple System Colors unchanged 0% own Inspector.tsx
agent-pane.inspector/wire-log Apple System Colors changed 0.026% own Inspector.tsx
agent-pane.inspector/wire-log Apple System Colors Light changed 0.0236% own Inspector.tsx
agent-pane.inspector-colours/errors Apple System Colors Light unchanged 0% own Inspector.tsx
agent-pane.inspector-colours/errors Apple System Colors unchanged 0% own Inspector.tsx
pages.agent-activity/empty Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/empty Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/split Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/split Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/split-earlier-frame Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/split-earlier-frame Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/split-no-frames Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/split-no-frames Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/timeline Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/timeline Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/grid Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/grid Apple System Colors unchanged 0% own desktop.css
pages.agent-activity/grid-viewer Apple System Colors Light unchanged 0% own desktop.css
pages.agent-activity/grid-viewer Apple System Colors unchanged 0% own desktop.css
ui.motion-depth-layer/parallax Apple System Colors Light new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/parallax Apple System Colors new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/drift Apple System Colors Light new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/drift Apple System Colors new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/drift-parallax Apple System Colors Light new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/drift-parallax Apple System Colors new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/still Apple System Colors Light new 0% own DepthLayer.gallery.tsx
ui.motion-depth-layer/still Apple System Colors new 0% own DepthLayer.gallery.tsx

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

Passes: CI passes on ca23caaab8.

CI passes on ca23caaab8 (run 41659500836 attempt 1).

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.

web and size checks: green

Shipped in:

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/41674078994 at 633c1ae failed: cmux-next Release compile (fleet fast check).
Those jobs last passed at f8812df. This pull request is one of 4 merged since: #34033, #34034, #34000, #33766.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added risk:high Risk tier (docs/ci/risk-tiers.md) and removed risk:normal Risk tier (docs/ci/risk-tiers.md) labels Nov 3, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 47513d2

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 4. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 47513d2
Visual verdict: no images; Leo tries the build

  1. [P2] [follow-up] webviews/src/ui/motion/SlidingIndicator.tsx:127: Resizes during a slide are discarded. Finishing the animation does not remeasure, so a font load or resize can leave the highlight misaligned until another selection or resize. Cancel and reposition when geometry changes, or remeasure on finish.

  2. [P2] [follow-up] webviews/src/ui/motion/motion.css:109: .ui-reveal overrides .ui-hover-fill’s entire transition declaration. Controls using both classes, including the gallery demo, snap their background instead of fading over 80 ms. Compose the transitions while keeping the reveal’s separate duration.

  3. [P2] [follow-up] webviews/src/ui/motion/DepthLayer.tsx:60: Mounting parallax while the document is hidden permanently skips its pointer listeners. Showing the page does not rerun this effect. Subscribe to visibility changes so parallax starts when the page becomes visible.

  4. [P2] [follow-up] webviews/src/agent-session/acpmux/Inspector.tsx:220: After screenshots are missing. Verify the inspector switch in the build and supply visual evidence.

Generator check passed; isolated hook probes reproduced findings 1 and 3. Full tests were unavailable without Bun and dependencies.

Follow-ups:

  • Reconcile indicator geometry after a resize during animation.
  • Preserve fill transitions when composing reveal utilities.
  • Activate parallax after a hidden mount becomes visible.
  • Verify and capture the inspector switch visually.

@blacksmith-sh

blacksmith-sh Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Found 2 test failures on Blacksmith runners:

Failures

Test View Logs
test_every_compile_job_names_its_warm_sources (main.ThisTree.test_every_compile_job
_names_its_warm_sources)/
test_every_compile_job_names_its_warm_sources (main.ThisTree.test_every_compile_job
_names_its_warm_sources)
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.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 47513d2: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

check-default-cursor refuses a pointing hand in app UI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa
@cursor

cursor Bot commented Nov 3, 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

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 18284cd

BLOCK at 18284cd
Visual verdict: no images; Leo tries the build

  1. [P1] [blocking] SlidingIndicator.tsx:112: Add a fallback for engines without linear() easing. WebKit shipped with macOS 14.0–14.1 does not support it, so switching the inspector’s existing Wire / Session control throws from element.animate() inside the layout effect and triggers the pane’s error boundary. The previous switch worked without this API.

  2. [P2] [follow-up] SlidingIndicator.tsx:127: Resize notifications during a slide are discarded, and completion never measures again. A resize or font change during those 240 ms leaves the highlight at stale coordinates indefinitely. Cancel and reposition on resize, or reconcile when the animation finishes.

  3. [P2] [follow-up] DepthLayer.tsx:60: Mounting while hidden skips the pointer listeners permanently. Showing the page does not rerun this effect, so parallax remains disabled. Reconcile listener installation when visibility or motion preferences change.

  4. [P2] [follow-up] Inspector.tsx:220: Supply visual evidence for the inspector switch and new gallery variants; this head has no images.

Generator consistency and TypeScript/TSX syntax checks passed. Bun tests and real-browser checks were unavailable.

@teamleaderleo teamleaderleo removed the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
WebKit before Safari 17.2 (macOS 14.0 and 14.1) has no linear() easing, and
Element.animate() throws on it inside a layout effect. springEasing() checks
CSS.supports and returns the ease-out there; the sliding indicator, the view
swap and the chat switch use it. Regression test: an engine without linear()
slides on the ease-out (fails before this change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 546c1b6

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 4. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 546c1b6

Visual verdict: no images; Leo tries the build

Generator consistency check passed. Runtime tests/build could not run: Bun and dependencies are absent.

  1. [P2] [follow-up] webviews/src/ui/motion/SlidingIndicator.tsx:130 — Resize notifications are discarded while sliding. If a resize or font load changes the selected item during those 240 ms, finishing only clears slide.current; the highlight remains at stale coordinates until another selection or resize. Cancel and re-place on resize, or remeasure after finishing.

  2. [P2] [follow-up] webviews/src/ui/motion/DepthLayer.tsx:60 — Mounting while the document is hidden permanently skips the parallax listeners. Becoming visible doesn’t rerun this effect, whose dependencies are only look and surface. Synchronize listener installation with visibility changes so a background-mounted surface gains parallax when shown.

  3. [P2] [follow-up] webviews/src/ui/motion/motion.css:176 — Drift bypasses motionMode(). With --agent-motion-in: 0ms, the CSS still starts both 24-second animations; data-agent-motion="reduced" is also absent from the disabling selector. Apply the shared motion gate to drift so these settings keep it still as documented.

  4. [P2] [follow-up] webviews/src/agent-session/acpmux/Inspector.tsx:220 — No after images are available. Capture or inspect the changed switch in a tagged build.

Follow-ups:

@teamleaderleo teamleaderleo removed the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 546c1b6: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
teamleaderleo and others added 2 commits November 3, 2026 05:01
The design-token check now covers radius and easing: the underline's 1px
radius becomes the capsule, and the drift runs on --cmux-ease-out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa
@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
cmux-bot[bot]
cmux-bot Bot previously approved these changes Nov 3, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 0e6cd58: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 3, 2026 14:06 Inactive
@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 3, 2026 14:07 Inactive
@cmux-bot
cmux-bot Bot dismissed their stale review November 3, 2026 14:13

A newer verdict blocks 906839e (no independent SHIP at the head).

teamleaderleo and others added 3 commits November 3, 2026 06:16
popover-instant-open lists every Web Animations call under webviews/src: add the
sliding indicator's and the view swap's. The agent pane's no-capsules check
reads the underline's 999px radius as a pill: a 2px rule needs none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 8d73ef1

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 3. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 8d73ef1
Visual verdict: no images; Leo tries the build

  1. [P2] [follow-up] webviews/src/ui/motion/SlidingIndicator.tsx:130: Resizes during a slide are discarded, and onfinish never remeasures. A font load or layout resize during the 240 ms animation leaves the highlight misaligned until another resize or selection change. Cancel and reposition on resize, or reconcile when the slide finishes.

  2. [P2] [follow-up] webviews/src/ui/motion/motion.css:176: The drift selectors have specificity (0,4,0), exceeding the pause and root motion-off selectors’ (0,3,0). Their animation shorthand therefore overrides both animation-play-state: paused and animation: none. Increase the stop rules’ specificity or lower the drift rules’ specificity so these controls work independently of global CSS.

  3. [P2] [follow-up] webviews/src/agent-session/acpmux/Inspector.tsx:220: No after images were supplied. Visually verify the indicator in the build.

Generator consistency passed. Bun tests could not run because Bun and dependencies are unavailable.

Follow-ups:

  • Reconcile indicator geometry after a resize during animation.
  • Fix depth animation stop-rule specificity.
  • Verify the inspector visually in the build.

@teamleaderleo teamleaderleo removed the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
cmux-bot[bot]
cmux-bot Bot previously approved these changes Nov 3, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 8d73ef1: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 3, 2026 15:01 Inactive
@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 3, 2026 15:01 Inactive
@cmux-bot
cmux-bot Bot dismissed their stale review November 3, 2026 15:11

A newer verdict blocks ca23caa (no independent SHIP at the head).

@teamleaderleo teamleaderleo left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (codex gpt-6.1-sol xhigh, next-review, since=20261103T152851Z): SHIP at ca23caa

SHIP at ca23caa

Visual verdict: no introduced regression in the supplied images; paired differences are confined to timestamps.

  1. [P2] [follow-up] SlidingIndicator.tsx:130: Resizes during a slide are discarded, and completion never remeasures. A font change or wrapping during travel leaves the highlight at stale coordinates or dimensions until another resize or selection change. Cancel and place immediately, or remeasure on completion.

  2. [P2] [follow-up] DepthLayer.tsx:60: Mounting parallax while hidden or motion-disabled permanently skips pointer listeners. Showing the surface or enabling motion does not rerun this effect. Reevaluate listener registration when visibility or motion settings change.

Follow-ups:

  • Reconcile indicator resizes received during animation.
  • Restore parallax listeners after visibility or motion changes.

This branch was previously deployed

1 inactive deployment
ci-routing-agent — ca23caaa Deployed Nov 3, 2026 by cmux-bot[bot] via wait for same-key tree publisher #106566
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant