Skip to content

Bump Bonsplit and narrow tab sidebar reads - #15942

Merged
teamleaderleo merged 3 commits into
mainfrom
chore/bonsplit-bump-perf
Sep 30, 2026
Merged

teamleaderleo merged 3 commits into
mainfrom
chore/bonsplit-bump-perf

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Thanks @STRML: the bonsplit performance work in this bump is yours (manaflow-ai/bonsplit#221, manaflow-ai/bonsplit#222, manaflow-ai/bonsplit#233), and the tabIds(inPane:) swap comes from your #12023 :)

Bump the Bonsplit submodule to the merged performance and terminal-sharing updates. Sidebar ordering now reads tabIds(inPane:), avoiding construction of full tab snapshots, and the title ownership comment reflects Bonsplit's per-tab observation.

Changelog

Changed: tab title updates, such as agent spinners, redraw only the changed tab instead of the whole tab bar -- thanks @STRML!

Validation: python3 scripts/verify-local.py --only swift-syntax --swift-changed passed. No cmux app build was run locally.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Bumps the Bonsplit submodule to the merged performance and terminal-sharing updates, and narrows sidebar tab reads.

  • Sidebar ordering now reads tabIds(inPane:), avoiding construction of full tab snapshots.
  • Tab title updates now redraw only the changed tab instead of the entire tab bar.
  • The title ownership comment reflects Bonsplit's per-tab observation.

Written for commit 73c0d74. Summary will update on new commits.

Review in cubic

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo added the full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks. label Sep 30, 2026
@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 49 seconds.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: b4d56783-8213-4183-abe9-df6e913b2d5e

📥 Commits

Reviewing files that changed from the base of the PR and between 34caf67 and 73c0d74.

📒 Files selected for processing (3)
  • Sources/Workspace+TitleOwnership.swift
  • Sources/Workspace.swift
  • vendor/bonsplit
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Heads up on ordering, because these two PRs both move the vendor/bonsplit gitlink and the wrong order repeats the bug that broke main.

main is currently at b32f48b9200, which predates BonsplitContrastPalette and TabPresence, so main does not compile. #15747 caused that by merging from a stale base and reverting the pin.

The three pins form a straight line:

pin date where
b32f48b9200 09-29 10:00Z main now, broken
83857fa043b 09-30 06:59Z #15930, a minimal restore
bf5f0519bd3 09-30 10:50Z this PR, 6 ahead of 83857fa043b, 0 behind

#15930 is gitlink-only, has auto-merge on, and its macOS compile admission already passed, so it is the fast path to a compiling main. It should land first.

Two things follow:

  1. When fix: restore the bonsplit pin main's sizing code needs #15930 lands, this PR will get a one-line gitlink conflict. Keep bf5f0519bd3, this PR's value. It is strictly ahead, so nothing is lost.
  2. If this PR lands first instead, do not let fix: restore the bonsplit pin main's sizing code needs #15930 merge afterwards. It would move the pin back from bf5f0519bd3 to 83857fa043b, which is the same stale-base revert that started this. I am watching for that and will close fix: restore the bonsplit pin main's sizing code needs #15930 if this one lands first.

No action needed on the code here. Just do not resolve that gitlink conflict toward the older pin.

🤖 Generated with Claude Code

Keep the Bonsplit pin at bf5f0519bd3 after the stale-base restore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Sep 30, 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.

@austinywang

Copy link
Copy Markdown
Contributor

bonsplit main now also carries manaflow-ai/bonsplit#261, merged as bb03f7db17f7 on top of bf5f0519bd. It fixes an app-host abort that has been failing main's full suite (#15488): objc: Cannot form weak reference to instance … of class NSKVONotifying_NSWindow.

TabBarHostWindowReader read view?.window in a deferred block. For a window that had already deallocated, storing that in the shortcut-hint monitor's weak hostWindow aborts. The abort hit at least 10 full-suite runs between 09-28 and 09-30, taking down whichever test was running (SocketListenerAcceptPolicyTests, WorkspaceSplitStartupCommandTests, ZshShellIntegrationHandoffTests). The crash symbolicates to that reader in the Bonsplit binary from run 36653187570.

Could this bump pin bb03f7db17f7 instead of bf5f0519bd, so the fix reaches cmux with it? It's one commit on top and only touches TabBarView.swift plus its new test.

@github-actions

Copy link
Copy Markdown
Contributor

Dogfood tours of d98273f3

sidebar-and-chrome-tour at d98273f3: not run

skipped: CI left no app build for this head (its compile failed or was cancelled)

Tours are picked by the paths globs in dogfood/scenarios/*.json; a Dogfood-tours: a, b line in the description picks them instead (none turns this off). Look at every frame before merging: a green tour only means no step failed.

@github-actions

Copy link
Copy Markdown
Contributor

CI failure attribution

CI failed on d98273f372 (run 36711788447 attempt 2): 6 code, 1 unknown.

Job Verdict Why
ui-tests unknown no known signature; failed step: Wait for the UI test run
macos / app-host unit tests (1/7) code a test failed
macos / app-host unit tests (4/7) code a test failed
macos / app-host unit tests (7/7) code a test failed
macos / app-host unit tests (3/7) code a test failed
macos / app-host unit tests (2/7) code a test failed
macos / app-host unit tests (6/7) code a test failed
Matched log lines
macos / app-host unit tests (1/7): ✘ Test testWorkspaceTerminalFontSizeShortcutSeedsDockCreatedAfterShortcut() recorded an issue at AppDelegateEqualizeSplitsShortcutTests.swift:707:25: Expectation failed: try expression() == nil
macos / app-host unit tests (4/7): ✘ Test "Click and Return publish the same local identity before the first suspension" recorded an issue with 1 argument keyboard → false at CloudWorkspaceRowOpenTests.swift:16:6: Time limit was exceeded: 300.000 seconds
macos / app-host unit tests (7/7): ✘ Test "A create adopts the reserved workspace and tab once without selecting it" recorded an issue at CloudMachineWorkspaceAdoptionTests.swift:99:6: Time limit was exceeded: 300.000 seconds
macos / app-host unit tests (3/7): ✘ Test "Failed agent rename keeps the accepted title and daemon naming authority" recorded an issue at CloudSidebarRenameReconciliationTests.swift:62:6: Time limit was exceeded: 300.000 seconds
macos / app-host unit tests (2/7): ✘ Test "A Cloud tree rename of a user-titled workspace reaches the sidebar row and the title bar" recorded an issue at CloudWorkspaceRenameSurfaceParityTests.swift:182:6: Time limit was exceeded: 300.000 seconds
macos / app-host unit tests (6/7): ✘ Test aMissingTrackedTabClearsCoordinatesEvenWhenOtherViewsRemain() recorded an issue at CloudPlacementCoordinatorTests.swift:635:9: Expectation failed: (catalog.projection(forPanel: panel)?.remoteTabID → "tab_gone") == nil

Not re-run automatically: ui-tests, macos / app-host unit tests (1/7), macos / app-host unit tests (4/7), macos / app-host unit tests (7/7), macos / app-host unit tests (3/7) are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's.

@austinywang

Copy link
Copy Markdown
Contributor

The bonsplit weak-reference abort is still reaching main's app-host shards. In the #15488 validation full suite, shard 3 of run 36732010954 (cmux14) crashed the app host with:

objc[28013]: Cannot form weak reference to instance (0xc03378780) of class NSKVONotifying_NSWindow. It is possible that this object was over-released, or is in the process of deallocation.
*** Program crashed: Aborted

The fix is manaflow-ai/bonsplit#261 (bb03f7d), which neither pin has yet:

bonsplit main's head 7e5598e (the merge of manaflow-ai/bonsplit#265) contains all three: bf5f051 (#268), bb03f7d (#261) and the hint-pill branch bd340ad. Could you merge main into this branch and pin 7e5598e when you resolve the vendor/bonsplit conflict? Your Workspace and title-ownership changes should carry over unchanged, since 7e5598e has the same TabItem and tabIds(inPane:) API as bf5f051. I can push that update to this branch if you'd rather; it isn't open for maintainer edits, so I haven't.

@austinywang

Copy link
Copy Markdown
Contributor

I opened #16094 as a draft so the #261 crash fix is compile-checked while this PR is open. It pins bonsplit main (7e5598e) and carries your two app edits, credited to you. If you update this PR's pin to 7e5598e, I'll close #16094 and this one can land instead.

Preserve the Bonsplit gitlink at bf5f0519bd3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo enabled auto-merge (squash) September 30, 2026 19:12
@teamleaderleo
teamleaderleo merged commit f512325 into main Sep 30, 2026
34 of 47 checks passed
@teamleaderleo
teamleaderleo deleted the chore/bonsplit-bump-perf branch September 30, 2026 19:13
@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for 73c0d7488d, merged 2026-09-30 19:13:18 UTC

  • Not verified at merge: ci-status (not reported), macOS compile admission (in progress), CI fast guards (in progress), Claude wrapper regressions (in progress), GhosttyKit release check (in progress), guards (18) (in progress), swift-package-tests (in progress)
  • Verified: Fast static checks, full-suite-coverage, Testbox broker trust boundary, Web complexity, web-validation
  • Skipped by policy: admission-placement, browser, Dogfood build #​${{ github.event.pull_request.number }}, remote-daemon, suite-coverage, web, web-build, web-database-tests, web-tests
  • Full suite: runs on main after merge.

Labeled merged-unverified: if main breaks near this merge, look here first.

@github-actions github-actions Bot added the merged-unverified A judging check was not green at merge; see the merge receipt comment label Sep 30, 2026
austinywang added a commit that referenced this pull request Sep 30, 2026
main's #15942 moved vendor/bonsplit to bf5f051, which lacks
TabContextAction.close (b4fc5e2, needed by #15613's `case .close:`) and
the #261 weak-reference fix (bb03f7d). The submodule conflict resolves to
754462298cb, bonsplit main, which contains bf5f051, b4fc5e2 and bb03f7d.
@austinywang

Copy link
Copy Markdown
Contributor

@teamleaderleo this merge moved vendor/bonsplit from b4fc5e2 back to bf5f051, and main no longer compiles. bf5f051 has no TabContextAction.close, but main's Sources/Workspace.swift:15075 and Sources/DockSplitStore+TabContextActions.swift:34 switch on case .close: (from #15613). The pin also drops bonsplit's #261 fix for the Cannot form weak reference … NSKVONotifying_NSWindow abort that hits main's app-host shards.

#16094 is merged up to main (58a5f3e) and pins bonsplit main's head, 7544622. That commit contains bf5f051, b4fc5e2, bd340add and bb03f7d, so the pin moves forward from here. Your two app edits are already on main through this PR; #16094 keeps only a comment tweak, credited to you. I'll merge #16094 as soon as its compile admission and tests pass.

austinywang added a commit that referenced this pull request Sep 30, 2026
The forward-only guard checks submodules out two commits deep. When an
old pin sits deeper than that, it asks the GitHub compare API, which
fails whenever the repository's shared Actions token is out of quota.
The guard then reports "could not determine ancestry". It did so on
every run of this PR (bf5f051 -> 7544622, three commits deep) and of
#15942, although GitHub's compare says behind_by=10, ahead_by=0.

As a last resort after the compare, the guard now fetches the missing
history (commits and trees, no blobs) and decides locally. It never runs
when the local check or GitHub already answered, so passing and
rejected moves keep their current path. A shallow bonsplit clone at
7544622, as CI makes it, now resolves bf5f051 as forward.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
austinywang added a commit that referenced this pull request Oct 1, 2026
… guard fetch history (#16094)

* fix: pin bonsplit main with the deallocating-window hint fix

main's app-host shards still abort with "objc: Cannot form weak reference
to instance ... of class NSKVONotifying_NSWindow" (shard 3 of #15488
validation run 36732010954 on cmux14). manaflow-ai/bonsplit#261 (bb03f7d)
fixes it, but main pins bd340ad, the hint-pill branch from #15821, which
predates it.

Pin bonsplit main's head, 7e5598e: it merges the hint-pill branch over
bf5f051 (#268) and bb03f7d (#261), so main keeps #15821's bonsplit changes
and gains the fix. The two app edits are #15942's adaptation to the
performance changes that come with bf5f051: read pane tab ids through
tabIds(inPane:), and correct the title-refresh comment now that bonsplit
observes each tab item.

Refs #15488

Co-authored-by: Leo Li <cheerleaderleo@outlook.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: say a title frame wakes only its tab's views

With bonsplit observing each tab item, a title-only refresh no longer
invalidates the whole tab bar subtree; the comment at the call site still
said it did, contradicting the doc comment on refreshTabLabel.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(settings): add the missing try and capture that break main's compile

#14868 merged 74c3a5f after its compile admission failed, so
CmuxSettings, and with it the app, no longer builds on main:

  JSONConfigAtomicPublisher.swift:74: call can throw but is not marked
  with 'try'
  JSONConfigStore.swift:601: reference to property 'fileURL' in closure
  requires explicit use of 'self' to make capture semantics explicit

The post-exchange rollback now uses `if try`, like the publisher's two
other rollback call sites, so a failed rollback still reports
sourceChangedRollbackFailed. The isTargetCurrent closure captures the
store's nonisolated fileURL by value instead of the actor.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: expect the cancelled-run message from the tests gate

The same change as #16168 (108bd10), carried here so this PR's Linux
guards pass and its macOS jobs are not declined while main is red. #16150
made the ci.yml tests gate report a cancelled linux-preflight as
"cancelled: linux-preflight"; the test kept the old text.

Refs #15488

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: let the submodule guard fetch history when GitHub can't answer

The forward-only guard checks submodules out two commits deep. When an
old pin sits deeper than that, it asks the GitHub compare API, which
fails whenever the repository's shared Actions token is out of quota.
The guard then reports "could not determine ancestry". It did so on
every run of this PR (bf5f051 -> 7544622, three commits deep) and of
#15942, although GitHub's compare says behind_by=10, ahead_by=0.

As a last resort after the compare, the guard now fetches the missing
history (commits and trees, no blobs) and decides locally. It never runs
when the local check or GitHub already answered, so passing and
rejected moves keep their current path. A shallow bonsplit clone at
7544622, as CI makes it, now resolves bf5f051 as forward.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): apply migrations the way production does everywhere

#15423 added a CREATE INDEX CONCURRENTLY migration and taught the
production migrator (migrate-planetscale.mjs) to run it outside a
transaction. CI, web-validation and local databases still ran
`drizzle-kit migrate`, which wraps every migration in one transaction,
so main's web-db-migrations job fails with
"CREATE INDEX CONCURRENTLY cannot run inside a transaction block", and
`bun run db:migrate` fails for anyone with a fresh local database.

The production migrator's loop moves unchanged into
scripts/cloud-vm/apply-migrations.mjs, and a new scripts/db-migrate.mjs
runs it against DIRECT_DATABASE_URL or DATABASE_URL. Every caller of
`drizzle-kit migrate` now uses it: ci-web, web-validation,
cloud-vm-guest-install, ios-streamed-validate, db-local.sh, and
dev-local.sh through db-local.sh. CI now exercises the code path
production runs.

Checked on a scratch Postgres 14: all 93 migrations apply, a second run
applies none, and cloud_vms_observed_destroy_cleanup_idx is valid.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): use the transaction's json helper in the outbox test

main's web typecheck fails since #15423:

  tests/vm-workflows.test.ts(6219,37): error TS18047: 'sql' is possibly 'null'.

The test narrows the file's `let sql` at its start, but TypeScript drops
that narrowing inside the `sql.begin` callback. The insert there now
uses the transaction's own `tx.json`, which is also the connection that
runs the insert.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Document the French Actions discovery titles as invariant

The same change as #16175 (ee38771), carried so this PR's static
checks pass while main is red. #13232 added actions.discovery.menuTitle
and actions.discovery.dialogTitle, whose French text is identical to the
English, and the localization parity check fails on main.

Refs #15488

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): insert a real JSON null in the malformed cleanup-row test

"Cloud VM database schema > rejects malformed transferred cleanup rows"
(#15423) never ran on main, because main's migrations failed before the
database behavior tests. With migrations fixed it fails:

  expect((insertError)?.code).toBe("23514")
  Expected: "23514"  Received: "23502"

Its first malformed value is `null`, and postgres.js binds
`sql.json(null)` as SQL NULL. The NOT NULL column rejects that (23502)
before the check constraint the test is about. The row under test is a
JSON null document, so that case now inserts `'null'::jsonb`, and the
check rejects it with 23514 like the other nine.

Checked on a scratch Postgres 14 with postgres.js: sql.json(null) gives
23502, the JSON null gives 23514, all ten malformed values give 23514,
and {modelPlane: true} and {homeVolume: "v"} are accepted.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(config): pass actionReferenceID on the setting-action trust path

main doesn't compile since #13232 (ef75ca7) and #14868 (10e78b5)
merged 13 minutes apart:

  Sources/CmuxConfig.swift:2816:51: error: missing argument for parameter
  'actionReferenceID' in call

#13232 added the required actionReferenceID field to
ResolvedSurfaceTabBarButtonEntry. #14868 added a new return of that
struct for a project button that shows a global setting action, without
the field. That button still shows and runs the referenced action, like
the ordinary resolved path below it, so it reports the same
resolvedIdentifier. Actions & Launchers discovery then lists the action
as placed on the tab bar. The argument shares a line to keep the file
within its length budget.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(actions): name setting actions in the discovery summary

The second compile error from #13232 and #14868 merging 13 minutes apart,
hidden behind the first:

  Sources/AppDelegate+WorkspaceActionSave.swift:126:9: error: switch must be
  exhaustive

#14868 added CmuxSurfaceTabBarButtonAction.setting, and #13232's
Actions & Launchers summary switched over the enum without it. The
summary's type token follows each action's cmux.json "type", so a
setting preset shows "settingPreset" and any other setting change
"setting". The switch is now one case per line, which keeps the file
within its length budget. Every other exhaustive switch over the enum
already handles .setting.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep Workspace+TitleOwnership.swift as main has it

The title-frame comment tweak is cosmetic and was the only Swift change
left in this PR. Without it the PR is web and CI only, so its checks
don't wait on main's cmuxTests build.

Refs #15488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(web): pin the seats-follow-membership billing copy

The billing panel's over-seat line is asserted here, and this test has
been red on main since the dashboard SPA port: it already checks that no
add-seats link is offered, and the port brought one back. Widen it to the
copy the rule actually calls for, so both halves of the regression are
covered.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Leo Li <cheerleaderleo@outlook.com>

* fix(web): restore the seats-follow-membership copy the dashboard port dropped

The Team subscription quantity follows the member count, so an over-seat
line has nothing for an admin to act on: the reconciler updates Stripe on
the next membership fact. That was settled in 06f4a7c, which reworded
the line in all 20 locales, removed the add-seats link beside it, and
dropped the members-page seat nudge.

The dashboard SPA port rebuilt the billing panel from the pre-06f4a7c
version at a new path, so git saw no conflict and the link came back, and
the locale files went back to the soft-seat wording. `web/tests/
dashboard-billing-screen.test.tsx` has been red on main ever since, which
fails the required `ci-status` on every web pull request.

Restores the wording and drops the link. `seatNudge` and
`seatNudgeAction` go too: the nudge they belonged to is gone from the
members page and nothing reads them. `docs/team-settings-and-invites.md`
already records the rule, and the stale "seats are soft" comment left
hanging over an unrelated type in `team-members.tsx` is removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Leo Li <cheerleaderleo@outlook.com>

* test(web): pin the new-team seat copy too

The same merge-resolution path that reverted the billing panel's copy also
reverted this line, and nothing asserted on it. Pin the sentence and the
old wording's absence so a stale merge side fails the shard instead of
shipping.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Leo Li <cheerleaderleo@outlook.com>

* test(coderouter): close pinned proxy test connections

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* fix(coderouter): handle pinned proxy body failures without hanging

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* fix(ci): address follow-up review findings

* merge: keep main's current bonsplit pin

* fix(ci): harden locale and migration review follow-ups

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* fix(ci): finish migration and locale follow-ups

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* fix(web): preserve locale cookies during RSC navigation

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* test(web): remove duplicate locale race case

---------

Co-authored-by: Leo Li <cheerleaderleo@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-ci EXPENSIVE: full macOS tests/builds; overrides selective PR routing. Not needed for normal checks. merged-unverified A judging check was not green at merge; see the merge receipt comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants