# Research: typed AI GameMaster orchestration ## Baseline До центрального vertical-slice prototype в репозитории было архитектурное описание, но не было executable adapter boundary, projection builder или проверки порядка commit → narration. Этот RED baseline сохранён как `E-003`. Текущий candidate — shared implementation в соседнем исследовании, а не дублированный код внутри этой папки. ## Метод 1. Проследить shared flow `projection → proposal → kernel → commit → projection → narration`. 2. Запустить accepted demo и сравнить committed/narrated state versions, event count и replay hashes. 3. Запустить versioned adversarial corpus и проверить injection/private categories, mutation и leakage rates. 4. Проверить adapter metadata и отсутствие разрешённого real provider path. 5. Выполнить TypeScript gate и полный central technical test suite. ## Реестр доказательств | ID | Тип | Описание | Источник, путь или команда | Дата или версия | |---|---|---|---|---| | E-001 | Fact | PRD запрещает LLM быть authoritative state service | `RnD/docs/prd/2026-07-22-global-party-ai-rpg.md`, AI GameMaster Contract | 2026-07-24 | | E-002 | Fact | `runTurn` строит participant projection до intent adapter, передаёт proposal в kernel и вызывает narrator только с committed event и post-commit projection | `../2026-07-25-ai-gm-vertical-slice/prototype/src/orchestrator.ts` | working tree at `68582c97…` | | E-003 | Measurement | RED suite до central implementation завершалась `ERR_MODULE_NOT_FOUND` | исторический `npm run test:technical` | 2026-07-25T01:20+07:00 | | E-004 | Measurement | Wrapper: state/narration version `1`, event count `1`, replay match `true`, private projection leakage `false` | `node RnD/technical/2026-07-25-ai-gm-orchestration/prototype/verify.ts` | 2026-07-25T01:31+07:00 | | E-005 | Measurement | Wrapper: 16 adversarial cases, 0 failures, invalid transition rate `0`, private leakage rate `0` | та же команда | 2026-07-25T01:36+07:00 | | E-006 | Measurement | Wrapper: adapter `fake_local`, `realProviderCalls: 0`, provider status `requires_explicit_user_permission` | та же команда | 2026-07-25T01:31+07:00 | | E-007 | Measurement | Central vertical-slice suite: 10 tests passed, 0 failed | `node --test RnD/technical/2026-07-25-ai-gm-vertical-slice/prototype/tests/*.test.ts` | Node 24.14.0; 2026-07-25 | | E-008 | Measurement | Strict root typecheck завершился без diagnostics | `npm run typecheck` | TypeScript 7.0.2; 2026-07-25 | | E-009 | Measurement | Integrated demo status `pass`: state version 1, replay hashes equal, private leakage false, adversarial 16/0 | `npm run technical:demo` | 2026-07-25T01:41+07:00 | | E-010 | Measurement | Expanded technical suite: 41 tests passed, 0 failed | `npm run test:technical` | Node 24.14.0; 2026-07-25 | ## Журнал экспериментов | Время | Изменение или попытка | Наблюдение | Artifact или evidence ID | Вывод | |---|---|---|---|---| | 2026-07-25T01:20:00+07:00 | Запущены pre-implementation tests | 3 test files завершились `ERR_MODULE_NOT_FOUND` для ещё не созданного prototype | `E-003` | RED подтверждён | | 2026-07-25T01:31:00+07:00 | Запущен strengthened study wrapper | Все boundary/privacy/provider assertions прошли | `E-004`–`E-006` | H-01 подтверждена в fake-adapter scope | | 2026-07-25T01:40:00+07:00 | Запущены central tests и typecheck | 10/10 tests; typecheck exit 0 | `E-007`, `E-008` | Shared implementation согласована с wrapper | | 2026-07-25T01:41:00+07:00 | Запущен integrated demo | Status pass; canonical/replay hashes совпали | `E-009` | Сквозной CLI подтверждает wrapper evidence | | 2026-07-25T01:44:00+07:00 | Запущен expanded technical suite | 41/41 pass | `E-010` | Независимые study tests не сломали boundary | ## Выводы - **Measurement:** commit предшествует narration: один committed event породил state version `1`, и narrator получил version `1`. Основание: `E-004`. - **Measurement:** injection и private projection cases не мутировали state и не раскрыли forbidden context. Основание: `E-005`. - **Inference:** capability separation переводит model output в untrusted proposal data, но это доказано только с deterministic fake adapter. Основание: `E-002`, `E-004`–`E-006`. ## Рассмотренные альтернативы | Подход | Что проверили | Почему не выбран | Evidence | |---|---|---|---| | LLM напрямую возвращает новый state | Сопоставление с PRD | Нарушает source-of-truth и replay contract | `E-001` | | Один свободный agent со всеми tools | Threat model | Нельзя локально доказать least privilege | `E-001` | | Typed capability-separated adapters | Shared prototype + wrapper + adversarial suite | Выбран: boundary исполним и локально проверяем | `E-002`, `E-004`–`E-008` | ## Неизвестные - **Unknown:** structured-output reliability, latency, retries и narration quality реальных моделей до разрешённого provider benchmark. - **Unknown:** provider-side logging, retention и prompt-injection behavior до выбора конкретного provider/model и data policy.