Add high-contrast mode for inactive displays - #2210
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 16, 2026, 1:40 PM ET / 17:40 UTC. Summary Reproducibility: not applicable. as a bug reproduction: this PR implements a new optional rendering mode, and its observable benefit is demonstrated with fresh-bundle multi-display screenshots. Review metrics: 3 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Next step before merge
Security Review detailsBest possible solution: Land the default-off, Icon & percent-scoped implementation after required checks complete, then let the merge close the linked feature request. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction: this PR implements a new optional rendering mode, and its observable benefit is demonstrated with fresh-bundle multi-display screenshots. Is this the best way to solve the issue? Yes. Keeping native rendering as the default while narrowly enabling the attributed-title path for Icon & percent is the most compatibility-preserving solution supported by the proof. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against f9993821856e. Label changesLabel changes:
Label justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (4 earlier review cycles)
|
|
The PR body now contains inspectable, redacted proof for every state requested by the latest review:
The prior review's @clawsweeper re-review |
|
🦞👀 Command router queued. I will update this comment with the next step. |
…nactive-displays # Conflicts: # CHANGELOG.md
|
Addressed the P2 style-scope finding in
The full @clawsweeper re-review |
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
Merged as 6ffdfeb. Verification:
|

Summary
NSTextAttachmentwhen enabledContext
On multi-display macOS setups, AppKit dims standard
NSStatusBarButtonimage/title content quite aggressively on inactive displays. A three-display comparison on macOS 26.5.2 showed that template images embedded in an attributed title remain significantly more legible.macOS still applies some system-level inactive-display dimming, so this is an opt-in readability improvement rather than a promise that applications can force an absolutely identical active/inactive appearance. The scope is intentionally limited to Icon & percent, which is the renderer covered by the live visual proof below. See #2190 for the original user screenshot and request.
Visual proof
Tested from a freshly built bundle at
b3a64eb(CodexBar0.43.1 (105)) on macOS26.5.2 (25F84)with three extended displays and mirroring disabled.Active/inactive displays, Dark/Light appearances, toggle off/on
The matching inactive-display crops show median non-background pixel luminance increasing from about 35 to 115 in Dark appearance and from about 34 to 113 in Light appearance (roughly 3.3×). The active-display appearance remains visually unchanged.
Menu-open/highlighted and toggle-off restoration
Top: the status item is highlighted with its menu open. Bottom: the same inactive display with high contrast off (left, native dimming restored) and then on again (right, readability restored). The captures are cropped to the menu bar and CodexBar card only.
Warning-flash compatibility
This side-by-side artifact was rendered through the production
quotaWarningFlashImageandhighContrastButtonTitlemethods using the real Codex brand asset. The one-off export harness was removed after capture and is not part of the patch.The live setting was restored to enabled after the off/on check. No real quota notification was manufactured; the warning path was exercised through the production renderer and focused automated tests instead.
Validation
maininto the PR branch and resolved the changelog conflict without rebasing or force-pushingDEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer make checkpassed (SwiftFormat clean; SwiftLint: 0 violations in 1450 files)PreferencesPaneSmokeTests,StatusItemAnimationSignatureTests, andStatusItemQuotaWarningFlashTestsmake teststopped after retrying one unrelated, environment-dependent existing test:browser uninstall invalidates cookie source immediately; on this Mac, Launch Services finds another registered Chrome installation after the test simulates uninstall, and bothBrowserDetection.swiftandBrowserDetectionTests.swiftare identical to currentorigin/mainCloses #2190