hrxdev
Português

Como é feito

Um desenvolvedor, um assistente de programação com IA e muitas regras verificadas por máquina.

Por Nick

Prison Life é escrito por mim junto com o Claude Code (o agente de programação da Anthropic). Eu decido o que é o jogo e quais caminhos seguimos; o assistente faz a maior parte da digitação. Como ninguém revisa o código além de mim e de um agente de IA de revisão, eu me apoio na automação: as regras são impostas por verificações automáticas e pelo build, não por boas intenções.

Delegação

A sessão principal do Claude Code planeja o trabalho e mantém o gerenciador de tarefas, o registro escrito das decisões de design e o histórico de mudanças. Ela não escreve código: entrega toda mudança, até a menor, a um agente de IA especializado. Cada um tem sua própria definição escrita, que fixa seu papel e seu modelo.

PapelNível de modeloTarefa
ArquiteturaOpusmodelo de dados, tick, threads, busca de caminho, decisões
Código de simulaçãoOpussistemas de simulação, IA dos personagens, laços críticos
DesempenhoOpusprofiling, regressões de benchmark
Revisão (somente leitura)Opusrevisa um diff; não pode editar arquivos
Cliente e ferramentasSonnetcliente em Godot, interface, ferramentas
TestesSonnettestes a partir de critérios de aceitação
Dados de conteúdoSonnetdefinições JSON a partir de um esquema
Busca, execução de verificaçõesHaikubusca no código; executar verificações e resumir as falhas

O trabalho difícil vai para o modelo mais forte, o de rotina para os mais baratos. Se um agente de IA mais barato falha nas verificações duas vezes, a tarefa sobe um nível; se o nível mais alto falha duas vezes, ele para e me pergunta.

Hooks que dizem não

Os hooks do Claude Code são scripts que rodam em volta das ações do assistente. Os meus impõem três regras:

Isso protege contra erros, não contra burla deliberada: um truque de shell bem determinado consegue contornar, e um dos hooks vê uma verificação vermelha num agente de IA, mas não consegue segurá-lo (o hook de parada da sessão principal ainda o pega). Prefiro dizer isso com clareza.

Decisões e verificações por escrito

O núcleo determinístico

A simulação vive em uma biblioteca .NET sem nenhuma referência a Godot; o cliente em Godot só lê o estado dela e envia comandos. O núcleo segue regras fixas: o mundo muda apenas por comandos, o tempo é medido em ticks inteiros, a aleatoriedade vem somente dos geradores com semente do mundo. A mesma semente e o mesmo registro de comandos devem dar o mesmo mundo. Essas regras são verificadas pelo compilador e pelos testes, não só pela revisão; veja o devlog #1 para saber como, e o devlog #2 para o mundo, os saves e os replays.

Arquitetura do núcleo da simulaçãoOs comandos entram em uma fila. Cada tick executa a fase 0 (comandos, gravados no registro de comandos), a fase 1 (sistemas em ordem fixa) e a fase 2 (fim do tick). O registro de comandos e o estado do mundo, com seu mapa de blocos e seus fluxos aleatórios com semente, alimentam o hash do estado. Entrada de comandos jogador, testes, cenários Fila de comandos Enfileirar é thread-safe Tick T (uma thread, tempo inteiro) Fase 0: comandos serializar, marcar (tick, seq.) Validar, gravar no registro, aplicar comandos rejeitados também são registrados Fase 1: sistemas executam em ordem fixa definida no código (nenhum registrado ainda) Fase 2: fim do tick mudanças estruturais (ainda sem uso) depois contador de ticks + 1 Registro de comandos cada comando, com seu resultado bytes de rede + resumo replay = semente + registro Estado do mundo semente, tick mapa de blocos (níveis) 4 fluxos RNG a partir da semente: Commands, Needs, Ai, Events Hash do estado semente, tick, mapa, fluxos RNG, resumo do registro
O núcleo da simulação como existe hoje. Ainda não há sistemas nem personagens; o mundo guarda um mapa de blocos com níveis, e o hash cobre o mapa além do que é desenhado.

A meta de projeto é até 1.000 detentos e funcionários a 20 ticks por segundo. É uma meta: ainda não há personagens, então o executor de benchmark existe, mas nada foi medido nessa escala.