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>
2.3 KiB
2.3 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| gametime-architecture-set-editing | memory note gametime-architecture-set-editing |
|
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,setIndexavec contrainteUNIQUE (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é.recordCurrentSetResultn'avance pas le curseur de progression lui-même (c'estupdateProgress, 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
statussurActiveSetResult(enumcompleted | skipped), avec invariant :skippedimplique aucune valeuractual*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, écritcompletedouskipped, et ne touche jamaiscurrentProgramIndex/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 (
ActiveRestStatereste 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
skippedjusqu'à l'historique (WorkoutHistorySetResult) pour que le snapshot final reste lisible et cohérent avec ce qui a été vécu pendant la séance.