From a15917d08b1fc6eab92c260b1a15d652fc075f80 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 13 Oct 2026 15:14:45 +0700 Subject: [PATCH] =?UTF-8?q?chore(tests):=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B8=D1=82=D1=8C=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20Portal=20=D0=B8=20=D0=BF=D0=BE=D0=B4=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B4=D0=B8=D1=82=D1=8C=20Telegram?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-external-acceptance.md | 20 +++++++- docs/ux-ui-plan.md | 6 +-- docs/ux-ui-progress.md | 20 +++++++- docs/ux-ui-remaining-acceptance.md | 24 ++++++++-- docs/ux-ui-stage-12.md | 18 +++++++- docs/ux-ui-test-server.md | 20 +++++++- .../portal-live-api-2026-10-13.json | 46 +++++++++++++++++++ .../portal195-browser-admin-2026-10-13.json | 10 ++++ .../portal195-runtime-2026-10-13.json | 42 +++++++++++++++++ .../telegram195-provider-2026-10-13.json | 19 ++++++++ 10 files changed, 211 insertions(+), 14 deletions(-) create mode 100644 docs/ux-ui/acceptance/portal-live-api-2026-10-13.json create mode 100644 docs/ux-ui/acceptance/portal195-browser-admin-2026-10-13.json create mode 100644 docs/ux-ui/acceptance/portal195-runtime-2026-10-13.json create mode 100644 docs/ux-ui/acceptance/telegram195-provider-2026-10-13.json diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 0a4a4331..bd8a79be 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-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md). @@ -696,7 +696,7 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). @@ -2354,3 +2354,19 @@ Frontend:59 lib test files прошли с одной исправленной Протоколы: [backend profiles](ux-ui/acceptance/general192-owned192-result.json), [monthly SQL](ux-ui/acceptance/general192-special-149-result.json), [IPv6 pipeline](ux-ui/acceptance/general192-special-144-result.json), [Ping replay](ux-ui/acceptance/general192-ping-replay-result.json), [frontend units](ux-ui/acceptance/general-frontend-units-2026-10-13.json), [E2E](ux-ui/acceptance/general-e2e-2026-10-13.json). Актуальный стенд backend194/frontend191, backend/PG healthy; production API и live UI приняты в194. Debian161.104.46.222 имеет только loopback/link-local IPv6, public IPv6/default IPv6 route отсутствуют по read-only проверке. Настоящие Portal SSO/Telegram/client OS/independent WAN/scale и полный distributed writer/restore drain не закрыты общей fixture-регрессией. Следующий195 — отдельная bounded failure/recovery проверка межпроцессного опроса; внешние группы требуют соответствующих стендов/параметров.12.5 остаётся открытой. + +## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13) + +По прямому поручению пользователя установлен предоставленный auth-portal1.3.1 на том же Debian-стенде. Исходник прочитан из git.shx.one/denozord/auth-portal, точный tagv1.3.1=2e947b5a31d7bd6c17aff8dba3917fabf6640b91; опубликованный образ закреплён digestsha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489. Byte/compiled совпадение образа с исходником не заявлено. Отдельная SQLite/data и bootstrap admin, случайные собственные admin password/HS256 secret, JWT lifetime900s, issuer/portal http://localhost:5175, allowlist только localhost/127.0.0.1:3000. Portal доступен через loopback/SSH, не публичный порт. Исходный .env приложения не копировался и не переписывался: новая закрытая compose.override.yaml задаёт только Portal и AUTH_* overrides. Portal/backend/PG healthy, frontend running. Backend194/frontend191 сохранены, source build не требовался для настройки. + +Настоящий login API выдал Portal JWT с appmm и ожидаемым issuer. Приложение работает с AUTH_REQUIRED=true: без JWT401, реальный admin200, читатель mm:servers:read GET200/валидный create POST403, пользователь без appmm GET/POST403, повреждённая подпись401. Настоящий browser без API mocks прошёл MM→Portal login→callback→dashboard→servers; токен записан в storage, fragment удалён, page errors0. Начальные UI-harness ожидания h1«Обзор/Серверы» не соответствовали существующему PageHeader с breadcrumbs; тест исправлен под реальные route/button, UI source не менялся. Два основных own пользователя и оставшиеся fixtures первых попыток удалены через Portal API; bootstrap admin сохранён для доступа к стенду. + +Отзыв проверен с явной границей: revoke-all отменяет refresh sessions, disabled user не логинится/Portal me401. Уже выданный access JWT MikrotikManager продолжает принимать200 доexp, поскольку backend проверяет подпись/issuer/exp offline и не проверяет состояние пользователя в Portal. Это не мгновенное глобальное revoke. Реальное истечение900s, passkey/OIDC и физические client OS в этом блоке не приняты. + +По предоставленным тестовым bot/chat_id сохранены параметры через штатный API под настоящим Portal JWT. До настройки groups/rules0/outbox0: старых сообщений для рассылки нет. Первая send попытка получила502/unknown: с Debian недоступен TCP443 на DNS endpoint149.154.166.110; getMe и curl подтвердили connection timeout. Проверенный TLS endpoint149.154.167.220 того же api.telegram.org доступен. Для backend добавлен временный lab-only extra_hosts; TLS verification не отключался, произвольный proxy/mirror не использовался. После getMe200 (botId совпал) одна контролируемая send через штатный API принята. Всего2 send requests: initial unknown и verified transport control; не утверждать, что неизвестная отправка доказанно не состоялась. Пользователь подтвердил получение текста «MikroTik Manager — тест оповещений (Telegram).». Токен находится в закрытой конфигурации/БД стенда, в Git/публичные отчёты не включён. Автоматические rule/recovery/outbox/retry delivery ещё отдельная приёмка. + +Протоколы: [runtime](ux-ui/acceptance/portal195-runtime-2026-10-13.json), [actual JWT/RBAC/revoke](ux-ui/acceptance/portal-live-api-2026-10-13.json), [real browser SSO](ux-ui/acceptance/portal195-browser-admin-2026-10-13.json), [Telegram + human receipt](ux-ui/acceptance/telegram195-provider-2026-10-13.json). Данные входа bootstrap admin — локальный gitignored tmp/portal195-login.txt и закрытый файл стенда; секреты не публиковать в журнале. + +Найден следующий196: настоящее reader JWT получает plaintext password CHR через GETservers. Подтверждён только boolean совпадения, секрет не выведен. Также authPortalBaseUrl для ссылки AppsMenu использует NEXT_PUBLIC_AUTH_PORTAL_URL сборки вместо текущего runtime Portal URL; hook switcher fetch уже использует runtime. Исправить оба API/UI недостатка, проверить reader/writer/admin и реальный Portal на ПК/телефоне, собрать/развернуть и создать локальный commit. Это ограничивает принятие приватности/навигации, но не отменяет доказанный базовый SSO/Telegram transport. + +Пользователь подтвердил отсутствие public IPv6 на всех его стендах — внешняя IPv6 outer приёмка сейчас недоступна. Проверку crash/lock-connection loss из прежнего следующего195 перенести после Portal/Telegram.12.5 открыта. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 6724073b..ba16773c 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-13. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-13 -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. @@ -371,6 +371,6 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index fc8ff216..4b523155 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,23 @@ | 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–194 и ограничения ниже. Runtime backend ux-peak194/frontend ux-peak191. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–195 и ограничения ниже. Runtime backend ux-peak194/frontend ux-peak191. | + +## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13) + +По прямому поручению пользователя установлен предоставленный auth-portal1.3.1 на том же Debian-стенде. Исходник прочитан из git.shx.one/denozord/auth-portal, точный tagv1.3.1=2e947b5a31d7bd6c17aff8dba3917fabf6640b91; опубликованный образ закреплён digestsha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489. Byte/compiled совпадение образа с исходником не заявлено. Отдельная SQLite/data и bootstrap admin, случайные собственные admin password/HS256 secret, JWT lifetime900s, issuer/portal http://localhost:5175, allowlist только localhost/127.0.0.1:3000. Portal доступен через loopback/SSH, не публичный порт. Исходный .env приложения не копировался и не переписывался: новая закрытая compose.override.yaml задаёт только Portal и AUTH_* overrides. Portal/backend/PG healthy, frontend running. Backend194/frontend191 сохранены, source build не требовался для настройки. + +Настоящий login API выдал Portal JWT с appmm и ожидаемым issuer. Приложение работает с AUTH_REQUIRED=true: без JWT401, реальный admin200, читатель mm:servers:read GET200/валидный create POST403, пользователь без appmm GET/POST403, повреждённая подпись401. Настоящий browser без API mocks прошёл MM→Portal login→callback→dashboard→servers; токен записан в storage, fragment удалён, page errors0. Начальные UI-harness ожидания h1«Обзор/Серверы» не соответствовали существующему PageHeader с breadcrumbs; тест исправлен под реальные route/button, UI source не менялся. Два основных own пользователя и оставшиеся fixtures первых попыток удалены через Portal API; bootstrap admin сохранён для доступа к стенду. + +Отзыв проверен с явной границей: revoke-all отменяет refresh sessions, disabled user не логинится/Portal me401. Уже выданный access JWT MikrotikManager продолжает принимать200 доexp, поскольку backend проверяет подпись/issuer/exp offline и не проверяет состояние пользователя в Portal. Это не мгновенное глобальное revoke. Реальное истечение900s, passkey/OIDC и физические client OS в этом блоке не приняты. + +По предоставленным тестовым bot/chat_id сохранены параметры через штатный API под настоящим Portal JWT. До настройки groups/rules0/outbox0: старых сообщений для рассылки нет. Первая send попытка получила502/unknown: с Debian недоступен TCP443 на DNS endpoint149.154.166.110; getMe и curl подтвердили connection timeout. Проверенный TLS endpoint149.154.167.220 того же api.telegram.org доступен. Для backend добавлен временный lab-only extra_hosts; TLS verification не отключался, произвольный proxy/mirror не использовался. После getMe200 (botId совпал) одна контролируемая send через штатный API принята. Всего2 send requests: initial unknown и verified transport control; не утверждать, что неизвестная отправка доказанно не состоялась. Пользователь подтвердил получение текста «MikroTik Manager — тест оповещений (Telegram).». Токен находится в закрытой конфигурации/БД стенда, в Git/публичные отчёты не включён. Автоматические rule/recovery/outbox/retry delivery ещё отдельная приёмка. + +Протоколы: [runtime](ux-ui/acceptance/portal195-runtime-2026-10-13.json), [actual JWT/RBAC/revoke](ux-ui/acceptance/portal-live-api-2026-10-13.json), [real browser SSO](ux-ui/acceptance/portal195-browser-admin-2026-10-13.json), [Telegram + human receipt](ux-ui/acceptance/telegram195-provider-2026-10-13.json). Данные входа bootstrap admin — локальный gitignored tmp/portal195-login.txt и закрытый файл стенда; секреты не публиковать в журнале. + +Найден следующий196: настоящее reader JWT получает plaintext password CHR через GETservers. Подтверждён только boolean совпадения, секрет не выведен. Также authPortalBaseUrl для ссылки AppsMenu использует NEXT_PUBLIC_AUTH_PORTAL_URL сборки вместо текущего runtime Portal URL; hook switcher fetch уже использует runtime. Исправить оба API/UI недостатка, проверить reader/writer/admin и реальный Portal на ПК/телефоне, собрать/развернуть и создать локальный commit. Это ограничивает принятие приватности/навигации, но не отменяет доказанный базовый SSO/Telegram transport. + +Пользователь подтвердил отсутствие public IPv6 на всех его стендах — внешняя IPv6 outer приёмка сейчас недоступна. Проверку crash/lock-connection loss из прежнего следующего195 перенести после Portal/Telegram.12.5 открыта. ## 12.5.194 — трафик: координация опроса разных backend-процессов (2026-10-13) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index 75722735..1db65dbb 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,10 +1,10 @@ # Оставшаяся внешняя приёмка — 2026-10-13 -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. -Это актуальная матрица после 12.5.194. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.195. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. -Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-peak194`, frontend `ux-peak191`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. +Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-peak194`, frontend `ux-peak191`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. | Раздел | Подтверждено | Осталось / условие завершения | | --- | --- | --- | @@ -26,7 +26,7 @@ ## Следующая последовательность — 2026-10-13 -1. **195 — failure/recovery межпроцессного опроса:** проверить аварийное завершение holder процесса и неопределённость lock connection в собственной БД, не приравнивая session lock к fencing. Общая192 E2E1286/backend24 профиля/frontend59 files принята; runtime backend194/frontend191. +1. **196 — приватность серверов и runtime Portal links:** скрыть password от reader JWT, сохранить writer/admin редактирование; исправить ссылку AppsMenu на runtime Portal.195 базовый SSO/Telegram транспорт принят, автоматические доставки/expiry/revoke boundary ещё открыты. Затем вернуться к crash/lock-loss. 2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания. 3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций. @@ -1270,3 +1270,19 @@ Frontend:59 lib test files прошли с одной исправленной Протоколы: [backend profiles](ux-ui/acceptance/general192-owned192-result.json), [monthly SQL](ux-ui/acceptance/general192-special-149-result.json), [IPv6 pipeline](ux-ui/acceptance/general192-special-144-result.json), [Ping replay](ux-ui/acceptance/general192-ping-replay-result.json), [frontend units](ux-ui/acceptance/general-frontend-units-2026-10-13.json), [E2E](ux-ui/acceptance/general-e2e-2026-10-13.json). Актуальный стенд backend194/frontend191, backend/PG healthy; production API и live UI приняты в194. Debian161.104.46.222 имеет только loopback/link-local IPv6, public IPv6/default IPv6 route отсутствуют по read-only проверке. Настоящие Portal SSO/Telegram/client OS/independent WAN/scale и полный distributed writer/restore drain не закрыты общей fixture-регрессией. Следующий195 — отдельная bounded failure/recovery проверка межпроцессного опроса; внешние группы требуют соответствующих стендов/параметров.12.5 остаётся открытой. + +## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13) + +По прямому поручению пользователя установлен предоставленный auth-portal1.3.1 на том же Debian-стенде. Исходник прочитан из git.shx.one/denozord/auth-portal, точный tagv1.3.1=2e947b5a31d7bd6c17aff8dba3917fabf6640b91; опубликованный образ закреплён digestsha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489. Byte/compiled совпадение образа с исходником не заявлено. Отдельная SQLite/data и bootstrap admin, случайные собственные admin password/HS256 secret, JWT lifetime900s, issuer/portal http://localhost:5175, allowlist только localhost/127.0.0.1:3000. Portal доступен через loopback/SSH, не публичный порт. Исходный .env приложения не копировался и не переписывался: новая закрытая compose.override.yaml задаёт только Portal и AUTH_* overrides. Portal/backend/PG healthy, frontend running. Backend194/frontend191 сохранены, source build не требовался для настройки. + +Настоящий login API выдал Portal JWT с appmm и ожидаемым issuer. Приложение работает с AUTH_REQUIRED=true: без JWT401, реальный admin200, читатель mm:servers:read GET200/валидный create POST403, пользователь без appmm GET/POST403, повреждённая подпись401. Настоящий browser без API mocks прошёл MM→Portal login→callback→dashboard→servers; токен записан в storage, fragment удалён, page errors0. Начальные UI-harness ожидания h1«Обзор/Серверы» не соответствовали существующему PageHeader с breadcrumbs; тест исправлен под реальные route/button, UI source не менялся. Два основных own пользователя и оставшиеся fixtures первых попыток удалены через Portal API; bootstrap admin сохранён для доступа к стенду. + +Отзыв проверен с явной границей: revoke-all отменяет refresh sessions, disabled user не логинится/Portal me401. Уже выданный access JWT MikrotikManager продолжает принимать200 доexp, поскольку backend проверяет подпись/issuer/exp offline и не проверяет состояние пользователя в Portal. Это не мгновенное глобальное revoke. Реальное истечение900s, passkey/OIDC и физические client OS в этом блоке не приняты. + +По предоставленным тестовым bot/chat_id сохранены параметры через штатный API под настоящим Portal JWT. До настройки groups/rules0/outbox0: старых сообщений для рассылки нет. Первая send попытка получила502/unknown: с Debian недоступен TCP443 на DNS endpoint149.154.166.110; getMe и curl подтвердили connection timeout. Проверенный TLS endpoint149.154.167.220 того же api.telegram.org доступен. Для backend добавлен временный lab-only extra_hosts; TLS verification не отключался, произвольный proxy/mirror не использовался. После getMe200 (botId совпал) одна контролируемая send через штатный API принята. Всего2 send requests: initial unknown и verified transport control; не утверждать, что неизвестная отправка доказанно не состоялась. Пользователь подтвердил получение текста «MikroTik Manager — тест оповещений (Telegram).». Токен находится в закрытой конфигурации/БД стенда, в Git/публичные отчёты не включён. Автоматические rule/recovery/outbox/retry delivery ещё отдельная приёмка. + +Протоколы: [runtime](ux-ui/acceptance/portal195-runtime-2026-10-13.json), [actual JWT/RBAC/revoke](ux-ui/acceptance/portal-live-api-2026-10-13.json), [real browser SSO](ux-ui/acceptance/portal195-browser-admin-2026-10-13.json), [Telegram + human receipt](ux-ui/acceptance/telegram195-provider-2026-10-13.json). Данные входа bootstrap admin — локальный gitignored tmp/portal195-login.txt и закрытый файл стенда; секреты не публиковать в журнале. + +Найден следующий196: настоящее reader JWT получает plaintext password CHR через GETservers. Подтверждён только boolean совпадения, секрет не выведен. Также authPortalBaseUrl для ссылки AppsMenu использует NEXT_PUBLIC_AUTH_PORTAL_URL сборки вместо текущего runtime Portal URL; hook switcher fetch уже использует runtime. Исправить оба API/UI недостатка, проверить reader/writer/admin и реальный Portal на ПК/телефоне, собрать/развернуть и создать локальный commit. Это ограничивает принятие приватности/навигации, но не отменяет доказанный базовый SSO/Telegram transport. + +Пользователь подтвердил отсутствие public IPv6 на всех его стендах — внешняя IPv6 outer приёмка сейчас недоступна. Проверку crash/lock-connection loss из прежнего следующего195 перенести после Portal/Telegram.12.5 открыта. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 188f3a28..fef44fe2 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -3659,3 +3659,19 @@ Frontend:59 lib test files прошли с одной исправленной Протоколы: [backend profiles](ux-ui/acceptance/general192-owned192-result.json), [monthly SQL](ux-ui/acceptance/general192-special-149-result.json), [IPv6 pipeline](ux-ui/acceptance/general192-special-144-result.json), [Ping replay](ux-ui/acceptance/general192-ping-replay-result.json), [frontend units](ux-ui/acceptance/general-frontend-units-2026-10-13.json), [E2E](ux-ui/acceptance/general-e2e-2026-10-13.json). Актуальный стенд backend194/frontend191, backend/PG healthy; production API и live UI приняты в194. Debian161.104.46.222 имеет только loopback/link-local IPv6, public IPv6/default IPv6 route отсутствуют по read-only проверке. Настоящие Portal SSO/Telegram/client OS/independent WAN/scale и полный distributed writer/restore drain не закрыты общей fixture-регрессией. Следующий195 — отдельная bounded failure/recovery проверка межпроцессного опроса; внешние группы требуют соответствующих стендов/параметров.12.5 остаётся открытой. + +## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13) + +По прямому поручению пользователя установлен предоставленный auth-portal1.3.1 на том же Debian-стенде. Исходник прочитан из git.shx.one/denozord/auth-portal, точный tagv1.3.1=2e947b5a31d7bd6c17aff8dba3917fabf6640b91; опубликованный образ закреплён digestsha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489. Byte/compiled совпадение образа с исходником не заявлено. Отдельная SQLite/data и bootstrap admin, случайные собственные admin password/HS256 secret, JWT lifetime900s, issuer/portal http://localhost:5175, allowlist только localhost/127.0.0.1:3000. Portal доступен через loopback/SSH, не публичный порт. Исходный .env приложения не копировался и не переписывался: новая закрытая compose.override.yaml задаёт только Portal и AUTH_* overrides. Portal/backend/PG healthy, frontend running. Backend194/frontend191 сохранены, source build не требовался для настройки. + +Настоящий login API выдал Portal JWT с appmm и ожидаемым issuer. Приложение работает с AUTH_REQUIRED=true: без JWT401, реальный admin200, читатель mm:servers:read GET200/валидный create POST403, пользователь без appmm GET/POST403, повреждённая подпись401. Настоящий browser без API mocks прошёл MM→Portal login→callback→dashboard→servers; токен записан в storage, fragment удалён, page errors0. Начальные UI-harness ожидания h1«Обзор/Серверы» не соответствовали существующему PageHeader с breadcrumbs; тест исправлен под реальные route/button, UI source не менялся. Два основных own пользователя и оставшиеся fixtures первых попыток удалены через Portal API; bootstrap admin сохранён для доступа к стенду. + +Отзыв проверен с явной границей: revoke-all отменяет refresh sessions, disabled user не логинится/Portal me401. Уже выданный access JWT MikrotikManager продолжает принимать200 доexp, поскольку backend проверяет подпись/issuer/exp offline и не проверяет состояние пользователя в Portal. Это не мгновенное глобальное revoke. Реальное истечение900s, passkey/OIDC и физические client OS в этом блоке не приняты. + +По предоставленным тестовым bot/chat_id сохранены параметры через штатный API под настоящим Portal JWT. До настройки groups/rules0/outbox0: старых сообщений для рассылки нет. Первая send попытка получила502/unknown: с Debian недоступен TCP443 на DNS endpoint149.154.166.110; getMe и curl подтвердили connection timeout. Проверенный TLS endpoint149.154.167.220 того же api.telegram.org доступен. Для backend добавлен временный lab-only extra_hosts; TLS verification не отключался, произвольный proxy/mirror не использовался. После getMe200 (botId совпал) одна контролируемая send через штатный API принята. Всего2 send requests: initial unknown и verified transport control; не утверждать, что неизвестная отправка доказанно не состоялась. Пользователь подтвердил получение текста «MikroTik Manager — тест оповещений (Telegram).». Токен находится в закрытой конфигурации/БД стенда, в Git/публичные отчёты не включён. Автоматические rule/recovery/outbox/retry delivery ещё отдельная приёмка. + +Протоколы: [runtime](ux-ui/acceptance/portal195-runtime-2026-10-13.json), [actual JWT/RBAC/revoke](ux-ui/acceptance/portal-live-api-2026-10-13.json), [real browser SSO](ux-ui/acceptance/portal195-browser-admin-2026-10-13.json), [Telegram + human receipt](ux-ui/acceptance/telegram195-provider-2026-10-13.json). Данные входа bootstrap admin — локальный gitignored tmp/portal195-login.txt и закрытый файл стенда; секреты не публиковать в журнале. + +Найден следующий196: настоящее reader JWT получает plaintext password CHR через GETservers. Подтверждён только boolean совпадения, секрет не выведен. Также authPortalBaseUrl для ссылки AppsMenu использует NEXT_PUBLIC_AUTH_PORTAL_URL сборки вместо текущего runtime Portal URL; hook switcher fetch уже использует runtime. Исправить оба API/UI недостатка, проверить reader/writer/admin и реальный Portal на ПК/телефоне, собрать/развернуть и создать локальный commit. Это ограничивает принятие приватности/навигации, но не отменяет доказанный базовый SSO/Telegram transport. + +Пользователь подтвердил отсутствие public IPv6 на всех его стендах — внешняя IPv6 outer приёмка сейчас недоступна. Проверку crash/lock-connection loss из прежнего следующего195 перенести после Portal/Telegram.12.5 открыта. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 7ae85089..14d1df1e 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-10 -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. | Параметр | Проверенное состояние | | --- | --- | @@ -708,7 +708,7 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-13: завершены191–194. Runtime backend ux-peak194/frontend ux-peak191 healthy; общий E2E1286/217 files passed1936347ms, skipped0/flaky0/unexpected0; backend24 профиля passed321237ms, frontend59 test files accepted. Monthly SQL/IPv6 UDP-worker-SQL/Ping replay отдельно passed; изменения193/194 проверены профильным PostgreSQL/API/UI. Следующий195 — failure/recovery межпроцессного опроса; внешние Portal/Telegram/client OS/public IPv6/multi-WAN/scale открыты.12.5 открыта. +Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). @@ -2085,3 +2085,19 @@ Frontend:59 lib test files прошли с одной исправленной Протоколы: [backend profiles](ux-ui/acceptance/general192-owned192-result.json), [monthly SQL](ux-ui/acceptance/general192-special-149-result.json), [IPv6 pipeline](ux-ui/acceptance/general192-special-144-result.json), [Ping replay](ux-ui/acceptance/general192-ping-replay-result.json), [frontend units](ux-ui/acceptance/general-frontend-units-2026-10-13.json), [E2E](ux-ui/acceptance/general-e2e-2026-10-13.json). Актуальный стенд backend194/frontend191, backend/PG healthy; production API и live UI приняты в194. Debian161.104.46.222 имеет только loopback/link-local IPv6, public IPv6/default IPv6 route отсутствуют по read-only проверке. Настоящие Portal SSO/Telegram/client OS/independent WAN/scale и полный distributed writer/restore drain не закрыты общей fixture-регрессией. Следующий195 — отдельная bounded failure/recovery проверка межпроцессного опроса; внешние группы требуют соответствующих стендов/параметров.12.5 остаётся открытой. + +## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13) + +По прямому поручению пользователя установлен предоставленный auth-portal1.3.1 на том же Debian-стенде. Исходник прочитан из git.shx.one/denozord/auth-portal, точный tagv1.3.1=2e947b5a31d7bd6c17aff8dba3917fabf6640b91; опубликованный образ закреплён digestsha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489. Byte/compiled совпадение образа с исходником не заявлено. Отдельная SQLite/data и bootstrap admin, случайные собственные admin password/HS256 secret, JWT lifetime900s, issuer/portal http://localhost:5175, allowlist только localhost/127.0.0.1:3000. Portal доступен через loopback/SSH, не публичный порт. Исходный .env приложения не копировался и не переписывался: новая закрытая compose.override.yaml задаёт только Portal и AUTH_* overrides. Portal/backend/PG healthy, frontend running. Backend194/frontend191 сохранены, source build не требовался для настройки. + +Настоящий login API выдал Portal JWT с appmm и ожидаемым issuer. Приложение работает с AUTH_REQUIRED=true: без JWT401, реальный admin200, читатель mm:servers:read GET200/валидный create POST403, пользователь без appmm GET/POST403, повреждённая подпись401. Настоящий browser без API mocks прошёл MM→Portal login→callback→dashboard→servers; токен записан в storage, fragment удалён, page errors0. Начальные UI-harness ожидания h1«Обзор/Серверы» не соответствовали существующему PageHeader с breadcrumbs; тест исправлен под реальные route/button, UI source не менялся. Два основных own пользователя и оставшиеся fixtures первых попыток удалены через Portal API; bootstrap admin сохранён для доступа к стенду. + +Отзыв проверен с явной границей: revoke-all отменяет refresh sessions, disabled user не логинится/Portal me401. Уже выданный access JWT MikrotikManager продолжает принимать200 доexp, поскольку backend проверяет подпись/issuer/exp offline и не проверяет состояние пользователя в Portal. Это не мгновенное глобальное revoke. Реальное истечение900s, passkey/OIDC и физические client OS в этом блоке не приняты. + +По предоставленным тестовым bot/chat_id сохранены параметры через штатный API под настоящим Portal JWT. До настройки groups/rules0/outbox0: старых сообщений для рассылки нет. Первая send попытка получила502/unknown: с Debian недоступен TCP443 на DNS endpoint149.154.166.110; getMe и curl подтвердили connection timeout. Проверенный TLS endpoint149.154.167.220 того же api.telegram.org доступен. Для backend добавлен временный lab-only extra_hosts; TLS verification не отключался, произвольный proxy/mirror не использовался. После getMe200 (botId совпал) одна контролируемая send через штатный API принята. Всего2 send requests: initial unknown и verified transport control; не утверждать, что неизвестная отправка доказанно не состоялась. Пользователь подтвердил получение текста «MikroTik Manager — тест оповещений (Telegram).». Токен находится в закрытой конфигурации/БД стенда, в Git/публичные отчёты не включён. Автоматические rule/recovery/outbox/retry delivery ещё отдельная приёмка. + +Протоколы: [runtime](ux-ui/acceptance/portal195-runtime-2026-10-13.json), [actual JWT/RBAC/revoke](ux-ui/acceptance/portal-live-api-2026-10-13.json), [real browser SSO](ux-ui/acceptance/portal195-browser-admin-2026-10-13.json), [Telegram + human receipt](ux-ui/acceptance/telegram195-provider-2026-10-13.json). Данные входа bootstrap admin — локальный gitignored tmp/portal195-login.txt и закрытый файл стенда; секреты не публиковать в журнале. + +Найден следующий196: настоящее reader JWT получает plaintext password CHR через GETservers. Подтверждён только boolean совпадения, секрет не выведен. Также authPortalBaseUrl для ссылки AppsMenu использует NEXT_PUBLIC_AUTH_PORTAL_URL сборки вместо текущего runtime Portal URL; hook switcher fetch уже использует runtime. Исправить оба API/UI недостатка, проверить reader/writer/admin и реальный Portal на ПК/телефоне, собрать/развернуть и создать локальный commit. Это ограничивает принятие приватности/навигации, но не отменяет доказанный базовый SSO/Telegram transport. + +Пользователь подтвердил отсутствие public IPv6 на всех его стендах — внешняя IPv6 outer приёмка сейчас недоступна. Проверку crash/lock-connection loss из прежнего следующего195 перенести после Portal/Telegram.12.5 открыта. diff --git a/docs/ux-ui/acceptance/portal-live-api-2026-10-13.json b/docs/ux-ui/acceptance/portal-live-api-2026-10-13.json new file mode 100644 index 00000000..d4a68a8a --- /dev/null +++ b/docs/ux-ui/acceptance/portal-live-api-2026-10-13.json @@ -0,0 +1,46 @@ +{ + "date": "2026-10-13", + "block": "12.5.195", + "portalImage": "1.3.1", + "actualPortalTokens": true, + "cases": [ + { + "name": "unauthenticated", + "status": 401 + }, + { + "name": "real portal admin", + "status": 200 + }, + { + "name": "reader", + "read": 200, + "write": 403, + "serverWrites": 0 + }, + { + "name": "revocation boundary", + "revokedRefreshSessions": 1, + "disabledLogin": 401, + "portalMe": 401, + "oldMmAccessJwt": 200, + "bound": "MM validates self-contained JWT offline; Portal session/account revocation does not revoke issued MM JWT before exp" + }, + { + "name": "no-app", + "read": 403, + "write": 403, + "serverWrites": 0 + }, + { + "name": "tampered signature", + "status": 401 + } + ], + "userFixtureIds": [ + "f0e78f69-73cf-44fd-99c8-d393c6d5587d", + "c4987fd0-92f6-4530-929f-c827275639fd" + ], + "cleaned": true, + "noPasswordsOrTokensPublished": true +} diff --git a/docs/ux-ui/acceptance/portal195-browser-admin-2026-10-13.json b/docs/ux-ui/acceptance/portal195-browser-admin-2026-10-13.json new file mode 100644 index 00000000..a649b284 --- /dev/null +++ b/docs/ux-ui/acceptance/portal195-browser-admin-2026-10-13.json @@ -0,0 +1,10 @@ +{ + "date": "2026-10-13", + "block": "12.5.195", + "realBrowserSso": true, + "noMocks": true, + "appTokenStored": true, + "fragmentRemoved": true, + "serversVisible": true, + "pageErrors": 0 +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/portal195-runtime-2026-10-13.json b/docs/ux-ui/acceptance/portal195-runtime-2026-10-13.json new file mode 100644 index 00000000..87c67f93 --- /dev/null +++ b/docs/ux-ui/acceptance/portal195-runtime-2026-10-13.json @@ -0,0 +1,42 @@ +{ + "date": "2026-10-13", + "block": "12.5.195", + "services": { + "backend": { + "image": "mmapp-test/backend:ux-peak194", + "imageId": "sha256:13507a7e8f3c356c4de4f6d909babf53f569e7eb2dd4061b5fa43d6078383e9a", + "running": true, + "health": "healthy" + }, + "frontend": { + "image": "mmapp-test/frontend:ux-peak191", + "imageId": "sha256:1d9f85dbb5c791f09dad2863041d0fae5a291b02f5e73a5e96185a7866c673c7", + "running": true, + "health": null + }, + "postgres": { + "image": "postgres:18-alpine", + "imageId": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", + "running": true, + "health": "healthy" + }, + "portal": { + "image": "git.shx.one/denozord/auth-portal@sha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489", + "imageId": "sha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489", + "running": true, + "health": "healthy" + } + }, + "authRequired": true, + "portalUrl": "http://localhost:5175", + "issuer": "http://localhost:5175", + "jwtLifetimeSeconds": 900, + "sharedSecretGeneratedForLab": true, + "productionEnvCopied": false, + "ports": "loopback only via SSH", + "publicIpv6Available": false, + "privateConfigPaths": [ + "/opt/mmapp-test/compose.override.yaml", + "/opt/mmapp-test/artifacts/portal195-private.json" + ] +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/telegram195-provider-2026-10-13.json b/docs/ux-ui/acceptance/telegram195-provider-2026-10-13.json new file mode 100644 index 00000000..0805fcb7 --- /dev/null +++ b/docs/ux-ui/acceptance/telegram195-provider-2026-10-13.json @@ -0,0 +1,19 @@ +{ + "date": "2026-10-13", + "block": "12.5.195", + "actualAppApi": true, + "actualPortalJwt": true, + "actualTelegramProvider": true, + "providerAccepted": true, + "initialAttempt": "unknown response with unreachable 149.154.166.110; no automatic retry", + "controlledAttemptAfterVerifiedTransportRepair": 1, + "totalSendRequests": 2, + "messageText": "MikroTik Manager \u2014 \u0442\u0435\u0441\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 (Telegram).", + "userReceiptPending": false, + "outcome": { + "ok": true + }, + "networkWorkaround": "lab-only extra_hosts api.telegram.org:149.154.167.220; verified TLS hostname; no disabled certificate checks", + "userConfirmedReceived": true, + "humanConfirmationDate": "2026-10-13" +} \ No newline at end of file