Commit Graph

221 Commits

Author SHA1 Message Date
6c87674652 test: cover local backup round-trip and transactional rollback
Add Drift-level tests that go through the real codec (export -> encode
-> decode -> import) for both merge and replaceAll modes across two
independent databases, plus a test proving a failure mid-import rolls
back all mutations within the transaction.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 13:40:59 +02:00
d90c7ad700 test: cover local backup validation errors and media restore counting
Add coverage for invalidFile/incompatibleFormat/corrupted detection,
importFailedNoMutation wrapping of unexpected repository failures, and
missingMediaCount reflecting actual restore/checksum outcomes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 13:40:56 +02:00
6d9456275f fix: count checksum-corrupted media as missing on local backup import
Import result missingMediaCount compared restored assets against the
backup's declared media file list, so an embedded file that failed
sha256 verification was still treated as present. Compute it from the
actually restored files instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 13:40:52 +02:00
8d6e5b4201 feat: verify embedded backup media checksums
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:30:06 +02:00
4384797e25 test: cover local backup import export
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:27:48 +02:00
c3d5273869 feat: add local backup export import core
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:23:30 +02:00
b256595e08 chore(tickets): met à jour le carnet du ticket #83
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:07:20 +02:00
60e454cb9e chore(tickets): clôture du ticket #83
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:07:11 +02:00
d6626f17fa chore(tickets): met à jour le suivi du ticket #83 (rapport QA GO)
Ticket #83 validé GO par QA, écarts mineurs non bloquants notés au carnet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:06:48 +02:00
c9e0810a64 chore(tickets): met à jour le suivi du ticket #83 (lot frontend)
Lot frontend F1/F2 commité et vérifié (214 tests, 1 échec préexistant sans rapport).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 10:22:51 +02:00
1b5fc935bd feat(bibliotheque): tags de filtrage et duplication rapide côté UI (ticket #83)
Lot frontend F1+F2 : composant library_tags.dart (filtre/suggestions de tags), intégration dans exercise_library_screen, program_screen et workout_template_screen (tags + action duplication rapide), tests associés.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 10:22:47 +02:00
e57cfdf54d chore(tickets): met à jour le suivi du ticket #83 (lot backend)
Lot backend (tags + duplication) commité et vérifié (110 tests, 1 échec préexistant sans rapport). Lot frontend F1/F2 à venir avant clôture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 10:05:04 +02:00
add5025dd2 feat(bibliotheque): tags et duplication profonde
Ticket #83 B1-B3 : tags JSON dénormalisés, migration Drift v19, mappings sync, helpers de filtre/suggestions, duplication profonde Program/WorkoutTemplate, tests associés.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 10:01:31 +02:00
10fba8d2ec chore(tickets): clôture effective du ticket #82
Le ticket #82 était resté au statut open malgré le travail terminé (édition manuelle précédente insuffisante) ; clôturé proprement via l'API IdeA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:39:50 +02:00
7d6273f78c chore(tickets): met à jour le carnet du ticket #93
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:33:46 +02:00
5c4a08a3a1 chore(tickets): clôture du ticket #93
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:33:31 +02:00
b1d1bd293f chore(tickets): met à jour le suivi du ticket #93
Métadonnées de suivi IdeA pour le ticket #93 (refonte UI écran de séance), validé GO par QA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:33:05 +02:00
5c826ce294 feat(execution): refonte de l'UI de l'écran de séance (ticket #93)
Refonte de workout_execution_screen.dart cadrée UX+Architect ; résout au passage la dette de tests du ticket #90 (3 échecs préexistants désormais verts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:32:52 +02:00
9b7ec74831 chore(tickets): clôture du ticket #92
Ticket #92 (ne pas couper la musique avec les chronos de step) validé GO par QA, passé en statut closed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:08:44 +02:00
f2e8a3bbe0 fix(audio): ne coupe plus la musique externe sur les chronos de step (ticket #92)
Le son joué aux 3 dernières secondes d'un chrono de step n'interrompt plus la musique de l'utilisateur en cours de lecture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:07:20 +02:00
3885709d5a chore(tickets): clôture du ticket #82 et ajout des tickets #92/#93
Métadonnées de suivi IdeA : ticket #82 (statistiques de progression) passé à closed après validation QA GO, ajout des nouveaux tickets #92 et #93 non encore traités.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:02:23 +02:00
3b7d904953 feat(statistiques): implémentation frontend statistiques de progression (ticket #82)
Lots F1+F2 : écran progression_screen.dart, intégration home/history/navigation, tests associés (193 tests suite complète, 4 échecs préexistants sans rapport confirmés).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:58:16 +02:00
a8baa3169c fix(statistiques): corrige dates et tri progression
Corrige le décodage des timestamps issus des customSelect (secondes vs millisecondes) et le tri des options d'exercice pour privilégier les exercices actifs avant les archivés, avec tie-breakers (ticket #82).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:42:55 +02:00
e2f59ece8c test(statistiques): couvre les exclusions de progression
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:39:35 +02:00
520f227e82 feat(statistiques): implémentation backend statistiques de progression (ticket #82)
Lots B1+B2+B3 : schéma/domaine, requêtes d'agrégation et ports/use cases pour les statistiques de progression, avec tests associés.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:35:47 +02:00
fdb301f746 chore(tickets): clôture des tickets #80 et #81
Met à jour les métadonnées IdeA (statut closed, carnets de suivi) suite à
la livraison et au merge sur develop du code des tickets #80 (bibliothèque
de drills basket de démarrage) et #81 (dernière performance / meilleur
score à l'exécution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:12:03 +02:00
0813327bef feat(exécution): affichage dernière performance et meilleur score (ticket #81)
Affiche la dernière performance et le meilleur score par exercice
pendant l'exécution de séance (écran d'exécution), ainsi que les
points d'accès associés dans l'accueil, la séance-modèle et
l'historique, en s'appuyant sur ExercisePerformanceReferenceUseCase.

Validé GO par Main : dart analyze propre, 178 tests (4 échecs
préexistants sans rapport, identiques à ceux déjà documentés sur #80).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:03:00 +02:00
ac51c16b51 feat(exécution): dernière performance et meilleur score par exercice (ticket #81)
Ajoute la migration Drift v17 (colonne sourceExerciseIdSnapshot sur
workout_history_set_results et workout_history_step_results, index
associés), le port ExercisePerformanceReferenceRepository et son
implémentation Drift, et le use case
ExercisePerformanceReferenceUseCase (dernière performance + meilleur
score par métrique active pour un exercice donné).

Validé GO par Main : dart analyze propre (1 lint mineur de style),
178 tests (4 échecs préexistants sans rapport avec ce lot).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 07:54:49 +02:00
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