← All changes
What shipped
- Strava timezone. The ISO8601 formatter now uses
TimeZone.currentforstart_date_local— activities were appearing two hours off. - Watch auto-launch.
startWatchAppnow awaits HealthKit authorization first; previously it silently failed on the very first run, before auth had been granted. - Onboarding. Browse Library opens via
.fullScreenCoverinstead of.sheet— the nested sheet was snapping closed when the parent recomputed. Quiz options and path tiles get.contentShape(Rectangle())so taps on the padding count. - Keep screen awake. New setting (default on) gates
isIdleTimerDisabledacross the runner’s lifecycle, so the phone stops dimming mid-set on the tripod. - Duration sets. Actual elapsed seconds are now persisted on every user-driven stop (Stop button, watch stop, manual log). Reaching the planned duration without overtime auto-completes the set and starts rest.
- Edit set values post-session. A new sheet on the summary lets you fix per-set reps, weight, or duration with the same pickers as the runner — for the inevitable “I logged 8 but did 9”.
- No duplicate previous-set row. The runner’s spec strip lost its redundant ghost cell; the actionable “Repeat previous ↖” strip below already shows the same data.
- Rest timer’s “Up next ↓” now crosses the exercise boundary — when the current exercise is done, the line previews the next exercise’s first set instead of going blank.