Решили: у второй стороны арены есть ВЛАДЕЛЕЦ (OpposingSide: энкаунтер · игрок · ничья), и из
него считаются оба следствия — право распоряжаться стороной и надо ли делить участников по сторонам.
Буль «только своих» удалён.
Почему: он отвечал сразу на два вопроса. Правом владел DeploymentInteraction/DeploymentController,
а ActivitySideAssignment выводил из того же буля число сторон. Кампания получила флаг 05.08.2026 —
и сеанс развёл союзников: гость сел на сторону энкаунтера, стал двигать монстров и потерял свой отряд.
Отвергнут вариант «Sides: сколько сторон» — он тоже пересказ, только в другую сторону, и на
Ристалище требовал бы объяснения «почему тут можно всё»; отвергнута и заплатка в
ActivitySideAssignment — она оставила бы один факт с двумя читателями.
Сказано: «А ристалище, где доступны оба? Это же костыли. Да и игрок сможет же в ПВП выбирать свою команду. давай что-то без костылей» (Макс, 07.08.2026, сессия 9c0cf5ea). Модель — ответ на это: Ристалище не исключение из правила, а место, где сторону не у кого забирать.
Грабли: вторая мина в том же узле — при неразделённых сторонах команду из GameConfig.LocalPlayerTeam
получало только место ноль, поэтому поднятая дев-ручка «за кого я играю» разводила хозяина и гостя в
кампании. Видно это было бы только вдвоём и только с изменённым конфигом.
Владелец стороны едет по сети и обязан сверяться на приёме (Enum.IsDefined): гость выводит из него
своё право двигать бойцов, и неизвестное значение дало бы разные права на одной арене.
Умолчания у параметра нет намеренно — ровно умолчанием кампания и провалилась мимо права 05.08.
Владелец правды: Data/Definitions/Activity.cs (OpposingSide, MayCommandSide, SidesAreDealt),
Game/Session/Net/HostSessionRoster.cs; тесты ActivityPresetRightsTests, ActivityStateTests,
PresenceSidesTests, CoopIntentRightsTest.