feat(watch): séance guidée au poignet

Pendant natif du lecteur web. Bouton Démarrer par bloc : un exercice à la fois,
décompte en anneau, passage auto, haptique à chaque transition, pause et
navigation. Pendant une routine au sol, la montre est bien plus pratique que
d'aller chercher le téléphone — c'est tout l'intérêt de la version watchOS.

Chaque exercice écoulé est coché via RoutineStore.toggle, donc renvoyé à
l'iPhone puis au serveur : à la fin le bloc est à jour sur les trois surfaces.

La durée par exercice est désormais transmise dans le snapshot (duration_sec,
optionnel pour rester compatible avec les snapshots déjà persistés) : la vue
guidée utilise la vraie durée au lieu de répartir celle du bloc.

RoutineGuidedView.swift est déjà référencé dans le pbxproj (target CoachWatch),
aucun Add Files à faire. Backup : project.pbxproj.bak-guided

NON COMPILÉ — à inclure au prochain build Xcode.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-03 16:32:29 +00:00
parent 21d819a52b
commit f032ee2126
9 changed files with 2749 additions and 2 deletions

View File

@@ -119,6 +119,22 @@ blocs. Si ça persiste après avoir ouvert `/routine` sur l'iPhone :
code HTTP en cas d'échec — un 401 signifie un `CoachAuth.kCoachWebToken`
périmé).
## Séance guidée au poignet (2026-08-03)
`CoachWatch/RoutineGuidedView.swift` — bouton **Démarrer** sur chaque bloc :
un exercice à la fois, décompte en anneau, passage automatique, haptique à
chaque transition, pause / précédent / suivant.
Chaque exercice écoulé est coché via `RoutineStore.toggle`, donc renvoyé à
l'iPhone puis au serveur : à la fin, le bloc est déjà à jour sur les trois
surfaces sans un geste de plus.
Le fichier est **déjà référencé dans le pbxproj** (target CoachWatch), aucun
« Add Files » à faire. Backup : `project.pbxproj.bak-guided`.
À tester au build : démarrer le bloc 1 sur la montre, laisser tourner deux
exercices, vérifier que la page `/routine` de l'iPhone se coche toute seule.
## Reste à faire (hors périmètre de ce chantier)
- Complication watchOS « Routine » : la target `CoachWatchWidgets` n'existe