Trois défauts sont apparus pendant les essais de l'étape 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é.
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.
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.
## 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
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>
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Pourquoi
Trois défauts sont apparus pendant les essais de l'étape 1.
Quoi
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.
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.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.moveNotationretrouve, parmi les coups légaux du moteur, celui qui mène à la même position, et reprend sa notation.Tests :
tests/test_engine.shcouvre le cas dans les deux ordres ;app/tests/bear-off-input.test.tsvé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 ;tests/browser/recette.mjsreç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.game-analysis.test.tsvé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
Risques et déploiement
Comment vérifier
Sur le téléphone, après publication :
Hors périmètre
Generated with Claude Code https://claude.com/claude-code