Files
hockey_new/docs/CHANGELOG.md

265 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Изменения и история
## 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 в архив истории не включены.