265 lines
30 KiB
Markdown
265 lines
30 KiB
Markdown
# Изменения и история
|
||
|
||
## BUILD200 — 5 ноября 2026 · 2026.11.05.1
|
||
|
||
Commit: `BUILD200 (2026.11.05.1) — закрепить плашку удаления и снимать штраф после гола по ACK vMix`.
|
||
|
||
- При встречных удалениях 2/4 минуты плашка сохраняет закреплённую сторону
|
||
в переходе 4on4 → PP, работающий Countdown не получает лишнюю повторную выдачу.
|
||
- При включённом F2 команды vMix после гола большинства подтверждаются до завершения
|
||
удаления в панели. При ошибке доставки карточка остаётся для проверки.
|
||
- Для обычного гола не требуется включать «ШБ»; отметка остаётся исключением
|
||
для настоящего штрафного броска. Правила малых, двойных малых и больших сохранены.
|
||
- Agent 1.5.6 и зависимости не изменились; пользовательские настройки обновлением
|
||
не заменяются.
|
||
|
||
Локальная проверка: **1091/1091 PASS**, без ошибок и пропусков. 42 новые
|
||
проверки входят в полный прогон; 262 файла исходников и тестов сохраняли
|
||
зафиксированные SHA. Использованы локальные Node/ASGI/Chromium и модель vMix
|
||
на границе HTTP; рабочая VM и физический vMix не подключались.
|
||
|
||
## BUILD199 — 3 ноября 2026 · 2026.11.03.1
|
||
|
||
Commit: `BUILD199 (2026.11.03.1) — исправить удаления и добавить разрешение плашек`.
|
||
|
||
- При добавлении встречного удаления 2/4 минуты уже показанная плашка не получает
|
||
повторный IN. Если нужного Input на слое нет, программа восстанавливает показ.
|
||
- У MAIN TIMER добавлены галочка «Плашки» и F2. Разрешение общее для связанных
|
||
удалений, пустых ворот и отложенного штрафа; настройки сохраняются для матча.
|
||
- Выключение снимает связанные плашки, сохраняя основной счёт и native Countdown.
|
||
Данные продолжают заполняться, зритель не получает управляющих прав.
|
||
- Гол большинства завершает подходящий малый штраф с наименьшим остатком текущего
|
||
двухминутного отрезка. У 2+2 после первой части остаётся 2:00, большой штраф
|
||
не завершается. Повторные снимки, начальный счёт и синхронизация не создают гол.
|
||
- Отметка «ШБ» защищает действующий малый при голе со штрафного броска; известный
|
||
отменённый гол восстанавливает штраф только при неизменном последующем состоянии.
|
||
- Agent 1.5.6 и зависимости не изменились; пользовательские настройки обновлением
|
||
не заменяются.
|
||
|
||
Локальная проверка: **1049/1049 PASS**, без ошибок и пропусков; 77 новых
|
||
сценариев входят в этот полный прогон. Проверены Node/ASGI и Chromium,
|
||
сохранность 257 зафиксированных файлов. Рабочая VM и физический vMix не подключались.
|
||
|
||
## BUILD198 — 22 октября 2026 · 2026.10.22.4
|
||
|
||
Commit: `BUILD198 — исправить плашки и ускорить управление vMix`.
|
||
|
||
- Выбор управления матчем завершается до блокирующего окна загрузки; роли,
|
||
отмена, ошибка получения управления и параллельный выбор не оставляют диалог заблокированным.
|
||
- В режиме зрителя DATA/Mapping своему разрешённому Agent работает; управляющие
|
||
команды, изменения времени, удалений и событий требуют оператора.
|
||
- Подготовка текста подтверждается до IN/Preview. Неполные данные не считаются
|
||
готовностью; явный setter и последующий показ имеют подтверждённый порядок.
|
||
- Старые HTTP-кнопки подсмотра проходят подготовку контекста/Mapping выбранного
|
||
удаления. Native поля таймеров сохраняют защиту от массового Mapping.
|
||
- Задержка одного Input/Overlay общая для его автоматических путей. Условный шаг
|
||
с нулём не обходит заданную задержку той же плашки.
|
||
- При снятии верхнего счёта сначала отменяется ожидающий IN и снимаются связанные
|
||
Overlay 2/3, затем основной титр. Чужое владение и текущий Input перепроверяются.
|
||
- Agent 1.5.6 добавляет срочную очередь и резерв одного из шести HTTP-мест.
|
||
Очерёдность одной цели, отмена устаревшей работы и правдивые ACK сохраняются.
|
||
- Срочные снятия обходят подготовку SQL и обычную очередь браузера. Показ титра
|
||
продолжает ждать данных. В журнал добавлены связанные через `trace_id` замеры
|
||
ожидания, подготовки, отправки и выполнения.
|
||
- Настройки, конфигурация устройства и зависимости не заменяются.
|
||
|
||
Проверки BUILD198: **972 passed, 0 failed/errors**, без skip/xfail.
|
||
Agent: 33 основных теста и 10 вложенных, повторены с race detector;
|
||
Windows GUI amd64 1.5.6 собран из проверенного кода. Выбор роли и загрузка матча
|
||
проверены в локальном Chromium. Подключения к рабочей VM, PostgreSQL, Stat2TV
|
||
и реальному vMix не выполнялись; новый Agent на Windows не запускался.
|
||
|
||
## BUILD197 — 22 октября 2026 · 2026.10.22.3
|
||
|
||
Commit: `BUILD197 — отправлять поздние составы и показывать этапы загрузки`.
|
||
|
||
- Основной Mapping ждёт получения составов обеих команд. Поздние изменения состава
|
||
из деталей/LIVE автоматически запускают свежую отправку выбранному Agent.
|
||
- Новая версия состава не переиспользует результат начатого раньше Mapping;
|
||
одинаковые снимки объединяются, счёт/статистика/время не вызывают лишних отправок.
|
||
- Окно открытия остаётся до загрузки составов и подтверждения Mapping, показывает
|
||
реальные этапы и краткую историю. При отсутствии данных доступны повтор/продолжение.
|
||
- Через 45 с долгого ожидания показывается предупреждение с возможностью продолжить.
|
||
Этот срок не прерывает Mapping и не повторяет запрос с неизвестным результатом.
|
||
- Старые ответы не закрывают новое окно и не меняют выбранные матч/Agent/сессию.
|
||
Пока окно открыто, эфирные горячие клавиши заблокированы.
|
||
- Native Countdown, Windows Agent 1.5.5, зависимости и настройки не менялись.
|
||
|
||
|
||
Проверки BUILD197: **902 passed, 0 failed**, без skip/xfail.
|
||
Проверены поздние составы, новая отправка Mapping, ожидание/повтор, таймеры и
|
||
изоляция Agent; окно проверено в локальном Chromium при 390/1280 px.
|
||
Подключения к рабочей VM и реальному vMix не выполнялись.
|
||
|
||
## BUILD196 — 22 октября 2026 · 2026.10.22.2
|
||
|
||
Commit: `BUILD196 — обновлять большинство и составы, задерживать связанные плашки`.
|
||
|
||
- Сохранение работающих таймеров сохраняет ближайший срок отправки. Тики основного
|
||
времени и удалений больше не откладывают обновление численных составов до остановки часов.
|
||
- Ожидающие сохранения перепроверяют текущий запрос, устраняя параллельные повторные
|
||
PUT после медленного ответа. Последнее состояние доходит до сервера.
|
||
- Истёкший таймер удаления получает нулевую длительность перед сбросом и снятием
|
||
плашки. Следующий действующий таймер обновляется в своём назначении; остальные
|
||
работающие Countdown не перезапускаются при завершении соседнего удаления.
|
||
- Новая плашка ждёт сохранения численного состава и окончания обновления Mapping.
|
||
- У слотов удалений и связанных шагов верхнего счёта добавлено поле
|
||
«После верхнего счёта, с». Для пустых ворот и отложенного штрафа такое же поле
|
||
находится в админке «Таймеры и составы». Диапазон 0–60 с, шаг 0,1 с; 0 — сразу.
|
||
- Ожидание отсчитывается от выдачи основного титра и не блокирует управление временем.
|
||
После снятия счёта, смены матча, Agent, сессии или прав старый показ отменяется.
|
||
При срабатывании задержки заново читаются действующие удаления и флаги.
|
||
- Ответы старых запросов состояния Overlay не восстанавливают плашки в новом контексте.
|
||
- Готовый состав принимается при LIVE-ответе `changed:false`. Пустой кэш завершённого
|
||
матча дозагружается; отсутствующие строки состава восстанавливаются из сохранённого
|
||
источника. Полный кэш завершённого матча по-прежнему открывается без запроса к API.
|
||
- Agent 1.5.5 и зависимости не менялись; настройки обновлением не заменяются.
|
||
|
||
Проверки BUILD196: **879 passed, 0 failed**, без skip/xfail.
|
||
Полный локальный прогон включает новые сценарии удалений, задержек и составов.
|
||
Подключения к рабочему vMix и внешним источникам не выполнялись.
|
||
|
||
## BUILD195 — 22 октября 2026 · 2026.10.22.1
|
||
|
||
Commit: `BUILD195 — исправить HTTP 500 при применении Mapping`.
|
||
|
||
- Обёртка журнала передаёт служебные параметры отправителю WebSocket. Применение
|
||
конфига и ручная отправка Mapping с Agent 1.5.5 больше не падают до передачи команд.
|
||
- Проверки текущего подключения, поколения и поддержки пакетной отправки остаются
|
||
внутри блокировки отправителя. Запоздалый пакет не получает обход этих проверок.
|
||
- Добавлена проверка HTTP-запроса применения конфига с включённым журналированием,
|
||
включая публикацию, разрешение данных из БД, отправку и подтверждения Agent.
|
||
|
||
Проверки BUILD195: **80 passed, 0 failed**, без skip/xfail.
|
||
Проверены реальные HTTP-запросы с включённым журналом; производственные подключения не выполнялись.
|
||
|
||
## BUILD194 — 21 октября 2026 · 2026.10.21.5
|
||
|
||
Commit: `BUILD194 — Mapping по титрам, стабильное переключение матчей и счёт из БД`.
|
||
|
||
- Agent 1.5.5 принимает Mapping по титрам; управление эфиром обрабатывается отдельно от массового обновления полей. Старые Agent сохраняют ограниченную пакетную передачу.
|
||
- Подтверждения проверяются для каждого поля; неполная обработка явно отличается от полной.
|
||
- Читаются SQL-источники действующих связей и правил; неиспользуемый источник не задерживает отправку.
|
||
- Подключение, привязка и смена активности Agent используют ту же транзакцию для публикации Mapping, устраняя ожидание собственной блокировки.
|
||
- Ответы предыдущего выбора матча не перезаписывают текущий матч, составы и сессию. Сохранённые составы завершённого матча читаются из БД при восстановлении выбора.
|
||
- В режиме SQL нижняя панель счёта использует актуальную БД; ручные значения сохраняются отдельно. Пользовательские SQL-источники счёта проверяются отдельно для каждой стороны.
|
||
- Связи встроенного счёта наследуют заданный интервал автообновления своего SQL-источника; изменение данных доходит до Mapping без повторного выбора матча.
|
||
- В существующую диагностику добавлена сводка готовности выбранных матча и Agent.
|
||
- Проверяются назначение, связь, структура титров, опубликованный Mapping и наличие связанных полей.
|
||
- Показаны результат последней полной обработки Mapping и ожидание подтверждений устройства; неизвестное состояние не считается готовностью.
|
||
- Изменение конфигурации SQL-источников снимает прежнее подтверждение; результат начатой до правки обработки не восстанавливает готовность.
|
||
- Смена контекста сбрасывает прежний результат, закрытая панель не запрашивает новую сводку.
|
||
- Поздняя схема титров старого WebSocket не подтверждает готовность переподключённого Agent; обработка схем одного устройства упорядочена.
|
||
- Короткий Commit теперь содержит номер BUILD; порядок записан в инструкции администратора.
|
||
|
||
Проверка читает сохранённое состояние и подтверждения Agent. Актуальность внешних
|
||
источников и внешний вид титров в настоящем vMix проверяются отдельно.
|
||
|
||
Проверки BUILD194: **807 passed, 0 failed**, без skip/xfail.
|
||
В браузере пройдены 15 сценариев готовности и 11 сценариев матчей/счёта, включая 390/320 px; ошибок страницы нет.
|
||
Проверки локальные, без подключения рабочей VM/vMix. Подробности: [validation.json](validation.json).
|
||
|
||
## BUILD193 — 21 октября 2026 · 2026.10.21.4
|
||
|
||
Commit: `BUILD193 — ui: увеличить шильдик версии и сохранить читаемость шапки`.
|
||
|
||
- Шрифт версии увеличен с 6 до 9 px, добавлены небольшие внутренние отступы.
|
||
- Колонка заголовка расширена, номер версии сохраняется в одной строке.
|
||
- Следующий этап плана — сравнение загрузки на быстром и медленном ПК по существующим событиям `browser.ready` и HTTP-журналу; затем «Готовность к эфиру».
|
||
|
||
Проверки: **18 passed**, в Chromium проверены 7 ширин от 320 до 1440 px.
|
||
Проверка интерфейса использовала локальные тестовые ответы API; реальная VM не подключалась.
|
||
|
||
## BUILD192 — 21 октября 2026 · 2026.10.21.3
|
||
|
||
- Исправлен обрыв Mapping после трёх неудачных полей: оставшиеся титры отправляются до повторов ошибочных целей.
|
||
- Возвращены пакеты до шести независимых команд с индивидуальной проверкой ACK; записи одного поля сохраняют порядок.
|
||
- Ошибка отдельной HTTP-команды больше не сбрасывает состояние связи vMix; реальные отключения и смены назначения сохраняют защиту поколения.
|
||
- Счётчик отправок учитывает команды с потерянным ACK; в журнале видны результат применения и ошибочные цели.
|
||
- Подтверждённые пакеты сохраняют прогресс до завершения всего Mapping; последующее обновление `only_changed` пропускает их даже после прерывания запроса.
|
||
- Браузер дожидается полного результата Mapping без прежнего таймаута 5/15 секунд. Одинаковые запросы объединены; при смене контекста следующим отправляется актуальный.
|
||
- После изменения языка выполняется новое разрешение данных: быстрое RU → EN → RU не получает успешный ответ от старой отправки с другим языком.
|
||
- Импортные операции допускаются к общему пулу БД по одной. Остальные ожидают асинхронно, сохраняя рабочие потоки для команд оператора.
|
||
- Покрыты все 19 участков общей блокировки импорта, массовый импорт турниров и синхронные маршруты обновления справочников.
|
||
- Сетевые запросы продолжают выполняться параллельно; разбор больших XML справочников перенесён в поток вместе с записью.
|
||
- Холодная подготовка ONLINE-расписания проходит через очередь импорта; чтение расписания и проверка турнира вынесены из цикла HTTP.
|
||
- Отмена ожидающего запроса не запускает импорт. Уже начавшийся worker завершает транзакцию до освобождения очереди.
|
||
- В журнал добавлены длительное ожидание очереди и время выполнения импорта.
|
||
|
||
Полный прогон: **641 passed, 0 failed**, без skip/xfail, 474,3 с.
|
||
На локальном Mapping из 372 полей три постоянные ошибки не мешают доставке
|
||
остальных 369. Подтверждены доступность записей таймера и отправки команд vMix
|
||
до освобождения задержанного импорта, а также защита последнего выбора языка.
|
||
Итоги, отрицательные проверки и ограничения локальных сценариев находятся
|
||
в [validation.json](validation.json). Настоящий vMix и рабочая PostgreSQL не подключались.
|
||
|
||
## BUILD191 — 21 октября 2026 · 2026.10.21.2
|
||
|
||
- Пустой выбор Agent больше не отправляет команды таймера на прежнее устройство сессии.
|
||
- Сервер отклоняет явно пустой `device_id`; старые клиенты без этого поля проходят прежние проверки доступа.
|
||
- Неотправленные назначения удалений удаляются из оптимистичного кэша, локальный таймер сохраняет своё состояние.
|
||
- Устаревшие проверки GUID/номеров Inputs, пакетного транспорта и противоречивых протоколов таймеров заменены исполняемыми проверками действующих контрактов.
|
||
- Проверки КХЛ используют отдельные настройки: выбор числа потоков на VM не меняется ради тестов.
|
||
- Проверяются порядок ACK, ограниченные повторы, изоляция устройств, пауза/продолжение native Countdown, готовые удаления, права и переключение матчей.
|
||
- Проверки JavaScript требуют явного завершения сценария: завершение Node с незавершённым Promise не считается успехом.
|
||
|
||
Полный прогон: **565 passed, 0 failed**, без skip/xfail, 272,9 с. Для всех
|
||
59 прежних падений проверено соответствие реально прошедшим сценариям.
|
||
Все 11 намеренно внесённых ошибочных вариантов обнаружены проверками.
|
||
Совместный локальный прогон трёх матчей и шести Agents: 60 циклов по 64 поля,
|
||
24 196 команд и 1425 запросов зрителей. Итоговые значения, изоляция, восстановление
|
||
после ошибок ACK/разрыва и передача управления прошли; очереди завершились пустыми.
|
||
Подробные результаты и ограничения находятся в [validation.json](validation.json).
|
||
Живые PostgreSQL, Stat2TV, Windows Agent.exe и vMix в локальном прогоне не подключались.
|
||
|
||
## BUILD190 — 21 октября 2026 · 2026.10.21.1
|
||
|
||
- Mapping кэшируется только после ACK; ограниченные безопасные повторы и защита от старых подтверждений.
|
||
- Чтение Agent, heartbeat и восстановление разделены; новый WebSocket ждёт inventory.
|
||
- Восстановление связи сохраняет поля работающих native Countdown.
|
||
- Опубликованная версия Mapping закреплена за Agent; правки шаблона не переключают остальные эфиры.
|
||
- Атомарное сохранение Mapping с проверкой версии; опубликованные снимки переживают удаление шаблона.
|
||
- Усилена проверка участника/матча/устройства; зритель может иметь свой отдельный выход.
|
||
- Добавлен постоянный журнал, кнопка «Журнал», лёгкая страница /logs, фильтры и TXT/JSONL.
|
||
- Текущий и предыдущий московские месяцы журналов, автоматическая очистка; секреты маскируются.
|
||
- Сжатие и кэширование версионных ресурсов, параллельный старт, меньше работы редактора в runtime.
|
||
- Добавлены замеры загрузки/отрисовки браузера и Server-Timing для HTTP.
|
||
|
||
- Повторные XML используют один путь по SHA-256; история путей PostgreSQL сохраняется.
|
||
- Старые одинаковые XML можно объединить hardlink без удаления имён файлов.
|
||
- Ограничено хранение standalone discovery-отчётов; XML по возрасту не удаляются.
|
||
- HTTP-клиенты Stat2TV переиспользуют пул соединений и закрываются при завершении.
|
||
- Одинаковое сохранение UI не создаёт backup и не перезаписывает конфигурацию.
|
||
- История старых backup импортируется однократно и не возвращается на каждом старте.
|
||
- Добавлена консервативная очистка VM с предварительным планом по умолчанию.
|
||
- Основная документация сведена к README и четырём документам; deploy имеет один источник.
|
||
|
||
Проверки выполнялись без доступа к рабочим PostgreSQL/Stat2TV/vMix: SQLite-фикстуры,
|
||
поддельные Agent/ACK и Chromium с локальными API. В контролируемом сценарии без
|
||
выбранного матча, с задержкой начальных API 150 мс, медиана трёх запусков снизилась
|
||
с 3477 до 1424 мс. Это не измерение производственного сервера или ёмкости матчей.
|
||
|
||
Итоги проверок и идентификаторы 59 падений, уже присутствовавших в исходном архиве,
|
||
сохранены в [validation.json](validation.json). Финальный поведенческий набор —
|
||
91 passed; дополнительные проверки входа с телефона и выхода при недоступной
|
||
авторизации также прошли. Полный набор после последних правок повторно не запускался.
|
||
|
||
## Последняя исходная сборка
|
||
|
||
BUILD189 / `2026.10.02.9`: снижение повторных SQL-запросов и нагрузки двух матчей,
|
||
оптимизация браузерных обновлений и работы второго Agent.
|
||
BUILD188 восстановил вызов удаления при верхнем счёте и сохранение действующего
|
||
удаления при снятии Delay Penalty.
|
||
BUILD180–184 развивали контекст штрафа, SQL, Preview через триггер, общую ссылку
|
||
«Своих плюсов» и подготовленные титры.
|
||
Предшествующие обновления включали роли оператора/зрителя, атомарные настройки UI,
|
||
карьеру КХЛ, аналитику, переносимый mapping и native Countdown.
|
||
|
||
## Архив прежних инструкций
|
||
|
||
[history.zip](history.zip) содержит исходные README/UPDATE/VALIDATION и manifests,
|
||
включая разбор прежних 40 падений тестов. Это исторические документы для сравнения
|
||
и восстановления, их команды установки относятся к указанным в них сборкам.
|
||
Текущие инструкции находятся в README, OPERATOR, ADMIN и ARCHITECTURE.
|
||
Исходные рабочие данные и credentials в архив истории не включены.
|