Решили: BattleStagePresence снова поднимается СРАЗУ при старте фона меню, а ожидание первого кадра с бойцами переехало в CameraModeController: он держит вход в слежение, пока CombatFocusTarget.HasUnits ложно, и входит (с мгновенным кадром) на первом кадре с бойцами.

Отменяет решение из записи 2026-08-04-the-stage-goes-up-when-there-is-something-to-frame, где ждать первого кадра поручалось директору меню. Причина отмены: сигнал сцены читает не только камера — по нему же являет себя арена (ArenaStagePresenter), и её опоздание оставляло на переходе со сплеша в меню голый задник без арены. Диагноз того захода («камера не должна ехать к цели, которой нет») остаётся верным — неверным был адресат ожидания.

Почему так: ждать нужно ровно тому, кому есть чего ждать. Арене цель слежения безразлична, она статична и обязана быть на месте к моменту появления меню. Камере, наоборот, ехать не к кому, пока в фокусе нет точек. Один сигнал по-прежнему один — просто его потребители реагируют по-разному, и это их право, а не повод расщеплять сигнал надвое.

Сказано: «При переходе из сплеша в меню - есть момент когда арены еще нет. И это выглядит плохо очень» (04.08.2026, сессия 78678294).

Грабли: починка одного потребителя общего сигнала сломала другого, причём молча — арена не жалуется, она просто появляется позже. Общий сигнал стоит трогать только на стороне того, кто его читает; сдвигая сам сигнал, двигаешь всех подписчиков разом.

Владелец правды: Presentation/Camera/CameraModeController.cs (_stageAwaitingFocus, OnStageChangedEnterStageFraming), Game/Flow/MenuBattleDirector.cs (поднимает сцену в StartNext).