fix(evolution): разделить состояния настроек и каталога и защитить контекст

This commit is contained in:
Denozordec committed 2026-10-03 13:42:00 +07:00
1 parent 554dba55ec
commit 9db1471b2c
11 files changed
+158 -202

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.5.2; scheduler и GeoIP приняты локально; NetFlow принят локально; далее Evolution и общие settings |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.3.5.3.1; scheduler и GeoIP приняты локально; NetFlow принят локально; далее Evolution и общие settings |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,15 @@
## Блок 11Б.3.5.3.1 — Evolution provider и свежесть (2026-10-03)
- Provider подключил strict settings/save/test helpers. GET error/malformed не становится settingsLoaded; settings и catalog имеют независимые loading/error/browser receivedAt. Catalog failure сохраняет последнее snapshot/time; отключение/смена сохранённого URL/secret flag и запись ключа инвалидируют прежний каталог. Save заканчивается по receipt до независимого запроса каталога.
- Контекст привязан к mode/backend и отдельному immutable token каждой смены; children приложения не перемонтируются. Reader revision/abort, active guards и единый save/test lock исключают публикацию старого источника. Finish сверяет конкретную session, чтобы старый callback не снимал новый lock. Provider API abort не доказывает отмену backend.
- В Settings добавлен статус с unknown/false, свежестью и раздельными ошибками; исходные поля/dirty/effects ещё требуют миграции. Локальный ref session заменил первоначальную mutable useMemo session после замечаний ESLint; итоговый lint и typecheck прошли.
- 8 provider E2E: 7 прошли сразу, malformed PUT selector уточнён для inline+toast старой формы и повтор прошёл. 2 предыдущих catalog/test E2E и 6 source E2E Settings/Catalog/Save (success/error) прошли; source меняется внутри текущего layout через General/backend input. Production frontend/contracts build прошёл.
- Это приёмка provider данных, не всей формы/настроек. Старые caller toast/error/dirty guards остаются до 11Б.3.5.4; live catalog consumers ещё могут показывать mock при отключённой/unknown интеграции. Реальный Evolution/PG/Portal не проверен.
- Далее 11Б.3.5.3.2: strict upstream catalog mapper и nullable unknown ASN/community prefix counts (сейчас backend превращает malformed lists/неизвестные числа в пустые массивы/0). Затем форма/consumers 11Б.3.5.4.
## Блок 11Б.3.5.2 — backend Evolution save/test (2026-10-03)
- Settings GET/PUT/test вынесены в DI plugin. PUT пишет только переданные нормализованные поля, RETURNING подтверждает их фактические значения, включая apiKey внутри backend; ответ отдаёт только literal ok/public flags/savedFields, без key echo. Singleton insert устойчив к конфликту.