Решили: StageFrameRouter регистрируется под IStageFrameSource, а не только конкретным типом.
Почему: он и есть единственный вход показа за кадром сцены — заводить вторую реализацию ради рук игрока значило бы завести второго владельца факта «что сейчас на арене».
Грабли, и они дорогие. Новый TapeArenaUnits просил IStageFrameSource; регистрации не было
нигде. VContainer не «пропустил зависимость» — он уронил исключение в Awake боевого скоупа, то
есть у гостя не поднялся ВЕСЬ бой. Для игрока это выглядело тремя разными поломками в трёх
прогонах: пустое Ристалище, бой без противников, пропавшие круги под ногами. Плюс первый прогон
вовсе не пускал в игру — исключение рвало сессию сразу после «где мы», и дальше шли
ConnectionFailed в уже разрушенное состояние.
Чего НЕ хватило, чтобы поймать это до игрока (это главное в записи):
- Компиляция такого не видит — тип есть, конструктор корректен, ошибка в разметке контейнера.
- Тесты собирают систему ДРУГИМ СПОСОБОМ, чем игра. Наши EditMode-тесты соединяют классы руками в тесте, а игра соединяет их контейнером по разметке скоупов. Тест соединяет правильно даже тогда, когда игра соединить не может — поэтому сколько сценариев ни напиши поверх ручной сборки, они останутся зелёными при сломанной разводке.
- PlayMode-тестов на кооп нет ни одного. Единственное, что ловит этот класс поломок, — поднять реальные скоупы обеих ролей.
Отсюда следствие, которое дороже самого фикса: проверка разводки и проверка сценария — разные вещи, и нужны обе. Разводка отвечает «поднимается ли скоуп в этой роли», сценарий — «может ли гость то, что ему положено». Первое без второго оставляет мёртвые кнопки (их у нас уже было две), второе без первого не запускается вовсе.
Сказано: «У нас ведь записано все, что должно работать для проверку коопа. но оно не проверят. Ибо не происходит реальных настоящих событий. Не проигрываются реальные сценарии целиком. Проблема ведь в этом?» и «Но мы ведь плей мод тесты можем обязательно проигрывать, когда тестим мультиплеер и фиксим?» (05.08.2026, сессия 90652c3d). Диагноз верный, с одной поправкой: сценарий поверх ручной сборки эту поломку бы не увидел — сначала нужна проверка разводки на настоящих скоупах.
Владелец правды: Game/WorldLifetimeScope.cs (комментарий при регистрации),
docs/player-capability-registry.md.