|
|
|
@@ -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.
|
|
|
|
|