diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 6a2d90df..62298a36 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -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. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index ae125178..c3c945cb 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -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). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 988a8333..80f0b962 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -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) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 03fd502b..5cd73714 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -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. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 277e28e9..86a9b2cb 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -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. diff --git a/docs/ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json b/docs/ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json new file mode 100644 index 00000000..5c67a22d --- /dev/null +++ b/docs/ux-ui/acceptance/browser-gre-menu-731803b-2026-10-08.json @@ -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" + ] +} diff --git a/docs/ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json b/docs/ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json new file mode 100644 index 00000000..5247095a --- /dev/null +++ b/docs/ux-ui/acceptance/deploy-browser-731803b-2026-10-08.json @@ -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": [] +} diff --git a/docs/ux-ui/acceptance/deployed-731803b-2026-10-08.json b/docs/ux-ui/acceptance/deployed-731803b-2026-10-08.json new file mode 100644 index 00000000..922df697 --- /dev/null +++ b/docs/ux-ui/acceptance/deployed-731803b-2026-10-08.json @@ -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 +} diff --git a/docs/ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json b/docs/ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json new file mode 100644 index 00000000..f14fc7dd --- /dev/null +++ b/docs/ux-ui/acceptance/gre-real-menu-731803b-2026-10-08.json @@ -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" + ] +} diff --git a/docs/ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png b/docs/ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png new file mode 100644 index 00000000..8ae102a5 Binary files /dev/null and b/docs/ux-ui/screens/gre-menu-real-server1-320-2026-10-08.png differ diff --git a/docs/ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png b/docs/ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png new file mode 100644 index 00000000..e0a15562 Binary files /dev/null and b/docs/ux-ui/screens/gre-menu-real-server2-320-2026-10-08.png differ