Skip to content

Nocturne 1.0.6

Choose a tag to compare

@dotcomjack dotcomjack released this 08 Aug 17:37
· 11 commits to main since this release

Six fixes from a second adversarial review pass. All measured, not guessed.

Hide everything uncovered the menu bar for up to 2 seconds

activate() early-returned when the overlay was already running, and teardown() never clears isActive, so the callback written to re-place the strip after a Control Center restart did nothing. The 2 second tracker tears the strip down whenever it ticks during the ~500ms restart window, which it lands in roughly one change in four, and only the next tick put it back.

In Hide everything that means the entire menu bar was readable for up to 2 seconds, which is the mode's only job. activate() now re-syncs instead of ignoring the call.

Quitting from the menu blanked the menu bar for ~1.8 seconds

The menu handler restored the clock, then NSApp.terminate ran applicationWillTerminate, which restored it again. Two force-kills of Control Center about 120ms apart, and the second lands on the freshly respawned process and trips launchd's 1 second ThrottleInterval.

Measured: ~1.8s of empty menu bar instead of ~0.5s. The menu no longer restores; the terminate handler already covers every path, and the signal handlers cover pkill.

"macOS is blocking this" could never appear

Introduced in 1.0.5. Snapping the switch back re-entered onChange, which recomputed the warning flag to false, so the row and its shortcut to Login Items never rendered. Worse, the second pass called launchAtLogin = false again, which unregisters a request that was merely pending approval. The corrective pass now bails first.

Settings hid its own undo control

Content overflowed the fixed 430x720 window. In Gone mode the entire General section, including "Restore clock to how it was", sat below an invisible fold with macOS scrollbars hidden at rest. Window is now 880pt.

Two documentation corrections

The restore comment and README claimed a pre-existing analog clock is preserved. It never was: the snapshot forces isAnalog to false at capture time, deliberately, so that clearing Nocturne's preferences cannot strand you on analog forever. Both now say so, and the README states the caveat plainly.

Two em dashes in the published v1.0.2 release notes were also fixed. All six releases now scan clean.