Решили: StageFrameRouter регистрируется под IStageFrameSource, а не только конкретным типом.

Почему: он и есть единственный вход показа за кадром сцены — заводить вторую реализацию ради рук игрока значило бы завести второго владельца факта «что сейчас на арене».

Грабли, и они дорогие. Новый TapeArenaUnits просил IStageFrameSource; регистрации не было нигде. VContainer не «пропустил зависимость» — он уронил исключение в Awake боевого скоупа, то есть у гостя не поднялся ВЕСЬ бой. Для игрока это выглядело тремя разными поломками в трёх прогонах: пустое Ристалище, бой без противников, пропавшие круги под ногами. Плюс первый прогон вовсе не пускал в игру — исключение рвало сессию сразу после «где мы», и дальше шли ConnectionFailed в уже разрушенное состояние.

Чего НЕ хватило, чтобы поймать это до игрока (это главное в записи):

  • Компиляция такого не видит — тип есть, конструктор корректен, ошибка в разметке контейнера.
  • Тесты собирают систему ДРУГИМ СПОСОБОМ, чем игра. Наши EditMode-тесты соединяют классы руками в тесте, а игра соединяет их контейнером по разметке скоупов. Тест соединяет правильно даже тогда, когда игра соединить не может — поэтому сколько сценариев ни напиши поверх ручной сборки, они останутся зелёными при сломанной разводке.
  • PlayMode-тестов на кооп нет ни одного. Единственное, что ловит этот класс поломок, — поднять реальные скоупы обеих ролей.

Отсюда следствие, которое дороже самого фикса: проверка разводки и проверка сценария — разные вещи, и нужны обе. Разводка отвечает «поднимается ли скоуп в этой роли», сценарий — «может ли гость то, что ему положено». Первое без второго оставляет мёртвые кнопки (их у нас уже было две), второе без первого не запускается вовсе.

Сказано: «У нас ведь записано все, что должно работать для проверку коопа. но оно не проверят. Ибо не происходит реальных настоящих событий. Не проигрываются реальные сценарии целиком. Проблема ведь в этом?» и «Но мы ведь плей мод тесты можем обязательно проигрывать, когда тестим мультиплеер и фиксим?» (05.08.2026, сессия 90652c3d). Диагноз верный, с одной поправкой: сценарий поверх ручной сборки эту поломку бы не увидел — сначала нужна проверка разводки на настоящих скоупах.

Владелец правды: Game/WorldLifetimeScope.cs (комментарий при регистрации), docs/player-capability-registry.md.