Решили: десять дуэлей за меню записаны headless — прямо в execute_code собран тот же стек сима, что и боевой скоуп (реальная RuntimeUnitFactory + системы + AI + конфиги из GameConfig), прогнан до исхода, снят в ленту BattleTapeRecorder и записан ReplayFileWriter в StreamingAssets/Replays/menu_duel_{i}.gmrp. Меню поднимает воспроизведение вариантом префаба BattleScopeReplay (наследует BattleScope, переопределяет _mode = Replay), а не живой бой.

Почему headless, а не запись из play mode: живой прогон потребовал бы рабочего боевого скоупа с сессией и расстановкой — той самой машинерии, мимо которой мы и уходим. Headless-сборка переиспользует реальную фабрику (каскад статов, AI из данных релика), гоняет все десять дуэлей одним циклом без редакторных заходов и сохраняет файлы напрямую. Все десять вышли настоящим боем до победы (10–68 с, разные победители).

Почему вариант префаба, а не рантайм-переключение режима: Configure скоупа не может прочитать регистрации, которые создатель добавляет через установщик CreateChildFromPrefab — они применяются ПОСЛЕ Configure. Значит роль обязана быть известна скоупу до сборки: либо сериализованным полем на префабе, либо из предка. Сериализованное поле на варианте — единственный владелец проводки (конфиги наследуются от базового BattleScope, отличается только _mode), и Configure читает своё же поле. Байты файла при этом всё-таки едут установщиком (ReplayPlaybackRequest) — их плеер резолвит лениво, уже после установки, как и BattleScopeParams.

Сказано: «Давай не будем делать костыли а сделаем норм реализацию “повторов”… Компакт и погнали» и «показываем реальный баланс, поедет так поедет» (04.08.2026, сессия 0768278b).

Грабли:

  • Резолв реплей-скоупа проверяется только в play mode. Проверено: скоуп [Menu Replay] поднялся, четыре юнита рисуются из файла, ноль ошибок DI. Компилятор и тесты этого не ловят.
  • Простаивающий сим всё же нужен. BattlePresenterBinder держит CombatSimulation ссылкой (для дев-оверлеев) — реплей-скоуп его конструирует, но не тикает (петли нет) и не спавнит (расстановки нет). Состав приходит из файла в реестр через RegisterRemote.
  • Не доделано — визуал (глаз Макса): камера кадрирует бой широко (юниты мелкие, сбоку), и нет затемнения фона под меню («приглушим черным», Макс). Это следующий шаг подачи, не каркаса.

Владелец правды: Game/Flow/MenuBattleDirector.cs, Game/Flow/MenuReplayScope.cs, Game/WorldLifetimeScope.cs, префаб Prefabs/Systems/BattleScopeReplay.prefab, данные ScriptableObjects/Configs/MenuBattleConfig.asset.