Repository navigation
Description
OverflowBar version
1.5.0 (build 19)
macOS version
27.2 (build 26B123)
Mac and display setup
Mac Studio and
Affected menu bar app
Mac Studio M5 Max, single external 4K monitor (3840×2160 @ 1920×1080 scaled, 60 Hz), no built-in display
Reproduction steps
OverflowBar crashes immediately on launch on macOS 27.2 (SIGSEGV, stack overflow from recursive Combine update loop)
Summary
On macOS 27.2 (build 26B123), OverflowBar 1.5.0 (build 19) and 1.5.1 (build 20) both crash roughly one second after launch, before the UI appears ("flashes then quits"). The crash is a SIGSEGV / EXC_BAD_ACCESS at the main thread's stack guard region — i.e. a stack overflow caused by an infinite recursion. 1.0.19 (build 17) launches and runs normally on the same machine, so the regression was introduced with the new native engine in 1.5.0.
Environment
- macOS: 27.2 (26B123), arm64 (Apple silicon), Mac Studio (
Mac17,14) - App:
/Applications/OverflowBar.app, bundle idcom.overflowbar.mac26.v6, universal (arm64 + x86_64), ad-hoc signed - No preferences file existed for the bundle at the time (
defaults read com.overflowbar.mac26.v6→ domain not found), so this is the first launch on a clean state, not a corrupt-config case.
Steps to reproduce
- Install OverflowBar 1.5.0 or 1.5.1 on macOS 27.2.
- Launch it normally (double-click /
open). - The icon flashes briefly and the process exits in ~1 second. No UI is ever usable.
Expected
App launches and shows its menu bar item / Settings.
Actual
App crashes within ~1 second, every launch. Reproduced repeatedly (10 crash reports collected across 1.5.0 and 1.5.1).
Version matrix (same machine, macOS 27.2)
| Version | Build | Result |
|---|---|---|
| 1.5.0 | 19 | Crash (SIGSEGV, stack overflow) |
| 1.5.1 | 20 | Crash (identical signature) |
| 1.0.19 | 17 | Launches and stays running |
Note: the 1.5.1 release notes state "macOS 27 runtime behavior remains untested", which matches what we see.
Crash signature (from a 1.5.0 .ips report)
exception:
type: EXC_BAD_ACCESS
signal: SIGSEGV
subtype: KERN_PROTECTION_FAILURE at 0x000000016acc3ff8
message: "Could not determine thread index for stack guard region"
termination:
indicator: "Segmentation fault: 11"
vmRegionInfo:
--> Stack Guard 1674c0000-16acc4000 [ 56.0M] ---/rwx SM=PRV
Stack 16acc4000-16b4c0000 [ 8176K] rw-/rwx SM=COW
The faulting thread is com.apple.main-thread. The backtrace contains a repeating cycle — the same block of frames repeats ~6 times before hitting the stack guard (truncated excerpt, one iteration):
SwiftUICore SubscriptionLifetime.shouldAcceptValue(for:)
SwiftUICore SubscriptionLifetime.Connection.receive(_:)
Combine ObservableObjectPublisher.Inner.send()
Combine ObservableObjectPublisher.send()
Combine PublishedSubject.send(_:)
Combine closure #1 in static Published.subscript.setter
Combine specialized static Published.withMutation<A>(of:keyPath:storage:apply:)
Combine static Published.subscript.setter
OverflowBar partial apply for closure #1 in MenuBarItemStore.init(preferences:)
OverflowBar NativeMenuBarEngine.cancel()
OverflowBar MenuBarItemStore.cancelOperation()
OverflowBar MenuBarItemStore.setLayoutManagementEnabled(_:)
OverflowBar StatusBarController.updateDivider()
OverflowBar partial apply for closure #1 in StatusBarController.init(store:showSettings:)
... -> back to "partial apply for closure #1 in MenuBarItemStore.init(preferences:)" and repeats ...
So the cycle is:
StatusBarController.updateDivider()
-> Combine @Published setter
-> closure #1 in MenuBarItemStore.init(preferences:)
-> NativeMenuBarEngine.cancel()
-> MenuBarItemStore.cancelOperation()
-> MenuBarItemStore.setLayoutManagementEnabled(_:)
-> StatusBarController.updateDivider() (again)
Under lldb, the 1.5.1 build stops at:
stop reason = EXC_BAD_ACCESS (code=2, address=0x16f603fb8) # address is in the main-thread stack region
frame #0: SwiftUICore`UpdateGroup.begin() + 64
Suspected root cause
StatusBarController.updateDivider() and MenuBarItemStore.setLayoutManagementEnabled(_:) appear to be wired to each other through @Published / Combine subscriptions (the closure #1 in ...init subscribers), with no re-entrancy guard or removeDuplicates() / equality check. Setting one property synchronously publishes to the other, which publishes back — an infinite mutual update loop. On macOS 27 the delivery path goes through SwiftUICore UpdateGroup and re-enters synchronously, so what may have been coalesced/benign on macOS 26 now recurses until the main-thread stack overflows.
Possible fixes to consider: break the cycle with an equality guard / .removeDuplicates() on the relevant publishers, an explicit isUpdating re-entrancy flag, or deferring one direction (e.g. DispatchQueue.main.async / Task { @MainActor in ... }) so the two setters don't call each other synchronously.
Workaround
Rolling back to 1.0.19 (the last pre-native-engine stable, same bundle id com.overflowbar.mac26.v6) runs correctly on macOS 27.2.
Attachments
Two crash reports are available and can be attached:
OverflowBar-2026-11-06-192921.ips(1.5.0)OverflowBar-2026-11-06-192912.ips(1.5.0)
(1.5.1 crash reports also exist for build 20 with the same signature.)
Expected behavior
OverflowBar should launch normally, appear in the menu bar, and let me open its Settings panel like on macOS 26.
Actual behavior
OverflowBar crashes about one second after launch, before any UI or menu bar item appears — the icon flashes briefly and the process exits every single time. No window is ever usable.
The crash is EXC_BAD_ACCESS / SIGSEGV (KERN_PROTECTION_FAILURE at the main-thread stack guard region), i.e. a stack overflow from an infinite recursion. The backtrace repeats a Combine @published update cycle among StatusBarController.updateDivider(), MenuBarItemStore.setLayoutManagementEnabled(_:), MenuBarItemStore.cancelOperation() and NativeMenuBarEngine.cancel().
Reproduced on both 1.5.0 (build 19) and 1.5.1 (build 20), same signature. 1.0.19 (build 17) launches and runs fine on the same machine. Full crash reports (.ips) are attached.
Settings → Safe Reset is not reachable because the app crashes at launch, so that check could not be performed.
Checks completed
- I reproduced this on the latest release.
- I tried Settings → Safe Reset.
- I removed private information from attachments.
Activity
EvanProgramming commentedon Nov 6, 2026
Thank you for the detailed report and the version comparison. The stack trace points to a synchronous re-entry in the unsupported-OS fallback, and I’m investigating that path and adding regression coverage. My test machine runs macOS 26.4, so I can’t directly test macOS 27. If convenient, please attach a full crash report with private information removed; that would help confirm the diagnosis. I’ll follow up with the results.
EvanProgramming commentedon Nov 6, 2026
Update: I traced a concrete synchronous recursion in the macOS 27 fallback: disabling layout cancels the engine, whose visibility callback can immediately trigger the same disable again. I have a local change that guards that re-entry and prevents unsupported systems from starting layout operations. The macOS 26.4 test suite passes (73 XCTest tests, one skipped, plus 11 Swift Testing tests), including a regression test with a synchronous callback. This is not yet a released or macOS 27-tested fix; I’ll need verification on macOS 27 once a test build is available. Please keep the issue open in the meantime.
EvanProgramming commentedon Nov 8, 2026
The fix for the identified synchronous recursion has been merged in #12. The automated test suite and macOS CI passed, including a regression test for the unsupported-system callback path.
This change has not been tested on macOS 27, and no release containing it has been published yet. I’m closing this based on the code fix and automated coverage; if the crash persists once a build containing the fix is available, please comment here or open a new issue with a sanitized crash report so we can investigate further. Thank you again for the detailed report.
EvanProgramming commentedon Nov 8, 2026
A preview build containing the startup fix is now available: macOS 27 startup fix preview. Please install it manually from the DMG if you are able to test it, and let us know whether it launches on your Mac. It has not been tested on macOS 27 here, and native icon hiding remains disabled on that version. If it still crashes, a sanitized crash report would be helpful. Thank you!