# Integrated AI GameMaster vertical slice - **Status:** `complete` - **Outcome:** `partial` - **Started:** 2026-07-25 - **Updated:** 2026-07-25 - **Research ID:** `2026-07-25-ai-gm-vertical-slice` ## Проверяемый вопрос Можно ли в TypeScript выполнить полный turn lifecycle с genre-neutral host-authored content, authoritative rules/RNG, immutable events, private projections, bounded narration и deterministic replay? ## Почему решение нужно сейчас Отдельные схемы и unit tests не доказывают архитектурную последовательность и совместимость контрактов. ## Scope - Knave 1e как attributed mechanical baseline: classless, d20, equipment-led, limited inventory; без копирования setting/text. - Genre-neutral original rules profile. - Original non-canonical sci-fi comedy fixture как доказательство non-fantasy. - Отдельный минимальный runtime Adventure/Map bundle; dedicated authoring contracts исследованы параллельно, но их interop compiler сюда не подключён. - Все 14 шагов vertical slice из session brief. - CLI demo, adversarial suite и local cost-quality benchmark. ## Non-goals - Production UI, network server, database, STT/TTS/image generation. - Универсальное автоматическое качество любой истории. - Real LLM и платные provider calls. - Knave/D&D compatibility branding. ## Критерии успеха | ID | Обязательный критерий | Ожидаемое поведение | Способ проверки | |---|---|---|---| | AC-01 | Сквозной turn выполняет заданный порядок | Commit существует до narration | `npm run technical:demo` | | AC-02 | Replay детерминирован | final и replay SHA-256 совпадают | demo + tests | | AC-03 | Contract/content/map валидируются | Broken refs/unreachable/invalid schema rejected | technical tests | | AC-04 | Privacy и invalid-state invariants | 0 corpus leaks и invalid mutations | adversarial suite | | AC-05 | Reproducible clean-checkout command | `npm ci && npm run check` | full verification | | AC-06 | Benchmark честно маркирует границы | Local comparison produced; real quality/cost = Unknown | benchmark report | ## Рабочие гипотезы - **Hypothesis H-01:** pure reducers, recorded RNG outcomes and append-only events достаточно для deterministic replay. - **Hypothesis H-02:** отделение rules profile от content contracts позволяет одному kernel запускать host-authored не-фэнтезийный fixture. ## Материалы - [Исследование и evidence log](RESEARCH.md) - [Техническое решение и запуск](SOLUTION.md) - [Проверка и итог](VALIDATION.md) - [`prototype/`](prototype/) ## Итог `GO` для deterministic kernel boundary, но общий outcome — `partial`. Один и тот же strict TypeScript vertical slice выполнен Node.js 24.14.0 и Bun 1.3.6: authoritative event был записан до narration, live/replay SHA-256 совпал (`394ba5c11df11b9ccd4f6e76b3b14d08fcc007df32e3f788064a055ccb7a0f94`), 16/16 adversarial cases не изменили state и не раскрыли secrets, а 1 000-event full/checkpoint replay дал одинаковый hash. Локальный cost-quality harness сократил только synthetic input-token proxy с 162 515 до 34 160 (`78.9804%`). Это не доказательство экономии или non-inferiority: real tokens, retries, narration quality и USD cost не измерялись. Этот slice не принимает output dedicated Adventure/Map authoring prototypes: он загружает собственные минимальные runtime contracts. Поэтому HostPreferences → authoring contracts → runtime state → first turn как единый pipeline пока не доказан. ## Ограничения Один fixture доказывает interface shape, но не полноту жанров или narrative quality. Раздельные authoring/runtime schemas не доказывают interoperability. ## Следующее решение Сначала унифицировать authoring/runtime contracts в versioned package либо реализовать явный compiler/mapping и end-to-end test. Затем переносить kernel в production-design package. До real-model benchmark заранее утвердить versioned genre-diverse fixtures, narrative rubric, non-inferiority margin, exact model IDs, budget cap и redaction policy.