hrxdev
Русский

Как это сделано

Один разработчик, ИИ-помощник для программирования и множество правил, которые проверяет машина.

Автор: Nick

Prison Life пишу я вместе с Claude Code (агентом для программирования от Anthropic). Я решаю, какой будет игра и какие варианты мы выбираем; основную часть набора текста делает помощник. Поскольку код никто не просматривает, кроме меня и ИИ-агента для ревью, я опираюсь на автоматизацию: правила обеспечиваются автоматическими проверками и сборкой, а не благими намерениями.

Делегирование

Основная сессия Claude Code планирует работу и ведёт трекер задач, письменную запись проектных решений и историю изменений. Код она не пишет: каждое изменение, даже крошечное, она передаёт специализированному ИИ-агенту. У каждого есть собственное письменное описание, фиксирующее его роль и модель.

РольУровень моделиЗадача
АрхитектураOpusмодель данных, тик, потоки, поиск пути, решения
Код симуляцииOpusсистемы симуляции, ИИ персонажей, горячие циклы
ПроизводительностьOpusпрофилирование, регрессии бенчмарка
Ревью (только чтение)Opusпроверяет диф; файлы править не может
Клиент и инструментыSonnetклиент на Godot, интерфейс, инструменты
ТестыSonnetтесты по критериям приёмки
Данные контентаSonnetопределения в JSON по схеме
Поиск, запуск проверокHaikuпоиск по коду; запуск проверок и краткое изложение сбоев

Сложная работа достаётся самой сильной модели, рутинная – более дешёвым. Если более дешёвый ИИ-агент дважды проваливает проверки, задача переходит на уровень выше; если дважды проваливается высший уровень, он останавливается и спрашивает меня.

Хуки, которые говорят «нет»

Хуки Claude Code – это скрипты, которые запускаются вокруг действий помощника. Мои обеспечивают три правила:

Это защита от ошибок, а не от намеренного обхода: упорный трюк с командной оболочкой их обойдёт, а один из хуков видит красную проверку у ИИ-агента, но не может его удержать (стоп-хук основной сессии всё равно её поймает). Я предпочитаю сказать об этом прямо.

Письменные решения и проверки

Детерминированное ядро

Симуляция живёт в обычной библиотеке .NET без ссылок на Godot; клиент на Godot только читает её состояние и отправляет команды. Ядро подчиняется жёстким правилам: мир меняется только командами, время – целые тики, случайность берётся только из генераторов мира с сидом. Один и тот же сид и один и тот же журнал команд должны давать один и тот же мир. Эти правила проверяются компилятором и тестами, а не только ревью; как именно, см. девлог №1, а о мире, сохранениях и повторах – девлог №2.

Архитектура ядра симуляцииКоманды попадают в очередь. Каждый тик выполняет фазу 0 (команды, записываются в журнал команд), фазу 1 (системы в фиксированном порядке) и фазу 2 (конец тика). Журнал команд и состояние мира с картой клеток и случайными потоками с сидом формируют хеш состояния. Входящие команды игрок, тесты, сценарии Очередь команд Добавление потокобезопасно Тик T (один поток, целое время) Фаза 0: команды сериализация, метка (тик, номер) проверка, запись в журнал, применение отклонённые тоже попадают в журнал Фаза 1: системы порядок фиксирован в коде (пока ни одной) Фаза 2: конец тика структурные изменения (пока не нужны) затем счётчик тиков + 1 Журнал команд каждая команда с результатом байты + дайджест повтор = сид + журнал Состояние мира сид, тик карта клеток (уровни) 4 потока ГСЧ из сида: Commands, Needs, Ai, Events Хеш состояния сид, тик, карта, потоки ГСЧ, дайджест журнала
Ядро симуляции в его нынешнем виде. Систем и персонажей пока нет; в мире есть карта клеток с уровнями, а хеш покрывает карту, а не только то, что нарисовано.

Расчётная цель – до 1000 заключённых и сотрудников при 20 тиках в секунду. Это цель: персонажей пока нет, так что запускатель бенчмарков существует, но в таком масштабе ничего не измерялось.