Crédits du moteur et résultat de l'étape 0a.3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 13:58:01 +01:00
co-authored by Claude Opus 5.5
parent a90f8ac9bf
commit 7e2f9d4ad8
2 changed files with 56 additions and 8 deletions
+43 -2
View File
@@ -2,9 +2,14 @@
- **Date** : 2026-11-02
- **Étape** : 0a.3
- **Statut** : en cours
- **Statut** : terminé
- **Exécutant** : sous-agent general-purpose, dans un worktree isolé
> **Renommage** (conventions de code décidées par Pierre pendant la tâche :
> identifiants en anglais) : `moteur.h` devient `engine/include/engine.h`,
> l'API C est préfixée `engine_` et les clés JSON sont en anglais. Le texte
> ci-dessous garde la rédaction d'origine.
## Objectif
Le cœur de GNU Backgammon (commit 14b67984737ded0f6de43d63dcb789f729d9b06b,
@@ -83,4 +88,40 @@ calcul mesurés, difficultés, écarts au plan.
## Résultat
À remplir à la clôture.
Terminé (2026-11-02), branche `moteur-embarque-travail`. Les trois critères
sont remplis : `make engine && ./build/engine-cli bestmove 4HPwATDgc/ABMA
cAkAAAAAAAAA 31` répond `8/5 6/5` en JSON ; un second `make engine` affiche
« Nothing to be done » ; `make lint` et `make test` passent.
- **Sources** : 38 fichiers de gnubg (plus `COPYING`) copiés **sans aucune modification**
(`engine/gnubg/PROVENANCE.md`) ; en plus de la liste de l'ADR 0005 :
`drawboard.c/h` (notation des coups, `FormatMove`), `mtsupport.c` (données
du fil unique), `dice.h`. Tout le reste est remplacé dans `engine/compat/`
(config.h, shim GLib, en-têtes réduits, fonctions de support).
- **Tables d'équité** : pas de conversion en tableau C ni de repli sur Zadeh ;
le shim fournit un petit analyseur XML compatible GMarkup, et
`matchequity.c` lit `Kazaross-XG2.xml` à l'exécution, comme gnubg de
bureau. `engine_init` échoue si la table chargée n'est pas celle-ci.
Contre-vérification : une variante d'engine-cli liée à la vraie GLib donne
une sortie identique au caractère près (partie libre, match en 5 points,
Crawford, 0 et 2 plis).
- **Données** : générées au build par les outils officiels compilés avec la
vraie GLib, mêmes paramètres que `Makefile.am` : `gnubg.wd` 408 016 octets,
`gnubg_os0.bd` 1 465 788 octets, `gnubg_ts0.bd` 6 830 248 octets.
- **Build** : image `ustagammon/build-c:1` (`docker/build-c/Dockerfile`),
`engine/engine.mk` lancé par `make engine` avec `-j2` ; build complet depuis
zéro : 43 s, génération des données comprise. Options de gnubg
(`-O3 -ffast-math -DG_DISABLE_ASSERT`) ; notre C en `-std=c11 -Wall
-Wextra -Werror`.
- **Temps de `bestmove`** (position de départ, processus complet, données
en cache disque) : 0-ply 0,02 à 0,03 s ; 2-ply 0,03 s pour 31, 0,12 à
0,20 s pour 53, 64, 21 ; environ 35 Mo de mémoire. Premier lancement à
froid : 0,8 s.
- **Match ID** : `cAkAAAAAAAAA` met le joueur **1** au trait (bit fMove à 1) ;
le Match ID équivalent avec le joueur 0 au trait est `MAEAAAAAAAAA`. Les
deux donnent le même résultat sur la position de départ (testé).
- **Écarts au plan** : identifiants en anglais (voir l'encadré) ; sous-commande
`legal` ajoutée (coups légaux sans évaluation) ; `make test` ne vide plus
`build/` (test_makefile.sh essaie `make clean` sur un dossier jetable), sinon
chaque test recompilait le moteur ; mesure de l'écart avec et sans
`-ffast-math` laissée à l'étape 0a.4.