# Изменения Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), проект придерживается [семантического версионирования](https://semver.org/lang/ru/). ## [0.0.27] — 2026-08-04 Разрыв связи больше не выбрасывает участника из конференции. ### Исправлено - Телефон с погасшим экраном выпадал из конференции, а при возвращении мог оказаться в лобби вместо комнаты. Причина установлена по логам прода: Chrome срезает ресурсы фоновой вкладке, телефон перестаёт отвечать по ICE, и LiveKit закрывает участника через 5 с после потери соединения (замерено: 37 с после блокировки экрана, 23 с после сворачивания браузера — то есть достаточно просто убрать вкладку в фон, гасить экран не обязательно). Восстановить сессию после этого нельзя — участника на сервере уже нет; нужен полный повторный вход, и `livekit-client` пытается сделать его сам, но его бюджет повторов (10 попыток за ~44 с) в фоновой вкладке успевает сгореть. Тогда приходило событие `Disconnected`, и страница комнаты уводила пользователя в лобби. Теперь непреднамеренный разрыв не уводит со страницы: сбрасывается состояние входа, и работает уже имевшийся путь авто-перезахода — резолв конференции, свежий токен, вход заново. Намеренный выход отличается по нажатию кнопки «Выйти», а не по коду причины: причину `CLIENT_INITIATED` присылает и кнопка, и сам `livekit-client`, который при заморозке вкладки (событие `freeze`) вызывает `disconnect()` самостоятельно. Разрывы, после которых возвращаться нельзя (участника выгнал организатор, конференция закрыта, вход той же личностью с другого устройства), уводят в лобби как раньше. От цикла «вошёл — сразу выбросило» защищает лимит в 5 перезаходов подряд; соединение, прожившее дольше 30 с, счётчик обнуляет. ## [0.0.26] — 2026-08-04 Мобильная комната: свайп шторки настроек и полноэкранный режим. ### Исправлено - Шторка «Настройки» на мобильном не закрывалась свайпом вниз почти никогда: обработчики висели только на ручке-волоске (`.room-sheet-handle`, 40×4px) — палец в неё практически невозможно попасть, и палец почти всегда приземлялся на панель, где обработчиков не было вовсе. Теперь свайп закрывает шторку при жесте по любому месту панели, но только когда её содержимое проскроллено в самый верх (`scrollTop === 0` на начало жеста) — иначе свайп вниз листает список устройств, как и должен стандартный bottom sheet. ### Добавлено - Полноэкранный режим комнаты — на мобильном кнопка «Экран» в тулбаре (как на десктопе), при активации топбар и тулбар уходят из потока и лежат оверлеем поверх сцены: показываются по тапу/клику по сцене вне элементов управления и сами прячутся через несколько секунд бездействия. На десктопе — та же логика (топбар/тулбар тоже прячутся в полноэкранном режиме), дополнительный способ вернуть их — навести мышь в нижнюю полосу экрана. ### Изменено - Кнопка настроек устройств в тулбаре на мобильном подписана «Настройки» вместо «Устройства». - Раскладка кнопок мобильного тулбара, когда они не помещаются в один ряд (7 и больше — с полноэкранным режимом и «Очередью» у организатора это обычный случай), стала равномерной сеткой на 4 колонки (7 → 4+3, 8 → 4+4) вместо переноса «как получится» через `flex-wrap`. - `deploy/render-templates.sh` умеет читать значения из файла, заданного переменной `ENV_FILE`, а не только из корневого `.env` (см. коммит `3847476`, вошёл в этот релиз) — для локальных стендов, где корневой `.env` указывает на боевые адреса. ## [0.0.25] — 2026-08-03 Два дефекта мини-окна конференции (Document PiP), оба видны только в Chrome. ### Исправлено - В Chrome пропадал звук других участников после возврата сцены из мини-окна в основное. `RoomAudioRenderer` жил внутри `RoomStage` и рендерился в обеих её ветках, поэтому скрытые `