Commit Graph

193 Commits

Author SHA1 Message Date
e05405157a feat(bibliothèque): badge Exemple, catégories et états vides bibliothèque (ticket #80)
Ajoute le badge "Exemple" (example_badge.dart) affiché sur les
exercices/programmes/séances-modèles seedés, le filtrage par catégorie
dans la bibliothèque d'exercices et les états vides dédiés. Préserve
isExample lors de l'édition d'un programme ou d'une séance-modèle
existants (ProgramUseCases/WorkoutTemplateUseCases).

Validé GO par Main : dart analyze propre, 173 tests (4 échecs
préexistants sans rapport avec ce lot).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 07:39:26 +02:00
24e266c0e9 feat(bibliothèque): migration Drift v16, seed basket et seeding au démarrage (ticket #80)
Ajoute la migration Drift v16 (enum ExerciseCategory, champ isExample sur
exercises/programs/workout_templates, table local_seed_metadata), le
contenu seed basket déterministe (21 exercices, 1 programme, 1 séance-
modèle) dans lib/application/starter_content/, les ports
StarterSeedStateRepository/StarterContentRepository et le use case
SeedStarterContentUseCase branché dans AppBootstrap.create().

Validé GO par QA/Main : dart analyze propre, suite complète 167 tests
(4 échecs préexistants sans rapport avec ce lot), 4 nouveaux tests seed
tous verts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 07:29:49 +02:00
75f52200a2 feat(exécution): refonte des chronos de séance et carte exercice actif (ticket #90)
Réorganise l'écran d'exécution autour d'une carte "Exercice actif" sous
le compteur SÉRIE X/Y (nom, médias, temps de série, action "Démarrer
l'exercice"). Le timer de série devient un état persistant dédié (plus
un DateTime UI volatile), pause-aware, et "Démarrer l'exercice" lance
en une action tous les chronos qui doivent démarrer en début de série
(série, première étape temps, score chrono si stopwatch).

Implémentation restée non commitée depuis sa réalisation ; QA a validé
les vérifications statiques exécutables en sandbox (dart analyze,
git diff --check). flutter analyze / flutter test restent à relancer
dans un environnement avec cache Flutter SDK accessible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:26:28 +02:00
73cfa644c2 chore(ideai): synchronise l'état de suivi (tickets, agents, skills, mémoire)
Rattrapage de l'état runtime IdeA (nouveaux tickets #80-#91, agents
coach/commercial, skills, permissions MCP) resté non commité depuis la
clôture du ticket #79.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:26:20 +02:00
9981f02659 merge(main): validation auto-enchaînement configurable des chronos d'étapes (ticket #79)
Fusionne feature/step-chaining-79-qa — analyze propre (mêmes infos
préexistantes), 154/154 tests verts, build APK debug validé. Aucun
bug de production trouvé en QA, couverture de test supplémentaire
uniquement (reprise après kill d'app, enchaînement désactivé).
Clôture le chantier "auto-enchaînement des chronos d'étapes" (#73,
tickets #75 à #79).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 18:39:31 +02:00
8d0f344697 docs(ideai): met à jour le ticket #78 — chantier auto-enchaînement clos
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 18:39:21 +02:00
36027edafa test(exercice): couverture QA reprise après kill d'app, enchaînement désactivé (ticket #79)
Ajoute le test de reprise de séance après kill d'app avec
auto-enchaînement des chronos d'étapes désactivé
(test/application/use_cases_test.dart). QA n'a trouvé aucun bug de
production sur le chantier "auto-enchaînement des chronos d'étapes"
(#73) — couverture de test supplémentaire uniquement. analyze propre
(mêmes infos préexistantes), 154/154 tests verts, build APK debug
validé. Dernier ticket du chantier (#75 à #79 tous terminés).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 18:39:14 +02:00
2af3b4ebe2 merge(main): état d'exécution Chrono suivant prêt (ticket #78)
Fusionne feature/step-chaining-78-execution-ui — pub get OK, dart
format appliqué (aucun changement), analyze propre (mêmes infos
préexistantes), 153/153 tests verts, build APK debug validé. Fix du
bug d'intégration critique confirmé : _startCurrentStepTimerIfNeeded()
ne force plus startTimer(), le backend (#76) reste seul décisionnaire.
Dernier ticket de développement du chantier "auto-enchaînement des
chronos d'étapes" (#73) — il ne reste que la QA finale (#79).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:05:14 +02:00
a89b91a81a docs(ideai): met à jour les tickets #76/#77 après l'état chrono suivant prêt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:05:03 +02:00
3711e8c5ca feat(exercice): état d'exécution Chrono suivant prêt (ticket #78)
Ajoute l'état "Chrono suivant prêt" sur workout_execution_screen.dart
pour l'auto-enchaînement des chronos d'étapes. Corrige
_startCurrentStepTimerIfNeeded() qui forçait à tort startTimer() : il
se contente maintenant de rafraîchir le ticker d'affichage, laissant
le backend (#76) seul décisionnaire du démarrage automatique ou de
l'attente du chrono suivant. flutter pub get OK, dart format appliqué
(aucun changement), analyze propre (mêmes infos préexistantes),
153/153 tests verts (dont le test de non-régression pour
l'enchaînement automatique activé par défaut), build APK debug
validé. Dernier ticket de développement du chantier
"auto-enchaînement des chronos d'étapes" (#73) — il ne reste que la
QA finale (#79).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:04:46 +02:00
7d157c49e7 merge(main): résolution effective et réglages auto-enchaînement des chronos d'étapes (tickets #76, #77)
Fusionne feature/step-chaining-76-resolution — pub get OK, dart
format appliqué (7 fichiers reformatés), analyze propre (mêmes infos
préexistantes), 152/152 tests verts, build APK debug validé.
Propagation du champ de _ProgramExerciseDraft vérifiée exhaustivement
sur ses 5 points d'impact (pas de répétition du bug #72). Tickets #76
(DevBackend) et #77 (DevFrontend) développés dans le même worktree
partagé, commités séparément (fichiers disjoints) ;
feature/step-chaining-77-ui-settings restée vide, jamais divergée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:57:19 +02:00
37cce68c88 docs(ideai): met à jour le ticket #75 après résolution et réglages auto-enchaînement
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:57:09 +02:00
4b355152d5 feat(ui): réglages auto-enchaînement exercice, programme et séance (ticket #77)
Ajoute les réglages d'auto-enchaînement des chronos d'étapes sur
exercise_library_screen.dart, program_screen.dart et
workout_template_screen.dart, s'appuyant sur la résolution du ticket
#76. Propagation du nouveau champ vérifiée exhaustivement sur les 5
points d'impact de _ProgramExerciseDraft (constructeur, fromExercise,
fromProgramExercise, copy(), toConfig()) — pas de répétition du bug
#72. flutter pub get OK, dart format appliqué (7 fichiers reformatés),
analyze propre (mêmes infos préexistantes), 152/152 tests verts, build
APK debug validé. Développés dans le même worktree partagé par
DevBackend et DevFrontend ; feature/step-chaining-77-ui-settings
restée vide, jamais divergée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:57:01 +02:00
ea1e240c87 feat(exercice): résolution effective et auto-advance des chronos d'étapes (ticket #76)
Ajoute la résolution effective de l'auto-enchaînement (application/use_cases.dart)
et son support dans l'adapter Drift (infrastructure/local/drift_repositories.dart).
flutter pub get OK, dart format appliqué, analyze propre (mêmes infos
préexistantes), tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:56:49 +02:00
bb90df6411 merge(main): modèle et migration pour l'auto-enchaînement des chronos d'étapes (ticket #75)
Fusionne feature/step-chaining-75-model — pub get OK, build_runner OK
(migration schemaVersion 13→14), analyze propre (mêmes infos
préexistantes), 141/141 tests verts, build APK debug validé. Premier
ticket du chantier "auto-enchaînement des chronos d'étapes" (#73).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:43:03 +02:00
d771bf672f 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>
2026-07-20 13:42:54 +02:00
e61365277b feat(exercice): modèle et migration pour l'auto-enchaînement des chronos d'étapes (ticket #75)
Étend le modèle Drift (migration schemaVersion 13→14, ADD COLUMN) et
la couche application (entités, use cases, repositories) pour
supporter l'auto-enchaînement des chronos d'étapes. flutter pub get
OK, build_runner OK, analyze propre (mêmes infos préexistantes),
141/141 tests verts, build APK debug validé. Premier ticket du
chantier "auto-enchaînement des chronos d'étapes" (#73).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:42:46 +02:00
f510053d55 merge(main): validation client online offline-first (ticket #70)
Fusionne feature/online-client-70-qa — pub get OK, dart format
appliqué (aucun changement), analyze propre (mêmes infos
préexistantes), 137/137 tests verts, build APK debug validé. Fix
d'acceptation de partage hors-ligne relu manuellement et confirmé.
Clôture le chantier "Ajouter les features serveur au client" (#63,
tickets #64 à #70).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 09:40:01 +02:00
9a22279ec2 docs(ideai): met à jour le ticket #72 — chantier client online clos
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 09:39:49 +02:00
b6f048ad64 fix(online): validation client online offline-first (ticket #70)
Corrige l'acceptation de partage hors-ligne (acceptShare,
_acceptCachedShareAndQueueAck, _importSharedPayload dans
application/use_cases.dart) : crée bien une copie locale indépendante
avec de nouveaux IDs avant de mettre l'accusé serveur en file
d'attente. Ajuste app_bootstrap.dart, profile_screen.dart et
share_screen.dart en conséquence. flutter pub get OK, dart format
appliqué (aucun changement), analyze propre (mêmes infos
préexistantes), 137/137 tests verts, build APK debug validé. Dernier
ticket du chantier "Ajouter les features serveur au client" (#63,
tickets #64 à #70 tous terminés).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 09:39:40 +02:00
c00f61ef06 merge(main): étapes d'exercice jamais affichées en séance (ticket #72)
Fusionne feature/bugfix-72-program-steps-snapshot — pub get OK, dart
format appliqué (aucun changement), analyze propre (mêmes infos
préexistantes), 135/135 tests verts (dont 2 nouveaux tests de
non-régression exerçant le vrai flux UI ProgramFormScreen), build APK
debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:10:46 +02:00
03148d2979 docs(ideai): met à jour les tickets #71/#74 après le fix étapes en séance (#72)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:10:36 +02:00
adf56ec9e0 fix(programme): étapes d'exercice jamais affichées en séance (ticket #72)
_ProgramExerciseDraft dans program_screen.dart (état interne du
formulaire de composition de programme) n'avait jamais de champ
exerciseStepsSnapshot depuis sa création, avant le chantier "Exercice
à plusieurs étapes" (#54). Les étapes d'un exercice étaient donc
systématiquement perdues à chaque composition/édition de programme
via l'écran réel, peu importe l'ordre des opérations — d'où l'absence
totale d'étapes affichées en séance. Ajoute le champ manquant et 2
tests de non-régression exerçant le vrai flux UI ProgramFormScreen.
flutter pub get OK, dart format appliqué (aucun changement), analyze
propre (mêmes infos préexistantes), 135/135 tests verts, build APK
debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:10:19 +02:00
a28080e2a7 merge(main): correctifs critiques serveur non lançable et score par défaut à 0 (tickets #71, #74)
Fusionne feature/bugfix-71-74-critical — pub get OK, build_runner OK
(migration schemaVersion 12→13), analyze propre, 133/133 tests verts,
build APK debug validé. Fix #74 reproduit et confirmé manuellement en
isolant le scénario Docker exact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:50:40 +02:00
ebc537ad37 docs(ideai): met à jour le ticket #69 après les correctifs #71/#74
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:50:32 +02:00
ef2c3ffffd fix(exercice): sélection d'un score par défaut à 0 impossible (ticket #71)
Corrige la contrainte CHECK sur la table exercises (tables.dart) qui
empêchait à tort une valeur de score par défaut à 0, et ajoute la
migration Drift schemaVersion 12→13 reconstruisant la table avec la
contrainte corrigée (app_database.dart). build_runner OK, test de
régression ajouté.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:50:26 +02:00
871ac95298 fix(server): serveur non lançable faute de répertoire build/ (ticket #74)
dart compile exe échouait car le répertoire build/ n'existait pas
encore dans le conteneur au moment de la compilation. Ajoute mkdir -p
build avant les deux dart compile exe dans le Dockerfile. Bug
reproduit et fix confirmé manuellement en isolant le scénario exact
(échec sans le fix, succès avec).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:50:18 +02:00
0885188d26 merge(main): partage sortant et boîte de réception (ticket #69)
Fusionne feature/online-client-69-sharing-ui — analyze propre (mêmes
infos préexistantes), 132/132 tests verts, build APK debug validé.
Dernier ticket de développement du chantier "Ajouter les features
serveur au client" (#63) — il ne reste que la QA finale (#70).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:23:28 +02:00
0347750dbc docs(ideai): met à jour le ticket #68, ajoute les tickets #72/#73/#74
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:23:20 +02:00
d16a017743 feat(online): partage sortant et boîte de réception (ticket #69)
Ajoute l'écran de partage sortant (presentation/share_screen.dart) et
la boîte de réception des partages (presentation/share_inbox_screen.dart),
avec les points d'entrée sur profile_screen.dart, home_screen.dart,
program_screen.dart et workout_template_screen.dart. flutter analyze
propre (mêmes infos préexistantes), 132/132 tests verts, build APK
debug validé. Dernier ticket de développement du chantier "Ajouter
les features serveur au client" (#63) — il ne reste que la QA finale
(#70).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:23:14 +02:00
eee4348b52 merge(main): statut de synchronisation discret et action manuelle (ticket #68)
Fusionne feature/online-client-68-sync-status — pub get OK, dart
format appliqué, analyze propre (mêmes infos préexistantes), 127/127
tests verts, build APK debug validé. Ton du statut de sync vérifié
manuellement : formulation neutre, jamais alarmante.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 22:06:12 +02:00
c184a98339 docs(ideai): met à jour le ticket #66 après le statut de synchronisation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 22:06:01 +02:00
557bfbb37e feat(online): statut de synchronisation discret et action manuelle (ticket #68)
Affiche le statut de synchronisation sur profile_screen.dart et
home_screen.dart avec une action de déclenchement manuel, en
formulation neutre (jamais "Erreur"/"Échec" ni couleur alarmante :
"Synchronisation en attente", "Nouvelle tentative automatique").
flutter pub get OK, dart format appliqué, analyze propre (mêmes infos
préexistantes), 127/127 tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 22:05:55 +02:00
7b63792a85 merge(main): partage client - use cases, inbox cache et import local (ticket #66)
Fusionne feature/online-client-66-sharing — pub get OK, build_runner
OK (migration schemaVersion 11→12), dart format appliqué, analyze
propre (mêmes infos préexistantes), 124/124 tests verts, build APK
debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:55:00 +02:00
334d40cd1d docs(ideai): met à jour les tickets #65/#67 après le partage client, ajoute le ticket #71
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:54:52 +02:00
010e055404 feat(online): partage client - use cases, inbox cache et import local (ticket #66)
Ajoute l'adapter API distant de partage (infrastructure/remote/share_api.dart)
et les use cases associés (application/use_cases.dart), avec cache
d'inbox et import local des ressources partagées acceptées. Étend le
modèle Drift (migration schemaVersion 11→12) et les entités du domaine
en conséquence. flutter pub get OK, build_runner OK, dart format
appliqué, analyze propre (mêmes infos préexistantes), 124/124 tests
verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:54:45 +02:00
715fdd4335 merge(main): sync client incrémentale LWW et profil/écrans auth (tickets #65, #67)
Fusionne feature/online-client-65-sync — pub get OK, build_runner OK
(migration schemaVersion 10→11), dart format appliqué, analyze propre
(mêmes infos préexistantes), 119/119 tests verts, build APK debug
validé. Tickets #65 (DevBackend) et #67 (DevFrontend) développés dans
le même worktree partagé ; feature/online-client-67-profile-ui restée
vide, jamais divergée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:41:32 +02:00
128e57c582 docs(ideai): met à jour le ticket #64 après sync client et profil
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:41:25 +02:00
c0dbce275b feat(online): sync client incrémentale LWW et profil/écrans auth (tickets #65, #67)
Ajoute la synchronisation client incrémentale LWW vers l'API serveur
(application/use_cases.dart: SyncUseCases, ports.dart, migration
Drift schemaVersion 10→11 pour les métadonnées de sync et mappings de
ressources, infrastructure/remote/sync_api.dart) et l'écran de profil
avec entrée sur l'accueil (presentation/profile_screen.dart,
home_screen.dart, presentation.dart). Développés dans le même
worktree partagé par DevBackend et DevFrontend ; commit combiné car
test/presentation/home_screen_test.dart mélange authentiquement les
deux tickets (le test de l'entrée Profil et la mise à jour du fake de
bootstrap requise par le nouveau getter syncUseCases sur
AppDependencies). Corrige au passage une couleur `crimson` inexistante
dans le thème (remplacée par colorScheme.error) et une signature de
paramètres positionnels/nommés incohérente sur un fake de test.
flutter pub get OK, build_runner OK, dart format appliqué, analyze
propre (mêmes infos préexistantes), 119/119 tests verts, build APK
debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:41:18 +02:00
b643988986 merge(main): session compte, stockage sécurisé et adapter API (ticket #64)
Fusionne feature/online-client-64-auth-foundation — pub get OK
(http, flutter_secure_storage), build_runner OK (migration
schemaVersion 9→10), dart format appliqué, analyze propre (mêmes
infos préexistantes), 109/109 tests verts, build APK debug validé.
Premier ticket du chantier "Ajouter les features serveur au client"
(#63).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:26:06 +02:00
53b4957bc6 docs(ideai): mémoire client online, clôture ticket #64, cadrage #65-#70
Ajoute les notes mémoire d'architecture, de philosophie de la couche
online et d'UX pour le client online, clôture le ticket #64, reflète
les tickets #46/#54/#57/#62, ajoute le cadrage des tickets #65 à #70.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:25:57 +02:00
e60c8bbdb8 feat(online): session compte, stockage sécurisé et adapter API (ticket #64)
Ajoute l'adapter API distant (infrastructure/remote/auth_api.dart,
http_api_client.dart) et le stockage sécurisé du token d'auth
(infrastructure/security/secure_storage_auth_token_store.dart), câblés
dans app_bootstrap.dart. Étend le modèle Drift (migration
schemaVersion 9→10) et la couche application (ports, use cases,
entités) pour la session de compte. flutter pub get OK (ajout http,
flutter_secure_storage), build_runner OK, dart format appliqué,
analyze propre (mêmes infos préexistantes), 109/109 tests verts,
build APK debug validé. Premier ticket du chantier "Ajouter les
features serveur au client" (#63).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:25:49 +02:00
a557708273 merge(main): validation exercices à étapes, persistance et historique (ticket #62)
Fusionne feature/exercise-steps-62-qa — analyze propre (mêmes infos
préexistantes), 103/103 tests verts, build APK debug validé. Corrige
un vrai bug trouvé en QA (suppression d'exercice cascadant à tort
vers les programmes) et le texte de confirmation UI devenu incohérent
avec ce fix. Clôture le chantier "Exercice à plusieurs étapes" (#54,
tickets #56/#58/#59/#60/#61/#62).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:56:42 +02:00
bd2e28490d docs(ideai): met à jour le ticket #61 — chantier exercices à étapes clos
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:56:34 +02:00
b7ba885b07 fix(exercice): suppression d'exercice ne casse plus les programmes (ticket #62)
Corrige ExerciseUseCases.delete() qui cascadait à tort vers les
ProgramExercise référents, violant le pattern snapshot (un exercice
supprimé ne doit jamais affecter les programmes déjà composés). Ajoute
le test de régression associé. Met à jour le texte de confirmation
_confirmDelete dans exercise_library_screen.dart, devenu incohérent
avec ce fix (il affirmait à tort que la suppression retirerait
l'exercice des programmes). Trouvé pendant la QA finale du chantier
"Exercice à plusieurs étapes" (#54). flutter analyze propre (mêmes
infos préexistantes), 103/103 tests verts, build APK debug validé.
Dernier ticket du chantier (#56/#58/#59/#60/#61/#62 tous faits).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:56:28 +02:00
fa3beb05d4 merge(main): plan de séance et historique avec résultats d'étapes (ticket #61)
Fusionne feature/exercise-steps-61-plan-history — pub get OK, dart
format appliqué, analyze propre (mêmes infos préexistantes), 102/102
tests verts, build APK debug validé. Dernier ticket UI du chantier
"Exercice à plusieurs étapes" (#54) — il ne reste que la QA finale
(#62).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:19:14 +02:00
21e0e5b079 docs(ideai): met à jour le ticket #60 après plan de séance et historique
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:19:06 +02:00
8bf4f89276 feat(exercice): plan de séance et historique avec résultats d'étapes (ticket #61)
Affiche le plan de séance et l'historique avec les résultats par
étape sur workout_execution_screen.dart et history_screen.dart.
flutter pub get OK, dart format appliqué (3 fichiers reformatés),
analyze propre (mêmes infos préexistantes), 102/102 tests verts,
build APK debug validé. Dernier ticket UI du chantier "Exercice à
plusieurs étapes" (#54) — il ne reste que la QA finale (#62).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:19:01 +02:00
cdaf45646c merge(main): exécution de séance avec module séquence et bips (ticket #60)
Fusionne feature/exercise-steps-60-execution-ui — pub get OK, analyze
propre (mêmes infos préexistantes + 2 nouvelles
use_build_context_synchronously non bloquantes), 100/100 tests verts,
build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:08:42 +02:00
8ac86c066f fix(exercice): reprise du timer d'étape après restauration de séance (ticket #60)
Relance le timer de l'étape en cours si son état restauré est en
pause, au lieu de rester bloqué en pause après une reprise de séance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:08:30 +02:00