diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 0a1999a2..c613c7ce 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -14,6 +14,8 @@ IPsec82: production certificate data plane/NAT Ping3/3, capped UDP3s, history gr Routing83: disabled BGP/OSPF selected/raw409/probe0 и собственная eBGP Established пара с reject-all filters приняты; original routes/config preserved, own DB/native fixtures удалены. [Отчёт](ux-ui/acceptance/routing-bgp-disabled-2026-10-09.json). +OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/browser checks приняты. Exact own cleanup и исходные7 коллекций×2 passed; runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-gre-2026-10-09.json). + ## Паспорт стенда Перед внешним запуском зафиксировать отдельные PostgreSQL и RouterOS тестовые устройства, версии server/client PostgreSQL и RouterOS, HEAD backend/frontend, роли пользователей, число экземпляров backend/планировщика/отправителей и способ их остановки. Для Telegram использовать тестовый чат, для остальных интеграций — тестовые endpoints и учётные записи. Зафиксировать ожидаемые изменения и способ восстановления стенда. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index b2e03713..cd515b37 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,6 +1,6 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-09: 12.5.83 закрыл опрос выключенных устройств в BGP raw/selected и OSPF selected; выбранный OSPF сообщает отказ BFD/routes. Real disabled probe0, eBGP Established на двух CHR с reject-all input/output и baseline cleanup приняты. Backend ux-routing83 healthy, frontend ux-ipsec77. Следующий12.5.84 — реальная OSPF adjacency/маршрут через собственный GRE; этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.84 принял реальную OSPFv2 Full adjacency и частные loopback routes через собственный GRE, Ping3/3 в обе стороны и4 live browser PC/320px URL-сценария. Все собственные объекты удалены, baseline7 коллекций×2 восстановлен. Runtime backend ux-routing83/frontend ux-ipsec77, без новой сборки. Следующий12.5.85 — BFD на собственной OSPF/GRE паре; этап12.5 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-09. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index d4708556..4620ac1e 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-09: 12.5.83 закрыл опрос выключенных устройств в BGP raw/selected и OSPF selected; выбранный OSPF сообщает отказ BFD/routes. Real disabled probe0, eBGP Established на двух CHR с reject-all input/output и baseline cleanup приняты. Backend ux-routing83 healthy, frontend ux-ipsec77. Следующий12.5.84 — реальная OSPF adjacency/маршрут через собственный GRE; этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.84 принял реальную OSPFv2 Full adjacency и частные loopback routes через собственный GRE, Ping3/3 в обе стороны и4 live browser PC/320px URL-сценария. Все собственные объекты удалены, baseline7 коллекций×2 восстановлен. Runtime backend ux-routing83/frontend ux-ipsec77, без новой сборки. Следующий12.5.85 — BFD на собственной OSPF/GRE паре; этап12.5 открыт. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,21 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–83 и ограничения ниже. Runtime backend ux-routing83/frontend ux-ipsec77. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–84 и ограничения ниже. Runtime backend ux-routing83/frontend ux-ipsec77. | + +## 12.5.84 — OSPF: Full adjacency, GRE и реальная таблица (2026-10-09) + +**Сценарий.** На двух CHR созданы собственные GRE,198.18.84.1/30↔2/30, bridge loopbacks198.18.184.1/32↔2/32, OSPFv2 instances/router IDs, backbone area и templates: ptp GRE/cost10/hello1s/dead4s; passive loopback/cost1. Originate-default=never, redistribution не включалась, public interfaces не включены в OSPF. Baseline instance пустой проверен до создания. + +**Native/API.** Оба соседа Full; только собственные частные remote prefixes выучены и active. Ping loopback3/3 в обе стороны. Production /ospf/catalog и /servers/:id/ospf подтвердили neighbor/route/device context. Raw route имеет distance110 без ospf-metric/оспf-type; main catalog сохраняет cost=null/type Unknown, не выдаёт110 за измеренный cost. Legacy selected route representation сохраняет старую совместимость — не считать её полем фактической метрики. [Native/API отчёт](ux-ui/acceptance/ospf-gre-2026-10-09.json). + +**Браузер.** Headless Edge, настоящий deployed frontend/backend, без interception/mock: два устройства×1280/320 =4/4. DOM содержит нужного соседа/выученный prefix, selected button aria-pressed, server/tab URL восстанавливается после reload, document не расширяется, pageerror0. Скриншоты показывают сводку/топологию верхнего экрана; таблица доступна ниже во внутренней прокрутке Frame. [Browser отчёт](ux-ui/acceptance/browser-ospf-gre-2026-10-09.json), экраны ospf-real-neighbors-server1/2-1280/320-2026-10-09.png. UI/source/dependencies не менялись. + +**Оснастка.** Первая native попытка проверила route сразу при Full до завершения SPF и отказалась; cleanup прошёл. Ожидание исправлено на Full плюс active learned route. Первая browser попытка ожидала role=tab, тогда как существующий UI использует button/aria-pressed; тест поправлен по прочитанному коду, продукт не менялся ради локатора. Финальные native и browser runs прошли; промежуточные попытки не считаются UI acceptance. + +**Очистка.** Exact receipt ID/name/comment/address/interface проверены до удаления. Templates→areas→instances, свои IP/bridge/GRE удалены; контроль обеих сторон после удаления всей пары и bounded route convergence. Исходные ID7 коллекций×2 совпали, адрес195.195.195.195/32 и public/default routes сохранены. Credentials не менялись. Сборок/миграций/смены runtime не было; backend ux-routing83/version1.0.0-test.routing83 healthy, frontend ux-ipsec77. Один локальный commit без push, только evidence/docs. + +Следующий85 — разрешение BFD только на своих GRE/private peers и Up/control-plane checks. Не приняты BFD/failover/optimizer/масштаб/IPv6 и остальные внешние границы. Механика instance/area/template подтверждена [MikroTik OSPF](https://help.mikrotik.com/docs/spaces/ROS/pages/9863229/OSPF); таблицы/Frame сохраняют общие референсы плана. ## 12.5.83 — маршрутизация: выключенные устройства и реальная eBGP-пара (2026-10-09) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 15859960..3e3a3089 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1982,3 +1982,17 @@ flowchart LR **Runtime.** Одна backend Docker сборка, entry/node --check/pg_restore18.6 и compose --wait passed. mmapp-test/backend:ux-routing83/version1.0.0-test.routing83, image sha256:b68c326b8ee601eb2c490e7517c49614abd8cdfccc9d2af2ec44fb5d3dc5aded7, healthy. Frontend ux-ipsec77 сохранён. Context ipsec82c +четыре routing backend файла рабочего состояния до коммита, archive eaaca441a3eae1c95396abaca4a09fa4a38e4a769adaff276fc4bbcadac18244; label routing83, не итоговый Git SHA. .env backup приватный; миграций нет. Один локальный коммит без push. Следующий84 — OSPF Full adjacency и обучение только собственного частного prefix через собственный GRE; исходные public interfaces/default routes сохранить. BGP failover/route propagation/BFD optimizer/recursive diagnostics и внешние границы IPsec82 остаются открытыми. Версия RouterOS7.20+ с явными instance подтверждена [MikroTik BGP](https://help.mikrotik.com/docs/spaces/ROS/pages/328220/BGP) и настоящим API7.24.5; схема таблиц/деталей сохраняет референсы Data Grid Filtering2/List9 общего плана. + +## 12.5.84 — OSPF: Full adjacency, GRE и реальная таблица (2026-10-09) + +**Сценарий.** На двух CHR созданы собственные GRE,198.18.84.1/30↔2/30, bridge loopbacks198.18.184.1/32↔2/32, OSPFv2 instances/router IDs, backbone area и templates: ptp GRE/cost10/hello1s/dead4s; passive loopback/cost1. Originate-default=never, redistribution не включалась, public interfaces не включены в OSPF. Baseline instance пустой проверен до создания. + +**Native/API.** Оба соседа Full; только собственные частные remote prefixes выучены и active. Ping loopback3/3 в обе стороны. Production /ospf/catalog и /servers/:id/ospf подтвердили neighbor/route/device context. Raw route имеет distance110 без ospf-metric/оспf-type; main catalog сохраняет cost=null/type Unknown, не выдаёт110 за измеренный cost. Legacy selected route representation сохраняет старую совместимость — не считать её полем фактической метрики. [Native/API отчёт](ux-ui/acceptance/ospf-gre-2026-10-09.json). + +**Браузер.** Headless Edge, настоящий deployed frontend/backend, без interception/mock: два устройства×1280/320 =4/4. DOM содержит нужного соседа/выученный prefix, selected button aria-pressed, server/tab URL восстанавливается после reload, document не расширяется, pageerror0. Скриншоты показывают сводку/топологию верхнего экрана; таблица доступна ниже во внутренней прокрутке Frame. [Browser отчёт](ux-ui/acceptance/browser-ospf-gre-2026-10-09.json), экраны ospf-real-neighbors-server1/2-1280/320-2026-10-09.png. UI/source/dependencies не менялись. + +**Оснастка.** Первая native попытка проверила route сразу при Full до завершения SPF и отказалась; cleanup прошёл. Ожидание исправлено на Full плюс active learned route. Первая browser попытка ожидала role=tab, тогда как существующий UI использует button/aria-pressed; тест поправлен по прочитанному коду, продукт не менялся ради локатора. Финальные native и browser runs прошли; промежуточные попытки не считаются UI acceptance. + +**Очистка.** Exact receipt ID/name/comment/address/interface проверены до удаления. Templates→areas→instances, свои IP/bridge/GRE удалены; контроль обеих сторон после удаления всей пары и bounded route convergence. Исходные ID7 коллекций×2 совпали, адрес195.195.195.195/32 и public/default routes сохранены. Credentials не менялись. Сборок/миграций/смены runtime не было; backend ux-routing83/version1.0.0-test.routing83 healthy, frontend ux-ipsec77. Один локальный commit без push, только evidence/docs. + +Следующий85 — разрешение BFD только на своих GRE/private peers и Up/control-plane checks. Не приняты BFD/failover/optimizer/масштаб/IPv6 и остальные внешние границы. Механика instance/area/template подтверждена [MikroTik OSPF](https://help.mikrotik.com/docs/spaces/ROS/pages/9863229/OSPF); таблицы/Frame сохраняют общие референсы плана. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 98da7581..9d4fff6f 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -30,6 +30,8 @@ IPsec82: production certificate data plane/NAT Ping3/3, capped UDP3s, history gr Routing83: disabled BGP/OSPF selected/raw409/probe0 и собственная eBGP Established пара с reject-all filters приняты; original routes/config preserved, own DB/native fixtures удалены. [Отчёт](ux-ui/acceptance/routing-bgp-disabled-2026-10-09.json). +OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/browser checks приняты. Exact own cleanup и исходные7 коллекций×2 passed; runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-gre-2026-10-09.json). + ## Развёртывание приложения Чистые frontend/backend build contexts подготовлены по .gitea/workflows/docker.yml из закреплённого Git HEAD;образы собраны на сервере без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next. diff --git a/docs/ux-ui/acceptance/browser-ospf-gre-2026-10-09.json b/docs/ux-ui/acceptance/browser-ospf-gre-2026-10-09.json new file mode 100644 index 00000000..37efb51f --- /dev/null +++ b/docs/ux-ui/acceptance/browser-ospf-gre-2026-10-09.json @@ -0,0 +1,39 @@ +{ + "date": "2026-10-09", + "phase": "2 320", + "cases": [ + { + "serverId": 1, + "width": 1280, + "neighborVisible": true, + "learnedRouteVisible": true, + "urlRestore": true, + "documentFits": true + }, + { + "serverId": 1, + "width": 320, + "neighborVisible": true, + "learnedRouteVisible": true, + "urlRestore": true, + "documentFits": true + }, + { + "serverId": 2, + "width": 1280, + "neighborVisible": true, + "learnedRouteVisible": true, + "urlRestore": true, + "documentFits": true + }, + { + "serverId": 2, + "width": 320, + "neighborVisible": true, + "learnedRouteVisible": true, + "urlRestore": true, + "documentFits": true + } + ], + "errors": [] +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/ospf-gre-2026-10-09.json b/docs/ux-ui/acceptance/ospf-gre-2026-10-09.json new file mode 100644 index 00000000..e61a3842 --- /dev/null +++ b/docs/ux-ui/acceptance/ospf-gre-2026-10-09.json @@ -0,0 +1,161 @@ +{ + "date": "2026-10-09", + "name": "mm-ospf84-1791541911027", + "observations": [ + { + "serverId": 1, + "nativeNeighbor": { + ".id": "*F3FDDC00", + "router-id": "198.18.184.2", + "address": "198.18.84.2", + "interface": "mm-ospf84-1791541911027", + "state": "Full", + "state-changes": "6" + }, + "nativeRoute": { + ".id": "*2014C000", + "dst-address": "198.18.184.2/32", + "gateway": "198.18.84.2%mm-ospf84-1791541911027", + "ospf": "true", + "active": "true", + "distance": "110" + }, + "catalogNeighbors": [ + { + "id": "*F3FDDC00", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.84.2", + "routerId": "198.18.184.2", + "instance": "mm-ospf84-1791541911027", + "area": "mm-ospf84-1791541911027", + "areaId": "0.0.0.0", + "interface": "mm-ospf84-1791541911027", + "state": "Full", + "uptime": "4s", + "stateChanges": 6, + "priority": null + } + ], + "catalogRoutes": [ + { + "id": "*2014C000", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.184.2/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.84.2", + "via": "mm-ospf84-1791541911027", + "area": "" + } + ], + "pingReceived": 3 + }, + { + "serverId": 2, + "nativeNeighbor": { + ".id": "*F3FDDC00", + "router-id": "198.18.184.1", + "address": "198.18.84.1", + "interface": "mm-ospf84-1791541911027", + "state": "Full", + "state-changes": "5" + }, + "nativeRoute": { + ".id": "*2014C000", + "dst-address": "198.18.184.1/32", + "gateway": "198.18.84.1%mm-ospf84-1791541911027", + "ospf": "true", + "active": "true", + "distance": "110" + }, + "catalogNeighbors": [ + { + "id": "*F3FDDC00", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "address": "198.18.84.1", + "routerId": "198.18.184.1", + "instance": "mm-ospf84-1791541911027", + "area": "mm-ospf84-1791541911027", + "areaId": "0.0.0.0", + "interface": "mm-ospf84-1791541911027", + "state": "Full", + "uptime": "4s", + "stateChanges": 5, + "priority": null + } + ], + "catalogRoutes": [ + { + "id": "*2014C000", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "destination": "198.18.184.1/32", + "type": "Unknown", + "cost": null, + "nextHop": "198.18.84.1", + "via": "mm-ospf84-1791541911027", + "area": "" + } + ], + "pingReceived": 3 + } + ], + "cleanup": [ + { + "serverId": 1, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + }, + { + "serverId": 2, + "/routing/ospf/interface-template": true, + "/routing/ospf/area": true, + "/routing/ospf/instance": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + } + ], + "currentRoutes": [ + { + ".id": "*20145050", + "dst-address": "198.18.84.0/30", + "gateway": "mm-ospf84-1791541911027", + "active": "true", + "distance": "0", + "routing-table": "main" + }, + { + ".id": "*2014C000", + "dst-address": "198.18.184.1/32", + "gateway": "198.18.84.1%mm-ospf84-1791541911027", + "active": "true", + "ospf": "true", + "distance": "110", + "routing-table": "main" + }, + { + ".id": "*20145060", + "dst-address": "198.18.184.2/32", + "gateway": "mm-ospf84-1791541911027-loop", + "active": "true", + "distance": "0", + "routing-table": "main" + } + ] +} \ No newline at end of file diff --git a/docs/ux-ui/screens/ospf-real-neighbors-server1-1280-2026-10-09.png b/docs/ux-ui/screens/ospf-real-neighbors-server1-1280-2026-10-09.png new file mode 100644 index 00000000..ac9822e1 Binary files /dev/null and b/docs/ux-ui/screens/ospf-real-neighbors-server1-1280-2026-10-09.png differ diff --git a/docs/ux-ui/screens/ospf-real-neighbors-server1-320-2026-10-09.png b/docs/ux-ui/screens/ospf-real-neighbors-server1-320-2026-10-09.png new file mode 100644 index 00000000..6db4d1a9 Binary files /dev/null and b/docs/ux-ui/screens/ospf-real-neighbors-server1-320-2026-10-09.png differ diff --git a/docs/ux-ui/screens/ospf-real-neighbors-server2-1280-2026-10-09.png b/docs/ux-ui/screens/ospf-real-neighbors-server2-1280-2026-10-09.png new file mode 100644 index 00000000..b5a57c5f Binary files /dev/null and b/docs/ux-ui/screens/ospf-real-neighbors-server2-1280-2026-10-09.png differ diff --git a/docs/ux-ui/screens/ospf-real-neighbors-server2-320-2026-10-09.png b/docs/ux-ui/screens/ospf-real-neighbors-server2-320-2026-10-09.png new file mode 100644 index 00000000..578f696f Binary files /dev/null and b/docs/ux-ui/screens/ospf-real-neighbors-server2-320-2026-10-09.png differ