almdev Разработка с ИИ

От сценария с Codex к игровому коду с Claude Code
Передача условий и последствий между сюжетной и технической работой

Как передать сценарий в программирование с Claude Code: проектные skills, проверяемые условия, повтор команды и человеческая приёмка смысла выбора.

Подкатегория: Браузерная игра

Чтение
4 мин
Технологии / версии
AI-разработка · Laravel · Браузерная игра
Серия
Браузерная игра с ИИ · часть 3 из 6
24 сен 2026 · 4 мин · 11 просмотров · Практика
Пустая деревянная пристань над серой рекой
Браузерная игра 09/2026

Концепт игры я обсуждал и дорабатывал в ChatGPT. Затем попросил подготовить промпт для Codex и продолжил с ним работу над сюжетом и изображениями. Для программирования использовал Claude Code. Самая важная передача между этими занятиями происходила там, где авторская фраза должна была стать исполняемым правилом.

Открыть игру «Осквернённый Грааль: Ненаписанная легенда».

«После разговора открыть дорогу и изменить отношение персонажа» понятно сценаристу, но недостаточно разработчику. Нужно определить событие, состояние, условие и последствия. Разберём технический этап 21 сентября: какой контекст проект задавал кодовому агенту и как проверялся полученный результат. Распределение инструментов подтверждено мной как автором; конкретные решения ниже — задачами и кодом.

Передать сценарий вместе с границами реализации

В NAR-002 прямо зафиксировано: авторский каталог не импортируется существующим загрузчиком. Значит, Claude Code нельзя было поручать лишь «подключить готовый JSON». Часть условий записана словами; составные операции требуется разложить, а отсутствующие типы сначала реализовать.

Для такого этапа в проекте подготовлены module-architecture и developer. Первый связывает состояние кампании, атомарную команду и неизменяемый релиз. Второй предписывает пройти путь от HTTP до домена и проекции, проверить вход и не доверять цене или эффектам из браузера. Это содержание инструкций, а не восстановленный журнал их чтения агентом.

В контекст конкретной задачи входят выбранные сцены, текущий реестр, загрузчик и существующие тесты. Весь сюжет повторять не требуется; зато нужно передать смысл условия. Если авторское слово «отношение» допускает несколько трактовок, выбор шкалы нельзя спрятать в техническую реализацию.

Разбить работу ИИ на проверяемые изменения

Учебная реконструкция поручения по этому контракту выглядит так:

Переведи выбранную сцену в существующий формат контента.
Для каждого условия и эффекта найди поддержку в реестре и исполнителе.
Неподдерживаемую операцию назови отдельно; не создавай условный тип,
который загрузчик примет, а движок проигнорирует.
Сохрани смысл выбора, цену, границу знания и версию старого сохранения.
Верни изменённые файлы, проверки и нерешённые авторские вопросы.

Такое поручение оставляет программирование агенту, но делает видимыми решения, которые должен принять человек. Возможность написать обработчик не означает разрешения изменить сюжетный исход. После кода нужно вернуться к исходной сцене и проверить, что реализована именно она.

Зачем нужен закрытый набор правил

В классе условий используется явный реестр типов. У каждого указаны обязательные поля; неизвестный тип вызывает ошибку. Условия можно соединять через all, any и not, но возможность композиции не разрешает добавлять произвольные новые операции.

Ниже короткий фрагмент из проверки одного условия. Он показывает именно защитную границу, а не весь алгоритм исполнения:

foreach (self::TYPES[$type] ?? throw new RuleViolation('Неизвестный тип условия: '.$type) as $field) {
    if (! array_key_exists($field, $condition)) {
        throw new RuleViolation('Условие '.$type.' без поля '.$field);
    }
}

У сравнения также есть ограничение типов: строку и число нельзя молча считать равными, а числовой оператор нельзя применить к произвольному значению. Для контента, который может готовить помощник, такой отказ полезнее попытки «догадаться», что имелось в виду.

В отчёте этапа зафиксированы 25 типов условий и 35 типов эффектов. Это размер реализованного на тот момент реестра, а не обещание, что любое авторское пожелание уже выражается готовой командой.

Проверить неприятный повтор, а не только удачный ход

В StoryService результат команды ищется до проверки ожидаемой версии. Это важная деталь при приёмке кода Claude Code: первый запрос мог завершиться, а ответ потеряться. Повтор с тем же идентификатором возвращает прежний результат; другое содержимое под тем же ID вызывает конфликт.

Принадлежность кампании, блокировка строки, загрузка закреплённого релиза, изменение состояния и запись результата соединены в одном серверном процессе. Архитектура здесь служит доказательством ограничения, заданного агенту: повтор не становится вторым ходом, чужое сохранение не меняется, частичный сбой не списывает время отдельно от последствия.

Проверка должна включать исходное состояние и повтор одной команды. Фраза исполнителя «добавлена идемпотентность» не заменяет наблюдения, что состояние после повтора осталось прежним. Аналогично наличие хеша контента ещё нужно связать с загрузкой именно того релиза, на который ссылается кампания.

Почему роли не равны доказанным субагентам

В локальном пакете backend-laravel и frontend-vue получают разные обязанности. Серверный исполнитель меняет правило, интерфейсный показывает доступный выбор и отказ. Общий контракт — серверная проекция и команда с ID/revision. Наличие двух файлов не доказывает, что в этом этапе работали две отдельные сессии: журнал такого запуска не найден.

Для повторения процесса это всё же полезная заготовка. Сначала согласовать контракт, затем раздавать независимые изменения, а после соединения проверить полный путь. Нельзя заставлять интерфейсного помощника угадывать ещё не принятое серверное решение.

Что я должен принять сам

CORE-004 фиксирует RegistryTest, StoryCampaignTest и сверку каталога. Это исторический результат этапа; при подготовке статьи проверки заново не запускались. У кода есть машинные основания для приёмки, у сюжета — человеческие: обещанная цена, понятный результат и отсутствие случайно раскрытой тайны.

Клиенту передаётся доступная часть истории, а не закрытые авторские условия. Скрыть секрет стилем недостаточно, если он уже пришёл в ответе. Поэтому я бы принимал такое изменение по паре: исполненное правило и фактический ответ браузеру. После локальных проверок остаётся пройти связанные главы — этому посвящён разбор проверки нелинейной истории.

Серия

Браузерная игра с ИИ

#ai-development #laravel #browsergame