# Changelog

All notable changes to this project are documented here.

## June 2026

- Redesigned the Apple Watch app into a focused workout runner: it opens directly
  on the active workout's exercise list (or prompts you to start one on iPhone),
  and each exercise runs as a horizontally-paged HIIT cycle — a count-up work
  phase, swipe to a count-down rest that pings once per second in the final three
  seconds then auto-advances to the next set, and **One More** / **Done** buttons
  on the final set.
- Added a configurable rest-between-sets duration (iPhone Settings, default 45s),
  synced to the watch over WatchConnectivity.
- Watch progress is now monotonic and reliably synced: completing a work phase
  advances the set count on the iPhone and a finished set is never un-counted, and
  reopening an exercise jumps straight to the first unfinished set (skipping
  completed work/rest pairs) instead of snapping back to set 1.
- Fixed: progress made on the watch now updates open iPhone screens live. The
  phone applies a watch-forwarded workout to its cache directly on receipt, instead
  of waiting on an `NSMetadataQuery` event that a same-process file overwrite
  doesn't reliably emit.
- Starting a workout on the iPhone now launches the Apple Watch app straight into
  the session via HealthKit (a one-time Health permission); the watch holds an
  `HKWorkoutSession` to stay active while you train and releases it when the
  workout finishes.
- New app icon: a tilted dumbbell on a purple gradient, full-bleed across iOS and
  Watch (replaces the teal circular mark).
- **2.0** — Re-platformed persistence onto an iCloud Drive document architecture:
  JSON files in iCloud Drive are now the sole source of truth, with a rebuildable
  SwiftData cache populated by an `NSMetadataQuery` observer. Removed
  CloudKit/`NSPersistentCloudKitContainer` and the App-Group store.
- Rebuilt the Apple Watch sync on a new WatchConnectivity bridge keyed by stable
  ULIDs (the phone is the sole writer of iCloud Drive).
- Migrated the project to XcodeGen; iOS 26 / watchOS 26, Swift 6 strict
  concurrency.
- Splits ship as an on-demand machine-based starter routine (Upper Body, Core,
  Lower Body) at 4×10 with sensible starting weights.
- Stored exercise/log durations as integer seconds (was a `Date` epoch hack).
- Fixed: workout marked complete on creation, an undismissable delete dialog,
  toolbar buttons hidden by nested navigation stacks, and a placeholder
  "Settings coming soon" row.
- Fixed: tapping an exercise in a workout log pushed the wrong screen (a
  duplicate of the split list) with the exercise detail hidden underneath — a
  single row tap was navigating twice. Caused by stacking two
  `navigationDestination` modifiers on the log list; rows now use a single
  destination-based link.
