Cuesheet v1.3.1
The exact-RPM entry button now meets the 44pt tap-target floor. Four nav-bar/toolbar controls now meet the 44pt tap-target floor. Seven toggle and picker rows now meet the 44pt tap-target floor. The app no longer freezes for several seconds when a class starts or you move between songs. Declining the "Class in progress — resume?" alert no longer throws away your place. A wifi drop mid-class now shows a quiet "Connection lost — buffering" pill instead of leaving the instructor guessing. The swim-lane strip's transition-song region no longer borrows the position-cue green.
New & improved
- The exact-RPM entry button now meets the 44pt tap-target floor. "Exact RPM…" in the segment builder's cue palette rendered a 42pt-tall tap area, 2pt under `design-system §10`'s hard floor. It now takes the app's standard minimum-hit-target treatment, so it is 44pt in both axes — width was already well clear.
- Four nav-bar/toolbar controls now meet the 44pt tap-target floor. The Cuesheets list's "+ New" button, the cuesheet builder's "⋯" overflow, and the sheet "Cancel" button (New Cuesheet, and Track Picker at both its initial and results states) all rendered 36pt tall — under `design-system §10`'s hard floor, with the overflow also narrow at 30pt wide. The builder's "⋯" overflow changed from a `Menu` to a tap-opened chooser (matching run mode's own overflow control), which also removes a menu-dismissal race on "Discover tracks".
- Seven toggle and picker rows now meet the 44pt tap-target floor. Settings' "Keep screen on", "Auto-advance cues" and "Playback diagnostics" switches, the builder's warm-up and cool-down "Use transition song" toggles, New Cuesheet's own "Use transition song" toggle, and its "Pick a transition song (optional)" row all rendered 28–41pt tall — under `design-system §10`'s hard floor, because a bare SwiftUI `Toggle` sizes itself to its label's line height rather than a 44pt row. The three toggle sites now grow their label to the floor (same fix as the existing "Share diagnostics" row) with the whole grown frame genuinely tappable; the picker row uses the app's existing `.minimumHitTarget()` modifier.
- Reopening mid-class now rejoins the class when the transition song is playing. If Cuesheet was closed during a class and reopened while Apple Music was playing the class's transition song, the app treated it as unrelated music, forgot the class and opened on the Cuesheets tab. The transition song plays between every pair of tracks, so its id recurs in the queue, and Apple Music reports only which song is playing, not where it sits. The app now places it from the class's last-known position and rejoins without a tap; if the player could have reached a later transition in the meantime, it asks "Class in progress" first. Each launch also logs one `RunResume` line to the device console naming what the check saw and decided.
- A wifi drop mid-class now shows a quiet "Connection lost — buffering" pill instead of leaving the instructor guessing. The spec always called for this — a non-blocking pill the instant playback freezes, escalating to a tap-to-skip affordance after 15 continuous seconds — but it had never been built; a network stall was only ever caught by the unrelated divergence watchdog, several seconds later, as a generic "tap to retry" banner. No cues are dropped and no cue timing changes — the segment simply runs long by the stall duration, exactly as authored (cuesheet-1r6gq, the real fix for cuesheet-37m4a, Derek's wifi drop).
Fixed
- The app no longer freezes for several seconds when a class starts or you move between songs. Setting the Music player's position is a call that waits for the Music app to answer, and straight after a new queue is handed over the Music app does not answer until it has prepared every song in it. Cuesheet made that call on the main thread, so the whole app locked up for 4.5–5.3 seconds (Sentry APPLE-IOS-5, build 1.1.0). Every such call now runs on a background queue, so the screen keeps responding while the player catches up. ### Run mode
- Declining the "Class in progress — resume?" alert no longer throws away your place. Tapping "Not now" used to discard the in-progress class entirely. Now the Cuesheets tab shows a "Continue last class" entry instead, within the same 3-hour window the alert already used — no second timeout. It shows the song you'd resume on and how far into it you were, so a stale position is never a surprise. Tapping it rejoins live if the Music app is still on the class, or resumes from your last recorded position otherwise; if something else is playing, it asks before replacing it. The entry clears when the class ends or another class starts, same as it would have for the alert.
- The swim-lane strip's transition-song region no longer borrows the position-cue green. A bridge between two songs was tinted and dashed-bordered in the same green used for POSITION cues — a hue collision that, mid-ride, could read as a position cue sliding toward the playhead at exactly the moment an instructor is scanning for one. The region is now a flat neutral grey with no border.