fix(settings): защищать восстановление базы от повторов и смены контекста

This commit is contained in:
Denozordec committed 2026-10-03 16:52:02 +07:00
1 parent 92b65a30ce
commit 57293479d1
13 files changed
+148 -188

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Б.3.6.2.2.2; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.3.6.2.3.1; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,15 @@
## Блок 11Б.3.6.2.3.1 — отдельная форма базы и неизвестный результат (2026-10-03)
- Inline DB handlers вынесены в SystemDatabaseSection: source-keyed lifetime, AbortController/active guard, проверка settings admin и backend health, общий synchronous lock backup/restore, удержание confirmation и запрет cancel во время POST. Результат/ошибки/warnings показаны внутри формы; убраны дублирующие toast сообщения.
- Dispatch checkpoint ставится только после проверки PGDMP/размера до отправки POST. Неизвестный результат блокирует повтор даже после cancel, смены секции и reload: memory + sessionStorage guard по источнику. Пользователь должен проверить данные/журнал и явно разрешить новый запрос; health не считается подтверждением восстановления. HTTP 401/403/409/413 — отказ без checkpoint; malformed receipt/ошибка транспорта сохраняют его. Нет автоматического повтора.
- Старый ответ размонтированной формы не очищает checkpoint нового lifetime. Отмена reader не доказывает прекращение server restore. При недоступном sessionStorage guard сохраняется в памяти до reload; состояние выбранного файла после reload не восстанавливается, checkpoint остаётся при доступном storage.
- 10 browser сценариев (включая 3 responsive и 2 прежних receipt), 5 API unit групп, lint/typecheck и production frontend/contracts build прошли. 3 снимка confirmation, 320 просмотрен. Первый прогон двух прежних E2E выявил duplicate toast/inline/closing dialog message; устранено, повтор прошёл.
- Найдено, что same-origin Next proxy отбрасывал новый outcome header. Передача header исправлена; отдельный proxy test, lint/typecheck прошли после изменения. Остальные внутренние headers не передаются.
- Следующий точный шаг 11Б.3.6.2.3.2: browser source/ABA/unmount и соседняя Settings регрессия; затем локальная приёмка System DB. Реальный PG dump/restore/worker pause/Portal ещё требуют внешней проверки.
## Блок 11Б.3.6.2.2.2 — подтверждённая операция и вторичные сбои (2026-10-03)
- Core backup/restore отделён от restart listener/scheduler: оба restart выполняются независимо, их errors — warnings после подтверждённой команды; первичная ошибка не подменяется вторичной. Ошибка stop предотвращает команду и запускает попытки восстановления потребителей. Cleanup warning сохранён.