теория
Каналы общения зон выстраиваются в лестницу — от слабой связи к сильной. Правило пользования лестницей одно: спускайся на ступень ниже, только если верхняя не выражает задачу.
Ступень 1: адрес. Всё, что описывает «где пользователь и на что смотрит», — маршрут, регион, период, выбранный ряд — живёт в URL. Это самая слабая связь из возможных: зоны не знают друг о друге вообще, каждая читает опубликованную схему параметров. Плюс суперспособности, которых нет ни у одного другого канала: перезагрузка, история браузера, закладки, «поделиться».
Ступень 2: события со схемой. Для «случилось то-то, кому интересно — реагируйте»: пользователь выбрал ряд, пришёл алерт, истекает сессия. Издатель кричит в шину оболочки и не знает слушателей; у события — имя с префиксом зоны и версионируемая схема в том же реестре, что события бэкенда. Знание течёт в одну сторону, контракт проверяется на границе. Это слабая связь — но уже связь: слушатель зависит от схемы издателя.
Ступень 3: общее состояние. Рантайм-объект, который читают и пишут несколько зон. Самая сильная связь: общая структура, общие гонки, общий излом — из седьмого модуля, собранная в браузере заново. Легальных жильцов на этой ступени почти нет; каждый кандидат — повод сначала спросить, не ошиблась ли граница зон (плотно общаются — может, это одна зона?).
Вне лестницы: сессия. Кто залогинен и с какими правами — единственное состояние, которому положено быть общим: логин один на терминал. Им владеет оболочка, зоны получают его через явный интерфейс, а токены к API вообще не гуляют по браузеру — их держит тонкий серверный слой между фронтендом и API, чтобы зонам доставалась только кука сессии.
Проверка понимания лестницы — вопрос Киры на ревью: «Зона прогнозов хочет знать, свернула ли зона рядов свою боковую панель. Какая ступень?» Правильный ответ: никакая — это не её дело. Лучший разговор между зонами — тот, который не понадобился.