Files
workouts/TODO.md
T
rzen c05e83cff7 Queue document writes durably and surface sync trouble in the UI
iCloud Drive writes now flow through a persistent WriteBacklog sidecar
(drained with backoff, flushed on backgrounding, wiped with the cache on
account change), so a save can never be lost to a transient coordinator
error. A status banner on the workout list surfaces stuck syncing.
Also: the split picker gains a Recent section with day labels, split
rows fold SplitItem into SplitListView, and list rows dim the multiply
sign in sets-by-reps.

Claude-Session: https://claude.ai/code/session_01HJDQQDA9QdP8zByg43H5v3
2026-07-08 12:48:12 -04:00

2.5 KiB

TODO

Schema work pending (being designed in a separate session) — the workout exercise list (WorkoutLogListView) has UI already waiting on these:

  • Bodyweight indicator: the row hides weight when loadType != .weight, treating LoadType.none as "bodyweight". Decide whether that's the durable semantic or whether exercises need an explicit .bodyweight load type / flag (e.g. weighted pull-ups would need weight and bodyweight semantics).
  • Machine comfort settings (iOS UI built): machineSettings: [MachineSetting]? exists on both ExerciseDocument and WorkoutLogDocument (plus the cache entities and mappers). The optional doubles as the machine-based flag — nil means "not a machine exercise", empty means "machine exercise, nothing recorded yet". Built on iOS: the exercise add/edit screen's Machine section (toggle + ordered reorderable/deletable settings via the shared MachineSettingsEditor), the plan-time snapshot from exercise → log at workout start / add-exercise, and the in-workout row's Settings affordance (shown for any machine-based log) opening an editor sheet that saves to the log and writes back to the split's exercise as the durable default (following the seed clone-on-edit redirect). Remaining: watch-side display — the watch app doesn't yet surface or edit machine settings, and its own "add exercise to a running workout" path (Workouts Watch App/Views/WorkoutLogListView.swift) doesn't snapshot machineSettings into the new log.

Wish list

  • Pinned splits in the split picker: add a "Pinned" section above "Recent" in SplitPickerSheet (Workouts/Views/WorkoutLogs/WorkoutLogsView.swift), with a swipe-to-pin action on the rows (and possibly on SplitListView for symmetry). Storage decision (2026-07-08): a pinnedSplitIDs set in UserDefaults — matches the existing preference precedent (restSeconds, weightUnit) and survives cache rebuilds. Do not put an isPinned flag in SplitDocument: pinning a starter seed would trigger the clone-on-edit fork, and reconcileSeeds() would overwrite the flag with bundle bytes anyway. At read time, resolve stored IDs through sync.currentSplitID(for:) (as recentSplits does) and prune IDs whose split no longer exists; exclude pinned splits from the Recent section. Upgrade path if cross-device pins ever matter: a tiny Preferences/pins.json iCloud document. Watch, if wanted later: push the ID list via the WCPayload application context.