hrxdev
Italiano

Come è fatto

Uno sviluppatore, un assistente di programmazione basato sull’IA e molte regole verificate dalla macchina.

Di Nick

Prison Life lo scrivo io insieme a Claude Code (l’agente di programmazione di Anthropic). Io decido che cos’è il gioco e quali strade prendiamo; l’assistente fa gran parte della digitazione. Poiché nessuno rivede il codice a parte me e un agente IA di revisione, mi affido all’automazione: le regole sono imposte da controlli automatici e dalla build, non dalle buone intenzioni.

Delega

La sessione principale di Claude Code pianifica il lavoro e tiene il task tracker, il registro scritto delle scelte di design e la cronologia delle modifiche. Non scrive codice: affida ogni modifica, anche minima, a un agente IA specializzato. Ognuno ha una propria definizione scritta che ne fissa il ruolo e il modello.

RuoloLivello di modelloCompito
ArchitetturaOpusmodello dei dati, tick, thread, pathfinding, decisioni
Codice di simulazioneOpussistemi di simulazione, IA dei personaggi, cicli critici
PrestazioniOpusprofilazione, regressioni del benchmark
Revisione (sola lettura)Opusrivede un diff; non può modificare file
Client e strumentiSonnetclient Godot, interfaccia, strumenti
TestSonnettest a partire da criteri di accettazione
Dati dei contenutiSonnetdefinizioni JSON a partire da uno schema
Ricerca, esecuzione dei controlliHaikuricerca nel codice; esecuzione dei controlli e riassunto degli errori

Il lavoro difficile va al modello più forte, quello di routine ai più economici. Se un agente IA più economico fallisce i controlli due volte, il compito sale di un livello; se fallisce due volte anche il livello più alto, si ferma e chiede a me.

Hook che dicono di no

Gli hook di Claude Code sono script che girano attorno alle azioni dell’assistente. I miei impongono tre regole:

Proteggono dagli errori, non da un aggiramento deliberato: un trucco di shell ben determinato può aggirarli, e uno degli hook vede un controllo rosso in un agente IA ma non può trattenerlo (l’hook di arresto della sessione principale lo intercetta comunque). Preferisco dirlo chiaramente.

Decisioni e controlli per iscritto

Il nucleo deterministico

La simulazione vive in una semplice libreria .NET senza riferimenti a Godot; il client Godot si limita a leggerne lo stato e a inviare comandi. Il nucleo segue regole fisse: il mondo cambia solo tramite comandi, il tempo è misurato in tick interi, la casualità proviene solo dai generatori con seed del mondo. Lo stesso seed e lo stesso registro dei comandi devono dare lo stesso mondo. Queste regole sono verificate dal compilatore e dai test, non solo dalla revisione; vedi il devlog #1 per capire come, e il devlog #2 per il mondo, i salvataggi e i replay.

Architettura del nucleo della simulazioneI comandi entrano in una coda. Ogni tick esegue la fase 0 (comandi, scritti nel registro dei comandi), la fase 1 (sistemi in ordine fisso) e la fase 2 (fine del tick). Il registro dei comandi e lo stato del mondo, con la sua mappa di tessere e i suoi flussi casuali con seed, alimentano l’hash dello stato. Comandi in ingresso giocatore, test, scenari Coda dei comandi L’accodamento è thread-safe Tick T (un thread, tempo intero) Fase 0: comandi serializza, marca (tick, seq.) Convalida, scrivi nel registro, applica anche i comandi rifiutati sono registrati Fase 1: sistemi ordine fisso stabilito nel codice (nessuno registrato ancora) Fase 2: fine del tick modifiche strutturali (non ancora usate) poi contatore dei tick + 1 Registro dei comandi ogni comando, con il suo risultato byte di rete + digest replay = seed + registro Stato del mondo seed, tick mappa di tessere (livelli) 4 flussi RNG derivati dal seed: Commands, Needs, Ai, Events Hash dello stato seed, tick, mappa, flussi RNG, digest del registro
Il nucleo della simulazione così com’è oggi. Non ci sono ancora sistemi né personaggi; il mondo contiene una mappa di tessere con livelli, e l’hash copre la mappa oltre a ciò che viene disegnato.

L’obiettivo di progetto è fino a 1.000 detenuti e dipendenti a 20 tick al secondo. È un obiettivo: non ci sono ancora personaggi, quindi il benchmark runner esiste ma nulla è stato misurato a quella scala.