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>
This commit is contained in:
2026-07-22 08:12:03 +02:00
parent 0813327bef
commit fdb301f746
5 changed files with 39 additions and 39 deletions

View File

@ -1,28 +1,23 @@
---
issueRef: "#80"
version: 4
version: 7
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1784665470112
updatedAt: 1784698823269
---
## Spec UX (livrée)
## Lot backend (B1+B2+B3) — TERMINÉ, commité (24e266c), mergé sur develop
Bibliothèque d'exercices basket de démarrage (7 catégories, ~20 exercices), programme "Fondations basket - 45 min" (8 exercices), séance-modèle "Séance exemple - Fondations basket", règles UX (badge Exemple, éditable/supprimable, anti-réapparition, états vides). Détail complet dans l'historique de la conversation d'orchestration Main.
## Lot frontend (F1+F2+F3) — DevFrontend — TERMINÉ
## Plan technique Architect (livré)
Fichiers : lib/presentation/example_badge.dart (nouveau, badge "Exemple"), exercise_library_screen.dart (catégorie visible, badge, état vide), program_screen.dart (badge, état vide), workout_template_screen.dart (badge, état vide), lib/application/use_cases.dart (préservation isExample à l'édition), tests associés mis à jour.
Migration Drift v16 : ajout `category` (enum ExerciseCategory: shoot, freeThrows, dribble, finishing, conditioning, defense, mobility, uncategorized) + `is_example` sur exercises/programs/workout_templates. Table `local_seed_metadata` (key, version, applied_at) pour tracker `starterSeedVersion=1`. Use case `SeedStarterContentUseCase` appelé dans `AppBootstrap.create()`, transactionnel, "base vide" = aucune ligne (y compris soft-deleted) dans exercises/programs/workout_templates. IDs stables déterministes type `starter-v1-exercise-form-shooting`. Données seed en Dart const (`lib/application/starter_content/basket_starter_seed_v1.dart`), pas JSON. Séance-modèle via `WorkoutTemplateProgram.snapshotFromProgram`. Contenu seed = `syncState=localOnly`, pas de sync serveur automatique.
Écart assumé (validé par le brief) : pas d'action "Restaurer les exemples" ni de message de bienvenue ponctuel — hors périmètre minimal du ticket.
Découpage :
- Lot B1 (DevBackend) : schéma/domaine — ExerciseCategory, champs category/isExample, migration v16, mappers, tests migration.
- Lot B2 (DevBackend) : seed applicatif — ports StarterSeedStateRepository/StarterContentRepository, SeedStarterContentUseCase, basket_starter_seed_v1.dart (contenu complet UX), adapter Drift transactionnel, branchement AppBootstrap.
- Lot B3 (DevBackend/QA) : tests (seed unique, non-réapparition, snapshots programme/séance corrects, catégories/isExample persistés).
- Lot F1/F2 (DevFrontend) : badge "Exemple" bibliothèque/programmes/séances, affichage category.
- Lot F3 (DevFrontend) : première ouverture / états vides, dépend du résultat du seed use case.
## Vérification finale (Main, environnement fonctionnel — sandbox QA/Dev limité en réseau/cache)
## Décisions Main sur questions Architect
1. Badge "Exemple" conservé après modification par l'utilisateur (provenance, pas immutabilité) → OK, suivre la reco Architect.
2. Contenu exemple non synchronisé au serveur par défaut → OK, suivre la reco Architect.
3. Catégorie `uncategorized` visible sous "Autres" dans l'UI si nécessaire → OK, suivre la reco Architect.
4. Liste complète des ~20 exercices : transmise intégralement à DevBackend par Main (spec UX complète disponible).
- `dart analyze` sur tous les fichiers touchés (backend + frontend) : aucune erreur, seulement dépréciations Flutter préexistantes (RadioListTile, onReorder).
- `flutter test` (suite complète, 173 tests) : 4 échecs, tous confirmés préexistants et sans rapport avec #80 (vérifiés par stash différentiel avant les changements #80) : 1 dans drift_repositories_test.dart (FK media, dette antérieure), 3 dans workout_execution_screen_test.dart (chrono score / confirmations, dette antérieure UI liée au ticket #90 précédent).
- Aucune régression introduite par #80.
Prochaine étape : Git pour la branche, puis DevBackend (B1+B2+B3).
**Verdict final : GO. Ticket #80 prêt à être commité (lot frontend) et clôturé.**
Prochaine étape : Git committe le lot frontend sur `feature/bibliotheque-drills-demarrage`, décide du merge vers develop (déjà fast-forward pour le backend), ticket #80 passe en closed.

View File

@ -2,7 +2,7 @@
id: "8f4ea0ec-ef5a-42e0-bcf4-9eaa751bea94"
number: 80
title: "Bibliothèque de drills basket de démarrage + séance exemple modifiable"
status: "inProgress"
status: "closed"
priority: "high"
sprint: null
links: []
@ -10,8 +10,8 @@ agentRefs: []
createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
createdAt: 1784650708413
updatedAt: 1784665470112
version: 4
updatedAt: 1784698823269
version: 7
---
Constat Commercial : le socle applicatif (exercices/programmes/séances/exécution/historique) est déjà solide, mais l'app démarre vide. Les concurrents basket (94FEETOFGAME) et musculation (Hevy, JEFIT) gagnent en crédibilité grâce à un contenu de départ.