hrxdev
Français

Comment c’est fait

Un développeur, un assistant de programmation IA, et beaucoup de règles vérifiées par la machine.

Par Nick

J’écris Prison Life avec Claude Code (l’agent de programmation d’Anthropic). Je décide de ce qu’est le jeu et des options que nous prenons ; l’assistant tape l’essentiel. Comme personne ne relit le code à part moi et un agent IA de relecture, je m’appuie sur l’automatisation : les règles sont imposées par des vérifications automatiques et par le build, pas par les bonnes intentions.

Délégation

La session principale de Claude Code planifie le travail et tient le suivi des tâches, la trace écrite des choix de conception et l’historique des modifications. Elle n’écrit pas de code : elle confie chaque changement, même minuscule, à un agent IA spécialisé. Chacun a sa propre définition écrite qui fixe son rôle et son modèle.

RôleNiveau de modèleTravail
ArchitectureOpusmodèle de données, tick, threads, recherche de chemin, décisions
Code de simulationOpussystèmes de simulation, IA des personnages, boucles critiques
PerformanceOpusprofilage, régressions du banc d’essai
Relecture (lecture seule)Opusrelit un diff ; ne peut pas modifier de fichiers
Client et outilsSonnetclient Godot, interface, outils
TestsSonnettests à partir des critères d’acceptation
Données de contenuSonnetdéfinitions JSON selon un schéma
Recherche, exécution des vérificationsHaikurecherche dans le code ; exécution des vérifications et résumé des échecs

Le travail difficile va au modèle le plus puissant, le travail de routine aux moins chers. Si un agent IA moins cher échoue deux fois aux vérifications, la tâche monte d’un niveau ; si le niveau le plus élevé échoue deux fois, il s’arrête et me demande.

Des hooks qui disent non

Les hooks de Claude Code sont des scripts qui s’exécutent autour des actions de l’assistant. Les miens imposent trois règles :

Ils protègent contre les erreurs, pas contre un contournement délibéré : une astuce de shell obstinée peut passer outre, et l’un des hooks voit une vérification rouge chez un agent IA sans pouvoir le retenir (le hook d’arrêt de la session principale l’attrape quand même). Je préfère le dire clairement.

Décisions écrites et vérifications

Le noyau déterministe

La simulation vit dans une bibliothèque .NET pure, sans aucune référence à Godot ; le client Godot se contente de lire son état et d’envoyer des commandes. Le noyau suit des règles fixes : le monde ne change que par des commandes, le temps est fait de ticks entiers, l’aléatoire ne vient que des générateurs à graine du monde. La même graine et le même journal de commandes doivent donner le même monde. Ces règles sont vérifiées par le compilateur et par des tests, pas seulement par la relecture ; voir le devlog #1 pour savoir comment, et le devlog #2 pour le monde, les sauvegardes et les replays.

Architecture du noyau de simulationLes commandes entrent dans une file. Chaque tick exécute la phase 0 (commandes, écrites dans le journal des commandes), la phase 1 (systèmes dans un ordre fixe) et la phase 2 (fin du tick). Le journal des commandes et l’état du monde, avec sa carte de tuiles et ses flux aléatoires à graine, alimentent le hash d’état. Commandes entrantes joueur, tests, scénarios File de commandes L’ajout est thread-safe Tick T (un thread, temps entier) Phase 0 : commandes sérialiser, horodater (tick, n°) Validate, écrire au journal, Apply les commandes rejetées aussi Phase 1 : systèmes dans un ordre fixé dans le code (aucun enregistré pour l’instant) Phase 2 : fin du tick changements structurels (inutilisés) puis compteur de ticks + 1 Journal des commandes chaque commande, avec son résultat octets + empreinte replay = graine + journal État du monde graine, tick carte de tuiles (niveaux) 4 flux RNG issus de la graine : Commands, Needs, Ai, Events Hash d’état graine, tick, carte, flux RNG, journal
Le noyau de simulation tel qu’il existe aujourd’hui. Il n’y a encore ni systèmes ni personnages ; le monde contient une carte de tuiles à plusieurs niveaux, et le hash couvre la carte autant que ce qui est dessiné.

L’objectif de conception est jusqu’à 1 000 détenus et membres du personnel à 20 ticks par seconde. C’est un objectif : il n’y a pas encore de personnages, donc le lanceur de bancs d’essai existe, mais rien n’a été mesuré à cette échelle.