Решили: у каждого сетевого канала есть объявленный владелец формата, а у выделенного кодека — прогон туда-обратно; список каналов для этой проверки выводится из перечисления, поэтому новый канал без строки в реестре роняет тест (NetChannelFormatRegistryTests).

Почему: канал состава сеанса кодека не имел — писатель жил в HostSessionRoster, читатель в GuestSessionRoster, за сотню строк друг от друга. Правка cf7663512, добавившая участнику место, дописала байт в обе половины ХОЗЯЙСКОЙ стороны и не тронула гостевую: хозяин стал писать шесть полей на участника, гость читать пять; гость представлялся тремя, хозяин читал четыре. Обе стороны глотали разбор и выходили с комментарием «чужая версия» — при том, что версия и отпечаток контента сверяются рукопожатием, то есть расхождение было нашим собственным. Отвергли автоматическую проверку «у канала должен быть класс *Codec»: у части каналов формат честно живёт внутри одного класса (рукопожатие, управление боем), и требовать от них пустых обёрток дороже, чем перепись. Но канал, у которого владелец формата не назван вообще, — ровно тот случай, с которого начался разъезд.

Сказано: «Что берем в работу все, и надо создать норм систему, СТРУКТУРУ или что-то еще чтобы в принципе таких различий быть не могло, посадить все на ОДНИ рельсы. Мы ведь так можем?» (08.08.2026, сессия eab27015).

Грабли: поломка была невидима на всех наших зелёных. Компиляция зелёная, рукопожатие проходит («гость 1 принят: версия и контент сошлись»), EditMode зелёный — а состав не доезжает никуда: у гостя список участников пуст всегда, у хозяина ник, цвет и скин гостя не применяются никогда. Дальше цепочка уводит в сторону от причины: гость не находит себя в составе, SessionPlayerRouter тихо падает на дев-ручку GameConfig.LocalPlayerTeam, и в PvP гость считает себя стороной хозяина — на экране это выглядит как «оба управляют одной командой», то есть как дефект прав, а не формата. Второй канал (Decision) имел ту же раскладку плюс третий разбор в тесте и просто не успел сломаться. DeploymentIntentCodec был internal — тест до него не дотягивался вовсе.

Владелец правды: SessionRosterCodec.cs, DecisionCodec.cs, тесты SessionRosterCodecTests, DecisionCodecTests, DeploymentIntentCodecTests, NetChannelFormatRegistryTests.