From 409e99070c68b7fc7fe8fb857336444380fe3fa8 Mon Sep 17 00:00:00 2001 From: Pierre MARTIN Date: Tue, 3 Nov 2026 09:52:28 +0100 Subject: [PATCH] =?UTF-8?q?Plan=20des=20parties=20enregistr=C3=A9es=20(1b)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/plans/2026-11-03-parties-enregistrees.md | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/plans/2026-11-03-parties-enregistrees.md diff --git a/docs/plans/2026-11-03-parties-enregistrees.md b/docs/plans/2026-11-03-parties-enregistrees.md new file mode 100644 index 0000000..8afba18 --- /dev/null +++ b/docs/plans/2026-11-03-parties-enregistrees.md @@ -0,0 +1,57 @@ +# Parties enregistrées, branches et export SGF (1b) + +- **Date** : 2026-11-03 +- **Étape** : 1b (`docs/etape-1.md`) +- **Statut** : prévu (lancé après la fusion de 0e.1) +- **Exécutant** : sous-agent general-purpose, dans un worktree + +## Objectif + +Garder toutes les parties du joueur sur le téléphone, avec leurs branches, et +les exporter au format SGF de GNU Backgammon. + +## Consignes + +ADR 0007 (domaine pur, stockage derrière une interface), ADR 0008 (scénarios +et glossaire). Aucune nouvelle dépendance : l'API IndexedDB du navigateur +directement. + +1. **Stockage IndexedDB** derrière l'interface de `app/src/storage/` : une + liste de parties (identifiant, date de début et de dernière action, + adversaire et niveau, score, état en cours ou finie, résultat) et le + journal d'événements de chacune. Migration transparente de la partie + en cours enregistrée aujourd'hui dans `localStorage`. Si IndexedDB est + indisponible (navigation privée), repli sur le comportement actuel. +2. **Branches** : le journal est déjà un arbre (événements avec parent, + `goBackTo`). Exposer dans le domaine la liste des branches d'une partie + (feuilles de l'arbre, avec le coup d'origine) et le passage de l'une à + l'autre. « Rejouer d'ici » depuis un coup passé crée une branche ; la + branche d'origine reste intacte et rechargeable. Pas d'écran d'analyse ici + (1e) : un accès minimal suffit pour le test (menu « Mes parties » : + reprendre une partie, voir ses branches). +3. **Nouvelle partie annulable** : l'arbitrage UX (plan + `2026-11-03-revision-ux.md`, point 3) prévoit « Reprendre l'ancienne » + pendant 10 s. Fournir l'API de stockage qui le permet (reprendre une partie + par son identifiant) ; l'interface viendra avec la révision UX. +4. **Export SGF** : une partie (et ses branches en variantes) au format SGF + de GNU Backgammon, téléchargeable depuis « Mes parties ». Vérification par + le gnubg de bureau de référence (Docker existant) : le fichier exporté se + charge sans erreur et ses positions successives sont les mêmes que celles + du journal, sur des parties générées par les tests. +5. Scénarios Gherkin : reprendre une partie parmi plusieurs, rejouer d'ici + sans perdre l'original, exporter une partie. Fiches du glossaire pour les + nouveaux termes (branche, SGF…). + +`make lint`, `make test` et `make test-browser` passent (ajouter au test +navigateur : deux parties enregistrées, reprise de la première après +rechargement). Commits fréquents ; pas de push ni de MR. + +## Critères de réussite + +- Après rechargement, la liste des parties et chaque branche sont intactes. +- Un SGF exporté se charge dans gnubg de bureau avec les mêmes positions. +- Les trois commandes de test passent. + +## Résultat + +À remplir à la clôture.