chore(test): развернуть и подтвердить полное удаление WireGuard

This commit is contained in:
Denozordec committed 2026-10-08 22:12:33 +07:00
1 parent 3722fad329
commit 4c4ba02b44
9 files changed
+373 -7

No files matched your search

+13 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Статус на2026-10-08: backendbd3f996/frontendfd521f6, backend healthy. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. WireGuard handshake/короткий Ping/native API/read-only UI приняты в границах12.5.58; 12.5.59 воспроизвёл оставшиеся peers/IP после обычного удаления; локальное исправление ещё не развёрнуто, приёмка удаления открыта. Устойчивость меню 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: 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. Устойчивость меню 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).
## Паспорт стенда
@@ -441,3 +441,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Проверки backend/src/services/wireguard-delete.test.ts —9/9: чужие объекты сохранены, связи по имени/rosId, encoded ID, ошибки всех предварительных чтений, неизвестный интерфейс, частичная ошибка/повтор, неподтверждённое удаление каждой группы. Profile UI tests wireguard-links.spec.ts --grep deletion/удал —2/2: подтверждение удаления интерфейса/пира, запрет повторного нажатия и повтор после API ошибки. Backend TypeScript, scoped frontend TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённых файлов и ReUI checklist passed. Примитивы/таблицы не менялись.
Исправление пока локальное: удалённый backendbd3f996/frontendfd521f6 остаётся прежним. Следующий12.5.60 — production Docker build/deploy обеих частей, новая собственная WireGuard пара и обычное UI/API удаление без предварительного удаления peer/IP, независимая проверка отсутствия остатков и baseline, очистка fallback только own объектов. IPv6 address lifecycle, concurrency/multi-instance, Telegram/Portal и другие внешние ограничения не проверены. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.60 — развёртывание и реальное полное удаление WireGuard (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-3722fad-2026-10-08.json): backend/frontend3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad. Чистый Git archive SHA256ec8084a0acbd0f26886a4c54072b65943d835b42a6a314c28e58b1b2bed791c6 совпал после передачи. Main-совместимые staging contexts предыдущих сборок обновлены только изменившимися production inputs: WireGuard route/service backend и frontend page. Docker builds exit0, backend/full Next TypeScript passed. Только BACKEND_IMAGE_TAG и MMAPP_IMAGE_TAG обновлены, compose validation passed, перезапущены backend/frontend. Прежние backendbd3f996/frontendfd521f6 образы оставлены для rollback. Приватный pre-3722fad PG backup1771860bytes/0600 с проверкой pg_restore --list остаётся только на сервере; дамп и ключи не передавались. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, backend healthy, версия API подтверждена. Push не выполнялся.
[Настоящая пара и native проверка](ux-ui/acceptance/wg-real-delete-3722fad-2026-10-08.json): новый own fixture mm-acceptance-wg-1791472117395, свободные UDP51879 и198.18.255.240/30. Создание interfaces/peers API201, native key association, handshake/RX, короткий двусторонний Ping3/3 и MTU подтверждены до удаления. Пиры и адреса оставались прикреплены к интерфейсам до действий пользователя в тесте; предварительного удаления peers/IP harness не делал.
[Production UI delete](ux-ui/acceptance/browser-wg-delete-3722fad-2026-10-08.json): собственные интерфейсы удалены через стандартное меню и подтверждение на обоих CHR (ПК/320px), текст указывает связанные пиры и IP-адреса. DELETE200/200 закрыли диалоги; независимое native чтение сразу после каждого ответа показало interface:null, peers0, addresses[]. Проверка выполнена ДО finish/fallback cleanup. Это подтверждает исправление59 на живом RouterOS, а не маскирующую очистку harness. JS errors0; HTTP mocks отсутствуют.
Итоговый harness exit0: afterBrowserDelete пуст на обеих сторонах, выбранные WG/peers/IP/routes/IPv4 Firewall поля совпали с baseline. Fallback не понадобился для peers/IP/interfaces; ephemeral контейнер удалён, остались три основные Compose-службы. WireGuard revisions намеренно сохранены как история операций. [Smoke](ux-ui/acceptance/deploy-browser-3722fad-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
Приняты успешное обычное удаление own интерфейса с IPv4 адресом и пиром и соответствующий UI результат. Partial failures/read errors/сохранение чужих WG объектов проверены локальными тестами59; на этом стенде такие отказы не инжектировались. IPv6 lifecycle, concurrency/multi-instance, throughput, Telegram/Portal и остальные внешние ограничения остаются открытыми. Следующий12.5.61 — реальные WireGuard действия через UI: создание интерфейса и пира, переключение и очистка собственной пары; ключи не публиковать. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-08: 12.5.59 воспроизвёл ошибку удаления WireGuard через production UI на обоих CHR: DELETE200 удалял только интерфейс, оставляя peer и IP. Own остатки очищены, выбранный baseline совпал. Локально добавлено связанное удаление peers/IPv4 addresses/interface с проверкой результата; unit9/9, UI deletion2/2, backend/frontend TypeScript и ESLint passed. Runtime backendbd3f996/frontendfd521f6 healthy ещё содержит прежнее поведение. Следующий12.5.60 — Docker build/deploy backend и frontend, повторить обычное удаление собственной WG пары без предварительной очистки peer/IP и сверить baseline. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.60 развернул backend/frontend3722fad и подтвердил исправление удаления WG на новой реальной паре CHR: обычный UI DELETE200/200 удалил интерфейсы, peers и IPv4 addresses без предварительной очистки. Native состояние проверено до fallback, выбранный baseline и DB controls совпали, backend healthy; production builds/TypeScript и smoke6 passed. Следующий12.5.61 — WireGuard через UI: создание интерфейса/пира, переключение и очистка собственной реальной пары; секреты не публиковать. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-08
Этапы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/Ping/native/UI и финальную очистку; 12.5.59 подтвердил оставшиеся peers/IP после удаления WG и локально исправил backend; следующий12.5.60 — Docker deploy и повторная реальная приёмка обычного удаления. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения.
Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend/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 — WireGuard UI создание/переключение собственной реальной пары. Реальная 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.59 воспроизвёл ошибку удаления WireGuard через production UI на обоих CHR: DELETE200 удалял только интерфейс, оставляя peer и IP. Own остатки очищены, выбранный baseline совпал. Локально добавлено связанное удаление peers/IPv4 addresses/interface с проверкой результата; unit9/9, UI deletion2/2, backend/frontend TypeScript и ESLint passed. Runtime backendbd3f996/frontendfd521f6 healthy ещё содержит прежнее поведение. Следующий12.5.60 — Docker build/deploy backend и frontend, повторить обычное удаление собственной WG пары без предварительной очистки peer/IP и сверить baseline. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.60 развернул backend/frontend3722fad и подтвердил исправление удаления WG на новой реальной паре CHR: обычный UI DELETE200/200 удалил интерфейсы, peers и IPv4 addresses без предварительной очистки. Native состояние проверено до fallback, выбранный baseline и DB controls совпали, backend healthy; production builds/TypeScript и smoke6 passed. Следующий12.5.61 — WireGuard через UI: создание интерфейса/пира, переключение и очистка собственной реальной пары; секреты не публиковать. Этап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–59 и ограничения ниже. Runtime backendbd3f996/frontendfd521f6. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–60 и ограничения ниже. Runtime backend/frontend3722fad. |
## 12.5.60 — развёртывание и реальное полное удаление WireGuard (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-3722fad-2026-10-08.json): backend/frontend3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad. Чистый Git archive SHA256ec8084a0acbd0f26886a4c54072b65943d835b42a6a314c28e58b1b2bed791c6 совпал после передачи. Main-совместимые staging contexts предыдущих сборок обновлены только изменившимися production inputs: WireGuard route/service backend и frontend page. Docker builds exit0, backend/full Next TypeScript passed. Только BACKEND_IMAGE_TAG и MMAPP_IMAGE_TAG обновлены, compose validation passed, перезапущены backend/frontend. Прежние backendbd3f996/frontendfd521f6 образы оставлены для rollback. Приватный pre-3722fad PG backup1771860bytes/0600 с проверкой pg_restore --list остаётся только на сервере; дамп и ключи не передавались. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, backend healthy, версия API подтверждена. Push не выполнялся.
[Настоящая пара и native проверка](ux-ui/acceptance/wg-real-delete-3722fad-2026-10-08.json): новый own fixture mm-acceptance-wg-1791472117395, свободные UDP51879 и198.18.255.240/30. Создание interfaces/peers API201, native key association, handshake/RX, короткий двусторонний Ping3/3 и MTU подтверждены до удаления. Пиры и адреса оставались прикреплены к интерфейсам до действий пользователя в тесте; предварительного удаления peers/IP harness не делал.
[Production UI delete](ux-ui/acceptance/browser-wg-delete-3722fad-2026-10-08.json): собственные интерфейсы удалены через стандартное меню и подтверждение на обоих CHR (ПК/320px), текст указывает связанные пиры и IP-адреса. DELETE200/200 закрыли диалоги; независимое native чтение сразу после каждого ответа показало interface:null, peers0, addresses[]. Проверка выполнена ДО finish/fallback cleanup. Это подтверждает исправление59 на живом RouterOS, а не маскирующую очистку harness. JS errors0; HTTP mocks отсутствуют.
Итоговый harness exit0: afterBrowserDelete пуст на обеих сторонах, выбранные WG/peers/IP/routes/IPv4 Firewall поля совпали с baseline. Fallback не понадобился для peers/IP/interfaces; ephemeral контейнер удалён, остались три основные Compose-службы. WireGuard revisions намеренно сохранены как история операций. [Smoke](ux-ui/acceptance/deploy-browser-3722fad-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
Приняты успешное обычное удаление own интерфейса с IPv4 адресом и пиром и соответствующий UI результат. Partial failures/read errors/сохранение чужих WG объектов проверены локальными тестами59; на этом стенде такие отказы не инжектировались. IPv6 lifecycle, concurrency/multi-instance, throughput, Telegram/Portal и остальные внешние ограничения остаются открытыми. Следующий12.5.61 — реальные WireGuard действия через UI: создание интерфейса и пира, переключение и очистка собственной пары; ключи не публиковать. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.59 — удаление WireGuard оставляло peer и IP; локальное исправление (2026-10-08)
+13 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-08: 12.5.59 воспроизвёл ошибку удаления WireGuard через production UI на обоих CHR: DELETE200 удалял только интерфейс, оставляя peer и IP. Own остатки очищены, выбранный baseline совпал. Локально добавлено связанное удаление peers/IPv4 addresses/interface с проверкой результата; unit9/9, UI deletion2/2, backend/frontend TypeScript и ESLint passed. Runtime backendbd3f996/frontendfd521f6 healthy ещё содержит прежнее поведение. Следующий12.5.60 — Docker build/deploy backend и frontend, повторить обычное удаление собственной WG пары без предварительной очистки peer/IP и сверить baseline. Этап12.5 открыт.
Актуальное продолжение 2026-10-08: 12.5.60 развернул backend/frontend3722fad и подтвердил исправление удаления WG на новой реальной паре CHR: обычный UI DELETE200/200 удалил интерфейсы, peers и IPv4 addresses без предварительной очистки. Native состояние проверено до fallback, выбранный baseline и DB controls совпали, backend healthy; production builds/TypeScript и smoke6 passed. Следующий12.5.61 — WireGuard через UI: создание интерфейса/пира, переключение и очистка собственной реальной пары; секреты не публиковать. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -1606,3 +1606,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Проверки backend/src/services/wireguard-delete.test.ts —9/9: чужие объекты сохранены, связи по имени/rosId, encoded ID, ошибки всех предварительных чтений, неизвестный интерфейс, частичная ошибка/повтор, неподтверждённое удаление каждой группы. Profile UI tests wireguard-links.spec.ts --grep deletion/удал —2/2: подтверждение удаления интерфейса/пира, запрет повторного нажатия и повтор после API ошибки. Backend TypeScript, scoped frontend TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённых файлов и ReUI checklist passed. Примитивы/таблицы не менялись.
Исправление пока локальное: удалённый backendbd3f996/frontendfd521f6 остаётся прежним. Следующий12.5.60 — production Docker build/deploy обеих частей, новая собственная WireGuard пара и обычное UI/API удаление без предварительного удаления peer/IP, независимая проверка отсутствия остатков и baseline, очистка fallback только own объектов. IPv6 address lifecycle, concurrency/multi-instance, Telegram/Portal и другие внешние ограничения не проверены. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.60 — развёртывание и реальное полное удаление WireGuard (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-3722fad-2026-10-08.json): backend/frontend3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad. Чистый Git archive SHA256ec8084a0acbd0f26886a4c54072b65943d835b42a6a314c28e58b1b2bed791c6 совпал после передачи. Main-совместимые staging contexts предыдущих сборок обновлены только изменившимися production inputs: WireGuard route/service backend и frontend page. Docker builds exit0, backend/full Next TypeScript passed. Только BACKEND_IMAGE_TAG и MMAPP_IMAGE_TAG обновлены, compose validation passed, перезапущены backend/frontend. Прежние backendbd3f996/frontendfd521f6 образы оставлены для rollback. Приватный pre-3722fad PG backup1771860bytes/0600 с проверкой pg_restore --list остаётся только на сервере; дамп и ключи не передавались. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, backend healthy, версия API подтверждена. Push не выполнялся.
[Настоящая пара и native проверка](ux-ui/acceptance/wg-real-delete-3722fad-2026-10-08.json): новый own fixture mm-acceptance-wg-1791472117395, свободные UDP51879 и198.18.255.240/30. Создание interfaces/peers API201, native key association, handshake/RX, короткий двусторонний Ping3/3 и MTU подтверждены до удаления. Пиры и адреса оставались прикреплены к интерфейсам до действий пользователя в тесте; предварительного удаления peers/IP harness не делал.
[Production UI delete](ux-ui/acceptance/browser-wg-delete-3722fad-2026-10-08.json): собственные интерфейсы удалены через стандартное меню и подтверждение на обоих CHR (ПК/320px), текст указывает связанные пиры и IP-адреса. DELETE200/200 закрыли диалоги; независимое native чтение сразу после каждого ответа показало interface:null, peers0, addresses[]. Проверка выполнена ДО finish/fallback cleanup. Это подтверждает исправление59 на живом RouterOS, а не маскирующую очистку harness. JS errors0; HTTP mocks отсутствуют.
Итоговый harness exit0: afterBrowserDelete пуст на обеих сторонах, выбранные WG/peers/IP/routes/IPv4 Firewall поля совпали с baseline. Fallback не понадобился для peers/IP/interfaces; ephemeral контейнер удалён, остались три основные Compose-службы. WireGuard revisions намеренно сохранены как история операций. [Smoke](ux-ui/acceptance/deploy-browser-3722fad-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
Приняты успешное обычное удаление own интерфейса с IPv4 адресом и пиром и соответствующий UI результат. Partial failures/read errors/сохранение чужих WG объектов проверены локальными тестами59; на этом стенде такие отказы не инжектировались. IPv6 lifecycle, concurrency/multi-instance, throughput, Telegram/Portal и остальные внешние ограничения остаются открытыми. Следующий12.5.61 — реальные WireGuard действия через UI: создание интерфейса и пира, переключение и очистка собственной пары; ключи не публиковать. Пользовательское правило настоящих 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 sourcebd3f996f55cccd312dfe5861900849ca21791be8/version1.0.0-test.bd3f996 healthy. Frontend sourcefd521f6ef892ff3f7e8bc25878d80fb13817dda8/version1.0.0-test.fd521f6 обновлён в12.5.57.
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активные backend/frontend source3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad обновлены в12.5.60, backend healthy.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -449,3 +449,15 @@ DELETE200/200, собственные GRE/IP/connected routes удалены; в
Проверки backend/src/services/wireguard-delete.test.ts —9/9: чужие объекты сохранены, связи по имени/rosId, encoded ID, ошибки всех предварительных чтений, неизвестный интерфейс, частичная ошибка/повтор, неподтверждённое удаление каждой группы. Profile UI tests wireguard-links.spec.ts --grep deletion/удал —2/2: подтверждение удаления интерфейса/пира, запрет повторного нажатия и повтор после API ошибки. Backend TypeScript, scoped frontend TypeScript (tmp/tsconfig-speed-check.json), ESLint изменённых файлов и ReUI checklist passed. Примитивы/таблицы не менялись.
Исправление пока локальное: удалённый backendbd3f996/frontendfd521f6 остаётся прежним. Следующий12.5.60 — production Docker build/deploy обеих частей, новая собственная WireGuard пара и обычное UI/API удаление без предварительного удаления peer/IP, независимая проверка отсутствия остатков и baseline, очистка fallback только own объектов. IPv6 address lifecycle, concurrency/multi-instance, Telegram/Portal и другие внешние ограничения не проверены. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
## 12.5.60 — развёртывание и реальное полное удаление WireGuard (2026-10-08)
[Развёртывание](ux-ui/acceptance/deployed-3722fad-2026-10-08.json): backend/frontend3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad. Чистый Git archive SHA256ec8084a0acbd0f26886a4c54072b65943d835b42a6a314c28e58b1b2bed791c6 совпал после передачи. Main-совместимые staging contexts предыдущих сборок обновлены только изменившимися production inputs: WireGuard route/service backend и frontend page. Docker builds exit0, backend/full Next TypeScript passed. Только BACKEND_IMAGE_TAG и MMAPP_IMAGE_TAG обновлены, compose validation passed, перезапущены backend/frontend. Прежние backendbd3f996/frontendfd521f6 образы оставлены для rollback. Приватный pre-3722fad PG backup1771860bytes/0600 с проверкой pg_restore --list остаётся только на сервере; дамп и ключи не передавались. DB controls до/после servers2/speedHistory9/retention14/migrations9 совпали, backend healthy, версия API подтверждена. Push не выполнялся.
[Настоящая пара и native проверка](ux-ui/acceptance/wg-real-delete-3722fad-2026-10-08.json): новый own fixture mm-acceptance-wg-1791472117395, свободные UDP51879 и198.18.255.240/30. Создание interfaces/peers API201, native key association, handshake/RX, короткий двусторонний Ping3/3 и MTU подтверждены до удаления. Пиры и адреса оставались прикреплены к интерфейсам до действий пользователя в тесте; предварительного удаления peers/IP harness не делал.
[Production UI delete](ux-ui/acceptance/browser-wg-delete-3722fad-2026-10-08.json): собственные интерфейсы удалены через стандартное меню и подтверждение на обоих CHR (ПК/320px), текст указывает связанные пиры и IP-адреса. DELETE200/200 закрыли диалоги; независимое native чтение сразу после каждого ответа показало interface:null, peers0, addresses[]. Проверка выполнена ДО finish/fallback cleanup. Это подтверждает исправление59 на живом RouterOS, а не маскирующую очистку harness. JS errors0; HTTP mocks отсутствуют.
Итоговый harness exit0: afterBrowserDelete пуст на обеих сторонах, выбранные WG/peers/IP/routes/IPv4 Firewall поля совпали с baseline. Fallback не понадобился для peers/IP/interfaces; ephemeral контейнер удалён, остались три основные Compose-службы. WireGuard revisions намеренно сохранены как история операций. [Smoke](ux-ui/acceptance/deploy-browser-3722fad-2026-10-08.json): dashboard/servers/uptime/settings/filters/alerts200,320px fit, JS/API errors0.
Приняты успешное обычное удаление own интерфейса с IPv4 адресом и пиром и соответствующий UI результат. Partial failures/read errors/сохранение чужих WG объектов проверены локальными тестами59; на этом стенде такие отказы не инжектировались. IPv6 lifecycle, concurrency/multi-instance, throughput, Telegram/Portal и остальные внешние ограничения остаются открытыми. Следующий12.5.61 — реальные WireGuard действия через UI: создание интерфейса и пира, переключение и очистка собственной пары; ключи не публиковать. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
@@ -0,0 +1,24 @@
{
"date": "2026-10-08",
"backendSource": "3722fad",
"frontendSource": "3722fad",
"name": "mm-acceptance-wg-1791472117395",
"httpMocks": false,
"cases": [
{
"serverId": 1,
"status": 200,
"interfaceAbsent": true,
"remainingPeerCount": 0,
"remainingAddresses": []
},
{
"serverId": 2,
"status": 200,
"interfaceAbsent": true,
"remainingPeerCount": 0,
"remainingAddresses": []
}
],
"pageErrors": []
}
@@ -0,0 +1,40 @@
{
"date": "2026-10-08",
"backendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"frontendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"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",
"backendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"frontendSource": "3722fad329a68a8721ebfda8e044ab6cb5830cca",
"backendImageId": "sha256:766d07936321df58c1cfb76cbdc949737a44158e8d8aa65b59f391443221eeba",
"frontendImageId": "sha256:63f7a3391c4b1113c62a2e98fc081c047f4104f44a17308b4a90b9bc182cf7b5",
"backendHealthy": true,
"health": {
"status": "ok",
"timestamp": "2026-10-08T15:10:04.334Z",
"version": "1.0.0-test.3722fad",
"eventLoopDelayMs": 20,
"flowWorker": {
"alive": false,
"bound": false,
"pendingSize": 0,
"dropped": 0,
"packetsReceived": 0
}
},
"sourceArchiveSha256": "ec8084a0acbd0f26886a4c54072b65943d835b42a6a314c28e58b1b2bed791c6",
"buildsExit": 0,
"productionTypeScriptPassed": true,
"controlBefore": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"controlAfter": {
"servers": 2,
"speedHistory": 9,
"retentionDays": 14,
"migrations": 9
},
"privateBackupBytes": 1771860,
"privateBackupListValid": true,
"rollbackImagesRetained": true,
"push": false,
"controlsUnchanged": true
}
@@ -0,0 +1,213 @@
{
"date": "2026-10-08",
"backendSource": "3722fad",
"frontendSource": "3722fad",
"name": "mm-acceptance-wg-1791472117395",
"subnet": "198.18.255.240/30",
"listenPort": 51879,
"realRouterOs": true,
"changes": [
{
"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/*8",
"status": 200
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/1/*8",
"status": 200
},
{
"method": "GET",
"path": "/api/wireguard",
"status": 200
}
],
"pings": [
{
"serverId": 1,
"target": "198.18.255.242",
"interface": "mm-acceptance-wg-1791472117395",
"received": 3,
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "54ms782us",
"avg-rtt": "54ms782us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "54ms576us",
"avg-rtt": "54ms679us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "55ms981us",
"avg-rtt": "55ms113us"
}
]
},
{
"serverId": 2,
"target": "198.18.255.241",
"interface": "mm-acceptance-wg-1791472117395",
"received": 3,
"rows": [
{
"sent": "1",
"received": "1",
"packet-loss": "0",
"time": "61ms867us",
"avg-rtt": "61ms867us"
},
{
"sent": "2",
"received": "2",
"packet-loss": "0",
"time": "54ms756us",
"avg-rtt": "58ms311us"
},
{
"sent": "3",
"received": "3",
"packet-loss": "0",
"time": "55ms256us",
"avg-rtt": "57ms293us"
}
]
}
],
"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
}
],
"nativeKeyGenerationConfirmed": true,
"connectedState": [
{
"serverId": 1,
"interface": {
"rosId": "*8",
"appId": "1:*8",
"name": "mm-acceptance-wg-1791472117395",
"listenPort": "51879",
"mtu": "1420",
"running": "true",
"disabled": "false",
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791472117395"
},
"addresses": [
"198.18.255.241/30"
],
"peers": [
{
"rosId": "*4",
"name": "mm-acceptance-wg-1791472117395-peer",
"allowedAddresses": "198.18.255.242/32",
"endpoint": "104.165.244.7:51879",
"handshake": "1s",
"rx": "180",
"tx": "272",
"disabled": "false",
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791472117395"
}
]
},
{
"serverId": 2,
"interface": {
"rosId": "*4",
"appId": "2:*4",
"name": "mm-acceptance-wg-1791472117395",
"listenPort": "51879",
"mtu": "1420",
"running": "true",
"disabled": "false",
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791472117395"
},
"addresses": [
"198.18.255.242/30"
],
"peers": [
{
"rosId": "*2",
"name": "mm-acceptance-wg-1791472117395-peer",
"allowedAddresses": "198.18.255.241/32",
"endpoint": "194.226.121.150:51879",
"handshake": "1s",
"rx": "124",
"tx": "180",
"disabled": "false",
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791472117395"
}
]
}
],
"handshakeConfirmed": true,
"bidirectionalPingPassed": true,
"catalogMatchesNative": true,
"afterBrowserDelete": [
{
"serverId": 1,
"interface": null,
"addresses": [],
"peers": []
},
{
"serverId": 2,
"interface": null,
"addresses": [],
"peers": []
}
],
"limits": [
"Only own WireGuard interface/peer/IP and connected route changed; no default routes/firewall changes",
"Browser deleted each interface with peer/IP attached; native empty state checked before fallback cleanup",
"Private/public/preshared keys omitted from report; native generation and peer association checked in memory",
"Handshake and short ICMP connectivity, not throughput, RBAC or interrupted mutation",
"WireGuard audit revisions intentionally retained"
]
}