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