fix(alerts): подтверждать конфигурацию внутри транзакции сохранения

This commit is contained in:
Denozordec committed 2026-10-03 17:22:41 +07:00
1 parent 6093442bcf
commit 9bc3a5db77
10 files changed
+150 -113

No files matched your search

+9 -1
View File
@@ -28,7 +28,7 @@
| 9 | VPN, Firewall и Filters | Завершён в границах локальной приёмки 2026-09-30; блоки 9.1–9.64, ограничения в 9.64 |
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.4.2.2.1.1; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.4.2.2.1.2; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,14 @@
## Блок 11Б.4.2.2.1.2 — transactional receipt правил (2026-10-03)
- Replace теперь возвращает strict rules/groups receipt из самой transaction. Omitted groups читает внутри той же transaction после nonblocking pg_try_advisory_xact_lock; lock false даёт 409 без очереди/удаления, unknown lock не подтверждает действие. Targets/conditions/groups/rules/last-fired readback использует tx context вместо отдельных pool запросов после commit.
- DI executor сверяет каждое переданное поле и набор ID с readback до возврата callback: write/read/мismatched receipt failure заставляет transaction отклонить callback, нет повторного replace. Router отправляет готовый receipt, не делает post-commit reread. Legacy replaceAlertRules передаёт omitted groups без предварительного GET.
- 4 transaction-control DI, 3 normalization, 7 Telegram service + HTTP/JWT (включая rules 409), backend build/typecheck/lint прошли. Это контроль работы callback, не реальное доказательство PG rollback/lock overlap; PostgreSQL не запускался.
- Полная replace по-прежнему допускает last-writer overwrite старым снимком после окончания другого save: optimistic revision/ETag пока нет. GET overview всё ещё multi-query, outbox unknown retry policy и UI прежние; Alerts целиком не принят.
- Следующий блок 11Б.4.3.1: UI source-keyed lifetime и strict независимые readers, known/error/time без demo fallback; затем drafts/selective Telegram, rules confirmation/locks/rights/unknown review и адаптивность. Отдельно согласованность GET и outbox unknown audit.
## Блок 11Б.4.2.2.1.1 — общая нормализация правил и групп (2026-10-03)
- normalizeAlertsConfig общий для client и backend до transaction/delete. Сохраняет порядок OR targets/conditions, legacy одиночные поля, прежние summary labels, cooldown/recovery/combine policy; 0 delay означает off/null. Known empty groups отличается от omitted groups. Дубликаты ID, неизвестная группа и whitespace-only объекты/условия отклоняются до записи; HTTP возвращает 400.