From e3b31f326984d5eb3573d8b57941ddb25da62b11 Mon Sep 17 00:00:00 2001 From: Pierre MARTIN Date: Tue, 3 Nov 2026 00:46:48 +0100 Subject: [PATCH] =?UTF-8?q?=C3=89tape=200d.2=20:=20guide=20de=20test,=20ai?= =?UTF-8?q?de=20document=C3=A9e,=20r=C3=A9sultat=20du=20plan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/guide-test-etape-0.md | 4 +- docs/plans/2026-11-02-plateau-pwa.md | 57 +++++++++++++++++++++++++++- docs/scenarios/README.md | 5 +++ 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/docs/guide-test-etape-0.md b/docs/guide-test-etape-0.md index 48caa7a..166c76c 100644 --- a/docs/guide-test-etape-0.md +++ b/docs/guide-test-etape-0.md @@ -5,8 +5,8 @@ Document temporaire de l'étape 0 : il sera supprimé avec `docs/etape-0.md`. Deux tests sur le téléphone : - **Étape 0d : jouer une partie** (section suivante), sur le site publié ; -- **Étape 0b : mesurer le moteur** (déjà fait le 2026-11-02), sur une page servie par - le PC. +- **Étape 0b : mesurer le moteur** (fait le 2026-11-02), sur une page + servie par le PC. ## Étape 0d : jouer une partie sur le téléphone diff --git a/docs/plans/2026-11-02-plateau-pwa.md b/docs/plans/2026-11-02-plateau-pwa.md index 3f16689..ded93a7 100644 --- a/docs/plans/2026-11-02-plateau-pwa.md +++ b/docs/plans/2026-11-02-plateau-pwa.md @@ -2,7 +2,7 @@ - **Date** : 2026-11-02 - **Étape** : 0d.2 -- **Statut** : en cours +- **Statut** : terminé (2026-11-03) - **Exécutant** : sous-agent general-purpose, dans un worktree isolé ## Objectif @@ -101,4 +101,57 @@ partie jouée dans les navigateurs sans interface, taille du site, difficultés, ## Résultat -À remplir à la clôture. +Fait en deux sessions de sous-agent (la première interrompue par la fin +d'un quota, la seconde l'a reprise), sur la branche `plateau-ui-travail`. + +- **Domaine** (`app/src/domain/game/game.ts`) : reprise d'une partie depuis + son journal, plateau vu de chaque camp, demi-coups possibles à la suite de + ceux déjà saisis, droit de doubler ; tout vient du moteur. +- **Interface** (`app/src/ui/`) : plateau en SVG (24 cases, barre, pions + sortis, dés, videau), saisie au toucher avec cases d'arrivée en + surbrillance, annulation, boutons du jet, du videau et de nouvelle partie, + coup de l'ordinateur affiché avec son temps, fin de partie (simple, gammon, + backgammon, points), reprise depuis `localStorage` (`app/src/storage/`), + textes dans `texts.ts`, thème clair et sombre en variables CSS + (`web/app.css`). +- **Assemblage** : `app/src/main.ts`, seul point d'entrée autorisé à tout + importer (règles dependency-cruiser) ; moteur dans le Web Worker. +- **Aide** (`app/src/ui/help.ts`) : scénario « Jouer une partie contre + l'ordinateur » et fiches du glossaire (terme et « En bref »), lus à + l'exécution dans les copies de `docs/` faites par `make site`. +- **PWA** : manifeste, icônes provisoires, service worker qui met en cache + les 70 fichiers du site (empreinte du contenu comme version), enregistré + une fois le moteur chargé. +- **Site** : application à la racine, pages de test sous `/moteur/` ; CSP + dans `deploy/Caddyfile`, vérifiée par `tests/test_site.sh` (en-tête) et + dans les navigateurs (aucune violation, script en ligne bloqué). Site de + 9,1 Mo (70 fichiers, dont 8,6 Mo pour le moteur), archive de 8,8 Mo. +- **Tests** : tests unitaires de l'interface et du domaine ; `make + test-browser` (Playwright, Apache-2.0, hors de `make test` : plusieurs + minutes et une image de 3 Go) joue une partie complète dans Chromium et + Firefox sans écran : videau proposé des deux côtés, reprise après + rechargement, aide, thème sombre, hors ligne, CSP. Les deux passent. +- **Guide de test** : section « Étape 0d » de `docs/guide-test-etape-0.md`. + +Deux défauts trouvés par la vérification dans les navigateurs et corrigés : + +1. **Pile du moteur WebAssembly** : `callMain` d'Emscripten laissait ses + arguments sur la pile (64 Ko) ; vers la 540e commande d'une partie, elle + débordait (moteur muet dans Firefox, onglet planté dans Chromium, + « memory access out of bounds » sous Node). La pile est remise en place + après chaque commande (`web/engine-wasm.mjs`) ; test de 3000 commandes. +2. **Installation du service worker dans Chromium** : elle échouait quand le + Worker téléchargeait les données du moteur au même moment ; le service + worker est désormais enregistré une fois le moteur chargé. + +Écarts et limites : + +- le hors ligne n'est vraiment simulé que dans Chromium (Firefox sous + Playwright refuse toute navigation hors ligne) : à confirmer en mode avion + sur le téléphone ; +- temps des coups de l'ordinateur en niveau standard, sur ce PC chargé : + 0,6 s au plus dans Chromium, jusqu'à 4,6 s dans Firefox ; le critère de + 2 s est à mesurer sur le Fairphone 4 ; +- thème sombre : les pions foncés sur les cases foncées restent lisibles + grâce à leur contour, mais le contraste est le point faible de la palette + provisoire. diff --git a/docs/scenarios/README.md b/docs/scenarios/README.md index 6a9aea1..61cfa29 100644 --- a/docs/scenarios/README.md +++ b/docs/scenarios/README.md @@ -5,6 +5,11 @@ joueur, écrit pour lui. Ces fichiers sont la seule source (ADR 0008) : l'application les met en forme comme pages d'aide, et ils sont exécutés comme tests d'intégration sur le domaine et le moteur réel. +`make site` copie ce dossier dans le site publié (`docs/scenarios/`) ; l'aide +de l'application (bouton « Aide ») lit ces copies à l'exécution +(`app/src/ui/help.ts`). Les fichiers affichés dans l'aide sont ceux de la +liste `FEATURES` de `help.ts`. + `make test` les exécute avec Cucumber : les étapes, définies dans `app/tests/steps/`, pilotent le domaine branché sur le vrai moteur WebAssembly, avec des dés imposés pour que chaque exécution soit identique. Une