Files
GameTime/.ideai/memory/gametime-architecture-set-editing.md
Blomios ddc71d2f7b 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>
2026-07-18 00:19:10 +02:00

2.3 KiB

name, description, metadata
name description metadata
gametime-architecture-set-editing memory note gametime-architecture-set-editing
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.