chore(test): развернуть и проверить устойчивость меню GRE

This commit is contained in:
Denozordec committed 2026-10-08 21:16:37 +07:00
1 parent 731803bade
commit ed80aef195
11 files changed
+433 -7

No files matched your search

+11 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Статус на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).
Статус на2026-10-08: backendbd3f996/frontend731803b, backend healthy. Устойчивость меню GRE при live refresh на обоих CHR принята в12.5.55. 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).
## Паспорт стенда
@@ -385,3 +385,13 @@ Own GRE интерфейсы, адреса и connected route удалены; э
Проверки: новый tests/e2e/gre-menu-refresh.spec.ts открывает меню, запускает GET без outside pointer event, проверяет сохранение меню, disabled во время загрузки, восстановление enabled и свежий peer IP в форме. На прежнем HEAD тест падает именно из-за исчезнувшего menuitem; исправленный код проходит. Вместе с gre-toggle.spec.ts — 3/3 passed. Scoped TypeScript (tmp/tsconfig-speed-check.json) и ESLint изменённых файлов passed. Первую фикстуру скорректировали: инициализация источника допускает несколько GET, задержка включается только при проверяемом refresh. ReUI data-grid checklist проверен, общие компоненты не менялись.
Это локальное исправление. На тестовом сервере backend/frontend bd3f996; live CHR сценарий стабильности меню пока не проверен. Следующий12.5.55 — собрать и развернуть frontend, создать собственную реальную GRE пару, проверить меню при обновлении и форму, затем удалить только собственные интерфейсы/IP и проверить baseline. Реальные VPN объекты обязательны по указанию пользователя. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.55 — развёртывание устойчивого меню и повторная реальная GRE проверка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-731803b-2026-10-08.json): frontend731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b. Архив Git SHA256 b6ff604a03e65151b4f2fc1406885b97f40240646f651a371fd603c00e1e867b совпал после передачи. Staging предыдущей main-совместимой сборки обновлён единственным изменённым production input — gre-tunnels-data-grid.tsx; package-lock/Dockerfile совпали. Docker build exit0, Next production compile/full TypeScript passed. Обновлена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, прежний образ оставлен для rollback. Backendbd3f996 не менялся и healthy. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE native lifecycle](ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json): собственная новая пара mm-acceptance-gre-1791468767519, подсеть198.18.255.248/30 проверена на пересечение, оба GRE раздела исходно пусты. POST201/201, native peer metadata, snapshot/restore, MTU/disable/enable/clear подтверждены; Ping3/3 в обе стороны,0%loss. [Production browser](ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json): никаких HTTP mocks, на каждом CHR меню открыто один раз и пережило live GET200 при1280 и320px; menuReopens0. Форма совпала с native local/remote inner IP и чистым пользовательским comment; URL/reload сохранён, JS/API errors0. Toolbar refresh вызван без outside pointer event: обычный клик вне меню должен его закрывать. Controlled pending permissions проверены локально в54, здесь подтверждено реальное обновление данных.
[CHR1 mobile](ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png) визуально просмотрен, [CHR2](ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png) сохранён. Первое измерение ширины произошло во время анимации Sheet и остановило browser harness; повторный проход с ожиданием сходимости layout прошёл, продуктовый код не менялся. Выявлена отдельная UX-недоработка: два внутренних IP поля слишком узкие для чтения полной записи при320px. Это следующий56, а не заявленный исправленный результат55.
DELETE200/200, own интерфейсы/IP и connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline (CHR1 — одно повторное чтение маршрутов через250ms). Эфемерный контейнер удалён, работают только три основные Compose-службы. GRE revisions намеренно остались как история операций. [Smoke](ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0. Это plain GRE и point-to-point ICMP, не IPsec/throughput/остальные VPN. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Следующий12.5.56 — мобильная форма GRE; пользовательское правило создавать и очищать реальные VPN объекты сохраняется. Локальный коммит без push.
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-08: 12.5.54 локально исправил закрытие меню GRE при перерисовке: стабильный компонент ячейки получает актуальные обработчики и права через React context. Playwright 3/3, scoped TypeScript и ESLint passed; новый тест воспроизводит сбой на прежнем коде. Исправление ещё не развёрнуто: удалённый backend/frontend остаётся bd3f996. Следующий12.5.55 — Docker build/deploy frontend и повторная проверка меню на собственной реальной GRE паре с очисткой. Этап12.5 остаётся открытым.
Актуальное продолжение 2026-10-08: 12.5.55 развернул frontend731803b, backend остаётся bd3f996 healthy. На новой собственной GRE паре меню пережило live refresh на обоих CHR при1280/320px без повторного открытия; формы/native peer и двусторонний Ping3/3 подтверждены. Own GRE/IP удалены, выбранная конфигурация и контрольные значения БД восстановлены. Smoke6 экранов passed. Следующий12.5.56 — улучшить чтение внутренних IP в мобильной форме GRE (узкие поля при320px), затем продолжать реальные VPN проверки. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-08
Этапы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, профильные проверки passed; следующий12.5.55 — frontend Docker 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 работают backendbd3f996/frontend731803b и два 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, профильные проверки passed; 12.5.55 развернул frontend731803b и подтвердил устойчивость меню на реальной GRE паре; следующий12.5.56 — читаемые внутренние IP в мобильной форме GRE. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md).
+12 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-08: 12.5.54 локально исправил закрытие меню GRE при перерисовке: стабильный компонент ячейки получает актуальные обработчики и права через React context. Playwright 3/3, scoped TypeScript и ESLint passed; новый тест воспроизводит сбой на прежнем коде. Исправление ещё не развёрнуто: удалённый backend/frontend остаётся bd3f996. Следующий12.5.55 — Docker build/deploy frontend и повторная проверка меню на собственной реальной GRE паре с очисткой. Этап12.5 остаётся открытым.
Актуальное продолжение 2026-10-08: 12.5.55 развернул frontend731803b, backend остаётся bd3f996 healthy. На новой собственной GRE паре меню пережило live refresh на обоих CHR при1280/320px без повторного открытия; формы/native peer и двусторонний Ping3/3 подтверждены. Own GRE/IP удалены, выбранная конфигурация и контрольные значения БД восстановлены. Smoke6 экранов passed. Следующий12.5.56 — улучшить чтение внутренних IP в мобильной форме GRE (узкие поля при320px), затем продолжать реальные VPN проверки. Этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -34,7 +34,17 @@
| 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–54 и ограничения ниже. Runtime backend/frontendbd3f996. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–55 и ограничения ниже. Runtime backendbd3f996/frontend731803b. |
## 12.5.55 — развёртывание устойчивого меню и повторная реальная GRE проверка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-731803b-2026-10-08.json): frontend731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b. Архив Git SHA256 b6ff604a03e65151b4f2fc1406885b97f40240646f651a371fd603c00e1e867b совпал после передачи. Staging предыдущей main-совместимой сборки обновлён единственным изменённым production input — gre-tunnels-data-grid.tsx; package-lock/Dockerfile совпали. Docker build exit0, Next production compile/full TypeScript passed. Обновлена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, прежний образ оставлен для rollback. Backendbd3f996 не менялся и healthy. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE native lifecycle](ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json): собственная новая пара mm-acceptance-gre-1791468767519, подсеть198.18.255.248/30 проверена на пересечение, оба GRE раздела исходно пусты. POST201/201, native peer metadata, snapshot/restore, MTU/disable/enable/clear подтверждены; Ping3/3 в обе стороны,0%loss. [Production browser](ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json): никаких HTTP mocks, на каждом CHR меню открыто один раз и пережило live GET200 при1280 и320px; menuReopens0. Форма совпала с native local/remote inner IP и чистым пользовательским comment; URL/reload сохранён, JS/API errors0. Toolbar refresh вызван без outside pointer event: обычный клик вне меню должен его закрывать. Controlled pending permissions проверены локально в54, здесь подтверждено реальное обновление данных.
[CHR1 mobile](ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png) визуально просмотрен, [CHR2](ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png) сохранён. Первое измерение ширины произошло во время анимации Sheet и остановило browser harness; повторный проход с ожиданием сходимости layout прошёл, продуктовый код не менялся. Выявлена отдельная UX-недоработка: два внутренних IP поля слишком узкие для чтения полной записи при320px. Это следующий56, а не заявленный исправленный результат55.
DELETE200/200, own интерфейсы/IP и connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline (CHR1 — одно повторное чтение маршрутов через250ms). Эфемерный контейнер удалён, работают только три основные Compose-службы. GRE revisions намеренно остались как история операций. [Smoke](ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0. Это plain GRE и point-to-point ICMP, не IPsec/throughput/остальные VPN. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Следующий12.5.56 — мобильная форма GRE; пользовательское правило создавать и очищать реальные VPN объекты сохраняется. Локальный коммит без push.
## 12.5.54 — устойчивость меню GRE при обновлении таблицы (2026-10-08)
+11 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-08: 12.5.54 локально исправил закрытие меню GRE при перерисовке: стабильный компонент ячейки получает актуальные обработчики и права через React context. Playwright 3/3, scoped TypeScript и ESLint passed; новый тест воспроизводит сбой на прежнем коде. Исправление ещё не развёрнуто: удалённый backend/frontend остаётся bd3f996. Следующий12.5.55 — Docker build/deploy frontend и повторная проверка меню на собственной реальной GRE паре с очисткой. Этап12.5 остаётся открытым.
Актуальное продолжение 2026-10-08: 12.5.55 развернул frontend731803b, backend остаётся bd3f996 healthy. На новой собственной GRE паре меню пережило live refresh на обоих CHR при1280/320px без повторного открытия; формы/native peer и двусторонний Ping3/3 подтверждены. Own GRE/IP удалены, выбранная конфигурация и контрольные значения БД восстановлены. Smoke6 экранов passed. Следующий12.5.56 — улучшить чтение внутренних IP в мобильной форме GRE (узкие поля при320px), затем продолжать реальные VPN проверки. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -1550,3 +1550,13 @@ Own GRE интерфейсы, адреса и connected route удалены; э
Проверки: новый tests/e2e/gre-menu-refresh.spec.ts открывает меню, запускает GET без outside pointer event, проверяет сохранение меню, disabled во время загрузки, восстановление enabled и свежий peer IP в форме. На прежнем HEAD тест падает именно из-за исчезнувшего menuitem; исправленный код проходит. Вместе с gre-toggle.spec.ts — 3/3 passed. Scoped TypeScript (tmp/tsconfig-speed-check.json) и ESLint изменённых файлов passed. Первую фикстуру скорректировали: инициализация источника допускает несколько GET, задержка включается только при проверяемом refresh. ReUI data-grid checklist проверен, общие компоненты не менялись.
Это локальное исправление. На тестовом сервере backend/frontend bd3f996; live CHR сценарий стабильности меню пока не проверен. Следующий12.5.55 — собрать и развернуть frontend, создать собственную реальную GRE пару, проверить меню при обновлении и форму, затем удалить только собственные интерфейсы/IP и проверить baseline. Реальные VPN объекты обязательны по указанию пользователя. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.55 — развёртывание устойчивого меню и повторная реальная GRE проверка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-731803b-2026-10-08.json): frontend731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b. Архив Git SHA256 b6ff604a03e65151b4f2fc1406885b97f40240646f651a371fd603c00e1e867b совпал после передачи. Staging предыдущей main-совместимой сборки обновлён единственным изменённым production input — gre-tunnels-data-grid.tsx; package-lock/Dockerfile совпали. Docker build exit0, Next production compile/full TypeScript passed. Обновлена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, прежний образ оставлен для rollback. Backendbd3f996 не менялся и healthy. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE native lifecycle](ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json): собственная новая пара mm-acceptance-gre-1791468767519, подсеть198.18.255.248/30 проверена на пересечение, оба GRE раздела исходно пусты. POST201/201, native peer metadata, snapshot/restore, MTU/disable/enable/clear подтверждены; Ping3/3 в обе стороны,0%loss. [Production browser](ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json): никаких HTTP mocks, на каждом CHR меню открыто один раз и пережило live GET200 при1280 и320px; menuReopens0. Форма совпала с native local/remote inner IP и чистым пользовательским comment; URL/reload сохранён, JS/API errors0. Toolbar refresh вызван без outside pointer event: обычный клик вне меню должен его закрывать. Controlled pending permissions проверены локально в54, здесь подтверждено реальное обновление данных.
[CHR1 mobile](ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png) визуально просмотрен, [CHR2](ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png) сохранён. Первое измерение ширины произошло во время анимации Sheet и остановило browser harness; повторный проход с ожиданием сходимости layout прошёл, продуктовый код не менялся. Выявлена отдельная UX-недоработка: два внутренних IP поля слишком узкие для чтения полной записи при320px. Это следующий56, а не заявленный исправленный результат55.
DELETE200/200, own интерфейсы/IP и connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline (CHR1 — одно повторное чтение маршрутов через250ms). Эфемерный контейнер удалён, работают только три основные Compose-службы. GRE revisions намеренно остались как история операций. [Smoke](ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0. Это plain GRE и point-to-point ICMP, не IPsec/throughput/остальные VPN. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Следующий12.5.56 — мобильная форма GRE; пользовательское правило создавать и очищать реальные VPN объекты сохраняется. Локальный коммит без push.
+11 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-08
Сервер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.
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend sourcebd3f996f55cccd312dfe5861900849ca21791be8/version1.0.0-test.bd3f996 healthy. Frontend source731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b обновлён в12.5.55.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -393,3 +393,13 @@ Own GRE интерфейсы, адреса и connected route удалены; э
Проверки: новый tests/e2e/gre-menu-refresh.spec.ts открывает меню, запускает GET без outside pointer event, проверяет сохранение меню, disabled во время загрузки, восстановление enabled и свежий peer IP в форме. На прежнем HEAD тест падает именно из-за исчезнувшего menuitem; исправленный код проходит. Вместе с gre-toggle.spec.ts — 3/3 passed. Scoped TypeScript (tmp/tsconfig-speed-check.json) и ESLint изменённых файлов passed. Первую фикстуру скорректировали: инициализация источника допускает несколько GET, задержка включается только при проверяемом refresh. ReUI data-grid checklist проверен, общие компоненты не менялись.
Это локальное исправление. На тестовом сервере backend/frontend bd3f996; live CHR сценарий стабильности меню пока не проверен. Следующий12.5.55 — собрать и развернуть frontend, создать собственную реальную GRE пару, проверить меню при обновлении и форму, затем удалить только собственные интерфейсы/IP и проверить baseline. Реальные VPN объекты обязательны по указанию пользователя. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.55 — развёртывание устойчивого меню и повторная реальная GRE проверка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-731803b-2026-10-08.json): frontend731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b. Архив Git SHA256 b6ff604a03e65151b4f2fc1406885b97f40240646f651a371fd603c00e1e867b совпал после передачи. Staging предыдущей main-совместимой сборки обновлён единственным изменённым production input — gre-tunnels-data-grid.tsx; package-lock/Dockerfile совпали. Docker build exit0, Next production compile/full TypeScript passed. Обновлена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, прежний образ оставлен для rollback. Backendbd3f996 не менялся и healthy. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE native lifecycle](ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json): собственная новая пара mm-acceptance-gre-1791468767519, подсеть198.18.255.248/30 проверена на пересечение, оба GRE раздела исходно пусты. POST201/201, native peer metadata, snapshot/restore, MTU/disable/enable/clear подтверждены; Ping3/3 в обе стороны,0%loss. [Production browser](ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json): никаких HTTP mocks, на каждом CHR меню открыто один раз и пережило live GET200 при1280 и320px; menuReopens0. Форма совпала с native local/remote inner IP и чистым пользовательским comment; URL/reload сохранён, JS/API errors0. Toolbar refresh вызван без outside pointer event: обычный клик вне меню должен его закрывать. Controlled pending permissions проверены локально в54, здесь подтверждено реальное обновление данных.
[CHR1 mobile](ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png) визуально просмотрен, [CHR2](ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png) сохранён. Первое измерение ширины произошло во время анимации Sheet и остановило browser harness; повторный проход с ожиданием сходимости layout прошёл, продуктовый код не менялся. Выявлена отдельная UX-недоработка: два внутренних IP поля слишком узкие для чтения полной записи при320px. Это следующий56, а не заявленный исправленный результат55.
DELETE200/200, own интерфейсы/IP и connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline (CHR1 — одно повторное чтение маршрутов через250ms). Эфемерный контейнер удалён, работают только три основные Compose-службы. GRE revisions намеренно остались как история операций. [Smoke](ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0. Это plain GRE и point-to-point ICMP, не IPsec/throughput/остальные VPN. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Следующий12.5.56 — мобильная форма GRE; пользовательское правило создавать и очищать реальные VPN объекты сохраняется. Локальный коммит без push.
@@ -0,0 +1,55 @@
{
"date": "2026-10-08",
"frontendSource": "731803b",
"backendSource": "bd3f996",
"name": "mm-acceptance-gre-1791468767519",
"httpMocks": false,
"actualCreatedGre": true,
"cases": [
{
"serverId": 1,
"refreshes": [
{
"width": 1280,
"apiStatus": 200,
"menuRemainedOpen": true
},
{
"width": 320,
"apiStatus": 200,
"menuRemainedOpen": true
}
],
"menuReopens": 0,
"formMatchesNative": true,
"mobileFits": true,
"urlContextPreserved": true
},
{
"serverId": 2,
"refreshes": [
{
"width": 1280,
"apiStatus": 200,
"menuRemainedOpen": true
},
{
"width": 320,
"apiStatus": 200,
"menuRemainedOpen": true
}
],
"menuReopens": 0,
"formMatchesNative": true,
"mobileFits": true,
"urlContextPreserved": true
}
],
"pageErrors": [],
"badApiResponses": [],
"limits": [
"Refresh invoked without outside pointer event; outside click should close menu",
"Live refresh and current native form checked; controlled pending rights tested locally in 12.5.54",
"Harness owns fixture and verifies bounded cleanup"
]
}
@@ -0,0 +1,40 @@
{
"date": "2026-10-08",
"backendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
"frontendSource": "731803bade672e4e5bd58ffbc223563f3318d4a9",
"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,41 @@
{
"date": "2026-10-08",
"frontendSource": "731803bade672e4e5bd58ffbc223563f3318d4a9",
"backendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
"frontendImageId": "sha256:7b7efadb63782eef1487411cc3b1bc908dd76ac60291e6b78598958ae7452b17",
"backendImageId": "sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8",
"frontendVersion": "1.0.0-test.731803b",
"backendHealthy": true,
"sourceArchiveSha256": "b6ff604a03e65151b4f2fc1406885b97f40240646f651a371fd603c00e1e867b",
"buildExit": 0,
"productionTypeScriptPassed": true,
"frontendOnlyRestart": true,
"rollbackImageRetained": true,
"controlBefore": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"health": {
"status": "ok",
"timestamp": "2026-10-08T14:12:49.551Z",
"version": "1.0.0-test.bd3f996",
"eventLoopDelayMs": 20,
"flowWorker": {
"alive": false,
"bound": false,
"pendingSize": 0,
"dropped": 0,
"packetsReceived": 0
}
},
"push": false,
"controlAfter": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"controlsUnchanged": true
}
@@ -0,0 +1,250 @@
{
"date": "2026-10-08",
"backendSource": "bd3f996",
"frontendSource": "731803b",
"name": "mm-acceptance-gre-1791468767519",
"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/e1c43fe3-3567-43a6-a512-34f995a5e7fc/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-1791468767519",
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "54ms268us",
"avg-rtt": "54ms268us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "54ms322us",
"avg-rtt": "54ms295us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "54ms282us",
"avg-rtt": "54ms290us"
}
],
"received": 3
},
{
"serverId": 2,
"target": "198.18.255.249",
"interface": "mm-acceptance-gre-1791468767519",
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "58ms132us",
"avg-rtt": "58ms132us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "54ms366us",
"avg-rtt": "56ms249us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "54ms288us",
"avg-rtt": "55ms595us"
}
],
"received": 3
}
],
"realRouterOs": true,
"creates": [
{
"serverId": 1,
"status": 201,
"name": "mm-acceptance-gre-1791468767519",
"returnedRemoteInnerIp": "198.18.255.250/30",
"requestedRemoteInnerIp": "198.18.255.250/30"
},
{
"serverId": 2,
"status": 201,
"name": "mm-acceptance-gre-1791468767519",
"returnedRemoteInnerIp": "198.18.255.249/30",
"requestedRemoteInnerIp": "198.18.255.249/30"
}
],
"snapshotPeerPersisted": true,
"createdState": [
{
"serverId": 1,
"interface": {
"rosId": "*3",
"name": "mm-acceptance-gre-1791468767519",
"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-1791468767519",
"running": "false",
"disabled": "false"
},
"addresses": [
"198.18.255.249/30"
]
},
{
"serverId": 2,
"interface": {
"rosId": "*8",
"name": "mm-acceptance-gre-1791468767519",
"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-1791468767519",
"running": "false",
"disabled": "false"
},
"addresses": [
"198.18.255.250/30"
]
}
],
"runningBeforePing": true,
"bidirectionalPingPassed": true,
"updatedState": [
{
"serverId": 1,
"interface": {
"rosId": "*3",
"name": "mm-acceptance-gre-1791468767519",
"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-1791468767519",
"running": "false",
"disabled": "false"
},
"addresses": [
"198.18.255.249/30"
]
},
{
"serverId": 2,
"interface": {
"rosId": "*8",
"name": "mm-acceptance-gre-1791468767519",
"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-1791468767519",
"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: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB