Commit Graph

183 Commits

Author SHA1 Message Date
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
37fb50e15e docs(ideai): met à jour les tickets #58/#59 après l'exécution avec bips
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:08:05 +02:00
6947cee30c feat(exercice): exécution de séance avec module séquence et bips (ticket #60)
Ajoute le lecteur de bips d'étapes (presentation/exercise_step_audio.dart,
port ExerciseStepAudioCuePlayer injectable en test, jamais le vrai
audioplayers en test) et les fichiers audio associés
(assets/audio/step_countdown_short.wav, step_completion_long.wav).
Câble ActiveExerciseStepUseCases dans app_bootstrap.dart et l'expose à
WorkoutExecutionScreen. Les appels audio réels sont protégés par un
try/catch qui log sans jamais bloquer la progression d'étape. flutter
pub get OK (ajout audioplayers), 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:07:56 +02:00
83c87d9a42 merge(main): exécution persistante des étapes et éditeur d'étapes (tickets #58, #59)
Fusionne feature/exercise-steps-58-execution-persistence — pub get
OK, build_runner OK, analyze propre (mêmes infos préexistantes),
93/93 tests verts, build APK debug validé. Tickets #58 (DevBackend)
et #59 (DevFrontend) développés dans le même worktree partagé ;
feature/exercise-steps-59-editor-ui restée vide, jamais divergée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:53:17 +02:00
ae1104ce01 docs(ideai): met à jour les tickets après persistance des étapes et éditeur
Clôture/actualise les tickets #24, #29, #32, #33, #41, #42, #43, #44,
#45, #56, #63 et reflète l'avancement des tickets #58/#59.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:53:06 +02:00
ebba22db56 feat(exercice): exécution persistante des étapes et éditeur d'étapes (tickets #58, #59)
Ajoute la persistance de l'exécution par étapes avec résultats par
passage (ports, use cases, entités, modèle Drift avec migration) et
l'éditeur d'exercice avec séquence d'étapes sur
exercise_library_screen.dart. Développés dans le même worktree
partagé par DevBackend et DevFrontend ; commit combiné plutôt que
séparé car les fakes de repository de test corrigés (nouvelles
interfaces #58) touchent plusieurs écrans sans lien avec l'éditeur
lui-même (historique, accueil, exécution, séance-modèle). Corrige au
passage un ListTile sans ancêtre Material dans le nouvel éditeur
d'étapes (Material(type: MaterialType.transparency)). flutter pub get
OK, build_runner OK, analyze propre (mêmes infos préexistantes),
93/93 tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:52:43 +02:00
4731a257a1 merge(main): modèle domain + Drift pour exercices à étapes (ticket #56)
Fusionne feature/exercise-steps-56-domain-drift — pub get OK,
build_runner OK (migration schemaVersion 7→8), analyze propre (mêmes
8 infos préexistantes), 87/87 tests verts, build APK debug validé.
Premier ticket du chantier "Exercice à plusieurs étapes" (#54).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:32:48 +02:00
733b7bb597 docs(ideai): mémoire, sprint et tickets du chantier exercices à étapes
Ajoute les notes mémoire d'architecture et UX pour les exercices à
étapes, un nouveau sprint, clôture le ticket #56 et reflète les
tickets #46/#53, ajoute le cadrage des tickets #57 à #63.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:32:33 +02:00
b1182db32e feat(exercice): modèle domain + Drift pour exercices à étapes (ticket #56)
Étend le modèle Drift (tables.dart, app_database.dart/.g.dart,
migration schemaVersion 7→8) et la couche application (entités, use
cases, repositories) pour supporter des exercices composés de
plusieurs étapes. flutter pub get OK, build_runner OK, flutter
analyze propre (mêmes 8 infos préexistantes), 87/87 tests verts,
build APK debug validé. Premier ticket du chantier "Exercice à
plusieurs étapes" (#54).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:32:24 +02:00
73d01371d4 merge(main): tests API, contrats OpenAPI et vérification d'intégration (ticket #53)
Fusionne feature/server-53-openapi-tests — dart analyze clean, dart
test 29/29 vert. openapi.yaml vérifié contre les endpoints réels du
serveur. Clôture le chantier serveur (tickets #47 à #53).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:56:39 +02:00
80430d6d8a docs(ideai): met à jour le ticket #52 et le ticket #54 — chantier serveur clos
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:56:34 +02:00