RnD · Линия доказательств Technical R&D
Каталог и оглавление
TECH.DOC RnD/technical/2026-07-25-adventure-contract-generation/RESEARCH.md raw.md ->

Research: генерация Adventure Contract

Baseline#

Актуальный PRD фиксирует только формат: original-IP, rules-light, humorous one-shot, но не задаёт конкретный сюжет, мир или набор сцен. Для primary validation предусмотрены будущие OS-A/OS-B; их content briefs ещё не существуют.

Архитектурные материалы уже требуют, чтобы LLM не был источником истины: scenario planner может предложить структуру, но не менять live state, а narrator не может самостоятельно менять канон. До prototype не существовало исполняемого формата, который проверял бы:

  • границу между high-level host input, planner proposal и canonical content;
  • ссылки facts → scenes → endings;
  • fail-forward и достижимость;
  • запрещённые поверхности импровизации.

Метод#

  1. До implementation зафиксировать AC-01–AC-08 в README.md.
  2. Описать genre-neutral types: HostPreferences несёт только host intent, а planner-authored story graph остаётся неавторитетным AdventureDraft.
  3. Создать один явно non-canonical original sci-fi comedy fixture. Это контролируемый non-fantasy input, а не предложение нового product canon.
  4. Сначала запустить tests при отсутствующем adventure.ts и сохранить ожидаемый ERR_MODULE_NOT_FOUND.
  5. Реализовать два input validator-а и минимальный deterministic compiler без зависимостей или LLM.
  6. Mutation tests должны повредить ссылки, fail-forward и input envelope и получить точные issue codes.
  7. Дважды скомпилировать одинаковую пару preferences + draft, сравнить contracts и SHA-256.
  8. Запустить demo и записать число scenes/endings/triggers, validation issues и hash.

Контролируемые переменные: один fixture version, один runtime, отсутствие network/model calls. Проверяется структура, а не художественное качество.

Реестр доказательств#

ID Тип Описание Источник, путь или команда Дата или версия
E-001 Fact PRD требует original lightweight OSR и минимум два original-IP one-shots, но не фиксирует конкретное приключение ../../docs/prd/2026-07-22-global-party-ai-rpg.md, строки 149–152 и 331 Updated 2026-07-24
E-002 Fact Primary protocol использует будущие placeholders OS-A/OS-B и запрещает чужие assets без прав ../../research/global-validation/10-primary-research-protocol.md, строка 188 2026-07-24 corpus
E-003 Measurement RED завершился ожидаемым отсутствием implementation module node --experimental-strip-types --test prototype/adventure.test.tsERR_MODULE_NOT_FOUND: prototype/adventure.ts Node v22.14.0
E-004 Measurement Behavioral suite: 7 tests, 7 pass, 0 fail, включая rejection битого planner draft node --no-warnings --experimental-strip-types --test prototype/adventure.test.ts 2026-07-25
E-005 Measurement Demo: 4 scenes, 2 endings, 14 triggers, 0 issues; SHA-256 3b9c78e89119c4681f4e7570131f0f5d0b993b4e1d612c822bf473b577d2c21a node --no-warnings --experimental-strip-types prototype/demo.ts 2026-07-25
E-006 Fact Fixture preferences/draft: original, borrowed-IP-free, non-canonical; genre — science-fiction comedy prototype/fixtures/sci-fi-comedy.ts Fixture v1
E-007 Fact Compiler не вызывает LLM, сеть, RNG или filesystem; genre/premise остаются в HostPreferences, а story graph — в AdventureDraft prototype/adventure.ts, prototype/adventure-support.ts Prototype v1
E-008 Inference Typed graph обнаруживает исследованные broken refs и dead-end failures до session start E-004, negative tests 2026-07-25
E-009 Measurement Scoped strict TypeScript check завершился с exit 0 и без diagnostics Root node_modules/.bin/tsc --ignoreConfig ... prototype/*.ts prototype/fixtures/*.ts TypeScript 7.0.2, @types/node 24.13.3
E-010 Measurement RED для authority split упал на отсутствующем sciFiComedyDraft export; после реализации обеих boundaries suite стал 7/7 Та же test command, сначала exit 1, затем exit 0 Node v22.14.0

Журнал экспериментов#

Время Изменение или попытка Наблюдение Artifact или evidence ID Вывод
2026-07-24T18:17:59Z Первый запуск .ts test без strip flag Runtime v22.14.0 вернул ERR_UNKNOWN_FILE_EXTENSION Command log Это ошибка команды, не RED поведения; нужен явный strip flag
2026-07-24T18:17:59Z RED с --experimental-strip-types Test runner дошёл до import и вернул ERR_MODULE_NOT_FOUND для adventure.ts E-003 RED подтверждён по нужной причине
2026-07-24T18:17:59Z Добавлен compiler/validator Первые 6 behavior tests прошли E-004 Структурная гипотеза подтверждена на fixture и mutations
2026-07-24T18:17:59Z Source split после file-size signal Runtime types и support вынесены; main implementation стал меньше 800 строк prototype/adventure-types.ts, prototype/adventure-support.ts Разделение не изменило behavior
2026-07-25 Добавлен отдельный AdventureDraft boundary RED: отсутствующий export; GREEN: 7/7 E-010 Host brief больше не содержит предложенный scene graph
2026-07-25 Повторно выполнен demo 0 issues; hash 3b9c78e89119c4681f4e7570131f0f5d0b993b4e1d612c822bf473b577d2c21a E-005 Executable public path подтверждён после authority split
2026-07-24T18:17:59Z Выполнен scoped strict typecheck Exit 0, diagnostics отсутствуют E-009 Erasable TS и strict signatures подтверждены

Выводы#

  • Measurement: AC-01–AC-08 проходят на executable fixture и mutation corpus; strict scoped typecheck чист. Основание: E-004, E-005, E-009.
  • Inference: жанр не должен быть enum или branch в compiler; он является host-authored data, а структура scenes/facts/triggers остаётся общей. Основание: E-006, E-007.
  • Inference: ни HostPreferences, ни AdventureDraft нельзя считать каноном напрямую. Только compiled contract после двух input validations получает authority markers. Основание: E-004, E-007, E-010.
  • Inference: свободная narration может быть безопасно ограничена только после projection; envelope сам по себе не заставляет LLM соблюдать правила. Основание: E-007, Unknown U-02.

Рассмотренные альтернативы#

Подход Что проверили Почему не выбран Evidence
Free-form prompt как adventure Сопоставление с authority requirement Нельзя проверить refs, endings или скрытую мутацию facts E-001, E-002
Fantasy-specific schema Наличие genre-neutral fields и sci-fi fixture Создаёт ghost constraint и не выполняет требование «любой жанр» E-006, E-007
Adventure = HostPreferences Trust-boundary analysis Host input не должен сразу получать canonical authority E-004, E-007
Новый schema/state-machine dependency Проверена необходимая функциональность stdlib Для graph/ref checks достаточно Map, Set, structured clone и node:crypto; dependency не уменьшает prototype risk E-004, E-005
JSON Schema без behavioral graph validator Сравнение structural и cross-reference needs JSON Schema полезен для shape, но один не доказывает reachability/fail-forward E-008

Неизвестные#

  • Unknown U-01: художественное качество, agency и completion реальной группы. Закрывается только content QA и пользовательскими сессиями.
  • Unknown U-02: соблюдение envelope конкретной LLM. Нужен отдельный model-eval/adversarial study.
  • Unknown U-03: semantic moderation свободных строк и доказательство прав для host-authored content.
  • Unknown U-04: миграция живого contract между schema versions.
  • Unknown U-05: соответствие scene graph фактическому 60/90-minute timebox; нужен dry-run и session telemetry.