fix(alerts): подтвердить риск ручного повтора сообщения

This commit is contained in:
Denozordec committed 2026-10-03 19:21:19 +07:00
1 parent 7d0608bbce
commit b109532f33
11 files changed
+103 -16

No files matched your search

+10 -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.4.3.4; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.4.4.3.5; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,15 @@
## Блок 11Б.4.4.3.5 — явный повтор очереди в UI (2026-10-03)
- Unknown item получает доступный по правам/health action и существующий AlertDialog: явное подтверждение проверки чата и риска дубликата. Processing не имеет action. POST передаёт только id/version/risk; строгий helper проверяет pending receipt и version+1 без retry. UI сообщает постановку в очередь, а не доставку.
- Синхронный lock и общий Alerts operation lock исключают concurrent config/test/refresh; dialog не закрывается во время POST. До запроса ставится source-scoped memory/session checkpoint без payload/secret; malformed/network/5xx сохраняет его через refresh/reload/ABA. Подтверждённый 4xx снимает checkpoint и сохраняет форму; ручная проверка результата отдельная и не отправляет POST.
- API 2/2, queue browser 6/6 плюс mobile dialog 1/1 (320px screenshot просмотрен, Escape/focus/cancel без POST), context 14/14 прошли. Typecheck без incremental, профильный lint прошли; ReUI Frame checklist применён, installed primitives не менялись.
- Реальный PG/Telegram не проверен. Полная Alerts приёмка не завершена: processing recovery требует отдельного сценария остановки отправителя, остались pickers/адаптивность и неподдерживаемое BGP-prefix условие. Backend manual retry не подтверждает внешнюю доставку.
- Уточнение расследования прав: глобальный GRE GET создаёт AppSidebar, а useDashboardLive вызывается только dashboard page. Ранее запись о «глобальном dashboard reader» была неточной; оба reader требуют проверки прав.
- Следующий точный шаг 11Б.4.4.3.6: исправить права общих sidebar/dashboard readers (источник фонового GRE оказался AppSidebar), затем адаптивность/pickers, Releases/probe scheduling и приёмка 11Б/12. Processing остаётся без повтора до отдельного сценария подтверждённой остановки отправителя.
## Блок 11Б.4.4.3.4 — атомарный ручной повтор unknown (2026-10-03)
- POST /api/alerts/outbox/:id/retry под mm:alerts:write/admin требует literal acknowledgedDuplicateRisk:true и expectedVersion. Conditional UPDATE только telegram+unknown+resolution_version переводит запись в pending и увеличивает version. Processing/sent/failed/pending, устаревший снимок и повторный запрос получают 409; endpoint не отправляет Telegram и не пишет ложный успешный history.