Repository navigation
Route all surface shortcuts through focused Dock - #9566
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughDock keyboard shortcuts now use explicit action routing through the focused Dock. Dock commands support pane operations, terminal and browser actions, React Grab, and closed-panel restoration. Dock close history preserves snapshots and workspace context. ChangesDock shortcut routing and command execution
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related issues
Possibly related PRs
Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (2 warnings, 1 inconclusive)
✅ Passed checks (22 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. Comment |
296ec0d to
7928d9e
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Sources/AppDelegate.swift (1)
14624-14639: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftFail closed when the focused Dock panel is not a browser.
This is the only Dock branch in the diff that can fall through to the main area after the Dock gate passes. If the Dock owns keyboard focus and its focused panel is a terminal,
dock.browserPanel(for: focusedPanelId)returnsnil. Control then reaches line 14636 and focuses the main-area browser address bar, or line 14646 and creates a main-area browser. Issue#9518requires Cmd+L to target the focused Dock browser instead of the main-area browser.Every other Dock branch added in this PR consumes the event once
focusedDockStoreForShortcutreturns a store. Keep that contract here: when the Dock owns focus, resolve a browser inside the Dock, and fail closed instead of acting on the main area.Note that the new test
focusAddressBarTargetsFocusedDockBrowserseeds a Dock browser as the focused panel, so it does not cover this path.🐛 Proposed fix to keep Cmd+L inside the focused Dock
if matchConfiguredShortcut(event: event, action: .focusBrowserAddressBar) { if let dock = focusedDockStoreForShortcut( action: .focusBrowserAddressBar, preferredWindow: event.window - ), - let focusedPanelId = dock.focusedPanelId, - let focusedBrowser = dock.browserPanel( - for: focusedPanelId - ) { - focusBrowserAddressBar(in: focusedBrowser) - return true + ) { + // The Dock owns keyboard focus, so this shortcut must not reach + // the main area. Focus the Dock's focused browser, or create one + // in the Dock; never fall through. + if let focusedPanelId = dock.focusedPanelId, + let focusedBrowser = dock.browserPanel(for: focusedPanelId) { + focusBrowserAddressBar(in: focusedBrowser) + return true + } + if routeCreateToFocusedDock( + .browser, + focusAddressBar: true, + action: .focusBrowserAddressBar, + preferredWindow: event.window + ) != nil { + return true + } + NSSound.beep() + return true }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Sources/AppDelegate.swift` around lines 14624 - 14639, Update the focusBrowserAddressBar shortcut branch around focusedDockStoreForShortcut so that once a Dock store is returned, it handles the event exclusively within that Dock: focus its browser when available, but return without falling through when the focused panel is not a browser. Preserve the existing main-area fallback only when no Dock owns focus.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Sources/DockSplitStore`+SessionRestore.swift:
- Around line 89-94: Preserve the remote terminal’s source workspace identity
during closed-item restoration: in
Sources/DockSplitStore+ClosedItemHistory.swift:137-150, store
detachedSurfaceTransfersByPanelId[panelId]?.sessionRestoreWorkspaceId on each
ClosedPanelHistoryEntry; in Sources/DockSplitStore+SessionRestore.swift:89-94,
pass that stored identity to createSessionRestoredPanel instead of nil and fail
closed when it cannot be resolved.
In `@Sources/DockSplitStore`+SessionSnapshot.swift:
- Around line 95-97: Update the snapshot method containing the agentIndex
resolution in Sources/DockSplitStore+SessionSnapshot.swift: resolve the index
only for terminal snapshots and accept an optional already-resolved index from
batch callers, leaving browser snapshots without unnecessary index loading. In
Sources/DockSplitStore+ClosedItemHistory.swift, resolve the agent index once
before the tab iteration in stageDockClosedPaneHistory(_:) and pass that value
to each history-entry snapshot.
In `@Sources/DockSplitStore`+ShortcutCommands.swift:
- Around line 431-435: Update the close-warning check in the Dock shortcut
handling to construct CloseTabWarningStore with the injected
closeTabWarningDefaults source used by TabManager instead of
UserDefaults.standard. Preserve the existing shouldConfirmClose arguments and
behavior while routing the preference through the shared injectable owner.
---
Outside diff comments:
In `@Sources/AppDelegate.swift`:
- Around line 14624-14639: Update the focusBrowserAddressBar shortcut branch
around focusedDockStoreForShortcut so that once a Dock store is returned, it
handles the event exclusively within that Dock: focus its browser when
available, but return without falling through when the focused panel is not a
browser. Preserve the existing main-area fallback only when no Dock owns focus.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 90bf67f7-a3a6-45e5-8086-d3520b2b014f
📒 Files selected for processing (15)
Sources/AppDelegate+AdjacentNavigationShortcut.swiftSources/AppDelegate+DockShortcutRouting.swiftSources/AppDelegate+WindowDock.swiftSources/AppDelegate.swiftSources/DockSplitStore+CloseConfirmation.swiftSources/DockSplitStore+ClosedItemHistory.swiftSources/DockSplitStore+Reset.swiftSources/DockSplitStore+SessionRestore.swiftSources/DockSplitStore+SessionSnapshot.swiftSources/DockSplitStore+ShortcutCommands.swiftSources/DockSplitStore.swiftSources/TabManager.swiftSources/Workspace+DockBrowserLookup.swiftcmux.xcodeproj/project.pbxprojcmuxTests/DockShortcutRoutingTests.swift
7928d9e to
50ed762
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Sources/AppDelegate.swift`:
- Around line 14574-14594: Document in the legacy Ctrl+Tab shortcut handling
around matchesLegacyNextSurfaceShortcut and matchesLegacyPreviousSurfaceShortcut
that these strokes intentionally reuse the configurable .nextSurface and
.prevSurface actions when calling performFocusedDockShortcut. Keep the existing
routing unchanged and apply the same clarification to all corresponding legacy
shortcut branches.
- Around line 14624-14635: Update the Cmd+L handling around
focusedDockStoreForShortcut and focusBrowserAddressBar so the route returns true
as soon as the Dock store resolves, even when focusedPanelId or
browserPanel(for:) is unavailable; preserve focusing the browser when all nested
guards succeed and use the existing failure/beep behavior for the unavailable
focused Dock target, preventing fallthrough to the main-area browser fallback.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 4b584c7e-3751-4498-ab8f-cc45c986243c
📒 Files selected for processing (14)
Sources/AppDelegate+AdjacentNavigationShortcut.swiftSources/AppDelegate+DockShortcutRouting.swiftSources/AppDelegate+WindowDock.swiftSources/AppDelegate.swiftSources/DockSplitStore+CloseConfirmation.swiftSources/DockSplitStore+ClosedItemHistory.swiftSources/DockSplitStore+Reset.swiftSources/DockSplitStore+SessionRestore.swiftSources/DockSplitStore+SessionSnapshot.swiftSources/DockSplitStore+ShortcutCommands.swiftSources/DockSplitStore.swiftSources/TabManager.swiftSources/Workspace+DockBrowserLookup.swiftcmux.xcodeproj/project.pbxproj
50ed762 to
ae5ab54
Compare
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Sources/DockSplitStore+CloseConfirmation.swift (1)
87-94: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winStage only user-closed tabs in pane close history.
shouldClosePaneimmediately stages the pane withstageDockClosedPaneHistory(pane), before checkingforceCloseDockTabIds. Forced tab closes viaforceCloseDockTabIdsreturn inshouldCloseTab, so the tabs are never staged through the tab path.shouldClosePaneshould also skip or discard history for tabs already inforceCloseDockTabIds, or stage only the confirmable/closeable tabs that are actually closing.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Sources/DockSplitStore`+CloseConfirmation.swift around lines 87 - 94, Update splitTabBar(_:shouldClosePane:) so stageDockClosedPaneHistory(pane) records only tabs that are actually user-closed, excluding any tab IDs in forceCloseDockTabIds. Stage the filtered confirmable/closeable set after evaluating controller.tabs(inPane:) and force-close status, while preserving the existing confirmation behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Sources/DockSplitStore`+ClosedItemHistory.swift:
- Around line 260-286: Update restoreDockClosedPanelInFallbackSplit to use a
placeholder-only split creation API, matching the main-area path’s
newTerminalSplit behavior, instead of newSplit(kind: .terminal). Add or reuse
the corresponding non-launching helper while preserving the existing placement,
restoration, cleanup, and failure behavior.
In `@Sources/DockSplitStore`+SessionSnapshot.swift:
- Around line 120-127: The snapshot capture in the close-history flow is
happening prematurely before the close confirmation completes. When
markDockCloseHistoryEligible(panelId:) is called, it immediately captures the
session snapshot via dockClosedPanelHistoryEntry(...) with detectedResumeBinding
set to nil, but the actual binding may still be needed if the user cancels the
close operation. Defer the snapshot creation to occur only after
confirmCloseDockPanel(...) succeeds, or preserve the actual binding value
instead of passing nil so it remains available if the close is cancelled. Ensure
pendingClosedPanelHistoryEntries is only populated after the close is confirmed,
or ensure surfaceResumeBindingsByPanelId retains the binding through the entire
close flow.
In `@Sources/DockSplitStore`+ShortcutCommands.swift:
- Around line 214-241: Add the five missing rename-alert string catalog
entries—alert.renameTab.title, alert.renameTab.message,
alert.renameTab.placeholder, alert.renameTab.rename, and alert.cancel—for the km
and uk locales in Resources/Localizable.xcstrings, using matching translated
values so the localized calls in the rename alert resolve correctly.
In `@tests/test_dock_shortcut_routing_guard.py`:
- Around line 43-61: The disposition_actions parser currently ends at a mutable
documentation comment, allowing unrelated source cases to be included if the
comment changes. Replace that end anchor with a stable code boundary such as
DockShortcutRoutingDisposition’s declaration, or add explicit validation that
both split anchors are found before parsing; preserve the existing disposition
extraction behavior.
---
Outside diff comments:
In `@Sources/DockSplitStore`+CloseConfirmation.swift:
- Around line 87-94: Update splitTabBar(_:shouldClosePane:) so
stageDockClosedPaneHistory(pane) records only tabs that are actually
user-closed, excluding any tab IDs in forceCloseDockTabIds. Stage the filtered
confirmable/closeable set after evaluating controller.tabs(inPane:) and
force-close status, while preserving the existing confirmation behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b7d7aa0c-5938-4eab-9c5c-d918651e4747
📒 Files selected for processing (19)
.github/workflows/ci.ymlSources/AppDelegate+AdjacentNavigationShortcut.swiftSources/AppDelegate+DockShortcutRouting.swiftSources/AppDelegate+WindowDock.swiftSources/AppDelegate.swiftSources/ClosedItemHistory.swiftSources/DockSplitStore+CloseConfirmation.swiftSources/DockSplitStore+ClosedItemHistory.swiftSources/DockSplitStore+PanelDestruction.swiftSources/DockSplitStore+Reset.swiftSources/DockSplitStore+SessionRestore.swiftSources/DockSplitStore+SessionSnapshot.swiftSources/DockSplitStore+ShortcutCommands.swiftSources/DockSplitStore.swiftSources/TabManager.swiftSources/Workspace+DockBrowserLookup.swiftcmux.xcodeproj/project.pbxprojcmuxTests/DockShortcutRoutingTests.swifttests/test_dock_shortcut_routing_guard.py
ae5ab54 to
a7ca99c
Compare
Bugbot is paused — on-demand spend limit reachedBugbot 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. |
|
Addressed the outside-diff pane-history finding in a7ca99c. Pane-close history now excludes every tab already present in forceCloseDockTabIds and, when confirmation is required, stages the filtered tab set only after confirmation succeeds. The cancellation regressions also verify that process-detected resume bindings remain intact when tab or pane close is cancelled. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@cmuxTests/DockControlDefinitionDecodingTests.swift`:
- Around line 479-482: Update the close-panel test around closePanel and
promptCount to register a completion signal before invoking closePanel, then
await that signal before asserting promptCount == 1. Remove the fixed
ten-iteration Task.yield loop, and ensure the signal is fulfilled by the
close-confirmation callback so the test waits for real completion.
In `@cmuxTests/DockShortcutRoutingTests.swift`:
- Around line 440-450: Strengthen the assertions in the Dock browser restoration
test by locating the Dock’s BrowserPanel and verifying its restored URL is
https://example.org before asserting main-area history remains available. Keep
the existing BrowserPanel presence and mainWorkspace exclusion checks, and use
the restored panel’s actual URL property rather than only checking its type.
- Around line 704-710: Strengthen the test around Self.dispatch in the Dock
shortcut routing case by asserting the existing Dock-browser observable that
changes when .toggleReactGrab succeeds, rather than relying only on the dispatch
return value and focusedPanelId checks. Ensure the assertion distinguishes a
successful command from performFocusedDockShortcut returning true after
performShortcutCommand fails.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 2141661c-b648-48f2-8a54-889f87ead6ef
📒 Files selected for processing (23)
.github/workflows/ci.ymlResources/Localizable.xcstringsSources/AppDelegate+AdjacentNavigationShortcut.swiftSources/AppDelegate+DockShortcutRouting.swiftSources/AppDelegate+WindowDock.swiftSources/AppDelegate.swiftSources/ClosedItemHistory.swiftSources/DockShortcutRoutingDisposition.swiftSources/DockSplitStore+CloseConfirmation.swiftSources/DockSplitStore+ClosedItemHistory.swiftSources/DockSplitStore+PanelDestruction.swiftSources/DockSplitStore+Reset.swiftSources/DockSplitStore+SessionRestore.swiftSources/DockSplitStore+SessionSnapshot.swiftSources/DockSplitStore+ShortcutCommands.swiftSources/DockSplitStore.swiftSources/SessionSplitContainerLayoutCodec.swiftSources/TabManager.swiftSources/Workspace+DockBrowserLookup.swiftcmux.xcodeproj/project.pbxprojcmuxTests/DockControlDefinitionDecodingTests.swiftcmuxTests/DockShortcutRoutingTests.swifttests/test_dock_shortcut_routing_guard.py
b304af5 to
d3e6030
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@cmuxTests/DockShortcutRoutingTests.swift`:
- Around line 390-391: The test is using ClosedItemHistoryStore.shared which
persists state to the application support directory and affects test isolation.
Replace the shared instance usage with a test-scoped store initialized with a
temporary file URL. Create a temporary file path for the test, instantiate
ClosedItemHistoryStore with that path instead of accessing .shared, and use the
test-scoped instance in both the initial removeAll() call and the defer block to
ensure proper cleanup without persisting to the real application support
directory.
In `@Sources/DockSplitStore`+CloseConfirmation.swift:
- Around line 48-51: Update the close-confirmation gates in the tab close flow
and splitTabBar(_:shouldClosePane:) to resolve the confirmation manager first,
then initialize CloseTabWarningStore with that manager’s closeTabWarningDefaults
instead of .standard. Keep closeOtherDockTabsInFocusedPane() aligned with the
same defaults source so every Dock close path uses one policy.
In `@tests/test_dock_shortcut_routing_guard.py`:
- Around line 84-139: Add a concise comment near balanced_call_bodies stating
that its scanner only supports single-line, non-raw string literals and does not
correctly parse Swift multiline or raw string forms. Do not change the scanning
logic or other behavior.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: fa4050e9-d3f2-47f6-bd4a-e51ffe0217df
📒 Files selected for processing (23)
.github/workflows/ci.ymlResources/Localizable.xcstringsSources/AppDelegate+AdjacentNavigationShortcut.swiftSources/AppDelegate+DockShortcutRouting.swiftSources/AppDelegate+WindowDock.swiftSources/AppDelegate.swiftSources/ClosedItemHistory.swiftSources/DockShortcutRoutingDisposition.swiftSources/DockSplitStore+CloseConfirmation.swiftSources/DockSplitStore+ClosedItemHistory.swiftSources/DockSplitStore+PanelDestruction.swiftSources/DockSplitStore+Reset.swiftSources/DockSplitStore+SessionRestore.swiftSources/DockSplitStore+SessionSnapshot.swiftSources/DockSplitStore+ShortcutCommands.swiftSources/DockSplitStore.swiftSources/SessionSplitContainerLayoutCodec.swiftSources/TabManager.swiftSources/Workspace+DockBrowserLookup.swiftcmux.xcodeproj/project.pbxprojcmuxTests/DockControlDefinitionDecodingTests.swiftcmuxTests/DockShortcutRoutingTests.swifttests/test_dock_shortcut_routing_guard.py
b2553de to
faada67
Compare
faada67 to
314224f
Compare
Summary
Structural safeguard
KeyboardShortcutSettings.Action.dockShortcutRoutingDispositionexhaustively classifies all 143 actions with no default case: 44 Dock-scoped, 37 focus-resolved, and 62 main-container-owned. Adding an action now fails compilation until its ownership is explicit.tests/test_dock_shortcut_routing_guard.py, run byworkflow-guard-tests, independently scans the action-aware Dock gate calls in the dispatcher sources and requires exact equality with the Dock-scoped set. A new surface-scoped action therefore cannot pass CI with classification alone; its handler must also callfocusedDockStoreForShortcut,performFocusedDockShortcut,routeCreateToFocusedDock, orrouteSplitToFocusedDock. The routing helpers accept the action and assert if a non-Dock-scoped action attempts to use the gate.Dispatcher audit
Already Dock-aware before this change:
triggerFlashnextSurface,prevSurface, and legacy Ctrl+Tab surface navigationmoveSurfaceLeft,moveSurfaceRightselectSurfaceByNumberfocusLeft,focusRight,focusUp,focusDowntoggleSplitZoomsplitRight,splitDown,splitBrowserRight,splitBrowserDownnewSurface,openBrowserfocusHistoryBack,focusHistoryForwardcloseTabFocus-resolved handlers already target the event responder or focused panel, including Dock panels. These include browser navigation, reload, zoom, developer tools, focus/design mode, Simulator commands, Markdown/file preview zoom, diff viewer navigation, and focused TextBox/checklist commands.
The audit found these missing or incomplete Dock routes, all addressed here:
focusBrowserAddressBarreopenClosedBrowserPanelfocusPreviousPane,focusNextPaneequalizeSplitscloseOtherTabsInPanerenameTabtoggleTerminalCopyModefocusTextBoxInputattachTextBoxFilesendCtrlFToTerminalclearScreenKeepScrollbackfindfindNext,findPrevious,hideFind,useSelectionForFindtoggleReactGrabmoveSurfaceToPreviousPane,moveSurfaceToNextPanemoveSurfaceToPaneLeft,moveSurfaceToPaneRight,moveSurfaceToPaneUp,moveSurfaceToPaneDownApp, window, workspace, sidebar, Canvas, workspace terminal-font-size, directory-search, and diff-viewer-opening actions remain intentionally main-container-owned.
Behavior details
Cmd+L focuses the focused Dock browser address bar. If the focused Dock panel is not a browser, the handler preserves the existing main-area fallback. The existing main-area behavior also remains when no Dock owns focus.
Cmd+Shift+T uses a real non-persisted
ClosedItemHistoryStoreowned by eachDockSplitStore. User tab closes, pane closes, and Close Other Tabs stage snapshots before teardown. Configuration resets, runtime force-closes, transfers, and restore teardown are excluded. Restore prefers the original pane, then a same-pane anchor, then the former split placement, and finally the focused or root pane. Dock reopen never consumes the main-area shared history. If the focused Dock has no restorable item, the shortcut is consumed and beeps.Transferred terminal history preserves both the live source-workspace identity and the snapshot workspace identity. A remote terminal fails closed if its live restore owner cannot be resolved, so reopen cannot silently create a local shell. Pane close and Close Other Tabs snapshot each batch once, reuse at most one agent index, and use indexed pane lookup for fallback anchors.
Dock rename writes Bonsplit custom-title state and prevents live terminal or browser title updates from overwriting it. The custom title round-trips through the existing Dock session snapshot fields.
Tests and validation
The first commit contains the failing behavior regressions and CI guard. The second commit contains the implementation.
Completed locally without invoking xcodebuild:
python3 tests/test_dock_shortcut_routing_guard.pypython3 scripts/check-test-determinism.py --strictpython3 tests/test_ci_change_areas.pygit diff --check./scripts/check-pbxproj.sh./scripts/lint-pbxproj-test-wiring.shRemote validation on pre-rebase feature head
faada6719b:DockShortcutRoutingTestsandDockControlDefinitionDecodingTestspassed, and every required PR check is green. A manually dispatched full CI run also passed the routing guard, Swift warning budget, app/test build, runtime regressions, and Swift package tests; its app-host matrix hit pre-existing baseline failures tracked by #8614 and #9574, so that non-required run was stopped rather than adding unrelated test repairs to this PR.Local xcodebuild tests and a local tagged build were intentionally not run per the task instructions.
Closes #9518
Summary by CodeRabbit
Tagged dogfood