chore(tests): проверить срок JWT и границы выхода Portal
This commit is contained in:
1 parent
f8d2b21cf6
commit
199910eceb
8 files changed
+179
-12
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;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: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
|
||||
|
||||
@@ -2400,3 +2400,17 @@ Reader retry403, отсутствие acknowledgedDuplicateRisk400, admin expect
|
||||
Протоколы: [первый partial/failed live](ux-ui/acceptance/telegram197-partial-2026-10-13.json), [полный SQL с simulated provider](ux-ui/acceptance/telegram197-dry-result-2026-10-13.json), [отдельный live retry](ux-ui/acceptance/telegram197-resume-result-2026-10-13.json), [итог и ограничения](ux-ui/acceptance/telegram197-summary-2026-10-13.json).
|
||||
|
||||
Следующий198: настоящий expiry/logout/reissue Portal и безопасный return_to. Первый непрерывный Telegram live сценарий остаётся диагностической границей; повторять его только при достаточной диагностике и основании, а не отправлять дополнительные дубли ради зелёного счётчика.12.5 открыта.
|
||||
|
||||
## 12.5.198 — срок действия Portal JWT, права и выход (2026-10-13)
|
||||
|
||||
Использован настоящий JWT, выданный Portal в195 и естественно истёкший к проверке: MM GET servers401, Portal me401 и reissue401. Токен не редактировался и TTL не менялся. На собственном временном reader через документированный PUT /api/v1/admin/users/:id/access удалён доступmm: прежний JWT по-прежнему200 доexp, reissue200 выдаёт текущие claims и новый MM JWT403. Возвращённый доступ и новый reissue восстановили200. Первый неверно адресованный PATCH в диагностическом драйвере был исправлен на PUT/access; изменение source продукта не требовалось. User fixture удалён204.
|
||||
|
||||
Logout200 очищает refresh cookie(Max-Age0), но ранее выданный bearer MM JWT остаётся200 и Portal reissue с ним также200 доexp. Это подтверждённая граница offlineJWT и Portal1.3.1: cookie/session logout не означает немедленный отзыв access token. Свежие JWT/credentials в Git не сохранялись.
|
||||
|
||||
Live UI1440/320 с настоящим expired JWT: MM очистил mmapp_token, направил на Portal, реальный login/callback восстановил приложение, fragment удалён, overflow/page errors нет. Однако callback открыл /dashboard вместо исходного /servers: контекст не сохранён, следующий199 исправляет это. Внешний https://outside.invalid/auth/callback не вызвал попытки навигации после login; Portal остался на /admin. Browser /logout очистил token storage и показал login. Защитный browser route только блокировал возможную недоверенную навигацию, ответы API не подменял.
|
||||
|
||||
Оставшиеся return_to на другой localhost port и похожий hostname не приняты: серия диагностических входов достигла rate limit Portal. HTTP GET / и /api/v1/auth/config подтвердили429 с Retry-After18/17s; это не объявлено ошибкой защиты return_to. Промежуточные успехи сохранены отдельно, полный UI прогон не claimed. Повторять только эти оставшиеся случаи после cooldown, без нового полного цикла. Source/runtime/ReUI не менялись.
|
||||
|
||||
Протоколы: [actual lifecycle API](ux-ui/acceptance/portal198-lifecycle-2026-10-13.json), [live UI и границы429](ux-ui/acceptance/portal198-live-ui-2026-10-13.json).
|
||||
|
||||
Следующий199: восстановить исходный same-origin раздел и query после SSO с проверкой permissions и запретом внешних/auth callback redirect. Затем профильные E2E/deploy и два оставшихся Portal return_to.12.5 открыта.
|
||||
+3
-3
@@ -1,12 +1,12 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-13. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
## Актуальная точка продолжения — 2026-10-13
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;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: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
|
||||
+15
-1
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -38,6 +38,20 @@
|
||||
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–196 и ограничения ниже. Runtime backend/frontend ux-peak196. |
|
||||
|
||||
## 12.5.198 — срок действия Portal JWT, права и выход (2026-10-13)
|
||||
|
||||
Использован настоящий JWT, выданный Portal в195 и естественно истёкший к проверке: MM GET servers401, Portal me401 и reissue401. Токен не редактировался и TTL не менялся. На собственном временном reader через документированный PUT /api/v1/admin/users/:id/access удалён доступmm: прежний JWT по-прежнему200 доexp, reissue200 выдаёт текущие claims и новый MM JWT403. Возвращённый доступ и новый reissue восстановили200. Первый неверно адресованный PATCH в диагностическом драйвере был исправлен на PUT/access; изменение source продукта не требовалось. User fixture удалён204.
|
||||
|
||||
Logout200 очищает refresh cookie(Max-Age0), но ранее выданный bearer MM JWT остаётся200 и Portal reissue с ним также200 доexp. Это подтверждённая граница offlineJWT и Portal1.3.1: cookie/session logout не означает немедленный отзыв access token. Свежие JWT/credentials в Git не сохранялись.
|
||||
|
||||
Live UI1440/320 с настоящим expired JWT: MM очистил mmapp_token, направил на Portal, реальный login/callback восстановил приложение, fragment удалён, overflow/page errors нет. Однако callback открыл /dashboard вместо исходного /servers: контекст не сохранён, следующий199 исправляет это. Внешний https://outside.invalid/auth/callback не вызвал попытки навигации после login; Portal остался на /admin. Browser /logout очистил token storage и показал login. Защитный browser route только блокировал возможную недоверенную навигацию, ответы API не подменял.
|
||||
|
||||
Оставшиеся return_to на другой localhost port и похожий hostname не приняты: серия диагностических входов достигла rate limit Portal. HTTP GET / и /api/v1/auth/config подтвердили429 с Retry-After18/17s; это не объявлено ошибкой защиты return_to. Промежуточные успехи сохранены отдельно, полный UI прогон не claimed. Повторять только эти оставшиеся случаи после cooldown, без нового полного цикла. Source/runtime/ReUI не менялись.
|
||||
|
||||
Протоколы: [actual lifecycle API](ux-ui/acceptance/portal198-lifecycle-2026-10-13.json), [live UI и границы429](ux-ui/acceptance/portal198-live-ui-2026-10-13.json).
|
||||
|
||||
Следующий199: восстановить исходный same-origin раздел и query после SSO с проверкой permissions и запретом внешних/auth callback redirect. Затем профильные E2E/deploy и два оставшихся Portal return_to.12.5 открыта.
|
||||
|
||||
## 12.5.197 — доставка Telegram и управляемый повтор (2026-10-13)
|
||||
|
||||
Production compiled outbox проверен в собственной временной PostgreSQL БД и ограниченной роли, с реальными JWT Portal и тестовым Telegram bot/chat. Первый live прогон: enqueue с одинаковым dedupeKey сохранил одну запись; два независимых Node sender процесса выполнили одну отправку, одна запись sent и одна history. Telegram принял№2, затем драйвер намеренно подавил ответ: статус unknown, следующая автоматическая диспетчеризация не отправила сообщение повторно. Это контролируемая имитация потерянного ответа, не физический обрыв WAN.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Оставшаяся внешняя приёмка — 2026-10-13
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Это актуальная матрица после 12.5.197. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
Это актуальная матрица после 12.5.198. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
|
||||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend/frontend `ux-peak196`; 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. **198 — Portal expiry/logout/reissue и return_to:** базовый SSO, reader privacy и Telegram доставки приняты с границами197. После — диагностика цельного Telegram сценария/crash/lock-loss.
|
||||
1. **199 — SSO context:** сохранить исходный разрешённый раздел/query после login, запретить внешние/auth callback redirect. Затем scoped deploy и два return_to, ограниченные429 в198.
|
||||
2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания.
|
||||
3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций.
|
||||
|
||||
@@ -1316,3 +1316,17 @@ Reader retry403, отсутствие acknowledgedDuplicateRisk400, admin expect
|
||||
Протоколы: [первый partial/failed live](ux-ui/acceptance/telegram197-partial-2026-10-13.json), [полный SQL с simulated provider](ux-ui/acceptance/telegram197-dry-result-2026-10-13.json), [отдельный live retry](ux-ui/acceptance/telegram197-resume-result-2026-10-13.json), [итог и ограничения](ux-ui/acceptance/telegram197-summary-2026-10-13.json).
|
||||
|
||||
Следующий198: настоящий expiry/logout/reissue Portal и безопасный return_to. Первый непрерывный Telegram live сценарий остаётся диагностической границей; повторять его только при достаточной диагностике и основании, а не отправлять дополнительные дубли ради зелёного счётчика.12.5 открыта.
|
||||
|
||||
## 12.5.198 — срок действия Portal JWT, права и выход (2026-10-13)
|
||||
|
||||
Использован настоящий JWT, выданный Portal в195 и естественно истёкший к проверке: MM GET servers401, Portal me401 и reissue401. Токен не редактировался и TTL не менялся. На собственном временном reader через документированный PUT /api/v1/admin/users/:id/access удалён доступmm: прежний JWT по-прежнему200 доexp, reissue200 выдаёт текущие claims и новый MM JWT403. Возвращённый доступ и новый reissue восстановили200. Первый неверно адресованный PATCH в диагностическом драйвере был исправлен на PUT/access; изменение source продукта не требовалось. User fixture удалён204.
|
||||
|
||||
Logout200 очищает refresh cookie(Max-Age0), но ранее выданный bearer MM JWT остаётся200 и Portal reissue с ним также200 доexp. Это подтверждённая граница offlineJWT и Portal1.3.1: cookie/session logout не означает немедленный отзыв access token. Свежие JWT/credentials в Git не сохранялись.
|
||||
|
||||
Live UI1440/320 с настоящим expired JWT: MM очистил mmapp_token, направил на Portal, реальный login/callback восстановил приложение, fragment удалён, overflow/page errors нет. Однако callback открыл /dashboard вместо исходного /servers: контекст не сохранён, следующий199 исправляет это. Внешний https://outside.invalid/auth/callback не вызвал попытки навигации после login; Portal остался на /admin. Browser /logout очистил token storage и показал login. Защитный browser route только блокировал возможную недоверенную навигацию, ответы API не подменял.
|
||||
|
||||
Оставшиеся return_to на другой localhost port и похожий hostname не приняты: серия диагностических входов достигла rate limit Portal. HTTP GET / и /api/v1/auth/config подтвердили429 с Retry-After18/17s; это не объявлено ошибкой защиты return_to. Промежуточные успехи сохранены отдельно, полный UI прогон не claimed. Повторять только эти оставшиеся случаи после cooldown, без нового полного цикла. Source/runtime/ReUI не менялись.
|
||||
|
||||
Протоколы: [actual lifecycle API](ux-ui/acceptance/portal198-lifecycle-2026-10-13.json), [live UI и границы429](ux-ui/acceptance/portal198-live-ui-2026-10-13.json).
|
||||
|
||||
Следующий199: восстановить исходный same-origin раздел и query после SSO с проверкой permissions и запретом внешних/auth callback redirect. Затем профильные E2E/deploy и два оставшихся Portal return_to.12.5 открыта.
|
||||
+15
-1
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -3705,3 +3705,17 @@ Reader retry403, отсутствие acknowledgedDuplicateRisk400, admin expect
|
||||
Протоколы: [первый partial/failed live](ux-ui/acceptance/telegram197-partial-2026-10-13.json), [полный SQL с simulated provider](ux-ui/acceptance/telegram197-dry-result-2026-10-13.json), [отдельный live retry](ux-ui/acceptance/telegram197-resume-result-2026-10-13.json), [итог и ограничения](ux-ui/acceptance/telegram197-summary-2026-10-13.json).
|
||||
|
||||
Следующий198: настоящий expiry/logout/reissue Portal и безопасный return_to. Первый непрерывный Telegram live сценарий остаётся диагностической границей; повторять его только при достаточной диагностике и основании, а не отправлять дополнительные дубли ради зелёного счётчика.12.5 открыта.
|
||||
|
||||
## 12.5.198 — срок действия Portal JWT, права и выход (2026-10-13)
|
||||
|
||||
Использован настоящий JWT, выданный Portal в195 и естественно истёкший к проверке: MM GET servers401, Portal me401 и reissue401. Токен не редактировался и TTL не менялся. На собственном временном reader через документированный PUT /api/v1/admin/users/:id/access удалён доступmm: прежний JWT по-прежнему200 доexp, reissue200 выдаёт текущие claims и новый MM JWT403. Возвращённый доступ и новый reissue восстановили200. Первый неверно адресованный PATCH в диагностическом драйвере был исправлен на PUT/access; изменение source продукта не требовалось. User fixture удалён204.
|
||||
|
||||
Logout200 очищает refresh cookie(Max-Age0), но ранее выданный bearer MM JWT остаётся200 и Portal reissue с ним также200 доexp. Это подтверждённая граница offlineJWT и Portal1.3.1: cookie/session logout не означает немедленный отзыв access token. Свежие JWT/credentials в Git не сохранялись.
|
||||
|
||||
Live UI1440/320 с настоящим expired JWT: MM очистил mmapp_token, направил на Portal, реальный login/callback восстановил приложение, fragment удалён, overflow/page errors нет. Однако callback открыл /dashboard вместо исходного /servers: контекст не сохранён, следующий199 исправляет это. Внешний https://outside.invalid/auth/callback не вызвал попытки навигации после login; Portal остался на /admin. Browser /logout очистил token storage и показал login. Защитный browser route только блокировал возможную недоверенную навигацию, ответы API не подменял.
|
||||
|
||||
Оставшиеся return_to на другой localhost port и похожий hostname не приняты: серия диагностических входов достигла rate limit Portal. HTTP GET / и /api/v1/auth/config подтвердили429 с Retry-After18/17s; это не объявлено ошибкой защиты return_to. Промежуточные успехи сохранены отдельно, полный UI прогон не claimed. Повторять только эти оставшиеся случаи после cooldown, без нового полного цикла. Source/runtime/ReUI не менялись.
|
||||
|
||||
Протоколы: [actual lifecycle API](ux-ui/acceptance/portal198-lifecycle-2026-10-13.json), [live UI и границы429](ux-ui/acceptance/portal198-live-ui-2026-10-13.json).
|
||||
|
||||
Следующий199: восстановить исходный same-origin раздел и query после SSO с проверкой permissions и запретом внешних/auth callback redirect. Затем профильные E2E/deploy и два оставшихся Portal return_to.12.5 открыта.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-10
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -708,7 +708,7 @@ flowchart LR
|
||||
|
||||
## 12.5.77 — основной блок IPsec (2026-10-09)
|
||||
|
||||
Актуальное продолжение 2026-10-13: блок197 — Telegram live dedupe/two senders/unknown hold и отдельный explicit retry приняты, пользователь подтвердил одно№1/два№2. Первый полный live прогон не прошёл immediate retry; причина не установлена, цельный live сценарий остаётся открытым. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true. Следующий198 — Portal expiry/logout/reissue и return_to;12.5 открыта.
|
||||
Актуальное продолжение 2026-10-13: блок198 — actual expired JWT401, reissue role changes, logout boundary и live expired recovery ПК/телефон приняты. Первый внешний return_to и browser logout passed; остальные два return_to ограничены подтверждённым429 Portal. Runtime ux-peak196. Следующий199 — сохранить исходный раздел/параметры после SSO;12.5 открыта.
|
||||
|
||||
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
|
||||
|
||||
@@ -2131,3 +2131,17 @@ Reader retry403, отсутствие acknowledgedDuplicateRisk400, admin expect
|
||||
Протоколы: [первый partial/failed live](ux-ui/acceptance/telegram197-partial-2026-10-13.json), [полный SQL с simulated provider](ux-ui/acceptance/telegram197-dry-result-2026-10-13.json), [отдельный live retry](ux-ui/acceptance/telegram197-resume-result-2026-10-13.json), [итог и ограничения](ux-ui/acceptance/telegram197-summary-2026-10-13.json).
|
||||
|
||||
Следующий198: настоящий expiry/logout/reissue Portal и безопасный return_to. Первый непрерывный Telegram live сценарий остаётся диагностической границей; повторять его только при достаточной диагностике и основании, а не отправлять дополнительные дубли ради зелёного счётчика.12.5 открыта.
|
||||
|
||||
## 12.5.198 — срок действия Portal JWT, права и выход (2026-10-13)
|
||||
|
||||
Использован настоящий JWT, выданный Portal в195 и естественно истёкший к проверке: MM GET servers401, Portal me401 и reissue401. Токен не редактировался и TTL не менялся. На собственном временном reader через документированный PUT /api/v1/admin/users/:id/access удалён доступmm: прежний JWT по-прежнему200 доexp, reissue200 выдаёт текущие claims и новый MM JWT403. Возвращённый доступ и новый reissue восстановили200. Первый неверно адресованный PATCH в диагностическом драйвере был исправлен на PUT/access; изменение source продукта не требовалось. User fixture удалён204.
|
||||
|
||||
Logout200 очищает refresh cookie(Max-Age0), но ранее выданный bearer MM JWT остаётся200 и Portal reissue с ним также200 доexp. Это подтверждённая граница offlineJWT и Portal1.3.1: cookie/session logout не означает немедленный отзыв access token. Свежие JWT/credentials в Git не сохранялись.
|
||||
|
||||
Live UI1440/320 с настоящим expired JWT: MM очистил mmapp_token, направил на Portal, реальный login/callback восстановил приложение, fragment удалён, overflow/page errors нет. Однако callback открыл /dashboard вместо исходного /servers: контекст не сохранён, следующий199 исправляет это. Внешний https://outside.invalid/auth/callback не вызвал попытки навигации после login; Portal остался на /admin. Browser /logout очистил token storage и показал login. Защитный browser route только блокировал возможную недоверенную навигацию, ответы API не подменял.
|
||||
|
||||
Оставшиеся return_to на другой localhost port и похожий hostname не приняты: серия диагностических входов достигла rate limit Portal. HTTP GET / и /api/v1/auth/config подтвердили429 с Retry-After18/17s; это не объявлено ошибкой защиты return_to. Промежуточные успехи сохранены отдельно, полный UI прогон не claimed. Повторять только эти оставшиеся случаи после cooldown, без нового полного цикла. Source/runtime/ReUI не менялись.
|
||||
|
||||
Протоколы: [actual lifecycle API](ux-ui/acceptance/portal198-lifecycle-2026-10-13.json), [live UI и границы429](ux-ui/acceptance/portal198-live-ui-2026-10-13.json).
|
||||
|
||||
Следующий199: восстановить исходный same-origin раздел и query после SSO с проверкой permissions и запретом внешних/auth callback redirect. Затем профильные E2E/deploy и два оставшихся Portal return_to.12.5 открыта.
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"date": "2026-10-13",
|
||||
"block": "12.5.198",
|
||||
"actualPortalImage": "1.3.1",
|
||||
"cases": [
|
||||
{
|
||||
"name": "actual naturally expired Portal token",
|
||||
"issuedAt": 1791878079,
|
||||
"expiredAt": 1791878979,
|
||||
"checkedAt": 1791881690,
|
||||
"mmServers": 401,
|
||||
"portalMe": 401,
|
||||
"portalReissue": 401,
|
||||
"tokenAltered": false
|
||||
},
|
||||
{
|
||||
"name": "role removal and reissue",
|
||||
"oldIssuedMmJwt": 200,
|
||||
"reissue": 200,
|
||||
"newMmJwt": 403,
|
||||
"offlineOldTokenValidUntilExp": true
|
||||
},
|
||||
{
|
||||
"name": "role restoration and reissue",
|
||||
"reissue": 200,
|
||||
"newMmJwt": 200
|
||||
},
|
||||
{
|
||||
"name": "logout boundary",
|
||||
"logout": 200,
|
||||
"refreshCookieCleared": true,
|
||||
"oldMmJwt": 200,
|
||||
"bearerReissueAfterLogout": 200,
|
||||
"instantAccessTokenRevocation": false
|
||||
}
|
||||
],
|
||||
"apiMocks": false,
|
||||
"serverWrites": 0,
|
||||
"cleaned": true
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"date": "2026-10-13",
|
||||
"block": "12.5.198",
|
||||
"cases": [
|
||||
{
|
||||
"name": "expired token recovery",
|
||||
"width": 1440,
|
||||
"expiredMmTokenCleared": true,
|
||||
"portalLogin": true,
|
||||
"recoveredActualSso": true,
|
||||
"landingPath": "/dashboard",
|
||||
"originalPathRestored": false,
|
||||
"noFragment": true,
|
||||
"noOverflow": true,
|
||||
"pageErrors": 0
|
||||
},
|
||||
{
|
||||
"name": "expired token recovery",
|
||||
"width": 320,
|
||||
"expiredMmTokenCleared": true,
|
||||
"portalLogin": true,
|
||||
"recoveredActualSso": true,
|
||||
"landingPath": "/dashboard",
|
||||
"originalPathRestored": false,
|
||||
"noFragment": true,
|
||||
"noOverflow": true,
|
||||
"pageErrors": 0
|
||||
},
|
||||
{
|
||||
"name": "disallowed return_to",
|
||||
"target": "https://outside.invalid/auth/callback",
|
||||
"externalNavigationAttempts": 0,
|
||||
"portalStayed": true,
|
||||
"apiMocks": false
|
||||
},
|
||||
{
|
||||
"name": "Portal browser logout",
|
||||
"loginVisible": true,
|
||||
"tokenStorageCleared": true
|
||||
}
|
||||
],
|
||||
"realRuntime": true,
|
||||
"apiMocks": false,
|
||||
"blockedUnexpectedNavigationForSafety": true,
|
||||
"serverWrites": 0,
|
||||
"complete": false,
|
||||
"remaining": [
|
||||
"return_to different localhost port",
|
||||
"return_to lookalike host"
|
||||
],
|
||||
"failure": {
|
||||
"confirmedHttpStatus": 429,
|
||||
"retryAfterSeconds": 18,
|
||||
"cause": "Portal rate limit exceeded after repeated login/UI diagnostics; remaining cases not accepted"
|
||||
},
|
||||
"limitation": "Expired session recovery lands on /dashboard instead of the original section"
|
||||
}
|
||||
Reference in new issue
Block a user