4.7 KiB
4.7 KiB
Moteur embarqué : extraction du cœur de gnubg, moteur.h et engine-cli
- Date : 2026-11-02
- Étape : 0a.3
- Statut : en cours
- Exécutant : sous-agent general-purpose, dans un worktree isolé
Objectif
Le cœur de GNU Backgammon (commit 14b67984737ded0f6de43d63dcb789f729d9b06b,
ADR 0005) compile comme bibliothèque C autonome, sans GLib ni interface
graphique, derrière l'interface engine/include/moteur.h, et un programme
engine-cli l'interroge en ligne de commande avec une sortie JSON.
Consignes
- Sources : copie figée des seuls fichiers nécessaires de gnubg dans
engine/gnubg/(liste de départ et plan d'isolement : ADR 0005), avec unengine/gnubg/PROVENANCE.md(commit exact, liste des fichiers, toute modification apportée à un fichier d'origine, signalée aussi en commentaire dans le fichier). Garder les en-têtes de copyright. Modifier les fichiers d'origine le moins possible : préférer unconfig.h, un shimglib.het un en-tête réduit propres à Ustagammon dansengine/compat/. - Données :
gnubg.weightset les tables d'équité de match nécessaires (Kazaross-XG2par défaut) copiées dansengine/data/. Les fichiers générés (gnubg.wd, basesgnubg_os0.bd,gnubg_ts0.bd) sont produits par le build avec les outils officiels (makeweights,makebearoff) compilés pour l'hôte, dansbuild/, jamais commités. Paramètres de génération identiques à ceux du build officiel de gnubg (Makefile.am). - Interface
engine/include/moteur.h, en C, documentée en français, positions au format Position ID + Match ID, sans exposer de type gnubg :- initialisation (chemin des données) et libération ;
- coups légaux pour une position et des dés ;
- classement des coups avec équités et probabilités, pour un niveau donné (au minimum 0-ply et 2-ply, réglages prédéfinis de gnubg, sans bruit) ;
- décision de videau (équités sans double, double/prend, double/passe, et décision), en match et en partie libre (Crawford, Jacoby) ;
- évaluation d'une position (5 probabilités et équité) ;
- erreurs signalées par code de retour, jamais par
exit.
engine-cli/:engine-cli bestmove <position_id> <match_id> <dés>(ex.31),engine-cli moves …,engine-cli cube <position_id> <match_id>,engine-cli eval <position_id> <match_id>, option de niveau (--ply 0|2), sortie JSON sur la sortie standard, erreurs en JSON avec un code de sortie non nul.- Build : compilation dans Docker (image
docker/build-c/Dockerfilesurdebian:trixie, déjà présente), jamais avec les outils de l'hôte.make engineproduitbuild/engine-cliet les données ;make buildl'appelle. Dépendances make correctes : rien n'est recompilé si rien n'a changé (le vérifier : un secondmake enginene recompile rien).-j2maximum.make cleansupprimebuild/. Les nouvelles cibles apparaissent dansmake help. - Tests (
tests/test_engine.sh, lancé parmake test, qui supposemake enginedéjà fait ou le lance) : position de départ (Position ID4HPwATDgc/ABMA) avec plusieurs jets d'ouverture dont le meilleur coup est connu sans ambiguïté (ex. 31 : 8/5 6/5), nombre de coups légaux d'une position connue, symétrie et bornes des probabilités, gestion d'un identifiant invalide, décision de videau d'une position manifestement « pas de double ». La comparaison systématique au gnubg de bureau est l'étape suivante (0a.4), pas celle-ci. - Mesure : temps de
bestmoveà 0-ply et 2-ply sur la position de départ, rapporté (pas de seuil à tenir sur le PC).
Contraintes :
- respecter
CLAUDE.md(français,-j2, aucune installation hors Docker) ; - pas de threads (USE_MULTITHREAD désactivé) ; C générique sur x86 pour commencer (pas de SSE/AVX obligatoire), en gardant le chemin NEON possible ;
- ne pas copier de code de CBG ; s'en inspirer est permis (clone en lecture seule indiqué dans la consigne de l'agent), en le citant ;
make lintetmake testdoivent passer ; commits petits, en français ;- ne pas pousser ni créer de merge request ;
- ne rien simuler : un échec est rapporté avec sa cause.
Rapport attendu : ce qui a été fait, fichiers repris et modifiés, commandes de vérification, temps de compilation, tailles des données générées, temps de calcul mesurés, difficultés, écarts au plan.
Critères de réussite
make engine && ./build/engine-cli bestmove 4HPwATDgc/ABMA cAkAAAAAAAAA 31affiche le meilleur coup en JSON (8/5 6/5).- Un second
make enginene recompile rien. make lintetmake testpassent.
Résultat
À remplir à la clôture.