Commit Graph
146 Commits
Author SHA1 Message Date
Pierre MARTIN 15caf4da6e Merge remote-tracking branch 'origin/main' into charte-ui 2026-11-03 04:51:18 +01:00
Pierre MARTINandClaude Opus 5.5 9b79b54880 Dés et videau : cibles de 44 px sur le plateau de 344 px
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:12:56 +01:00
Pierre MARTINandClaude Opus 5.5 984d6cf060 Toucher les dés pour les lancer, le videau pour doubler
Quand vous pouvez lancer, vos dés en attente apparaissent dans la moitié
gauche du plateau ; quand vous pouvez doubler, le videau est souligné.
Les toucher fait comme les boutons, qui restent. Cibles d'au moins
44 px, avec rôle et nom accessibles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:11:08 +01:00
Pierre MARTINandClaude Opus 5.5 39c85172b4 Aucun coup possible : le joueur continue lui-même
Le tour du joueur ne passe plus tout seul quand son jet ne permet aucun
coup : le domaine le dit (cannotMove) et le joueur laisse passer son tour
(skipTurn, bouton « Continuer »). Les dés d'un jet sans coup, du joueur
comme de l'ordinateur, restent affichés barrés avec un message jusqu'à
l'action suivante. Scénario « Aucun coup possible avec votre jet ».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:07:27 +01:00
pierre 27ca5bce1e Fusion de la MR !17 : ADR 0012, mode immersif 2026-11-03 01:07:20 +00:00
Pierre MARTINandClaude Opus 5.5 d61efbc9ae Plan : résultat de l'application de la charte
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:07:18 +01:00
Pierre MARTINandClaude Opus 5.5 62dfc1922a Chiffres alignés sur le plateau et dans le compte de points
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:07:18 +01:00
Pierre MARTINandClaude Opus 5.5 7ecb2da39f ADR 0012 : mode immersif en paysage, sur demande
Bouton « Plein écran » sur l'écran de jeu : plein écran et verrouillage
de l'orientation en paysage, avec repli par rotation CSS si le
verrouillage est refusé. Choix de Pierre ; feuille de route mise à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:07:13 +01:00
Pierre MARTINandClaude Opus 5.5 1bb9a95551 Plan coup adverse : résultat
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:00:58 +01:00
Pierre MARTINandClaude Opus 5.5 797c1724ab Lint : la licence de la police reste identique à l'original
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:59:31 +01:00
Pierre MARTINandClaude Opus 5.5 27ae0285a0 Charte appliquée à l'interface : couleurs, composants, mises en page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:58:16 +01:00
Pierre MARTINandClaude Opus 5.5 5d3dedcc90 Icônes et logo de la charte, copiés depuis docs/identite/logo/
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:58:16 +01:00
Pierre MARTINandClaude Opus 5.5 f1c52941e9 Police Alegreya Sans embarquée (woff2, sous-ensemble latin)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:58:16 +01:00
pierre b08c4ffd54 Fusion de la MR !16 : ADR 0011 2026-11-03 00:54:14 +00:00
Pierre MARTINandClaude Opus 5.5 a490e72409 ADR 0011 : leçons numérotées, conseil du maître, bilan de fin de partie
Choix de Pierre sur les maquettes : parcours de leçons numérotées,
conseil du maître donné après le coup (jamais avant), bilan de fin de
partie avec le coup à revoir. Feuille de route mise à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:53:48 +01:00
Pierre MARTINandClaude Opus 5.5 7a9b376417 Coup de l'ordinateur : animation, traces et bouton Revoir
Le domaine donne le dernier coup demi-coup par demi-coup (plateaux
intermédiaires du moteur, pions frappés lus sur la barre) ; l'interface
fait glisser les pions puis laisse flèches, pions entourés et fantômes
jusqu'à l'action suivante. Scénario « Voir le coup de l'ordinateur »,
tests unitaires et test dans le navigateur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:53:26 +01:00
Pierre MARTINandClaude Opus 5.5 e0f811d2b8 Plan : appliquer la charte graphique à l'application
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:47:42 +01:00
Pierre MARTINandClaude Opus 5.5 9c241de5c9 Plan : montrer le coup de l'ordinateur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:37:50 +01:00
pierre 7e45fde4e4 Fusion de la MR !15 : mode paysage 2026-11-03 00:22:57 +00:00
Pierre MARTINandClaude Opus 5.5 359cdcbb38 Mode paysage : plateau ajusté à la hauteur de l'écran, boutons à droite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:22:54 +01:00
pierre 8e28e26c07 Fusion de la MR !14 : charte graphique 2026-11-03 00:22:30 +00:00
Pierre MARTINandClaude Opus 5.5 f5d8d41a00 Charte graphique : copie du design system et journal
Couleurs des deux thèmes (mêmes noms que web/app.css), styles des
composants, guide de marque et dessin de référence du plateau dans
docs/identite/charte/, avec les liens vers le design system et les
maquettes d'écrans. Coquille corrigée dans l'ADR 0010.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:22:21 +01:00
pierre 65551098db Fusion de la MR !12 : identité visuelle 2026-11-03 00:05:07 +00:00
Pierre MARTINandClaude Opus 5.5 ca1e2a5077 ADR 0010 : accord de Pierre sur Alegreya Sans et fontTools
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:05:05 +01:00
pierre f8b89a8c44 Fusion de la MR !13 : étape 0d.2, plateau jouable en PWA 2026-11-03 00:02:38 +00:00
Pierre MARTINandClaude Opus 5.5 6bc1c27bee Étape 0d.2 : plan clos, feuille de route et journal à jour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:02:05 +01:00
Pierre MARTINandClaude Opus 5.5 1c722cca9f Identité visuelle : logo, icônes et ADR 0010
Symbole P3d (deux pions sur une flèche brique), logotype L3 (« mm » en
flèches alternées), accent brique, icône sur fond ivoire, choisis par
Pierre. Fichiers SVG et PNG dans docs/identite/logo/, générateur et notice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:01:06 +01:00
Pierre MARTINandClaude Opus 5.5 e3b31f3269 Étape 0d.2 : guide de test, aide documentée, résultat du plan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 00:46:48 +01:00
Pierre MARTINandClaude Opus 5.5 2c43a0a69f Test dans les navigateurs : CSP vérifiée, diagnostic des blocages
make test-browser vérifie maintenant la politique de sécurité dans
Chromium et Firefox : aucune violation pendant toute la partie, et un
script en ligne ajouté exprès est bloqué. Un blocage est diagnostiqué
(étape, capture, dernière commande du moteur, journal de la partie) au
lieu d'attendre sans fin. Firefox sous Playwright refuse toute navigation
hors ligne : on y vérifie le cache et le contrôle par le service worker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 00:46:48 +01:00
Pierre MARTINandClaude Opus 5.5 9cc0e0ccd5 Service worker enregistré une fois le moteur chargé
Dans Chromium, l'installation du service worker échouait (« Cache.add()
encountered a network error » sur wasm/engine.data) quand le Worker du
moteur téléchargeait les mêmes 8,7 Mo au même moment : l'application
n'était alors pas disponible hors ligne. Repéré par make test-browser,
reproduit dans quatre essais sur cinq sans ce changement, jamais avec. Évite aussi
de télécharger deux fois ces données à la première visite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 00:41:32 +01:00
Pierre MARTINandClaude Opus 5.5 ae1ea54782 Moteur WebAssembly : remettre la pile en place après chaque commande
callMain (Emscripten) copie les arguments sur la pile du WebAssembly
(64 Ko) sans les retirer. Pendant une partie dans le navigateur, le même
moteur reçoit des centaines de commandes : vers la 540e, la pile débordait
et corrompait la mémoire du moteur (moteur muet dans Firefox, onglet planté
dans Chromium, « memory access out of bounds » sous Node). Repéré par
make test-browser. stackSave et stackRestore sont exportés et encadrent
chaque commande ; un test en envoie 3000 à la suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 00:27:24 +01:00
Pierre MARTINandClaude Opus 5.5 a8636b3f83 Plateau jouable en PWA : interface, Web Worker, stockage, service worker
L'application est à la racine du site : plateau en SVG, saisie au toucher
(pion puis case d'arrivée, proposées à partir du moteur), boutons du jet,
du videau et de nouvelle partie, coup de l'ordinateur affiché avec son
temps, fin de partie, reprise depuis localStorage, aide lue dans les
copies de docs/. Le moteur tourne dans le Web Worker existant ; main.ts
est le seul assembleur (nouvelles règles dependency-cruiser). Le service
worker met tout le site en cache, avec une empreinte du contenu comme
version. Les pages de test du moteur passent sous /moteur/. Politique de
sécurité du contenu dans le Caddyfile ; make test-browser joue une partie
dans Chromium et Firefox sans écran (Playwright, hors de make test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:47:12 +01:00
Pierre MARTINandClaude Opus 5.5 613ff38254 Domaine : reprise d'une partie, plateau affiché, demi-coups possibles, droit de doubler
Ce dont l'interface a besoin, sans règle réimplémentée : le plateau vu de
chaque camp, les demi-coups que le moteur accepte à la suite de ceux déjà
saisis, le droit de doubler selon le moteur, et la reprise d'une partie
depuis son journal enregistré. Les types du navigateur sont ajoutés à
l'application ; le domaine reste vérifié sans eux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:23:06 +01:00
Pierre MARTINandClaude Opus 5.5 fea94324af Plan de l'étape 0d.2 : plateau jouable en PWA
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:15:37 +01:00
pierre b4421dcea5 Fusion de la MR !11 : étape 0d.1, domaine « partie » 2026-11-02 20:14:19 +00:00
Pierre MARTINandClaude Opus 5.5 2c1bb93b89 Étape 0d.1 : domaine « partie » en TypeScript, scénario exécuté, garde-fous
Fusion du travail du sous-agent (branche plateau-domaine-travail) ; plan
supprimé à la clôture, son résultat est repris dans la merge request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:13:44 +01:00
Pierre MARTIN 91ea0acf93 Merge remote-tracking branch 'origin/main' into plateau 2026-11-02 21:09:33 +01:00
pierre f944debedd Fusion de la MR !10 : déploiement CapRover 2026-11-02 20:05:11 +00:00
Pierre MARTINandClaude Opus 5.5 c158d57111 Déploiement : domaine ustagammon.sans.pub
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:04:37 +01:00
Pierre MARTINandClaude Opus 5.5 a556c67fef Plan de l'étape 0d.1 : résultat
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:45:00 +01:00
Pierre MARTINandClaude Opus 5.5 85cc034611 Glossaire relié au code dans les deux sens
Fiches Demi-coup (HalfMove) et Plateau (Board) ajoutées ; champ code des
fiches Coup, Jet, Pli, Moteur, Identifiant de position, Videau, Événement de
partie et Partie. tests/test_glossary.sh vérifie que chaque référence
« Glossaire : » du code mène à une fiche qui nomme le type, et que chaque
champ code désigne un type qui renvoie à sa fiche.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:42:08 +01:00
Pierre MARTINandClaude Opus 5.5 1f9981dc63 Scénario « Jouer une partie » exécuté ; garde-fous d'architecture
Les étapes de docs/scenarios/jouer-une-partie.feature pilotent le domaine
sur le vrai moteur WebAssembly, avec des dés imposés (Cucumber, sous Node).
Deux retouches du scénario : 8/4 avec 3-1 est un coup permis (8/5/4),
remplacé par 13/12 (case tenue par l'ordinateur) ; « c'est ensuite au tour
de l'ordinateur » distingue le constat de la situation de départ du même nom.

dependency-cruiser vérifie que le domaine n'importe que le domaine, que
l'interface n'appelle pas le moteur et qu'il n'y a pas de cycle ;
tests/test_web.sh prouve aussi que des violations volontaires sont
détectées.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:42:08 +01:00
Pierre MARTINandClaude Opus 5.5 602d0eafed Domaine « partie » en journal d'événements, branché au moteur WebAssembly
app/src/domain/game/ : une partie libre contre l'ordinateur, enregistrée
comme un arbre d'événements immuables et versionnés (GameStarted,
DiceRolled, MovePlayed, CubeOffered, CubeTaken, CubeDropped, GameEnded) ;
l'état se recalcule en les rejouant, annuler repart du parent, une action
après un retour ouvre une branche. Dés injectés. Le joueur saisit son coup
demi-coup par demi-coup ; l'ordinateur joue et décide du videau à 2 plis.
Toutes les règles viennent du moteur, derrière l'interface Engine que le
domaine définit.

app/src/engine/wasm-engine.ts : l'adaptateur Engine sur les commandes
d'engine-cli du moteur WebAssembly.

Tests : unitaires avec un faux moteur, et deux parties complètes jusqu'à
GameEnded sur le vrai moteur, avec des dés imposés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:42:08 +01:00
Pierre MARTINandClaude Opus 5.5 54883f4ca3 Outils de l'application web : image ustagammon/web, make web, lint
Image docker/web/ (Node 22.11) avec TypeScript 6.0.3, @types/node,
Biome 2.5.15, @cucumber/cucumber 12.9.0 et dependency-cruiser 18.6.0,
versions figées (ADR 0009). make web compile app/ dans build/web/ ;
make lint passe Biome et tsc --noEmit, et vérifie à part que le domaine
compile sans les types de Node ni du navigateur. make setup construit
l'image ; CREDITS.md à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:41:57 +01:00
Pierre MARTINandClaude Opus 5.5 db76200c69 Moteur : « pion » plutôt que « dame », comme le glossaire
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:41:57 +01:00
Pierre MARTINandClaude Opus 5.5 84998608d5 Déploiement CapRover : site statique construit sur le PC, servi par Caddy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:37:00 +01:00
Pierre MARTINandClaude Opus 5.5 6af82f73b0 Moteur : plateau, fin de partie, Match ID et saisie demi-coup par demi-coup
Ce dont le domaine d'une partie a besoin, sans réimplémenter de règle :
décodage d'un Position ID en plateau et position vue de l'adversaire,
résultat d'une partie finie (gammon, règle Jacoby), codage d'un Match ID,
vérification de demi-coups saisis un par un (la légalité vient de
GenerateMoves de gnubg), demi-coups de chaque coup légal, droit de doubler
et recommandations de double et de prise. Nouvelles commandes d'engine-cli
position, halfmoves et matchid, avec leurs tests natifs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:23:04 +01:00
Pierre MARTINandClaude Opus 5.5 ea304795b5 ADR 0009 accepté : socle PWA, mesures du Fairphone 4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:21:29 +01:00
Pierre MARTINandClaude Opus 5.5 03b26ccba7 ADR 0009 proposé (PWA en TypeScript) ; plan de l'étape 0d.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:04:49 +01:00
pierre 14d1186e84 Fusion de la MR !9 : étape 0b, moteur en WebAssembly 2026-11-02 18:24:15 +00:00