diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index f60cb0af..c894ea70 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -273,3 +273,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed [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.46 — браузерные права очереди с подписанными JWT (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json): production frontendb55588f/backend8782054, отдельная PostgreSQL БД mmapp_acceptance_20261007. AUTH_REQUIRED=true только в тестовом процессе, отдельные синтетические HS256 key/issuer, два браузерных контекста read/write. Штатный backend проверяет подпись и разрешения; browser HTTP-ответы не подменялись. Основные настройки авторизации и ключи не изменялись, реальный Portal не вызывался. + +Reader получает очередь и видит disabled retry. Прямой POST через browser fetch с reader JWT даёт403, SQL snapshot не меняется, mutation boundary не вызывается. JWT с теми же write claims, но неверной подписью, получает401 через настоящий HTTP API; строка и счётчик mutation сохраняются. Writer видит доступную кнопку, обязательное подтверждение риска, после него POST200 переводит fixture unknown/version0 в pending/version1/retry_count0. UI подтверждает только постановку в очередь; API принял0, история0. Reader после reload видит подтверждённое состояние. + +Всего retry HTTP requests3 (403/401/200), mutation calls1, external sender calls0, JS errors0;320px fit. [Читатель](ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png) и [после разрешённого повтора](ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png) сохранены; экран читателя просмотрен. Тестовая запись синтетическая; scheduler admission закрыт, dispatcher не запускался, Telegram fetch дополнительно запрещён. Writer и reader имеют также необходимые read-права окружающей оболочки, но только writer имеет alerts:write. + +Тестовые контейнеры/сеть/туннель3018 удалены; backend завершился exitCode0, cleanup подтвердил1mutation/3POST/0send, независимый SQL — ноль fixture-строк. Основной стенд/БД/RouterOS не менялись. Это подтверждение browser и API RBAC, не реального Portal login или Telegram доставки. Следующий12.5.47 — checkpoint и смена источника при незавершённом повторе. Локальный коммит без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index df5585e9..f1cb62c4 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 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 и другие внешние ограничения остаются открытыми. +Актуальное продолжение 2026-10-08: 12.5.46 подтвердил browser JWT/RBAC очереди на настоящих HTTP/PG: reader disabled и bypass403, неверная подпись401, write200/pending/version1 после подтверждения риска. Отказы не меняют БД и не вызывают retry boundary. JS errors0, Telegram calls0; fixture/контейнеры/сеть/туннель очищены. Runtime backend8782054/frontendb55588f прежний. Следующий12.5.47 — изоляция checkpoint при смене источника во время повтора; реальный Portal и доставка Telegram открыты. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-08 -Этапы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) содержат доказательства и ограничения. +Этапы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 подтвердил browser JWT/RBAC очереди на реальном HTTP/PG; следующий12.5.47 — изоляция checkpoint при смене источника во время повтора. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения. Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 032143dc..018fae27 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 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 и другие внешние ограничения остаются открытыми. +Актуальное продолжение 2026-10-08: 12.5.46 подтвердил browser JWT/RBAC очереди на настоящих HTTP/PG: reader disabled и bypass403, неверная подпись401, write200/pending/version1 после подтверждения риска. Отказы не меняют БД и не вызывают retry boundary. JS errors0, Telegram calls0; fixture/контейнеры/сеть/туннель очищены. Runtime backend8782054/frontendb55588f прежний. Следующий12.5.47 — изоляция checkpoint при смене источника во время повтора; реальный Portal и доставка Telegram открыты. Общий план: [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; внешняя12.5 в работе, выполненные блоки1–45 и ограничения ниже. Runtime backend8782054/frontendb55588f. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–46 и ограничения ниже. Runtime backend8782054/frontendb55588f. | + +## 12.5.46 — браузерные права очереди с подписанными JWT (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json): production frontendb55588f/backend8782054, отдельная PostgreSQL БД mmapp_acceptance_20261007. AUTH_REQUIRED=true только в тестовом процессе, отдельные синтетические HS256 key/issuer, два браузерных контекста read/write. Штатный backend проверяет подпись и разрешения; browser HTTP-ответы не подменялись. Основные настройки авторизации и ключи не изменялись, реальный Portal не вызывался. + +Reader получает очередь и видит disabled retry. Прямой POST через browser fetch с reader JWT даёт403, SQL snapshot не меняется, mutation boundary не вызывается. JWT с теми же write claims, но неверной подписью, получает401 через настоящий HTTP API; строка и счётчик mutation сохраняются. Writer видит доступную кнопку, обязательное подтверждение риска, после него POST200 переводит fixture unknown/version0 в pending/version1/retry_count0. UI подтверждает только постановку в очередь; API принял0, история0. Reader после reload видит подтверждённое состояние. + +Всего retry HTTP requests3 (403/401/200), mutation calls1, external sender calls0, JS errors0;320px fit. [Читатель](ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png) и [после разрешённого повтора](ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png) сохранены; экран читателя просмотрен. Тестовая запись синтетическая; scheduler admission закрыт, dispatcher не запускался, Telegram fetch дополнительно запрещён. Writer и reader имеют также необходимые read-права окружающей оболочки, но только writer имеет alerts:write. + +Тестовые контейнеры/сеть/туннель3018 удалены; backend завершился exitCode0, cleanup подтвердил1mutation/3POST/0send, независимый SQL — ноль fixture-строк. Основной стенд/БД/RouterOS не менялись. Это подтверждение browser и API RBAC, не реального Portal login или Telegram доставки. Следующий12.5.47 — checkpoint и смена источника при незавершённом повторе. Локальный коммит без push. ## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 2ad6b568..fbba15e6 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.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 и другие внешние ограничения остаются открытыми. +Актуальное продолжение 2026-10-08: 12.5.46 подтвердил browser JWT/RBAC очереди на настоящих HTTP/PG: reader disabled и bypass403, неверная подпись401, write200/pending/version1 после подтверждения риска. Отказы не меняют БД и не вызывают retry boundary. JS errors0, Telegram calls0; fixture/контейнеры/сеть/туннель очищены. Runtime backend8782054/frontendb55588f прежний. Следующий12.5.47 — изоляция checkpoint при смене источника во время повтора; реальный Portal и доставка Telegram открыты. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1438,3 +1438,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed [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.46 — браузерные права очереди с подписанными JWT (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json): production frontendb55588f/backend8782054, отдельная PostgreSQL БД mmapp_acceptance_20261007. AUTH_REQUIRED=true только в тестовом процессе, отдельные синтетические HS256 key/issuer, два браузерных контекста read/write. Штатный backend проверяет подпись и разрешения; browser HTTP-ответы не подменялись. Основные настройки авторизации и ключи не изменялись, реальный Portal не вызывался. + +Reader получает очередь и видит disabled retry. Прямой POST через browser fetch с reader JWT даёт403, SQL snapshot не меняется, mutation boundary не вызывается. JWT с теми же write claims, но неверной подписью, получает401 через настоящий HTTP API; строка и счётчик mutation сохраняются. Writer видит доступную кнопку, обязательное подтверждение риска, после него POST200 переводит fixture unknown/version0 в pending/version1/retry_count0. UI подтверждает только постановку в очередь; API принял0, история0. Reader после reload видит подтверждённое состояние. + +Всего retry HTTP requests3 (403/401/200), mutation calls1, external sender calls0, JS errors0;320px fit. [Читатель](ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png) и [после разрешённого повтора](ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png) сохранены; экран читателя просмотрен. Тестовая запись синтетическая; scheduler admission закрыт, dispatcher не запускался, Telegram fetch дополнительно запрещён. Writer и reader имеют также необходимые read-права окружающей оболочки, но только writer имеет alerts:write. + +Тестовые контейнеры/сеть/туннель3018 удалены; backend завершился exitCode0, cleanup подтвердил1mutation/3POST/0send, независимый SQL — ноль fixture-строк. Основной стенд/БД/RouterOS не менялись. Это подтверждение browser и API RBAC, не реального Portal login или Telegram доставки. Следующий12.5.47 — checkpoint и смена источника при незавершённом повторе. Локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 9dd586e7..a5db030a 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -281,3 +281,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed [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.46 — браузерные права очереди с подписанными JWT (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json): production frontendb55588f/backend8782054, отдельная PostgreSQL БД mmapp_acceptance_20261007. AUTH_REQUIRED=true только в тестовом процессе, отдельные синтетические HS256 key/issuer, два браузерных контекста read/write. Штатный backend проверяет подпись и разрешения; browser HTTP-ответы не подменялись. Основные настройки авторизации и ключи не изменялись, реальный Portal не вызывался. + +Reader получает очередь и видит disabled retry. Прямой POST через browser fetch с reader JWT даёт403, SQL snapshot не меняется, mutation boundary не вызывается. JWT с теми же write claims, но неверной подписью, получает401 через настоящий HTTP API; строка и счётчик mutation сохраняются. Writer видит доступную кнопку, обязательное подтверждение риска, после него POST200 переводит fixture unknown/version0 в pending/version1/retry_count0. UI подтверждает только постановку в очередь; API принял0, история0. Reader после reload видит подтверждённое состояние. + +Всего retry HTTP requests3 (403/401/200), mutation calls1, external sender calls0, JS errors0;320px fit. [Читатель](ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png) и [после разрешённого повтора](ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png) сохранены; экран читателя просмотрен. Тестовая запись синтетическая; scheduler admission закрыт, dispatcher не запускался, Telegram fetch дополнительно запрещён. Writer и reader имеют также необходимые read-права окружающей оболочки, но только writer имеет alerts:write. + +Тестовые контейнеры/сеть/туннель3018 удалены; backend завершился exitCode0, cleanup подтвердил1mutation/3POST/0send, независимый SQL — ноль fixture-строк. Основной стенд/БД/RouterOS не менялись. Это подтверждение browser и API RBAC, не реального Portal login или Telegram доставки. Следующий12.5.47 — checkpoint и смена источника при незавершённом повторе. Локальный коммит без push. diff --git a/docs/ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json b/docs/ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json new file mode 100644 index 00000000..86c94377 --- /dev/null +++ b/docs/ux-ui/acceptance/browser-outbox-jwt-2026-10-08.json @@ -0,0 +1,45 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054", + "frontendSource": "b55588f", + "database": "mmapp_acceptance_20261007", + "authRequired": true, + "browserHttpMocks": false, + "realSignedJwt": true, + "reader": { + "retryButtonDisabled": true, + "bypassHttpStatus": 403, + "sqlUnchanged": true, + "mutationCalls": 0, + "reloadSeesCommittedQueue": true + }, + "forgedSignature": { + "httpStatus": 401, + "sqlUnchanged": true, + "mutationCalls": 0 + }, + "writer": { + "httpStatuses": [ + 200 + ], + "riskAcknowledgementRequired": true, + "saved": { + "id": "acceptance-browser-jwt-1791445526386", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + }, + "captionDoesNotClaimDelivery": true + }, + "retryRequests": 3, + "mutationCalls": 1, + "historyRows": 0, + "externalSenderCalls": 0, + "mobileFits": true, + "pageErrors": [], + "limits": [ + "Separate fixture JWT key/issuer in isolated process, actual Portal login not tested", + "Synthetic PostgreSQL row; sender/scheduler stopped, no actual Telegram message", + "Reader direct POST uses browser fetch; forged signature checked via real HTTP API request context" + ] +} diff --git a/docs/ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png new file mode 100644 index 00000000..264be102 Binary files /dev/null and b/docs/ux-ui/screens/outbox-jwt-reader-real-320-2026-10-08.png differ diff --git a/docs/ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png new file mode 100644 index 00000000..89632098 Binary files /dev/null and b/docs/ux-ui/screens/outbox-jwt-writer-real-320-2026-10-08.png differ