Surface phone/watch schema mismatch on the watch; log dropped pulls

The decode-failure freeze (BULLETPROOFING.md L3) is production-reachable
after all - a phone app can update days before the watch app
auto-updates, and every push in between fails to decode, silently
freezing the watch at its last good sync. The bridge now tracks
schemaMismatch (set on a failed decode, cleared on the next good apply)
and ActiveWorkoutGateView shows an "Update both apps to resume sync"
banner while it's set.

Also give requestSync an error handler that logs the dropped pull (L2;
deliberately no retry - the activation/reachability edges re-pull), and
sync DEVICE-COMMUNICATION.md to the post-bulletproofing reality (T1 as
optimization, session recovery, degraded pushes, surfaced mismatch).

Claude-Session: https://claude.ai/code/session_01PVNBVKp5bcq52X722uMjwT
This commit is contained in:
2026-07-09 23:12:39 -04:00
parent 62a2882f0e
commit ccd5194c6c
5 changed files with 41 additions and 9 deletions
+2
View File
@@ -18,6 +18,8 @@ Opening a skipped exercise on the watch now shows a gray Skipped badge instead o
The mirrored workout view no longer freezes on a spent rest countdown when the other device drives an auto-advancing split.
The watch now shows an update notice when the two apps are on different versions and can't sync, instead of silently displaying stale workouts.
A new Cardio exercise and matching starter split let you log aerobic sessions, tracked on your Apple Watch as a cardio workout.
A new Auto-Advance option lets a split flow hands-free from one exercise to the next, resting automatically between them.