Rewrite the changelog as concise end-user entries

Derive entries from the git log, rewritten for end users: one
blank-line-separated paragraph each (no dash markers, which the
in-app Apple inline-Markdown renderer doesn't style), keeping only
user-significant changes, splitting multi-change commits and
collapsing duplicates. Extends coverage back to the January 2026
pre-2.0 history so the CloudKit -> iCloud Drive arc is visible.

Claude-Session: https://claude.ai/code/session_01A9CfUa4E9Zd5swfoNsYPs7
This commit is contained in:
2026-06-20 14:50:25 -04:00
parent b7a8acd89b
commit 94a737ebcc
+51 -20
View File
@@ -4,23 +4,54 @@ All notable changes to this project are documented here.
**June 2026**
- Tapping an exercise on iPhone now opens a paged **progress run** — the same **Ready?** → work / rest → **Finish** flow as the Apple Watch (with **One More** and an auto-firing **Done**), now with iPhone haptics. Rep-based sets count up (swipe on when done); timed sets and rests count down and auto-advance. A dot row tracks progress with one dot per set — the active set drawn as a dash, with the gap widening at the rest you're currently in. The detail/edit screen (set grid, plan, notes, weight chart) is unchanged but moved behind a new **Edit** swipe on the trailing edge, alongside Delete; the leading swipe still completes. The paged flow fills the top of the screen for now, with the lower half reserved for a later iteration.
- Reworked the Apple Watch progress flow. The root now lists every in-progress workout (rather than diving into a single one); picking one shows its exercises, and picking an exercise opens a paged run: a lead-in **Ready?** page with a **Start** button (shown only when the exercise hasn't begun), the count-up work phases and count-down rests, then a dedicated **Finish** page with **One More** and a **Done** button that auto-completes after a configurable countdown (iPhone Settings → Auto-Finish Countdown, default 5s, synced to the watch). Trimmed the "swipe to skip/rest" hints and added a phase-progress dot row — purple dots for work, teal for rest, the current phase a wider dash — with the count-up/down timers tinted to match (brand purple / light teal).
- Fixed the Apple Watch work/rest timers freezing when the wrist was lowered. They counted by incrementing a per-second `Timer`, which watchOS throttles in the Always-On (dimmed) state; they now derive from a wall-clock anchor rendered with SwiftUI's self-updating timer text, so the time keeps advancing while dimmed and is correct the instant the wrist comes back up. Rest haptics and auto-advance are driven off the end time too, so they catch up after a stall instead of stalling.
- Keep the iPhone screen awake while the exercise detail screen is open, so the display no longer sleeps mid-set. (The Apple Watch already stays awake during a workout via its HealthKit workout session.)
- Set the iPhone app to iPhone-only (`TARGETED_DEVICE_FAMILY` 1); it was inadvertently universal but isn't an iPad-shaped experience. The Apple Watch app is a separate target and is unaffected.
- Exercise detail now renders the set-progress grid correctly on the first frame (seeded from the log in `init`) instead of filling in a frame later.
- Added a DEBUG-only screenshot harness (seeded sample data + `--screenshot --screen <name>` launch args, excluded from release builds) for generating App Store screenshots from the iPhone and Apple Watch simulators, plus the `Scripts/metadata/` App Store listing source of truth.
- 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 — and the exercise detail screen now observes these updates, so its set grid advances in real time without leaving and re-entering the screen.
- 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.
Tapping an exercise on iPhone now opens a paged workout run — the same Ready → work/rest → Finish flow as the Apple Watch, with rep sets counting up, timed sets and rests counting down and auto-advancing, plus haptics.
The exercise detail and edit screen moved behind an Edit swipe on the trailing edge; the leading swipe still completes a set.
The iPhone screen now stays awake while an exercise is open, so it no longer sleeps mid-set.
The Apple Watch is now a focused workout runner: it opens on the active workout's exercises (or prompts you to start one on iPhone) and lists every in-progress workout at the root.
Each watch exercise runs as a paged Ready → work/rest → Finish flow — count-up work, count-down rests with haptics and auto-advance, One More, and a Done that fires automatically after a countdown.
Added configurable rest-between-sets and Auto-Finish countdown durations in iPhone Settings, synced to the watch.
Starting a workout on iPhone now launches the Apple Watch straight into the session.
Apple Watch set progress is now reliable — a finished set is never un-counted — and reopening an exercise resumes at the first unfinished set instead of restarting at set 1.
Fixed Apple Watch work/rest timers freezing when you lowered your wrist.
Progress made on the Apple Watch now appears on open iPhone screens in real time.
The iPhone app is now iPhone-only; it was inadvertently available on iPad.
New app icon: a tilted dumbbell on a purple gradient, replacing the teal circular mark.
Starter splits are now a curated machine-based routine (Upper Body, Core, Lower Body) at 4×10 with sensible starting weights.
Fixed the exercise set-progress grid not appearing on the first frame.
Fixed tapping an exercise in a workout log opening the wrong screen.
**2.0** — Re-platformed sync onto iCloud Drive: your workouts now live as files in iCloud Drive, replacing CloudKit.
Fixed new workouts being marked complete the moment they were created.
Fixed an undismissable delete confirmation dialog.
Fixed toolbar buttons being hidden behind nested navigation.
Removed a placeholder "Settings coming soon" row.
**January 2026**
Added real-time sync between iPhone and Apple Watch over WatchConnectivity (workouts, splits, exercises, and logs), with workout-log and exercise-progress views on the watch.
Moved Splits into Settings, accessed via a gear button; the main screen became a single Workout Logs view.
Added an exercise screen with set-by-set progress tracking, a weight-progression chart, read-only Plan and Notes tiles with dedicated Edit screens, and auto-dismiss when you finish the last set.
Updated the app icons.
Initial workout tracker for iPhone and Apple Watch: create splits, pick exercises filtered by the current split, and log sets, reps, and weight — with iCloud (CloudKit) sync, a tab-based interface, an SF Symbols icon picker for splits, bundled starter exercise libraries (bodyweight and Planet Fitness), and an About section.