## Objectif Produire des fiches de drills basket homogènes, directement exploitables par DevBackend pour créer les seed data GameTime (entités `Exercise`, `Program`, `WorkoutTemplate` de `lib/domain/entities.dart`), sans aller-retour d'interprétation. Ce skill est destiné à l'agent **Coach**, dans le cadre du ticket **#80 — Bibliothèque de drills basket de démarrage + séance exemple modifiable**, et réutilisable pour tout futur enrichissement de la bibliothèque de contenu basket. ## Catégories à couvrir pour une bibliothèque de démarrage - Shoot (tir extérieur, mi-distance) - Lancers francs - Dribble / ball-handling - Finition (layups, floaters, contact) - Conditionnement (endurance, explosivité spécifique basket) - Défense (individuelle, déplacements) - Mobilité / échauffement Une bibliothèque de démarrage complète vise au moins un drill par catégorie, sans obligation d'exhaustivité — mieux vaut peu de drills bien spécifiés que beaucoup de drills vagues. ## Gabarit de fiche — un exercice (`Exercise`) Pour chaque drill, remplir tous les champs suivants avant de le considérer prêt : ``` Nom : (court, concret, ex. "Lancers francs — série de 10") Catégorie : (une des catégories ci-dessus) Description : (2-4 phrases : geste, placement, objectif ; vocabulaire basket précis) Matériel : (ballon / panier / cônes / chrono — jamais de matériel connecté ou de caméra) Niveau conseillé : (debutant / intermediaire / tous niveaux) Mesures activées (au moins une) : - Temps (hasTimeMeasure) : oui/non — si oui, defaultTargetTimeSeconds - Répétitions (hasRepsMeasure) : oui/non — si oui, defaultTargetReps - Score (hasScoreMeasure) : oui/non - scoreInputMode : manual | stopwatch - si manual : scoreLabel (ex. "Paniers marqués"), scoreUnit (ex. "sur 10") - defaultTargetScore ou defaultTargetScoreTimeMs selon le mode Étapes (steps, optionnel — seulement si le drill a plusieurs phases distinctes) : - Étape 1 : nom, type (time|reps), defaultTargetValue, score optionnel - Étape 2 : ... Média souhaité : image et/ou vidéo (décrire l'intention : ex. "photo du placement des pieds" — ne pas fournir de fichier, c'est à DevBackend/DevFrontend de le résoudre) ``` Règles de cohérence à vérifier avant de livrer la fiche : - Au moins une mesure activée. - Si score en mode manuel : `scoreLabel` ET `scoreUnit` renseignés. - Les cibles par défaut (`defaultTarget*`) doivent avoir un sens réel pour un débutant raisonnable (pas de surcharge, pas de valeur arbitraire). - Si le drill a plusieurs phases nettement différentes (ex. échauffement puis chronométré), utiliser `steps` plutôt que de forcer plusieurs mesures sur un seul exercice plat. ## Gabarit de fiche — un programme (`Program`) ``` Nom : (ex. "Séance shoot & finition") Repos par défaut entre séries (defaultRestSeconds) : (valeur réaliste, ex. 30-60s) Exercices (dans l'ordre) : 1. [Nom exercice] — setsCount : X, mesures activées : [...], cibles : [...], repos spécifique (restSecondsOverride) si différent du défaut 2. ... ``` ## Gabarit de fiche — une séance-modèle (`WorkoutTemplate`) ``` Nom : (ex. "Séance découverte basket") Programmes inclus (dans l'ordre) : [Nom programme 1], [Nom programme 2], ... ``` ## Checklist finale avant de transmettre à Architect/DevBackend - [ ] Au moins un drill par catégorie listée ci-dessus. - [ ] Chaque fiche exercice respecte le gabarit et les règles de cohérence. - [ ] Au moins un programme d'exemple cohérent (drills compatibles, ordre logique échauffement → technique → conditionnement). - [ ] Au moins une séance-modèle d'exemple composée du/des programme(s). - [ ] Rien ne dépasse le modèle de données actuel (`Exercise`/`Program`/ `WorkoutTemplate`/`ExerciseStep`) — sinon, remonter à Architect avant de livrer. - [ ] Aucun drill ne nécessite de matériel connecté, de caméra ou d'abonnement tiers. - [ ] Le contenu reste éditable/supprimable : pas d'hypothèse de donnée protégée.