Извлечено из замороженного
10-reference/ui-navigation.
Решили: реплицируется состояние мира, а не состояние взгляда. Поэтому UI-навигация принципиально client-local: какой экран открыт, какой таб активен, что лежит в стеке — личное дело каждого клиента и по сети не ходит.
Почему: взгляд не влияет на исход. Синхронизировать его значит платить трафиком и сложностью за то, что игроку не нужно, и вдобавок отнимать у него право смотреть куда хочет — один открыл инвентарь, а у второго дёрнулся экран. Реплицировать нужно ровно то, от чего зависит бой; всё остальное клиент решает сам.
Следствие для кода: навигатор не имеет сетевого слоя вообще, и добавлять его не нужно даже когда включится кооп. Синхронизации требует пауза (она меняет ход боя), а не экран, из которого её поставили.
Отдельное решение того же кластера: dev-консоль — свой Modal-экран навигатора, а не внешний
пакет (QFSW). Причина: внешняя консоль оставалась последним посторонним писателем контекста ввода — то
есть единственным местом, которое меняло состояние ввода мимо IInputService.
Владелец правды: Assets/_Project/Scripts/UI/Navigation/ (стек, ScreenKind); правило ввода —
CLAUDE.md; модель репликации —
Journal - Host-Authoritative, Not Lockstep.