chore(wip): consolidation intermédiaire multi-tickets (sprints Statistiques, UI, Bug resolution, Serveur-client)

Regroupe l'état de travail en cours réalisé dans un même worktree sur
plusieurs tickets/sprints (#85, #136, #145, #155-160, #162-164),
mélangeant des tickets QA et inProgress. Ne constitue pas une feature
terminée : commit de sauvegarde avant triage/split par ticket en
branches feature/* dédiées. Exclut les dossiers d'environnement de
build locaux et le heap dump parasite (.gitignore mis à jour).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 16:48:54 +02:00
parent 58272e354a
commit 917777e18b
279 changed files with 13546 additions and 674 deletions

View File

@ -0,0 +1,147 @@
---
issueRef: "#155"
version: 5
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1785248859142
---
## Entrée produit utilisateur — Main (2026-07-27)
UX doit cadrer les surfaces suivantes :
### Téléphone en séance
- afficher seulement **fréquence cardiaque live**, **distance live**, **calories live** ;
- surface légère, non dominante.
### Montre en séance
- écran principal : **fréquence cardiaque live uniquement** ;
- glissement inverse du menu action : écran secondaire avec **fréquence cardiaque live + distance + calories**.
### Après séance / historique
- graphiques et lecture détaillée des statistiques conservées ;
- fréquence cardiaque détaillée **par étape, série et exercice** ;
- distance et calories également restituées dans l'historique.
### Contraintes fortes
- silence total si donnée absente ;
- uniquement pour montres compatibles ;
- aucun message bloquant.
---
## Cadrage UX — agent UX (2026-07-27)
### Décision produit
Les stats capteurs (`FC live`, `distance live`, `calories live`) sont une **couche de lecture légère** ajoutée à lexécution existante, jamais une nouvelle navigation principale ni une nouvelle logique de séance.
Principes à respecter :
- **Téléphone** : la surface séance reste centrée sur lexécution ; les stats live restent secondaires et compactes.
- **Montre** : lécran principal reste centré sur létat deffort ; la `FC live` seule y a droit en permanence, `distance` et `calories` partent dans un écran secondaire dédié.
- **Après-séance / Historique** : les stats deviennent consultables en détail, avec restitution hiérarchique cohérente avec lexistant `programme > exercice > série`, et niveau `étape` quand disponible.
- **Silence par défaut** : si une donnée nexiste pas, la surface se resserre sans placeholder, sans warning, sans écran vide.
### Téléphone pendant la séance
Ajouter sous le bloc dexécution principal une **barre stats live compacte**, toujours sur la surface séance, sans ouvrir de panneau dédié.
Ordre fixe :
`FC 142 bpm · 0,84 km · 186 kcal`
Règles :
- une seule ligne si tout tient ;
- retour sur 2 lignes max si nécessaire sur petit écran ;
- style secondaire visuellement, plus discret que chrono / répétitions / score ;
- ne jamais concurrencer le bloc temps, les CTA dexécution, ni les contrôles de série.
- `FC` en premier, puis `Distance`, puis `Calories`.
- chaque métrique napparaît que si elle est disponible.
- si aucune métrique nest disponible, la barre nexiste pas.
États :
- en séance active : valeurs live visibles et rafraîchies discrètement ;
- en pause : conserver la dernière valeur connue ;
- en repos : la barre reste visible si des valeurs existent.
### Montre pendant la séance
#### Écran principal
Lécran principal `Séance active` conserve sa hiérarchie actuelle. On y ajoute la **FC live uniquement** en lecture secondaire.
Placement exact :
- la `FC live` apparaît sur la **ligne secondaire sous le libellé du chrono dominant** et **au-dessus du CTA principal**.
- sur lécran principal montre, **jamais distance ni calories**.
- si la FC live est absente, cette ligne disparaît purement et simplement.
#### Écran secondaire `Stats`
Ajouter un **écran secondaire stats** accessible par **glissement inverse du menu `Actions`**.
Navigation montre :
- swipe dans un sens : `Actions`
- swipe dans lautre sens : `Stats`
Contenu de lécran `Stats` :
- `FC`
- `Distance`
- `Calories`
Règles :
- une carte/ligne par métrique disponible ;
- ordre fixe : `FC`, `Distance`, `Calories` ;
- si une métrique manque, ne pas réserver sa place ;
- si aucune stat nexiste, lécran `Stats` nest pas exposé du tout.
### Après-séance
Ajouter dans lécran de fin de séance une section dédiée `Statistiques` après le récap principal dexécution.
Résumé global attendu :
- `FC moyenne`
- `FC min`
- `FC max`
- `Distance`
- `Calories`
Graphiques à afficher quand la donnée existe :
- `FC` : courbe temporelle de séance
- `Distance` : progression cumulée sur la séance
- `Calories` : progression cumulée sur la séance
Pour la FC, ajouter si possible des repères visuels simples sur la courbe :
- séparateurs dexercices
- séparateurs de séries
- étapes quand disponibles
### Détail hiérarchique
Dans le détail existant, enrichir chaque niveau quand la donnée existe.
- **Exercice** : sous-résumé stats
- **Série** : sous-résumé compact
- **Étape** : seulement si les données sont réellement disponibles à ce niveau
Règles :
- ne jamais fabriquer un faux niveau de précision ;
- labsence dune stat nempêche pas dafficher les autres.
### Historique
#### Liste historique
Dans chaque carte de séance historique, ajouter au plus **une ligne de résumé stats** sous le résumé existant, uniquement si des données existent.
Exemple : `FC 148 moy · 2,84 km · 426 kcal`
#### Détail dune séance historique
Le détail historique reprend la même structure que laprès-séance :
- résumé global ;
- graphiques ;
- détail par exercice ;
- détail par série ;
- détail par étape quand disponible.
### Fallback silencieux et compatibilité
Règles impératives :
- Feature active **uniquement sur montres compatibles**.
- Si la montre nest pas compatible, **aucune surface dédiée napparaît**.
- Si un capteur ou une métrique est indisponible, **ne rien afficher** pour cette métrique.
- **Aucun message bloquant**, **aucune alerte**, **aucun placeholder**.
- En cas de donnée partielle : afficher seulement ce qui existe.
- En cas de perte temporaire de mesure live : garder la dernière valeur connue si la session lutilise déjà ; sinon masquer la métrique.
### Décision finale de surface
- **Téléphone séance** : une barre stats live compacte intégrée à lécran dexécution.
- **Montre séance** : `FC live` sur lécran principal, écran `Stats` secondaire par glissement inverse de `Actions` pour `FC + distance + calories`.
- **Après-séance / Historique** : résumé global + graphiques + détail hiérarchique `exercice / série / étape` quand disponible.
- **Fallback** : disparition silencieuse des données absentes, sans message ni friction.