diff --git a/deploy/env.test.example b/deploy/env.test.example index 92167009..c7ae6ec0 100644 --- a/deploy/env.test.example +++ b/deploy/env.test.example @@ -2,7 +2,7 @@ # Generate unique hex secrets on that server; never reuse production credentials. POSTGRES_PASSWORD= AUTH_JWT_SECRET= -MMAPP_IMAGE_TAG=ux-6255f44 +MMAPP_IMAGE_TAG=ux-673e5ba AUTH_REQUIRED=false AUTH_ISSUER=https://auth.test.local AUTH_PORTAL_URL=http://localhost:5175 diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 3120b095..66c004b2 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Статус на 2026-10-07: подготовлен по исходникам; на реальном стенде не выполнен. Локальные браузерные и DI-проверки записаны в [журнале](ux-ui-progress.md), общий объём — в [плане](ux-ui-plan.md). Результат каждого внешнего сценария заполняется после выполнения, с указанием HEAD и стенда. +Статус на 2026-10-07:стенд161.104.46.222 развёрнут;PG-1 проверенbootstrap/restart/schema/control-row,приложение прошлоreal smoke. ОстальныеPG/Q/ROS/интеграционные сценарии ещё не выполнены. [Паспорт и evidence](ux-ui-test-server.md). Локальные браузерные и DI-проверки записаны в [журнале](ux-ui-progress.md), общий объём — в [плане](ux-ui-plan.md). Результат каждого внешнего сценария заполняется после выполнения, с указанием HEAD и стенда. ## Паспорт стенда diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index acbda83e..fe97321e 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-07. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-07 -Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: стенд12.5.1 подготовлен на161.104.46.222;следующий12.5.2 — сборка и bootstrap/smoke,затем внешние сценарии. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md). +Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: стенд12.5.1–3 развёрнут на161.104.46.222,bootstrap/restart/smoke проверены;следующий12.5.4 — PG backup/restore/concurrency/права/workers,затемRouterOS/интеграции. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md). Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index c6ff696a..98f44236 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -32,11 +32,15 @@ | 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,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1 подготовлен,bootstrap/сценарии12.5 не выполнены. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | ## 12.5.3 — нормализация даты Internet path на границе API (2026-10-07) -Выявленный live-smoke дефект исправлен в mapper/GET latest: внешний PostgreSQL sampledAt преобразуется вISO без смены instant;payload не изменяется. Неверная дата/payload отклоняются502. Строгийfrontend DTO не ослаблен. Pure collector/mapper tests прошли,включаяPostgreSQL+07/ISO/invalid/null/blank,contracts/backend build passed. На сервере пока работает прежний образ;блок в работе до пересборки и live проверки. +Выявленный на реальном Docker/PG дефект исправлен mapper/GET latest: внешний PostgreSQL sampledAt преобразован вISO без смены instant;payload не изменён. Неверные дата/payload возвращают502. Строгийfrontend DTO сохранён. Pure collector/mapper tests и6frontend path contract tests прошли,contracts/backend build passed. Сетевые команды/правила не менялись. + +Source673e5ba444ced304ea099a99108964e1c471482f:backend/frontend пересобраны с version1.0.0-test.673e5ba и revision labels;образыux-673e5ba запущены,backend/PG healthy. APIlatest отдаёт одинаковыеISO датыsnapshot/outer;записьPG и контрольные настройки/9миграций сохранились. [Итоговый real browser smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54APIreads200,0JSerrors,320px fits,Internet path подтверждён,HTTP-моков нет. Первое повторное ожидание скрытой подписи свежести поправлено раскрытием штатного блока;проверка данных послеpatch прошла. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +[Паспорт стенда](ux-ui-test-server.md) содержит image IDs,версии,доступ и ограничения. SSH-туннельlocalhost3000/8000 открыт;приложение работаетнаloopback тестового сервера. Следующий12.5.4 — PG backup/restore/concurrency/права и остановка writers/workers по протоколу. NativeRouterOS/Telegram/Portal не проверены,вся12.5 не закрыта. Предыдущие общиеmain/context относятся к своимHEAD,не к этомуbackend patch. Локальные коммиты безpush;секреты/чужие изменения не включены. ## 12.5.2 — сборка Docker и запуск приложения на тестовом сервере (2026-10-07) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 92a263b9..483d40b9 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -971,4 +971,8 @@ Smoke обнаружил ошибку Internet path приHTTP200: внешни ## 12.5.3 — нормализация даты Internet path на границе API (2026-10-07) -Выявленный live-smoke дефект исправлен в mapper/GET latest: внешний PostgreSQL sampledAt преобразуется вISO без смены instant;payload не изменяется. Неверная дата/payload отклоняются502. Строгийfrontend DTO не ослаблен. Pure collector/mapper tests прошли,включаяPostgreSQL+07/ISO/invalid/null/blank,contracts/backend build passed. На сервере пока работает прежний образ;блок в работе до пересборки и live проверки. +Выявленный на реальном Docker/PG дефект исправлен mapper/GET latest: внешний PostgreSQL sampledAt преобразован вISO без смены instant;payload не изменён. Неверные дата/payload возвращают502. Строгийfrontend DTO сохранён. Pure collector/mapper tests и6frontend path contract tests прошли,contracts/backend build passed. Сетевые команды/правила не менялись. + +Source673e5ba444ced304ea099a99108964e1c471482f:backend/frontend пересобраны с version1.0.0-test.673e5ba и revision labels;образыux-673e5ba запущены,backend/PG healthy. APIlatest отдаёт одинаковыеISO датыsnapshot/outer;записьPG и контрольные настройки/9миграций сохранились. [Итоговый real browser smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54APIreads200,0JSerrors,320px fits,Internet path подтверждён,HTTP-моков нет. Первое повторное ожидание скрытой подписи свежести поправлено раскрытием штатного блока;проверка данных послеpatch прошла. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +[Паспорт стенда](ux-ui-test-server.md) содержит image IDs,версии,доступ и ограничения. SSH-туннельlocalhost3000/8000 открыт;приложение работаетнаloopback тестового сервера. Следующий12.5.4 — PG backup/restore/concurrency/права и остановка writers/workers по протоколу. NativeRouterOS/Telegram/Portal не проверены,вся12.5 не закрыта. Предыдущие общиеmain/context относятся к своимHEAD,не к этомуbackend patch. Локальные коммиты безpush;секреты/чужие изменения не включены. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 945a7ca7..a13370cf 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-07 -Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение ещё не собрано и не запущено. +Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный source HEAD673e5ba444ced304ea099a99108964e1c471482f;версия1.0.0-test.673e5ba. | Параметр | Проверенное состояние | | --- | --- | @@ -14,13 +14,13 @@ | 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-6255f44 и mmapp-test/frontend:ux-6255f44;ещё не созданы | +| Образы приложения | mmapp-test/backend:ux-673e5ba и mmapp-test/frontend:ux-673e5ba;запущены | Compose SHA256:99900547ed18b62e2cdcf9aae3975cbd6c3598a699a79dc04a4b7a0fec295348. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). ## Развёртывание приложения -Следующий блок: подготовить чистые frontend/backend build contexts по .gitea/workflows/docker.yml для проверенного runtime и собрать закреплённые образы без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next. +Чистые frontend/backend build contexts подготовлены по .gitea/workflows/docker.yml из закреплённого Git HEAD;образы собраны на сервере без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next. После сборки/загрузки образов выполнить на сервере: @@ -43,4 +43,15 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 ## Границы результата -Это подготовка инфраструктуры12.5.1, не закрытие PostgreSQL PG-1: bootstrap/migrations ещё не выполнялись backend. Backup/restore,отказы транзакций,concurrency,workers,RouterOS,Telegram и остальные сценарии [12.5](ux-ui-external-acceptance.md) не выполнены. Для сети потребуются отдельные тестовые устройства/CHR; для интеграций — тестовые учётные записи. 1CPU/2GiB не представляют production performance. +Выполнены подготовка12.5.1,сборка/запуск12.5.2 и исправление обнаруженной live ошибки12.5.3. На реальном PG применились9миграций0000–0009 (без0001),проверены0008/0009 и CHECK статусов/resolution_version;restart сохранил контрольную настройкуuptime_settings(id1/retention14) и список миграций. Пустые API каталоги прочитаны успешно. Это PG-1 в границе bootstrap/restart/schema/control-row,не проверка backup/restore или транзакционных отказов. + +[Первый smoke](ux-ui/acceptance/test-server-smoke-2026-10-07.json) обнаружил PostgreSQL timestamp в outer sampledAt Internet path. Исправлено producer ISO преобразование,без ослабленияfrontend. [Итоговый smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54чтенияAPI200,безJSerrors,320px fits,Internet path подтверждён. HTTP-моков нет. Первое повторное ожидание подписи свежести исправлено раскрытием штатного блока;ошибка данных послеpatch отсутствует. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +Активные image IDs: + +- backend: sha256:cfc25f3aa30ea39236af7eb60b4bbcdd7ae3ccc0663f5aff710a5f21776a9af2 +- frontend: sha256:bfba2785b33a72965a029a3692178ba69c80eca75a12934c1dcc04c7970db53f + +После пересборки контрольныйid1/retention14 и9миграций сохранились. Подробные build logs и контрольные файлы расположены в /opt/mmapp-test/artifacts. Секреты остаются только в серверном.env0600. Временный SSH-туннель3000/8000 открыт в этой задаче;если процесс остановится,повторить команду выше. + +Следующий12.5.4 — PG backup/restore/concurrency/права и наблюдаемая остановка workers по [протоколу12.5](ux-ui-external-acceptance.md). Эти сценарии ещё не выполнены. Для RouterOS/Telegram/Portal и других интеграций нужны тестовые устройства/учётные записи. 1CPU/2GiB не представляют production performance. diff --git a/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json b/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json new file mode 100644 index 00000000..5b58ab78 --- /dev/null +++ b/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json @@ -0,0 +1,262 @@ +{ + "sourceHead": "673e5ba444ced304ea099a99108964e1c471482f", + "server": "161.104.46.222", + "url": "http://localhost:3000 via SSH", + "mockedResponses": false, + "results": [ + { + "route": "/dashboard", + "status": 200, + "mainVisible": true, + "internetPathConfirmed": true + }, + { + "route": "/uptime?tab=speed", + "status": 200, + "mainVisible": true + }, + { + "route": "/servers", + "status": 200, + "mainVisible": true + } + ], + "mobileFits": true, + "health": { + "status": "ok", + "timestamp": "2026-10-07T14:37:04.115Z", + "version": "1.0.0-test.673e5ba", + "eventLoopDelayMs": 20, + "flowWorker": { + "alive": false, + "bound": false, + "pendingSize": 0, + "dropped": 0, + "packetsReceived": 0 + } + }, + "pathMetadata": { + "sampledAt": "2026-10-07T14:32:24.630Z", + "snapshotSampledAt": "2026-10-07T14:32:24.630Z", + "collectionComplete": true + }, + "pageErrors": [], + "apiReads": [ + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/events", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/filters/rules", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/bgp/catalog", + "status": 200 + }, + { + "path": "/api/internet-path/latest", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/wireguard", + "status": 200 + }, + { + "path": "/api/traffic/servers", + "status": 200 + }, + { + "path": "/api/vxlan", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/uptime/speed-probes", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/uptime/speed-test/runs", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/events", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/filters/rules", + "status": 200 + }, + { + "path": "/api/bgp/catalog", + "status": 200 + }, + { + "path": "/api/internet-path/latest", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/wireguard", + "status": 200 + }, + { + "path": "/api/traffic/servers", + "status": 200 + }, + { + "path": "/api/vxlan", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + } + ] +} diff --git a/docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png b/docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png new file mode 100644 index 00000000..71b5433f Binary files /dev/null and b/docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png differ