Adresses des écrans : plan clos

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-09 14:41:06 +01:00
co-authored by Claude Opus 5.5
parent f74b03fa0d
commit d1db2b33c8
2 changed files with 0 additions and 84 deletions
@@ -1,83 +0,0 @@
# Une adresse pour chaque écran, et pour chaque position (0e.4)
- **Date** : 2026-11-03
- **Étape** : 0e.4 (feuille de route)
- **Statut** : fait (branche adresses-ecrans)
- **Exécutant** : sous-agent general-purpose, dans un worktree
## Objectif
Appliquer l'ADR 0013 et son amendement du 2026-11-03 : chaque écran (aide,
glossaire, menu, mes parties…) a son adresse et s'ouvre par un vrai lien ;
chaque position du plateau a un lien direct.
## Consignes
ADR 0007, 0008 et 0013. Aucune nouvelle dépendance.
0. **Routeur** : un petit module pur (sans dépendance) qui traduit le
fragment en écran et inversement, testé unitairement ; l'app dessine
l'écran demandé par l'adresse, sur `hashchange`. Tous les écrans existants
(aide et ses questions, glossaire et ses termes, à propos, menu, mes
parties de 1b) passent par lui, avec de vrais liens `<a href>` ; le bouton
retour du navigateur ramène à l'écran précédent. Les actions de jeu restent
des boutons.
1. Lecture de `#/position/<Position ID>/<Match ID>` ; validation par le
moteur ; message clair si illisible.
2. Vue de la position, non jouable, avec « Jouer à partir d'ici » (nouvelle
partie depuis la position, la partie en cours restant reprenable) et
« Retour à ma partie ».
3. Domaine : démarrer une partie depuis une position et un Match ID donnés
(événement GameStarted étendu de façon rétrocompatible, ou équivalent
justifié), sans règle réimplémentée.
4. « Copier le lien de la position » depuis le menu de la partie et depuis la
vue du coup de l'ordinateur ; le lien copié rouvre exactement la même
position (test aller-retour).
5. Scénarios Gherkin (« Ouvrir un lien vers une position », « Partager la
position »), fiches du glossaire (Position ID, Match ID si absentes).
6. `make lint`, `make test`, `make test-browser` : chaque adresse du tableau
de l'ADR ouverte directement dans un nouvel onglet montre le bon écran ;
« retour » du navigateur ; liens reconnus comme liens (rôle `link`) ;
position : ouvrir un lien, jouer à partir d'ici, revenir, lien invalide.
## Critères de réussite
Un lien copié depuis l'app, ouvert dans un nouvel onglet, montre la même
position ; les trois commandes passent.
## Résultat
Fait, sur la branche `adresses-ecrans` (2026-11-03 au 2026-11-09).
0. **Routeur** : `app/src/ui/router.ts` (pur, testé par
`app/tests/router.test.ts`) traduit le fragment en écran et inversement ;
`app/src/ui/navigation.ts` écoute `hashchange` et garde dans
`history.state` la suite des adresses de l'onglet, pour que « Retour »,
Échap et la croix d'une feuille reviennent dans l'historique au lieu d'y
empiler la partie. Aide, ses questions (`#/aide/<identifiant>`, tiré du
titre du scénario), glossaire et ses termes, à propos, menu, mes parties
et chaque partie sont des liens `<a href>` ; les actions de jeu restent
des boutons. Les liens du menu remplacent son adresse : le retour du
téléphone ferme la feuille sans la rouvrir. Accueil et tutoriel : routes
seules, la partie s'affiche avec « Cet écran n'existe pas encore ».
1. `#/position/<Position ID>/<Match ID>` : lu par le routeur (adresse
encodée ou collée telle quelle), validé par le moteur (`readPosition`) ;
lien illisible : « Lien illisible » et « Retour à ma partie ».
2. Vue de la position, non jouable, avec « Jouer à partir d'ici » et
« Retour à ma partie » (un lien).
3. Domaine : `setupOf` donne la partie à jouer depuis une position ; la
partie en cours reste reprenable dans « Mes parties ».
4. « Copier le lien de la position » : menu de la partie, vue du coup de
l'ordinateur, vue d'une position.
5. Scénarios « Partager la position », « Ouvrir un lien vers une
position », « Ouvrir un lien abîmé » ; fiche « Lien de position ».
6. `make test-browser` (étape « adresses ») : les 16 adresses du tableau
ouvertes dans un nouvel onglet ; retour du navigateur (question, onglet,
menu, mes parties) ; Échap ; rôle `link` ; aller-retour d'un lien de
position (le lien recopié depuis la vue est identique), retour à la
partie, partie jouée depuis la position. Captures 412×915 et 915×412
dans `build/browser-shots/adresses/`.
En chemin : une vibration de fin de partie remplacée par celle d'une prise
pendant l'animation du dernier coup (corrigé) ; le test du coup enregistré
laisse 10 s à IndexedDB (disque dur lent sous Firefox).