Corrections : saisie de la sortie, largeur du tutoriel, notation du coup de l'ordinateur #53

Manually merged
pierre merged 8 commits from corrections-sortie-tutoriel into main 2026-11-11 20:53:25 +00:00
Owner

Pourquoi

Trois défauts sont apparus pendant les essais de l'étape 1.

  1. Saisie de la sortie. Avec un 6-1 pendant la sortie des pions, sortir le pion de la 6 avant celui de la 1 était refusé, alors que l'ordre inverse passait. Le cas : #/position/BQAACAIAAAAAAA, puis « Jouer à partir d'ici ».
    • Un test systématique a porté sur les fins de partie d'un à quatre pions, avec les 21 jets.
    • Il a trouvé 294 ordres de saisie permis par le moteur mais refusés par l'application, tous sur des jets non doubles.
    • Exemple : avec un 5-1 et des pions sur 4 et 2, 4/off puis 2/1 était refusé.
  2. Largeur du tutoriel. Pierre voyait l'étape 6 du tutoriel plus étroite que les autres, en portrait sur le Fairphone 4. Mesuré en 412x915 : le plateau faisait 300 px au lieu de 396 sur les écrans « à vous » (départ et réussi) de cette étape.
  3. Notation du coup de l'ordinateur. La ligne « L'ordinateur a joué … » écrivait le coup à partir des demi-coups, alors que le bilan, l'analyse et la feuille du maître utilisent la notation du moteur.

Quoi

  • Saisie : un coup déjà complet peut encore se prolonger si le moteur l'accepte. Après 6/off, « Jouer ce coup » apparaît, et 1/off reste possible. Le tutoriel suit la même règle.
  • Largeur : toutes les pages prennent la largeur de l'écran, dans la limite de leur largeur maximale. Le tutoriel a la même largeur à chaque étape.
  • Notation : sur l'écran de jeu, le coup de l'ordinateur s'écrit dans la notation du moteur.

Comment

Le travail a été délégué à un sous-agent, interrompu une fois par la limite d'usage.

1. Saisie. Le moteur n'était pas en cause.

  • 6/off joué seul mène à la même position que le coup légal « 6/off » de gnubg, joué 6/5 puis 5/off. Le moteur déclare donc ce coup complet, mais il accepte aussi 1/off ensuite.
  • Le domaine (Game.moveComplete) fermait la saisie dès qu'un coup était complet. Elle reste désormais ouverte : c'est le moteur qui dit si un demi-coup de plus mène encore à un coup légal.
  • Une fois tous les dés utilisés, plus rien n'est demandé. Ce garde-fou corrige une régression trouvée par make test-browser : après un double complet, l'application demandait un cinquième demi-coup.

2. Largeur. Les pages sont des éléments de la colonne flexible #screen. Leurs marges automatiques annulaient l'étirement : une page au contenu court se réduisait à la largeur de ce contenu. La règle .screen > .page { width: 100%; } corrige toutes les pages, y compris l'accueil, l'aide, la vue d'une position et l'analyse, qui avaient la même fragilité.

3. Notation. Game.moveNotation retrouve, parmi les coups légaux du moteur, celui qui mène à la même position, et reprend sa notation.

Tests :

  • Saisie :
    • tests/test_engine.sh couvre le cas dans les deux ordres ;
    • app/tests/bear-off-input.test.ts vérifie sur le vrai moteur que tout ordre accepté par le moteur l'est par la partie : 294 refus avant la correction, 0 après ;
    • scénario Gherkin « Sortir ses pions dans l'ordre de son choix ».
  • Largeur : tests/browser/recette.mjs reçoit une nouvelle règle. Pour une même taille d'écran, le plateau a la même largeur à toutes les étapes du tutoriel. Les mesures sont 396 px en 412x915, 515 px en 915x412 et 472,6 px en 844x320.
  • Notation : game-analysis.test.ts vérifie que chaque coup s'écrit pareil sur l'écran de jeu et dans l'analyse.

Vérification :

  • make lint : aucun problème ;
  • make test : 10/10, 46 scénarios ;
  • make test-browser : suite complète au vert dans Chromium et Firefox.

Choix et compromis

  • Moteur C inchangé : ses réponses étaient justes.
  • Valider après 6/off : le joueur peut valider tout de suite, puisque 6/5/off est un coup légal, ou sortir le second pion. Imposer l'usage des deux dés aurait bloqué le cas où le dernier pion sort avec un seul dé.
  • Correction CSS générale : elle porte sur toutes les pages plutôt que sur le seul tutoriel.

Risques et déploiement

  • Saisie : un coup complet ne ferme plus la saisie. Les tests couvrent tous les ordres de sortie, le double complet et des parties complètes dans les deux navigateurs.
  • Formats : le format des événements et le stockage ne changent pas.
  • Retour arrière : annuler la fusion.

Comment vérifier

make lint && make test && make test-browser
cat build/browser-shots/accueil-tutoriel/tutoriel-largeurs.txt

Sur le téléphone, après publication :

  • ouvrir #/position/BQAACAIAAAAAAA, puis « Jouer à partir d'ici » ;
  • avec 6-1, jouer 6/off puis 1/off, puis recommencer dans l'ordre inverse ;
  • ouvrir #/tutoriel/6/a-vous en portrait : même largeur qu'aux autres étapes.

Hors périmètre

  • Ligne « L'ordinateur a joué » en paysage : elle n'est pas affichée, par choix de la révision UX.
  • Ligne de commande du moteur : elle refuse plus de quatre demi-coups par une erreur d'usage plutôt que par « non valide ». Le domaine ne les demande plus.
  • Texte du nouveau scénario d'aide : à relire par Pierre.

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

## Pourquoi Trois défauts sont apparus pendant les essais de l'étape 1. 1. **Saisie de la sortie.** Avec un 6-1 pendant la sortie des pions, sortir le pion de la 6 avant celui de la 1 était refusé, alors que l'ordre inverse passait. Le cas : #/position/BQAACAIAAAAAAA, puis « Jouer à partir d'ici ». - Un test systématique a porté sur les fins de partie d'un à quatre pions, avec les 21 jets. - Il a trouvé 294 ordres de saisie permis par le moteur mais refusés par l'application, tous sur des jets non doubles. - Exemple : avec un 5-1 et des pions sur 4 et 2, 4/off puis 2/1 était refusé. 2. **Largeur du tutoriel.** Pierre voyait l'étape 6 du tutoriel plus étroite que les autres, en portrait sur le Fairphone 4. Mesuré en 412x915 : le plateau faisait 300 px au lieu de 396 sur les écrans « à vous » (départ et réussi) de cette étape. 3. **Notation du coup de l'ordinateur.** La ligne « L'ordinateur a joué … » écrivait le coup à partir des demi-coups, alors que le bilan, l'analyse et la feuille du maître utilisent la notation du moteur. ## Quoi - **Saisie** : un coup déjà complet peut encore se prolonger si le moteur l'accepte. Après 6/off, « Jouer ce coup » apparaît, et 1/off reste possible. Le tutoriel suit la même règle. - **Largeur** : toutes les pages prennent la largeur de l'écran, dans la limite de leur largeur maximale. Le tutoriel a la même largeur à chaque étape. - **Notation** : sur l'écran de jeu, le coup de l'ordinateur s'écrit dans la notation du moteur. ## Comment Le travail a été délégué à un sous-agent, interrompu une fois par la limite d'usage. **1. Saisie.** Le moteur n'était pas en cause. - 6/off joué seul mène à la même position que le coup légal « 6/off » de gnubg, joué 6/5 puis 5/off. Le moteur déclare donc ce coup complet, mais il accepte aussi 1/off ensuite. - Le domaine (`Game.moveComplete`) fermait la saisie dès qu'un coup était complet. Elle reste désormais ouverte : c'est le moteur qui dit si un demi-coup de plus mène encore à un coup légal. - Une fois tous les dés utilisés, plus rien n'est demandé. Ce garde-fou corrige une régression trouvée par `make test-browser` : après un double complet, l'application demandait un cinquième demi-coup. **2. Largeur.** Les pages sont des éléments de la colonne flexible `#screen`. Leurs marges automatiques annulaient l'étirement : une page au contenu court se réduisait à la largeur de ce contenu. La règle `.screen > .page { width: 100%; }` corrige toutes les pages, y compris l'accueil, l'aide, la vue d'une position et l'analyse, qui avaient la même fragilité. **3. Notation.** `Game.moveNotation` retrouve, parmi les coups légaux du moteur, celui qui mène à la même position, et reprend sa notation. **Tests** : - **Saisie** : - `tests/test_engine.sh` couvre le cas dans les deux ordres ; - `app/tests/bear-off-input.test.ts` vérifie sur le vrai moteur que tout ordre accepté par le moteur l'est par la partie : 294 refus avant la correction, 0 après ; - scénario Gherkin « Sortir ses pions dans l'ordre de son choix ». - **Largeur** : `tests/browser/recette.mjs` reçoit une nouvelle règle. Pour une même taille d'écran, le plateau a la même largeur à toutes les étapes du tutoriel. Les mesures sont 396 px en 412x915, 515 px en 915x412 et 472,6 px en 844x320. - **Notation** : `game-analysis.test.ts` vérifie que chaque coup s'écrit pareil sur l'écran de jeu et dans l'analyse. **Vérification** : - `make lint` : aucun problème ; - `make test` : 10/10, 46 scénarios ; - `make test-browser` : suite complète au vert dans Chromium et Firefox. ## Choix et compromis - **Moteur C inchangé** : ses réponses étaient justes. - **Valider après 6/off** : le joueur peut valider tout de suite, puisque 6/5/off est un coup légal, ou sortir le second pion. Imposer l'usage des deux dés aurait bloqué le cas où le dernier pion sort avec un seul dé. - **Correction CSS générale** : elle porte sur toutes les pages plutôt que sur le seul tutoriel. ## Risques et déploiement - **Saisie** : un coup complet ne ferme plus la saisie. Les tests couvrent tous les ordres de sortie, le double complet et des parties complètes dans les deux navigateurs. - **Formats** : le format des événements et le stockage ne changent pas. - **Retour arrière** : annuler la fusion. ## Comment vérifier ``` make lint && make test && make test-browser cat build/browser-shots/accueil-tutoriel/tutoriel-largeurs.txt ``` Sur le téléphone, après publication : - ouvrir #/position/BQAACAIAAAAAAA, puis « Jouer à partir d'ici » ; - avec 6-1, jouer 6/off puis 1/off, puis recommencer dans l'ordre inverse ; - ouvrir #/tutoriel/6/a-vous en portrait : même largeur qu'aux autres étapes. ## Hors périmètre - **Ligne « L'ordinateur a joué » en paysage** : elle n'est pas affichée, par choix de la révision UX. - **Ligne de commande du moteur** : elle refuse plus de quatre demi-coups par une erreur d'usage plutôt que par « non valide ». Le domaine ne les demande plus. - **Texte du nouveau scénario d'aide** : à relire par Pierre. Generated with Claude Code https://claude.com/claude-code
pierre added 7 commits 2026-11-10 19:25:39 +00:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
La partie fermait la saisie dès que les demi-coups formaient un coup
légal. En sortie, 6/off seul mène à la même position que 6/5/off : le
1/off qui suivait était refusé. La saisie reste ouverte tant que le
moteur accepte un demi-coup de plus ; le tutoriel suit la même règle.
Tests : tous les ordres de saisie des fins de partie d'un à quatre pions,
sur les 21 jets, scénario Gherkin et tests du moteur pour les deux ordres.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
« L'ordinateur a joué 6-4 : 6/off » au lieu de « 6/2 2/off » : la
notation vient du coup légal de gnubg qui mène à la même position
(Game.moveNotation), comme dans l'analyse et le bilan. Testé : sur une
partie analysée, chaque coup s'écrit pareil des deux côtés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les pages sont des éléments de la colonne flexible #screen ; leurs marges
automatiques annulaient l'étirement, et une page au contenu court se
réduisait à la largeur de ce contenu : l'étape 6 « à vous » (consigne
courte, pas d'explication) avait un plateau de 300 px au lieu de 396 en
412 × 915. Les pages prennent toute la largeur, bornée par max-width.
La recette mesure le plateau et le texte à chaque écran du tutoriel, dans
les trois tailles, et refuse un plateau de largeur différente ou une page
plus large que l'écran (mesures dans tutoriel-largeurs.txt).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Après un double complet, la saisie restée ouverte demandait au moteur un
cinquième demi-coup, que la ligne de commande refuse (erreur dans la page,
relevée par make test-browser). Test : un moteur qui refuse plus de
demi-coups que de dés.

Coup de l'ordinateur : la recette du navigateur vérifie la ligne
« L'ordinateur a joué … » au premier coup montré.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pierre added 1 commit 2026-11-11 20:53:19 +00:00
pierre manually merged commit 21baddcea3 into main 2026-11-11 20:53:25 +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#53