Fusion d'origin/main (MR !44) ; 1c faite, plan clos

Conflits : l'aide garde l'approche de main (défilement sur la carte du
terme) ; styles des deux côtés conservés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 00:14:58 +01:00
co-authored by Claude Opus 5.5
17 changed files with 378 additions and 190 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ Repris du cadrage (modules, écrans clés, IA générative en V1) et des ADR 001
| --- | --- | --- |
| 1a. Moteur pour l'analyse (fait) | Niveaux de jeu (plis et bruit de GNU Backgammon : débutant à expert), classement des coups d'un jet avec équités, analyse d'un coup joué et d'une décision de videau, chance d'un jet ; exposés par `engine.h`, `engine-cli` et le Worker, avec positions de référence comparées à gnubg de bureau | — |
| 1b. Parties enregistrées (fait) | Stockage IndexedDB derrière l'interface de stockage existante : plusieurs parties, reprise automatique, branches (« Rejouer d'ici » crée une branche, l'originale reste intacte et rechargeable), export SGF avec variantes | — |
| 1c. Match et réglages | Partie libre ou match en N points, règle Crawford, règle Jacoby, choix du niveau de l'ordinateur, conseil du maître activable ou non ; écran de nouvelle partie | 1a, 1b |
| 1c. Match et réglages (fait) | Partie libre ou match en N points, règle Crawford, règle Jacoby, choix du niveau de l'ordinateur, conseil du maître activable ou non ; écran de nouvelle partie | 1a, 1b |
| 1d. Conseil du maître | Après chaque coup du joueur, jamais avant (ADR 0011) : appréciation du moteur (bon coup, imprécision, erreur, grosse erreur) avec mot, icône et couleur, phrase du maître fondée sur les chiffres du moteur, coup recommandé montré sur demande ; aussi pour les décisions de videau ; calcul en arrière-plan sans retarder le jeu | 1a |
| 1e. Fin de partie et analyse | Bilan (ADR 0011) : résultat, coups par appréciation, taux d'erreur comparé à la chance, « le coup à revoir » ; écran d'analyse : graphe d'équité (toucher un point ouvre la position), liste des erreurs filtrable, visualiseur pas à pas coup joué contre meilleur coup, « Rejouer d'ici » | 1a, 1b, 1d |
| 1f. Prompts à copier | Gabarits versionnés et testés (`docs/prompts/` ou équivalent, source unique), bouton « Demander à une IA » sur le plateau, le conseil du maître, l'analyse et la fin de partie ; le moteur décide, l'IA explique | 1d, 1e |
-102
View File
@@ -1,102 +0,0 @@
# Match, niveaux et réglages (1c)
- **Date** : 2026-11-03
- **Étape** : 1c (`docs/etape-1.md`)
- **Statut** : fait (2026-11-09), en attente de vérification
- **Exécutant** : sous-agent general-purpose, dans un worktree
## Objectif
Choisir sa partie : partie libre ou match en N points, avec les règles de
Crawford et de Jacoby, contre l'ordinateur au niveau voulu.
## Consignes
ADR 0007, 0008. Le moteur expose depuis 1a les niveaux de gnubg
(`levelMove`, `levelCubeDecision`) et accepte les matchs dans son API C.
1. **Domaine** : longueur de match, score, règle de Crawford (partie Crawford
et suivantes, calculées par le moteur via le Match ID), règle de Jacoby en
partie libre ; enchaînement des manches d'un match jusqu'à sa fin ; le
journal d'événements reste rétrocompatible (les parties existantes se
rechargent).
2. **Adaptateur** : `EngineCube` étendu au match (score, longueur, Crawford)
ou remplacé par le Match ID, sans casser les appels existants.
3. **Niveau de l'ordinateur** : ses coups et ses décisions de videau au niveau
choisi. Reprendre de `ComputerTurn` (gnubg, `play.c`) les règles de
déroulement non reprises en 1a : pré-filtre « fenêtre de marché » et double
facultatif à 0 pli, avec citation des sources.
4. **Écran de nouvelle partie** (maquettes de la session « identité » si
disponibles, sinon sobre et conforme à la charte) : type de partie, niveau
(noms montrés au joueur à proposer simplement : Débutant, Amateur,
Intermédiaire, Avancé, Expert, Champion — correspondance avec les niveaux
de gnubg documentée), conseil du maître activé ou non. Par défaut : partie
libre, Intermédiaire, conseil activé. Le réglage est mémorisé.
5. Affichage du score de match et de la partie Crawford sur le plateau.
6. Scénarios Gherkin (match en 3 points jusqu'au bout avec dés imposés,
Crawford, Jacoby) et fiches du glossaire (match, Crawford, Jacoby si
absentes). `make lint`, `make test`, `make test-browser` (un match court).
## Critères de réussite
Un match en 3 points se joue jusqu'au bout, au niveau choisi, avec Crawford
appliqué ; les trois commandes passent.
## Résultat
2026-11-09, branche `match-et-reglages` (sur `accueil-tutoriel-aide` puis
`main` fusionnées).
**Fait**
1. **Moteur** (une seule recompilation, `engine.c` et `engine-cli/main.c`) :
`engine_level_double_decision` et `engine_level_take_decision` reprennent
`ComputerTurn` (gnubg, `play.c` l. 1312-1398 et 1139-1235) : accès au
videau et videau < 4096, pré-filtre « fenêtre de marché » (évaluation sans
videau à un pli de moins, `GetDoublePointDeadCube`), double facultatif
seulement à 0 pli avec plus de 0,001 de gain, réponse au double selon la
décision (castors joués comme une prise). `engine_match_after_game` :
score, fin du match, partie Crawford suivante (`play.c` l. 1817-1820 ;
partie Crawford déjà jouée lue comme gnubg, l. 303 et 4277). engine-cli :
`double`, `take`, `aftergame`, `matchid` étendu aux matchs. Tests dans
`tests/test_engine.sh`.
2. **Domaine** : `Match`, `MatchAfterGame` (`match.ts`), niveaux montrés
(`level.ts` : Débutant beginner, Amateur casual, Intermédiaire
intermediate, Avancé advanced, Expert 0ply, Champion 2ply ; documenté
dans `docs/glossaire/niveau-de-jeu.md`). `Game` : niveau et match portés
par `GameStarted`, ordinateur par `levelMove`/`levelDouble`/`levelTake`,
`GameEnded.match` donné par le moteur, `nextGame` pour la partie suivante.
`EngineCube` étendu au match (vu du joueur au trait) ; le Match ID est
écrit par le moteur, liens de position compris. Chaque partie d'un match
est une partie enregistrée à part.
3. **Format** : événements en version 2, migration testée des journaux de la
version 1 (niveau 2 plis explicite) ; résumé avec `match` facultatif ;
quatre réglages nouveaux avec valeur par défaut. Amendement de l'ADR 0007.
4. **Écran `#/nouvelle-partie`** (charte 1c) : segments partie libre/match,
longueurs 3/5/7/11, phrases et liens Crawford/Jacoby, six barres de
niveau, conseil du maître, barre d'action collée en bas ; choix gardés.
Ouvert par le menu (lien), l'accueil et la fin de partie ; « Partie
suivante » dans un match qui continue. Adresse ajoutée à l'ADR 0013.
5. **Score** : ligne « Match en N points · partie Crawford », pastilles dans
les bandeaux, case « sur N » dans la colonne de commandes en paysage,
texte pour le lecteur d'écran ; videau caché pendant la partie Crawford ;
panneau de fin de partie et de fin de match.
6. **Tests** : `jouer-un-match.feature` (niveau, match en 3 points jusqu'au
bout avec dés imposés, Crawford, Jacoby), `match.test.ts`, tests du
domaine (match, migration), `tests/browser/match.mjs` (écran, match en
3 points joué par l'interface jusqu'au bout, rechargement en cours de
match ; captures dans `build/browser-shots/match/`). `play.mjs` adapté au
passage par l'écran « Nouvelle partie ».
**Écarts**
- Le moteur C a changé (fonctions ajoutées, rien de gnubg modifié).
- Le « conseil du maître » n'est qu'un réglage gardé : il n'existe pas
encore (1d).
- « Mes parties » liste chaque partie d'un match séparément, sans afficher
le match ; le résumé porte pourtant `match` pour le faire plus tard.
- Le numéro de la partie dans le match n'est pas gardé (SGF : `game:0`).
- Longueur par défaut d'un match : 5 points (la charte ne la fixe pas).
**Suites** : affichage du match dans « Mes parties » ; recette design des
captures ; essai sur le Fairphone 4 (temps du niveau Champion).
+3 -3
View File
@@ -10,7 +10,7 @@ Fonctionnalité: Apprendre les règles avec le tutoriel
Chaque étape tient en un écran court : un titre, le plateau, deux ou
trois phrases. Le coup montré se joue tout seul après une seconde ;
« Revoir » le rejoue. La barre du haut montre où vous en êtes et vous
ramène aux étapes déjà vues. « Passer » vous emmène jouer.
ramène aux étapes déjà vues. « Quitter » vous emmène jouer.
Étant donné que vous commencez le tutoriel
Alors il compte huit étapes, dont quatre où c'est à vous de jouer
@@ -36,7 +36,7 @@ Fonctionnalité: Apprendre les règles avec le tutoriel
passez : le maître vous dit ensuite ce qu'il aurait fait, et pourquoi.
Étant donné que vous êtes à l'écran « à vous » de l'étape 8
Quand vous répondez « Je passe »
Quand vous répondez « Passer »
Alors le maître dit qu'il aurait pris
Quand vous répondez « Je prends »
Quand vous répondez « Prendre »
Alors le tutoriel salue votre réponse
+7 -4
View File
@@ -52,13 +52,16 @@ Fonctionnalité: Régler l'application
Scénario: Comment mettre l'application à jour ?
Dès qu'une nouvelle version d'Ustagammon est publiée, l'application la
télécharge d'elle-même, puis affiche « Nouvelle version disponible »,
jamais pendant que vous jouez un coup. « Mettre à jour » l'installe et
vous ramène où vous en étiez. Dans le menu, « Rechercher une mise à
télécharge d'elle-même, puis affiche en bas de l'écran « Nouvelle
version prête. », seulement entre deux tours, jamais pendant que vous
jouez un coup. « Mettre à jour » l'installe et vous ramène où vous en
étiez. Dans le menu, « Rechercher une mise à
jour » vérifie tout de suite s'il y en a une.
Étant donné qu'une nouvelle version d'Ustagammon est disponible
Et que vous avez déjà déplacé un pion de votre coup
Et que vous avez des dés à jouer
Alors l'application ne vous propose pas encore de mettre à jour
Quand vous déplacez un pion de votre coup
Alors l'application ne vous propose pas encore de mettre à jour
Quand vous avez joué votre coup
Alors l'application vous propose de mettre à jour
+2 -4
View File
@@ -1,7 +1,7 @@
# Les règles du backgammon
Tutoriel d'Ustagammon, en huit étapes. Texte sous licence CC BY-SA 4.0,
première version à valider par Pierre. Format : voir README.md.
validé par Pierre le 9 novembre 2026. Format : voir README.md.
## 1. Le but du jeu
@@ -101,9 +101,7 @@ Vous avez 6 et 3 : sortez deux pions.
- jet: 2-1
- coup: 2/off 1/off
Une partie gagnée vaut 1 point. Si l'adversaire n'a sorti aucun pion quand vous finissez, c'est un [gammon](gammon.md) : 2 points. S'il lui reste en plus un pion sur la barre ou dans votre camp, c'est un [backgammon](backgammon.md) : 3 points.
Dans une partie libre contre l'ordinateur, le gammon et le backgammon ne comptent double ou triple qu'une fois le videau doublé : c'est la [règle de Jacoby](regle-de-jacoby.md).
Une partie gagnée vaut 1 point. Si l'adversaire n'a sorti aucun pion, c'est un [gammon](gammon.md) : 2 points ; s'il lui reste en plus un pion sur la barre ou dans votre camp, c'est un [backgammon](backgammon.md) : 3 points. En partie libre, gammon et backgammon ne comptent que si le videau a été doublé : c'est la [règle de Jacoby](regle-de-jacoby.md).
## 8. Le videau