docs(ideai): met à jour la mémoire et les tickets #20-#23
Ajoute les notes mémoire sur l'architecture d'édition des séries et la simplification navigation/programme, et reflète le ticket #21 (terminé) ainsi que le cadrage des tickets #20, #22, #23. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
25
.ideai/memory/gametime-architecture-set-editing.md
Normal file
25
.ideai/memory/gametime-architecture-set-editing.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
name: gametime-architecture-set-editing
|
||||
description: memory note gametime-architecture-set-editing
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
# GameTime — Cadrage Architect : édition ponctuelle de séries (2026-07-18)
|
||||
|
||||
Réponse d'Architect au besoin UX de navigation libre dans une séance active (mémoire "gametime-ux-execution-nav-and-program-simplification").
|
||||
|
||||
## Ce qui existe déjà et est réutilisable
|
||||
- `ActiveSetResults` (Drift) a déjà `programIndex`, `exerciseIndex`, `setIndex` avec contrainte `UNIQUE (active_workout_session_id, program_index, exercise_index, set_index)` — l'identification positionnelle d'une série est stable, un upsert par position est possible sans ambiguïté.
|
||||
- `recordCurrentSetResult` n'avance pas le curseur de progression lui-même (c'est `updateProgress`, séparé) mais reste sémantiquement dédié à la série courante (recrée un résultat avec nouvel ID/métadonnées) — pas réutilisable tel quel pour l'édition ponctuelle.
|
||||
|
||||
## Ce qui doit être ajouté
|
||||
- Champ `status` sur `ActiveSetResult` (enum `completed | skipped`), avec invariant : `skipped` implique aucune valeur `actual*` renseignée. Migration Drift nécessaire (schemaVersion+1).
|
||||
- Nouveau use case `upsertSetResultAtPosition(...)` : vérifie que la position appartient au snapshot de la séance, conserve l'id/createdAt si une ligne existe déjà à cette position, écrit `completed` ou `skipped`, et **ne touche jamais** `currentProgramIndex/currentExerciseIndex/currentSetIndex`.
|
||||
- Nouveau use case `listSetResults(sessionId)` pour construire l'état du plan de séance (à faire / en cours / terminée / passée par position).
|
||||
|
||||
## Invariants à respecter côté DevBackend
|
||||
- L'édition ponctuelle ne crée, ne relance et ne termine jamais de repos (`ActiveRestState` reste un événement indépendant attaché à la série précédente).
|
||||
- Le temps total de séance reste calculé depuis les horodatages de session, jamais recalculé depuis la liste des résultats.
|
||||
- Pas d'édition de série future en v1 (seulement passé/courant).
|
||||
- Si la position éditée correspond à la position courante, rediriger vers le flux d'exécution normal plutôt que permettre une double édition simultanée.
|
||||
- Propager le statut `skipped` jusqu'à l'historique (WorkoutHistorySetResult) pour que le snapshot final reste lisible et cohérent avec ce qui a été vécu pendant la séance.
|
||||
Reference in New Issue
Block a user