Генерация Adventure Contract из HostPreferences и AdventureDraft
- Status:
complete - Outcome:
pass - Started: 2026-07-25
- Updated: 2026-07-25
- Research ID:
2026-07-25-adventure-contract-generation
Проверяемый вопрос#
Можно ли детерминированно объединить недоверенный, жанрово-нейтральный
HostPreferences и предложенный planner-ом AdventureDraft в исполнимый
AdventureContract, который:
- отделяет пожелания хоста от канонических story facts;
- задаёт сцены, ветвления, triggers, clocks, endings и fail-forward;
- ограничивает импровизацию модели;
- отклоняет битые ссылки и тупиковые failure-переходы;
- не предполагает fantasy, D&D, Knave или чужой IP?
Почему решение нужно сейчас#
AI GameMaster не может сочинять канон во время применения хода. До интеграции rules/state ядра нужен формат, который превращает творческий ввод хоста в версионированный и проверяемый сценарный граф. Без этой границы невозможно доказать, что narration не меняет факты, условия финала или доступ к секретам.
Scope#
- Контракты
HostPreferences,AdventureDraftиAdventureContract. HostPreferencesсодержит только творческий brief, session envelope и content boundaries; сцены и факты остаются в неавторитетном draft.- Детерминированный compile boundary без LLM и внешних сервисов.
- Story facts с visibility и запретом прямой мутации.
- Characters, scenes, typed exits, triggers, clocks и ending states.
- Fail-forward для каждого failure exit.
- Improvisation envelope, защищающий canonical surfaces.
- Проверка ссылочной целостности и достижимости сцен/финалов.
- Оригинальный sci-fi comedy fixture как доказательство non-fantasy support.
Non-goals#
- Генерация художественно качественного сценария моделью.
- Выбор production ruleset, balance, combat math или dice probabilities.
- Product canon: fixture не является канонической игрой или приключением.
- Проверка map topology; она вынесена в соседнее исследование.
- Заимствование сеттингов, персонажей, терминов или модулей третьих лиц.
Критерии успеха#
Критерии зафиксированы до реализации prototype.
| ID | Обязательный критерий | Порог или ожидаемое поведение | Способ проверки |
|---|---|---|---|
| AC-01 | Валидный genre-neutral compile | Original sci-fi comedy preferences + draft компилируются с 0 validation issues |
node --test prototype/adventure.test.ts |
| AC-02 | Determinism | Одинаковый input даёт глубокое равенство contract и одинаковый SHA-256 | Автотест с двумя независимыми compile |
| AC-03 | Referential integrity | Неизвестные fact, scene, clock, character и ending IDs в draft/contract отклоняются структурированными кодами | Негативные автотесты |
| AC-04 | Fail-forward | Каждый failure exit имеет consequence и ведёт в следующую сцену либо ending | Graph validation + автотест |
| AC-05 | Reachability | Все сцены и endings достижимы из единственной opening scene | Graph validation + автотест |
| AC-06 | Bounded improvisation | Contract запрещает narration менять story facts, rules, map topology, visibility и ending conditions | Автотест protected surfaces |
| AC-07 | Non-canonical provenance | Fixture маркирован как original test fixture и isCanonical: false |
Автотест provenance |
| AC-08 | Boundary rejection | Пустые обязательные host fields, невалидный session envelope и битый planner draft не компилируются | Негативные автотесты обеих input boundaries |
Рабочие гипотезы#
- Hypothesis H-01: typed graph и runtime validator делают битые ссылки и dead-end failures наблюдаемыми до запуска сессии. Подтверждение: AC-03–AC-05.
- Hypothesis H-02: genre-specific content можно полностью оставить в данных, а compiler сохранить genre-neutral. Подтверждение: AC-01 и отсутствие fantasy/ruleset констант в compiler.
- Hypothesis H-03: явный improvisation envelope позволяет LLM описывать подтверждённые события, не расширяя канон. Prototype проверяет структуру envelope, но не качество реальной модели.
Материалы#
- Исследование и evidence log
- Техническое решение и запуск
- Проверка и итог
prototype/— исполнимый артефакт
Итог#
pass: genre-neutral boundary детерминированно компилирует high-level host
brief и original sci-fi comedy planner draft, отклоняет исследованные broken
refs/dead-end failures и защищает canonical surfaces от narration. Suite:
7/7; demo: 0 issues; SHA-256
3b9c78e89119c4681f4e7570131f0f5d0b993b4e1d612c822bf473b577d2c21a.
Основание: E-003–E-008.
Ограничения#
- Валидный граф не доказывает, что история интересна или помещается в timebox.
- Свободные строки не проходят semantic moderation или fact checking.
- SHA-256 подтверждает одинаковую сериализацию, но не юридические права.
- Runtime prototype проверен на Node.js 22.14 type stripping и не является production package.
Следующее решение#
Принять boundary как candidate input для content/map validator и rules-state vertical slice; перенос выполнить отдельной production-задачей, а fixture оставить только тестовым.