fix(ospf): подтвердить права и результат оптимизации на RouterOS
This commit is contained in:
1 parent
3bfd4ae6cf
commit
36c6a21ca5
19 files changed
+1069
-15
No files matched your search
@@ -720,3 +720,32 @@ flowchart LR
|
||||
**Результат.** [Очищенный отчёт](ux-ui/acceptance/ospf-bfd-timing-2026-10-09.json): HTTP samples, scoped native logs, initial-attempt summary, recovery и baseline. Все свои firewall/logging/OSPF/BFD/IP/bridge/GRE объекты удалены после exact-ID/атрибутов preflight. Исходные ID10 коллекций×2 совпали; оба CHR доступны. Продукт/зависимости/runtime не менялись, сборки/широкие регрессии не повторялись. Локальный коммит без push. Квота5% использовано после завершения.
|
||||
|
||||
Настройки протокола подтверждены [MikroTik BFD](https://help.mikrotik.com/docs/spaces/ROS/pages/191299691/BFD), механика memory logging — [MikroTik Log](https://help.mikrotik.com/docs/spaces/ROS/pages/328094/Log). Продолжение87: собственные OSPF templates через production optimizer preview/apply, неизвестные/модельные метрики и частичный отказ без заявления полного успеха; далее recursive diagnostics. Этап12.5 остаётся открытым.
|
||||
|
||||
## 12.5.87 — OSPF optimizer: права, реальные costs и частичный результат (2026-10-09)
|
||||
|
||||
**Изменения.** Три проверки разрешения в OSPF UI приведены к backend mm:network:write. Роль только mm:servers:write не запускает оптимизацию, network writer может её выполнить. Существующие Frame/компоненты/композиция ReUI сохранены; skill ReUI применён для минимальной правки поведения.
|
||||
|
||||
POST optimize при отказе записи возвращает502 и request-local receipt: state partial для подтверждённых шагов перед RouterOS4xx; unknown при потерянном ACK/transport/5xx; rejected при первом явном4xx. applied содержит только подтверждённые interfaces/from/to, confirmedWrites, failedInterface и needsReview. После первого отказа следующие записи не выполняются. Preflight/plan ошибки остаются500 без заявления о записи. Автоматического rollback/retry, durable receipt или межпроцессной блокировки не добавлено. UI сохраняет прежнее сообщение о неподтверждённой операции и повторный опрос.
|
||||
|
||||
**RouterOS7.24.5.** GET может опустить disabled при unset и у interface-template, и у instance/area. GET disabled=false/proplist не раскрывает effective default: отдельный native POST /get с .id/value-name=disabled возвращает ret=false; при disable ret=true; при явно false GET уже содержит false. Добавлено чтение эффективного значения только для пропущенного disabled, до4 одновременно. Значение не угадывается по отсутствию или inactive. Неправильный ответ/отказ/повтор ID блокирует чтение. Явные значения сохраняются, исходный payload не мутируется. Большой набор unset потребует дополнительных RPC; maximum scale/performance этого пути не принят.
|
||||
|
||||
| Проверка | До | После / доказательство |
|
||||
| --- | --- | --- |
|
||||
| Права кнопки OSPF | servers:write расходится с API | network:write; обе роли проверены на320px |
|
||||
| Неявный disabled | strict preview500 | native /get подтверждает состояние templates/instances/areas |
|
||||
| Частичный отказ | обычный500 без шагов | partial/unknown/rejected и подтверждённые изменения |
|
||||
| Production preview/apply | Не принято на устройстве | preview без записи, два costs применены на каждом CHR, повтор0 |
|
||||
|
||||
Схема: устройство → достоверные flags/costs → preview → последовательная запись → receipt → повторный опрос. Референс сохранён: [Data Grid Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp). [Экран ПК](ux-ui/screens/ospf-real-optimizer-server1-1280-2026-10-09.png), [320px](ux-ui/screens/ospf-real-optimizer-server1-320-2026-10-09.png); mobile просмотрен, кнопки/cur-opt помещаются в документе.
|
||||
|
||||
**Реальная приёмка.** Свои GRE/link198.18.87.0/30/loopbacks198.18.187.1/32↔2/32, OSPF instances/area, templates с начальными costs50/60. Public interfaces не включались в OSPF, originate-default=never. Production preview сохранил native costs, apply изменил два собственных шаблона на10/20 согласно плану, repeat optimizedCount0. DTO observed остаётся отдельным от модельных ping/speeds; fallback не объявляется измерением. OSPF Full, private route active, Ping3/3 по первоначальной проверке пары.
|
||||
|
||||
Изолированный экземпляр тех же compiled routes с настоящими PATCH собственных шаблонов: reject второго шага до передачи → partial/confirmed1, второй cost неизменён; исключение после подтверждённого native PATCH, вместо ACK вызывающему коду → unknown/confirmed1, отдельный GET подтверждает оба фактических изменения. Это инъекция ответа, не физический TCP disconnect. После тестов production API привёл costs к текущему плану. [Native/API/flags протокол](ux-ui/acceptance/ospf-optimizer-2026-10-09.json).
|
||||
|
||||
**Браузер и локальные проверки.** Настоящий deployed frontend/backend без HTTP interception: два устройства×1280/320 =4/4, apply повтор0, receipt/server context, кнопка после опроса, reload URL, document fits/pageerror0. [Browser отчёт](ux-ui/acceptance/browser-ospf-optimizer-2026-10-09.json). Профильные E2E OSPF operations/optimizer apply16/16; optimizer identity/metrics/plan/effective disabled/HTTP, catalog tests и signed JWT RBAC passed. Backend build и scoped frontend tsc passed, Docker frontend production build прошёл. Обычный root tsc захватывает старые ignored tmp build copies и имеет исходные ошибки; scoped config исключает tmp. ESLint новых helper/test/UI прошёл; OSPF прежние2 unused warnings, mikrotik.ts прежние2 prefer-const errors подтверждены на HEAD, новых ошибок нет. Полная регрессия не повторялась.
|
||||
|
||||
**Оснастка/очистка.** Первые два native runs отказались на отсутствующем disabled template, затем instance; оба exact cleanup7 коллекций×2 passed. Read-only discovery проверила proplist/filter/get; numbers оказался неподдерживаемым аргументом, рабочий .id проверен. Отдельная flags fixture cleaned baseline5 коллекций. Финальный run native/browser прошёл, own templates/areas/instances/IP/bridge/GRE удалены по точным ID/атрибутам, исходные IDs7 коллекций×2 совпали. 195.195.195.195/32/default/management routes сохранены. Оба CHR доступны, credentials не менялись, fixture контейнеров/DB записей не осталось.
|
||||
|
||||
**Runtime.** Backend ux-optimizer87c/version1.0.0-test.optimizer87c, image sha256:22cc9a09a89038e58c15dfd6224191d1fab7ad63f7af6f80ecc9e7577483d390; frontend ux-optimizer87/version1.0.0-test.optimizer87, image sha256:22f05c341a7dc0e40e04f23b0da61ba5cfbf31d741d4e22b0c9bcd71c85e0c49. Backend/PG healthy, frontend served/browser passed. Backend entry/node --check/pg_restore18.6, frontend entry/node --check и compose --wait passed. Три backend builds87/87b/87c по двум реальным flag incompatibilities; frontend build один, apt cache сохранён. Context backend routing83 +2 routes, затем4 файлов final-c; override SHA c04289ab57294d57cc9aed292e247e144c171ade3d1101f6ebb84129e41b065be; frontend ipsec77 +OSPF page, override dab57aad2cb248553b0fee9da73069f7a31cb627b26c414f03320315a299756db. Labels не Git SHA; это рабочие файлы до локального коммита. .env backup приватный, миграций нет. Один локальный commit без push.
|
||||
|
||||
Продолжение88 — recursive routes, затем диагностика. BFD sustained/alternate-path failover, IPv6/scale/maximum throughput, Portal SSO/browser auth и другие внешние ограничения сохраняются; lab AUTH_REQUIRED=false, RBAC checked отдельно. API /get и .proplist/query подтверждены [RouterOS REST API](https://help.mikrotik.com/docs/spaces/ROS/pages/47579162/REST%2BAPI) и реальным устройством. Квота23% использовано, этап12.5 открыт.
|
||||
Reference in new issue
Block a user