Решили: список участников остаётся ОДИН — ParticipantsPanelView; мой второй, написанный параллельно, снесён, а в живой доведены группы «свои / противники», подпись «вы» и стили.

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

Сказано: «В PVP лучше иметь себя и союзников слева, а противников - справа. И как-то подписать, что ты - это ты» (03.08.2026, сессия b307a49b). Раскладка выбрана вторым вариантом — одна панель слева с двумя группами: панель у правого края даёт связь «сторона экрана = сторона арены», но стоит целого угла экрана.

Грабли:

  • Панель инъецировалась, но не была зарегистрирована в контейнере. UiRootBootstrap.Construct просил ParticipantsPanelView, а RootLifetimeScope о нём не знал — компиляция при этом зелёная, падает только рантайм, и падает целиком: без бутстрапа не поднимается ВЕСЬ интерфейс. Такую дыру не видит ни compile-check, ни EditMode-тесты; ловится она запуском игры.
  • Отпечаток состава обязан включать свой номер. От него зависит разбивка на группы, а гостю его номер приезжает рукопожатием уже после первых пакетов состава: без этого список у гостя навсегда остался бы разложенным по чужой стороне.
  • Проверять чужую работу в дереве стоит ДО того, как писать свою. Файл лежал под тем же Scripts/UI/Presence/, что и мои курсоры, и git status показывал его как untracked всё время — я посмотрела туда только на ошибке компиляции.

Владелец правды: UI/Presence/ParticipantsPanelView.cs, Game/RootLifetimeScope.cs.