ADR 0013 amendé : une adresse pour chaque écran, de vrais liens #34

Manually merged
pierre merged 1 commits from adresses-des-ecrans into main 2026-11-03 18:56:06 +00:00
Owner

Pourquoi

Pierre a écrit le 2026-11-03 : « Il faudra vraiment que chaque page (l'aide, etc.) ait une URL. Utilise des liens accessibles, pas des états. »

Aujourd'hui, l'aide, le glossaire et le menu s'ouvrent par des boutons qui changent un état caché. On ne peut pas partager ces écrans, ni les ouvrir dans un onglet, ni y revenir avec le bouton retour du téléphone. Un lecteur d'écran ne les annonce pas comme des liens.

L'ADR 0013, accepté le matin même, ne donnait une adresse qu'aux positions du plateau. Il n'est pas encore mis en œuvre et aucun lien n'a circulé, ce qui permet d'élargir son format sans casser de lien existant.

Quoi

ADR 0013, amendement daté :

  • un schéma d'adresses unique pour tous les écrans, placé dans le fragment de l'adresse :
    • #/ : la partie ;
    • #/accueil, #/aide/<question>, #/glossaire/<terme>, #/a-propos, #/tutoriel/<n>, #/parties/<id>, #/menu : les écrans ;
    • #/position/<Position ID>/<Match ID> : une position du plateau ;
  • la navigation par de vrais liens <a href>, alors que les actions de jeu restent des boutons ;
  • les écrans à venir (analyse, leçons, progression) suivent le même schéma.

Plan 0e.4 : il commence désormais par un petit routeur pur, testé unitairement. Tous les écrans existants passent par lui. Le test navigateur ouvre chaque adresse directement et vérifie le bouton retour.

Plan 0e.5 : l'accueil, le tutoriel et l'aide utiliseront ces adresses.

Feuille de route : la ligne 0e.4 est reformulée.

Comment

Le fragment est gardé pour les raisons de l'ADR :

  • il ne part pas au serveur ;
  • le service worker sert la même page en cache ;
  • il n'y a aucune configuration Caddy à changer.

L'adresse devient la source de vérité de la navigation : l'app écoute hashchange et dessine l'écran demandé.

Choix et compromis

  • Écartés :
    • des adresses sans #, avec l'API History : il faudrait une règle de repli côté serveur et dans le service worker ;
    • un état interne seul : c'est ce que Pierre refuse.
  • Le format des liens de position change (#/position/... au lieu de #position=...&match=...), avant toute utilisation. L'ADR l'explique dans son amendement.
  • Les confirmations et bandeaux éphémères n'ont pas d'adresse : ce ne sont pas des écrans.

Risques et déploiement

Documentation seule.

Comment vérifier

make lint && make test

Hors périmètre

L'implémentation (0e.4), qui viendra après la fusion de la révision UX et de 1b.

Generated with Claude Code https://claude.com/claude-code

## Pourquoi Pierre a écrit le 2026-11-03 : « Il faudra vraiment que chaque page (l'aide, etc.) ait une URL. Utilise des liens accessibles, pas des états. » Aujourd'hui, l'aide, le glossaire et le menu s'ouvrent par des boutons qui changent un état caché. On ne peut pas partager ces écrans, ni les ouvrir dans un onglet, ni y revenir avec le bouton retour du téléphone. Un lecteur d'écran ne les annonce pas comme des liens. L'ADR 0013, accepté le matin même, ne donnait une adresse qu'aux positions du plateau. Il n'est pas encore mis en œuvre et aucun lien n'a circulé, ce qui permet d'élargir son format sans casser de lien existant. ## Quoi **ADR 0013, amendement daté :** - un schéma d'adresses unique pour tous les écrans, placé dans le fragment de l'adresse : - `#/` : la partie ; - `#/accueil`, `#/aide/<question>`, `#/glossaire/<terme>`, `#/a-propos`, `#/tutoriel/<n>`, `#/parties/<id>`, `#/menu` : les écrans ; - `#/position/<Position ID>/<Match ID>` : une position du plateau ; - la navigation par de vrais liens `<a href>`, alors que les actions de jeu restent des boutons ; - les écrans à venir (analyse, leçons, progression) suivent le même schéma. **Plan 0e.4** : il commence désormais par un petit routeur pur, testé unitairement. Tous les écrans existants passent par lui. Le test navigateur ouvre chaque adresse directement et vérifie le bouton retour. **Plan 0e.5** : l'accueil, le tutoriel et l'aide utiliseront ces adresses. **Feuille de route** : la ligne 0e.4 est reformulée. ## Comment Le fragment est gardé pour les raisons de l'ADR : - il ne part pas au serveur ; - le service worker sert la même page en cache ; - il n'y a aucune configuration Caddy à changer. L'adresse devient la source de vérité de la navigation : l'app écoute `hashchange` et dessine l'écran demandé. ## Choix et compromis - **Écartés :** - des adresses sans `#`, avec l'API History : il faudrait une règle de repli côté serveur et dans le service worker ; - un état interne seul : c'est ce que Pierre refuse. - **Le format des liens de position change** (`#/position/...` au lieu de `#position=...&match=...`), avant toute utilisation. L'ADR l'explique dans son amendement. - **Les confirmations et bandeaux éphémères n'ont pas d'adresse** : ce ne sont pas des écrans. ## Risques et déploiement Documentation seule. ## Comment vérifier ``` make lint && make test ``` ## Hors périmètre L'implémentation (0e.4), qui viendra après la fusion de la révision UX et de 1b. Generated with Claude Code https://claude.com/claude-code
pierre added 1 commit 2026-11-03 18:55:58 +00:00
pierre manually merged commit d268111609 into main 2026-11-03 18:56:06 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: pierre/Ustagammon#34