Felt Dojo

Felt Dojo: Le poker en duplicate

Complément à la présentation du projet. Ce que c'est, pourquoi c'est difficile, ce que ça a mesuré, et ce que ça ne peut pas faire.

Traduit de la version anglaise.


L'idée

Le poker est un jeu où l'on peut bien jouer et perdre, à répétition, longtemps. C'est ce qui le rend digne d'être joué et c'est ce qui le rend presque impossible à apprendre. Si vous et moi jouons à deux tables différentes toute une soirée et que vous finissez gagnant et moi perdant, nous n'avons rien appris sur lequel des deux a mieux joué.

Le bridge en duplicate a résolu ça en 1914 : distribuez les mêmes mains à toutes les tables, et comparez les joueurs entre eux sur des cartes identiques. La chance des cartes cesse de compter parce que tout le monde reçoit la même chance.

Le poker en duplicate applique cela au Hold'em. Deux joueurs ou plus jouent la série de mains identique : mêmes cartes privatives, mêmes flops, turns et rivers, mêmes bots aux mêmes sièges, mêmes blindes, mêmes tapis de départ. La seule chose qui diffère, c'est la façon dont chacun les joue. Vous jouez à votre rythme, de façon asynchrone ; personne n'a besoin d'être en ligne en même temps.

À ma connaissance, personne d'autre n'a construit ça pour le poker.

Ce que vous obtenez concrètement

Un classement avec trois scores, parce qu'ils répondent à des questions différentes :

Une revue main par main, qui est le vrai produit. Le classement est l'accroche ; la revue est la raison d'être de la fonctionnalité. Elle trouve la première décision où votre ligne et celle d'un autre joueur ont divergé, s'ouvre exactement à cet instant avec l'historique identique replié au-dessus, puis déroule les deux lignes côte à côte jusqu'à leurs fins distinctes. Elle fait aussi ressortir les mains qui ont décidé le match, celles où quelqu'un a fini le plus loin de tous les autres (ce qui est rarement le plus gros pot), les mains où vous avez été le seul à coucher ou le seul à engager votre tapis, et sur quelle street vos mains se gagnent et se perdent le plus souvent.

Une comparaison de styles entre tous les participants : à quelle fréquence chacun a joué une main, a relancé le premier, a 3-betté, est allé au showdown, et avec quelle agressivité chacun a misé, sur des donnes identiques.

Les comptes gratuits ont droit à un match de 24 mains en 6-max où cinq personnes peuvent s'asseoir, entièrement compté avec la revue complète. Si tu le joues seul, ta partie est comparée à une seule ligne de référence Intermédiaire, pour que le match se termine quand même par un classement. Plus ajoute la référence Avancée, des matchs jusqu'à 1 000 mains, de 2 à 9 sièges, des blindes personnalisées, des échéances plus longues, et des champs de dix joueurs plutôt que cinq.

Vous faites venir des gens soit en leur envoyant une invitation par courriel, soit en leur envoyant un lien de partage. Les deux passent par la même porte, de sorte qu'un match dont le champ est fermé ne peut être rejoint par aucune des deux voies, ce qui compte, parce qu'un lien de partage ne laisse aucune trace qu'on pourrait vérifier autrement.

Pourquoi c'est plus difficile qu'il n'y paraît

Toute la fonctionnalité repose sur une seule affirmation : chaque participant a affronté exactement la même chose. Si c'est faux quelque part, tous les chiffres du classement sont dénués de sens, et ça échoue silencieusement, parce qu'une décision de bot légèrement différente ressemble simplement à une main légèrement différente.

Figer le paquet est la moitié facile. Une permutation complète de 52 cartes est générée par main et distribuée par index fixe, de sorte qu'un joueur qui couche préflop ne peut pas décaler la turn comme il le ferait si les cartes étaient tirées à la demande.

Les bots étaient la moitié difficile, et le plan initial l'a sous-estimée d'un ordre de grandeur. La conception supposait que le risque se trouvait dans un seul tirage aléatoire par main. Un audit mené avant que quoi que ce soit ne soit construit a mesuré la vérité : en rejouant des mains identiques avec des entrées identiques, 15 % des mains entièrement Intermédiaires divergeaient, 37 % des mains entièrement Débutantes. Le plan avait estimé 2 %. La cause était les estimateurs d'équité Monte-Carlo, qui échantillonnent quelques centaines de déroulements par décision et n'avaient aucune source d'aléatoire contrôlée.

Pire, et totalement invisible : la table d'équité préflop était calculée par processus et échantillonnée à la première utilisation, ce qui la faisait dériver jusqu'à 2,4 points d'équité entre deux redémarrages du serveur. Deux personnes qui jouaient le même match de part et d'autre d'un déploiement affrontaient des adversaires mesurablement différents, et rien nulle part ne l'aurait signalé.

Les deux sont réglés. Chaque tirage aléatoire d'un bot est maintenant adressé par ses coordonnées : quelle main, quel siège, quelle street, quel rang d'action pour ce siège, plutôt que tiré d'un flux, parce qu'un flux se désynchronise dès qu'une ligne de joueur crée une décision de plus. La table préflop est une ressource versionnée de 7 605 entrées plutôt que quelque chose que chaque serveur calcule pour lui-même.

Et le test évident pour cela ne fonctionne pas. Rejouer une main scriptée dans une JVM fraîche passe même quand la table d'équité figée est supprimée, parce qu'une main scriptée fait arriver les clés de cache dans le même ordre dans tous les processus. Le test qui fonctionne vraiment lit l'équité préflop directement, à travers plusieurs processus : sans la table versionnée, trois JVM donnent trois réponses différentes ; avec elle, la même réponse trois fois. Cette distinction a été trouvée en cassant délibérément le correctif et en regardant le test rester au vert.

Ce que ça a mesuré, et pourquoi ça s'est rentabilisé avant même d'être livré

Le poker en duplicate a été construit pour permettre aux joueurs de se comparer. Son premier usage réel a été de mesurer les bots, et il a immédiatement trouvé un défaut qui était en production depuis des mois.

Jouer la situation identique de quatre façons (un humain plus trois références de bots, mêmes cartes, mêmes sièges) rend le comportement d'un bot directement comparable comme aucune statistique agrégée ne le fait. Une série de 300 mains a produit 3 357 décisions préflop, et parmi elles la découverte que face à une relance avant le flop, le bot Intermédiaire couchait 92 % du temps et 3-bettait presque aussi souvent qu'il suivait. Il n'avait aucune range de call ; le niveau ne pouvait que coucher ou re-relancer. Une seule range absente expliquait tous les symptômes qui avaient été remarqués séparément sans jamais être reliés : le taux de call de 4 %, un limp qui couchait 100 % du temps face à toute relance, une courbe de prix plate et légèrement inversée, et un excès de bluff que l'excès de fold de la même table rendait rentable.

Corrigé, et vérifié deux fois sur des donnes indépendantes :

face à une relance préflopavantaprès
couche / suit / relance92,0 / 4,2 / 3,881,7 / 16,0 / 2,4
rapport call : relance1,1 : 16,7 : 1
continue après avoir limpé0,4 %17,2 %
voit un flop9,6 %19,9 %

La fonctionnalité n'a pas créé ce défaut ; le comportement en cash et en tournoi a été vérifié inchangé. Elle l'a rendu visible.

La limite honnête : ce qu'un match court peut et ne peut pas vous dire

C'est la partie que je voudrais voir énoncée clairement si quelqu'un d'autre faisait ces affirmations.

La plupart des mains de poker sont identiques quel que soit celui qui les joue. Dans un vrai match de 24 mains en tête-à-tête, 20 des 24 se sont terminées de la même façon : les deux joueurs ont couché, rien ne s'est passé. Ces mains ne contribuent exactement rien à une comparaison, donc l'échantillon effectif est le taux de divergence multiplié par le nombre de mains, pas le nombre de mains.

Conséquences, mesurées plutôt que supposées :

Rien de tout cela n'est un défaut du format ; la variance en jetons bruts sans donnes appariées serait bien plus grande. C'est une limite qui mérite d'être dite fort, pour que personne ne lise le classement d'un match de 24 mains comme un verdict. Le classement est l'accroche ; les décisions sont l'instrument, et ce sont elles qui ont rendu concluante chaque découverte sur les bots ci-dessus, à partir d'une seule série.

L'intégrité, et le seul trou qui ne peut pas être bouché

Les résultats, les historiques de mains et même la progression restent scellés jusqu'à la clôture du match :

Le scellement avait une aspérité : un match s'ouvrait à son échéance, pas quand tout le monde avait fini. Un match que quatre amis avaient tous joué le même soir pouvait donc rester scellé et non compté pendant jusqu'à une semaine. Trouvé lors du premier test de jeu en production ; corrigé et déployé le 2026-08-19 : un match se clôt désormais dès que plus personne ne peut se joindre et que plus personne n'est en cours, si bien que le pire cas vécu par un joueur est passé de sept jours à environ cinq minutes. La raison pour laquelle ce n'était pas un changement d'une ligne mérite d'être dite : la version évidente (simplement regarder les matchs plus tôt) confie à une routine un match qui n'est pas réellement échu, routine qui fait perdre par forfait tous ceux qui restent en cours, ce qui brûlerait silencieusement des joueurs à qui il restait des jours. Le chemin anticipé est donc une route séparée qui ne peut structurellement pas atteindre la boucle de forfait, et chacun de ses tests négatifs a été vérifié en échec contre la version naïve avant la livraison.

Le trou que la censure ne peut pas boucher, trouvé en test de jeu : chaque participant joue la donne identique, donc quiconque a joué la main 12 peut la décrire complètement à quelqu'un qui ne l'a pas jouée. Mêmes cartes, mêmes sièges, mêmes bots, aucun showdown nécessaire. Un participant est lui-même la fuite. Le duplicate asynchrone est donc une frontière de confiance : très bien entre amis, et pas une base pour du jeu classé. Le correctif structurel, c'est le jeu simultané, qui est exactement ce sur quoi repose le bridge en duplicate ; c'est spécifié mais pas construit.

Où ça en est

Construit sur neuf jalons plus un banc de référence pour l'opérateur et un banc de sondes pour les bots, et en ligne sur feltdojo.com. Testé en charge avec des séries simultanées (2026-08-19, sur la machine de développement) : 12 et 24 séries en parallèle se comportent à l'identique (latence d'action p95 de 7 ms dans les deux cas) ; le plafond refuse proprement la 25e, et les conditions identiques ont tenu pour chaque participant, ce qui est la promesse que le format ne peut pas rompre. La réserve honnête : c'était la machine de développement, donc cela dit « la conception tient », pas « voici ce que la machine de production peut prendre ».

Ce qui reste ouvert, et qui relève du travail produit plutôt que de défauts :

La suite

1. La refonte du score en tête-à-tête : à deux joueurs, le classement relatif est arithmétiquement identique aux jetons bruts, donc il ne mérite pas sa place ; les points de match passent aux seules mains divergentes, et le nombre de divergences devient une statistique de premier plan plutôt qu'une note de bas de page. 2. Les totaux de temps de réflexion, et le classement des mains divergentes au-delà du tête-à-tête.

(La clôture anticipée, compter un match dès que plus rien ne peut lui arriver, était en tête de cette liste, et a été livrée le 2026-08-19.)

La seule chose délibérément non planifiée est un correctif au problème du participant-qui-est-la-fuite ci-dessus. Le jeu simultané le fermerait, et le jeu asynchrone est la raison pour laquelle qui que ce soit peut utiliser cette fonctionnalité.