Skip to content

Nocturne 1.0.8

Choose a tag to compare

@dotcomjack dotcomjack released this 08 Aug 18:25
· 9 commits to main since this release

A verification pass over all 19 earlier fixes found that two of them did not actually hold. Those are the interesting ones.

The quit-safety confirmation could never fail

1.0.1 added a confirmation loop so quitting cannot exit before the clock restore has committed, since that would strand you on an analog clock with no app left to undo it.

The loop read the value back and compared it. But CFPreferencesCopyValue is served from the writing process's own cache, so the comparison was true on the first iteration whether or not the daemon had committed anything. Measured across 8 runs: exited on iteration 1 every time, in 0.22ms to 0.37ms. The retry and the timeout were decorative; a fixed 120ms sleep was doing all the work.

It now flushes with CFPreferencesAppSynchronize, whose return value is a real signal worth retrying on. The guarantee it protects was re-verified: 0 of 12 SIGTERM quits left the clock analog.

Raising the window height in 1.0.6 was a regression

1.0.6 raised the Settings panel to 880pt so nothing sat below the fold. That makes a 912pt window, and AppKit does not clamp a non-resizable window to the screen:

style requested result
[.titled, .closable] 1232pt 1232pt, hangs 149pt off screen
+ .resizable 1232pt clamped to fit

On any Mac under roughly 912pt of usable height, which includes 1440x900, the bottom of the panel was permanently unreachable, and what sits there is the login-items warning and the Restore button. The window is now resizable and sizes itself to the screen.

Two smaller ones

The beacon guard failed open: when the status item frame was unavailable it skipped the whole check and placed the full-bar strips with no glyph, which is exactly the lockout the guard exists to prevent.

restoreOriginalClock had quietly stopped keeping its own one-restart promise, because routing mode through the property in 1.0.6 put an apply() ahead of the batched writes.