Решили: CombatSimulation рождается и умирает вместе с боем. Вне боя тела на арене держит собственный слой мира, а не замороженная симуляция. Показ получает шов «источник кадра»: в бою его кормит лента, вне боя — статичная сцена мира.

Выбрано Максом из трёх вариантов развилки, вариант «Боевая, миру свой держатель тел» (02.08.2026, сессия 9c8550b1). Отвергнуты: «мировая симуляция + RNG боя за швом» (дешевле на два дня, но граница боя остаётся объявляемой вручную) и «мировая симуляция + пересев при рождении скоупа» (полдня, но пункт «пересев вырван с корнем» из плана не выполняется честно).

Почему это дороже и всё равно правильно: пока симуляция живёт вечно, у боя нет границы в lifecycle — её объявляют вызовами (ResetBattle, ReseedForBattle, три SetPaused, Reset() у ленты), и каждый новый участник обязан на них подписаться. Кто не подписался, ломается молча. Ровно так сломался повторный бой у гостя. С боевой симуляцией граница становится созданием и уничтожением скоупа, и подписываться не на что.

Что делает вариант подъёмным (проверено чтением, а не предположено): CombatPresenter.Update рисует только из кадра ленты — состав видов, снаряды, интерполяция, события. Живая симуляция нужна ему лишь для dev-оверлеев. Значит поставщика кадра можно подменить, и показ этого не заметит: в бою это BattleTapePlayback, вне боя — статичный кадр мира. Второе доказательство рядом: балансный стенд SimEnvironment уже собирает симуляцию без мира, сети и карты — тот самый критерий, по которому проверяется правильность реза.

Грабли: план фазы 1 я написала с критерием «пересев RNG удалён», не доведя до Макса развилку, от которой этот критерий зависит. Критерий требовал боевой симуляции, конституция persist-мира — мировой; противоречие лежало внутри принятого плана. Нашлось на первом же шаге разведки, до кода. Урок тот же, что днём раньше: критерий приёмки, который тянет за собой архитектурное решение, — это и есть архитектурное решение.

Владелец правды: Planning - Scope Hierarchy §3 и §7 (фаза 1 разбита на три шага под это решение); ход захода — docs/scope-split-progress.md.