docs(ideai): mémoire chaînage de chronos, clôture ticket #75, cadrage #76-#79
Ajoute les notes mémoire d'architecture et UX pour l'auto-enchaînement des chronos d'étapes, clôture le ticket #75, reflète les tickets #63/#70, ajoute le cadrage des tickets #76 à #79. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
271
.ideai/memory/gametime-ux-step-chaining-override.md
Normal file
271
.ideai/memory/gametime-ux-step-chaining-override.md
Normal file
@ -0,0 +1,271 @@
|
||||
---
|
||||
name: gametime-ux-step-chaining-override
|
||||
description: memory note gametime-ux-step-chaining-override
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
# GameTime — Enchaînement configurable des chronos d'étapes (ticket #73, UX 2026-07-20)
|
||||
|
||||
Conception UX pour rendre configurable le comportement d'enchaînement automatique entre deux étapes chronométrées consécutives dans un exercice à séquence.
|
||||
|
||||
Mémoire de référence : `gametime-ux-exercise-steps`.
|
||||
|
||||
## Décision structurante
|
||||
|
||||
Le comportement historiquement fixe devient un réglage hiérarchique :
|
||||
|
||||
```text
|
||||
séance-modèle > programme > exercice
|
||||
```
|
||||
|
||||
La valeur effective pendant l'exécution est la valeur la plus spécifique renseignée :
|
||||
|
||||
- override séance si présent ;
|
||||
- sinon override/config programme si présent ;
|
||||
- sinon valeur par défaut de l'exercice.
|
||||
|
||||
Valeur par défaut recommandée pour les exercices existants et nouveaux : **activé**, afin de préserver le comportement livré aux tickets #54/#60.
|
||||
|
||||
Libellé commun :
|
||||
|
||||
```text
|
||||
Enchaîner automatiquement les chronos consécutifs
|
||||
```
|
||||
|
||||
Aide commune :
|
||||
|
||||
```text
|
||||
Quand une étape Temps est suivie d'une autre étape Temps, le chrono suivant démarre dès que le précédent arrive à 0.
|
||||
```
|
||||
|
||||
Si désactivé, aide complémentaire :
|
||||
|
||||
```text
|
||||
L'app attendra ton démarrage avant de lancer le chrono suivant.
|
||||
```
|
||||
|
||||
## 1. Niveau Exercice
|
||||
|
||||
Surface : `ExerciseFormScreen`, section `Séquence d'étapes`.
|
||||
|
||||
Afficher le réglage uniquement si `Rythmer cet exercice avec des étapes` est activé.
|
||||
|
||||
Placement recommandé : juste sous le switch `Rythmer cet exercice avec des étapes`, avant la liste des étapes.
|
||||
|
||||
UI :
|
||||
|
||||
```text
|
||||
Séquence d'étapes
|
||||
[ON] Rythmer cet exercice avec des étapes
|
||||
|
||||
[ON] Enchaîner automatiquement les chronos consécutifs
|
||||
Quand une étape Temps est suivie d'une autre étape Temps, le chrono suivant démarre dès que le précédent arrive à 0.
|
||||
```
|
||||
|
||||
Si désactivé :
|
||||
|
||||
```text
|
||||
[OFF] Enchaîner automatiquement les chronos consécutifs
|
||||
L'app attendra ton démarrage avant de lancer le chrono suivant.
|
||||
```
|
||||
|
||||
Ne pas masquer le réglage s'il n'y a pas encore deux étapes Temps consécutives : l'utilisateur peut encore ajouter/réordonner des étapes. Le réglage est simplement sans effet tant qu'aucun enchaînement Temps -> Temps n'existe.
|
||||
|
||||
## 2. Niveau Programme
|
||||
|
||||
Surface : écran `Personnaliser l'exercice` dans un programme (`ProgramExerciseCustomizationScreen`).
|
||||
|
||||
Afficher une nouvelle section `Séquence` seulement si l'exercice possède des étapes.
|
||||
|
||||
Placement recommandé : après `Objectifs`, avant `Repos`, car le réglage concerne le déroulé interne de l'exercice, pas les mesures de série.
|
||||
|
||||
UI recommandée : switch + indication d'héritage.
|
||||
|
||||
État sans override programme :
|
||||
|
||||
```text
|
||||
Séquence
|
||||
[ON] Enchaîner automatiquement les chronos consécutifs
|
||||
Réglage de l'exercice
|
||||
```
|
||||
|
||||
Si l'utilisateur change le switch, cela crée une personnalisation programme :
|
||||
|
||||
```text
|
||||
Séquence
|
||||
[OFF] Enchaîner automatiquement les chronos consécutifs
|
||||
Personnalisé pour ce programme
|
||||
|
||||
[Revenir au réglage de l'exercice]
|
||||
```
|
||||
|
||||
Règle UX : il doit toujours être possible de supprimer l'override programme via `Revenir au réglage de l'exercice`. Sans ce retour, un simple switch force une valeur locale permanente et ne respecte pas le modèle hiérarchique.
|
||||
|
||||
Résumé compact de l'exercice dans le programme : ne pas ajouter ce détail dans la ligne compacte par défaut. Le réglage reste dans `Personnaliser` pour éviter de surcharger la liste.
|
||||
|
||||
## 3. Niveau Séance-modèle
|
||||
|
||||
Surface : détail d'un programme intégré dans une séance-modèle (`WorkoutTemplateProgramDetailScreen`), là où l'utilisateur surcharge déjà le nombre de séries et les cibles numériques.
|
||||
|
||||
Afficher la section `Séquence` dans chaque carte exercice seulement si l'exercice possède des étapes.
|
||||
|
||||
Placement recommandé : après les champs numériques de l'exercice, dans la même carte.
|
||||
|
||||
UI :
|
||||
|
||||
État sans override séance :
|
||||
|
||||
```text
|
||||
Séquence
|
||||
[ON] Enchaîner automatiquement les chronos consécutifs
|
||||
Réglage du programme
|
||||
```
|
||||
|
||||
État avec override séance :
|
||||
|
||||
```text
|
||||
Séquence
|
||||
[OFF] Enchaîner automatiquement les chronos consécutifs
|
||||
Personnalisé pour cette séance
|
||||
|
||||
[Revenir au réglage du programme]
|
||||
```
|
||||
|
||||
Règle UX : la séance doit pouvoir revenir au réglage du programme. C'est nécessaire pour conserver une vraie résolution `séance > programme > exercice`.
|
||||
|
||||
Point d'attention Architect : `WorkoutTemplateExerciseOverride` ne porte aujourd'hui que des overrides numériques. Il faudra un override booléen nullable, par exemple `autoStartNextTimedStepOverride`, pour représenter `non renseigné / activé / désactivé`.
|
||||
|
||||
## 4. Exécution quand le réglage est activé
|
||||
|
||||
Comportement inchangé :
|
||||
|
||||
- une étape Temps arrive à `0` ;
|
||||
- bip long ;
|
||||
- si l'étape suivante est aussi Temps, son chrono démarre immédiatement ;
|
||||
- pas de pause ni bouton intermédiaire.
|
||||
|
||||
C'est aussi le comportement à conserver pour les exercices existants après migration.
|
||||
|
||||
## 5. Exécution quand le réglage est désactivé
|
||||
|
||||
Cas ciblé : étape `Temps` suivie directement d'une autre étape `Temps`.
|
||||
|
||||
Quand le premier chrono arrive à `0` :
|
||||
|
||||
- bips des 3 dernières secondes inchangés ;
|
||||
- bip long à `0` inchangé ;
|
||||
- l'app passe à l'étape suivante ;
|
||||
- le chrono suivant **ne démarre pas** ;
|
||||
- l'écran attend une action explicite.
|
||||
|
||||
État visuel attendu dans le module `SÉQUENCE` :
|
||||
|
||||
```text
|
||||
ÉTAPE 2 / 4
|
||||
Dribble main gauche
|
||||
Objectif : 10 s
|
||||
|
||||
00:10
|
||||
Chrono suivant prêt
|
||||
|
||||
[Démarrer le chrono]
|
||||
[Passer l'étape]
|
||||
```
|
||||
|
||||
Différence de libellé :
|
||||
|
||||
- première étape chronométrée de la séquence : bouton `Démarrer la séquence` ;
|
||||
- étape chronométrée mise en attente après une autre étape Temps : bouton `Démarrer le chrono`.
|
||||
|
||||
Style Court Blazer :
|
||||
|
||||
- timer `00:10` en Anton, primaire or ;
|
||||
- label `Chrono suivant prêt` en Archivo, texte secondaire ;
|
||||
- optionnel : petit badge contour primaire `PRÊT` ;
|
||||
- panneau avec surface habituelle + liseré crimson 2 px ;
|
||||
- pas de rouge/alerte : c'est un état attendu, pas une erreur.
|
||||
|
||||
Si plusieurs étapes Temps se suivent et que le réglage est désactivé, l'app attend avant chaque nouveau chrono.
|
||||
|
||||
Si la dernière étape d'un passage est Temps et que le passage suivant commence aussi par Temps : appliquer la même règle. L'écran peut afficher :
|
||||
|
||||
```text
|
||||
Passage 2 / 10
|
||||
ÉTAPE 1 / 4
|
||||
Dribble main droite
|
||||
|
||||
Chrono suivant prêt
|
||||
[Démarrer le chrono]
|
||||
```
|
||||
|
||||
## 6. Interaction avec étapes à répétitions
|
||||
|
||||
Aucun changement.
|
||||
|
||||
- Temps -> Répétitions : le chrono finit, l'app affiche l'étape à répétitions et attend `Étape suivante` comme aujourd'hui.
|
||||
- Répétitions -> Temps : après `Étape suivante`, si l'étape suivante est Temps, le chrono peut démarrer immédiatement selon le comportement déjà existant pour démarrer une étape Temps après action utilisateur. Le nouveau réglage cible uniquement le cas Temps -> Temps automatique.
|
||||
|
||||
## 7. Pause, reprise, app fermée
|
||||
|
||||
Si le réglage est désactivé et que l'app est dans l'état `Chrono suivant prêt` :
|
||||
|
||||
- pause/reprise conserve cet état prêt ;
|
||||
- aucun temps ne s'écoule pour l'étape suivante ;
|
||||
- après kill/reprise, revenir au même état avec le bouton `Démarrer le chrono`.
|
||||
|
||||
Si l'app est en arrière-plan pendant un chrono et que celui-ci atteint `0` :
|
||||
|
||||
- si l'enchaînement est activé, l'app peut recalculer et avancer dans les chronos consécutifs comme prévu ;
|
||||
- si l'enchaînement est désactivé, l'app s'arrête au premier état `Chrono suivant prêt` et n'avance pas plus loin sans action utilisateur.
|
||||
|
||||
## 8. Libellés définitifs
|
||||
|
||||
Réglage :
|
||||
|
||||
```text
|
||||
Enchaîner automatiquement les chronos consécutifs
|
||||
```
|
||||
|
||||
Aide activée :
|
||||
|
||||
```text
|
||||
Le chrono suivant démarre dès que le précédent arrive à 0.
|
||||
```
|
||||
|
||||
Aide désactivée :
|
||||
|
||||
```text
|
||||
L'app attendra ton démarrage avant de lancer le chrono suivant.
|
||||
```
|
||||
|
||||
État d'exécution :
|
||||
|
||||
```text
|
||||
Chrono suivant prêt
|
||||
```
|
||||
|
||||
Bouton :
|
||||
|
||||
```text
|
||||
Démarrer le chrono
|
||||
```
|
||||
|
||||
Retour héritage programme :
|
||||
|
||||
```text
|
||||
Revenir au réglage de l'exercice
|
||||
```
|
||||
|
||||
Retour héritage séance :
|
||||
|
||||
```text
|
||||
Revenir au réglage du programme
|
||||
```
|
||||
|
||||
## 9. Découpage conseillé
|
||||
|
||||
1. `Domain · réglage auto-start chronos d'étapes` : valeur exercice + overrides programme/séance nullable.
|
||||
2. `ExerciseForm · switch valeur par défaut`.
|
||||
3. `ProgramExerciseCustomization · override avec retour au réglage exercice`.
|
||||
4. `WorkoutTemplateProgramDetail · override avec retour au réglage programme`.
|
||||
5. `WorkoutExecution · état Chrono suivant prêt + résolution effective`.
|
||||
Reference in New Issue
Block a user