Skip to content

Update Bonsplit for tab icon and color customization - #9360

Closed
lawrencecchen wants to merge 8 commits into
mainfrom
feat-bonsplit-tab-appearance
Closed

lawrencecchen wants to merge 8 commits into
mainfrom
feat-bonsplit-tab-appearance

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Aug 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • update Bonsplit for separate Tab Icon… and Tab Color right-click actions
  • bridge the tab palette to the live workspace color palette, including registered custom colors
  • render a selected tab color as the workspace-style leading rail while preserving host backgrounds
  • provide a searchable broad SF Symbol picker with custom symbol entry
  • persist tab customization through reloads, splits, and drag previews

Dependency

Validation

@coderabbitai

coderabbitai Bot commented Aug 1, 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 workspace initializer now provides Bonsplit with tab color palette entries from WorkspaceTabColorSettings and persists newly selected custom colors. The vendor/bonsplit submodule reference also advances to a newer commit.

Changes

Workspace tab color palette integration

Layer / File(s) Summary
Update Bonsplit reference
vendor/bonsplit
The submodule pointer changes to commit 81c9dea8d8ae45f82d5ac3fdee8c219c1448a4e9.
Wire workspace tab color settings
Sources/Workspace.swift
The workspace maps palette entries to Bonsplit tab colors and registers newly selected custom colors through WorkspaceTabColorSettings.addCustomColor.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • manaflow-ai/cmux#9030: Both changes modify workspace tab customization handling in Sources/Workspace.swift.

Suggested reviewers: austinywang, azooz2003-bit

🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description clearly summarizes the changes and validation, but it omits the required demo video, review trigger, and checklist sections. Add the demo video, review trigger block, and completed checklist from the repository template.
✅ Passed checks (24 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 Workspace and BonsplitController are @MainActor; both new callback properties explicitly require @MainActor, and TabColorPaletteEntry is Sendable. No new background access or shared mutable Sendabl...
Cmux Swift Blocking Runtime ✅ Passed The cmux diff adds only Bonsplit palette and color-registration callbacks; no blocking or timing primitives were added, and the Bonsplit snapshot comparison shows existing primitives unchanged.
Cmux Browser Automation Off-Main ✅ Passed The PR changes only Workspace tab-color callbacks and a Bonsplit pointer; TerminalController, execution policy, and policy tests are unchanged, so no browser socket command routing changed.
Cmux Expensive Synchronous Load ✅ Passed The diff adds only Bonsplit color callbacks. They read a small UserDefaults palette and register a color; no agent-history loader, transcript parse, directory scan, or per-record syscall is added.
Cmux Cache Substitution Correctness ✅ Passed The diff adds live palette-provider and registration callbacks; palette() reads UserDefaults on each call, and addCustomColor persists there. No cached value replaces an authoritative persistence o...
Cmux No Hacky Sleeps ✅ Passed The PR changes only Sources/Workspace.swift and a Bonsplit submodule reference; no covered TypeScript, JavaScript, shell, or build/runtime delay code was introduced.
Cmux Algorithmic Complexity ✅ Passed The diff adds one linear palette conversion and registration closure. The palette has 16 built-in colors, and Bonsplit scans it once per context menu; no workspace-scale nested or batch scan is int...
Cmux Swift Concurrency ✅ Passed The cmux diff adds only synchronous Bonsplit palette and color-registration closures; it adds no Dispatch, Task, Combine, completion-handler, or fire-and-forget pattern.
Cmux Swift @Concurrent ✅ Passed The diff adds only synchronous, @MainActor-compatible palette callbacks; the Bonsplit update adds no new nonisolated async work or @concurrent misuse.
Cmux Swift Package Boundaries ✅ Passed The only app-target change is 8 lines of Bonsplit palette and registration wiring in Workspace initialization; feature logic is in the vendored Bonsplit submodule.
Cmux Swiftpm Lockfiles ✅ Passed The PR changes only Workspace.swift and the vendored Bonsplit gitlink; no cmux Package.swift, Xcode package reference, or lockfile changes are present, and Bonsplit preserves its upstream Package.r...
Cmux Swift Logging ✅ Passed The added cmux Swift lines only register Bonsplit color callbacks; they add no print, debugPrint, dump, NSLog, ad hoc logging, Logger, or sensitive data.
Cmux User-Facing Error Privacy ✅ Passed The production diff adds tab color callbacks and Bonsplit customization UI only; added errors use the generic text “This symbol is not available.”
Cmux Full Internationalization ✅ Passed New Bonsplit UI labels use Bundle.module.localizedString and every changed key has translated English and Japanese entries; Workspace adds no user-facing text or app-catalog changes.
Cmux Swiftui State Layout ✅ Passed The cmux diff adds only Bonsplit palette closures. New Bonsplit views use value @State and action closures; existing @Observable, GeometryReader, and row state patterns are unchanged.
Cmux Architecture Rethink ✅ Passed The diff adds direct palette callbacks owned by WorkspaceTabColorSettings; Bonsplit uses value snapshots and action closures, with no new sleeps, polling, locks, observers, or duplicate lifecycle o...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed The cmux diff only adds Bonsplit tab-color palette callbacks in Workspace.swift and updates a dependency pointer; it adds no standalone window or close-shortcut routing.
Cmux Source Artifacts ✅ Passed The diff changes only Sources/Workspace.swift and the intentional vendor/bonsplit gitlink; no logs, caches, build output, scratch directories, or copied artifacts are added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed The only changed production Swift code adds Bonsplit tab-color palette and custom-color handlers; it adds no test/debug member, guard, accessor, or widened visibility.
Cmux No Ambient Global State ✅ Passed The Swift diff adds only two Workspace initializer closures at Sources/Workspace.swift:3200-3207; it adds no top-level functions, mutable globals, namespaces, or singleton declarations.
Title check ✅ Passed The title clearly describes the Bonsplit tab icon and color customization changes.
✨ 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 feat-bonsplit-tab-appearance

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.

@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: 605773e958

ℹ️ 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 vendor/bonsplit Outdated
@@ -1 +1 @@
Subproject commit e3837a787968d8235106d12418b653e8d1e2619c
Subproject commit 0459e256f024349487ecf55957973d5066566f4e

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Point Bonsplit at a commit on remote main

The new gitlink targets 0459e256, identified by this commit as belonging to the still-dependent Bonsplit PR #196 rather than to the submodule's remote main. A fresh checkout therefore depends on an unmerged, potentially ephemeral ref and can fail to initialize the submodule once that ref becomes unreachable; merge/push the dependency to Bonsplit main before updating this pointer.

AGENTS.md reference: AGENTS.md:L80-L80

Useful? React with 👍 / 👎.

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.

Confirmed. This is a stacked dependency: manaflow-ai/bonsplit#196 must land before this PR. The dependency branch keeps commit 3d0185f reachable during review. I am leaving this thread open until Bonsplit main contains that commit.

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 1 file

Re-trigger cubic

@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 `@vendor/bonsplit`:
- Line 1: Update the vendor/bonsplit submodule gitlink to reference an existing,
reachable commit in the Bonsplit remote, restoring a resolvable submodule commit
before merge.
🪄 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: a2c837ec-6694-4443-90d1-d62295edcc0b

📥 Commits

Reviewing files that changed from the base of the PR and between 605773e and 075e53c.

📒 Files selected for processing (1)
  • vendor/bonsplit

Comment thread vendor/bonsplit Outdated

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 1 file

Re-trigger cubic

@lawrencecchen lawrencecchen changed the title Update Bonsplit for mutable tab backgrounds Update Bonsplit for tab appearance customization Aug 1, 2026
@cursor

cursor Bot commented Aug 1, 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.

@lawrencecchen lawrencecchen changed the title Update Bonsplit for tab appearance customization Update Bonsplit for tab icon and color customization Aug 1, 2026
@cursor

cursor Bot commented Aug 2, 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.

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

2 participants