Cycler 0.4.2
Hardening release — everything from the 2026-07-02 code audit.
Fixed
- Two copies of Cycler no longer fight over your shortcuts. A second launched instance now exits immediately (deterministic election), fixing the bug where a hotkey would bring an app forward but never hide it again.
- Quitting at exactly the wrong moment can no longer leave Caps Lock remapped to F18 — pending hidutil work is drained on exit in every path.
- An open Settings window now reflects Hyper Key state changes (blocked/active) live.
Improved
- No more Dock-icon flash at launch (proper LSUIElement agent).
- Recording a shortcut that shadows another binding's ⇧-reverse now warns you.
- Diagnostics moved to the unified log:
log stream --predicate 'subsystem == "com.caiano.cycler"'. - hidutil calls no longer run on the main thread.
Internal
- Continuous integration now builds and tests every change (macos-26, Xcode 26.5).
- Main-actor isolation across the app; builds with zero warnings.