Выпускная проверка — 27–28 октября 2026#
Блокер resolve/reopen на PostgreSQL исправлен. Перед выпуском ещё нужны проверки Linux/POSIX и матрица Python 3.10–3.14 в CI. Документация и OpenAPI обновлены. Удаление responder/stakeholder API и хранилища AlertGroup согласовано как breaking change 2.5.
27 октября проверен 7738f25 с изменениями workspace и документации в ветке release/2.5.0, позднее сохранёнными в коммите 7cf123d. Перепроверка 28 октября выполнена на 7cf123d с незакоммиченным исправлением resolve/reopen. Для этого исправления коммитов и пуша не было. Использовались отдельные копии приложения и одноразовые БД; база рабочего checkout не затрагивалась.
Результаты — 27 октября#
| Проверка | Результат |
|---|---|
| SQLite, Python 3.12.10, Windows | 2275 passed, 78 skipped, 2 deselected |
| Покрытие SQLite с ветвлениями | 73,46% при пороге 50% |
Полный PostgreSQL 16.15, включая tests/postgresql | 2237 passed, 5 failed, 17 errors, 77 skipped в первом прогоне; перепроверка описана ниже |
| Новые OpenAPI-контракты и перепроверка сбоев окружения на PostgreSQL | 62 passed |
| Итоговые OpenAPI/combined activity проверки на SQLite | 33 passed; дополнительный сценарий разных ролей одного пользователя тоже прошёл |
| Workspace в настоящем Chrome, Playwright 1.62.1 | Пройдено |
| Node: состояние и навигация workspace | Пройдено |
| Helm 3.19.0 | 51 passed; включает 47 пропусков Helm из общего прогона |
helm lint | Пройдено; только информационная рекомендация добавить icon |
| Настоящее обновление 2.4 → 2.5 на SQLite и PostgreSQL | Оба пройдены |
| Компиляция Python, схемы БД, шаблоны | Пройдено |
| Полная спецификация OpenAPI 3.0.3 и примеры SLO | Пройдено |
Ruff для OpenAPI/контрактов, дубли тестов, ссылки/front matter, YAML workflow, git diff --check | Пройдено |
Перепроверка PostgreSQL включала UTF-8, доступный временный каталог и исправленный тест activity: теперь он проверяет готовую спецификацию, а не формат исходника. Эти ошибки устранены. Два оставшихся первоначальных сбоя требуют POSIX/Linux: container bootstrap и проверка file mode 0600. Оставшимся функциональным сбоем была гонка ниже, исправленная 28 октября. Исторический PostgreSQL-прогон по-прежнему содержит перечисленные ошибки.
Блокер resolve/reopen исправлен — 28 октября 2026#
До исправления исходный тест повторно воспроизвёл TimeoutError. Ручной resolve ожидал блокировку незавершённого reopen и затем мог закрыть уже новое срабатывание. Теперь resolve, увидевший завершённую или объединённую группу, возвращается без записи. Для активной группы сохраняются блокировка строки и повторная проверка состояния: одновременные resolve остаются идемпотентными.
Результаты перепроверки на Python 3.12.10 / Windows:
| Проверка | Результат |
|---|---|
| PostgreSQL 16.15: alerts, специальные PostgreSQL-тесты, incidents, notifications, notifiers | 748 passed, 1 failed, 0 skipped |
| Повтор smoke-теста PostgreSQL с ожидаемым именем БД | 1 passed, 0 failed, 0 skipped |
| SQLite: alerts, incidents, notifications, notifiers | 737 passed, 0 failed, 0 skipped |
Ruff для изменённых Python-файлов, синтаксис Python, дубли тестов, git diff --check | Пройдено |
Единственный сбой PostgreSQL вызван тем, что smoke-тест подключения требует имя БД incidentrelay_test, а основной прогон использовал отдельную БД incidentrelay_resolve_reopen_test. Неизменённый smoke-тест прошёл при повторе на одноразовой БД с ожидаемым именем. Функциональных сбоев в этих наборах не осталось.
Покрыты успешный и отменённый reopen, новый resolve после фиксации reopen, одновременные resolve с единственным событием, записью аудита и обновлением уведомлений, а также откат и повтор после ошибки записи события или аудита. Существующие проверки гонок recovery delivery/reopen и Incident также проходят. Это регрессионные наборы затронутых компонентов; полный выпускной набор в рамках этой перепроверки не запускался.
Команда для одноразовой БД с её тестовой конфигурацией:
pytest tests/alerts tests/postgresql tests/incidents tests/notifications tests/notifiers \
-o 'norecursedirs=.git .venv .tmp __pycache__' -q
Для SQLite нужно убрать tests/postgresql. Исходный регрессионный тест tests/postgresql/test_alert_reopen_concurrency.py::test_manual_resolve_during_uncommitted_reopen_is_noop сохранён и параметризован для commit и rollback.
Миграция и ограничения среды#
Исходники 2.4 проверены по release commit 21ea27d92927242ed499b7584a276f47cb1c68cd с учётом переводов строк Git. В каждой legacy-таблице из пяти записей на обеих БД получены одна сохранённая, одна объединённая, две unmapped и одна ambiguous. Проверены технические комментарии, флаги уведомлений, история объединения, новые вставки/sequence, повторный no-op migrate и соответствие схем моделям.
Из 78 пропусков общего набора 47 Helm и один браузерный тест затем прошли отдельно; одна PostgreSQL-only проверка выполнена на PostgreSQL. Остались 29 Linux container проверок. Десять POSIX multiprocess metrics тестов не собирались; два deselected теста также требуют POSIX/Linux. Заглушка только импорта fcntl позволила загрузить приложение на Windows, но не подтверждает работу POSIX locking. Эти проверки нуждаются в Linux CI.
Временный PostgreSQL слушал только loopback. Для ускорения отключались ожидание синхронизации WAL и fsync: проверялись SQL-транзакции и гонки, а не сохранность после сбоя ОС или питания. После проверок сервер остановлен. Матрица Python 3.10–3.14 на Linux и настоящий запуск контейнеров локально не выполнялись. Обновлённый CI включает PostgreSQL-specific тесты и Chromium workspace на Python 3.12; для текущих незакоммиченных файлов удалённый CI не запускался.