Решили: гейт готовности обобщён до общего решения с вариантами. Участник заявляет не «готов», а «я за вариант N»; кнопка «Начать» и «Продолжить» — решение с ОДНИМ вариантом. Голоса едут поимённо; расхождение не разрешается само.
Почему: совместных экранов у нас будет много (награда 1-из-3, узел карты, улучшение «Сосуда»), и
всем им нужен один и тот же ответ — высказались ли все и сошлись ли. Отвергнут второй механизм
рядом с гейтом: это ровно та ошибка, ради исправления которой гейт и сводили в один механизм
03.08.2026, — два похожих счётчика расходятся, а расхождение читается игроком как зависшая кнопка.
Отвергнуто «побеждает большинство»: спор у нас — контент, а не сбой; игра не диагностирует его и
не подсовывает арбитра, ритуал зовут руками (канон gdd/50-modes-ux/coop/arbiters, вердикт Макса
30.07.2026).
Сказано: «У нас мини-игры при не согласии есть (бросок d20), изучи. Должны тыкнуть все обязательно. С выбором ноды на карте. к слову, надо сделать аналогично» и «Это должно быть расширяемо и меняемо. Просто учитывай, что много что еще может добавить и надо сделать хороший механизм, что будет хорошо поддерживать идеи в будущем» (Макс, 07.08.2026, сессия 9c0cf5ea). Расширяемость выражена так: новый совместный экран стоит ключа и списка вариантов, а не своего протокола; ритуал цепляется к решению один раз и работает для всех ключей сразу.
Грабли: стороны на канале различались по ДЛИНЕ сообщения («один байт — голос гостя»). Держалось это
до первого изменения формата и сломалось бы на нём: голос стал строкой варианта, длины сравнялись, и
хост принял бы собственное эхо за чужой голос. Признак отправителя теперь первым байтом (ReadyWire).
Свой голос гость берёт из объявления хоста, а не помнит рядом: вторая память расходится при сбросе,
и кнопка остаётся нажатой у того, кого в проголосовавших уже не числят.
Список вариантов в Bind НЕ передаётся: варианты рождаются вместе с экраном, и второй их список
разъехался бы с первым при смене содержимого. Решение сравнивает голоса между собой, а не со
справочником.
Не сделано намеренно: тип всё ещё зовётся IReadyGate, хотя решает уже не только готовность.
Переименование поедет первым шагом следующей фазы — вместе с первым реальным многовариантным экраном,
на котором его можно проверить.
Владелец правды: Core/Net/IReadyGate.cs, Core/Net/ReadyKeys.cs (DecisionOptions),
Net/ReadyWire.cs, Game/Session/Net/HostReadyGate.cs; тесты SharedDecisionTests, ReadyGateTests.