From 57475f238b65972b6c9f0a95ac5a0b31d57789c0 Mon Sep 17 00:00:00 2001 From: Blomios Date: Sat, 18 Jul 2026 09:08:23 +0200 Subject: [PATCH] =?UTF-8?q?docs(ideai):=20met=20=C3=A0=20jour=20la=20m?= =?UTF-8?q?=C3=A9moire=20et=20les=20tickets=20apr=C3=A8s=20la=20config=20s?= =?UTF-8?q?core=20chronom=C3=A9tr=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajoute le plan de reprise mémoire, clôture le ticket #26, reflète le ticket #35, ajoute le cadrage des tickets #37/#38. Co-Authored-By: Claude Opus 4.8 --- .ideai/memory/MEMORY.md | 1 + .../memory/gametime-resume-plan-2026-07-18.md | 48 +++++++++++++++++++ .ideai/tickets/26/carnet.md | 4 +- .ideai/tickets/26/issue.md | 6 +-- .ideai/tickets/35/carnet.md | 4 +- .ideai/tickets/35/issue.md | 8 ++-- .ideai/tickets/37/carnet.md | 6 +++ .ideai/tickets/37/issue.md | 16 +++++++ .ideai/tickets/38/carnet.md | 6 +++ .ideai/tickets/38/issue.md | 16 +++++++ .ideai/tickets/counter.json | 2 +- .ideai/tickets/index.json | 32 +++++++++++-- 12 files changed, 133 insertions(+), 16 deletions(-) create mode 100644 .ideai/memory/gametime-resume-plan-2026-07-18.md create mode 100644 .ideai/tickets/37/carnet.md create mode 100644 .ideai/tickets/37/issue.md create mode 100644 .ideai/tickets/38/carnet.md create mode 100644 .ideai/tickets/38/issue.md diff --git a/.ideai/memory/MEMORY.md b/.ideai/memory/MEMORY.md index 3346b57..97e182d 100644 --- a/.ideai/memory/MEMORY.md +++ b/.ideai/memory/MEMORY.md @@ -9,3 +9,4 @@ - [gametime-architecture-set-editing](gametime-architecture-set-editing.md) — memory note gametime-architecture-set-editing - [gametime-ux-score-chrono](gametime-ux-score-chrono.md) — memory note gametime-ux-score-chrono - [gametime-architecture-score-chrono](gametime-architecture-score-chrono.md) — memory note gametime-architecture-score-chrono +- [gametime-resume-plan-2026-07-18](gametime-resume-plan-2026-07-18.md) — memory note gametime-resume-plan-2026-07-18 diff --git a/.ideai/memory/gametime-resume-plan-2026-07-18.md b/.ideai/memory/gametime-resume-plan-2026-07-18.md new file mode 100644 index 0000000..ec09249 --- /dev/null +++ b/.ideai/memory/gametime-resume-plan-2026-07-18.md @@ -0,0 +1,48 @@ +--- +name: gametime-resume-plan-2026-07-18 +description: memory note gametime-resume-plan-2026-07-18 +metadata: + type: project +--- +# GameTime — Plan de reprise (consigné suite à interruption pour limite de tokens, 2026-07-18) + +## Instruction utilisateur explicite +1. Attendre le reset de tokens (~3h du matin) avant de reprendre. +2. Terminer ce qui était en cours (voir "État exact au moment de l'interruption" ci-dessous). +3. Enchaîner ensuite sur TOUS les tickets restants, en commençant par ceux du sprint **"Bug resolution"**. +4. Puis les autres tickets par ordre de priorité, en tenant compte des dépendances — l'utilisateur laisse Main juger de l'ordre exact, il ne sera pas devant l'écran. +5. **Règle importante pour les bugs** : ne PAS passer les tickets de bug en `closed` une fois corrigés — les passer en statut `QA`. L'utilisateur testera lui-même avec l'APK et les clôturera à la main. +6. Une fois absolument tout terminé, rebuild l'APK final (`flutter build apk --debug`), pour que l'utilisateur ait un seul APK à jour avec tous les tickets faits. + +## État exact au moment de l'interruption +Ticket **#26** ([DevFrontend] Configuration du Score chrono — exercice + programme), branche `feature/#26-score-chrono-config`, en cours de débogage d'un dernier test qui échoue de façon persistante après plusieurs itérations : + +Test : `test/presentation/exercise_library_screen_test.dart` — "basculer en chrono intégré masque l'unité et affiche le badge" (ligne ~129). +Échec : `expect(find.bySemanticsLabel('Score chrono'), findsOneWidget)` ne trouve rien, alors que : +- Le widget `MeasureBadge` (lib/presentation/exercise_library_screen.dart ~ligne 655-684) a bien la logique correcte : si `measure == WorkoutMeasure.score && scoreInputMode == ScoreInputMode.stopwatch`, `label = 'Score chrono'`, rendu via `Semantics(label: label, child: Chip(...))`. +- Le site d'appel dans `ExerciseListTile` (~ligne 246) passe bien `scoreInputMode: exercise.scoreInputMode` à `MeasureBadge`. +- Le test vérifie bien `saved.scoreInputMode == ScoreInputMode.stopwatch` à la ligne 120 (ça passe), puis reconstruit `ExerciseListTile(exercise: saved)` dans un nouveau `pumpWidget` (lignes 122-127), `pumpAndSettle()`, puis cherche le badge (ligne 129) — et ne le trouve pas. + +**Hypothèse non encore vérifiée à l'interruption** : `exercise.availableMeasures` (domain/entities.dart ligne 166) dépend de `hasScoreMeasure` — vérifier si `saved.hasScoreMeasure` est bien `true` après la sauvegarde du formulaire en mode "Chrono intégré" (il est possible que le formulaire ne coche/persiste pas `hasScoreMeasure=true` correctement quand on passe directement en mode chrono sans que le switch "Score" ait été committé avant le changement de mode radio — à vérifier dans `exercise_library_screen.dart`, la logique de sauvegarde du formulaire ExerciseFormScreen, autour de la construction de l'objet Exercise final avant `save()`). C'est la piste la plus probable à vérifier en premier à la reprise, avant de relancer un nouvel aller-retour avec DevFrontend. + +## Chaîne de tickets score chrono (ticket parent #18) +- #25 [DevBackend] Domain et migration — **terminé et mergé** (tag v1.5.0-debug + ce qui suit). +- #26 [DevFrontend] Configuration Score chrono — **en cours**, cf. ci-dessus. Branche `feature/#26-score-chrono-config` non mergée. +- #27 [DevFrontend] Chrono score intégré dans l'exécution — dépend de #25, #26. Pas commencé. +- #28 [DevFrontend] Affichage Score chrono dans plan/historique — dépend de #27. Pas commencé. + +## État des branches/tags au moment de l'interruption +- `main`/`develop` à jour au tag `v1.5.0-debug` (inclut tickets #1-23, #12, #31). +- Branche `feature/#26-score-chrono-config` en cours, non mergée, contient le travail du ticket #26 (avec le test encore rouge). + +## Tickets connus restants après #26/#27/#28 +- Tout ticket dans le sprint "Bug resolution" (sprintId `abc4f969-b169-45f7-988c-daeeab762201`) — vérifier `idea_ticket_list` pour la liste à jour, le sprint pourrait contenir de nouveaux tickets créés pendant l'interruption/l'absence de l'utilisateur. +- Vérifier aussi `idea_ticket_list` pour tout ticket créé par l'utilisateur pendant l'absence (comme le ticket #31 et #18 créés en cours de route précédemment) — ne pas supposer que la liste est figée. + +## Environnement de build (rappel) +Voir mémoire "gametime-dev-environment" pour les commandes exactes (ANDROID_HOME, PATH, flutter analyze/test/build). Toujours vérifier soi-même (Main) via Bash après chaque implémentation d'agent, les sandbox des agents n'ont pas accès réseau. + +## Process à respecter pour chaque ticket restant +Même cycle que jusqu'ici : Git crée la branche → agent (DevBackend/DevFrontend selon le domaine) implémente → Main vérifie réellement (pub get si besoin, build_runner si schéma Drift touché, analyze, test, build apk) → relais des échecs réels bruts à l'agent si besoin → Git merge dans main + develop + nettoyage branche + tag incrémental (vX.Y.0-debug). Consulter UX/Architect en amont si un ticket touche à la conception produit ou au modèle de données de façon non triviale (comme cela a été fait pour #18 → #25/#26/#27/#28). + +Pour les tickets de type [Bug] : à la fin de l'implémentation et de la vérification technique (analyze/test/build OK), passer le statut à `QA` (pas `closed`) et laisser un message clair dans le carnet du ticket résumant ce qui a été corrigé, pour que l'utilisateur puisse tester sur l'APK final. \ No newline at end of file diff --git a/.ideai/tickets/26/carnet.md b/.ideai/tickets/26/carnet.md index 1fa7919..606a5fd 100644 --- a/.ideai/tickets/26/carnet.md +++ b/.ideai/tickets/26/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#26" -version: 2 +version: 4 updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784328255774 +updatedAt: 1784358479742 --- diff --git a/.ideai/tickets/26/issue.md b/.ideai/tickets/26/issue.md index 3cb0910..e510c47 100644 --- a/.ideai/tickets/26/issue.md +++ b/.ideai/tickets/26/issue.md @@ -2,7 +2,7 @@ id: "37a022d8-b152-48c9-a4d1-72528e2d63af" number: 26 title: "[DevFrontend] Configuration du Score chrono (exercice + programme)" -status: "open" +status: "closed" priority: "high" sprint: null links: [{"target":"#18","kind":"relatesTo"},{"target":"#25","kind":"dependsOn"}] @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"9933c93a-b8a1-4164-a3bb-7063fdad747d","role":"assigned"} createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784328244539 -updatedAt: 1784328255774 -version: 2 +updatedAt: 1784358479742 +version: 4 --- Dans la création/édition d'exercice (lib/presentation/exercise_library_screen.dart), si Score est activé, ajouter le sous-choix "Mode de saisie" : Saisie libre (actuel) vs Chrono intégré (label par défaut "Temps réalisé", pas d'unité libre). Badge résumé "Score chrono" pour ce mode. Dans l'écran de personnalisation d'exercice en programme (lib/presentation/program_screen.dart), pour un exercice en Score chrono : champ "Objectif de chrono" optionnel au lieu de "cible score". Avertissement si Temps ET Score chrono actifs simultanément. Cf. mémoire "gametime-ux-score-chrono" pour le détail complet. \ No newline at end of file diff --git a/.ideai/tickets/35/carnet.md b/.ideai/tickets/35/carnet.md index e8c1405..131d9dc 100644 --- a/.ideai/tickets/35/carnet.md +++ b/.ideai/tickets/35/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#35" -version: 3 +version: 5 updatedBy: {"kind":"user"} -updatedAt: 1784329588125 +updatedAt: 1784329838645 --- diff --git a/.ideai/tickets/35/issue.md b/.ideai/tickets/35/issue.md index 728b380..2826197 100644 --- a/.ideai/tickets/35/issue.md +++ b/.ideai/tickets/35/issue.md @@ -1,7 +1,7 @@ --- id: "3f1a583a-320b-43c3-9993-52d249c9c430" number: 35 -title: "Proposer de emttre plsuieurs images pour un exercice" +title: "Proposer de mettre plsuieurs images pour un exercice" status: "open" priority: "low" sprint: null @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"} createdBy: {"kind":"user"} updatedBy: {"kind":"user"} createdAt: 1784329532159 -updatedAt: 1784329588125 -version: 3 +updatedAt: 1784329838645 +version: 5 --- -J'iamerais que lors de la création d'un exercice, ils oit possible d'associer jusqu'a 5 images \ No newline at end of file +J'aimerais que lors de la création d'un exercice, ils oit possible d'associer jusqu'a 5 images \ No newline at end of file diff --git a/.ideai/tickets/37/carnet.md b/.ideai/tickets/37/carnet.md new file mode 100644 index 0000000..06881f6 --- /dev/null +++ b/.ideai/tickets/37/carnet.md @@ -0,0 +1,6 @@ +--- +issueRef: "#37" +version: 3 +updatedBy: {"kind":"user"} +updatedAt: 1784330063749 +--- diff --git a/.ideai/tickets/37/issue.md b/.ideai/tickets/37/issue.md new file mode 100644 index 0000000..f0ad244 --- /dev/null +++ b/.ideai/tickets/37/issue.md @@ -0,0 +1,16 @@ +--- +id: "d472ee06-f4f1-4796-9797-b5d8a65000f3" +number: 37 +title: "Pouvoir supprimer un programme, une séance ou un exercice" +status: "open" +priority: "high" +sprint: null +links: [] +agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] +createdBy: {"kind":"user"} +updatedBy: {"kind":"user"} +createdAt: 1784329898629 +updatedAt: 1784330063749 +version: 3 +--- +Il faut que l'utilisateur puisse supprimer un exercice qu'il a créé, un programme qu'il a créé ou une séance qu'il a créé. Si on supprime une exerccie, alors il est retiré des programmes dans lequel il se trouve. Si on supprime un programme alors il est supprimé des séances dans lequel il se trouve. Pour l'historique, il faut cependant que les datas soient persistantes, même si un exercice a été supprimé par exemple, il faut quand meme quie l'on puisse garder les données d'affichées. La séance ne pourra par contre pas être relancée, il faudra donc afficher un message qui l'explique. \ No newline at end of file diff --git a/.ideai/tickets/38/carnet.md b/.ideai/tickets/38/carnet.md new file mode 100644 index 0000000..516adb2 --- /dev/null +++ b/.ideai/tickets/38/carnet.md @@ -0,0 +1,6 @@ +--- +issueRef: "#38" +version: 3 +updatedBy: {"kind":"user"} +updatedAt: 1784330204091 +--- diff --git a/.ideai/tickets/38/issue.md b/.ideai/tickets/38/issue.md new file mode 100644 index 0000000..35df071 --- /dev/null +++ b/.ideai/tickets/38/issue.md @@ -0,0 +1,16 @@ +--- +id: "51e8769d-7b2b-4b4d-8de1-dc784881e575" +number: 38 +title: "Proposer de mettre une image pour l'icone de l'exercice" +status: "open" +priority: "medium" +sprint: null +links: [] +agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] +createdBy: {"kind":"user"} +updatedBy: {"kind":"user"} +createdAt: 1784330169746 +updatedAt: 1784330204091 +version: 3 +--- +J'aimerais qu'en plus des images que l'on peut ajouter, qu'il soit possible de mettre une image comme icone de l'exercice \ No newline at end of file diff --git a/.ideai/tickets/counter.json b/.ideai/tickets/counter.json index 9e65e4a..d6298b5 100644 --- a/.ideai/tickets/counter.json +++ b/.ideai/tickets/counter.json @@ -1,3 +1,3 @@ { - "nextNumber": 37 + "nextNumber": 39 } \ No newline at end of file diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index 4a25020..dc43883 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -291,13 +291,13 @@ "issueRef": "#26", "path": "26", "title": "[DevFrontend] Configuration du Score chrono (exercice + programme)", - "status": "open", + "status": "closed", "priority": "high", "sprint": null, "assignedAgentIds": [ "9933c93a-b8a1-4164-a3bb-7063fdad747d" ], - "updatedAt": 1784328255774 + "updatedAt": 1784358479742 }, { "issueRef": "#27", @@ -392,14 +392,14 @@ { "issueRef": "#35", "path": "35", - "title": "Proposer de emttre plsuieurs images pour un exercice", + "title": "Proposer de mettre plsuieurs images pour un exercice", "status": "open", "priority": "low", "sprint": null, "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784329588125 + "updatedAt": 1784329838645 }, { "issueRef": "#36", @@ -412,6 +412,30 @@ "57695b92-24d0-4876-837c-76116e70a6ae" ], "updatedAt": 1784329810425 + }, + { + "issueRef": "#37", + "path": "37", + "title": "Pouvoir supprimer un programme, une séance ou un exercice", + "status": "open", + "priority": "high", + "sprint": null, + "assignedAgentIds": [ + "57695b92-24d0-4876-837c-76116e70a6ae" + ], + "updatedAt": 1784330063749 + }, + { + "issueRef": "#38", + "path": "38", + "title": "Proposer de mettre une image pour l'icone de l'exercice", + "status": "open", + "priority": "medium", + "sprint": null, + "assignedAgentIds": [ + "57695b92-24d0-4876-837c-76116e70a6ae" + ], + "updatedAt": 1784330204091 } ] } \ No newline at end of file