Skip to content

Fix AppKit sidebar shortcut hint animation - #8589

Merged
lawrencecchen merged 12 commits into
mainfrom
task-appkit-sidebar-command-hints
Jul 22, 2026
Merged

lawrencecchen merged 12 commits into
mainfrom
task-appkit-sidebar-command-hints

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jul 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • animate AppKit sidebar shortcut hints on command-key reveal and dismissal
  • clip the material fill to the capsule while preserving its outer shadow
  • add regression coverage for fade-out lifetime and material clipping

Testing

Task

  • Fix command-hold hint pills in the new AppKit sidebar

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Fixes the AppKit sidebar command-hold shortcut hints with smooth reveal/dismiss, correct capsule clipping with preserved shadow, and compact sizing. Resets hints on reuse of workspace and group header cells (including same-workspace reuse), with tests for fades, clipping, padding, reduced motion, and reuse.

  • Bug Fixes
    • Explicit opacity animation with shared visibilityDuration; pill stays visible during fade-out, then hides; deterministic reduced-motion policy; works inside disabled Core Animation actions.
    • Split shadow and material: outer view holds shadow with rounded shadowPath; inner NSVisualEffectView clips material and border.
    • Tighter layout and interaction: font size 9, 4pt horizontal padding with accurate fitting size, never intercepts pointer events, and immediate reset via prepareForReuse/resetForReuse() and representedIdentity to prevent stale hints.

Written for commit 8b3b87b. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Style
    • Made sidebar shortcut hint pills more compact (reduced font sizing) and refined capsule rendering with improved border/shadow behavior and more accurate sizing.
  • Bug Fixes
    • Improved shortcut hint show/hide transitions to avoid stale animation results, including safer handling during rapid updates and async fade-out.
    • Shortcut hints no longer capture pointer events and their visuals clip cleanly to a capsule shape.
  • Accessibility
    • Reduced-motion mode now applies shortcut hint visibility changes immediately without animations.
  • Tests
    • Added/updated coverage for shortcut hint pill sizing, reuse behavior, animation timing, and reduced-motion behavior.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The shortcut hint pill now uses separate material and shadow views, guarded visibility animations, reduced-motion handling, identity-aware reuse behavior, smaller fonts, capsule sizing, disabled hit-testing, and expanded tests.

Changes

Sidebar shortcut hint pill

Layer / File(s) Summary
Pill structure and styling
Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift, Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift
The pill separates material rendering from outer shadow geometry, updates capsule layout and sizing, tracks represented identities, and uses a smaller hint font in both sidebar row configurations.
Visibility animation behavior
Sources/ShortcutHintPill.swift, Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift
Visibility uses a shared animation duration, reduced-motion handling, identity-aware hiding, and generation guards for animation completions.
Pill behavior validation
cmuxTests/SidebarAppKitRowCellTests.swift
Tests cover delayed hiding, animation keys, reduced-motion behavior, cell reuse, hit testing, width calculation, and material clipping geometry.

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

Suggested reviewers: azooz2003-bit

Sequence Diagram(s)

sequenceDiagram
  participant SidebarRow
  participant SidebarShortcutHintPillView
  participant CALayer
  SidebarRow->>SidebarShortcutHintPillView: Configure hint text and identity
  SidebarShortcutHintPillView->>SidebarShortcutHintPillView: Set revealed state
  SidebarShortcutHintPillView->>CALayer: Animate opacity
  CALayer-->>SidebarShortcutHintPillView: Complete guarded transition
  SidebarShortcutHintPillView->>CALayer: Hide after valid fade-out
Loading

Important

Pre-merge checks failed

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

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The summary and testing sections are present, but the required Demo Video, Review Trigger, and Checklist sections are missing. Add the missing template sections: a demo video link, the copy/paste review trigger block, and the checklist items.
Cmux Architecture Rethink ❓ Inconclusive placeholder2 need evidence2
✅ Passed checks (23 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 Swift Actor Isolation ✅ Passed The PR’s Swift changes are UI-only @MainActor/AppKit code plus tests; no new MainActor-by-default value models, Sendable reference types, or background UI-store access were introduced.
Cmux Swift Blocking Runtime ✅ Passed Production changes add 0.12s UI animations and generation-guarded completion handling only; no semaphores, waits, sync dispatch, sleeps, or locks were introduced.
Cmux Browser Automation Off-Main ✅ Passed PASS: The PR only changes AppKit sidebar pill rendering/tests; no browser.* routing, WebKit waits, worker-lane automation, or policy-test changes are present.
Cmux Expensive Synchronous Load ✅ Passed Diff only changes sidebar shortcut-hint pill UI/animation; no agent-history load, JSON/JSONL parse, or other expensive synchronous loader was added.
Cmux Cache Substitution Correctness ✅ Passed Changes only animate and clip transient AppKit shortcut-hint UI; no persistence/history/undo/snapshot path or cache substitution is involved.
Cmux No Hacky Sleeps ✅ Passed PASS: the diff only touches Swift source; no TypeScript/JS/shell/build-runtime files or fixed sleeps/polling were introduced, so the runtime-no-hacky-sleeps rule is out of scope.
Cmux Algorithmic Complexity ✅ Passed PASS: The production diff only adjusts shortcut-pill animation/layout state; no new loops, scans, sorts, or filters over scalable collections were added. Tests are exempt.
Cmux Swift Concurrency ✅ Passed PASS: The only new async hop is a CATransaction completion-block Task to return to MainActor in an AppKit callback boundary; no new background queues, Combine state, or async API expansions.
Cmux Swift @Concurrent ✅ Passed PASS: the changed Swift code stays @MainActor/UI-bound; the only async hop is a Task { @MainActor } in a CATransaction completion, with no @concurrent or nonisolated-async misuse.
Cmux Swift Package Boundaries ✅ Passed The diff only changes AppKit sidebar cell reuse/reset behavior; it’s UI glue in app-target code, not reusable domain logic that belongs in a SwiftPM package.
Cmux Swiftpm Lockfiles ✅ Passed Merge-base diff only touches source/test files; no Package.swift, Package.resolved, .gitignore, workflow, or Xcode project files changed.
Cmux Swift Logging ✅ Passed No Swift logging was introduced: the visible diff only updates the ghostty submodule, and the listed Swift files have no print/debugPrint/dump/NSLog/Logger changes.
Cmux User-Facing Error Privacy ✅ Passed Diff only updates sidebar pill animation/layout and passes UUID identity; no user-facing error, alert, API, or recovery copy was added or exposed.
Cmux Full Internationalization ✅ Passed The PR only changes shortcut-pill animation/layout and existing localized call sites; it adds no new user-facing strings or catalog/message files.
Cmux Swiftui State Layout ✅ Passed No new SwiftUI state/layout anti-patterns: the SwiftUI diff is stateless styling/animation, and the rest is AppKit bridge code, which the rule allows.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS: Diff only touches sidebar row views and shortcut-pill rendering; no NSWindow/NSPanel/NSWindowController/WindowGroup code or cmux window identifiers were added.
Cmux Source Artifacts ✅ Passed Changed paths are hand-written Swift source files under Sources/; no logs, caches, build output, temp dirs, or other source-control artifacts were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed The diff only adds a private representedIdentity cache and 9pt pill sizing; no new #if DEBUG or *ForTesting seam appears in changed Sources files.
Cmux No Ambient Global State ✅ Passed Diff only adds instance-owned view state and an extra static constant in an existing helper enum; no new top-level mutable globals, free APIs, or singletons.
Title check ✅ Passed The title accurately reflects the main change: fixing AppKit sidebar shortcut hint animation.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-appkit-sidebar-command-hints

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.

@greptile-apps

greptile-apps Bot commented Jul 21, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR improves command-hold shortcut hints in the AppKit sidebar. The main changes are:

  • Adds explicit fade animations with immediate Reduce Motion behavior.
  • Keeps pills visible until fade-out completes.
  • Clips material to the capsule while preserving its outer shadow.
  • Resets hint state when workspace and group-header cells are reused.
  • Adds tests for animation, reuse, sizing, clipping, and pointer handling.

Confidence Score: 5/5

This looks safe to merge.

  • Reduce Motion now applies visibility changes immediately and removes active animations.
  • Generation checks prevent old fade completions from hiding a reused or newly revealed pill.
  • No blocking issues were found in the updated code.

Important Files Changed

Filename Overview
Sources/ShortcutHintPill.swift Shares the visibility duration between the SwiftUI and AppKit animation paths.
Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift Adds the capsule rendering, visibility animation, Reduce Motion handling, and reuse reset logic.
Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift Resets shortcut-hint state during cell reuse and passes workspace identity to the pill.
cmuxTests/SidebarAppKitRowCellTests.swift Covers fade lifetime, immediate Reduce Motion updates, reuse, clipping, sizing, and pointer handling.

Reviews (6): Last reviewed commit: "Reset shortcut hints in cell reuse lifec..." | Re-trigger Greptile

Comment on lines +688 to +693
NSAnimationContext.runAnimationGroup({ context in
context.duration = ShortcutHintAnimation.visibilityDuration
context.timingFunction = CAMediaTimingFunction(name: .easeOut)
context.allowsImplicitAnimation = true
animator().alphaValue = value
}, completionHandler: completion)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Reduce Motion Still Animates

When macOS Reduce Motion is enabled, this new path still fades every shortcut pill for 120 ms on reveal and dismissal. Check NSWorkspace.shared.accessibilityDisplayShouldReduceMotion and apply the final alpha and hidden state immediately for that configuration.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3e7b84b785

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +678 to +682
animateAlpha(to: 0) { [weak self] in
guard let self,
self.visibilityGeneration == generation,
!self.isRevealed else { return }
self.isHidden = true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Make fading shortcut pills ignore hit testing

When command-hold hints are dismissed while the pointer is over the trailing control, the row immediately reveals the plus/close button, but this branch keeps the hint pill isHidden == false until the fade-out completion. Because the pill is added after those controls in the AppKit row subview order and its trailing frame overlaps their frame, AppKit hit-testing will land on the fading pill/material subview instead of the newly revealed button for the animation duration, swallowing an immediate click. Override the pill to return nil from hitTest (or otherwise disable hit testing as soon as it starts hiding) while keeping the visual fade.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 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/SidebarAppKitRowCellTests.swift`:
- Around line 259-269: Update shortcutHintPillKeepsVisibleDuringFadeOut to
replace the fixed 180 ms sleep with a bounded polling wait for pill.isHidden to
become true. Keep the immediate visibility assertion, and ensure the polling has
a timeout so the test remains deterministic without relying on the animation
duration.
🪄 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

Run ID: f409f967-b8e5-4300-a85e-e7fcc73303a4

📥 Commits

Reviewing files that changed from the base of the PR and between 89da124 and 3e7b84b.

📒 Files selected for processing (3)
  • Sources/ShortcutHintPill.swift
  • Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift
  • cmuxTests/SidebarAppKitRowCellTests.swift

Comment thread cmuxTests/SidebarAppKitRowCellTests.swift
@lawrencecchen
lawrencecchen force-pushed the task-appkit-sidebar-command-hints branch from 3e7b84b to 4563f8c Compare July 21, 2026 22:18
@cursor

cursor Bot commented Jul 21, 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.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

♻️ Duplicate comments (1)
cmuxTests/SidebarAppKitRowCellTests.swift (1)

259-273: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Fixed-sleep flakiness from the prior review is resolved, but this assertion is still coupled to the host's reduced-motion setting.

#expect(!pill.isHidden) right after configure(text: nil, ...) assumes setRevealed takes the animated path. If NSWorkspace.shared.accessibilityDisplayShouldReduceMotion is true on the runner, configure hides synchronously and this assertion fails immediately. See the consolidated root-cause note on SidebarGroupHeaderRowView.swift (setRevealed).

🤖 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 `@cmuxTests/SidebarAppKitRowCellTests.swift` around lines 259 - 273, The test
shortcutHintPillKeepsVisibleDuringFadeOut must not assume animation is enabled.
Account for the host’s reduced-motion setting before asserting immediate
visibility, or conditionally skip the animated fade-out assertions when reduced
motion is enabled, while preserving the existing eventual-hidden verification
for the animated path.
🤖 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/SidebarAppKitRowCellTests.swift`:
- Around line 275-285: The test
shortcutHintPillUsesExplicitOpacityAnimationInsideDisabledTransaction
incorrectly requires an animation even when reduced motion disables animations.
Update the assertion to accommodate the immediate-visibility path used by
configure, while still validating the expected final opacity/state and
preserving animation verification when animations are enabled.

In `@Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift`:
- Around line 671-695: The reduced-motion check in setRevealed is not
injectable, making visibility tests depend on the host environment. In
Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift#L671-L695, add
a reduceMotionProvider closure defaulting to
NSWorkspace.shared.accessibilityDisplayShouldReduceMotion and branch on it; in
cmuxTests/SidebarAppKitRowCellTests.swift#L259-L273 and `#L275-L285`, construct
the pill with the provider forced to false, and add a companion true-provider
test verifying synchronous hiding and no animation key.

---

Duplicate comments:
In `@cmuxTests/SidebarAppKitRowCellTests.swift`:
- Around line 259-273: The test shortcutHintPillKeepsVisibleDuringFadeOut must
not assume animation is enabled. Account for the host’s reduced-motion setting
before asserting immediate visibility, or conditionally skip the animated
fade-out assertions when reduced motion is enabled, while preserving the
existing eventual-hidden verification for the animated path.
🪄 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

Run ID: 76226f10-3a08-4d14-995c-45ae0d1a20c6

📥 Commits

Reviewing files that changed from the base of the PR and between 3e7b84b and 4563f8c.

📒 Files selected for processing (4)
  • Sources/ShortcutHintPill.swift
  • Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift
  • Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift
  • cmuxTests/SidebarAppKitRowCellTests.swift

Comment thread cmuxTests/SidebarAppKitRowCellTests.swift
Comment thread Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift Outdated
@cursor

cursor Bot commented Jul 22, 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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 35daa59a1e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread cmuxTests/SidebarAppKitRowCellTests.swift

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 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/SidebarAppKitRowCellTests.swift`:
- Around line 319-329: The test shortcutHintPillClipsMaterialToItsCapsule should
also verify the pill’s outer layer: assert that its masksToBounds remains false
and its shadowPath is non-nil, while preserving the existing material clipping
and capsule corner-radius assertions.
🪄 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

Run ID: 85fb9b6b-573e-45a9-b811-d89d5d4dc2b8

📥 Commits

Reviewing files that changed from the base of the PR and between 077f1be and 35daa59.

📒 Files selected for processing (2)
  • Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift
  • cmuxTests/SidebarAppKitRowCellTests.swift

Comment on lines +319 to +329
@Test
func shortcutHintPillClipsMaterialToItsCapsule() throws {
let pill = SidebarShortcutHintPillView()
pill.frame = NSRect(x: 0, y: 0, width: 36, height: 18)
pill.configure(text: "⌘1", fontSize: 10, emphasis: 1)
pill.layoutSubtreeIfNeeded()

let material = try #require(Self.descendants(of: pill).compactMap { $0 as? NSVisualEffectView }.first)
#expect(material.layer?.masksToBounds == true)
#expect(material.layer?.cornerRadius == pill.bounds.height / 2)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Also verify that the outer shadow remains unclipped.

This test only checks the inner material view. Add assertions that the pill’s outer layer remains unclipped and retains its shadowPath, so a regression in shadow preservation cannot pass unnoticed.

Suggested assertions
         `#expect`(material.layer?.masksToBounds == true)
         `#expect`(material.layer?.cornerRadius == pill.bounds.height / 2)
+        `#expect`(pill.layer?.masksToBounds == false)
+        `#expect`(pill.layer?.shadowPath != nil)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@Test
func shortcutHintPillClipsMaterialToItsCapsule() throws {
let pill = SidebarShortcutHintPillView()
pill.frame = NSRect(x: 0, y: 0, width: 36, height: 18)
pill.configure(text: "⌘1", fontSize: 10, emphasis: 1)
pill.layoutSubtreeIfNeeded()
let material = try #require(Self.descendants(of: pill).compactMap { $0 as? NSVisualEffectView }.first)
#expect(material.layer?.masksToBounds == true)
#expect(material.layer?.cornerRadius == pill.bounds.height / 2)
}
`@Test`
func shortcutHintPillClipsMaterialToItsCapsule() throws {
let pill = SidebarShortcutHintPillView()
pill.frame = NSRect(x: 0, y: 0, width: 36, height: 18)
pill.configure(text: "⌘1", fontSize: 10, emphasis: 1)
pill.layoutSubtreeIfNeeded()
let material = try `#require`(Self.descendants(of: pill).compactMap { $0 as? NSVisualEffectView }.first)
`#expect`(material.layer?.masksToBounds == true)
`#expect`(material.layer?.cornerRadius == pill.bounds.height / 2)
`#expect`(pill.layer?.masksToBounds == false)
`#expect`(pill.layer?.shadowPath != nil)
}
🤖 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 `@cmuxTests/SidebarAppKitRowCellTests.swift` around lines 319 - 329, The test
shortcutHintPillClipsMaterialToItsCapsule should also verify the pill’s outer
layer: assert that its masksToBounds remains false and its shadowPath is
non-nil, while preserving the existing material clipping and capsule
corner-radius assertions.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 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/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift`:
- Around line 601-612: Remove the injectable reduceMotionProvider closure and
initializer parameter from the sidebar group header view, keeping the
accessibility motion setting read privately from NSWorkspace in production code.
Extract the visibility-policy decision into a pure testable helper or equivalent
so tests no longer need to override host state, while preserving the existing
reduced-motion 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

Run ID: bb1001f5-4127-4523-904c-c6e667ceaee3

📥 Commits

Reviewing files that changed from the base of the PR and between 35daa59 and 83d3d7f.

📒 Files selected for processing (3)
  • Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift
  • Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift
  • cmuxTests/SidebarAppKitRowCellTests.swift

Comment thread Sources/Sidebar/AppKitList/Cells/SidebarGroupHeaderRowView.swift
@lawrencecchen
lawrencecchen merged commit 184d61e into main Jul 22, 2026
12 checks passed
@lawrencecchen
lawrencecchen deleted the task-appkit-sidebar-command-hints branch July 22, 2026 08:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant