0.7.1 — Review & hardening pass
A whole-codebase review and hardening pass — no new features, nine real bug fixes.
Fixed
- App Presets no longer lose a display's saved baseline when it's unplugged while a preset is active — the restore stays owed and is paid back when the display returns. A display that connects while a preset is active is now governed immediately instead of waiting for the next app switch.
- Settings resilience: one unreadable field (e.g. after a downgrade) now falls back to that field's default instead of resetting every setting and the FaceLight / app-preset / evening-preset restore ledgers.
- Display identity: a paired record can no longer absorb an unrelated anonymous monitor without corroborating evidence.
- Refresh-rate-only mode changes and 180° rotations now advance the topology generation instead of always waiting out the 2s stabilization timeout.
opendisplay edidno longer reports the built-in panel's EDID for an external whose model number is unreadable.- CLI:
favorite set <display> @2xreports a usage error instead of crashing; DDC brightness writes round instead of truncate. - Clock Mode solar anchors queried just after midnight on a DST-transition day are no longer an hour off.
- Concurrent audit-log writes from the app and CLI can no longer interleave.
Changed
- Night Shift detection reuses one CoreBrightness client instead of reconnecting every 5 seconds.
Install / upgrade: brew install --cask aquitaine/tap/opendisplay or download the notarized zip below.