2026-04-03 08:30:56 +03:00
# Changelog
Формат: семантическое версионирование `MAJOR.MINOR.PATCH` . Git-теги `v1.0.0` , `v1.1.0` и т.д. — см. [docs/VERSIONING.md ](docs/VERSIONING.md ).
2026-04-03 08:45:19 +03:00
## [1.4.0] — 2026-04-03
Правое меню «Разделы» на главной и на страницах модулей, пункты из `MODULE_MOUNTS` (`title` + `ui_router` ).
- **`nav_rail_html` **, ** `wrap_module_html_page` **, общие стили ** `APP_SHELL_CSS` ** в `modules/ui_support.py` .
- Модуль **schedules** в реестре переименован для примера: ** `title` = «Календарь дежурств»**.
## [1.3.0] — 2026-04-03
В е б -UI модулей с главной страницы и изоляция ошибок превью.
### Добавлено
- **`ModuleMount` **: поля `slug` , `title` , опционально `ui_router` , `render_home_fragment` .
- **`/ui/modules/<slug>/` ** — монтирование `ui_router` каждого модуля (полные HTML-страницы, не в OpenAPI).
- **Главная `/` **: секция «Модули» с карточками; фрагменты через ** `ui_support.safe_fragment` ** (падение одного модуля не ломает страницу).
- Примеры в `schedules` , `contacts` , `statusboard` ; тесты `tests/test_root_ui.py` .
## [1.2.0] — 2026-04-03
Модульная разработка без правок `main.py` на каждый новый роутер.
### Добавлено
- **`onguard24/modules/registry.py` ** — единый список `MODULE_MOUNTS` (роутер, префикс URL, `register_events` ). Подключение роутеров в `create_app()` циклом.
- У каждого модуля (`schedules` , `contacts` , `statusboard` ) функция ** `register_events(EventBus)` ** — заготовка подписки на `alert.received` .
- **`app.state.event_bus` **: при старте создаётся `InMemoryEventBus` , вызывается `register_module_events` .
- **Ingress Grafana:** `INSERT … RETURNING id` , затем ** `publish_alert_received` ** с ссылкой на строку `ingress_events` .
- Документация: [docs/MODULES.md ](docs/MODULES.md ).
2026-04-03 08:36:35 +03:00
## [1.1.0] — 2026-04-03
Инфраструктура разработки и задел под домен IRM.
### Добавлено
- **Миграции:** Alembic (`alembic.ini` , `alembic/env.py` , ревизии в `alembic/versions/` ). Начальная схема: таблица `ingress_events` (как раньше в коде). Команда: `alembic upgrade head` . DDL при старте приложения убран — только пул asyncpg.
- **Тесты:** `pytest` , `pytest-asyncio` , моки интеграций; тесты API: `/health` , `/api/v1/status` , `POST /api/v1/ingress/grafana` (в т.ч. секрет webhook). Установка: `pip install -e ".[dev]"` .
- **Домен (задел):** пакет `onguard24/domain/` — сущности `Alert` , `Incident` , эскалация; `EventBus` / `InMemoryEventBus` , протокол `Module` для подписки на события. Описание: [docs/DOMAIN.md ](docs/DOMAIN.md ).
### Зависимости
- Прод: `sqlalchemy` , `alembic` , `psycopg[binary]` (для CLI миграций).
- Dev (optional): `pytest` , `pytest-asyncio` , `respx` .
Т е г в репозитории (после публикации): `v1.1.0` .
2026-04-03 08:30:56 +03:00
## [1.0.0] — 2026-04-03
Первый зафиксированный релиз **каркаса** (scaffold).
### Что входит
- **Backend:** FastAPI, uvicorn, конфиг из `.env` (путь к `.env` от корня репозитория).
- **БД:** PostgreSQL через asyncpg, пул, миграция `ingress_events` (сырой SQL в `onguard24/db.py` ).
- **Ingress:** `POST /api/v1/ingress/grafana` — сохранение JSON алерта в БД; опционально `X-OnGuard-Secret` + `GRAFANA_WEBHOOK_SECRET` .
- **Статус:** `GET /` , `GET /api/v1/status` — проверки database, Vault, Grafana (SA token), Forgejo (PAT + fallback без `read:user` ).
- **Модули-заглушки:** `schedules` , `contacts` , `statusboard` под префиксом `/api/v1/modules/...` .
- **Фронт:** Vite + React в `web/` (прокси на API).
- **Документация:** README, `.env.example` , `docs/ARCHITECTURE.md` .
### Н е входит (следующие версии)
- Alembic / полноценные миграции.
- Авторизация публичных API (кроме секрета webhook).
- Бизнес-логика IRM (эскалации, дежурства, светофор) — только заготовки модулей.
Т е г в репозитории: `v1.0.0` .