Решили: руки игрока на арене отделены от владения ареной. DeploymentInteraction (круги-опоры, выбор бойца, перетаскивание, приём реликвии) создаётся у ОБОИХ участников и ничего не применяет сам — публикует намерение; DeploymentController (место, состав, старт боя) остался только у хозяина и намерения исполняет, перепроверяя право и зону заново.

Почему не флаг «а я хозяин?» внутри одного класса. Это тот же класс на тысячу строк, в который пришлось бы вписать девять ветвлений, и вчерашний урок повторился бы дословно: объект, у которого в чужой роли нет работы, занимает общие точки привязки. Права здесь и правда разные — трогать фигурки может каждый, решать, кто на арене, только один, — и разные права дешевле развести по разным классам, чем сторожить внутри одного.

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

Намерение поехало своим каналом, а не шиной команд забега. Команда меняет durable-состояние и обязана пережить сессию в логе; намерение адресует бойца на арене, которого через минуту не будет. Durable-след появляется уже у хозяина — когда тот исполнит намерение и переведёт его в позицию слота гильдии. Нумерации у намерения нет намеренно: повтор «поставь сюда» даёт тот же результат, а потеря видна игроку сразу.

Грабли: узкий прогон в редакторе нашёл красный тест GuestLearnsWhoIsOnTheArena — и он был мой, из вчерашнего bfdf14e07. Паспорт бойца стал приходить гостю дважды (событием спавна и в ответ на его же вопрос «кто на арене»), а тест по-прежнему считал объявления и ждал двух. Считать объявления и было ошибкой: это деталь раздачи. Тест переписан на смысл — гость знает всех, и повторный паспорт не заводит второй записи. Быстрый прогон эту поломку не показывал: тест зовёт движок и числится «нужен редактор».

Владелец правды: Game/DeploymentInteraction.cs, Game/DeploymentController.cs (docstring про перепроверку намерения), Core/Arena/IArenaUnits.cs, Game/Session/Net/DeploymentIntentRelay.cs, тесты ArenaUnitsSeamTests, PlayerCapabilityRegistryTests, docs/player-capability-registry.md.