Skip to content

Restore sidebar edge fades - #3502

Merged
lawrencecchen merged 3 commits into
mainfrom
task-sidebar-opacity-fades
May 4, 2026
Merged

lawrencecchen merged 3 commits into
mainfrom
task-sidebar-opacity-fades

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented May 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Restores the sidebar top edge opacity fade.
  • Adds a matching bottom edge fade above the footer/help button area.

Testing

  • ./scripts/reload.sh --tag sidefade succeeded.

Issues

  • Plain-text task: restore the sidebar top opacity fade and add a bottom opacity fade near the help button.

Summary by cubic

Restores the sidebar top fade and adds a matching bottom fade above the footer/help area to improve depth and readability without changing interactions. Uses a native blur scrim masked by a gradient at both edges.

  • New Features
    • Add top/bottom scrims via SidebarTopScrim and SidebarBottomScrim, built on shared SidebarEdgeScrim + SidebarEdgeBlurEffect with a gradient mask (reversed for bottom).
    • Render scrims inside the workspace scroll area; switch layout to ZStack so the footer overlays; add top/bottom .safeAreaInset padding; disable hit testing on scrims/insets; set SidebarWorkspaceListMetrics.bottomScrimHeight = topScrimHeight for consistent spacing.

Written for commit 3031fdb. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • Added a bottom gradient/blur overlay to the sidebar workspace scroll area to match the top scrim, improving visual depth and scroll feedback at the bottom edge.
  • Refactor

    • Unified top and bottom scrim rendering into a shared edge scrim with directional fade and blur.
    • Adjusted sidebar layout layering to support the new bottom overlay.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@vercel

vercel Bot commented May 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 4, 2026 11:12am
cmux-staging Building Building Preview, Comment May 4, 2026 11:12am

@coderabbitai

coderabbitai Bot commented May 4, 2026 •

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

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

Adds a bottom-side scrim to the sidebar, refactors scrim rendering into a shared, edge-parameterized SidebarEdgeScrim + SidebarEdgeBlurEffect, replaces the old SidebarTopScrim, changes VerticalTabsSidebar from a VStack to a bottom-aligned ZStack, and exposes SidebarWorkspaceListMetrics.bottomScrimHeight.

Changes

Sidebar Bottom Scrim & Scrim Refactor

Layer / File(s) Summary
Metrics / Data Shape
Sources/WindowChromeMetrics.swift
Adds SidebarWorkspaceListMetrics.bottomScrimHeight set equal to topScrimHeight.
Layout Root
Sources/ContentView.swift
Changes VerticalTabsSidebar container from VStack(spacing: 0) to ZStack(alignment: .bottomLeading) to enable bottom-layer overlays.
Scroll Area Integration
Sources/ContentView.swift
In workspaceScrollArea, adds a bottom safeAreaInset(edge: .bottom) spacer using sidebarBottomScrimHeight and overlays a non-hit-testable SidebarBottomScrim(height:) aligned to the bottom; retains top scrim overlay.
Scrim API / Components
Sources/SidebarScrim.swift
Introduces SidebarTopScrim/SidebarBottomScrim delegating to SidebarEdgeScrim(edge: .top/.bottom), which composes SidebarEdgeBlurEffect and applies an edge-dependent vertical LinearGradient mask (colors reversed for bottom).
App Project Wiring
GhosttyTabs.xcodeproj/project.pbxproj
Adds SidebarScrim.swift to the project's Sources group and the app target's sources build phase so the new scrim types are compiled.
Cleanup
Sources/ContentView.swift
Removes the previous SidebarTopScrim implementation now replaced by the edge-parameterized scrim system.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐇 I tuck a gentle blur below,
A soft-lit rim where sidebars glow,
Top and bottom, folded neat,
Gradients hum where edges meet,
A tiny hop — the view feels whole.

🚥 Pre-merge checks | ✅ 12 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (12 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Restore sidebar edge fades' clearly and concisely describes the main change: restoring and adding opacity fades to the sidebar edges.
Description check ✅ Passed The description includes a clear Summary section explaining what changed and why, and provides Testing information showing the reload script succeeded. However, it lacks a Demo Video link and has not been properly formatted against the template checklist.
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 PR introduces SwiftUI View structs and NSViewRepresentable bridge pattern with no mutable shared state or background thread access patterns, fully compliant with Swift 6 actor isolation requirements.
Cmux Swift Blocking Runtime ✅ Passed No blocking or timing-based synchronization patterns detected in new SidebarScrim.swift, WindowChromeMetrics.swift, or ContentView.swift changes.
Cmux Swift Concurrency ✅ Passed PR introduces sidebar scrim UI components as pure SwiftUI declarative views with no legacy async patterns.
Cmux Swift @Concurrent ✅ Passed PR introduces synchronous SwiftUI components with no async functions, nonisolated async work, or concurrent operations requiring @concurrent annotations.
Cmux Swift File And Package Boundaries ✅ Passed PR introduces focused 68-line SidebarScrim.swift for UI rendering and AppKit bridge code, matching explicitly allowed pattern for small UI-only views.
Cmux Swift Logging ✅ Passed The pull request introduces only UI layout changes with no logging violations. The modifications add a sidebarBottomScrimHeight property, update workspaceScrollArea, and render SidebarBottomScrim without any logging statements.
Cmux Swiftui State Layout ✅ Passed SwiftUI code follows proper state management patterns with no @ObservableObject, @Published, or AppKit bridging violations detected.
Cmux Architecture Rethink ✅ Passed PR introduces well-structured UI components with clear ownership, uses standard NSViewRepresentable platform bridge pattern, and contains no timing/blocking repair paths, state duplications, or lifecycle splits.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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-sidebar-opacity-fades

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
Review rate limit: 3/8 reviews remaining, refill in 36 minutes and 17 seconds.

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

@greptile-apps

greptile-apps Bot commented May 4, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Restores the sidebar's top edge blur scrim and adds a matching bottom edge scrim. The implementation extracts a shared SidebarEdgeScrim / SidebarEdgeBlurEffect component, replaces the old no-op SidebarTopScrim stub, and switches the sidebar root container from VStack to ZStack so the footer overlays the scroll area while a 50 pt bottom safeAreaInset keeps the last row above the fade.

Confidence Score: 5/5

Safe to merge; no actor isolation, blocking, or layout-correctness issues found.

All changes are pure SwiftUI/AppKit UI rendering with no state ownership changes, no blocking primitives, no actor isolation issues, and no file-size rule violations. The new file is 68 lines with a single clear responsibility. The ZStack layout change is self-consistent: the 50 pt bottom safeAreaInset comfortably exceeds the ~34 pt footer height, so no content is hidden at rest or at scroll end.

No files require special attention.

Important Files Changed

Filename Overview
Sources/SidebarScrim.swift New 68-line file introducing SidebarTopScrim, SidebarBottomScrim, SidebarEdgeScrim (shared gradient-mask blur), and SidebarEdgeBlurEffect (NSVisualEffectView bridge). Clean single responsibility, well under the 400-line budget.
Sources/ContentView.swift Switches sidebar root from VStack to ZStack so the footer overlays the scroll area; adds bottom safeAreaInset + bottom scrim overlay; removes the old no-op SidebarTopScrim stub. Net change is small and correct.
Sources/WindowChromeMetrics.swift Adds bottomScrimHeight = topScrimHeight (50 pt) to SidebarWorkspaceListMetrics; single-line addition, no issues.
GhosttyTabs.xcodeproj/project.pbxproj Registers SidebarScrim.swift as a build source and file reference; mechanically correct Xcode project wiring.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    ZStack["ZStack(alignment: .bottomLeading)"]
    
    ZStack --> ScrollArea["workspaceScrollArea\n(GeometryReader + ScrollView)"]
    ZStack --> Footer["SidebarFooter\n(overlays at bottom)"]
    
    ScrollArea --> SAInsetTop[".safeAreaInset(.top)\nworkspaceScrollTopVisibilityInset"]
    ScrollArea --> SAInsetBot[".safeAreaInset(.bottom)\nsidebarBottomScrimHeight = 50pt"]
    ScrollArea --> OverlayTop[".overlay(.top)\nSidebarTopScrim"]
    ScrollArea --> OverlayBot[".overlay(.bottom)\nSidebarBottomScrim"]
    
    OverlayTop --> EdgeScrimTop["SidebarEdgeScrim(edge: .top)\nblack→clear gradient mask\n+ NSVisualEffectView blur"]
    OverlayBot --> EdgeScrimBot["SidebarEdgeScrim(edge: .bottom)\nclear→black gradient mask\n+ NSVisualEffectView blur"]
    
    EdgeScrimTop --> BlurEffect["SidebarEdgeBlurEffect\nNSVisualEffectView\n.withinWindow / .underWindowBackground"]
    EdgeScrimBot --> BlurEffect
Loading

Reviews (5): Last reviewed commit: "Fix sidebar scrim review feedback" | Re-trigger Greptile

Comment thread Sources/ContentView.swift
Comment on lines +10023 to +10026
.overlay(alignment: .bottom) {
SidebarBottomScrim(height: sidebarBottomScrimHeight)
.allowsHitTesting(false)
}

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 Missing bottom safeAreaInset companion for the new scrim

The top scrim has a companion .safeAreaInset(edge: .top, spacing: 0) (line ~10014) that pushes scroll content down so rows aren't pinned under the fade. The bottom scrim has no equivalent. When the user scrolls all the way to the last row, the row's bottom edge sits flush with the scroll frame's bottom — i.e., directly behind the 28 pt fade — while the top half of that row remains fully visible. Adding a matching bottom inset would keep the last row fully clear of the fade at rest.

.safeAreaInset(edge: .bottom, spacing: 0) {
    Color.clear
        .frame(height: sidebarBottomScrimHeight)
        .allowsHitTesting(false)
}
.overlay(alignment: .bottom) {
    SidebarBottomScrim(height: sidebarBottomScrimHeight)
        .allowsHitTesting(false)
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Already fixed in the current branch: the scroll area now has a matching bottom safeAreaInset using sidebarBottomScrimHeight before the bottom overlay.

— Claude Code

coderabbitai[bot]
coderabbitai Bot previously requested changes May 4, 2026

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Sources/ContentView.swift`:
- Around line 12454-12502: The file exceeds the Swift file-length budget because
the four small private types were added to ContentView.swift; extract
SidebarTopScrim, SidebarBottomScrim, SidebarEdgeScrim, and SidebarEdgeBlurEffect
into a new file (e.g., SidebarScrim.swift), add the necessary imports (import
SwiftUI and import AppKit), drop the private modifier so the structs are
internal (keep the same type names and implementations), and remove the
duplicate definitions from ContentView.swift so the build uses the new
module-scoped types.

In `@Sources/WindowChromeMetrics.swift`:
- Line 35: Replace the hardcoded literal in bottomScrimHeight with the shared
constant to make the relationship explicit: use
WindowChromeMetrics.sharedChromeBarHeight instead of 28 in the static let
bottomScrimHeight declaration (or, if the footer height is intentionally
independent, add a short comment above bottomScrimHeight explaining why 28 was
chosen and that it should not track sharedChromeBarHeight). Ensure you update
the bottomScrimHeight symbol accordingly so readers see the intended coupling
(or documented independence).
🪄 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: d1225be9-2b93-47ba-800d-d56f6c062418

📥 Commits

Reviewing files that changed from the base of the PR and between bdf4333 and 8cb3aab.

📒 Files selected for processing (2)
  • Sources/ContentView.swift
  • Sources/WindowChromeMetrics.swift

Comment thread Sources/ContentView.swift Outdated
Comment thread Sources/WindowChromeMetrics.swift Outdated
static let firstRowTopOffset: CGFloat = MinimalModeChromeMetrics.titlebarHeight + 2
static let rowVerticalPadding: CGFloat = 8
static let topScrimHeight: CGFloat = firstRowTopOffset + 20
static let bottomScrimHeight: CGFloat = 28

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Consider referencing WindowChromeMetrics.sharedChromeBarHeight instead of the raw literal 28.

bottomScrimHeight is hardcoded to 28, which happens to equal WindowChromeMetrics.sharedChromeBarHeight. If the help/footer area height is intentionally tied to the chrome bar height, using the named constant makes that relationship explicit and prevents silent drift when the base height changes later:

♻️ Proposed refactor
-    static let bottomScrimHeight: CGFloat = 28
+    static let bottomScrimHeight: CGFloat = WindowChromeMetrics.sharedChromeBarHeight

If the footer height is intentionally independent of the chrome bar height, at least add a brief comment explaining the chosen value.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/WindowChromeMetrics.swift` at line 35, Replace the hardcoded literal
in bottomScrimHeight with the shared constant to make the relationship explicit:
use WindowChromeMetrics.sharedChromeBarHeight instead of 28 in the static let
bottomScrimHeight declaration (or, if the footer height is intentionally
independent, add a short comment above bottomScrimHeight explaining why 28 was
chosen and that it should not track sharedChromeBarHeight). Ensure you update
the bottomScrimHeight symbol accordingly so readers see the intended coupling
(or documented independence).

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

♻️ Duplicate comments (1)
Sources/ContentView.swift (1)

12455-12503: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

CI still failing: file length budget exceeded.

The pipeline continues to report actual=16030, budget=15966. The scrim types (SidebarTopScrim, SidebarBottomScrim, SidebarEdgeScrim, SidebarEdgeBlurEffect) have no dependency on ContentView internals and should be extracted to a separate file (e.g., Sources/SidebarScrim.swift) to bring ContentView.swift back under the 15,966-line budget.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/ContentView.swift` around lines 12455 - 12503, Move the scrim views
out of ContentView by creating a new Swift file containing the SidebarTopScrim,
SidebarBottomScrim, SidebarEdgeScrim, and SidebarEdgeBlurEffect types (copy
their current definitions exactly, including private and enum Edge), add the
necessary import (SwiftUI/AppKit as needed), and remove these declarations from
ContentView.swift so the file length drops below the budget; ensure
makeNSView/updateNSView signatures and property names (height, edge,
gradientColors, etc.) remain unchanged so existing usages compile.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@Sources/ContentView.swift`:
- Around line 12455-12503: Move the scrim views out of ContentView by creating a
new Swift file containing the SidebarTopScrim, SidebarBottomScrim,
SidebarEdgeScrim, and SidebarEdgeBlurEffect types (copy their current
definitions exactly, including private and enum Edge), add the necessary import
(SwiftUI/AppKit as needed), and remove these declarations from ContentView.swift
so the file length drops below the budget; ensure makeNSView/updateNSView
signatures and property names (height, edge, gradientColors, etc.) remain
unchanged so existing usages compile.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 20c444a8-2528-4c12-a9c1-2a827ed63423

📥 Commits

Reviewing files that changed from the base of the PR and between 8cb3aab and 741fa7d.

📒 Files selected for processing (2)
  • Sources/ContentView.swift
  • Sources/WindowChromeMetrics.swift

@lawrencecchen
lawrencecchen force-pushed the task-sidebar-opacity-fades branch from 3c3b623 to f3a29e8 Compare May 4, 2026 10:41

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

♻️ Duplicate comments (1)
Sources/ContentView.swift (1)

12454-12510: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

CI still failing: file-length budget exceeded — scrim types must be extracted.

The pipeline reports actual=16037, budget=15966 (+71 lines). SidebarBottomScrim, SidebarEdgeScrim, and SidebarEdgeBlurEffect were added but not extracted to a separate file, which is exactly what is required to bring ContentView.swift back under budget.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/ContentView.swift` around lines 12454 - 12510, Extract the three
scrim view types into a new Swift file: create a new file and move
SidebarBottomScrim, SidebarEdgeScrim, and SidebarEdgeBlurEffect there (preserve
their implementations exactly), then update their access level so they remain
usable from ContentView.swift (remove or change the top-level private to an
appropriate internal/fileprivate visibility in the new file), ensure any
required imports (SwiftUI/AppKit) are present, and confirm that ContentView
still references SidebarBottomScrim unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@Sources/ContentView.swift`:
- Around line 12454-12510: Extract the three scrim view types into a new Swift
file: create a new file and move SidebarBottomScrim, SidebarEdgeScrim, and
SidebarEdgeBlurEffect there (preserve their implementations exactly), then
update their access level so they remain usable from ContentView.swift (remove
or change the top-level private to an appropriate internal/fileprivate
visibility in the new file), ensure any required imports (SwiftUI/AppKit) are
present, and confirm that ContentView still references SidebarBottomScrim
unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 10cf61ef-eb05-4e30-a33d-b8364d53cd4a

📥 Commits

Reviewing files that changed from the base of the PR and between 741fa7d and 3c3b623.

📒 Files selected for processing (2)
  • Sources/ContentView.swift
  • Sources/WindowChromeMetrics.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.

♻️ Duplicate comments (1)
Sources/ContentView.swift (1)

12451-12507: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

CI still blocked: file-length budget exceeded (16034 > 15966).

The four new private types (SidebarBottomScrim, SidebarEdgeScrim, SidebarEdgeBlurEffect, plus the refactored SidebarTopScrim) pushed the file to 16,034 lines, 68 lines over the 15,966-line budget. The pipeline fails on scripts/swift_file_length_budget.py. The fix is to extract these self-contained types into a new file (e.g. Sources/SidebarScrim.swift).

🛠️ Suggested extraction
-// ContentView.swift — remove these four private structs
-private struct SidebarTopScrim: View { … }
-private struct SidebarBottomScrim: View { … }
-private struct SidebarEdgeScrim: View { … }
-private struct SidebarEdgeBlurEffect: NSViewRepresentable { … }
// Sources/SidebarScrim.swift  (new file)
import SwiftUI
import AppKit

struct SidebarTopScrim: View {
    let height: CGFloat
    var body: some View { SidebarEdgeScrim(height: height, edge: .top) }
}

struct SidebarBottomScrim: View {
    let height: CGFloat
    var body: some View { SidebarEdgeScrim(height: height, edge: .bottom) }
}

struct SidebarEdgeScrim: View {
    enum Edge { case top, bottom }
    let height: CGFloat
    let edge: Edge
    var body: some View {
        SidebarEdgeBlurEffect()
            .frame(height: height)
            .mask(LinearGradient(colors: gradientColors, startPoint: .top, endPoint: .bottom))
    }
    private var gradientColors: [Color] {
        let colors: [Color] = [.black.opacity(0.95), .black.opacity(0.75), .black.opacity(0.35), .clear]
        return edge == .top ? colors : colors.reversed()
    }
}

struct SidebarEdgeBlurEffect: NSViewRepresentable {
    func makeNSView(context: Context) -> NSVisualEffectView {
        let view = NSVisualEffectView()
        view.blendingMode = .withinWindow
        view.material = .underWindowBackground
        view.state = .active
        view.isEmphasized = false
        return view
    }
    func updateNSView(_ nsView: NSVisualEffectView, context: Context) {}
}

Drop private so the types are internal and remain visible within the module.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/ContentView.swift` around lines 12451 - 12507, The file exceeds the
length budget because four small private types (SidebarBottomScrim,
SidebarEdgeScrim, SidebarEdgeBlurEffect and the refactored SidebarTopScrim) were
added; fix it by extracting these types into a new file (e.g. create
Sources/SidebarScrim.swift) and move the implementations of SidebarBottomScrim,
SidebarEdgeScrim, SidebarEdgeBlurEffect and SidebarTopScrim there, removing the
private modifier so they remain internal to the module; ensure you import
SwiftUI and AppKit in the new file and update any callers if necessary.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@Sources/ContentView.swift`:
- Around line 12451-12507: The file exceeds the length budget because four small
private types (SidebarBottomScrim, SidebarEdgeScrim, SidebarEdgeBlurEffect and
the refactored SidebarTopScrim) were added; fix it by extracting these types
into a new file (e.g. create Sources/SidebarScrim.swift) and move the
implementations of SidebarBottomScrim, SidebarEdgeScrim, SidebarEdgeBlurEffect
and SidebarTopScrim there, removing the private modifier so they remain internal
to the module; ensure you import SwiftUI and AppKit in the new file and update
any callers if necessary.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 908015a3-f137-4a8b-8859-c242f78aedb1

📥 Commits

Reviewing files that changed from the base of the PR and between 3c3b623 and f3a29e8.

📒 Files selected for processing (2)
  • Sources/ContentView.swift
  • Sources/WindowChromeMetrics.swift

@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 4, 2026 11:16

Addressed in 3031fdb by moving sidebar scrim helpers into Sources/SidebarScrim.swift; workflow-guard-tests now passes and the CodeRabbit thread is resolved.

@lawrencecchen
lawrencecchen merged commit 76d5f59 into main May 4, 2026
20 of 23 checks passed
@lawrencecchen
lawrencecchen deleted the task-sidebar-opacity-fades branch May 4, 2026 11:17

This branch was successfully deployed

1 active deployment
Preview – cmux — 3031fdb7 Deployed May 4, 2026 by vercel[bot]
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