v1.9.0
Release v1.9.0
July 2, 2026
Added
- Screen Wake Lock in Perform and Rehearse: the tablet no longer auto-locks mid-song. Honors the Settings "Keep screen awake" toggle, re-acquires when the tab becomes visible again, and releases on exit. Degrades silently where the browser doesn't support it
Changed
- Performance Defaults are now actually applied by the performance view (they were saved to localStorage but never read): chart text size (S / M / L) seeds the starting font size, Pedal flash gates the flash overlay, and the Performance appearance preference resolves the theme
- Performance appearance default now applies to library single-song Perform and Rehearse too, not just setlist performances — resolved in one place via an optional `performTheme` prop with a global fallback
- Accidentals default (Sharps / Flats) seeds the shared key preference, and the Settings control writes through to it so it matches the in-performance ♭/♯ toggle immediately
Fixed
- Soft-deletes now propagate on sync — the client sent `deleted_at` (snake_case) while the push route read `deletedAt`, so deletions never reached the server and could be resurrected by another device
- Push endpoints enforce last-write-wins: a stale device can no longer overwrite a newer server record with older content and an older timestamp
- WorshipOS setlists deleted locally are no longer resurrected on every sync — the undelete now gates on the re-import epoch sentinel (matching the song path) via a shared helper
- Backup import revives `deletedAt` as a `Date`, so a backup round-trip containing a soft-deleted record no longer throws and breaks the next sync
- A local-database upgrade failure now asks for confirmation before resetting, instead of silently wiping the library