chore(test): развернуть и проверить сохранение GRE peer IP
This commit is contained in:
1 parent
bd3f996f55
commit
26e8225815
11 files changed
+427
-8
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Статус на2026-10-08: backend8782054/frontendb55588f, backend healthy. Browser retry/checkpoint на реальном HTTP/PG принят в границах12.5.43–45; Telegram sender responses подменены, реальная доставка не проверена. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md).
|
||||
Статус на2026-10-08: backend/frontendbd3f996, backend healthy. GRE peer metadata и реальный lifecycle/API/UI/двусторонний Ping подтверждены в12.5.53. Browser retry/checkpoint на реальном HTTP/PG принят в границах12.5.43–45; Telegram sender responses подменены, реальная доставка не проверена. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md).
|
||||
|
||||
## Паспорт стенда
|
||||
|
||||
@@ -365,3 +365,15 @@ Retry POST0, Telegram calls0, JS errors0, SQL fixture counts сохраняли
|
||||
gre-comment.test.ts проверил create plan→native comment→map→snapshot→restore, Unicode/несколько строк, idempotence, legacy, invalid suffix и explicit clear; планы ограничены GRE/IP, без /ip/route. Прежний entity-snapshots.test.ts passed. Playwright gre-form+gre-toggle5/5: создание/DTO/edit, сохранённый ввод при отказе и неверном receipt, explicit empty remoteInnerIp, подтверждение переключения. Browser ответы локальных проверок подменены; новое metadata на реальном RouterOS этим блоком не принято. Backend tsc --noEmit и scoped frontend typecheck passed. Eslint без ошибок, одно прежнее unused bool предупреждение в entity-snapshots.ts:258; дифф не меняет этот helper.
|
||||
|
||||
Код и тесты готовы к сборке; удалённый runtime пока backend8782054/frontendb55588f, реальные GRE объекты из51 удалены. Следующий12.5.53 — production Docker build/deploy backend и frontend, новая собственная GRE пара с независимой проверкой peer read/MTU-toggle/clear/restore, реальный UI и двусторонний Ping, очистка по имени и decoded ownership comment. Пользовательское требование реальных VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.53 — развёртывание peer metadata и реальный GRE regression (2026-10-08)
|
||||
|
||||
[Развёртывание](ux-ui/acceptance/deployed-bd3f996-2026-10-08.json): backend и frontend из bd3f996f55cccd312dfe5861900849ca21791be8, чистый Git archive SHA256 c154aa8c706d083a791ed04f26bad433cb1ab9a5d9a6c6ec08b5751d7977d46f совпал после передачи. Docker staging повторяет main workflow; обе сборки exit0, Next production compile/full TypeScript passed. Backend imageId sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8, frontend sha256:1f22f4a2900b13bb5b1202e4a98a4c679b57d6453599318b52cbc988a63cc4053. Только две image tag переменные .env обновлены, compose validation/health passed, version1.0.0-test.bd3f996. Прежние образы сохранены. Приватный PG backup1433491bytes/PGDMP/pg_restore --list passed остаётся только на сервере; дамп и секреты в Git не передавались. Push не выполнялся.
|
||||
|
||||
[Настоящий GRE lifecycle](ux-ui/acceptance/gre-real-metadata-bd3f996-2026-10-08.json): новая собственная пара на двух CHR, предварительно GRE разделы пусты и подсеть198.18.255.248/30 свободна. POST201/201 вернули запрошенный peer IP и чистый пользовательский комментарий. Независимое чтение native comment подтвердило metadata, MTU1360 и disable/enable сохранили peer; explicit clear и restore собственной первой apply-ревизии подтвердились. Snapshot проверен по имени, одному объекту и peer до restore, текущий GRE state ограничен собственным fixture. Двусторонний Ping после running:true —3/3,0%loss,~54ms. Это plain GRE/point-to-point ICMP, не IPsec или throughput benchmark.
|
||||
|
||||
[Browser regression](ux-ui/acceptance/browser-gre-metadata-2026-10-08.json): production frontend/API без HTTP mocks, peer и local IP в формах обоих устройств, comment без служебного suffix, server/tunnel URL и reload сохранены,320px fits. НаCHR1 очистка и повторное сохранение peer через форму дали PATCH200/200, результат перечитан непосредственно с RouterOS. JS errors0. [CHR1](ux-ui/screens/gre-metadata-real-form-server1-320-2026-10-08.png) просмотрен, [CHR2](ux-ui/screens/gre-metadata-real-form-server2-320-2026-10-08.png) сохранён. [Smoke](ux-ui/acceptance/deploy-browser-bd3f996-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
|
||||
|
||||
Первые browser попытки остановились на меню, которое исчезало при перерисовке. Таймер первой пары удалил собственные объекты. Немедленная сверка /ip/route дала mismatch; финальный harness добавил ограниченное ожидание сходимости маршрутов, не меняя их вручную. Итоговый запуск exit0: DELETE200/200, все выбранные поля GRE/IP/routes/IPv4 Firewall совпали с baseline; CHR1 потребовал одно повторное чтение через250ms, CHR2 совпал сразу. Тестовое меню в успешном проходе пришлось открыть повторно1раз: это не исправленный UX, а отдельная выявленная недоработка для54. Проверка не является доказательством неизменности всех runtime параметров/полного export.
|
||||
|
||||
Own GRE интерфейсы, адреса и connected route удалены; эфемерный контейнер и туннель8018 закрыты, остались три основные Compose-службы. Main controls до/после: servers2/speedHistory9/retention14/migrations9 совпадают; GRE audit revisions намеренно сохранены. Следующий12.5.54 — сохранить устойчивость меню действий GRE при перерисовке и проверить профильный сценарий; затем продолжать настоящие VPN объекты. Права, частичные отказы остальных VPN, Portal/Telegram и прочие внешние ограничения остаются открытыми. Локальный коммит без push.
|
||||
+2
-2
@@ -1,12 +1,12 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.52 локально исправил потерю remoteInnerIp: versioned metadata комментария GRE, чистый пользовательский comment в DTO, сохранение peer в snapshot/restore и PATCH, явная очистка из формы. Backend pipeline tests/entity snapshots и browser5/5, backend/frontend typecheck passed; lint без ошибок (одно прежнее предупреждение). Исправление ещё не развёрнуто: runtime backend8782054/frontendb55588f. Следующий12.5.53 — собрать/развернуть обе части и повторить реальный GRE lifecycle/форму/очистку с metadata.
|
||||
Актуальное продолжение 2026-10-08: 12.5.53 развернул backend/frontendbd3f996 и подтвердил peer IP на новой реальной GRE паре: receipt/native/snapshot/restore/MTU/toggle/clear и UI/reload/320px passed, Ping3/3 в обе стороны. Own GRE/IP/connected routes удалены, выбранная конфигурация и DB controls восстановлены; backend healthy. Осталась UX-недоработка: меню действий закрывается при перерисовке, потребовалось повторное открытие. Следующий12.5.54 — стабильность меню GRE при обновлении данных; реальные VPN тестовые объекты создавать и очищать по правилу пользователя.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
## Актуальная точка продолжения — 2026-10-08
|
||||
|
||||
Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend8782054/frontendb55588f и два CHR. Внешние проверки подтвердили PG backup/restore/rollback, остановку фоновой работы для одного экземпляра, API JWT/RBAC и браузерные состояния восстановления. Native TCP/UDP speed, история и UI проверены в границах журнала; доступ ко второму CHR восстановлен пользователем. Очередь Telegram проверена на реальном PG: dedupe, конкурентный claim, retry/version, ошибки сохранения и неопределённый исход; ответы отправителя подменялись, реальной доставки это не доказывает. Блоки12.5.43–45 подтвердили browser retry/checkpoint и развернули понятное пояснение HTTP500. 12.5.46 подтвердил browser JWT/RBAC очереди на реальном HTTP/PG; 12.5.47 подтвердил изоляцию checkpoint при смене двух реальных HTTP/PG источников в конфигурации local; 12.5.48 подтвердил scoped axe/клавиатуру в обеих темах и320px; 12.5.49 собрал Q-матрицу и подтвердил отсутствие настройки Telegram; 12.5.50 подтвердил GET-only инвентаризацию: VPN/BGP/OSPF пусты, роли home-router/home-router; По уточнению пользователя12.5.51 создал реальные GRE туннели и подтвердил lifecycle/связность; обнаружена потеря peer IP, 12.5.52 локально исправил сохранение peer metadata, профильные проверки passed; следующий12.5.53 — build/deploy и повтор настоящей GRE приёмки. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
|
||||
Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend/frontendbd3f996 и два CHR. Внешние проверки подтвердили PG backup/restore/rollback, остановку фоновой работы для одного экземпляра, API JWT/RBAC и браузерные состояния восстановления. Native TCP/UDP speed, история и UI проверены в границах журнала; доступ ко второму CHR восстановлен пользователем. Очередь Telegram проверена на реальном PG: dedupe, конкурентный claim, retry/version, ошибки сохранения и неопределённый исход; ответы отправителя подменялись, реальной доставки это не доказывает. Блоки12.5.43–45 подтвердили browser retry/checkpoint и развернули понятное пояснение HTTP500. 12.5.46 подтвердил browser JWT/RBAC очереди на реальном HTTP/PG; 12.5.47 подтвердил изоляцию checkpoint при смене двух реальных HTTP/PG источников в конфигурации local; 12.5.48 подтвердил scoped axe/клавиатуру в обеих темах и320px; 12.5.49 собрал Q-матрицу и подтвердил отсутствие настройки Telegram; 12.5.50 подтвердил GET-only инвентаризацию: VPN/BGP/OSPF пусты, роли home-router/home-router; По уточнению пользователя12.5.51 создал реальные GRE туннели и подтвердил lifecycle/связность; обнаружена потеря peer IP, 12.5.52 локально исправил сохранение peer metadata, профильные проверки passed; 12.5.53 развернул исправление и подтвердил его на реальной GRE паре/API/UI; следующий12.5.54 — стабильность меню действий GRE при перерисовке. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
|
||||
|
||||
Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md).
|
||||
|
||||
|
||||
+14
-2
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.52 локально исправил потерю remoteInnerIp: versioned metadata комментария GRE, чистый пользовательский comment в DTO, сохранение peer в snapshot/restore и PATCH, явная очистка из формы. Backend pipeline tests/entity snapshots и browser5/5, backend/frontend typecheck passed; lint без ошибок (одно прежнее предупреждение). Исправление ещё не развёрнуто: runtime backend8782054/frontendb55588f. Следующий12.5.53 — собрать/развернуть обе части и повторить реальный GRE lifecycle/форму/очистку с metadata.
|
||||
Актуальное продолжение 2026-10-08: 12.5.53 развернул backend/frontendbd3f996 и подтвердил peer IP на новой реальной GRE паре: receipt/native/snapshot/restore/MTU/toggle/clear и UI/reload/320px passed, Ping3/3 в обе стороны. Own GRE/IP/connected routes удалены, выбранная конфигурация и DB controls восстановлены; backend healthy. Осталась UX-недоработка: меню действий закрывается при перерисовке, потребовалось повторное открытие. Следующий12.5.54 — стабильность меню GRE при обновлении данных; реальные VPN тестовые объекты создавать и очищать по правилу пользователя.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -34,7 +34,19 @@
|
||||
| 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–52 и ограничения ниже. Runtime backend8782054/frontendb55588f. |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–53 и ограничения ниже. Runtime backend/frontendbd3f996. |
|
||||
|
||||
## 12.5.53 — развёртывание peer metadata и реальный GRE regression (2026-10-08)
|
||||
|
||||
[Развёртывание](ux-ui/acceptance/deployed-bd3f996-2026-10-08.json): backend и frontend из bd3f996f55cccd312dfe5861900849ca21791be8, чистый Git archive SHA256 c154aa8c706d083a791ed04f26bad433cb1ab9a5d9a6c6ec08b5751d7977d46f совпал после передачи. Docker staging повторяет main workflow; обе сборки exit0, Next production compile/full TypeScript passed. Backend imageId sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8, frontend sha256:1f22f4a2900b13bb5b1202e4a98a4c679b57d6453599318b52cbc988a63cc4053. Только две image tag переменные .env обновлены, compose validation/health passed, version1.0.0-test.bd3f996. Прежние образы сохранены. Приватный PG backup1433491bytes/PGDMP/pg_restore --list passed остаётся только на сервере; дамп и секреты в Git не передавались. Push не выполнялся.
|
||||
|
||||
[Настоящий GRE lifecycle](ux-ui/acceptance/gre-real-metadata-bd3f996-2026-10-08.json): новая собственная пара на двух CHR, предварительно GRE разделы пусты и подсеть198.18.255.248/30 свободна. POST201/201 вернули запрошенный peer IP и чистый пользовательский комментарий. Независимое чтение native comment подтвердило metadata, MTU1360 и disable/enable сохранили peer; explicit clear и restore собственной первой apply-ревизии подтвердились. Snapshot проверен по имени, одному объекту и peer до restore, текущий GRE state ограничен собственным fixture. Двусторонний Ping после running:true —3/3,0%loss,~54ms. Это plain GRE/point-to-point ICMP, не IPsec или throughput benchmark.
|
||||
|
||||
[Browser regression](ux-ui/acceptance/browser-gre-metadata-2026-10-08.json): production frontend/API без HTTP mocks, peer и local IP в формах обоих устройств, comment без служебного suffix, server/tunnel URL и reload сохранены,320px fits. НаCHR1 очистка и повторное сохранение peer через форму дали PATCH200/200, результат перечитан непосредственно с RouterOS. JS errors0. [CHR1](ux-ui/screens/gre-metadata-real-form-server1-320-2026-10-08.png) просмотрен, [CHR2](ux-ui/screens/gre-metadata-real-form-server2-320-2026-10-08.png) сохранён. [Smoke](ux-ui/acceptance/deploy-browser-bd3f996-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
|
||||
|
||||
Первые browser попытки остановились на меню, которое исчезало при перерисовке. Таймер первой пары удалил собственные объекты. Немедленная сверка /ip/route дала mismatch; финальный harness добавил ограниченное ожидание сходимости маршрутов, не меняя их вручную. Итоговый запуск exit0: DELETE200/200, все выбранные поля GRE/IP/routes/IPv4 Firewall совпали с baseline; CHR1 потребовал одно повторное чтение через250ms, CHR2 совпал сразу. Тестовое меню в успешном проходе пришлось открыть повторно1раз: это не исправленный UX, а отдельная выявленная недоработка для54. Проверка не является доказательством неизменности всех runtime параметров/полного export.
|
||||
|
||||
Own GRE интерфейсы, адреса и connected route удалены; эфемерный контейнер и туннель8018 закрыты, остались три основные Compose-службы. Main controls до/после: servers2/speedHistory9/retention14/migrations9 совпадают; GRE audit revisions намеренно сохранены. Следующий12.5.54 — сохранить устойчивость меню действий GRE при перерисовке и проверить профильный сценарий; затем продолжать настоящие VPN объекты. Права, частичные отказы остальных VPN, Portal/Telegram и прочие внешние ограничения остаются открытыми. Локальный коммит без push.
|
||||
|
||||
## 12.5.52 — сохранение удалённого внутреннего IP GRE (2026-10-08)
|
||||
|
||||
|
||||
+13
-1
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.52 локально исправил потерю remoteInnerIp: versioned metadata комментария GRE, чистый пользовательский comment в DTO, сохранение peer в snapshot/restore и PATCH, явная очистка из формы. Backend pipeline tests/entity snapshots и browser5/5, backend/frontend typecheck passed; lint без ошибок (одно прежнее предупреждение). Исправление ещё не развёрнуто: runtime backend8782054/frontendb55588f. Следующий12.5.53 — собрать/развернуть обе части и повторить реальный GRE lifecycle/форму/очистку с metadata.
|
||||
Актуальное продолжение 2026-10-08: 12.5.53 развернул backend/frontendbd3f996 и подтвердил peer IP на новой реальной GRE паре: receipt/native/snapshot/restore/MTU/toggle/clear и UI/reload/320px passed, Ping3/3 в обе стороны. Own GRE/IP/connected routes удалены, выбранная конфигурация и DB controls восстановлены; backend healthy. Осталась UX-недоработка: меню действий закрывается при перерисовке, потребовалось повторное открытие. Следующий12.5.54 — стабильность меню GRE при обновлении данных; реальные VPN тестовые объекты создавать и очищать по правилу пользователя.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -1530,3 +1530,15 @@ Retry POST0, Telegram calls0, JS errors0, SQL fixture counts сохраняли
|
||||
gre-comment.test.ts проверил create plan→native comment→map→snapshot→restore, Unicode/несколько строк, idempotence, legacy, invalid suffix и explicit clear; планы ограничены GRE/IP, без /ip/route. Прежний entity-snapshots.test.ts passed. Playwright gre-form+gre-toggle5/5: создание/DTO/edit, сохранённый ввод при отказе и неверном receipt, explicit empty remoteInnerIp, подтверждение переключения. Browser ответы локальных проверок подменены; новое metadata на реальном RouterOS этим блоком не принято. Backend tsc --noEmit и scoped frontend typecheck passed. Eslint без ошибок, одно прежнее unused bool предупреждение в entity-snapshots.ts:258; дифф не меняет этот helper.
|
||||
|
||||
Код и тесты готовы к сборке; удалённый runtime пока backend8782054/frontendb55588f, реальные GRE объекты из51 удалены. Следующий12.5.53 — production Docker build/deploy backend и frontend, новая собственная GRE пара с независимой проверкой peer read/MTU-toggle/clear/restore, реальный UI и двусторонний Ping, очистка по имени и decoded ownership comment. Пользовательское требование реальных VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.53 — развёртывание peer metadata и реальный GRE regression (2026-10-08)
|
||||
|
||||
[Развёртывание](ux-ui/acceptance/deployed-bd3f996-2026-10-08.json): backend и frontend из bd3f996f55cccd312dfe5861900849ca21791be8, чистый Git archive SHA256 c154aa8c706d083a791ed04f26bad433cb1ab9a5d9a6c6ec08b5751d7977d46f совпал после передачи. Docker staging повторяет main workflow; обе сборки exit0, Next production compile/full TypeScript passed. Backend imageId sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8, frontend sha256:1f22f4a2900b13bb5b1202e4a98a4c679b57d6453599318b52cbc988a63cc4053. Только две image tag переменные .env обновлены, compose validation/health passed, version1.0.0-test.bd3f996. Прежние образы сохранены. Приватный PG backup1433491bytes/PGDMP/pg_restore --list passed остаётся только на сервере; дамп и секреты в Git не передавались. Push не выполнялся.
|
||||
|
||||
[Настоящий GRE lifecycle](ux-ui/acceptance/gre-real-metadata-bd3f996-2026-10-08.json): новая собственная пара на двух CHR, предварительно GRE разделы пусты и подсеть198.18.255.248/30 свободна. POST201/201 вернули запрошенный peer IP и чистый пользовательский комментарий. Независимое чтение native comment подтвердило metadata, MTU1360 и disable/enable сохранили peer; explicit clear и restore собственной первой apply-ревизии подтвердились. Snapshot проверен по имени, одному объекту и peer до restore, текущий GRE state ограничен собственным fixture. Двусторонний Ping после running:true —3/3,0%loss,~54ms. Это plain GRE/point-to-point ICMP, не IPsec или throughput benchmark.
|
||||
|
||||
[Browser regression](ux-ui/acceptance/browser-gre-metadata-2026-10-08.json): production frontend/API без HTTP mocks, peer и local IP в формах обоих устройств, comment без служебного suffix, server/tunnel URL и reload сохранены,320px fits. НаCHR1 очистка и повторное сохранение peer через форму дали PATCH200/200, результат перечитан непосредственно с RouterOS. JS errors0. [CHR1](ux-ui/screens/gre-metadata-real-form-server1-320-2026-10-08.png) просмотрен, [CHR2](ux-ui/screens/gre-metadata-real-form-server2-320-2026-10-08.png) сохранён. [Smoke](ux-ui/acceptance/deploy-browser-bd3f996-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
|
||||
|
||||
Первые browser попытки остановились на меню, которое исчезало при перерисовке. Таймер первой пары удалил собственные объекты. Немедленная сверка /ip/route дала mismatch; финальный harness добавил ограниченное ожидание сходимости маршрутов, не меняя их вручную. Итоговый запуск exit0: DELETE200/200, все выбранные поля GRE/IP/routes/IPv4 Firewall совпали с baseline; CHR1 потребовал одно повторное чтение через250ms, CHR2 совпал сразу. Тестовое меню в успешном проходе пришлось открыть повторно1раз: это не исправленный UX, а отдельная выявленная недоработка для54. Проверка не является доказательством неизменности всех runtime параметров/полного export.
|
||||
|
||||
Own GRE интерфейсы, адреса и connected route удалены; эфемерный контейнер и туннель8018 закрыты, остались три основные Compose-службы. Main controls до/после: servers2/speedHistory9/retention14/migrations9 совпадают; GRE audit revisions намеренно сохранены. Следующий12.5.54 — сохранить устойчивость меню действий GRE при перерисовке и проверить профильный сценарий; затем продолжать настоящие VPN объекты. Права, частичные отказы остальных VPN, Portal/Telegram и прочие внешние ограничения остаются открытыми. Локальный коммит без push.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-08
|
||||
|
||||
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source8782054078304f36cc611876af2d17f87b857f60/version1.0.0-test.8782054 healthy. Frontend sourceb55588f29be0de02639bc795801e55b89f03aad7/version1.0.0-test.b55588f обновлён в12.5.45.
|
||||
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend sourcebd3f996f55cccd312dfe5861900849ca21791be8/version1.0.0-test.bd3f996 healthy. Frontend sourcebd3f996f55cccd312dfe5861900849ca21791be8/version1.0.0-test.bd3f996 обновлён в12.5.53.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -14,7 +14,7 @@
|
||||
| PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed |
|
||||
| Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data |
|
||||
| Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска |
|
||||
| Образы приложения | mmapp-test/backend:ux-8782054 и mmapp-test/frontend:ux-b55588f;запущены |
|
||||
| Образы приложения | mmapp-test/backend:ux-bd3f996 и mmapp-test/frontend:ux-bd3f996;запущены |
|
||||
|
||||
Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example).
|
||||
|
||||
@@ -373,3 +373,15 @@ Retry POST0, Telegram calls0, JS errors0, SQL fixture counts сохраняли
|
||||
gre-comment.test.ts проверил create plan→native comment→map→snapshot→restore, Unicode/несколько строк, idempotence, legacy, invalid suffix и explicit clear; планы ограничены GRE/IP, без /ip/route. Прежний entity-snapshots.test.ts passed. Playwright gre-form+gre-toggle5/5: создание/DTO/edit, сохранённый ввод при отказе и неверном receipt, explicit empty remoteInnerIp, подтверждение переключения. Browser ответы локальных проверок подменены; новое metadata на реальном RouterOS этим блоком не принято. Backend tsc --noEmit и scoped frontend typecheck passed. Eslint без ошибок, одно прежнее unused bool предупреждение в entity-snapshots.ts:258; дифф не меняет этот helper.
|
||||
|
||||
Код и тесты готовы к сборке; удалённый runtime пока backend8782054/frontendb55588f, реальные GRE объекты из51 удалены. Следующий12.5.53 — production Docker build/deploy backend и frontend, новая собственная GRE пара с независимой проверкой peer read/MTU-toggle/clear/restore, реальный UI и двусторонний Ping, очистка по имени и decoded ownership comment. Пользовательское требование реальных VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.53 — развёртывание peer metadata и реальный GRE regression (2026-10-08)
|
||||
|
||||
[Развёртывание](ux-ui/acceptance/deployed-bd3f996-2026-10-08.json): backend и frontend из bd3f996f55cccd312dfe5861900849ca21791be8, чистый Git archive SHA256 c154aa8c706d083a791ed04f26bad433cb1ab9a5d9a6c6ec08b5751d7977d46f совпал после передачи. Docker staging повторяет main workflow; обе сборки exit0, Next production compile/full TypeScript passed. Backend imageId sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8, frontend sha256:1f22f4a2900b13bb5b1202e4a98a4c679b57d6453599318b52cbc988a63cc4053. Только две image tag переменные .env обновлены, compose validation/health passed, version1.0.0-test.bd3f996. Прежние образы сохранены. Приватный PG backup1433491bytes/PGDMP/pg_restore --list passed остаётся только на сервере; дамп и секреты в Git не передавались. Push не выполнялся.
|
||||
|
||||
[Настоящий GRE lifecycle](ux-ui/acceptance/gre-real-metadata-bd3f996-2026-10-08.json): новая собственная пара на двух CHR, предварительно GRE разделы пусты и подсеть198.18.255.248/30 свободна. POST201/201 вернули запрошенный peer IP и чистый пользовательский комментарий. Независимое чтение native comment подтвердило metadata, MTU1360 и disable/enable сохранили peer; explicit clear и restore собственной первой apply-ревизии подтвердились. Snapshot проверен по имени, одному объекту и peer до restore, текущий GRE state ограничен собственным fixture. Двусторонний Ping после running:true —3/3,0%loss,~54ms. Это plain GRE/point-to-point ICMP, не IPsec или throughput benchmark.
|
||||
|
||||
[Browser regression](ux-ui/acceptance/browser-gre-metadata-2026-10-08.json): production frontend/API без HTTP mocks, peer и local IP в формах обоих устройств, comment без служебного suffix, server/tunnel URL и reload сохранены,320px fits. НаCHR1 очистка и повторное сохранение peer через форму дали PATCH200/200, результат перечитан непосредственно с RouterOS. JS errors0. [CHR1](ux-ui/screens/gre-metadata-real-form-server1-320-2026-10-08.png) просмотрен, [CHR2](ux-ui/screens/gre-metadata-real-form-server2-320-2026-10-08.png) сохранён. [Smoke](ux-ui/acceptance/deploy-browser-bd3f996-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
|
||||
|
||||
Первые browser попытки остановились на меню, которое исчезало при перерисовке. Таймер первой пары удалил собственные объекты. Немедленная сверка /ip/route дала mismatch; финальный harness добавил ограниченное ожидание сходимости маршрутов, не меняя их вручную. Итоговый запуск exit0: DELETE200/200, все выбранные поля GRE/IP/routes/IPv4 Firewall совпали с baseline; CHR1 потребовал одно повторное чтение через250ms, CHR2 совпал сразу. Тестовое меню в успешном проходе пришлось открыть повторно1раз: это не исправленный UX, а отдельная выявленная недоработка для54. Проверка не является доказательством неизменности всех runtime параметров/полного export.
|
||||
|
||||
Own GRE интерфейсы, адреса и connected route удалены; эфемерный контейнер и туннель8018 закрыты, остались три основные Compose-службы. Main controls до/после: servers2/speedHistory9/retention14/migrations9 совпадают; GRE audit revisions намеренно сохранены. Следующий12.5.54 — сохранить устойчивость меню действий GRE при перерисовке и проверить профильный сценарий; затем продолжать настоящие VPN объекты. Права, частичные отказы остальных VPN, Portal/Telegram и прочие внешние ограничения остаются открытыми. Локальный коммит без push.
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"date": "2026-10-08",
|
||||
"frontendSource": "bd3f996",
|
||||
"backendSource": "bd3f996",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"httpMocks": false,
|
||||
"actualCreatedGre": true,
|
||||
"cases": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"urlContextPreserved": true,
|
||||
"localInnerIp": "198.18.255.249/30",
|
||||
"remoteInnerIp": "198.18.255.250/30",
|
||||
"remoteInnerIpPreserved": true,
|
||||
"userCommentClean": true,
|
||||
"formMatchesDevice": true,
|
||||
"clearRestoreViaBrowser": true,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"urlContextPreserved": true,
|
||||
"localInnerIp": "198.18.255.250/30",
|
||||
"remoteInnerIp": "198.18.255.249/30",
|
||||
"remoteInnerIpPreserved": true,
|
||||
"userCommentClean": true,
|
||||
"formMatchesDevice": true,
|
||||
"clearRestoreViaBrowser": false,
|
||||
"mobileFits": true
|
||||
}
|
||||
],
|
||||
"browserPatchStatuses": [
|
||||
200,
|
||||
200
|
||||
],
|
||||
"menuReopens": 1,
|
||||
"pageErrors": [],
|
||||
"limits": [
|
||||
"Real GRE pair: API lifecycle and browser peer clear/restore; no HTTP mocks",
|
||||
"Persisted peer tested in receipt/native metadata/snapshot and actual form",
|
||||
"Only own GRE fixture edited; server harness performs bounded cleanup"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"date": "2026-10-08",
|
||||
"backendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
|
||||
"frontendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
|
||||
"httpMocks": false,
|
||||
"pages": [
|
||||
{
|
||||
"path": "/dashboard",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"path": "/servers",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"path": "/uptime?tab=speed",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"path": "/settings",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"path": "/filters",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
},
|
||||
{
|
||||
"path": "/alerts",
|
||||
"status": 200,
|
||||
"mobileFits": true
|
||||
}
|
||||
],
|
||||
"pageErrors": [],
|
||||
"badApiResponses": []
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"date": "2026-10-08",
|
||||
"source": "bd3f996f55cccd312dfe5861900849ca21791be8",
|
||||
"backendImageId": "sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8",
|
||||
"frontendImageId": "sha256:1f22f4a2900b13bb5b1202e4a98a4c679b57d645359318b52cbc988a63cc4053",
|
||||
"backendHealthy": true,
|
||||
"health": {
|
||||
"status": "ok",
|
||||
"timestamp": "2026-10-08T09:14:40.170Z",
|
||||
"version": "1.0.0-test.bd3f996",
|
||||
"eventLoopDelayMs": 20,
|
||||
"flowWorker": {
|
||||
"alive": false,
|
||||
"bound": false,
|
||||
"pendingSize": 0,
|
||||
"dropped": 0,
|
||||
"packetsReceived": 0
|
||||
}
|
||||
},
|
||||
"controlBefore": {
|
||||
"servers": 2,
|
||||
"speedHistory": 9,
|
||||
"retentionDays": 14,
|
||||
"migrations": 9
|
||||
},
|
||||
"controlAfter": {
|
||||
"servers": 2,
|
||||
"speedHistory": 9,
|
||||
"retentionDays": 14,
|
||||
"migrations": 9
|
||||
},
|
||||
"controlsUnchanged": true,
|
||||
"privateBackupBytes": 1433491,
|
||||
"privateBackupListValid": true,
|
||||
"sourceArchiveSha256": "c154aa8c706d083a791ed04f26bad433cb1ab9a5d9a6c6ec08b5751d7977d46f",
|
||||
"buildsExit": 0,
|
||||
"push": false
|
||||
}
|
||||
@@ -0,0 +1,250 @@
|
||||
{
|
||||
"date": "2026-10-08",
|
||||
"backendSource": "bd3f996",
|
||||
"frontendSource": "bd3f996",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"subnet": "198.18.255.248/30",
|
||||
"changes": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 201
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 201
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/gre/revisions?serverId=1",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "PATCH",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "PATCH",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "PATCH",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "PATCH",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/gre/revisions/ea58db2e-8063-4a93-8aa9-dd08c550ee3a/restore",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200
|
||||
}
|
||||
],
|
||||
"pings": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"target": "198.18.255.250",
|
||||
"interface": "mm-acceptance-gre-1791450698730",
|
||||
"rows": [
|
||||
{
|
||||
"sent": "1",
|
||||
"received": "1",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms634us",
|
||||
"avg-rtt": "54ms634us"
|
||||
},
|
||||
{
|
||||
"sent": "2",
|
||||
"received": "2",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms230us",
|
||||
"avg-rtt": "54ms432us"
|
||||
},
|
||||
{
|
||||
"sent": "3",
|
||||
"received": "3",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms515us",
|
||||
"avg-rtt": "54ms459us"
|
||||
}
|
||||
],
|
||||
"received": 3
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"target": "198.18.255.249",
|
||||
"interface": "mm-acceptance-gre-1791450698730",
|
||||
"rows": [
|
||||
{
|
||||
"sent": "1",
|
||||
"received": "1",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms357us",
|
||||
"avg-rtt": "54ms357us"
|
||||
},
|
||||
{
|
||||
"sent": "2",
|
||||
"received": "2",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms284us",
|
||||
"avg-rtt": "54ms320us"
|
||||
},
|
||||
{
|
||||
"sent": "3",
|
||||
"received": "3",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms375us",
|
||||
"avg-rtt": "54ms338us"
|
||||
}
|
||||
],
|
||||
"received": 3
|
||||
}
|
||||
],
|
||||
"realRouterOs": true,
|
||||
"creates": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"status": 201,
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"returnedRemoteInnerIp": "198.18.255.250/30",
|
||||
"requestedRemoteInnerIp": "198.18.255.250/30"
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"status": 201,
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"returnedRemoteInnerIp": "198.18.255.249/30",
|
||||
"requestedRemoteInnerIp": "198.18.255.249/30"
|
||||
}
|
||||
],
|
||||
"snapshotPeerPersisted": true,
|
||||
"createdState": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"interface": {
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"localAddress": "194.226.121.150",
|
||||
"remoteAddress": "104.165.244.7",
|
||||
"mtu": "1400",
|
||||
"keepalive": "2s,3",
|
||||
"remoteInnerIp": "198.18.255.250/30",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-gre-1791450698730",
|
||||
"running": "false",
|
||||
"disabled": "false"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.249/30"
|
||||
]
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"interface": {
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"localAddress": "104.165.244.7",
|
||||
"remoteAddress": "194.226.121.150",
|
||||
"mtu": "1400",
|
||||
"keepalive": "2s,3",
|
||||
"remoteInnerIp": "198.18.255.249/30",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-gre-1791450698730",
|
||||
"running": "false",
|
||||
"disabled": "false"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.250/30"
|
||||
]
|
||||
}
|
||||
],
|
||||
"runningBeforePing": true,
|
||||
"bidirectionalPingPassed": true,
|
||||
"updatedState": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"interface": {
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"localAddress": "194.226.121.150",
|
||||
"remoteAddress": "104.165.244.7",
|
||||
"mtu": "1360",
|
||||
"keepalive": "2s,3",
|
||||
"remoteInnerIp": "198.18.255.250/30",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-gre-1791450698730",
|
||||
"running": "true",
|
||||
"disabled": "false"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.249/30"
|
||||
]
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"interface": {
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-gre-1791450698730",
|
||||
"localAddress": "104.165.244.7",
|
||||
"remoteAddress": "194.226.121.150",
|
||||
"mtu": "1400",
|
||||
"keepalive": "2s,3",
|
||||
"remoteInnerIp": "198.18.255.249/30",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-gre-1791450698730",
|
||||
"running": "true",
|
||||
"disabled": "false"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.250/30"
|
||||
]
|
||||
}
|
||||
],
|
||||
"explicitClearConfirmed": true,
|
||||
"snapshotRestoreConfirmed": true,
|
||||
"routeConvergence": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"polls": 1,
|
||||
"matched": true
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"/interface/gre": true,
|
||||
"/ip/address": true,
|
||||
"/ip/route": true,
|
||||
"/ip/firewall/filter": true,
|
||||
"/ip/firewall/nat": true,
|
||||
"/ip/firewall/mangle": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"/interface/gre": true,
|
||||
"/ip/address": true,
|
||||
"/ip/route": true,
|
||||
"/ip/firewall/filter": true,
|
||||
"/ip/firewall/nat": true,
|
||||
"/ip/firewall/mangle": true
|
||||
}
|
||||
],
|
||||
"limits": [
|
||||
"Plain GRE, not encrypted IPsec; no throughput test",
|
||||
"Only own interface/IPs and generated connected route changed; no default routes or firewall changes",
|
||||
"Application GRE revisions intentionally remain as audit history",
|
||||
"Ping success establishes tested point-to-point traffic only"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
Reference in new issue
Block a user