chore(test): подтвердить экспорт шаблона WireGuard на стенде
This commit is contained in:
1 parent
c16fc0c5b5
commit
d13c773856
9 files changed
+542
-8
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Статус на2026-10-08: backend3722fad/frontendbf43263, backend healthy. Мобильная ширина WireGuard Sheets принята на реальных CHR в12.5.64. API экспорт безprivate keys подтверждён в65; peer-conf default endpoint ошибочен, client template и применение импорта не приняты. Мобильная 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).
|
||||
Статус на2026-10-09: backend/frontend c16fc0c, backend healthy. В12.5.67 исправленный Peer .conf принят как клиентский шаблон: API6/6, browser4/4, server endpoint и placeholders; настоящий import ещё не принят. Мобильная ширина WireGuard Sheets принята в12.5.64. Мобильная 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).
|
||||
|
||||
## Паспорт стенда
|
||||
|
||||
@@ -525,3 +525,17 @@ Server allowed-address не обозначает клиентские маршр
|
||||
Проверки lib/wg-client-template.test.ts —5/5: endpoint exporting server/явный override/hostname/IPv6/неизвестные значения, одинаковые backend/frontend placeholders, отсутствие активного Address/AllowedIPs и default route без явных данных, сохранение явно заданных client параметров. Existing backend wireguard-config.test.ts passed; contracts build, backend TypeScript, scoped frontend TypeScript и ESLint всех изменённых файлов passed. Profile wireguard-links.spec.ts --grep экспорт —4/4: late response isolation/error, неправильный формат, выбор второго peer/ROS ID, его client-address/client-endpoint и отсутствие remote endpoint/server allowed-address в preview. Первый запуск старого теста ожидал ошибочно скопированные peer.allowedIps; fixture и assertions заменены на отличающиеся client metadata, защита выбора второго пира сохранена. ReUI checklist checked.
|
||||
|
||||
Исправление локальное: runtime backend3722fad/frontendbf43263 не менялся. Следующий12.5.67 — production Docker build/deploy backend и frontend с обновлённым contracts source, новая собственная WG пара, native/API export false redaction и правильный endpoint/шаблон, browser preview соответствие, cleanup/baseline. Поддержка client-allowed-address, настоящий client import/connectivity, import roundtrip/private-key modes, throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и другие протоколы/интеграции остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.67 — Docker deploy и реальный экспорт клиентского шаблона WireGuard (2026-10-09)
|
||||
|
||||
Обе production Docker сборки c16fc0c завершились успешно. Межслойный unit test перенесён из lib в tests/unit/wg-client-template.test.ts отдельным локальным коммитом c16fc0c: frontend Docker context не содержит backend source. Предварительный frontend staging c82e8fa не включал этот новый тест и не используется как доказательство чистой сборки исходного c82e8fa. Окончательные staging lib/backend src/contracts совпали с архивом c16fc0c; финальные образы обеих частей имеют OCI revision c16fc0c5b53ba8fcb6690ef6f0a695f59875f171. Network-none assertion backend образа проверил общий resolver и отсутствие активных клиентских Address/AllowedIPs без явных данных.
|
||||
|
||||
Перед обновлением сохранён приватный PG dump pre-c16fc0c.dump,2314923bytes,mode0600; pg_restore --list passed. Backend/frontend обновлены до1.0.0-test.c16fc0c, backend healthy, frontend /wireguard HTTP200. Образы: backend sha256:fb9f9279df07481d960f5799338e15a0fc9162a8baca3be7789a89f28a5f56dc, frontend sha256:bc70ee3203b4fd3f269ab6554493f0fb1ec2e60ef515ced2dcd6c6c7428064bc. Резервная .env хранится только на сервере. SSH161.104.46.222 и RouterOS REST194.226.121.150/104.165.244.7 доступны с прежними учётными данными; пароли не изменялись.
|
||||
|
||||
Создана собственная временная WG пара с адресами198.18.255.241/30 и198.18.255.242/30,port51879,MTU1420,уникальными name/comment. Native key generation/peer association проверены в памяти, handshake и Ping3/3 в обе стороны passed. Шесть настоящих API export запросов (rsc/conf/peer-conf на обоих устройствах) вернули200 с includePrivateKey=false. RSC/CONF параметры совпали с native; ключи и конфигурации не сохранялись. Peer .conf содержит PublicKey экспортирующего интерфейса и Endpoint экспортирующего устройства:51879; client Address/AllowedIPs остаются comment placeholders, активного default route нет. Это шаблон, готовность к импорту клиента не заявлена.
|
||||
|
||||
[Native/API evidence](ux-ui/acceptance/wg-export-native-2026-10-09.json), [browser evidence](ux-ui/acceptance/browser-wg-peer-export-c16fc0c-2026-10-09.json), [deploy/DB controls](ux-ui/acceptance/wg-export-deploy-controls-2026-10-09.json). Четыре настоящих browser сценария без HTTP mocks: оба CHR ×1280/320px. Local preview и live Peer export совпали по server endpoint/client placeholders; POST включает выбранный ROS peer ID и includePrivateKey=false. Нет page errors/API errors/page overflow. Export содержимое и ключи не попали в отчёты/скриншоты; UI download не выполнялся.
|
||||
|
||||
Fixture завершён exit0 и удалён. Проверенные WG interfaces/peers/IP/routes/IPv4 filter/nat/mangle совпали с baseline на обоих CHR. Очистка только собственных объектов; audit revisions намеренно сохранены. DB controls до/после совпали:servers2,speedHistory9,retentionDays14,migrations9. Дополнительно сохранён ранее полученный screenshot создания на CHR2 в12.5.64 с исходной датой2026-10-08. Product code в этом блоке не менялся после уже проверенного c16fc0c; общая регрессия не повторялась.
|
||||
|
||||
Следующий12.5.68 — import roundtrip собственного конфигурационного файла с независимой проверкой параметров и очисткой. Client-allowed-address/готовый client import, private-key export modes/UI download,throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и остальные протоколы/интеграции остаются открытыми. Локальный коммит без push.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.66 локально исправил Peer .conf: общий resolver использует client-endpoint или host/listenPort экспортирующего сервера; remote peer endpoint и server allowed-address не подставляются как клиентские значения. Недостающие Address/AllowedIPs/Endpoint явно отмечены шаблоном, UI поясняет ручное заполнение. Unit5/5, codec, export UI4/4, contracts/backend/frontend TypeScript и ESLint passed. Runtime backend3722fad/frontendbf43263 ещё прежний. Следующий12.5.67 — Docker build/deploy обеих частей с обновлённым contracts, реальный API/preview Peer .conf на собственной WG паре с очисткой; import после этого. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-09: 12.5.67 развернул backend/frontend c16fc0c и подтвердил исправленный Peer .conf на собственной WireGuard паре двух CHR. API export6/6 и browser preview/live4/4 на1280/320px passed; endpoint экспортирующего сервера, client placeholders и отсутствие private-key подтверждены. Handshake, Ping3/3 в обе стороны, cleanup/baseline и DB controls passed. Все три сервера доступны с прежними доступами. Следующий12.5.68 — безопасный import roundtrip собственного WG конфига с проверкой native параметров и очисткой. Этап12.5 открыт.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
|
||||
+16
-2
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.66 локально исправил Peer .conf: общий resolver использует client-endpoint или host/listenPort экспортирующего сервера; remote peer endpoint и server allowed-address не подставляются как клиентские значения. Недостающие Address/AllowedIPs/Endpoint явно отмечены шаблоном, UI поясняет ручное заполнение. Unit5/5, codec, export UI4/4, contracts/backend/frontend TypeScript и ESLint passed. Runtime backend3722fad/frontendbf43263 ещё прежний. Следующий12.5.67 — Docker build/deploy обеих частей с обновлённым contracts, реальный API/preview Peer .conf на собственной WG паре с очисткой; import после этого. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-09: 12.5.67 развернул backend/frontend c16fc0c и подтвердил исправленный Peer .conf на собственной WireGuard паре двух CHR. API export6/6 и browser preview/live4/4 на1280/320px passed; endpoint экспортирующего сервера, client placeholders и отсутствие private-key подтверждены. Handshake, Ping3/3 в обе стороны, cleanup/baseline и DB controls passed. Все три сервера доступны с прежними доступами. Следующий12.5.68 — безопасный import roundtrip собственного WG конфига с проверкой native параметров и очисткой. Этап12.5 открыт.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -34,7 +34,21 @@
|
||||
| 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–66 и ограничения ниже. Runtime backend3722fad/frontendbf43263. |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–67 и ограничения ниже. Runtime backend/frontend c16fc0c. |
|
||||
|
||||
## 12.5.67 — Docker deploy и реальный экспорт клиентского шаблона WireGuard (2026-10-09)
|
||||
|
||||
Обе production Docker сборки c16fc0c завершились успешно. Межслойный unit test перенесён из lib в tests/unit/wg-client-template.test.ts отдельным локальным коммитом c16fc0c: frontend Docker context не содержит backend source. Предварительный frontend staging c82e8fa не включал этот новый тест и не используется как доказательство чистой сборки исходного c82e8fa. Окончательные staging lib/backend src/contracts совпали с архивом c16fc0c; финальные образы обеих частей имеют OCI revision c16fc0c5b53ba8fcb6690ef6f0a695f59875f171. Network-none assertion backend образа проверил общий resolver и отсутствие активных клиентских Address/AllowedIPs без явных данных.
|
||||
|
||||
Перед обновлением сохранён приватный PG dump pre-c16fc0c.dump,2314923bytes,mode0600; pg_restore --list passed. Backend/frontend обновлены до1.0.0-test.c16fc0c, backend healthy, frontend /wireguard HTTP200. Образы: backend sha256:fb9f9279df07481d960f5799338e15a0fc9162a8baca3be7789a89f28a5f56dc, frontend sha256:bc70ee3203b4fd3f269ab6554493f0fb1ec2e60ef515ced2dcd6c6c7428064bc. Резервная .env хранится только на сервере. SSH161.104.46.222 и RouterOS REST194.226.121.150/104.165.244.7 доступны с прежними учётными данными; пароли не изменялись.
|
||||
|
||||
Создана собственная временная WG пара с адресами198.18.255.241/30 и198.18.255.242/30,port51879,MTU1420,уникальными name/comment. Native key generation/peer association проверены в памяти, handshake и Ping3/3 в обе стороны passed. Шесть настоящих API export запросов (rsc/conf/peer-conf на обоих устройствах) вернули200 с includePrivateKey=false. RSC/CONF параметры совпали с native; ключи и конфигурации не сохранялись. Peer .conf содержит PublicKey экспортирующего интерфейса и Endpoint экспортирующего устройства:51879; client Address/AllowedIPs остаются comment placeholders, активного default route нет. Это шаблон, готовность к импорту клиента не заявлена.
|
||||
|
||||
[Native/API evidence](ux-ui/acceptance/wg-export-native-2026-10-09.json), [browser evidence](ux-ui/acceptance/browser-wg-peer-export-c16fc0c-2026-10-09.json), [deploy/DB controls](ux-ui/acceptance/wg-export-deploy-controls-2026-10-09.json). Четыре настоящих browser сценария без HTTP mocks: оба CHR ×1280/320px. Local preview и live Peer export совпали по server endpoint/client placeholders; POST включает выбранный ROS peer ID и includePrivateKey=false. Нет page errors/API errors/page overflow. Export содержимое и ключи не попали в отчёты/скриншоты; UI download не выполнялся.
|
||||
|
||||
Fixture завершён exit0 и удалён. Проверенные WG interfaces/peers/IP/routes/IPv4 filter/nat/mangle совпали с baseline на обоих CHR. Очистка только собственных объектов; audit revisions намеренно сохранены. DB controls до/после совпали:servers2,speedHistory9,retentionDays14,migrations9. Дополнительно сохранён ранее полученный screenshot создания на CHR2 в12.5.64 с исходной датой2026-10-08. Product code в этом блоке не менялся после уже проверенного c16fc0c; общая регрессия не повторялась.
|
||||
|
||||
Следующий12.5.68 — import roundtrip собственного конфигурационного файла с независимой проверкой параметров и очисткой. Client-allowed-address/готовый client import, private-key export modes/UI download,throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и остальные протоколы/интеграции остаются открытыми. Локальный коммит без push.
|
||||
|
||||
## 12.5.66 — правильный client endpoint и явный шаблон Peer .conf (2026-10-08)
|
||||
|
||||
|
||||
+15
-1
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-08: 12.5.66 локально исправил Peer .conf: общий resolver использует client-endpoint или host/listenPort экспортирующего сервера; remote peer endpoint и server allowed-address не подставляются как клиентские значения. Недостающие Address/AllowedIPs/Endpoint явно отмечены шаблоном, UI поясняет ручное заполнение. Unit5/5, codec, export UI4/4, contracts/backend/frontend TypeScript и ESLint passed. Runtime backend3722fad/frontendbf43263 ещё прежний. Следующий12.5.67 — Docker build/deploy обеих частей с обновлённым contracts, реальный API/preview Peer .conf на собственной WG паре с очисткой; import после этого. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-09: 12.5.67 развернул backend/frontend c16fc0c и подтвердил исправленный Peer .conf на собственной WireGuard паре двух CHR. API export6/6 и browser preview/live4/4 на1280/320px passed; endpoint экспортирующего сервера, client placeholders и отсутствие private-key подтверждены. Handshake, Ping3/3 в обе стороны, cleanup/baseline и DB controls passed. Все три сервера доступны с прежними доступами. Следующий12.5.68 — безопасный import roundtrip собственного WG конфига с проверкой native параметров и очисткой. Этап12.5 открыт.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -1690,3 +1690,17 @@ Server allowed-address не обозначает клиентские маршр
|
||||
Проверки lib/wg-client-template.test.ts —5/5: endpoint exporting server/явный override/hostname/IPv6/неизвестные значения, одинаковые backend/frontend placeholders, отсутствие активного Address/AllowedIPs и default route без явных данных, сохранение явно заданных client параметров. Existing backend wireguard-config.test.ts passed; contracts build, backend TypeScript, scoped frontend TypeScript и ESLint всех изменённых файлов passed. Profile wireguard-links.spec.ts --grep экспорт —4/4: late response isolation/error, неправильный формат, выбор второго peer/ROS ID, его client-address/client-endpoint и отсутствие remote endpoint/server allowed-address в preview. Первый запуск старого теста ожидал ошибочно скопированные peer.allowedIps; fixture и assertions заменены на отличающиеся client metadata, защита выбора второго пира сохранена. ReUI checklist checked.
|
||||
|
||||
Исправление локальное: runtime backend3722fad/frontendbf43263 не менялся. Следующий12.5.67 — production Docker build/deploy backend и frontend с обновлённым contracts source, новая собственная WG пара, native/API export false redaction и правильный endpoint/шаблон, browser preview соответствие, cleanup/baseline. Поддержка client-allowed-address, настоящий client import/connectivity, import roundtrip/private-key modes, throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и другие протоколы/интеграции остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.67 — Docker deploy и реальный экспорт клиентского шаблона WireGuard (2026-10-09)
|
||||
|
||||
Обе production Docker сборки c16fc0c завершились успешно. Межслойный unit test перенесён из lib в tests/unit/wg-client-template.test.ts отдельным локальным коммитом c16fc0c: frontend Docker context не содержит backend source. Предварительный frontend staging c82e8fa не включал этот новый тест и не используется как доказательство чистой сборки исходного c82e8fa. Окончательные staging lib/backend src/contracts совпали с архивом c16fc0c; финальные образы обеих частей имеют OCI revision c16fc0c5b53ba8fcb6690ef6f0a695f59875f171. Network-none assertion backend образа проверил общий resolver и отсутствие активных клиентских Address/AllowedIPs без явных данных.
|
||||
|
||||
Перед обновлением сохранён приватный PG dump pre-c16fc0c.dump,2314923bytes,mode0600; pg_restore --list passed. Backend/frontend обновлены до1.0.0-test.c16fc0c, backend healthy, frontend /wireguard HTTP200. Образы: backend sha256:fb9f9279df07481d960f5799338e15a0fc9162a8baca3be7789a89f28a5f56dc, frontend sha256:bc70ee3203b4fd3f269ab6554493f0fb1ec2e60ef515ced2dcd6c6c7428064bc. Резервная .env хранится только на сервере. SSH161.104.46.222 и RouterOS REST194.226.121.150/104.165.244.7 доступны с прежними учётными данными; пароли не изменялись.
|
||||
|
||||
Создана собственная временная WG пара с адресами198.18.255.241/30 и198.18.255.242/30,port51879,MTU1420,уникальными name/comment. Native key generation/peer association проверены в памяти, handshake и Ping3/3 в обе стороны passed. Шесть настоящих API export запросов (rsc/conf/peer-conf на обоих устройствах) вернули200 с includePrivateKey=false. RSC/CONF параметры совпали с native; ключи и конфигурации не сохранялись. Peer .conf содержит PublicKey экспортирующего интерфейса и Endpoint экспортирующего устройства:51879; client Address/AllowedIPs остаются comment placeholders, активного default route нет. Это шаблон, готовность к импорту клиента не заявлена.
|
||||
|
||||
[Native/API evidence](ux-ui/acceptance/wg-export-native-2026-10-09.json), [browser evidence](ux-ui/acceptance/browser-wg-peer-export-c16fc0c-2026-10-09.json), [deploy/DB controls](ux-ui/acceptance/wg-export-deploy-controls-2026-10-09.json). Четыре настоящих browser сценария без HTTP mocks: оба CHR ×1280/320px. Local preview и live Peer export совпали по server endpoint/client placeholders; POST включает выбранный ROS peer ID и includePrivateKey=false. Нет page errors/API errors/page overflow. Export содержимое и ключи не попали в отчёты/скриншоты; UI download не выполнялся.
|
||||
|
||||
Fixture завершён exit0 и удалён. Проверенные WG interfaces/peers/IP/routes/IPv4 filter/nat/mangle совпали с baseline на обоих CHR. Очистка только собственных объектов; audit revisions намеренно сохранены. DB controls до/после совпали:servers2,speedHistory9,retentionDays14,migrations9. Дополнительно сохранён ранее полученный screenshot создания на CHR2 в12.5.64 с исходной датой2026-10-08. Product code в этом блоке не менялся после уже проверенного c16fc0c; общая регрессия не повторялась.
|
||||
|
||||
Следующий12.5.68 — import roundtrip собственного конфигурационного файла с независимой проверкой параметров и очисткой. Client-allowed-address/готовый client import, private-key export modes/UI download,throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и остальные протоколы/интеграции остаются открытыми. Локальный коммит без push.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-08
|
||||
# Тестовый сервер UX/UI — 2026-10-09
|
||||
|
||||
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source3722fad329a68a8721ebfda8e044ab6cb5830cca/version1.0.0-test.3722fad healthy; frontend sourcebf43263e43ae375651237e019fe1aae55e848308/version1.0.0-test.bf43263 обновлён в12.5.64.
|
||||
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Активные backend/frontend sourcec16fc0c5b53ba8fcb6690ef6f0a695f59875f171/version1.0.0-test.c16fc0c обновлены в12.5.67; backend healthy, frontend HTTP200. SSH и оба CHR доступны с прежними доступами.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -14,7 +14,7 @@
|
||||
| PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed |
|
||||
| Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data |
|
||||
| Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска |
|
||||
| Образы приложения | mmapp-test/backend:ux-bd3f996 и mmapp-test/frontend:ux-bd3f996;запущены |
|
||||
| Образы приложения | mmapp-test/backend:ux-c16fc0c и mmapp-test/frontend:ux-c16fc0c; запущены |
|
||||
|
||||
Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example).
|
||||
|
||||
@@ -533,3 +533,17 @@ Server allowed-address не обозначает клиентские маршр
|
||||
Проверки lib/wg-client-template.test.ts —5/5: endpoint exporting server/явный override/hostname/IPv6/неизвестные значения, одинаковые backend/frontend placeholders, отсутствие активного Address/AllowedIPs и default route без явных данных, сохранение явно заданных client параметров. Existing backend wireguard-config.test.ts passed; contracts build, backend TypeScript, scoped frontend TypeScript и ESLint всех изменённых файлов passed. Profile wireguard-links.spec.ts --grep экспорт —4/4: late response isolation/error, неправильный формат, выбор второго peer/ROS ID, его client-address/client-endpoint и отсутствие remote endpoint/server allowed-address в preview. Первый запуск старого теста ожидал ошибочно скопированные peer.allowedIps; fixture и assertions заменены на отличающиеся client metadata, защита выбора второго пира сохранена. ReUI checklist checked.
|
||||
|
||||
Исправление локальное: runtime backend3722fad/frontendbf43263 не менялся. Следующий12.5.67 — production Docker build/deploy backend и frontend с обновлённым contracts source, новая собственная WG пара, native/API export false redaction и правильный endpoint/шаблон, browser preview соответствие, cleanup/baseline. Поддержка client-allowed-address, настоящий client import/connectivity, import roundtrip/private-key modes, throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и другие протоколы/интеграции остаются открытыми. Пользовательское правило настоящих VPN объектов сохраняется. Локальный коммит без push.
|
||||
|
||||
## 12.5.67 — Docker deploy и реальный экспорт клиентского шаблона WireGuard (2026-10-09)
|
||||
|
||||
Обе production Docker сборки c16fc0c завершились успешно. Межслойный unit test перенесён из lib в tests/unit/wg-client-template.test.ts отдельным локальным коммитом c16fc0c: frontend Docker context не содержит backend source. Предварительный frontend staging c82e8fa не включал этот новый тест и не используется как доказательство чистой сборки исходного c82e8fa. Окончательные staging lib/backend src/contracts совпали с архивом c16fc0c; финальные образы обеих частей имеют OCI revision c16fc0c5b53ba8fcb6690ef6f0a695f59875f171. Network-none assertion backend образа проверил общий resolver и отсутствие активных клиентских Address/AllowedIPs без явных данных.
|
||||
|
||||
Перед обновлением сохранён приватный PG dump pre-c16fc0c.dump,2314923bytes,mode0600; pg_restore --list passed. Backend/frontend обновлены до1.0.0-test.c16fc0c, backend healthy, frontend /wireguard HTTP200. Образы: backend sha256:fb9f9279df07481d960f5799338e15a0fc9162a8baca3be7789a89f28a5f56dc, frontend sha256:bc70ee3203b4fd3f269ab6554493f0fb1ec2e60ef515ced2dcd6c6c7428064bc. Резервная .env хранится только на сервере. SSH161.104.46.222 и RouterOS REST194.226.121.150/104.165.244.7 доступны с прежними учётными данными; пароли не изменялись.
|
||||
|
||||
Создана собственная временная WG пара с адресами198.18.255.241/30 и198.18.255.242/30,port51879,MTU1420,уникальными name/comment. Native key generation/peer association проверены в памяти, handshake и Ping3/3 в обе стороны passed. Шесть настоящих API export запросов (rsc/conf/peer-conf на обоих устройствах) вернули200 с includePrivateKey=false. RSC/CONF параметры совпали с native; ключи и конфигурации не сохранялись. Peer .conf содержит PublicKey экспортирующего интерфейса и Endpoint экспортирующего устройства:51879; client Address/AllowedIPs остаются comment placeholders, активного default route нет. Это шаблон, готовность к импорту клиента не заявлена.
|
||||
|
||||
[Native/API evidence](ux-ui/acceptance/wg-export-native-2026-10-09.json), [browser evidence](ux-ui/acceptance/browser-wg-peer-export-c16fc0c-2026-10-09.json), [deploy/DB controls](ux-ui/acceptance/wg-export-deploy-controls-2026-10-09.json). Четыре настоящих browser сценария без HTTP mocks: оба CHR ×1280/320px. Local preview и live Peer export совпали по server endpoint/client placeholders; POST включает выбранный ROS peer ID и includePrivateKey=false. Нет page errors/API errors/page overflow. Export содержимое и ключи не попали в отчёты/скриншоты; UI download не выполнялся.
|
||||
|
||||
Fixture завершён exit0 и удалён. Проверенные WG interfaces/peers/IP/routes/IPv4 filter/nat/mangle совпали с baseline на обоих CHR. Очистка только собственных объектов; audit revisions намеренно сохранены. DB controls до/после совпали:servers2,speedHistory9,retentionDays14,migrations9. Дополнительно сохранён ранее полученный screenshot создания на CHR2 в12.5.64 с исходной датой2026-10-08. Product code в этом блоке не менялся после уже проверенного c16fc0c; общая регрессия не повторялась.
|
||||
|
||||
Следующий12.5.68 — import roundtrip собственного конфигурационного файла с независимой проверкой параметров и очисткой. Client-allowed-address/готовый client import, private-key export modes/UI download,throughput/IPv6/RBAC/внешние failures/multi-instance/Telegram/Portal и остальные протоколы/интеграции остаются открытыми. Локальный коммит без push.
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"date": "2026-10-09",
|
||||
"backendSource": "c16fc0c",
|
||||
"frontendSource": "c16fc0c",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"httpMocks": false,
|
||||
"cases": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"width": 1280,
|
||||
"localPreviewEndpointCorrect": true,
|
||||
"liveEndpointCorrect": true,
|
||||
"clientPlaceholders": true,
|
||||
"includePrivateKey": false,
|
||||
"selectedPeerConfirmed": true,
|
||||
"status": 200,
|
||||
"noPageOverflow": true
|
||||
},
|
||||
{
|
||||
"serverId": 1,
|
||||
"width": 320,
|
||||
"localPreviewEndpointCorrect": true,
|
||||
"liveEndpointCorrect": true,
|
||||
"clientPlaceholders": true,
|
||||
"includePrivateKey": false,
|
||||
"selectedPeerConfirmed": true,
|
||||
"status": 200,
|
||||
"noPageOverflow": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"width": 1280,
|
||||
"localPreviewEndpointCorrect": true,
|
||||
"liveEndpointCorrect": true,
|
||||
"clientPlaceholders": true,
|
||||
"includePrivateKey": false,
|
||||
"selectedPeerConfirmed": true,
|
||||
"status": 200,
|
||||
"noPageOverflow": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"width": 320,
|
||||
"localPreviewEndpointCorrect": true,
|
||||
"liveEndpointCorrect": true,
|
||||
"clientPlaceholders": true,
|
||||
"includePrivateKey": false,
|
||||
"selectedPeerConfirmed": true,
|
||||
"status": 200,
|
||||
"noPageOverflow": true
|
||||
}
|
||||
],
|
||||
"pageErrors": [],
|
||||
"badApi": [],
|
||||
"limits": [
|
||||
"No configuration or keys persisted",
|
||||
"Peer .conf remains a manual client template; no import or throughput tested"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"date": "2026-10-09",
|
||||
"revision": "c16fc0c5b53ba8fcb6690ef6f0a695f59875f171",
|
||||
"backendHealthy": true,
|
||||
"frontendHttpStatus": 200,
|
||||
"networkNoneAssertions": true,
|
||||
"backup": {
|
||||
"bytes": 2314923,
|
||||
"mode": "0600",
|
||||
"pgRestoreListPassed": true,
|
||||
"retainedOnTestServerOnly": true
|
||||
},
|
||||
"before": {
|
||||
"servers": 2,
|
||||
"speedHistory": 9,
|
||||
"retentionDays": 14,
|
||||
"migrations": 9
|
||||
},
|
||||
"after": {
|
||||
"servers": 2,
|
||||
"speedHistory": 9,
|
||||
"retentionDays": 14,
|
||||
"migrations": 9
|
||||
},
|
||||
"access": [
|
||||
{
|
||||
"host": "161.104.46.222",
|
||||
"protocol": "SSH",
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"host": "194.226.121.150",
|
||||
"protocol": "RouterOS REST",
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"host": "104.165.244.7",
|
||||
"protocol": "RouterOS REST",
|
||||
"available": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
{
|
||||
"date": "2026-10-09",
|
||||
"backendSource": "c16fc0c",
|
||||
"frontendSource": "c16fc0c",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"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/*E",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "PATCH",
|
||||
"path": "/api/wireguard/interfaces/1/*E",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wireguard",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wireguard/export",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/wireguard/peers/1/*A",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/wireguard/interfaces/1/*E",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/wireguard/peers/2/*7",
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"method": "DELETE",
|
||||
"path": "/api/wireguard/interfaces/2/*A",
|
||||
"status": 200
|
||||
}
|
||||
],
|
||||
"pings": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"target": "198.18.255.242",
|
||||
"interface": "mm-acceptance-wg-1791508569068",
|
||||
"received": 3,
|
||||
"rows": [
|
||||
{
|
||||
"sent": "1",
|
||||
"received": "1",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms498us",
|
||||
"avg-rtt": "54ms498us"
|
||||
},
|
||||
{
|
||||
"sent": "2",
|
||||
"received": "2",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms500us",
|
||||
"avg-rtt": "54ms499us"
|
||||
},
|
||||
{
|
||||
"sent": "3",
|
||||
"received": "3",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms546us",
|
||||
"avg-rtt": "54ms514us"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"target": "198.18.255.241",
|
||||
"interface": "mm-acceptance-wg-1791508569068",
|
||||
"received": 3,
|
||||
"rows": [
|
||||
{
|
||||
"sent": "1",
|
||||
"received": "1",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms503us",
|
||||
"avg-rtt": "54ms503us"
|
||||
},
|
||||
{
|
||||
"sent": "2",
|
||||
"received": "2",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms689us",
|
||||
"avg-rtt": "54ms596us"
|
||||
},
|
||||
{
|
||||
"sent": "3",
|
||||
"received": "3",
|
||||
"packet-loss": "0",
|
||||
"time": "54ms570us",
|
||||
"avg-rtt": "54ms587us"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"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": "*E",
|
||||
"appId": "1:*E",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"listenPort": "51879",
|
||||
"mtu": "1420",
|
||||
"running": "true",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.241/30"
|
||||
],
|
||||
"peers": [
|
||||
{
|
||||
"rosId": "*A",
|
||||
"name": "mm-acceptance-wg-1791508569068-peer",
|
||||
"allowedAddresses": "198.18.255.242/32",
|
||||
"endpoint": "104.165.244.7:51879",
|
||||
"handshake": "0s",
|
||||
"rx": "180",
|
||||
"tx": "272",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"interface": {
|
||||
"rosId": "*A",
|
||||
"appId": "2:*A",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"listenPort": "51879",
|
||||
"mtu": "1420",
|
||||
"running": "true",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.242/30"
|
||||
],
|
||||
"peers": [
|
||||
{
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-wg-1791508569068-peer",
|
||||
"allowedAddresses": "198.18.255.241/32",
|
||||
"endpoint": "194.226.121.150:51879",
|
||||
"handshake": "0s",
|
||||
"rx": "124",
|
||||
"tx": "180",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"handshakeConfirmed": true,
|
||||
"bidirectionalPingPassed": true,
|
||||
"catalogMatchesNative": true,
|
||||
"exports": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"format": "rsc",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
},
|
||||
{
|
||||
"serverId": 1,
|
||||
"format": "conf",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
},
|
||||
{
|
||||
"serverId": 1,
|
||||
"format": "peer-conf",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"format": "rsc",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"format": "conf",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"format": "peer-conf",
|
||||
"status": 200,
|
||||
"privateKeyAbsent": true,
|
||||
"selectedParametersMatch": true,
|
||||
"configurationNotPersisted": true
|
||||
}
|
||||
],
|
||||
"peerClientDefaults": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"endpointIsExportingServer": true,
|
||||
"clientAddressPlaceholder": true,
|
||||
"clientRoutesPlaceholder": true,
|
||||
"noImplicitDefaultRoute": true,
|
||||
"readyForClientImport": false
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"endpointIsExportingServer": true,
|
||||
"clientAddressPlaceholder": true,
|
||||
"clientRoutesPlaceholder": true,
|
||||
"noImplicitDefaultRoute": true,
|
||||
"readyForClientImport": false
|
||||
}
|
||||
],
|
||||
"afterBrowser": [
|
||||
{
|
||||
"serverId": 1,
|
||||
"interface": {
|
||||
"rosId": "*E",
|
||||
"appId": "1:*E",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"listenPort": "51879",
|
||||
"mtu": "1420",
|
||||
"running": "true",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.241/30"
|
||||
],
|
||||
"peers": [
|
||||
{
|
||||
"rosId": "*A",
|
||||
"name": "mm-acceptance-wg-1791508569068-peer",
|
||||
"allowedAddresses": "198.18.255.242/32",
|
||||
"endpoint": "104.165.244.7:51879",
|
||||
"handshake": "1m5s",
|
||||
"rx": "1140",
|
||||
"tx": "848",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"serverId": 2,
|
||||
"interface": {
|
||||
"rosId": "*A",
|
||||
"appId": "2:*A",
|
||||
"name": "mm-acceptance-wg-1791508569068",
|
||||
"listenPort": "51879",
|
||||
"mtu": "1420",
|
||||
"running": "true",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
},
|
||||
"addresses": [
|
||||
"198.18.255.242/30"
|
||||
],
|
||||
"peers": [
|
||||
{
|
||||
"rosId": "*7",
|
||||
"name": "mm-acceptance-wg-1791508569068-peer",
|
||||
"allowedAddresses": "198.18.255.241/32",
|
||||
"endpoint": "194.226.121.150:51879",
|
||||
"handshake": "1m5s",
|
||||
"rx": "700",
|
||||
"tx": "1140",
|
||||
"disabled": "false",
|
||||
"userComment": "Temporary UX acceptance mm-acceptance-wg-1791508569068"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"limits": [
|
||||
"Only own WireGuard interface/peer/IP and connected route changed; no default routes/firewall changes",
|
||||
"Export verification is read-only; fixture interfaces and linked objects removed by harness",
|
||||
"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"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
Reference in new issue
Block a user