chore(test): подтвердить полный сценарий WireGuard через интерфейс

This commit is contained in:
Denozordec committed 2026-10-08 22:45:16 +07:00
1 parent 6a46fb1e40
commit ae0162db53
10 files changed
+412 -7

No files matched your search

+13 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Статус на2026-10-08: backend/frontend3722fad, backend healthy. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. WireGuard handshake/короткий Ping/native API/read-only UI приняты в границах12.5.58; 12.5.59 воспроизвёл оставшиеся peers/IP; 12.5.60 развернул исправление и принял обычное удаление own WG интерфейса с peer/IPv4 адресом на обоих CHR. UI создание WG принято в границах12.5.61, WireGuard toggle не завершён; локальная устойчивость его меню ещё не развёрнута. Устойчивость меню 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: backend3722fad/frontend6a46fb1, backend healthy. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. WireGuard handshake/короткий Ping/native API/read-only UI приняты в границах12.5.58; 12.5.59 воспроизвёл оставшиеся peers/IP; 12.5.60 развернул исправление и принял обычное удаление own WG интерфейса с peer/IPv4 адресом на обоих CHR. 12.5.62 принял полный WireGuard UI create/peer/disable/enable/Ping/delete на обоих CHR; устойчивое меню развёрнуто. Устойчивость меню 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).
## Паспорт стенда
@@ -465,3 +465,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Первая пара очищена observer, выбранный baseline полностью совпал. Во второй попытке [observer получил401](ux-ui/acceptance/wg-ui-second-observer-error-2026-10-08.json) на завершающем native чтении до cleanup; причина не установлена, пароли не менялись. Повторное чтение через приложение успешно. [Штатный API cleanup](ux-ui/acceptance/wg-ui-second-api-cleanup-2026-10-08.json) проверил точные name/ownership comment и удалил оба own интерфейса DELETE200/200. [Независимая native проверка](ux-ui/acceptance/wg-ui-final-native-cleanup-2026-10-08.json) подтвердила отсутствие own WG/peers/IP/routes на обоих CHR, total IPv4 addresses1/2 и routes4/5; WG interfaces/peers0. Второй baseline был только в памяти и потерян при выходе observer: точное равенство его baseline не заявляется. [DB controls](ux-ui/acceptance/wg-ui-db-controls-2026-10-08.json) servers2/speedHistory9/retention14/migrations9 совпали. Эфемерные контейнеры завершены, остались три основные службы, backend healthy. Audit revisions намеренно сохранены.
Runtime backend/frontend3722fad, локальное меню ещё не развёрнуто. Следующий12.5.62 — frontend Docker deploy и полный UI create interface/peer→disable/enable→повторный handshake/Ping→delete на новой реальной паре, без повторных открытий меню. Перед повтором observer должен сохранить приватный baseline на сервере и продолжать независимую cleanup каждого устройства при ошибке финального state read; запуск browser только после подтверждения готовности нового observer. Переключение, экспорт/import, throughput/RBAC и прочие внешние ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.62 — развёртывание стабильного меню и полный WireGuard UI lifecycle (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-6a46fb1-2026-10-08.json): frontend6a46fb1e40291024202455460dfc233f05e9e5d5/version1.0.0-test.6a46fb1, backend3722fad не перезапускался и healthy. Git archive SHA2560c25ec8215b25446d2a9ad1555244af94afff32194d2a0768ee727b1ca810db8 совпал после передачи. Main-совместимый staging обновлён единственным изменённым production input — WireGuard data grid; package-lock и Dockerfile совпали. Docker build exit0, Next full TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation прошла, предыдущий frontend3722fad образ сохранён. Push не выполнялся.
[Production UI](ux-ui/acceptance/browser-wg-ui-lifecycle-6a46fb1-2026-10-08.json): новый fixture mm-acceptance-wg-ui-1791473944233, оба CHR, ПК/320px, HTTP mocks отсутствуют. Интерфейсы/IP созданы формами UI: POST201/201; peer формы дали201/201. Native проверка подтвердила поля, автоматическую генерацию ключей и соответствие публичного ключа другого конца (ключи только в памяти). Отключение/включение каждого устройства через меню дало PATCH200×4; disabled совпал с RouterOS, peer и IP сохранились. UI DELETE200/200 полностью удалили interfaces/peers/IP; native отсутствие остатков проверено до finish/fallback. Каждое меню открывалось один раз, menuReopens0. JS/API errors0. Это завершает незаконченный сценарий61 на исправленном production frontend.
[Native observer](ux-ui/acceptance/wg-ui-native-6a46fb1-2026-10-08.json): два раунда handshake/Ping — до и после переключения, каждый3/3 на обоих CHR,0%loss,≈55ms. Существующая конфигурация/коллизии UDP51879 и198.18.255.240/30 проверены до UI создания. Observer сохранил приватный baseline на сервере с0600, повторное чтение401 ограничено тремя попытками и отражается в readRetries; ошибка финального state read теперь перехватывается перед независимой cleanup каждого устройства. В этом проходе retries0/final state errors0; failure ветки не инжектировались. Browser запускался только после READY и сверял name fixture с зафиксированным новым observer.
Итоговый observer exit0, afterBrowser пуст на обеих сторонах; selected WG/peers/IP/routes/IPv4 Firewall baseline совпал. Fallback удаления не понадобился; эфемерный контейнер удалён, остались три основные Compose-службы. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, audit revisions намеренно сохранены. Приватный baseline с возможными ключами чужой конфигурации не скачивался и не коммитился. [Smoke](ux-ui/acceptance/deploy-browser-6a46fb1-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
[Мобильная форма создания](ux-ui/screens/wg-ui-create-server2-6a46fb1-320-2026-10-08.png) просмотрена, без ключей. Выявлена отдельная UX-недоработка: WireGuard create/peer/import используют обычный w-full, который не переопределяет data-side width общего Sheet; мобильная панель фактически240px при320px, footer сжат. Следующий12.5.63 — точные responsive width overrides по существующему GRE образцу, проверка полной ширины/кнопок в обеих темах и профильные UI проверки. Export/import, throughput, IPv6, внешние failures/RBAC/multi-instance, Telegram/Portal и остальные интеграционные ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-08: 12.5.61 подтвердил UI создание WireGuard interfaces/peers, native поля, handshake и первый Ping; переключение не завершено из-за remount меню (DOM detached). Локально WireGuard actions вынесен в стабильный renderer/context, red→green regression и profile6/6/TypeScript/ESLint passed. Обе попытки own объектов очищены, native отсутствие остатков и DB controls подтверждены; transient observer401/recovery отражены отдельно. Runtime backend/frontend3722fad остаётся прежним. Следующий12.5.62 — frontend deploy и полный UI create/peer/toggle/Ping/delete без повторного открытия меню; observer cleanup защитить от ошибок завершающего чтения. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.62 развернул frontend6a46fb1 (backend3722fad healthy) и завершил WireGuard UI lifecycle на обоих CHR: create interface/peer201, disable/enable PATCH200, Ping3/3 до/после переключения, DELETE200 без остатков. Меню открывались однократно, JS/API errors0. Observer сохранил private baseline0600, итоговый exit0/selected baseline и DB controls совпали; readRetries0. Следующий12.5.63 — мобильные Sheets WireGuard: полная ширина и читаемый footer (создание/пир/импорт); текущая панель240px при viewport320px. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-08
Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend/frontend3722fad и два 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/Ping/native/UI и финальную очистку; 12.5.59 подтвердил оставшиеся peers/IP после удаления WG и локально исправил backend; 12.5.60 развернул backend/frontend3722fad и подтвердил полное обычное удаление WG; 12.5.61 подтвердил UI создание WG и локально исправил remount меню; переключение осталось открытым. Следующий12.5.62 — frontend deploy и полный UI lifecycle с независимой защищённой очисткой. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend3722fad/frontend6a46fb1 и два 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/Ping/native/UI и финальную очистку; 12.5.59 подтвердил оставшиеся peers/IP после удаления WG и локально исправил backend; 12.5.60 развернул backend/frontend3722fad и подтвердил полное обычное удаление WG; 12.5.61 подтвердил UI создание WG и локально исправил remount меню; переключение осталось открытым. 12.5.62 развернул frontend6a46fb1 и подтвердил полный WG UI lifecycle; следующий12.5.63 — полная ширина мобильных WireGuard Sheets и footer. Реальная 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.61 подтвердил UI создание WireGuard interfaces/peers, native поля, handshake и первый Ping; переключение не завершено из-за remount меню (DOM detached). Локально WireGuard actions вынесен в стабильный renderer/context, red→green regression и profile6/6/TypeScript/ESLint passed. Обе попытки own объектов очищены, native отсутствие остатков и DB controls подтверждены; transient observer401/recovery отражены отдельно. Runtime backend/frontend3722fad остаётся прежним. Следующий12.5.62 — frontend deploy и полный UI create/peer/toggle/Ping/delete без повторного открытия меню; observer cleanup защитить от ошибок завершающего чтения. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.62 развернул frontend6a46fb1 (backend3722fad healthy) и завершил WireGuard UI lifecycle на обоих CHR: create interface/peer201, disable/enable PATCH200, Ping3/3 до/после переключения, DELETE200 без остатков. Меню открывались однократно, JS/API errors0. Observer сохранил private baseline0600, итоговый exit0/selected baseline и DB controls совпали; readRetries0. Следующий12.5.63 — мобильные Sheets WireGuard: полная ширина и читаемый footer (создание/пир/импорт); текущая панель240px при viewport320px. Этап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–61 и ограничения ниже. Runtime backend/frontend3722fad. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–62 и ограничения ниже. Runtime backend3722fad/frontend6a46fb1. |
## 12.5.62 — развёртывание стабильного меню и полный WireGuard UI lifecycle (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-6a46fb1-2026-10-08.json): frontend6a46fb1e40291024202455460dfc233f05e9e5d5/version1.0.0-test.6a46fb1, backend3722fad не перезапускался и healthy. Git archive SHA2560c25ec8215b25446d2a9ad1555244af94afff32194d2a0768ee727b1ca810db8 совпал после передачи. Main-совместимый staging обновлён единственным изменённым production input — WireGuard data grid; package-lock и Dockerfile совпали. Docker build exit0, Next full TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation прошла, предыдущий frontend3722fad образ сохранён. Push не выполнялся.
[Production UI](ux-ui/acceptance/browser-wg-ui-lifecycle-6a46fb1-2026-10-08.json): новый fixture mm-acceptance-wg-ui-1791473944233, оба CHR, ПК/320px, HTTP mocks отсутствуют. Интерфейсы/IP созданы формами UI: POST201/201; peer формы дали201/201. Native проверка подтвердила поля, автоматическую генерацию ключей и соответствие публичного ключа другого конца (ключи только в памяти). Отключение/включение каждого устройства через меню дало PATCH200×4; disabled совпал с RouterOS, peer и IP сохранились. UI DELETE200/200 полностью удалили interfaces/peers/IP; native отсутствие остатков проверено до finish/fallback. Каждое меню открывалось один раз, menuReopens0. JS/API errors0. Это завершает незаконченный сценарий61 на исправленном production frontend.
[Native observer](ux-ui/acceptance/wg-ui-native-6a46fb1-2026-10-08.json): два раунда handshake/Ping — до и после переключения, каждый3/3 на обоих CHR,0%loss,≈55ms. Существующая конфигурация/коллизии UDP51879 и198.18.255.240/30 проверены до UI создания. Observer сохранил приватный baseline на сервере с0600, повторное чтение401 ограничено тремя попытками и отражается в readRetries; ошибка финального state read теперь перехватывается перед независимой cleanup каждого устройства. В этом проходе retries0/final state errors0; failure ветки не инжектировались. Browser запускался только после READY и сверял name fixture с зафиксированным новым observer.
Итоговый observer exit0, afterBrowser пуст на обеих сторонах; selected WG/peers/IP/routes/IPv4 Firewall baseline совпал. Fallback удаления не понадобился; эфемерный контейнер удалён, остались три основные Compose-службы. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, audit revisions намеренно сохранены. Приватный baseline с возможными ключами чужой конфигурации не скачивался и не коммитился. [Smoke](ux-ui/acceptance/deploy-browser-6a46fb1-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
[Мобильная форма создания](ux-ui/screens/wg-ui-create-server2-6a46fb1-320-2026-10-08.png) просмотрена, без ключей. Выявлена отдельная UX-недоработка: WireGuard create/peer/import используют обычный w-full, который не переопределяет data-side width общего Sheet; мобильная панель фактически240px при320px, footer сжат. Следующий12.5.63 — точные responsive width overrides по существующему GRE образцу, проверка полной ширины/кнопок в обеих темах и профильные UI проверки. Export/import, throughput, IPv6, внешние failures/RBAC/multi-instance, Telegram/Portal и остальные интеграционные ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.61 — UI создание WireGuard и локальное исправление нестабильного меню (2026-10-08)
+13 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-08: 12.5.61 подтвердил UI создание WireGuard interfaces/peers, native поля, handshake и первый Ping; переключение не завершено из-за remount меню (DOM detached). Локально WireGuard actions вынесен в стабильный renderer/context, red→green regression и profile6/6/TypeScript/ESLint passed. Обе попытки own объектов очищены, native отсутствие остатков и DB controls подтверждены; transient observer401/recovery отражены отдельно. Runtime backend/frontend3722fad остаётся прежним. Следующий12.5.62 — frontend deploy и полный UI create/peer/toggle/Ping/delete без повторного открытия меню; observer cleanup защитить от ошибок завершающего чтения. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.62 развернул frontend6a46fb1 (backend3722fad healthy) и завершил WireGuard UI lifecycle на обоих CHR: create interface/peer201, disable/enable PATCH200, Ping3/3 до/после переключения, DELETE200 без остатков. Меню открывались однократно, JS/API errors0. Observer сохранил private baseline0600, итоговый exit0/selected baseline и DB controls совпали; readRetries0. Следующий12.5.63 — мобильные Sheets WireGuard: полная ширина и читаемый footer (создание/пир/импорт); текущая панель240px при viewport320px. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -1630,3 +1630,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Первая пара очищена observer, выбранный baseline полностью совпал. Во второй попытке [observer получил401](ux-ui/acceptance/wg-ui-second-observer-error-2026-10-08.json) на завершающем native чтении до cleanup; причина не установлена, пароли не менялись. Повторное чтение через приложение успешно. [Штатный API cleanup](ux-ui/acceptance/wg-ui-second-api-cleanup-2026-10-08.json) проверил точные name/ownership comment и удалил оба own интерфейса DELETE200/200. [Независимая native проверка](ux-ui/acceptance/wg-ui-final-native-cleanup-2026-10-08.json) подтвердила отсутствие own WG/peers/IP/routes на обоих CHR, total IPv4 addresses1/2 и routes4/5; WG interfaces/peers0. Второй baseline был только в памяти и потерян при выходе observer: точное равенство его baseline не заявляется. [DB controls](ux-ui/acceptance/wg-ui-db-controls-2026-10-08.json) servers2/speedHistory9/retention14/migrations9 совпали. Эфемерные контейнеры завершены, остались три основные службы, backend healthy. Audit revisions намеренно сохранены.
Runtime backend/frontend3722fad, локальное меню ещё не развёрнуто. Следующий12.5.62 — frontend Docker deploy и полный UI create interface/peer→disable/enable→повторный handshake/Ping→delete на новой реальной паре, без повторных открытий меню. Перед повтором observer должен сохранить приватный baseline на сервере и продолжать независимую cleanup каждого устройства при ошибке финального state read; запуск browser только после подтверждения готовности нового observer. Переключение, экспорт/import, throughput/RBAC и прочие внешние ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.62 — развёртывание стабильного меню и полный WireGuard UI lifecycle (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-6a46fb1-2026-10-08.json): frontend6a46fb1e40291024202455460dfc233f05e9e5d5/version1.0.0-test.6a46fb1, backend3722fad не перезапускался и healthy. Git archive SHA2560c25ec8215b25446d2a9ad1555244af94afff32194d2a0768ee727b1ca810db8 совпал после передачи. Main-совместимый staging обновлён единственным изменённым production input — WireGuard data grid; package-lock и Dockerfile совпали. Docker build exit0, Next full TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation прошла, предыдущий frontend3722fad образ сохранён. Push не выполнялся.
[Production UI](ux-ui/acceptance/browser-wg-ui-lifecycle-6a46fb1-2026-10-08.json): новый fixture mm-acceptance-wg-ui-1791473944233, оба CHR, ПК/320px, HTTP mocks отсутствуют. Интерфейсы/IP созданы формами UI: POST201/201; peer формы дали201/201. Native проверка подтвердила поля, автоматическую генерацию ключей и соответствие публичного ключа другого конца (ключи только в памяти). Отключение/включение каждого устройства через меню дало PATCH200×4; disabled совпал с RouterOS, peer и IP сохранились. UI DELETE200/200 полностью удалили interfaces/peers/IP; native отсутствие остатков проверено до finish/fallback. Каждое меню открывалось один раз, menuReopens0. JS/API errors0. Это завершает незаконченный сценарий61 на исправленном production frontend.
[Native observer](ux-ui/acceptance/wg-ui-native-6a46fb1-2026-10-08.json): два раунда handshake/Ping — до и после переключения, каждый3/3 на обоих CHR,0%loss,≈55ms. Существующая конфигурация/коллизии UDP51879 и198.18.255.240/30 проверены до UI создания. Observer сохранил приватный baseline на сервере с0600, повторное чтение401 ограничено тремя попытками и отражается в readRetries; ошибка финального state read теперь перехватывается перед независимой cleanup каждого устройства. В этом проходе retries0/final state errors0; failure ветки не инжектировались. Browser запускался только после READY и сверял name fixture с зафиксированным новым observer.
Итоговый observer exit0, afterBrowser пуст на обеих сторонах; selected WG/peers/IP/routes/IPv4 Firewall baseline совпал. Fallback удаления не понадобился; эфемерный контейнер удалён, остались три основные Compose-службы. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, audit revisions намеренно сохранены. Приватный baseline с возможными ключами чужой конфигурации не скачивался и не коммитился. [Smoke](ux-ui/acceptance/deploy-browser-6a46fb1-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
[Мобильная форма создания](ux-ui/screens/wg-ui-create-server2-6a46fb1-320-2026-10-08.png) просмотрена, без ключей. Выявлена отдельная UX-недоработка: WireGuard create/peer/import используют обычный w-full, который не переопределяет data-side width общего Sheet; мобильная панель фактически240px при320px, footer сжат. Следующий12.5.63 — точные responsive width overrides по существующему GRE образцу, проверка полной ширины/кнопок в обеих темах и профильные UI проверки. Export/import, throughput, IPv6, внешние failures/RBAC/multi-instance, Telegram/Portal и остальные интеграционные ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
+13 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-08
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активные backend/frontend source3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad обновлены в12.5.60, backend healthy.
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad healthy; frontend source6a46fb1e40291024202455460dfc233f05e9e5d5/version1.0.0-test.6a46fb1 обновлён в12.5.62.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -473,3 +473,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Первая пара очищена observer, выбранный baseline полностью совпал. Во второй попытке [observer получил401](ux-ui/acceptance/wg-ui-second-observer-error-2026-10-08.json) на завершающем native чтении до cleanup; причина не установлена, пароли не менялись. Повторное чтение через приложение успешно. [Штатный API cleanup](ux-ui/acceptance/wg-ui-second-api-cleanup-2026-10-08.json) проверил точные name/ownership comment и удалил оба own интерфейса DELETE200/200. [Независимая native проверка](ux-ui/acceptance/wg-ui-final-native-cleanup-2026-10-08.json) подтвердила отсутствие own WG/peers/IP/routes на обоих CHR, total IPv4 addresses1/2 и routes4/5; WG interfaces/peers0. Второй baseline был только в памяти и потерян при выходе observer: точное равенство его baseline не заявляется. [DB controls](ux-ui/acceptance/wg-ui-db-controls-2026-10-08.json) servers2/speedHistory9/retention14/migrations9 совпали. Эфемерные контейнеры завершены, остались три основные службы, backend healthy. Audit revisions намеренно сохранены.
Runtime backend/frontend3722fad, локальное меню ещё не развёрнуто. Следующий12.5.62 — frontend Docker deploy и полный UI create interface/peer→disable/enable→повторный handshake/Ping→delete на новой реальной паре, без повторных открытий меню. Перед повтором observer должен сохранить приватный baseline на сервере и продолжать независимую cleanup каждого устройства при ошибке финального state read; запуск browser только после подтверждения готовности нового observer. Переключение, экспорт/import, throughput/RBAC и прочие внешние ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.62 — развёртывание стабильного меню и полный WireGuard UI lifecycle (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-6a46fb1-2026-10-08.json): frontend6a46fb1e40291024202455460dfc233f05e9e5d5/version1.0.0-test.6a46fb1, backend3722fad не перезапускался и healthy. Git archive SHA2560c25ec8215b25446d2a9ad1555244af94afff32194d2a0768ee727b1ca810db8 совпал после передачи. Main-совместимый staging обновлён единственным изменённым production input — WireGuard data grid; package-lock и Dockerfile совпали. Docker build exit0, Next full TypeScript passed. Изменена только MMAPP_IMAGE_TAG, compose validation прошла, предыдущий frontend3722fad образ сохранён. Push не выполнялся.
[Production UI](ux-ui/acceptance/browser-wg-ui-lifecycle-6a46fb1-2026-10-08.json): новый fixture mm-acceptance-wg-ui-1791473944233, оба CHR, ПК/320px, HTTP mocks отсутствуют. Интерфейсы/IP созданы формами UI: POST201/201; peer формы дали201/201. Native проверка подтвердила поля, автоматическую генерацию ключей и соответствие публичного ключа другого конца (ключи только в памяти). Отключение/включение каждого устройства через меню дало PATCH200×4; disabled совпал с RouterOS, peer и IP сохранились. UI DELETE200/200 полностью удалили interfaces/peers/IP; native отсутствие остатков проверено до finish/fallback. Каждое меню открывалось один раз, menuReopens0. JS/API errors0. Это завершает незаконченный сценарий61 на исправленном production frontend.
[Native observer](ux-ui/acceptance/wg-ui-native-6a46fb1-2026-10-08.json): два раунда handshake/Ping — до и после переключения, каждый3/3 на обоих CHR,0%loss,≈55ms. Существующая конфигурация/коллизии UDP51879 и198.18.255.240/30 проверены до UI создания. Observer сохранил приватный baseline на сервере с0600, повторное чтение401 ограничено тремя попытками и отражается в readRetries; ошибка финального state read теперь перехватывается перед независимой cleanup каждого устройства. В этом проходе retries0/final state errors0; failure ветки не инжектировались. Browser запускался только после READY и сверял name fixture с зафиксированным новым observer.
Итоговый observer exit0, afterBrowser пуст на обеих сторонах; selected WG/peers/IP/routes/IPv4 Firewall baseline совпал. Fallback удаления не понадобился; эфемерный контейнер удалён, остались три основные Compose-службы. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, audit revisions намеренно сохранены. Приватный baseline с возможными ключами чужой конфигурации не скачивался и не коммитился. [Smoke](ux-ui/acceptance/deploy-browser-6a46fb1-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
[Мобильная форма создания](ux-ui/screens/wg-ui-create-server2-6a46fb1-320-2026-10-08.png) просмотрена, без ключей. Выявлена отдельная UX-недоработка: WireGuard create/peer/import используют обычный w-full, который не переопределяет data-side width общего Sheet; мобильная панель фактически240px при320px, footer сжат. Следующий12.5.63 — точные responsive width overrides по существующему GRE образцу, проверка полной ширины/кнопок в обеих темах и профильные UI проверки. Export/import, throughput, IPv6, внешние failures/RBAC/multi-instance, Telegram/Portal и остальные интеграционные ограничения остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
@@ -0,0 +1,96 @@
{
"date": "2026-10-08",
"backendSource": "3722fad",
"frontendSource": "6a46fb1",
"name": "mm-acceptance-wg-ui-1791473944233",
"httpMocks": false,
"cases": [
{
"serverId": 1,
"createViaUi": true,
"createReceipt": 201,
"nativeInterfaceAddressAndKeyGeneration": true,
"peerViaUi": true,
"peerReceipt": 201,
"nativePeerFields": true,
"disableEnableViaUi": true,
"nativeToggleAndDataPreserved": true,
"deleteViaUi": true,
"noNativeRemainders": true
},
{
"serverId": 2,
"createViaUi": true,
"createReceipt": 201,
"nativeInterfaceAddressAndKeyGeneration": true,
"peerViaUi": true,
"peerReceipt": 201,
"nativePeerFields": true,
"disableEnableViaUi": true,
"nativeToggleAndDataPreserved": true,
"deleteViaUi": true,
"noNativeRemainders": true
}
],
"requests": [
{
"method": "POST",
"path": "/api/wireguard/interfaces",
"status": 201
},
{
"method": "POST",
"path": "/api/wireguard/interfaces",
"status": 201
},
{
"method": "POST",
"path": "/api/wireguard/peers",
"status": 201
},
{
"method": "POST",
"path": "/api/wireguard/peers",
"status": 201
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/1/*B",
"status": 200
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/1/*B",
"status": 200
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/2/*7",
"status": 200
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/2/*7",
"status": 200
},
{
"method": "DELETE",
"path": "/api/wireguard/interfaces/1/*B",
"status": 200
},
{
"method": "DELETE",
"path": "/api/wireguard/interfaces/2/*7",
"status": 200
}
],
"pageErrors": [],
"badApiResponses": [],
"pingBeforeAndAfterToggle": true,
"menuReopens": 0,
"limits": [
"Keys used in memory only, not persisted",
"Create interface/peer, toggle, delete via real production UI",
"Short handshake/ICMP; no export/import, throughput, failures or RBAC"
]
}
@@ -0,0 +1,40 @@
{
"date": "2026-10-08",
"backendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"frontendSource": "6a46fb1e40291024202455460dfc233f05e9e5d5",
"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": "6a46fb1e40291024202455460dfc233f05e9e5d5",
"backendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"frontendImageId": "sha256:6ddd1d5aeb63c9f80de8d7e7d48df3db39330bbbf1f2e9460696cbb573e35633",
"backendImageId": "sha256:766d07936321df58c1cfb76cbdc949737a44158e8d8aa65b59f391443221eeba",
"frontendVersion": "1.0.0-test.6a46fb1",
"backendHealthy": true,
"health": {
"status": "ok",
"timestamp": "2026-10-08T15:39:42.608Z",
"version": "1.0.0-test.3722fad",
"eventLoopDelayMs": 20,
"flowWorker": {
"alive": false,
"bound": false,
"pendingSize": 0,
"dropped": 0,
"packetsReceived": 0
}
},
"sourceArchiveSha256": "0c25ec8215b25446d2a9ad1555244af94afff32194d2a0768ee727b1ca810db8",
"buildExit": 0,
"productionTypeScriptPassed": true,
"frontendOnlyRestart": true,
"rollbackImageRetained": true,
"controlBefore": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"push": false,
"controlAfter": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"controlsUnchanged": true
}
@@ -0,0 +1,180 @@
{
"date": "2026-10-08",
"backendSource": "3722fad",
"frontendSource": "6a46fb1",
"name": "mm-acceptance-wg-ui-1791473944233",
"listenPort": 51879,
"subnet": "198.18.255.240/30",
"realRouterOs": true,
"pings": [
{
"round": 1,
"results": [
{
"serverId": 1,
"received": 3,
"summary": {
"sent": "3",
"received": "3",
"packet-loss": "0",
"avg-rtt": "54ms942us"
}
},
{
"serverId": 2,
"received": 3,
"summary": {
"sent": "3",
"received": "3",
"packet-loss": "0",
"avg-rtt": "54ms605us"
}
}
],
"passed": true
},
{
"round": 2,
"results": [
{
"serverId": 1,
"received": 3,
"summary": {
"sent": "3",
"received": "3",
"packet-loss": "0",
"avg-rtt": "55ms475us"
}
},
{
"serverId": 2,
"received": 3,
"summary": {
"sent": "3",
"received": "3",
"packet-loss": "0",
"avg-rtt": "54ms649us"
}
}
],
"passed": true
}
],
"cleanup": [
{
"serverId": 1,
"/interface/wireguard": true,
"/interface/wireguard/peers": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/filter": true,
"/ip/firewall/nat": true,
"/ip/firewall/mangle": true
},
{
"serverId": 2,
"/interface/wireguard": true,
"/interface/wireguard/peers": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/filter": true,
"/ip/firewall/nat": true,
"/ip/firewall/mangle": true
}
],
"uiCreatesOnly": true,
"readRetries": [],
"privateBaselineSaved": true,
"nativePeerAssociationConfirmed": true,
"connectedState": [
{
"serverId": 1,
"host": "194.226.121.150",
"expectedAddress": "198.18.255.241/30",
"interface": {
"rosId": "*B",
"appId": "1:*B",
"name": "mm-acceptance-wg-ui-1791473944233",
"listenPort": "51879",
"mtu": "1420",
"disabled": "false",
"running": "true",
"comment": "Temporary UX acceptance mm-acceptance-wg-ui-1791473944233",
"keyGenerated": true
},
"addresses": [
"198.18.255.241/30"
],
"peers": [
{
"rosId": "*7",
"allowedAddresses": "198.18.255.242/32",
"endpoint": "104.165.244.7:51879",
"keepalive": "5s",
"comment": "Temporary UX acceptance mm-acceptance-wg-ui-1791473944233",
"disabled": "false",
"handshake": "2s",
"rx": "1604",
"tx": "1696"
}
]
},
{
"serverId": 2,
"host": "104.165.244.7",
"expectedAddress": "198.18.255.242/30",
"interface": {
"rosId": "*7",
"appId": "2:*7",
"name": "mm-acceptance-wg-ui-1791473944233",
"listenPort": "51879",
"mtu": "1420",
"disabled": "false",
"running": "true",
"comment": "Temporary UX acceptance mm-acceptance-wg-ui-1791473944233",
"keyGenerated": true
},
"addresses": [
"198.18.255.242/30"
],
"peers": [
{
"rosId": "*4",
"allowedAddresses": "198.18.255.241/32",
"endpoint": "194.226.121.150:51879",
"keepalive": "5s",
"comment": "Temporary UX acceptance mm-acceptance-wg-ui-1791473944233",
"disabled": "false",
"handshake": "2s",
"rx": "1548",
"tx": "1604"
}
]
}
],
"afterBrowser": [
{
"serverId": 1,
"host": "194.226.121.150",
"expectedAddress": "198.18.255.241/30",
"interface": null,
"addresses": [],
"peers": []
},
{
"serverId": 2,
"host": "104.165.244.7",
"expectedAddress": "198.18.255.242/30",
"interface": null,
"addresses": [],
"peers": []
}
],
"limits": [
"Only own WireGuard resources; no default route or firewall changes",
"Public keys transferred to browser only in memory; no keys persisted in report",
"Short handshake/ICMP, not throughput or failure/RBAC acceptance",
"WireGuard revision audit retained"
],
"privateBaselineMode": "0600"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB