Skip to content

Sync upstream compact account menus - #101

Merged
ColumbusLabs merged 10 commits into
mainfrom
codex/upstream-sync-100-20260801
Aug 1, 2026
Merged

Sync upstream compact account menus#101
ColumbusLabs merged 10 commits into
mainfrom
codex/upstream-sync-100-20260801

Conversation

@ColumbusLabs

Copy link
Copy Markdown
Owner

Summary

  • merge Pete's upstream range 8ef86077e70ac27d45ddddaf49e409824ccdf668..9bb9c42fb6f0484c4d0e398e74393aeb52ac443d
  • add compact multi-account menu layouts for claude-swap, token accounts, and flat Codex account lists
  • warm sibling switcher tabs through the AppKit event-tracking run loop to avoid modal-menu starvation
  • preserve QuotaKit CLI/config wording, release ownership, CloudKit configuration, appcast URLs, and all build numbers

QuotaKit adaptations

  • localized the four new compact-account strings across all 23 Mac catalogs
  • localized provider window labels at the app boundary instead of rendering raw English metadata
  • kept stale quota context visible while always surfacing cached-snapshot refresh errors
  • referenced the synthetic before/after layout screenshots in QuotaKit's Claude docs
  • advanced only UPSTREAM_MONITOR_BASE and UPSTREAM_SYNC_DATE; shipped upstream and mobile versions are unchanged

Review and validation

  • independent review covered compact layout correctness, menu lifecycle/reconciliation, localization, docs/branding, release metadata, mobile/CloudKit boundaries, and test coverage
  • git diff --check passed
  • swift build passed
  • focused planner, compact-row, Claude compact-menu, switcher-warmup, and token-account suites passed
  • PARSER_LINT_BASE=origin/main ./Scripts/lint.sh lint passed with zero violations; locale, branding, palette, parser, docs-link, package, release-feed, and repository audits passed
  • local make test ran all 67 groups: 55 first-pass groups passed, one timeout group recovered through isolated retries, and one retry-sensitive group remained nonzero; required clean-environment CI is the merge gate

Fixes #100

steipete and others added 9 commits July 31, 2026 22:55
With four or more claude-swap accounts the Claude menu now pins the active
account's full card, renders inactive accounts as one-line rows sorted by
remaining headroom (red/amber below 10%/50% left, star on the healthiest
activatable account), and folds the healthy tail behind a summary row.
Clicking a compact row expands that account's full card; expansion state
resets when the menu closes. Fewer than four accounts keep the stacked cards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…w-8b33ad

Claude: compact multi-account menu (active card + headroom-sorted rows + collapsed tail)
Generalize the claude-swap compact layout: the plan renderer moves to a
shared StatusItemController+CompactAccountMenu extension, token-account
and flat Codex stacked lists project into the same planner, and the
planner labels constraint windows with provider metadata (session/weekly/
tertiary). Workspace-grouped Codex lists keep their sectioned stacked
layout. Expansion state is now keyed per account identity and provider.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ll-providers

Menu: extend compact multi-account layout to token accounts and Codex
NSHostingView commits SwiftUI updates asynchronously, so swapping a
recycled card's rootView during a provider switch painted the previous
tab's content for a frame before the new content landed — a visible
flicker. Force layout and draw of attached hosted rows inside the same
disabled-actions transaction as the menu item mutation on all three
update paths (cached swap, in-place reconcile, full rebuild).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Menu: eliminate provider tab-switch flicker with synchronous hosted-row flush
The synchronous flush in #2546 was insufficient: freshly built hosting
views are not yet parented into the menu window when the flush runs, and
NSHostingView still commits SwiftUI content asynchronously, so the first
switch to an unvisited tab painted a frame late. Pre-build every sibling
tab's rows into the merged switcher cache 120ms after each populate of
the open menu, forcing SwiftUI layout while detached; a tab switch then
attaches pre-rendered items through the instant cached-swap path. Also
flush pending drawing at the window level instead of per-view so newly
inserted rows are covered.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Menu: pre-build sibling switcher tabs so provider switches attach pre-rendered rows
@cursor

cursor Bot commented Aug 1, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@ColumbusLabs

Copy link
Copy Markdown
Owner Author

CI follow-up: initial run 30697550581 exposed a deterministic x86_64 XCTest failure in StatusMenuSwitcherWarmupTests. The test drove the current thread run loop even though @mainactor XCTest execution is not guaranteed to use that run loop. Commit 450b86d replaces the Foundation timer bridge with an explicit main CFRunLoopTimer registered for eventTracking and default modes, and tests execution, cancellation, and mode registration through stable seams. Focused StatusMenuSwitcherWarmupTests (3/3) and the full lint/localization/branding/palette suite pass locally. Fresh CI run 30699085387 is in progress on exact head 450b86d.

@ColumbusLabs
ColumbusLabs merged commit af0d8ac into main Aug 1, 2026
9 checks passed
@ColumbusLabs
ColumbusLabs deleted the codex/upstream-sync-100-20260801 branch August 1, 2026 13:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upstream Changes Available for Review

2 participants