[{"content":"Mostly writing on what I learn. fun(ctional) code, IA, Embedded, HAM, entrepreneurship and of course cooking (I\u0026rsquo;m french)\n","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/","section":"Accueil","summary":"Mostly writing on what I learn. fun(ctional) code, IA, Embedded, HAM, entrepreneurship and of course cooking (I’m french)\n","title":"Accueil","type":"page"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/posts/","section":"Articles","summary":"","title":"Articles","type":"posts"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/tags/board-game-arena/","section":"Tags","summary":"","title":"Board-Game-Arena","type":"tags"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/categories/claude-code/","section":"Categories","summary":"","title":"Claude Code","type":"categories"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/tags/claude-code/","section":"Tags","summary":"","title":"Claude Code","type":"tags"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/tags/skills/","section":"Tags","summary":"","title":"Skills","type":"tags"},{"content":"","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"Comment fabriquer un skill qui livre vraiment ? Comment construire une boucle de test qui ferme ? Que décide un agent à votre place quand la spec se tait ? L\u0026rsquo;adaptation de jeux de société sur Board Game Arena m\u0026rsquo;a servi de cas d\u0026rsquo;étude — périmètre borné, framework contraint, validation immédiate. Un exemple : 10 avril 2026, à l\u0026rsquo;aide de ce skill j\u0026rsquo;ai pu laisser Claude partir d\u0026rsquo;une règle du jeu (tic-tac-toe quantique) pour obtenir un jeu complet en moins de 3 heures, sans écrire une seule ligne de code à la main. Quatre jeux plus tard, voici ce que j\u0026rsquo;en ai retenu.\nAprès la frénésie post-découverte de Claude Code, je me suis posé les mêmes questions que beaucoup : comment le piloter pour automatiser au maximum développement et tests ? Quelle méthode pour écrire les skills \u0026amp; autres outils de pilotage ? Quand doit-on se reposer sur des outils ou sur les capacités du modèle ? Plutôt plomberie ou permaculture comme prochain travail ?\nPour avancer sur ces questions, l\u0026rsquo;adaptation des jeux de plateau m\u0026rsquo;a paru un excellent terrain d\u0026rsquo;expérimentation : projets assez courts, feedback rapide, framework très contraint, produits généralement très bien définis comparativement à n\u0026rsquo;importe quel service SaaS (règles). Par ailleurs j\u0026rsquo;ai promis en 2023 à un ami d\u0026rsquo;adapter son jeu sur Board Game Arena « d\u0026rsquo;ici ~1 mois », la tension devient palpable\u0026hellip;\nObjectif : écrire un skill permettant à Claude Code de délivrer une adaptation de jeu de plateau directement à partir des règles. Comprendre les éléments de design et d\u0026rsquo;itération sur un skill destiné à sortir un produit fini.\nPremiers pas # Par bonheur BGA (Board Game Arena) utilise PHP, un langage avec lequel je n\u0026rsquo;ai absolument aucune affinité. Un terrain idéal pour développer « sans toucher ni regarder une seule fois au code ».\nLes premiers essais sont intéressants : les questions sont automatiquement extraites et envoyées aux auteur.ices, une première version du code est produite, un premier plateau est généré automatiquement en SVG, tout semble ok, premier déploiement\u0026hellip;\nRien ne fonctionne ! Il n\u0026rsquo;est même pas possible de lancer une partie !\nLes messages d\u0026rsquo;erreurs ne s\u0026rsquo;affichent que quelques secondes dans le navigateur et tenter de les copier/coller avant leur disparition est une course contre la montre rapidement désagréable.\nAgacé par cette étape répétitive, inintéressante et couronnée d\u0026rsquo;échec, je médite et me souviens des trois vertus cardinales du programmeur : la Paresse, l\u0026rsquo;Impatience et l\u0026rsquo;Orgueil. Cela me permet de me pencher immédiatement sur l\u0026rsquo;automatisation de toute la chaîne du déploiement aux tests à l\u0026rsquo;aide de Claude in Chrome. Cette erreur était plutôt désagréable, mais la boucle « déploiement → test → capture du message d\u0026rsquo;erreur → correction » est quelque chose dont j\u0026rsquo;aurais longtemps rêvé si j\u0026rsquo;avais envisagé cette possibilité ! Par la suite j\u0026rsquo;ai utilisé ce même principe pour tester toutes les règles avec des parties complètes.\nCependant les heures suivantes n\u0026rsquo;ont pas permis de débloquer la situation : le projet avait été démarré avec une version obsolète du framework BGA. N\u0026rsquo;ayant pas mis les mains dans le code, je n\u0026rsquo;avais pas vu cela. Le déblocage s\u0026rsquo;est fait en changeant d\u0026rsquo;approche : plutôt que tenter de faire marcher ce code, j\u0026rsquo;ai repris un code d\u0026rsquo;exemple, vérifié qu\u0026rsquo;il lançait bien une table, et demandé à Claude de « porter » progressivement le code du jeu vers ce code d\u0026rsquo;exemple en testant régulièrement le bon fonctionnement. Cela aura pris ~20 minutes, sans intervention de ma part.\nDans sa version actuelle le skill présente donc les choix suivants :\nOn démarre par télécharger le code « de base » pour partir de ce point. Si le framework change, le skill aura toujours la dernière version. La boucle de test est intégrée et prévue pour fonctionner avec des événements dans le DOM plutôt que des captures d\u0026rsquo;écran analysées par Claude. Cela autant pour accélérer que pour réduire l\u0026rsquo;usage de Claude Code. Première leçon : La progressivité paie # « It is faster to make a four-inch mirror and then a six-inch mirror than to make a six-inch mirror. » source\nLe premier jeu choisi, Go On Rasalva (un jeu dont je suis co-auteur, pas encore disponible), était assez complexe : plateau hexagonal avec une répartition des couleurs délicate à décrire, gestion de ressources, ordre du tour changeant, placement et transformations, etc. J\u0026rsquo;avais simplement choisi le jeu initialement promis en 2023 pour de simples raisons de pression sociale\u0026hellip;\nMais en considérant l\u0026rsquo;objectif réel, l\u0026rsquo;automatisation de ce type de développement, j\u0026rsquo;ai rapidement compris que j\u0026rsquo;irais probablement plus vite en testant vraiment plus simple. J\u0026rsquo;ai donc relancé le travail sur tic-tac-toe, avec l\u0026rsquo;objectif d\u0026rsquo;avoir un jeu jouable et testé de A à Z par Claude Code.\nCette démarche s\u0026rsquo;est avérée payante et j\u0026rsquo;ai continué avec d\u0026rsquo;autres jeux disponibles en augmentant graduellement les features (gestion d\u0026rsquo;un paquet de cartes, différentes interactions utilisateur\u0026hellip;) : tic-tac-toe quantique (ici), Visite Royale (ici), Duelly (GitHub, terminé de bout en bout — publication en attente d\u0026rsquo;un point de licence). Chaque adaptation permettait d\u0026rsquo;améliorer graduellement le skill en réalisant le process de bout en bout pour, au final, revenir au premier jeu avec un process déjà validé qu\u0026rsquo;il suffirait d\u0026rsquo;améliorer.\nLa question du transfert de cette réalisation à d\u0026rsquo;autres domaines reste ouverte. Lorsque les projets sont bornés, avec un process similaire (comme l\u0026rsquo;adaptation des jeux), cela semble adapté. Dans d\u0026rsquo;autres domaines, comme l\u0026rsquo;évolution et la maintenance d\u0026rsquo;un service SaaS en production avec une surface fonctionnelle importante, une infrastructure complète et beaucoup de code legacy, je ne sais si cette approche est possible.\nQuand l\u0026rsquo;IA n\u0026rsquo;y arrive pas / est biaisée # Go On Rasalva comportait un plateau hexagonal avec un schéma de coloration particulier que je n\u0026rsquo;ai pas réussi à décrire. Que ce soit à Claude Code ou ChatGPT, j\u0026rsquo;obtenais systématiquement une coloration « alternée » des cases, comme sur un damier. J\u0026rsquo;ai tendance à nommer cela « des problèmes 10h10 », en référence aux générateurs d\u0026rsquo;image qui ne savent présenter que des montres à 10h10.\nDans le cas présent je n\u0026rsquo;ai pas trouvé d\u0026rsquo;autre méthode que fournir un code comme spécification. J\u0026rsquo;avais réglé ce sujet en Haskell il y a quelques années et cela a suffi pour qu\u0026rsquo;il soit immédiatement transcrit en PHP. Je pense garder l\u0026rsquo;idée du code dans la spécification dans ce type de cas pour le futur, mais je me questionne sur le nombre de problèmes de ce type existants.\nL\u0026rsquo;autre versant de la même difficulté : quand Claude Code tombe dans un piège propre au framework, s\u0026rsquo;en sortir sans connaissance du domaine est délicat. Il peut tourner longtemps sur la même erreur sans progresser. Ce qui est frappant, c\u0026rsquo;est qu\u0026rsquo;il lui arrive de s\u0026rsquo;en sortir seul par un chemin latéral auquel je n\u0026rsquo;aurais pas pensé — mais c\u0026rsquo;est encore au pilote de repérer le signal de blocage avant que l\u0026rsquo;énergie dépensée ne devienne le vrai problème.\nHallucinations / interprétations # Lors des premiers tests humains, un comportement nous a fortement surpris : tous les jeux produits ont des « comportements par défaut » certes valables au regard des règles, mais inattendus. Par exemple, le code généré déplace automatiquement une ou plusieurs pièces d\u0026rsquo;une manière qui semble être la meilleure dans la majorité des cas, mais cela devrait rester une décision du joueur et il pourrait avoir une stratégie plus élaborée.\nLors des lectures de règles j\u0026rsquo;ai rencontré plusieurs « interprétations hâtives », même sur des règles bien définies.\nCette généralisation semble être un atout pour permettre de développer rapidement. Cela revient cependant à laisser des choix structurants à l\u0026rsquo;IA. Cela se voit rapidement quand il s\u0026rsquo;agit d\u0026rsquo;un jeu, mais semble être un champ de travail complet pour des logiciels plus complexes : quels choix « automatiques » peut-on accepter sur un SaaS qui traite des paies par exemple ? Comment détecter ce qui devrait être défini vs ce que l\u0026rsquo;on peut laisser à l\u0026rsquo;IA ? Je n\u0026rsquo;ai pas d\u0026rsquo;opinion tranchée à ce stade et pense traiter le résultat de l\u0026rsquo;IA comme un premier jet qui nourrit le product discovery.\nUn comportement connexe, moins critique mais récurrent : Claude Code donne parfois des conseils qui seraient tout à fait pertinents pour une équipe humaine — « il vaudrait mieux livrer cette version stable et itérer ensuite », « ce refacto représente plusieurs jours de travail ». Ces recommandations font peu de sens quand la feature en question prend cinq à dix minutes et que la valeur est réelle. J\u0026rsquo;ai l\u0026rsquo;impression que ce biais apparaît surtout quand la demande ressemble à du travail d\u0026rsquo;équipe sérieux — une demande de refacto ou d\u0026rsquo;architecture — plutôt qu\u0026rsquo;à de l\u0026rsquo;exploration. D\u0026rsquo;autres ont noté le même phénomène.\nQuand les règles ne disent rien # Différence essentielle avec la section précédente : ici, l\u0026rsquo;IA n\u0026rsquo;invente pas, le code n\u0026rsquo;est pas en cause. Tout simplement, les règles ne disent rien. Elles sont parfois incomplètes ou ambiguës, et c\u0026rsquo;est normal — un livret de règles n\u0026rsquo;a jamais été écrit pour servir de spécification. C\u0026rsquo;est un document pédagogique destiné à des joueur.euses humain.es qui peuvent porter l\u0026rsquo;ambiguïté dans leur tête, demander autour de la table, ou improviser un compromis. Le code n\u0026rsquo;a aucune de ces options : chaque cas doit être tranché explicitement.\nJ\u0026rsquo;ai donc adopté un workflow simple, précisé au fil des jeux. Le skill demande à Claude de produire trois fichiers distincts plutôt qu\u0026rsquo;un seul :\nRULES.md — reformulation fidèle du PDF, sans interprétation. C\u0026rsquo;est ce qu\u0026rsquo;on peut relire pour vérifier qu\u0026rsquo;aucun élément n\u0026rsquo;a été dévié. ASSUMPTIONS.md — chaque décision d\u0026rsquo;interprétation reçoit un identifiant [Hx] et est référencée dans le code (// [H11] Victoire vérifiée avant action de bloqueur). AUTHOR_QUESTIONS.md — chaque ambiguïté résiduelle devient une question explicite, avec un statut (OPEN, ASSUMED, CLOSED) et une catégorie (RULES-AMBIGUOUS, RULES-MISSING, RULES-IMPLICIT\u0026hellip;). Le document AUTHOR_QUESTIONS.md est envoyé aux auteur.ices. À chaque retour, un statut bascule, parfois une hypothèse [Hx] saute, parfois c\u0026rsquo;est tout un sous-système qui disparaît avant même d\u0026rsquo;avoir été implémenté.\nExemple concret sur Duelly. Le livret mentionne des cartes « Joker » qui pouvaient s\u0026rsquo;appliquer dans plusieurs situations — y compris sur un coup gagnant. Une question simple : « Le Joker s\u0026rsquo;applique-t-il sur un Déplacer gagnant ? ». La réponse des auteurs a été inattendue : « En fait pour tout simplifier, on annule complètement les Jokers. » Effets immédiats : un état du jeu, une colonne en base, un indicateur d\u0026rsquo;UI et une branche de la condition de victoire — tous supprimés avant d\u0026rsquo;avoir été codés. Quelques heures de travail économisées par une question écrite en deux minutes.\nCette partie du workflow n\u0026rsquo;est pas spécifique à l\u0026rsquo;IA : un développeur humain qui adapte un jeu pose les mêmes questions. La différence, c\u0026rsquo;est que le workflow IA force l\u0026rsquo;explicitation. Un humain peut tenir l\u0026rsquo;ambiguïté dans sa tête en attendant que la situation se présente ; un agent ne le peut pas, et c\u0026rsquo;est cette contrainte qui produit la trace écrite, auditable, donc utile pour les auteur.ices.\nConstruction progressive du skill # La construction du skill s\u0026rsquo;est globalement faite en deux parties :\nUne architecture générale avec des comportements, des liens vers les documentations et des « process » (comme commencer par transcrire les règles du PDF vers du markdown) Une construction « réactive », façon registry of regrets, où chaque règle est issue d\u0026rsquo;une correction d\u0026rsquo;incident. J\u0026rsquo;hésite à proposer aux potentiels utilisateurs de pouvoir ajouter leur règle automatiquement : si Claude rencontre une erreur qui pourrait être résolue par l\u0026rsquo;ajout d\u0026rsquo;une règle, on propose à l\u0026rsquo;utilisateur de l\u0026rsquo;amender et d\u0026rsquo;envoyer une PR automatiquement.\nPour prévenir les sujets de taille de contexte, j\u0026rsquo;ai séparé le skill en plusieurs fichiers. J\u0026rsquo;imagine pour le moment qu\u0026rsquo;une course entre l\u0026rsquo;ajout de règles et l\u0026rsquo;augmentation des tailles de contexte des modèles nous laisse de la marge avant d\u0026rsquo;optimiser ce sujet.\nUn mot sur les worktrees git : leur utilisation est vraiment agréable, mais elle se heurte à la petite taille de ces projets. Chaque tâche modifie beaucoup de code commun — les worktrees finissent par attendre les uns les autres, ce qui réduit l\u0026rsquo;intérêt du travail en parallèle.\nExemple de piège # Lors de la réalisation du tic-tac-toe quantique (QTTT), Claude a passé plus d\u0026rsquo;une heure sur une seule erreur, silencieuse, tapie dans l\u0026rsquo;ombre, sournoise\u0026hellip; (on a trop peu l\u0026rsquo;opportunité d\u0026rsquo;utiliser l\u0026rsquo;écriture dramatique dans ce métier. Je profite de cette occasion).\nLorsque BGA Studio traite le modèle de base de données dbmodel.sql (un seul fichier, pas de notion de migrations), il commence par supprimer tous les retours à la ligne à l\u0026rsquo;intérieur des instructions avant d\u0026rsquo;envoyer le résultat à MySQL en une seule chaîne.\n-- Avant suppression des retours à la ligne : CREATE TABLE `t` ( `a` INT NOT NULL, -- première colonne `b` INT NOT NULL, PRIMARY KEY (`a`) ) ENGINE=InnoDB; devient, pour MySQL :\nCREATE TABLE `t` ( `a` INT NOT NULL, -- première colonne `b` INT NOT NULL, PRIMARY KEY (`a`)) ENGINE=InnoDB; MySQL coupe donc l\u0026rsquo;instruction après le début du commentaire, crée la première colonne, retourne success sans même qu\u0026rsquo;un warning arrive jusqu\u0026rsquo;à nous. Le premier symptôme apparaît à l\u0026rsquo;exécution sous la forme d\u0026rsquo;un Unknown column 'b' in 'field list' quand le code tente l\u0026rsquo;accès à cette colonne.\nLa documentation BGA précise « if you use comments, then you must not do it in the same line as the code », ce qui est typiquement la ligne que l\u0026rsquo;on trouve APRÈS avoir compris l\u0026rsquo;erreur. Les humains ont probablement encore un avantage sur les IA sur ce sujet car je n\u0026rsquo;en connais aucun qui commente les lignes de ses requêtes SQL ! Les autres tomberont sur ce problème très vite.\nDeux autres problèmes du même registre — silencieux, fragiles à diagnostiquer — sont apparus pendant l\u0026rsquo;aventure :\ngetCollectionFromDb($sql) indexe le tableau PHP retourné par la première colonne sélectionnée. Si elle n\u0026rsquo;est pas unique, les lignes suivantes écrasent silencieusement les précédentes. SELECT square1, square2 FROM q_moves a perdu la moitié du graphe d\u0026rsquo;intrication. Techniquement un modèle (et probablement un développeur) devrait reconnaître là une API PDO (PHP Data Objects) là où le framework en fait une interprétation propre. Une collision avec un nom de table interne au framework. La documentation officielle liste 4 tables réservées (global, stats, gamelog, player, plus tout préfixe bga_). En testant empiriquement pendant la rédaction de cet article, j\u0026rsquo;en ai trouvé au moins une cinquième : replaysavepoint, sans préfixe bga_, créée par le framework au démarrage. Si vous redéclarez ce nom dans dbmodel.sql, votre schéma est silencieusement écrasé par celui de BGA — exactement le même comportement que pour les 4 tables documentées. Au passage, en faisant ce test, je me suis aussi rendu compte que moves — que j\u0026rsquo;avais cru réservée et préventivement renommée sur QTTT — ne l\u0026rsquo;était pas. C\u0026rsquo;était simplement le bug de commentaires SQL inline raconté plus haut. Le rename moves → q_moves n\u0026rsquo;aura servi à rien, mais il aura inspiré la moitié du [Hx] « ne pas redéclarer une table interne » du skill. Un autre piège silencieux du même genre, mais à un étage différent. Claude Code avait testé toutes les règles d\u0026rsquo;un jeu via la boucle DOM — pose, déplacement, victoire, tout au vert. Au premier test humain, surprise : aucune pièce ne répondait au clic. Le mécanisme de test, qui passe par gameui.ajaxcall pour déclencher les actions du framework, n\u0026rsquo;avait jamais exercé le chemin souris→pièce. La boucle de test certifie ce qu\u0026rsquo;elle teste, et seulement ça : la logique métier était bonne, l\u0026rsquo;interaction ne l\u0026rsquo;était pas. Le test humain reste, pour l\u0026rsquo;instant, le seul à attraper cette catégorie de bug.\nAdaptation graphique # Je m\u0026rsquo;attendais à passer du temps sur l\u0026rsquo;intégration des assets graphiques — c\u0026rsquo;est souvent là que les adaptations BGA deviennent laborieuses (pour moi du moins, ce n\u0026rsquo;est pas ma partie favorite). La réalité a été différente : Claude Code a réalisé toutes les adaptations graphiques de Duelly, y compris l\u0026rsquo;analyse des fichiers source par OCR, sans que j\u0026rsquo;aie à mettre les mains dedans. Je ne saurais compter le temps que ça a pris, mais je dirais ~3 à 4h du début à la fin en comptant les discussions avec l\u0026rsquo;autrice. 80% du travail ayant été fait en moins de 30 minutes.\nUn calibrage utile : avec un outil bien rodé, une autrice particulièrement réactive qui a fourni tous les assets et répondu aux questions de règles, et un jeu de complexité raisonnable, l\u0026rsquo;adaptation complète — code et graphismes — aura pris environ quatre jours à temps plein. Pour des équipes qui font régulièrement ce type d\u0026rsquo;adaptation et ont leur propre process, le gain devrait être considérable. Pour quelqu\u0026rsquo;un qui se lance sans repères, les outils facilitent vraiment le code et l\u0026rsquo;analyse des règles, mais je ne pense pas qu\u0026rsquo;on descende facilement sous une semaine — surtout si les échanges avec l\u0026rsquo;auteur·ice ou les assets graphiques doivent attendre.\nUne limite que je n\u0026rsquo;avais pas anticipée : sur BGA, les traductions ne sont disponibles qu\u0026rsquo;à partir du passage en alpha — impossible de travailler la localisation en amont. Et plus fondamentalement, les illustrations des cartes de Duelly sont entièrement en français. Pour internationaliser vraiment le jeu, il faudrait refaire les assets soit avec un texte neutre ou localisable, soit avec un réel travail pictographique. Ce n\u0026rsquo;est pas dans mon scope d\u0026rsquo;adaptation, mais c\u0026rsquo;est une leçon concrète pour l\u0026rsquo;autrice : un jeu pensé pour l\u0026rsquo;international dès la conception s\u0026rsquo;économise ce chantier d\u0026rsquo;illustration.\nQuelques chiffres # Audit du repo Quantum Tic-Tac-Toe le 2026-04-28 :\n~1080 lignes de code (PHP 679, JS 271, SQL 23, CSS 105) — hors scaffold BGA et fichiers de configuration JSON. ~49 minutes entre le commit initial et le premier fix qui corrige deux bugs sur trois. Le troisième bug — l\u0026rsquo;indexation par première colonne dans getCollectionFromDb — s\u0026rsquo;est manifesté le lendemain matin, ~11h plus tard. Le « premier jeu en ~3h » est donc plausible si on inclut la phase de mise en place avant le commit initial, mais il faut bien comprendre qu\u0026rsquo;il s\u0026rsquo;agit du premier jeu jouable de bout en bout, pas du premier jeu sans aucun bug. 3 bugs corrigés via la boucle de test : commentaires SQL silencieux, collision de nom de table, et getCollectionFromDb. Tous tracés dans les commits, donc vérifiables. ~15 cycles déploiement → test → correction et ~5 interventions humaines (mise en place de la clé SSH, Express Stop sur des tables coincées, reconnexion de l\u0026rsquo;extension navigateur). Ces chiffres mesurent une variante simplifiée des règles de Goff (résolution des victoires simultanées par « lowest maximum subscript » plutôt que par le partage de point décrit dans l\u0026rsquo;article original), avec un skill qui n\u0026rsquo;avait pas encore intégré les leçons des jeux suivants. C\u0026rsquo;est la mesure d\u0026rsquo;une rampe d\u0026rsquo;accès, pas d\u0026rsquo;un débit reproductible ni d\u0026rsquo;une annonce comme « faites n\u0026rsquo;importe quel jeu de plateau en 3 heures ». Je reste cependant impressionné.\nAudit du repo Duelly le 2026-05-04 — jeu complet avec cartes, animations, statistiques et internationalisation :\n~3 025 lignes de code (PHP 1 811, JS 923, CSS 271, SQL 20) — environ 3× le volume de QTTT, pour un périmètre fonctionnel bien plus riche. 94 commits sur 8 jours actifs répartis sur ~3 semaines calendaire (15 avril → 4 mai), avec des creux dus aux échanges avec l\u0026rsquo;autrice et aux sessions de tests humains. **Répartition **: 20 fix, 14 feat, 7 refactor, 15 ui/i18n, 24 chore/docs — reflet d\u0026rsquo;un jeu terminé de bout en bout, pas seulement « qui tourne ». Ces chiffres incluent la passe qualité PHP et l\u0026rsquo;adaptation graphique complète. QTTT mesurait la rampe d\u0026rsquo;accès ; Duelly mesure ce que donne le process une fois rodé.\nConclusion # Un premier travail vraiment intéressant : assez long pour que les pièges sortent du décor et que les bonnes pratiques s\u0026rsquo;installent.\nLes jeux de plateau sur BGA Studio se sont avérés un terrain d\u0026rsquo;entraînement étonnamment précieux : périmètre fonctionnel petit (les règles), framework imposé, validation immédiate (la partie passe ou ne passe pas). Tout ce qui rend un service SaaS pénible à apprivoiser disparaît. Ce qui reste — la spec, les pièges du framework, la boucle de test — est net et visible. Cela m\u0026rsquo;a permis de voir des comportements spécifiques au développement avec Claude Code qui me seraient probablement passés sous le nez sur un projet plus large.\nUne question courante, sans réponse encore : à quoi sert la qualité du code quand un humain ne le lit plus ? J\u0026rsquo;y ai passé du temps pendant le projet — refactos, nommage, réduction de dette — sans être certain que cela facilite les développements IA ultérieurs. La question reste ouverte.\nSur cinq jeux entamés, un seul est terminé de bout en bout : Duelly, en environ quatre jours à temps plein — code, graphismes et animations. L\u0026rsquo;autrice du jeu a été particulièrement réactive tout au long du projet, ce qui a beaucoup compté dans ce délai. La sortie publique du jeu se heurte pour l\u0026rsquo;instant à un deadlock administratif : il faut une inscription sur BGG pour demander une licence BGA, mais BGG souhaite réserver ses pages aux jeux physiques, et l\u0026rsquo;éditeur potentiel attend de voir si le jeu « marche » sur BGA avant d\u0026rsquo;envisager une édition.\nCe déplacement du goulot d\u0026rsquo;étranglement est bien réel : le code n\u0026rsquo;est plus le problème, c\u0026rsquo;est la disponibilité des auteur·ices et la coordination autour des tests humains qui ralentissent la chaîne.\nLe skill claude-code-bga est publié. J\u0026rsquo;espère des retours, des cas qui le cassent, des règles à ajouter, et plus largement des commentaires sur la démarche elle-même — c\u0026rsquo;est précisément le type de matière qui a fait évoluer le skill jusqu\u0026rsquo;ici.\n","date":"29 janvier 2026","externalUrl":null,"permalink":"/blog/posts/skill-claude-code-bga/","section":"Articles","summary":"Comment fabriquer un skill qui livre vraiment ? Comment construire une boucle de test qui ferme ? Que décide un agent à votre place quand la spec se tait ? L’adaptation de jeux de société sur Board Game Arena m’a servi de cas d’étude — périmètre borné, framework contraint, validation immédiate. Un exemple : 10 avril 2026, à l’aide de ce skill j’ai pu laisser Claude partir d’une règle du jeu (tic-tac-toe quantique) pour obtenir un jeu complet en moins de 3 heures, sans écrire une seule ligne de code à la main. Quatre jeux plus tard, voici ce que j’en ai retenu.\n","title":"Un skill Claude Code qui délivre, à l'épreuve de quatre jeux","type":"posts"}]