Skip to content

Stop interrupting focused work: sidebar jumps, Computer Use focus steal, quit dialog on logout - #14961

Merged
teamleaderleo merged 11 commits into
mainfrom
stop-interrupting-focused-work
Sep 27, 2026
Merged

teamleaderleo merged 11 commits into
mainfrom
stop-interrupting-focused-work

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

Three places where cmux interrupted work the user was focused on.

Focused-pane notifications no longer move the workspace. A notification for the pane you're already looking at turned off the banner, sound, and pane flash but still reordered the sidebar, so the workspace you were typing in jumped. TerminalNotificationDeliveryDecision now turns off reorderWorkspace in its focused-pane case, and TerminalNotificationStore.applyNotification applies the same rule (keepingFocusedWorkspaceInPlace(isFocusedPane:)) once it knows the target pane is focused. History, unread state, and the automation hook still run. Notifications for other panes, tabs, or with cmux in the background still reorder as before.

An agent's Computer Use tool call no longer steals focus. The first functional cmux-cua tool call opens Computer Use setup, and it did so with NSApp.activate(ignoringOtherApps:), makeKeyAndOrderFront, and orderFrontRegardless, pulling cmux over whatever app you were typing in. ComputerUseOnboardingCoordinator now passes who asked. From Settings, the window still activates cmux and takes focus. From a tool invocation: if cmux is active, the window is ordered front without becoming key; otherwise it stays behind the active app, the Dock icon bounces once, and the window comes forward when you switch to cmux.

The tool path still turns on computerUse.enabled without checking the isComputerUseUXEnabled PostHog flag. That's intended: the flag gates the menu bar and automatic target following, and explicitToolRequestEnablesComputerUseEvenWhenMenuFeatureIsOff pins the opt-in-on-first-explicit-request behavior from the onboarding work. The policy kill switch (computerUseDisabledByPolicy) is still checked first. So this PR leaves it alone.

Quit confirmation no longer blocks logout, restart, or shutdown. applicationShouldTerminate showed the quit dialog for every quit, so with confirmation on, a logout or restart stalled until the user answered it. It now reads kAEQuitReason from the current quit Apple Event and skips the dialog for kAELogOut, kAEReallyLogOut, kAEShowRestartDialog, kAERestart, kAEShowShutdownDialog, and kAEShutDown, going straight to the existing confirmed-termination path (session snapshot, cleanup). The decision lives in CmuxSettings as QuitRequestReason plus a quitReason parameter on QuitConfirmationStore.shouldShowConfirmation. Cmd+Q, the menu, and the Dock behave as before.

Verification

  • swift test --package-path Packages/macOS/CmuxSettings --filter QuitConfirmationPolicyTests: 8 tests passed on 181c74b. With the quitReason guard removed, sessionEndNeverWarns failed both cases, so the test detects the bug.
  • App-host tests added, not run locally (this Mac doesn't run app-host builds; CI runs them):
    • cmuxTests/TerminalNotificationDeliveryDecisionTests.swift. Commit 98a176a adds it alone and it should fail there on reorderWorkspace; 5c5cacc is the fix.
    • ComputerUseOnboardingIntentTests.toolInvocationPresentsWithoutTakingFocus: tool requests reach the presenter as .toolInvocation and Settings as .userAction, and the activation plan for each origin and app-active state.
  • xcrun swiftc -parse on every changed Swift file.
  • Not verified: the live window ordering and a real logout. Both need a tagged build.

Changelog

Fixed: A notification for the pane you're looking at no longer moves its workspace in the sidebar, an agent's first Computer Use tool call no longer pulls cmux over the app you're typing in, and the quit confirmation no longer blocks logout, restart, or shutdown

🤖 Generated with Claude Code


Summary by cubic

Fixes three ways cmux interrupted focused work: notifications for the pane you're already looking at no longer move its workspace in the sidebar, the first Computer Use tool call no longer steals focus from the active app, and the quit confirmation no longer blocks logout, restart, or shutdown.

Focused-pane notifications

  • A notification for the pane you're looking at turns off sidebar reordering, so the workspace you're typing in stays put; history, unread state, and the automation hook still run.
  • Notifications for other panes, tabs, or with cmux in the background reorder as before.

App-level focus and quit fixes

  • A cmux-cua tool call opens Computer Use setup without activating cmux: if cmux is active the window orders front without key focus, otherwise it stays behind the active app and bounces the Dock icon once; Settings still activates and focuses the window.
  • Quit confirmation skips the dialog for logout, restart, and shutdown by reading kAEQuitReason, going straight to the confirmed-termination path; Cmd+Q, the menu, and the Dock behave as before.
  • The tool path still enables computer use without checking the UX flag — intentional, and the policy kill switch is still checked first.
  • Covered by QuitConfirmationPolicyTests (including the failing-without-fix sessionEndNeverWarns case) and app-host tests for the delivery decision and activation plan; live window ordering and a real logout are not yet verified.

Written for commit f587aa1. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features
    • Computer-use onboarding opened from a tool no longer takes focus away from your current app. Opening it from Settings still brings cmux forward and focuses the window.
  • Bug Fixes
    • Quit confirmations are skipped when macOS is logging out, restarting, or shutting down.
    • Focused terminal notifications no longer reorder the workspace. They remain inline and avoid desktop, sound, and pane-flash alerts.

teamleaderleo and others added 5 commits September 27, 2026 06:15
An agent's first Computer Use tool call opened the setup window with
NSApp.activate(ignoringOtherApps:) and orderFrontRegardless, pulling cmux
over whatever app the user was typing in. The onboarding coordinator now
tells the window who asked. A Settings action still activates cmux and
focuses the window. A tool invocation orders the window front without
taking key focus when cmux is already active; otherwise it keeps the
window behind the active app, bounces the Dock icon, and brings the
window forward when the user switches to cmux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A notification for the pane the user is looking at suppresses desktop,
sound, and pane flash but still moves its workspace in the sidebar. This
test expects reorderWorkspace to be off in that case and fails until the
fix in the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A notification for the pane the user is already looking at turned off
desktop, sound, and pane flash but still reordered the sidebar, so the
workspace being typed in jumped. The focused-pane delivery decision now
also turns off reorderWorkspace, and the terminal notification store
applies the same rule once it knows the target pane is focused, so both
the Feed lane and direct terminal notifications leave that workspace in
place. History, unread state, and the automation hook are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
applicationShouldTerminate showed the quit dialog for every quit, so with
confirmation enabled a logout, restart, or shutdown stalled until the
user answered it. It now reads kAEQuitReason from the current quit Apple
Event and, for the logout, restart, and shutdown codes, goes straight to
the confirmed-termination path. The decision is QuitRequestReason plus a
quitReason parameter on QuitConfirmationStore.shouldShowConfirmation,
covered by CmuxSettings package tests. Cmd+Q, the menu, and the Dock are
unchanged.

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

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Warning

Review limit reached

Next included review available in 3 seconds.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 5d94a48d-2649-4e9c-b249-b534e66968f9

📥 Commits

Reviewing files that changed from the base of the PR and between 24e55c5 and f587aa1.

📒 Files selected for processing (14)
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitConfirmationStore.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitRequestReason.swift
  • Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/DomainSettingsStoreTests.swift
  • Sources/App/ComputerUseOnboardingCoordinator.swift
  • Sources/App/ComputerUseOnboardingWindowController.swift
  • Sources/App/ComputerUseUXCoordinator.swift
  • Sources/AppDelegate.swift
  • Sources/TerminalNotificationDeliveryDecision.swift
  • Sources/TerminalNotificationStore.swift
  • cmux.xcodeproj/project.pbxproj
  • cmuxTests/ComputerUseOnboardingIntentTests.swift
  • cmuxTests/ComputerUseToolOnboardingFixture.swift
  • cmuxTests/ComputerUseUXTests.swift
  • cmuxTests/TerminalNotificationDeliveryDecisionTests.swift

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: db550b8f-93ee-4f14-9ea8-48eab458ee1d

📥 Commits

Reviewing files that changed from the base of the PR and between ef8b037 and 24e55c5.

📒 Files selected for processing (14)
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitConfirmationStore.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitRequestReason.swift
  • Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/DomainSettingsStoreTests.swift
  • Sources/App/ComputerUseOnboardingCoordinator.swift
  • Sources/App/ComputerUseOnboardingWindowController.swift
  • Sources/App/ComputerUseUXCoordinator.swift
  • Sources/AppDelegate.swift
  • Sources/TerminalNotificationDeliveryDecision.swift
  • Sources/TerminalNotificationStore.swift
  • cmux.xcodeproj/project.pbxproj
  • cmuxTests/ComputerUseOnboardingIntentTests.swift
  • cmuxTests/ComputerUseToolOnboardingFixture.swift
  • cmuxTests/ComputerUseUXTests.swift
  • cmuxTests/TerminalNotificationDeliveryDecisionTests.swift

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The changes distinguish session-ending quits from user quits, vary onboarding window activation by presentation origin, and prevent notification effects from reordering the focused workspace.

Changes

Quit reason handling

Layer / File(s) Summary
Map quit reasons and apply confirmation rules
Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitRequestReason.swift, Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/QuitConfirmationStore.swift, Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/DomainSettingsStoreTests.swift
Apple Event quit codes map to a request reason. Session-ending requests skip confirmation. Tests cover the event-code mappings and confirmation behavior.
Pass quit reason through termination
Sources/AppDelegate.swift
AppDelegate reads the Apple Event quit reason, records it in the termination-start breadcrumb, and passes it to the confirmation check.

Onboarding presentation origin

Layer / File(s) Summary
Pass presentation origin through onboarding
Sources/App/ComputerUseOnboardingCoordinator.swift, Sources/App/ComputerUseUXCoordinator.swift, cmuxTests/ComputerUseToolOnboardingFixture.swift, cmuxTests/ComputerUseUXTests.swift
The onboarding presenter accepts an origin. Settings requests use .userAction; tool invocations use .toolInvocation with the overview starting point. Coordinator wiring and test closures use the updated signature.
Select window activation by origin
Sources/App/ComputerUseOnboardingWindowController.swift, cmuxTests/ComputerUseOnboardingIntentTests.swift
The controller focuses user-initiated presentations. For tool invocations, it shows the window without focus when cmux is active, or waits for cmux activation when inactive. Tests check the origins and activation plans.

Focused-pane notification ordering

Layer / File(s) Summary
Preserve workspace order for focused panes
Sources/TerminalNotificationDeliveryDecision.swift, Sources/TerminalNotificationStore.swift, cmuxTests/TerminalNotificationDeliveryDecisionTests.swift, cmux.xcodeproj/project.pbxproj
Notification delivery adjusts effects based on whether the pane is focused. Tests cover focused and unfocused delivery decisions and effect values. The Xcode project registers the test file.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant Tool
  participant ComputerUseOnboardingCoordinator
  participant ComputerUseUXCoordinator
  participant ComputerUseOnboardingWindowController
  participant AppKit
  Tool->>ComputerUseOnboardingCoordinator: Request automatic onboarding
  ComputerUseOnboardingCoordinator->>ComputerUseUXCoordinator: Present overview with toolInvocation origin
  ComputerUseUXCoordinator->>ComputerUseOnboardingWindowController: Present starting point and origin
  alt cmux is active
    ComputerUseOnboardingWindowController->>ComputerUseOnboardingWindowController: Show window without focus
  else cmux is inactive
    ComputerUseOnboardingWindowController->>AppKit: Order window behind active app and request Dock attention
    ComputerUseOnboardingWindowController->>AppKit: Observe cmux activation
    AppKit-->>ComputerUseOnboardingWindowController: Notify cmux activation
    ComputerUseOnboardingWindowController->>ComputerUseOnboardingWindowController: Bring visible window forward
  end
Loading

Suggested reviewers: austinywang, azooz2003-bit

Merge Risk: ⚪ Minimal · up to 24e55

The changes are mergeable after normal checks. Live focus, notification ordering, and session-ending quit behavior remain worth validating, but no concrete blocking issue is established.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to 24e55

The main concern is whether a quit request can claim to be part of logout or shutdown and skip the configured warning for dirty workspaces. The other changes appear to preserve their existing permission and notification controls.

Retained concerns

  • Medium · security · inferred: A recognized session-end code in the quit Apple Event now skips confirmation without a visible check that logout, restart, or shutdown is actually underway. If a permitted event sender can supply that code, it can bypass configured dirty-workspace warnings. Sender capability and OS-level restrictions remain unverified.
Security review details

Security Blast Radius

  • inferred — The conditional quit-reason concern affects the local application's confirmation and termination path, including dirty workspaces. The evidence does not establish cross-tenant reachability or an expansion of Computer Use privileges.

Security Findings and Attack Paths

  • inferred — If an event sender authorized to request termination can choose kAEQuitReason, selecting a recognized session-end code would skip the configured warning. The inspected evidence does not establish that an independent sender can do so.

Trust Boundaries and Controls

  • observed — The quit policy defaults missing or unknown reason codes to ordinary quit. The Computer Use tool path retains caller-side ownership checks and runtime policy admission; notification admission retains live-target, lifecycle, mute, and remote-origin controls.

Resilience and Maintainability Implications

  • observed — Skipping the quit dialog does not skip owned runtime cleanup, snapshot handling, or the termination reply path. Focused notifications continue through recording and effect dispatch rather than being discarded.

Hardening Proposals

  • proposed — Establish which senders can set the quit-reason attribute under macOS authorization, then make suppression depend on a trustworthy session-change signal if the attribute alone can be supplied by an ordinary quit requester.

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 inconclusive)

Check name Status Explanation Resolution
Cmux Swift Package Boundaries ❌ Error The focused-notification change keeps independently testable domain logic in the app target. Sources/TerminalNotificationDeliveryDecision.swift adds keepingFocusedWorkspaceInPlace(isFocusedPane:),… Move the notification delivery domain boundary out of the app target. Extend the existing Packages/macOS/CmuxNotifications target with the pure delivery value API, starting with public TerminalNotificationDeliveryDecision; move or split…
Docstring Coverage ❓ Inconclusive Docstring coverage is 32.14% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 28 functions across 12 files. (2 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (23 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Cloud Persistent Session And Early Input ✅ Passed PASS: The pull request does not change Cloud terminal creation, persistent cmux-tui transport, manual panes, PTY readiness, input ownership, or authentication/revision/lease handling. The authoritativ…
Cmux Swift Actor Isolation ✅ Passed No actor-isolation failure is introduced. QuitRequestReason is a pure Sendable value enum in a Swift 6 package with no default MainActor isolation, and QuitConfirmationStore already uses an expl…
Cmux Swift Blocking Runtime ✅ Passed The diff adds no semaphore, blocking wait, sleep, delayed dispatch, polling loop, main-queue sync, or manual lock in production Swift. The new onboarding retry uses `NSApplication.didBecomeActiveNotif…
Cmux Browser Automation Off-Main ✅ Passed PASS: The PR does not change browser socket automation routing. The authoritative diff leaves Sources/TerminalController.swift, ControlCommandExecutionPolicy.swift, and its policy tests unchanged.…
Cmux Expensive Synchronous Load ✅ Passed PASS: The production Swift diff adds notification-effect policy, onboarding activation behavior, and quit-reason classification. It does not add or move an expensive agent-history load, broad scan, la…
Cmux Cache Substitution Correctness ✅ Passed PASS — the pull request does not replace a fresh authoritative read with a cached or opportunistic value. The changed production Swift only adds quit-event reason mapping, presentation activation beha…
Cmux No Hacky Sleeps ✅ Passed PASS. The PR changes only Swift source/tests and Xcode project registration. It introduces no TypeScript, JavaScript, shell, or non-Swift runtime script changes. The non-Swift project-file diff only r…
Cmux Algorithmic Complexity ✅ Passed The production diff adds only constant-time logic. Notification handling copies effects and changes one Boolean field, quit handling uses a fixed switch over Apple Event codes, and onboarding uses fix…
Cmux Swift Concurrency ✅ Passed The diff adds no background Dispatch queues, DispatchGroup, Combine state, completion-handler APIs, or new fire-and-forget Tasks. The only new callback is an AppKit/NotificationCenter activation obser…
Cmux Swift @Concurrent ✅ Passed PASS. The Swift diff introduces no nonisolated async production work, no @concurrent annotation, and no CPU-, file-, or network-heavy async helper call from UI isolation. The new activationPlan …
Cmux Swiftpm Lockfiles ✅ Passed The pull request changes no Package.swift, Package.resolved, .gitignore, workflow, or dependency declaration. Its only cmux.xcodeproj/project.pbxproj changes register `TerminalNotificationDeli…
Cmux Swift Logging ✅ Passed The changed production Swift files add no print, debugPrint, dump, NSLog, ad hoc file logging, or stdout/stderr diagnostics. No file-scoped Logger declaration changes. AppDelegate adds onl…
Cmux User-Facing Error Privacy ✅ Passed The production diff changes notification effects, onboarding window activation, and quit-confirmation routing. It adds no user-facing error, alert, command output, API error body, or recovery text. Th…
Cmux Full Internationalization ✅ Passed PASS: The PR adds no user-facing copy. Production changes only alter quit classification, window activation behavior, and notification effects; added text is developer documentation or operational bre…
Cmux Swiftui State Layout ✅ Passed The pull request does not introduce a SwiftUI state or layout pattern covered by the rule. The changed lines add quit policy, notification effects, and AppKit window activation logic. Existing `@Obser…
Cmux Architecture Rethink ✅ Passed PASS. The diff contains small, local policy fixes with clear owners and invariants. keepingFocusedWorkspaceInPlace(isFocusedPane:) is a pure value transformation shared by the notification decision …
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed The materially changed onboarding window already uses the stable identifier cmux.computerUse.onboarding, and that identifier is registered in cmuxAuxiliaryWindowIdentifiers in both base and head. …
Cmux Source Artifacts ✅ Passed All 14 changed paths are intentional Swift source, tests, or Xcode project configuration. The two added files are product source and a registered test file. No local logs, screenshots, caches, build o…
Cmux No Test Or Debug Seam In Production Source ✅ Passed The changed production Swift files add no test/debug guards or seam-named members. The new activationPlan and keepingFocusedWorkspaceInPlace members have production callers, and `QuitRequestReason…
Title check ✅ Passed The title clearly summarizes the three user-facing changes: preventing sidebar jumps, focus theft, and quit dialogs during logout.
Description check ✅ Passed The description explains the problems, resulting behavior, tests added and run, unverified items, and changelog entry. It uses “Verification” instead of the template’s “Testing” heading, and does not …
Full details: Docstring Coverage

Explanation

Docstring coverage is 32.14% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 28 functions across 12 files. (2 skipped: 1 unsupported, 1 too large.)

Full details: Cmux Swift Package Boundaries

Explanation

The focused-notification change keeps independently testable domain logic in the app target. Sources/TerminalNotificationDeliveryDecision.swift adds keepingFocusedWorkspaceInPlace(isFocusedPane:), a pure value transformation that changes only reorderWorkspace, and applies it in the focused delivery decision. Sources/TerminalNotificationStore.swift applies the same rule in a second delivery path. The new cmuxTests/TerminalNotificationDeliveryDecisionTests.swift tests this logic without UI construction. These files have no AppKit or lifecycle requirement, and the existing Packages/macOS/CmuxNotifications SwiftPM target is already an app dependency. The other changed areas are allowed AppKit/app-lifecycle glue or are already in CmuxSettings.

Resolution

Move the notification delivery domain boundary out of the app target. Extend the existing Packages/macOS/CmuxNotifications target with the pure delivery value API, starting with public TerminalNotificationDeliveryDecision; move or split in its required TerminalNotificationPolicyEffects and TerminalNotificationArrivalDisposition value types, including the focused-pane reorder transformation, and add package tests. Import that API from the app, leaving TerminalNotificationStore as composition and stateful delivery glue. Keep the Computer Use window controller/coordinator and AppDelegate lifecycle code in the app target.

✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch stop-interrupting-focused-work
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

@cursor

cursor Bot commented Sep 27, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@teamleaderleo teamleaderleo added the no-full-ci Records that skipping the macOS suite on a test-only diff is deliberate label Sep 27, 2026
teamleaderleo added a commit that referenced this pull request Sep 27, 2026
…#14987)

Delta CI (#14659) routes diff(last green head, merge), which carries
everything main gained since the pull request last synced. When main
moved further than the pull request, that routes more than the pull
request's own diff: #14961 routed 40 files for a 15-file diff and #14960
43 for 10, picked about 130 unrelated unit test classes, and failed
suite-coverage on main's cmuxUITests/ edits from #14966.

Take the delta only when it is no larger than the pull request diff and
carries no cmuxUITests/ edit the pull request did not make. Otherwise
route the usual pull request diff, as every other skip does.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…-work

# Conflicts:
#	cmux.xcodeproj/project.pbxproj
…-work

# Conflicts:
#	cmux.xcodeproj/project.pbxproj
@teamleaderleo
teamleaderleo merged commit 966b355 into main Sep 27, 2026
66 checks passed
@teamleaderleo
teamleaderleo deleted the stop-interrupting-focused-work branch September 27, 2026 14:25
@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for f587aa1d86: every check was green at merge (21 verified; 16 skipped by policy). Full suite runs on main after merge.

rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 27, 2026
648d5c1 Add a Paste Last Screenshot action with an unbound shortcut (manaflow-ai#14955)
ff61677 ci: avoid partial blobs in catch-up merges (manaflow-ai#15023)
4d0d112 ci: retry transient catch-up GraphQL failures (manaflow-ai#15021)
212e808 ci: attribution scores a lone suspect and reports app-host crashes apart (manaflow-ai#14952)
4cabdf4 test: settle the window before measuring the unread sidebar-row invalidation (manaflow-ai#14568)
12ec99b Add a release-media capture tool for changelog screenshots and clips (manaflow-ai#15010)
ee2cda0 Backfill Unreleased changelog and draft next release cards (manaflow-ai#14999)
be4adf8 Show a brief notice when Cmd+V fails on an oversized image or a timeout (manaflow-ai#14953)
23d22d7 ci: an owned pool the run starts on now beats an earlier one it queues on (manaflow-ai#14993)
05d0190 ci: catch-up posts once per head, says less, and merges inserted declarations (manaflow-ai#15018)
4ee4b21 ci: fail stalled Swift package tests instead of waiting out the job timeout (manaflow-ai#14997)
9ce512a merge-main: run local guards only when asked (manaflow-ai#15016)
d60108a ci: clear test-e2e's fixed DerivedData with clear-dirs.sh (manaflow-ai#14994)
1d7895e ci: run the shell and CLI no-socket lanes in parallel (manaflow-ai#14990)
6e7d25f Honor macOS Differentiate Without Color, Increase Contrast and Reduce Transparency (manaflow-ai#14991)
966b355 Stop interrupting focused work: sidebar jumps, Computer Use focus steal, quit dialog on logout (manaflow-ai#14961)
e1f1cb2 Strip control characters from feedback attachment filenames (manaflow-ai#14783)
0758c9f test: find the onboarding window the test presented, not a leftover (manaflow-ai#15015)
b35c540 fix(spm): resolve GhosttyKit/GhosttyRuntimeTestStubs target name collisions (manaflow-ai#10569)
ef33bed Map .purs artifacts to the Haskell highlight.js grammar (manaflow-ai#14202)
e2a167a Highlight Elixir and Erlang files in the file editor (manaflow-ai#13732)
972c449 fix: wrap Linux browser download card label (manaflow-ai#11157)
f563884 Add Aside to browser data import detection (manaflow-ai#13379)
091d0ea Add cmux send --paste and hint at it for large multi-line sends (manaflow-ai#14937)
3ffcdbb test(ios): keep folder-tap stat tests off the real 2 s deadline (manaflow-ai#15017)
68d3936 test: keep CmuxTerminal pasteboard tests off the cooperative pool (manaflow-ai#15006)
teamleaderleo added a commit that referenced this pull request Sep 27, 2026
singlePaneToSplitKeepsSelectAndInputTargetsAlignedForNewPane checks that
selecting the window container activates the tmux-active inner pane. That
activation goes through GhosttySurfaceScrollView.setActive, which only
takes effect while Workspace.portalRenderingEnabled(for:) holds for the
mirror workspace. The mirror joins the window unselected, so the mount
reconcile turns its rendering off, and selectWorkspace only turns it back
on when SwiftUI delivers the selection change, which this synchronous test
never yields for.

The test passed because the projected-pane notification it sends moved
the workspace to the top of the sidebar. That tabs publish ran the mount
reconcile synchronously with the new selection. Since #14961 a
notification for the focused pane no longer reorders the sidebar, so the
reconcile never ran and both activation checks failed whenever the test
app was frontmost.

Enable portal rendering for the selected mirror explicitly after
selecting it, as RemoteTmuxProjectedFocusInteractionTests already does.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-full-ci Records that skipping the macOS suite on a test-only diff is deliberate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant