Skip to content

cmux-next tests: the first tooltip's fade is read with the surface clock held (macOS 27 lane) - #20742

Merged
teamleaderleo merged 10 commits into
feat-cmux-nextfrom
op-next-theme/tooltip-fade-27
Oct 15, 2026
Merged

teamleaderleo merged 10 commits into
feat-cmux-nextfrom
op-next-theme/tooltip-fade-27

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

TooltipSurfaceTests.theFirstTooltipFadesInRisingAndAWarmNeighborsIsThereAtOnce (from #20528) failed on the macOS 27 report-only lane at the opacity read: "the first tooltip did not fade in" (run 38638271559). #20725 stopped that lane from exiting early, which is why the failure only showed up now.

Cause: the environment, not the product. The tooltip does fade in. The failure has two sources, both on the GitHub swift test lane, which runs every suite in one process on one main actor:

  1. Timing. The test reads layer.animation(forKey: "opacity") after async waits. On a loaded host the 120 ms fade has finished, and Core Animation has removed it, before the test gets there. The same mini and code passed an hour later (run 38647037583).
  2. Shared global state. Motion.reduceMotionOverride is process-global, so another suite can set or clear it while a tooltip test waits out the hover delay. Fixing (1) exposed this: in run 38662157909 the Reduce Motion test saw a rise that the tooltip legitimately added after another suite had turned Reduce Motion off.

Fix (test only):

  • The test sets the tooltip surface layer's speed to 0, so its animations hold still, the same way the hover delay holds on the manual clock. The test reads the fade the tooltip actually starts, however late it gets there.
  • Both fade tests work out from the fade's length which Reduce Motion setting the tooltip used when it showed: Reduce Motion caps a fade at one crossfade, so 0.1 s means on and 0.12 s means off. The test then checks that the rise matches that setting.
  • A setting different from the test's own override is accepted only if another suite posted reduceMotionDidChange before the show.
  • The first test also pins Motion.liveResizeOverride off, because a live resize drops the rise.

All the existing assertions are kept.

Testing

All runs use cmux-ci run --class light --label cmux --script scripts/ci/run-swift-testing-suites.sh --arg Packages/macOS/CmuxNext.

Red (abf6fec, rest waits 300 ms after the show):

  • Steps: db6466f0e9935237d251203a, ac480c85c1511e9b9bdb7bc0, 30a79a4ca08c1420d80e335a, all on aws-m4pro-9 (has a display).
  • Both fade tests fail at the opacity read with shown Back, visible true, same layer true, keys [], opacity 1.0.

Green:

  • d3a2fc3: step bebc7978ca8e7eae02753523 on aws-m4pro-8.
  • fa7fd95: step 3ac4cc4f6294660babfc59c1 on aws-m4pro-9.
  • All three tooltip panel tests pass.

Not counted or not this PR:

  • Steps that landed on headless hosts skip the fade tests, so they are not counted.
  • SidebarInsertWhileDisplayAsleepTests is a base red in every one of those steps.

GitHub swift test lane: full-ci is added only to run cmux-next swift test on the GUI mini. Since #20543, PRs run swift test only under full-ci. The other full-ci lanes run too, but this PR is not checking them.

Not fixed here: theSurfaceIsFrostedGlassOrOpaqueUnderReduceTransparency sometimes reads shadowOpacity 0 on that lane. It already did on base (run 38638271559), and it passes on the fleet.

Changelog

none

🤖 Generated with Claude Code

The macOS 27 report-only lane fails theFirstTooltipFadesInRisingAndAWarmNeighborsIsThereAtOnce
at the opacity read with no detail. The failure now names what the panel and its layer
hold (shown, visible, keys, the rise's age, motion policy), to tell a timing or
environment gap from a product bug.

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

cursor Bot commented Oct 14, 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.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: ccd694df-0e49-464e-a5d5-9707c286e599

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Not verified: macOS jobs did not run: compile and app tests were skipped on 93bf8a9bfa; ci-status is green without them.

CI passes on 93bf8a9bfa (run 38687599009 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-bgshz created for this PR by the cmux coordinator.

@blacksmith-sh

This comment has been minimized.

@teamleaderleo teamleaderleo added the full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks. label Oct 14, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo removed the full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks. label Oct 14, 2026
teamleaderleo and others added 2 commits October 14, 2026 15:58
…delay (red)

The macOS 27 lane runs every suite in one process, so the test can come back to
read the fade after it has finished and Core Animation has removed it: the lane
failed at the opacity read once (run 38638271559) and passed on the same mini and
code an hour later (run 38647037583). Waiting 300 ms after the show, longer than
the 120 ms fade, makes that deterministic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e test reads them

The tooltip tests read the fade the first tooltip starts after async waits. On a
loaded host (the macOS 27 lane runs every suite in one process) the 120 ms fade
can finish and be removed before the read: no product bug, the tooltip fades.
The surface layer's clock now stands still in the test (speed 0), as the hover
delay does on the manual clock, so the read sees the fade however late it comes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo added the full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks. label Oct 14, 2026
@cursor

cursor Bot commented Oct 14, 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 changed the title cmux-next tests: the first tooltip's fade on the macOS 27 lane cmux-next tests: the first tooltip's fade is read with the surface clock held (macOS 27 lane) Oct 15, 2026
teamleaderleo and others added 4 commits October 14, 2026 17:48
… the tooltip read

On the one-process GitHub lane another suite can set or clear the process-global
Motion.reduceMotionOverride while a tooltip test awaits the hover delay
(underReduceMotionTheTooltipFadesWithNoRise saw a rise, run 38662157909). The
fade's length tells which gate the tooltip read (Reduce Motion caps it at one
crossfade); the rise must follow it, and a read that differs from the test's own
override needs a change notification from another suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d; pin live resize

Review: a change by another suite after the show (the 300 ms wait) could excuse a
tooltip that ignored Reduce Motion. The watch now stops at the show. The first
test also pins Motion.liveResizeOverride off, since another suite's live resize
drops the rise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@blacksmith-sh

This comment has been minimized.

@teamleaderleo
teamleaderleo merged commit f41c55f into feat-cmux-next Oct 15, 2026
108 of 125 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-theme/tooltip-fade-27 branch October 15, 2026 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant