# Проверка обновления 2026.09.27.1 ## Результаты - Полный Python-прогон после основных изменений: **432 passed, 40 failed**. Набор 40 не прошедших тестов совпадает с ранее зафиксированным набором v3; новых падений в этом прогоне нет. Их разбор сохранён в `PREVIOUS_40_FAILURES_RU.md`. - После дополнительных проверок отказов и отсутствующих записей: целевая группа **24 passed**, включая **18 новых функциональных тестов** КХЛ/карьеры. Это отдельный прогон, не повтор всего набора. - Старый тест имени обновлён под явное требование «Имя Фамилия». Статический тест BUILD45 приведён к обработчику вкладки v4, который захватывает `id` при создании переиспользуемой кнопки. Само переключение также проверялось через настоящий JS приложения. - Проверка синтаксиса Python, основного JS и встроенного JS интерфейса КХЛ — успешно. ## Проверки данных и доступа - Извлечение имени при наличии посторонних заголовков навигации. - Расшифровка исходных многоуровневых таблиц тренеров и судей, фильтрация ложных сезонов/клубов. - Восстановление имён из списков без чтения персональных страниц и без потери статистики. - Ошибки сети/HTTP, остановка запросов после блокировки, сохранение прежнего файла при полном отказе, сохранение остальных людей при частичном обновлении. - Сохранение кэша матчей с явной отметкой устаревания; повторное чтение повреждённого файла не стирает уже загруженную базу. - Завершение фонового задания даже при ошибке перечитывания данных. - Импорт идемпотентен; ошибка в середине импорта откатывает изменения. - Заявка матча, полный состав, исключение неактивных/другого турнира, отображение игрока без записи в справочнике. - Однофамильцы и конфликт даты рождения не приводят к подстановке чужой карьеры. - Проценты считаются по суммарным величинам; недостающий показатель остаётся неизвестным. - Зритель получает карьеру и CSV без изменения владельца/ревизии матча. Без входа — HTTP 401. - CSV содержит весь выбранный состав, метаданные источника и защиту текстовых значений от формул. ## Проверка на всей исходной базе В тестовую SQLite через тот же сервис SQLAlchemy импортировано: | Раздел | Записей | | --- | ---: | | Игроки | 4 264 | | Тренеры | 239 | | Судьи | 45 | | Всего | 4 548 | Первый импорт в этой среде занял около **4,55 с**; повторный при неизменившихся файлах — около **0,001 с**, без перезаписи записей. Это измерение локального тестового импорта, не обещание скорости вашей PostgreSQL или сети. Файл всей тестовой БД — около 11,3 МБ. В исходной базе у всех 4 264 игроков вместо имени сохранён текст навигации. Нормальное имя невозможно восстановить из таких строк без источника; для этого добавлена отдельная загрузка имён со списков КХЛ. ## Интерфейс Через jsdom, фактический код приложения, FastAPI и тестовую БД проверены: - новая подвкладка «Карьера», загрузка заявки и полного состава; - поиск, карточка игрока, выгрузка CSV, отсутствие команд изменения матча при работе с карьерой; - списки имён КХЛ, понятные карточки тренеров/судей; - обновление уже открытой карточки после перечитывания файла; - понятная ошибка вместо исключения JSON-парсера при HTML-ответе сервера. В обоих сценариях ошибок JavaScript не обнаружено. jsdom не измеряет реальное расположение элементов: визуальная проверка в Chromium/Windows не проводилась. ## Ограничения - Живую выгрузку KHL.ru подтвердить не удалось: прямой запрос из среды проверки завершился таймаутом, доступ к страницам через инструмент поиска — HTTP 403. Это внешнее ограничение не скрывается и не обходится. - Нет подключения к вашей PostgreSQL, Windows и реальному vMix. Удалённое развёртывание не выполнялось. - Таблица «Карьера» отражает сохранённые данные КХЛ. «Полный состав» основан на активных записях выбранного турнира в основной БД; актуальность зависит от последней синхронизации состава. - При изменении разметки сайта нераспознанные строки помечаются; неподтверждённые значения не подменяются нулями.