Skip to content

Allow customizing File Explorer git status colors (#3848) - #3893

Closed
austinywang wants to merge 23 commits into
mainfrom
issue-3848-file-explorer-git-status-colors
Closed

austinywang wants to merge 23 commits into
mainfrom
issue-3848-file-explorer-git-status-colors

Conversation

@austinywang

@austinywang austinywang commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add fileExplorer.gitStatusColors support in cmux.json with managed UserDefaults storage and live File Explorer row refresh.
  • Keep FileExplorerStyle palettes as fallback colors when a status override is omitted.
  • Document the new config surface in the schema, generated template, and configuration docs.

Architecture

Chose a config-owned settings boundary instead of adding more style-specific view logic. FileExplorerGitStatusColorSettings owns the defaults key and status-name normalization; FileExplorerStyle only supplies fallback colors.

Verification

  • python3 -m json.tool web/data/cmux.schema.json
  • git diff --check

Local Swift tests/builds were not run per instruction; CI should exercise the added XCTest.

Closes #3848


Note

Low Risk
Low risk: adds a new optional settings surface that only affects File Explorer styling, with validation and fallbacks to existing palette colors.

Overview
Adds support for fileExplorer.gitStatusColors in cmux.json, persisting validated per-status hex overrides into managed UserDefaults and documenting the new section in the JSON schema, template, and configuration docs.

File Explorer git label coloring now resolves through a main-thread cached palette (FileExplorerGitStatusColorSettings), falling back to each FileExplorerStyle’s built-in colors when an override is missing; applying this setting reloads the cache and triggers a .fileExplorerStyleDidChange refresh. Includes new XCTest coverage for settings application and ignoring malformed/unknown entries.

Reviewed by Cursor Bugbot for commit 45fb8a6. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds customizable File Explorer git status colors via fileExplorer.gitStatusColors in cmux.json, resolved through a main-thread cached palette with style fallbacks; the explorer only reloads when this setting changes. Fixes #3848.

  • New Features

    • Support fileExplorer.gitStatusColors; normalize status names, validate hex, persist to managed defaults (allowlisted), and warn via Logger. Schema, docs, and settings template updated with examples.
    • FileExplorerStyle.gitColor(for:) uses a shared cached palette; applying this setting refreshes the cache on the main thread and posts .fileExplorerStyleDidChange, avoiding per-row UserDefaults reads.
  • Bug Fixes

    • Reload and notify only when fileExplorer.gitStatusColors changes. Enforce @MainActor isolation and correct palette ownership/reload order; ignore unknown statuses and invalid entries. Tests cover startup overrides, cache warmup/reload, and malformed persisted values.

Written for commit 45fb8a6. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

  • New Features

    • Customize Git file-status colors in File Explorer (modified, added, deleted, renamed, untracked); changes are applied and Explorer reloads to reflect overrides.
  • Documentation

    • Configuration docs, schema, and example template updated with the new File Explorer git-status color section.
  • Bug Fixes / Reliability

    • Settings parsing now ignores invalid entries and malformed values.
  • Tests

    • Added tests validating startup application and handling of malformed persisted entries.

Review Change Stack

File Explorer status colors were owned only by FileExplorerStyle, which made editor/theme matching impossible without changing source. This adds a config-owned override map for fileExplorer.gitStatusColors while preserving the existing style palettes as fallback values.

Constraint: Do not build or run local tests before CI; user explicitly forbids local tests and direct xcodebuild.

Rejected: Add another style-specific switch in the row view | keeps config and presentation coupled.

Confidence: medium

Scope-risk: moderate

Directive: Keep File Explorer appearance overrides in the settings/defaults boundary; do not push per-row config parsing into FileExplorerView.

Tested: python3 -m json.tool web/data/cmux.schema.json; git diff --check

Not-tested: Local Swift tests/builds per user instruction; CI will run after push.
@vercel

vercel Bot commented May 12, 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 19, 2026 7:16am
cmux-staging Building Building Preview, Comment May 19, 2026 7:16am

@coderabbitai

coderabbitai Bot commented May 12, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds cmux.json support for fileExplorer.gitStatusColors: schema and allowlist, docs and template entry, parser and managed-UserDefaults persistence with validation/logging, a main-actor cached NSColor resolver used by File Explorer with fallback, Xcode project wiring, and tests.

Changes

File Explorer Git Status Colors Feature

Layer / File(s) Summary
Schema definition and configuration path allowlisting
web/data/cmux.schema.json, Sources/CmuxSettingsJSONPathSupport.swift
Adds fileExplorer.gitStatusColors schema with colorHex constraints and updates the settings JSON path allowlist to include fileExplorer.gitStatusColors.
Docs and template
web/app/[locale]/docs/configuration/page.tsx, Sources/KeyboardShortcutSettingsFileStore+Template.swift
Adds fileExplorer to docs sectionOrder, expands example cmux.json with fileExplorer.gitStatusColors, renders schema-reference examples, and includes a template section with example hex colors.
Settings parsing and managed defaults
Sources/KeyboardShortcutSettingsFileStore.swift, Sources/KeyboardShortcutSettingsFileStore+Template.swift
Parses fileExplorer.gitStatusColors via parseFileExplorerSection, normalizes status names and hex colors, logs/skips malformed entries, writes normalized mappings into managed UserDefaults, and triggers palette reload and .fileExplorerStyleDidChange when applied.
Color resolver, cache, and File Explorer wiring
Sources/FileExplorerGitStatusColors.swift, Sources/FileExplorerStore.swift, GhosttyTabs.xcodeproj/project.pbxproj
Adds FileExplorerGitStatusColorSettings and a main-actor FileExplorerGitStatusColorPalette that parses hex→NSColor and caches per-status values; exposes reloadSharedPaletteOnMainThread(), updates FileExplorerStyle.gitColor(for:) to use resolved overrides with fallback, and adds the new Swift file to the Xcode project.
Integration tests
cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
Adds tests verifying managed-UserDefaults storage of normalized hex colors, that File Explorer resolves persisted overrides, and that malformed persisted entries are ignored/fallback correctly.

Sequence Diagram

sequenceDiagram
  participant SettingsFile as cmux.json
  participant SettingsStore as CmuxSettingsFileStore
  participant Defaults as UserDefaults
  participant Palette as FileExplorerGitStatusColorPalette
  participant NotifCenter as Notification Center
  participant FileExplorerStyle
  SettingsFile->>SettingsStore: parseSettingsFile reads fileExplorer.gitStatusColors
  SettingsStore->>SettingsStore: parseFileExplorerSection validates & normalizes entries
  SettingsStore->>Defaults: write normalized hex map to fileExplorer.gitStatusColors
  SettingsStore->>NotifCenter: post .fileExplorerStyleDidChange
  NotifCenter->>Palette: reload reads stored hex map
  Palette->>Palette: parse hex -> NSColor and cache per-status
  FileExplorerStyle->>Palette: request resolved color for status (fallback if missing)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • manaflow-ai/cmux#2655: Related — earlier changes touching the settings JSON allowlist that this PR extends.
  • manaflow-ai/cmux#3847: Related — modifies KeyboardShortcutSettingsFileStore’s template/parsing and managed-default handling.

Poem

🐰 I nibble hex codes one by one,
I stash them in defaults when parsing is done,
Cached colors hum on the MainActor thread,
Notifications hop — styles refresh ahead,
File Explorer blossoms in theme-fed sun.


Caution

Pre-merge checks failed

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

  • Ignore

❌ Failed checks (2 errors, 1 warning)

Check name Status Explanation Resolution
Cmux Swift Actor Isolation ❌ Error Introduces Swift actor isolation mistakes: normalizedStatusName is a pure helper function missing nonisolated; Logger is a file-scoped utility constant missing nonisolated. Mark FileExplorerGitStatusColorSettings.normalizedStatusName and CmuxSettingsFileStore.logger with nonisolated keyword per Swift 6 isolation rules.
Cmux Swift Logging ❌ Error Lines 646 and 653 in Sources/KeyboardShortcutSettingsFileStore.swift log user filesystem paths (sourcePath) with privacy: .public, violating the rule against logging personal data without redaction. Change privacy: .public to privacy: .private for sourcePath in both logger.warning calls, or remove sourcePath from logs and use a safer alternative like a symbolic identifier.
Docstring Coverage ⚠️ Warning Docstring coverage is 5.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (13 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding customizable File Explorer git status colors feature as requested in the linked issue.
Linked Issues check ✅ Passed The PR fully implements the requirements from issue #3848: fileExplorer.gitStatusColors config in cmux.json, hex validation, status normalization, UserDefaults persistence, fallback to style defaults, and live UI updates.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to implementing fileExplorer.gitStatusColors support: settings parsing, schema/template/docs updates, cache implementation, style integration, and comprehensive test coverage.
Cmux Swift Blocking Runtime ✅ Passed No blocking/timing primitives in production Swift code. FileExplorerGitStatusColorSettings uses MainActor.assumeIsolated() for assertion only, not blocking synchronization.
Cmux No Hacky Sleeps ✅ Passed PR contains only Swift code and documentation files. The sole non-Swift runtime file is TypeScript documentation with no hacky sleeps, timers, polling, or delays.
Cmux Swift Concurrency ✅ Passed PR introduces no legacy async patterns. New FileExplorerGitStatusColors.swift uses modern @MainActor concurrency. No DispatchQueue, Task, Combine, or completion handlers introduced.
Cmux Swift @Concurrent ✅ Passed All new code is synchronous with proper @MainActor annotations. No nonisolated async functions or invalid @concurrent usage per swift-concurrent-annotation rules.
Cmux Swift File And Package Boundaries ✅ Passed 77-line new file with clear single responsibility. Minimal additions to existing large files follow established patterns. All threshold requirements met.
Cmux User-Facing Error Privacy ✅ Passed No user-facing errors, alerts, or recovery copy expose sensitive information. The os.Logger warnings are internal diagnostic logs, not user-visible elements per the rule.
Cmux Swiftui State Layout ✅ Passed No SwiftUI state layout violations. No new state annotations introduced. FileExplorerGitStatusColorPalette is private @MainActor cache only. gitColor() is AppKit delegate usage.
Cmux Architecture Rethink ✅ Passed PR introduces MainActor-isolated cache with clear ownership. No timing repairs, delays, locks, or duplicate entrypoints. Proper state ordering and synchronization.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed This PR adds settings/color palette support for File Explorer git status colors. No windows, panels, or window controllers are created or modified. The check is not applicable.
Description check ✅ Passed The pull request description comprehensively covers the summary, architecture rationale, and verification steps performed.
✨ 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 issue-3848-file-explorer-git-status-colors

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 and usage tips.

@greptile-apps

greptile-apps Bot commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds fileExplorer.gitStatusColors to cmux.json, enabling users to override per-status label colors in the File Explorer with a per-style built-in fallback. It wires new config parsing, managed-UserDefaults storage, a @MainActor-isolated cached palette, and a synchronous cache refresh that fires before the fileExplorerStyleDidChange row-reload signal.

  • New FileExplorerGitStatusColorSettings / FileExplorerGitStatusColorPalette: status name normalization and a @MainActor singleton cache avoid per-row UserDefaults reads; palette reload is triggered synchronously on the main thread when the managed key is written or restored.
  • Managed-defaults lifecycle: parseFileExplorerSection validates and normalizes hex colors, then writes them into snapshot.managedUserDefaults; the existing backup/restore machinery in applyManagedSettings correctly handles key removal and triggers side effects via applyManagedDefaultSideEffects.
  • Web docs / schema: new fileExplorer section added to cmux.schema.json, the settings example block, and the configuration docs page; the prose description in page.tsx is hardcoded English and is not routed through next-intl.

Confidence Score: 5/5

Safe to merge; all previously flagged actor-isolation and cache-timing issues have been resolved, and the managed-defaults lifecycle correctly handles both applying and removing the new key.

The new parsing, caching, and notification wiring are all sound. The backup/restore path in restoreUserDefaultsBackup calls applyManagedDefaultSideEffects, so removing gitStatusColors from config also triggers a palette reload and fileExplorerStyleDidChange with no stale-cache window. The only finding is a new English-only prose description in the configuration docs page, which follows an existing pattern in that file and does not affect runtime behavior.

web/app/[locale]/docs/configuration/page.tsx — new hardcoded English description text should be added to web/messages/*.json for all 20 supported locales.

Important Files Changed

Filename Overview
Sources/FileExplorerGitStatusColors.swift New file introducing FileExplorerGitStatusColorSettings and the private @mainactor FileExplorerGitStatusColorPalette cache; actor isolation and bypass path for non-standard defaults (test suites) are all correctly handled.
Sources/KeyboardShortcutSettingsFileStore.swift parseFileExplorerSection validates unknown statuses and invalid hex via os.Logger; applyManagedDefaultSideEffects correctly reloads the palette and posts fileExplorerStyleDidChange; backup/restore path also calls applyManagedDefaultSideEffects so removal of the key correctly clears the cache.
Sources/FileExplorerStore.swift gitColor(for:) is now @mainactor and delegates to the cached palette; defaultGitColor(for:) supplies per-style fallback colors; GitFileStatus gains String+CaseIterable conformance required by rawValue-keyed normalization.
web/app/[locale]/docs/configuration/page.tsx fileExplorer section added to sectionOrder and rendered with a prose description; that description is hardcoded English and not routed through next-intl, introducing new untranslated user-facing text across 20 supported locales.
web/data/cmux.schema.json fileExplorer schema section correctly defined with additionalProperties: false and colorHex refs for all five statuses.
cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift Two new @mainactor tests cover startup palette application and malformed-entry resilience; synchronous palette reload on main thread avoids the run-loop timing issue from the previous review round.

Sequence Diagram

sequenceDiagram
    participant CF as cmux.json parser
    participant KS as CmuxSettingsFileStore
    participant UD as UserDefaults
    participant PA as FileExplorerGitStatusColorPalette
    participant NC as NotificationCenter
    participant FE as FileExplorerView (rows)

    CF->>KS: parseFileExplorerSection(gitStatusColors)
    KS->>KS: "normalize status names & hex values"
    KS->>KS: "snapshot.managedUserDefaults[key] = .stringDictionary(normalizedColors)"
    KS->>UD: defaults.set(normalizedColors, forKey: key)
    KS->>KS: applyManagedDefaultSideEffects(key)
    Note over KS: Thread.isMainThread check
    KS->>PA: "reloadSharedPaletteOnMainThread() [sync, @MainActor]"
    PA->>UD: dictionary(forKey: key)
    PA->>PA: "colorsByStatus = loadedColors(from: defaults)"
    KS->>NC: post(.fileExplorerStyleDidChange)
    NC->>FE: observer fires → reload rows
    FE->>PA: gitColor(for: status) → resolvedColor(for:fallback:)
    PA-->>FE: cached NSColor (override or style fallback)
Loading

Reviews (19): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Comment thread Sources/KeyboardShortcutSettingsFileStore.swift
Comment thread Sources/FileExplorerStore.swift Outdated
Review feedback flagged two small issues in the file explorer git status color path: new diagnostics bypassed structured logging, and every cell color lookup reached into UserDefaults. The palette is now cached behind a small model that refreshes from file-explorer appearance/defaults notifications, and config parse warnings use Logger.

Constraint: Project policy forbids local test runs; validation relies on CI plus the required tagged reload build.

Rejected: Leave low-priority review-bot feedback unresolved | user asked iterate-pr to continue autonomously.

Confidence: medium

Scope-risk: narrow

Directive: Keep file explorer color preference reads out of row and cell configuration paths.

Tested: git diff --check

Not-tested: Local tests/build completion; tagged reload is still queued behind the shared xcodebuild lock.
Comment thread cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
Comment thread Sources/FileExplorerStore.swift Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 12, 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: 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/FileExplorerStore.swift`:
- Around line 211-295: Move the git-status color settings and cache out of
FileExplorerStore.swift by extracting the entire
FileExplorerGitStatusColorSettings enum and the
FileExplorerGitStatusColorPalette class (including methods
normalizedStatusName(_:), resolvedColor(for:fallback:defaults:),
FileExplorerGitStatusColorPalette.shared, init(...), deinit,
color(for:fallback:defaults:), reload(), and loadedColors(from:)) into a new
dedicated Swift file (e.g., FileExplorerGitStatusColors.swift); preserve their
APIs, imports (Foundation/AppKit), and the UserDefaults key constant, update any
references in the codebase to import/use the new file, and ensure the
NotificationCenter observer registration and NSLock usage remain identical so
behavior and threading are unchanged.
🪄 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: 403f1dff-a6ad-4150-b6a9-764d226ef131

📥 Commits

Reviewing files that changed from the base of the PR and between ff3979e and edc3868.

📒 Files selected for processing (7)
  • Sources/CmuxSettingsJSONPathSupport.swift
  • Sources/FileExplorerStore.swift
  • Sources/KeyboardShortcutSettingsFileStore+Template.swift
  • Sources/KeyboardShortcutSettingsFileStore.swift
  • cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
  • web/app/[locale]/docs/configuration/page.tsx
  • web/data/cmux.schema.json

Comment thread Sources/FileExplorerStore.swift Outdated
Comment thread Sources/FileExplorerGitStatusColors.swift
coderabbitai[bot]
coderabbitai Bot previously requested changes May 12, 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: 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/FileExplorerGitStatusColors.swift`:
- Around line 75-77: The current guard in FileExplorerGitStatusColors that casts
defaults.dictionary(forKey: FileExplorerGitStatusColorSettings.userDefaultsKey)
as [String: String] should be changed to read as [String: Any] and then iterate
over each key/value to validate and coerce only valid string color values into a
new [String: String] dictionary; drop entries with wrong types or malformed
strings (e.g., non-String or invalid hex) so one bad value doesn't discard all
overrides. Update the code paths that use the resulting colors map (the same
variable used after the guard) to consume this sanitized dictionary, and keep
the existing userDefaultsKey and surrounding logic (e.g., inside
FileExplorerGitStatusColors initialization) unchanged otherwise.
🪄 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: f26e5c83-0b13-47c4-a7d6-72b63d302980

📥 Commits

Reviewing files that changed from the base of the PR and between edc3868 and 4e979f9.

📒 Files selected for processing (3)
  • GhosttyTabs.xcodeproj/project.pbxproj
  • Sources/FileExplorerGitStatusColors.swift
  • Sources/FileExplorerStore.swift

Comment thread Sources/FileExplorerGitStatusColors.swift Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 12, 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: 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/KeyboardShortcutSettingsFileStoreStartupTests.swift`:
- Line 473: The call to FileExplorerStyle.highDensity.gitColor(for: .modified)
is unused and should either be removed or documented; update the test in
KeyboardShortcutSettingsFileStoreStartupTests to delete the discarded call if it
serves no purpose, or if it is intentionally warming a cache to influence later
behavior, replace it with a clear comment describing that intention (mentioning
FileExplorerStyle.highDensity.gitColor(for: .modified) and the expected
cache/override effect) so the purpose is explicit.
🪄 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: 832d4283-5ace-43c3-90ba-bb011454094b

📥 Commits

Reviewing files that changed from the base of the PR and between 4e979f9 and 95c68d9.

📒 Files selected for processing (2)
  • Sources/FileExplorerGitStatusColors.swift
  • cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift

Comment thread cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit fbb6463. Configure here.

Comment thread Sources/FileExplorerGitStatusColors.swift Outdated
Comment thread cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
@lawrencecchen
lawrencecchen dismissed stale reviews from coderabbitai[bot], coderabbitai[bot], and coderabbitai[bot] May 13, 2026 00:31

Dismissed as stale: the CodeRabbit inline thread for extracting FileExplorerGitStatusColorSettings/FileExplorerGitStatusColorPalette was addressed in a later commit, the thread is resolved/outdated, and CodeRabbit posted a follow-up confirmation.

Comment thread Sources/FileExplorerGitStatusColors.swift
coderabbitai[bot]
coderabbitai Bot previously requested changes May 14, 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: 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/KeyboardShortcutSettingsFileStore.swift`:
- Around line 645-647: The warning currently logs sourcePath as public in
Self.logger.warning (the call that includes "Ignoring unknown file explorer git
status ... in \(sourcePath, privacy: .public)"); change the logging so that path
values are treated as private/redacted (e.g., use privacy: .private or a
redacted placeholder) instead of .public for sourcePath (and any other similar
occurrences around the same block) to avoid exposing local filesystem paths in
production logs.
🪄 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: 35e096e5-0bea-4452-8e27-90840c3b21c8

📥 Commits

Reviewing files that changed from the base of the PR and between 95c68d9 and 925c342.

📒 Files selected for processing (9)
  • GhosttyTabs.xcodeproj/project.pbxproj
  • Sources/CmuxSettingsJSONPathSupport.swift
  • Sources/FileExplorerGitStatusColors.swift
  • Sources/FileExplorerStore.swift
  • Sources/KeyboardShortcutSettingsFileStore+Template.swift
  • Sources/KeyboardShortcutSettingsFileStore.swift
  • cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
  • web/app/[locale]/docs/configuration/page.tsx
  • web/data/cmux.schema.json

Comment thread Sources/KeyboardShortcutSettingsFileStore.swift
@austinywang

Copy link
Copy Markdown
Contributor Author

Review follow-up applied in 7bc332d: fileExplorer.gitStatusColors warning logs now redact sourcePath with private privacy, and reloadSharedPaletteOnMainThread is explicitly @mainactor. The Greptile inline thread is resolved; CI is rerunning on the fix commit. Local tests were not run per repo instructions.

@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 18, 2026 07:01

Stale bot review after follow-up fix: sourcePath is now logged with privacy: .private at both warning sites in Sources/KeyboardShortcutSettingsFileStore.swift, and the latest CodeRabbit check is green.

@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — 45fb8a6f Deployed May 19, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow customizing File Explorer git status colors

3 participants