191 build - поправлены старые падения, проверены 3 матча и 6 агентов одновременных

This commit is contained in:
2026-10-21 13:41:47 +03:00
parent 787f880c0e
commit bf5e0d3101
52 changed files with 4024 additions and 730 deletions

View File

@@ -50,7 +50,7 @@ Stat2TV также может использовать существующий
Для BUILD190 обязательно повторите установку `python -m pip install -r requirements.txt`:
добавлена база часовых поясов `tzdata` для Windows. Agent.exe заменять не требуется.
Три целочисленных поля публикации Mapping добавляются существующим механизмом
миграции схемы. После запуска проверьте `/api/health`: версия `2026.10.21.1`.
миграции схемы. После запуска проверьте `/api/health`: версия `2026.10.21.2`.
Для обновления существующей VM используйте пакет только изменённых файлов;
полный архив содержит снимок настроек из присланной копии и предназначен для
восстановления/новой установки. Не заменяйте им более свежие настройки эфира.
@@ -132,6 +132,15 @@ XML не удаляются по возрасту: на них ссылаетс
После обновления выполните целевые проверки mapping/прав/нескольких матчей и
`python -m pytest tests/test_build190_mapping_delivery.py tests/test_mapping_publications.py tests/test_program_log.py tests/test_web_observability.py tests/test_storage_maintenance.py tests/test_stage1_match_access.py tests/test_stage2_ui_storage.py`.
Старые тесты с жёстко заданными историческими номерами сборок требуют отдельной
актуализации; результат такого теста сам по себе не доказывает сбой эфира.
Полный набор для разработки: `python -m pytest -q` в отдельной тестовой копии.
Дополнительно к зависимостям приложения нужны pytest и Node.js: проверки интерфейса
исполняют настоящие функции JavaScript. Исторические тесты таймеров и интерфейса
актуализированы в BUILD191; номера в именах файлов сохраняют историю появления.
Живой vMix и рабочая PostgreSQL должны проверяться на отдельном прогоне перед эфиром.
Совместную работу трёх матчей и шести Agents можно повторить командой
`python tests/multi_match_harness.py --run --ticks 60 --fields 64 --phase-timeout 900 --output multi-match-result.json`.
Без `--run` скрипт только показывает план. Он использует временную SQLite,
локальные API и поддельные WebSocket, проверяет ACK, переподключение, медленный
источник и передачу управления. Производительность PostgreSQL и настоящего
vMix проверяется отдельно на рабочем оборудовании.

View File

@@ -1,5 +1,24 @@
# Изменения и история
## 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; ограниченные безопасные повторы и защита от старых подтверждений.

File diff suppressed because it is too large Load Diff