From 94a737ebcc24d33f7e6f117631a31c5e396ba009 Mon Sep 17 00:00:00 2001 From: rzen Date: Sat, 20 Jun 2026 14:50:25 -0400 Subject: [PATCH] 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 --- CHANGELOG.md | 71 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3c953a..1becce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ` 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.