chore(test): развернуть и проверить мобильную форму GRE

This commit is contained in:
Denozordec committed 2026-10-08 21:36:36 +07:00
1 parent fd521f6ef8
commit 02cdfd869a
13 files changed
+684 -7

No files matched your search

+13 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Статус на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).
Статус на2026-10-08: backendbd3f996/frontendfd521f6, backend healthy. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. Устойчивость меню 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).
## Паспорт стенда
@@ -405,3 +405,15 @@ DELETE200/200, own интерфейсы/IP и connected routes удалены;
Итоговая профильная регрессия gre-form.spec.ts + gre-menu-refresh.spec.ts —4/4 passed: create/DTO/edit, API ошибки и неподтверждённые ответы, сохранение ввода, защита от повторной отправки, открытое меню после refresh. Scoped TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённого page и ReUI checklist passed. Общая регрессия не повторялась для одной адаптивной сетки.
Изменение локальное, удалённый runtime backendbd3f996/frontend731803b не менялся. Следующий12.5.57 — frontend production Docker build/deploy и мобильная форма на новой собственной реальной GRE паре/API/RouterOS, затем очистка и baseline. Пользовательское требование настоящих VPN объектов сохраняется. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.57 — развёртывание мобильной формы и реальная GRE приёмка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-fd521f6-2026-10-08.json): frontendfd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6, backendbd3f996 healthy. Архив Git SHA2563187feed4f9346045ccf5d878b2965093b4b115f305d1da183523d1b7988204a совпал после передачи. В main-совместимом staging предыдущей сборки обновлён единственный изменённый production input — app/(main)/gre/page.tsx; package-lock и Dockerfile совпали. Docker build exit0/production TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, предыдущий731803b образ сохранён для rollback. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE lifecycle](ux-ui/acceptance/gre-real-mobile-fd521f6-2026-10-08.json): новая собственная пара mm-acceptance-gre-1791469984747, исходные GRE разделы пусты,198.18.255.248/30 не пересекается с недефолтными маршрутами/адресами. POST201/201, native peer metadata, MTU/disable/enable/clear и snapshot restore подтверждены; Ping3/3 в обе стороны,0%loss. Это plain GRE и ICMP, не IPsec/throughput.
[Production browser](ux-ui/acceptance/browser-gre-mobile-fd521f6-2026-10-08.json): оба CHR × две темы ×320/640/1280px —12 комбинаций без HTTP mocks. Native local/remote inner IP читаются полностью; на320px одна колонка, на640/1280 две; Tab local→remote и отсутствие page overflow подтверждены. Меню сохраняется после live GET200 при1280/320px, повторных открытий0. В тёмной теме формы обоих CHR сохранены с неизменёнными значениями: PATCH200/200, независимое native чтение подтвердило адреса, peer IP и comment. Светлая тема проверена без записи. Server URL context/reload сохранён. JS/API errors0. Browser refresh вызывается без outside pointer event; локальная проверка pending/прав остаётся доказательством54.
Скриншоты320px: [CHR1 dark](ux-ui/screens/gre-mobile-real-server1-dark-320-2026-10-08.png), [CHR1 light](ux-ui/screens/gre-mobile-real-server1-light-320-2026-10-08.png), [CHR2 dark](ux-ui/screens/gre-mobile-real-server2-dark-320-2026-10-08.png), [CHR2 light](ux-ui/screens/gre-mobile-real-server2-light-320-2026-10-08.png). CHR1 dark и CHR2 light визуально просмотрены: внутренние IP целиком видны. [Smoke](ux-ui/acceptance/deploy-browser-fd521f6-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
DELETE200/200, собственные GRE/IP/connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline, CHR1 — одно повторное чтение маршрутов через250ms. Эфемерный контейнер удалён; остались три основные Compose-службы. GRE revisions намеренно сохранены как история операций. Следующий12.5.58 — реальная собственная WireGuard пара, API/native/UI, handshake/связность, очистка и baseline; private/preshared keys не включать в публичные отчёты. Требование пользователя о настоящих VPN объектах сохраняется. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Локальный коммит без push.
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-08: 12.5.56 локально улучшил мобильную форму GRE: внутренние IP расположены друг под другом до640px, отsm — в две колонки. Полный IPv4/CIDR читается при320px; обе темы/320/640/1280px/Tab/overflow проверены, профильные Playwright4/4, scoped TypeScript/ESLint passed. На сервере backendbd3f996/frontend731803b: новая сетка ещё не развёрнута. Следующий12.5.57 — Docker deploy frontend и проверка мобильной формы на собственной реальной GRE паре с очисткой; затем остальные VPN. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.57 развернул frontendfd521f6, backendbd3f996 healthy. Мобильная GRE форма подтверждена без HTTP mocks на новой собственной паре CHR: две темы/320/640/1280px, полный native IPv4/CIDR, Tab, меню refresh и сохранение PATCH200/200 с независимым чтением RouterOS. Ping3/3 в обе стороны; own GRE/IP удалены, выбранный baseline и DB controls совпали. Smoke6 экранов passed. Следующий12.5.58 — настоящая WireGuard пара: API/native/UI, handshake/связность и очистка собственных объектов; секреты в отчёты не включать. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-08
Этапы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 для320px, обе темы и профильные проверки passed; следующий12.5.57 — frontend 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/frontendfd521f6 и два 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 для320px, обе темы и профильные проверки passed; 12.5.57 развернул frontendfd521f6 и подтвердил мобильную GRE форму на реальной паре CHR; следующий12.5.58 — собственная настоящая WireGuard пара с handshake/связностью и очисткой. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md).
+14 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-08: 12.5.56 локально улучшил мобильную форму GRE: внутренние IP расположены друг под другом до640px, отsm — в две колонки. Полный IPv4/CIDR читается при320px; обе темы/320/640/1280px/Tab/overflow проверены, профильные Playwright4/4, scoped TypeScript/ESLint passed. На сервере backendbd3f996/frontend731803b: новая сетка ещё не развёрнута. Следующий12.5.57 — Docker deploy frontend и проверка мобильной формы на собственной реальной GRE паре с очисткой; затем остальные VPN. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.57 развернул frontendfd521f6, backendbd3f996 healthy. Мобильная GRE форма подтверждена без HTTP mocks на новой собственной паре CHR: две темы/320/640/1280px, полный native IPv4/CIDR, Tab, меню refresh и сохранение PATCH200/200 с независимым чтением RouterOS. Ping3/3 в обе стороны; own GRE/IP удалены, выбранный baseline и DB controls совпали. Smoke6 экранов passed. Следующий12.5.58 — настоящая WireGuard пара: API/native/UI, handshake/связность и очистка собственных объектов; секреты в отчёты не включать. Этап12.5 открыт.
Общий план: [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–56 и ограничения ниже. Runtime backendbd3f996/frontend731803b. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–57 и ограничения ниже. Runtime backendbd3f996/frontendfd521f6. |
## 12.5.57 — развёртывание мобильной формы и реальная GRE приёмка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-fd521f6-2026-10-08.json): frontendfd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6, backendbd3f996 healthy. Архив Git SHA2563187feed4f9346045ccf5d878b2965093b4b115f305d1da183523d1b7988204a совпал после передачи. В main-совместимом staging предыдущей сборки обновлён единственный изменённый production input — app/(main)/gre/page.tsx; package-lock и Dockerfile совпали. Docker build exit0/production TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, предыдущий731803b образ сохранён для rollback. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE lifecycle](ux-ui/acceptance/gre-real-mobile-fd521f6-2026-10-08.json): новая собственная пара mm-acceptance-gre-1791469984747, исходные GRE разделы пусты,198.18.255.248/30 не пересекается с недефолтными маршрутами/адресами. POST201/201, native peer metadata, MTU/disable/enable/clear и snapshot restore подтверждены; Ping3/3 в обе стороны,0%loss. Это plain GRE и ICMP, не IPsec/throughput.
[Production browser](ux-ui/acceptance/browser-gre-mobile-fd521f6-2026-10-08.json): оба CHR × две темы ×320/640/1280px —12 комбинаций без HTTP mocks. Native local/remote inner IP читаются полностью; на320px одна колонка, на640/1280 две; Tab local→remote и отсутствие page overflow подтверждены. Меню сохраняется после live GET200 при1280/320px, повторных открытий0. В тёмной теме формы обоих CHR сохранены с неизменёнными значениями: PATCH200/200, независимое native чтение подтвердило адреса, peer IP и comment. Светлая тема проверена без записи. Server URL context/reload сохранён. JS/API errors0. Browser refresh вызывается без outside pointer event; локальная проверка pending/прав остаётся доказательством54.
Скриншоты320px: [CHR1 dark](ux-ui/screens/gre-mobile-real-server1-dark-320-2026-10-08.png), [CHR1 light](ux-ui/screens/gre-mobile-real-server1-light-320-2026-10-08.png), [CHR2 dark](ux-ui/screens/gre-mobile-real-server2-dark-320-2026-10-08.png), [CHR2 light](ux-ui/screens/gre-mobile-real-server2-light-320-2026-10-08.png). CHR1 dark и CHR2 light визуально просмотрены: внутренние IP целиком видны. [Smoke](ux-ui/acceptance/deploy-browser-fd521f6-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
DELETE200/200, собственные GRE/IP/connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline, CHR1 — одно повторное чтение маршрутов через250ms. Эфемерный контейнер удалён; остались три основные Compose-службы. GRE revisions намеренно сохранены как история операций. Следующий12.5.58 — реальная собственная WireGuard пара, API/native/UI, handshake/связность, очистка и baseline; private/preshared keys не включать в публичные отчёты. Требование пользователя о настоящих VPN объектах сохраняется. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.56 — читаемые внутренние IP в мобильной форме GRE (2026-10-08)
+13 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-08: 12.5.56 локально улучшил мобильную форму GRE: внутренние IP расположены друг под другом до640px, отsm — в две колонки. Полный IPv4/CIDR читается при320px; обе темы/320/640/1280px/Tab/overflow проверены, профильные Playwright4/4, scoped TypeScript/ESLint passed. На сервере backendbd3f996/frontend731803b: новая сетка ещё не развёрнута. Следующий12.5.57 — Docker deploy frontend и проверка мобильной формы на собственной реальной GRE паре с очисткой; затем остальные VPN. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.57 развернул frontendfd521f6, backendbd3f996 healthy. Мобильная GRE форма подтверждена без HTTP mocks на новой собственной паре CHR: две темы/320/640/1280px, полный native IPv4/CIDR, Tab, меню refresh и сохранение PATCH200/200 с независимым чтением RouterOS. Ping3/3 в обе стороны; own GRE/IP удалены, выбранный baseline и DB controls совпали. Smoke6 экранов passed. Следующий12.5.58 — настоящая WireGuard пара: API/native/UI, handshake/связность и очистка собственных объектов; секреты в отчёты не включать. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -1570,3 +1570,15 @@ DELETE200/200, own интерфейсы/IP и connected routes удалены;
Итоговая профильная регрессия gre-form.spec.ts + gre-menu-refresh.spec.ts —4/4 passed: create/DTO/edit, API ошибки и неподтверждённые ответы, сохранение ввода, защита от повторной отправки, открытое меню после refresh. Scoped TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённого page и ReUI checklist passed. Общая регрессия не повторялась для одной адаптивной сетки.
Изменение локальное, удалённый runtime backendbd3f996/frontend731803b не менялся. Следующий12.5.57 — frontend production Docker build/deploy и мобильная форма на новой собственной реальной GRE паре/API/RouterOS, затем очистка и baseline. Пользовательское требование настоящих VPN объектов сохраняется. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.57 — развёртывание мобильной формы и реальная GRE приёмка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-fd521f6-2026-10-08.json): frontendfd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6, backendbd3f996 healthy. Архив Git SHA2563187feed4f9346045ccf5d878b2965093b4b115f305d1da183523d1b7988204a совпал после передачи. В main-совместимом staging предыдущей сборки обновлён единственный изменённый production input — app/(main)/gre/page.tsx; package-lock и Dockerfile совпали. Docker build exit0/production TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, предыдущий731803b образ сохранён для rollback. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE lifecycle](ux-ui/acceptance/gre-real-mobile-fd521f6-2026-10-08.json): новая собственная пара mm-acceptance-gre-1791469984747, исходные GRE разделы пусты,198.18.255.248/30 не пересекается с недефолтными маршрутами/адресами. POST201/201, native peer metadata, MTU/disable/enable/clear и snapshot restore подтверждены; Ping3/3 в обе стороны,0%loss. Это plain GRE и ICMP, не IPsec/throughput.
[Production browser](ux-ui/acceptance/browser-gre-mobile-fd521f6-2026-10-08.json): оба CHR × две темы ×320/640/1280px —12 комбинаций без HTTP mocks. Native local/remote inner IP читаются полностью; на320px одна колонка, на640/1280 две; Tab local→remote и отсутствие page overflow подтверждены. Меню сохраняется после live GET200 при1280/320px, повторных открытий0. В тёмной теме формы обоих CHR сохранены с неизменёнными значениями: PATCH200/200, независимое native чтение подтвердило адреса, peer IP и comment. Светлая тема проверена без записи. Server URL context/reload сохранён. JS/API errors0. Browser refresh вызывается без outside pointer event; локальная проверка pending/прав остаётся доказательством54.
Скриншоты320px: [CHR1 dark](ux-ui/screens/gre-mobile-real-server1-dark-320-2026-10-08.png), [CHR1 light](ux-ui/screens/gre-mobile-real-server1-light-320-2026-10-08.png), [CHR2 dark](ux-ui/screens/gre-mobile-real-server2-dark-320-2026-10-08.png), [CHR2 light](ux-ui/screens/gre-mobile-real-server2-light-320-2026-10-08.png). CHR1 dark и CHR2 light визуально просмотрены: внутренние IP целиком видны. [Smoke](ux-ui/acceptance/deploy-browser-fd521f6-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
DELETE200/200, собственные GRE/IP/connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline, CHR1 — одно повторное чтение маршрутов через250ms. Эфемерный контейнер удалён; остались три основные Compose-службы. GRE revisions намеренно сохранены как история операций. Следующий12.5.58 — реальная собственная WireGuard пара, API/native/UI, handshake/связность, очистка и baseline; private/preshared keys не включать в публичные отчёты. Требование пользователя о настоящих VPN объектах сохраняется. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Локальный коммит без push.
+13 -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 source731803bade672e4e5bd58ffbc223563f3318d4a9/version1.0.0-test.731803b обновлён в12.5.55.
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend sourcebd3f996f55cccd312dfe5861900849ca21791be8/version1.0.0-test.bd3f996 healthy. Frontend sourcefd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6 обновлён в12.5.57.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -413,3 +413,15 @@ DELETE200/200, own интерфейсы/IP и connected routes удалены;
Итоговая профильная регрессия gre-form.spec.ts + gre-menu-refresh.spec.ts —4/4 passed: create/DTO/edit, API ошибки и неподтверждённые ответы, сохранение ввода, защита от повторной отправки, открытое меню после refresh. Scoped TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённого page и ReUI checklist passed. Общая регрессия не повторялась для одной адаптивной сетки.
Изменение локальное, удалённый runtime backendbd3f996/frontend731803b не менялся. Следующий12.5.57 — frontend production Docker build/deploy и мобильная форма на новой собственной реальной GRE паре/API/RouterOS, затем очистка и baseline. Пользовательское требование настоящих VPN объектов сохраняется. Telegram/Portal/multi-instance и остальные внешние ограничения остаются открытыми. Локальный коммит без push.
## 12.5.57 — развёртывание мобильной формы и реальная GRE приёмка (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-fd521f6-2026-10-08.json): frontendfd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6, backendbd3f996 healthy. Архив Git SHA2563187feed4f9346045ccf5d878b2965093b4b115f305d1da183523d1b7988204a совпал после передачи. В main-совместимом staging предыдущей сборки обновлён единственный изменённый production input — app/(main)/gre/page.tsx; package-lock и Dockerfile совпали. Docker build exit0/production TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation passed; перезапущен только frontend, предыдущий731803b образ сохранён для rollback. Контрольные значения БД до/после: servers2/speedHistory9/retention14/migrations9 совпали. Push не выполнялся.
[GRE lifecycle](ux-ui/acceptance/gre-real-mobile-fd521f6-2026-10-08.json): новая собственная пара mm-acceptance-gre-1791469984747, исходные GRE разделы пусты,198.18.255.248/30 не пересекается с недефолтными маршрутами/адресами. POST201/201, native peer metadata, MTU/disable/enable/clear и snapshot restore подтверждены; Ping3/3 в обе стороны,0%loss. Это plain GRE и ICMP, не IPsec/throughput.
[Production browser](ux-ui/acceptance/browser-gre-mobile-fd521f6-2026-10-08.json): оба CHR × две темы ×320/640/1280px —12 комбинаций без HTTP mocks. Native local/remote inner IP читаются полностью; на320px одна колонка, на640/1280 две; Tab local→remote и отсутствие page overflow подтверждены. Меню сохраняется после live GET200 при1280/320px, повторных открытий0. В тёмной теме формы обоих CHR сохранены с неизменёнными значениями: PATCH200/200, независимое native чтение подтвердило адреса, peer IP и comment. Светлая тема проверена без записи. Server URL context/reload сохранён. JS/API errors0. Browser refresh вызывается без outside pointer event; локальная проверка pending/прав остаётся доказательством54.
Скриншоты320px: [CHR1 dark](ux-ui/screens/gre-mobile-real-server1-dark-320-2026-10-08.png), [CHR1 light](ux-ui/screens/gre-mobile-real-server1-light-320-2026-10-08.png), [CHR2 dark](ux-ui/screens/gre-mobile-real-server2-dark-320-2026-10-08.png), [CHR2 light](ux-ui/screens/gre-mobile-real-server2-light-320-2026-10-08.png). CHR1 dark и CHR2 light визуально просмотрены: внутренние IP целиком видны. [Smoke](ux-ui/acceptance/deploy-browser-fd521f6-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
DELETE200/200, собственные GRE/IP/connected routes удалены; выбранные GRE/IP/routes/IPv4 Firewall поля совпали с baseline, CHR1 — одно повторное чтение маршрутов через250ms. Эфемерный контейнер удалён; остались три основные Compose-службы. GRE revisions намеренно сохранены как история операций. Следующий12.5.58 — реальная собственная WireGuard пара, API/native/UI, handshake/связность, очистка и baseline; private/preshared keys не включать в публичные отчёты. Требование пользователя о настоящих VPN объектах сохраняется. Telegram/Portal/multi-instance и другие внешние ограничения остаются открытыми. Локальный коммит без push.
@@ -0,0 +1,298 @@
{
"date": "2026-10-08",
"frontendSource": "fd521f6",
"backendSource": "bd3f996",
"name": "mm-acceptance-gre-1791469984747",
"httpMocks": false,
"actualCreatedGre": true,
"cases": [
{
"serverId": 1,
"theme": "dark",
"layouts": [
{
"width": 320,
"columns": 1,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
},
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 640,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
},
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 1280,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
},
{
"value": "198.18.255.250/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
}
],
"menuReopens": 0,
"liveRefreshMenuStable": true,
"formMatchesNative": true,
"sameValuesSavedViaBrowser": true,
"nativeSaveConfirmed": true,
"urlContextPreserved": true
},
{
"serverId": 1,
"theme": "light",
"layouts": [
{
"width": 320,
"columns": 1,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
},
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 640,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
},
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 1280,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.249/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
},
{
"value": "198.18.255.250/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
}
],
"menuReopens": 0,
"liveRefreshMenuStable": true,
"formMatchesNative": true,
"sameValuesSavedViaBrowser": false,
"nativeSaveConfirmed": false,
"urlContextPreserved": true
},
{
"serverId": 2,
"theme": "dark",
"layouts": [
{
"width": 320,
"columns": 1,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
},
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 640,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
},
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 1280,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
},
{
"value": "198.18.255.249/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
}
],
"menuReopens": 0,
"liveRefreshMenuStable": true,
"formMatchesNative": true,
"sameValuesSavedViaBrowser": true,
"nativeSaveConfirmed": true,
"urlContextPreserved": true
},
{
"serverId": 2,
"theme": "light",
"layouts": [
{
"width": 320,
"columns": 1,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
},
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 249
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 640,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
},
{
"value": "198.18.255.249/30",
"textWidth": 163.19984436035156,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
},
{
"width": 1280,
"columns": 2,
"fullNativeIpv4CidrFits": true,
"fieldWidths": [
{
"value": "198.18.255.250/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
},
{
"value": "198.18.255.249/30",
"textWidth": 142.79989624023438,
"availableWidth": 204
}
],
"keyboardOrder": true,
"noPageOverflow": true
}
],
"menuReopens": 0,
"liveRefreshMenuStable": true,
"formMatchesNative": true,
"sameValuesSavedViaBrowser": false,
"nativeSaveConfirmed": false,
"urlContextPreserved": true
}
],
"browserPatchStatuses": [
200,
200
],
"pageErrors": [],
"badApiResponses": [],
"limits": [
"Own live GRE pair; no HTTP mocks",
"Browser saved unchanged inner IP values on both CHRs; helper read native results",
"Menu refresh invoked without outside pointer event; no claim for other VPN or encryption",
"Harness owns cleanup and checks selected baseline fields"
]
}
@@ -0,0 +1,40 @@
{
"date": "2026-10-08",
"backendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
"frontendSource": "fd521f6ef892ff3f7e8bc25878d80fb13817dda8",
"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": "fd521f6ef892ff3f7e8bc25878d80fb13817dda8",
"backendSource": "bd3f996f55cccd312dfe5861900849ca21791be8",
"frontendImageId": "sha256:6623b35b9679fd0797b309f68534ed3494f191ed2ae0f5280a3983a380d61bfc",
"backendImageId": "sha256:6bb78eaeb922de577d399633ed6fcc821a47ae8abbb947ce6971bb453bfcf6d8",
"frontendVersion": "1.0.0-test.fd521f6",
"backendHealthy": true,
"sourceArchiveSha256": "3187feed4f9346045ccf5d878b2965093b4b115f305d1da183523d1b7988204a",
"buildExit": 0,
"productionTypeScriptPassed": true,
"frontendOnlyRestart": true,
"rollbackImageRetained": true,
"controlBefore": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"health": {
"status": "ok",
"timestamp": "2026-10-08T14:33:29.005Z",
"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": "fd521f6",
"name": "mm-acceptance-gre-1791469984747",
"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/1ce3aacf-eb9f-4f71-a2a9-48f199e9db5d/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-1791469984747",
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "54ms717us",
"avg-rtt": "54ms717us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "55ms29us",
"avg-rtt": "54ms873us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "54ms379us",
"avg-rtt": "54ms708us"
}
],
"received": 3
},
{
"serverId": 2,
"target": "198.18.255.249",
"interface": "mm-acceptance-gre-1791469984747",
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "54ms367us",
"avg-rtt": "54ms367us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "54ms753us",
"avg-rtt": "54ms560us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "54ms251us",
"avg-rtt": "54ms457us"
}
],
"received": 3
}
],
"realRouterOs": true,
"creates": [
{
"serverId": 1,
"status": 201,
"name": "mm-acceptance-gre-1791469984747",
"returnedRemoteInnerIp": "198.18.255.250/30",
"requestedRemoteInnerIp": "198.18.255.250/30"
},
{
"serverId": 2,
"status": 201,
"name": "mm-acceptance-gre-1791469984747",
"returnedRemoteInnerIp": "198.18.255.249/30",
"requestedRemoteInnerIp": "198.18.255.249/30"
}
],
"snapshotPeerPersisted": true,
"createdState": [
{
"serverId": 1,
"interface": {
"rosId": "*4",
"name": "mm-acceptance-gre-1791469984747",
"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-1791469984747",
"running": "false",
"disabled": "false"
},
"addresses": [
"198.18.255.249/30"
]
},
{
"serverId": 2,
"interface": {
"rosId": "*9",
"name": "mm-acceptance-gre-1791469984747",
"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-1791469984747",
"running": "false",
"disabled": "false"
},
"addresses": [
"198.18.255.250/30"
]
}
],
"runningBeforePing": true,
"bidirectionalPingPassed": true,
"updatedState": [
{
"serverId": 1,
"interface": {
"rosId": "*4",
"name": "mm-acceptance-gre-1791469984747",
"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-1791469984747",
"running": "true",
"disabled": "false"
},
"addresses": [
"198.18.255.249/30"
]
},
{
"serverId": 2,
"interface": {
"rosId": "*9",
"name": "mm-acceptance-gre-1791469984747",
"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-1791469984747",
"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: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB