diff --git a/docs/feuille-de-route.md b/docs/feuille-de-route.md index d6838c0..182d163 100644 --- a/docs/feuille-de-route.md +++ b/docs/feuille-de-route.md @@ -23,7 +23,6 @@ Demandes de Pierre du 2026-11-03, traitées avant d'ouvrir l'étape 1. | Sous-étape | Contenu | État | Plan | | --- | --- | --- | --- | -| 0e.4 | Une adresse par écran (aide, glossaire, menu, mes parties…) et par position, par de vrais liens (ADR 0013 amendé) | ⏳ | `plans/2026-11-03-position-dans-l-adresse.md` | | 0e.5 | Page d'accueil, mise à jour de l'app en un toucher, installation en un toucher (« Ajouter à l'écran d'accueil », proposée par l'app), tutoriel des règles très didactique avec plateaux illustrés, aide réécrite sur un ton plus humain ; textes à valider par Pierre | ⏳ | `plans/2026-11-03-accueil-tutoriel-aide.md` | ## Étapes suivantes diff --git a/docs/plans/2026-11-03-position-dans-l-adresse.md b/docs/plans/2026-11-03-position-dans-l-adresse.md deleted file mode 100644 index 0fbfe0c..0000000 --- a/docs/plans/2026-11-03-position-dans-l-adresse.md +++ /dev/null @@ -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 `` ; le bouton - retour du navigateur ramène à l'écran précédent. Les actions de jeu restent - des boutons. -1. Lecture de `#/position//` ; 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/`, tiré du - titre du scénario), glossaire et ses termes, à propos, menu, mes parties - et chaque partie sont des liens `` ; 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//` : 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).