diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index c4017e38..f60cb0af 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-08: backend8782054/frontendf194e72, backend healthy. 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: backend8782054/frontendb55588f, backend healthy. 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). ## Паспорт стенда @@ -263,3 +263,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index b6976313..df5585e9 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,14 +1,14 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-08 -Этапы0–11 завершены в описанных локальных границах. Этап12 остаётся открытым. На161.104.46.222 развёрнуты backend/frontend8782054; два CHR подключены. PG backup/restore/rollback, single-instance quiescence, JWT/RBAC и browser restore приняты в границах журнала. PG-8 проверен с настоящими PG/native и введённой после COMMIT ошибкой подтверждения; новый browser UI сохраняет snapshot и сверяет историю. ROS-8/9 API/SQL/native приняты в описанных границах. Browser-смена пары/длительности и удаление во время native-теста приняты в12.5.24. Реальный отказ bandwidth-аутентификации принят в12.5.25. 12.5.26 обнаружил и локально исправил30s timeout Next proxy. Исправленный frontendaa7dbdf развёрнут и проверен в12.5.27; backend8782054 прежний. ROS-3 reverse2→1/native-afterping принят в12.5.28; forward timeout открыт. Форма frontendf194e72 проверена без моков и развёрнута в12.5.29. Read-only диагностика12.5.30 не установила причину. 12.5.31 выявил текущий отказ авторизацииCHR2 вCLI/REST/SSH. В12.5.32 пользователь восстановил доступCHR2; dashboard/native1→2 passed, блокировка снята. TCP receive/both подтверждены после восстановлениядоступа в12.5.33; UDP transmit3s/API/history/UI подтверждены в12.5.34; Q-6productionenqueue/PG race принят в12.5.35; Q-4 realHTTP/PG race принят в12.5.36; Q-1productionclaim/PG/interceptedsender принят в12.5.37; 12.5.38 подтвердил SQL settlement rollback и сохранение sent после ошибки подтверждения COMMIT; 12.5.39 подтвердил unknown/processing без автоматического повтора при неопределённом ответе; 12.5.40 подтвердил задержку повтора и failed после исчерпания попыток при явном отказе; 12.5.41 подтвердил браузерные состояния очереди на HTTP/PG; 12.5.42 подтвердил production JWT/RBAC очереди на PostgreSQL; 12.5.43 подтвердил браузерный retry и checkpoint при потере HTTP receipt; 12.5.44 добавил ясное пояснение в диалоге, проверено локально; следующий 12.5.45 — production frontend build/deploy и реальная HTTP/PG проверка. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) сохраняют точные доказательства и ограничения. +Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend8782054/frontendb55588f и два 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 — браузерные права очереди с настоящими JWT. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения. -Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). +Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md). ## Цель и обязательные требования diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index ccc54a1e..032143dc 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -32,7 +32,17 @@ | 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–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–45 и ограничения ниже. Runtime backend8782054/frontendb55588f. | + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. ## 12.5.44 — понятное пояснение неподтверждённого повтора в диалоге (2026-10-08) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 07fb5fc6..2ad6b568 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1428,3 +1428,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 6eedd9ce..9dd586e7 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-08 -Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source8782054078304f36cc611876af2d17f87b857f60/version1.0.0-test.8782054 healthy. Frontend sourcef194e7269b1e0276f257b3fda28413958907a503/version1.0.0-test.f194e72 обновлён в12.5.29. +Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source8782054078304f36cc611876af2d17f87b857f60/version1.0.0-test.8782054 healthy. Frontend sourceb55588f29be0de02639bc795801e55b89f03aad7/version1.0.0-test.b55588f обновлён в12.5.45. | Параметр | Проверенное состояние | | --- | --- | @@ -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-8782054 и mmapp-test/frontend:ux-f194e72;запущены | +| Образы приложения | mmapp-test/backend:ux-8782054 и mmapp-test/frontend:ux-b55588f;запущены | Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). @@ -47,7 +47,7 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 [Первый 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: +Image IDs при первом smoke12.5.3 (исторический снимок): - backend: sha256:57878e320b7272edcc6efe1f6f5c140295510c85cb79b8ca12a900f7654cd917 - frontend: sha256:bfba2785b33a72965a029a3692178ba69c80eca75a12934c1dcc04c7970db53f @@ -271,3 +271,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json new file mode 100644 index 00000000..0874c0f5 --- /dev/null +++ b/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json @@ -0,0 +1,60 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054", + "frontendSource": "b55588f", + "database": "mmapp_acceptance_20261007", + "browserHttpMocks": false, + "sqlFixture": true, + "posts": [ + { + "status": 200, + "body": { + "expectedVersion": 0, + "acknowledgedDuplicateRisk": true + } + }, + { + "status": 500, + "body": { + "expectedVersion": 0, + "acknowledgedDuplicateRisk": true + } + } + ], + "confirmedQueueCaptionDoesNotClaimDelivery": true, + "unconfirmedReceipt": { + "httpStatus": 500, + "actualCommittedRows": [ + { + "id": "acceptance-browser-retry-1791445074699-confirmed", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + }, + { + "id": "acceptance-browser-retry-1791445074699-unconfirmed", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + } + ], + "dialogPreserved": true, + "riskCheckboxPreserved": true, + "retryDisabled": true, + "checkpointSurvivesRefreshAndReload": true, + "explicitReviewClearsCheckpointWithoutPost": true, + "unknownOutcomeExplainedInsideDialog": true + }, + "historyRows": 0, + "externalSenderCalls": 0, + "retryPosts": 2, + "lostReceipts": 1, + "mobileFits": true, + "mobileDialogFits": true, + "pageErrors": [], + "limits": [ + "Synthetic queue rows; scheduler stopped; no real Telegram send or chat check", + "Backend wrapper throws after actual retry transaction committed: real HTTP500, not physical network disconnect", + "Auth false on isolated loopback stand; Portal SSO not tested" + ] +} diff --git a/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json new file mode 100644 index 00000000..20f8f295 --- /dev/null +++ b/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json @@ -0,0 +1,40 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054078304f36cc611876af2d17f87b857f60", + "frontendSource": "b55588f29be0de02639bc795801e55b89f03aad7", + "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": [] +} diff --git a/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json new file mode 100644 index 00000000..a4802351 --- /dev/null +++ b/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json @@ -0,0 +1,48 @@ +{ + "date": "2026-10-08", + "frontendSource": "b55588f29be0de02639bc795801e55b89f03aad7", + "backendSource": "8782054078304f36cc611876af2d17f87b857f60", + "frontendImage": "mmapp-test/frontend:ux-b55588f", + "frontendImageId": "sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1", + "backendImageId": "sha256:7862c9b40a934914110da58a814d3b4770e923016b87f36f9252f8050961e79a", + "backendHealthy": true, + "health": { + "status": "ok", + "timestamp": "2026-10-08T07:39:25.082Z", + "version": "1.0.0-test.8782054", + "eventLoopDelayMs": 20, + "flowWorker": { + "alive": false, + "bound": false, + "pendingSize": 0, + "dropped": 0, + "packetsReceived": 0 + } + }, + "controlBefore": { + "servers": 2, + "enabledServers": 2, + "speedHistory": 9, + "retentionDays": 14, + "migrations": 9 + }, + "controlAfter": { + "servers": 2, + "enabledServers": 2, + "speedHistory": 9, + "retentionDays": 14, + "migrations": 9 + }, + "controlsUnchanged": true, + "frontendPorts": { + "3000/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3000" + } + ] + }, + "buildExit": 0, + "sourceArchiveSha256": "f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e", + "push": false +} \ No newline at end of file diff --git a/docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png new file mode 100644 index 00000000..520c0f8b Binary files /dev/null and b/docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png differ diff --git a/docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png new file mode 100644 index 00000000..27d107e4 Binary files /dev/null and b/docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png differ