93 lines
9.0 KiB
Markdown
93 lines
9.0 KiB
Markdown
# Обновление 2026.09.26.3
|
||
|
||
Накопительный пакет изменённых файлов для существующего проекта `hockey(9).zip`
|
||
(2026.09.24.4) и обновлений 2026.09.26.1 / 2026.09.26.2. Это обновление, а не
|
||
самостоятельная установка. Оно включает оба предыдущих этапа. Для текущей версии
|
||
эта инструкция имеет приоритет над историческими документами второго этапа.
|
||
|
||
## Что исправлено
|
||
|
||
**Новое время удаления в vMix.** При первом запуске, новом удалении на том же
|
||
Input, смене назначенного удаления и восстановлении привязки после перезагрузки
|
||
отправляется `SetCountdown → StopCountdown → StartCountdown`. Установка
|
||
длительности теперь сопровождается сбросом текущего положения счётчика: старый
|
||
остаток не должен переноситься в новое удаление. Пауза — `SuspendCountdown`,
|
||
продолжение — только `StartCountdown`, без повторной установки времени.
|
||
При ручной правке остановленного удаления — `SetCountdown → StopCountdown`;
|
||
при правке работающего — дополнительно `StartCountdown`.
|
||
|
||
Основной игровой таймер сохраняет прежний протокол. Посекундных команд в vMix
|
||
не добавлено. Неудачная отправка удаляет локальную отметку успешного назначения
|
||
Input, чтобы следующая попытка снова передала время. Запоздалый ответ старого
|
||
запроса не стирает более новое назначение.
|
||
|
||
По [документации vMix](https://www.vmix.com/help29/ShortcutFunctionReference.html),
|
||
SetCountdown задаёт длительность, StopCountdown останавливает и сбрасывает
|
||
счётчик, SuspendCountdown только ставит его на паузу.
|
||
|
||
**Появление удаления при выданном титре.** Когда выбран игрок/команда,
|
||
нарушение и длительность, плашка показывается сразу, если основной титр уже
|
||
в эфире. Сначала передаётся новое остановленное время, затем Overlay In.
|
||
Отсчёт начинается только по «Старт»/пробелу. Неполный черновик не показывается.
|
||
Проверка эфира учитывает данные Agent, в том числе после перезагрузки страницы
|
||
или выдачи титра непосредственно в vMix. При повторной выдаче основного титра
|
||
плашка может появиться снова без перезапуска её счётчика.
|
||
|
||
Сохраняется правило одной плашки численного преимущества с выбором ближайшего
|
||
перехода. Равные встречные удаления без предшествующего преимущества не создают
|
||
две плашки. Настройки Input, текстового поля Countdown и Overlay берутся из
|
||
существующего включённого сценария синхронизации таймеров. Подготовка удаления
|
||
не запускает таймер и не меняет расчёт фактического состава до старта.
|
||
|
||
**Автоматическое открепление матча.** Сервер раз в 30 секунд проверяет аккаунты
|
||
с привязанными матчами. Если с последнего действия аккаунта прошло 2 часа,
|
||
освобождаются права управления, очищается выбранный матч в его персональных
|
||
каналах и завершается его назначение Agent. Обычно это происходит между
|
||
2:00:00 и 2:00:30 бездействия; недоступность БД может задержать очистку.
|
||
Проверка запускается также сразу после старта сервера и работает без браузера.
|
||
|
||
Учитывается последняя активность среди всех входов этого же аккаунта.
|
||
Фоновые запросы, обновление статистики, lease heartbeat и сообщения Agent
|
||
не считаются действиями. Активность другого аккаунта не продлевает срок владельца.
|
||
Движения мыши/клавиатура/клики в видимом интерфейсе учитываются прежним трекером
|
||
второго этапа; он отправляет обновления не чаще раза в минуту и передаёт возраст
|
||
последнего действия, а не принимает время запроса за время действия.
|
||
|
||
Данные матча и подключения других операторов сохраняются. Постоянный адрес
|
||
персонального канала и сопряжение Agent сохраняются; после нового входа нужно
|
||
снова выбрать матч и при необходимости принять права. Отключённый Agent при
|
||
переподключении получает актуальную пустую привязку. Новый вход/новое назначение,
|
||
успевшие одновременно с очисткой, защищены от запоздалой отмены.
|
||
Это правило использует серверные WFL web sessions; режим разработки с
|
||
подставной авторизацией без таких сессий из фоновой очистки исключён.
|
||
|
||
## Установка
|
||
|
||
1. Сохраните резервную копию текущего кода. Если после второго этапа были свои
|
||
изменения исходников, сравните заменяемые файлы с пакетом.
|
||
2. Остановите веб-панель и распакуйте архив в корень существующего проекта,
|
||
где находится `app.py`, с заменой одноимённых файлов.
|
||
3. Запустите веб-панель и обновите страницу браузера. `/api/health` должен
|
||
вернуть build `2026.09.26.3`.
|
||
|
||
Agent.exe обновлять не требуется. Новых зависимостей и новых колонок БД именно
|
||
в этом исправлении нет. Если первый/второй этап ещё не устанавливался, действуют
|
||
их инструкции по зависимостям и автоматическому добавлению колонок.
|
||
|
||
Архив не содержит пользовательских JSON настроек, `.env`, баз, журналов,
|
||
секретов или бинарного Agent. Кнопки, шорткаты и настройки Mapping не заменяются.
|
||
Файлы `settings/local/` и каталог `HOCKEY_UI_DATA_DIR`, если он настроен,
|
||
нужно сохранять при будущих обновлениях так же, как после второго этапа.
|
||
|
||
## Проверка после установки
|
||
|
||
- На одном Input последовательно назначить удаления 2 и 4 минуты: проверить
|
||
новое значение и запуск, затем паузу/продолжение без скачка.
|
||
- При выданном основном титре заполнить удаление: его плашка должна появиться
|
||
с остановленным новым временем; «Старт»/пробел запускает отсчёт.
|
||
- Открыть матч вторым аккаунтом: он получает данные, но не отправляет команды
|
||
управления. Его активность не удерживает права неактивного владельца.
|
||
|
||
Проверки разработки и их границы описаны в `VALIDATION_HOTFIX_RU.md`.
|
||
Подробный разбор 40 прежних падений — `PREVIOUS_40_FAILURES_RU.md`.
|