Files
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

39 lines
2.5 KiB
Markdown

# 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.