Документация

Выпускная проверка IncidentRelay 2.5

Версия v2.5.0 · Обновлено

Выпускная проверка — 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, Windows2275 passed, 78 skipped, 2 deselected
Покрытие SQLite с ветвлениями73,46% при пороге 50%
Полный PostgreSQL 16.15, включая tests/postgresql2237 passed, 5 failed, 17 errors, 77 skipped в первом прогоне; перепроверка описана ниже
Новые OpenAPI-контракты и перепроверка сбоев окружения на PostgreSQL62 passed
Итоговые OpenAPI/combined activity проверки на SQLite33 passed; дополнительный сценарий разных ролей одного пользователя тоже прошёл
Workspace в настоящем Chrome, Playwright 1.62.1Пройдено
Node: состояние и навигация workspaceПройдено
Helm 3.19.051 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, notifiers748 passed, 1 failed, 0 skipped
Повтор smoke-теста PostgreSQL с ожидаемым именем БД1 passed, 0 failed, 0 skipped
SQLite: alerts, incidents, notifications, notifiers737 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 не запускался.