diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index c894ea70..255eba36 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -283,3 +283,13 @@ Reader получает очередь и видит disabled retry. Прямо Всего 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.47 — изоляция checkpoint при смене источника во время повтора (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-source-2026-10-08.json): текущий frontend sourceb55588f в Next dev с поддерживаемым NEXT_PUBLIC_BACKEND_URL=local, два настоящих backend8782054 и разные PostgreSQL БД: A mmapp_acceptance_20261007, B временная mmapp_acceptance_sourceb_20261008. Browser HTTP-ответы не подменялись. Production frontend остаётся same-origin с закреплённым источником; результат этого блока относится к конфигурации local, не к переключению в production. + +Два синтетических сценария: нормальный поздний receipt и ошибка producer после реального retry COMMIT. Перед навигацией независимый SQL через контрольный endpoint подтверждает A pending/version1/retry_count0, ответ удержан. При A→B отображается только запись B unknown/version0, её кнопка доступна, checkpoint A и его подписи отсутствуют; БД B неизменна. При возврате в A предупреждение неизвестного результата сохраняется. Освобождение позднего producer outcome не снимает checkpoint и не показывает устаревший успех/ошибку; reload и refresh сохраняют защиту. Явная проверка результата снимает её без нового POST. По одному retry в A на сценарий, B retry0, Telegram calls0, JS errors0,320px fit. + +[Поздний receipt](ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png) просмотрен; [поздняя ошибка](ux-ui/screens/outbox-source-error-real-320-2026-10-08.png) сохранена. Навигация штатно abort-ит старый клиентский запрос; управляемая задержка producer не является физическим разрывом сети или доказательством доставки сообщения. Scheduler admission закрыт, dispatcher не запускался, внешний Telegram fetch дополнительно запрещён. AUTH_REQUIRED=false на изолированных процессах; реальные Portal login и чат не проверены. + +Оба backend завершились exitCode0, cleanup подтвердил A retry2/B retry0 и sender0. Независимые SQL-запросы подтвердили ноль fixture-записей в обеих БД. Контейнеры, локальный Next3101 и туннели8018/8019 удалены. Новая БД B удалена после проверки точного имени, владельца mmapp и отсутствия соединений; PostgreSQL подтвердил отсутствие БД. Основной стенд и БД не менялись. Следующий12.5.48 — профильная доступность очереди/диалога на production frontend. Локальный коммит без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index f1cb62c4..81234a42 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 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 открыты. +Актуальное продолжение 2026-10-08: 12.5.47 подтвердил смену A→B→A во время retry на двух настоящих HTTP backend и разных PostgreSQL БД. B не получает checkpoint/результат A и не меняется; возврат A сохраняет блокировку после позднего receipt или ошибки, включая reload. JS errors0/Telegram calls0. Временные процессы, fixture и БД B удалены. Production backend8782054/frontendb55588f прежний. Следующий12.5.48 — профильная доступность очереди и диалога на production frontend; Portal/Telegram delivery открыты. Общий план проекта 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 подтвердил 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) содержат доказательства и ограничения. +Этапы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 при смене двух реальных HTTP/PG источников в конфигурации local; следующий12.5.48 — профильная доступность production очереди/диалога. Реальная 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 018fae27..ebf4c312 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 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 открыты. +Актуальное продолжение 2026-10-08: 12.5.47 подтвердил смену A→B→A во время retry на двух настоящих HTTP backend и разных PostgreSQL БД. B не получает checkpoint/результат A и не меняется; возврат A сохраняет блокировку после позднего receipt или ошибки, включая reload. JS errors0/Telegram calls0. Временные процессы, fixture и БД B удалены. Production backend8782054/frontendb55588f прежний. Следующий12.5.48 — профильная доступность очереди и диалога на production frontend; Portal/Telegram delivery открыты. Общий план: [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–46 и ограничения ниже. Runtime backend8782054/frontendb55588f. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–47 и ограничения ниже. Runtime backend8782054/frontendb55588f. | + +## 12.5.47 — изоляция checkpoint при смене источника во время повтора (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-source-2026-10-08.json): текущий frontend sourceb55588f в Next dev с поддерживаемым NEXT_PUBLIC_BACKEND_URL=local, два настоящих backend8782054 и разные PostgreSQL БД: A mmapp_acceptance_20261007, B временная mmapp_acceptance_sourceb_20261008. Browser HTTP-ответы не подменялись. Production frontend остаётся same-origin с закреплённым источником; результат этого блока относится к конфигурации local, не к переключению в production. + +Два синтетических сценария: нормальный поздний receipt и ошибка producer после реального retry COMMIT. Перед навигацией независимый SQL через контрольный endpoint подтверждает A pending/version1/retry_count0, ответ удержан. При A→B отображается только запись B unknown/version0, её кнопка доступна, checkpoint A и его подписи отсутствуют; БД B неизменна. При возврате в A предупреждение неизвестного результата сохраняется. Освобождение позднего producer outcome не снимает checkpoint и не показывает устаревший успех/ошибку; reload и refresh сохраняют защиту. Явная проверка результата снимает её без нового POST. По одному retry в A на сценарий, B retry0, Telegram calls0, JS errors0,320px fit. + +[Поздний receipt](ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png) просмотрен; [поздняя ошибка](ux-ui/screens/outbox-source-error-real-320-2026-10-08.png) сохранена. Навигация штатно abort-ит старый клиентский запрос; управляемая задержка producer не является физическим разрывом сети или доказательством доставки сообщения. Scheduler admission закрыт, dispatcher не запускался, внешний Telegram fetch дополнительно запрещён. AUTH_REQUIRED=false на изолированных процессах; реальные Portal login и чат не проверены. + +Оба backend завершились exitCode0, cleanup подтвердил A retry2/B retry0 и sender0. Независимые SQL-запросы подтвердили ноль fixture-записей в обеих БД. Контейнеры, локальный Next3101 и туннели8018/8019 удалены. Новая БД B удалена после проверки точного имени, владельца mmapp и отсутствия соединений; PostgreSQL подтвердил отсутствие БД. Основной стенд и БД не менялись. Следующий12.5.48 — профильная доступность очереди/диалога на production frontend. Локальный коммит без push. ## 12.5.46 — браузерные права очереди с подписанными JWT (2026-10-08) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index fbba15e6..59896c0f 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.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 открыты. +Актуальное продолжение 2026-10-08: 12.5.47 подтвердил смену A→B→A во время retry на двух настоящих HTTP backend и разных PostgreSQL БД. B не получает checkpoint/результат A и не меняется; возврат A сохраняет блокировку после позднего receipt или ошибки, включая reload. JS errors0/Telegram calls0. Временные процессы, fixture и БД B удалены. Production backend8782054/frontendb55588f прежний. Следующий12.5.48 — профильная доступность очереди и диалога на production frontend; Portal/Telegram delivery открыты. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1448,3 +1448,13 @@ Reader получает очередь и видит disabled retry. Прямо Всего 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.47 — изоляция checkpoint при смене источника во время повтора (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-source-2026-10-08.json): текущий frontend sourceb55588f в Next dev с поддерживаемым NEXT_PUBLIC_BACKEND_URL=local, два настоящих backend8782054 и разные PostgreSQL БД: A mmapp_acceptance_20261007, B временная mmapp_acceptance_sourceb_20261008. Browser HTTP-ответы не подменялись. Production frontend остаётся same-origin с закреплённым источником; результат этого блока относится к конфигурации local, не к переключению в production. + +Два синтетических сценария: нормальный поздний receipt и ошибка producer после реального retry COMMIT. Перед навигацией независимый SQL через контрольный endpoint подтверждает A pending/version1/retry_count0, ответ удержан. При A→B отображается только запись B unknown/version0, её кнопка доступна, checkpoint A и его подписи отсутствуют; БД B неизменна. При возврате в A предупреждение неизвестного результата сохраняется. Освобождение позднего producer outcome не снимает checkpoint и не показывает устаревший успех/ошибку; reload и refresh сохраняют защиту. Явная проверка результата снимает её без нового POST. По одному retry в A на сценарий, B retry0, Telegram calls0, JS errors0,320px fit. + +[Поздний receipt](ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png) просмотрен; [поздняя ошибка](ux-ui/screens/outbox-source-error-real-320-2026-10-08.png) сохранена. Навигация штатно abort-ит старый клиентский запрос; управляемая задержка producer не является физическим разрывом сети или доказательством доставки сообщения. Scheduler admission закрыт, dispatcher не запускался, внешний Telegram fetch дополнительно запрещён. AUTH_REQUIRED=false на изолированных процессах; реальные Portal login и чат не проверены. + +Оба backend завершились exitCode0, cleanup подтвердил A retry2/B retry0 и sender0. Независимые SQL-запросы подтвердили ноль fixture-записей в обеих БД. Контейнеры, локальный Next3101 и туннели8018/8019 удалены. Новая БД B удалена после проверки точного имени, владельца mmapp и отсутствия соединений; PostgreSQL подтвердил отсутствие БД. Основной стенд и БД не менялись. Следующий12.5.48 — профильная доступность очереди/диалога на production frontend. Локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index a5db030a..d78b1bca 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -291,3 +291,13 @@ Reader получает очередь и видит disabled retry. Прямо Всего 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.47 — изоляция checkpoint при смене источника во время повтора (2026-10-08) + +[Отчёт браузера](ux-ui/acceptance/browser-outbox-source-2026-10-08.json): текущий frontend sourceb55588f в Next dev с поддерживаемым NEXT_PUBLIC_BACKEND_URL=local, два настоящих backend8782054 и разные PostgreSQL БД: A mmapp_acceptance_20261007, B временная mmapp_acceptance_sourceb_20261008. Browser HTTP-ответы не подменялись. Production frontend остаётся same-origin с закреплённым источником; результат этого блока относится к конфигурации local, не к переключению в production. + +Два синтетических сценария: нормальный поздний receipt и ошибка producer после реального retry COMMIT. Перед навигацией независимый SQL через контрольный endpoint подтверждает A pending/version1/retry_count0, ответ удержан. При A→B отображается только запись B unknown/version0, её кнопка доступна, checkpoint A и его подписи отсутствуют; БД B неизменна. При возврате в A предупреждение неизвестного результата сохраняется. Освобождение позднего producer outcome не снимает checkpoint и не показывает устаревший успех/ошибку; reload и refresh сохраняют защиту. Явная проверка результата снимает её без нового POST. По одному retry в A на сценарий, B retry0, Telegram calls0, JS errors0,320px fit. + +[Поздний receipt](ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png) просмотрен; [поздняя ошибка](ux-ui/screens/outbox-source-error-real-320-2026-10-08.png) сохранена. Навигация штатно abort-ит старый клиентский запрос; управляемая задержка producer не является физическим разрывом сети или доказательством доставки сообщения. Scheduler admission закрыт, dispatcher не запускался, внешний Telegram fetch дополнительно запрещён. AUTH_REQUIRED=false на изолированных процессах; реальные Portal login и чат не проверены. + +Оба backend завершились exitCode0, cleanup подтвердил A retry2/B retry0 и sender0. Независимые SQL-запросы подтвердили ноль fixture-записей в обеих БД. Контейнеры, локальный Next3101 и туннели8018/8019 удалены. Новая БД B удалена после проверки точного имени, владельца mmapp и отсутствия соединений; PostgreSQL подтвердил отсутствие БД. Основной стенд и БД не менялись. Следующий12.5.48 — профильная доступность очереди/диалога на production frontend. Локальный коммит без push. diff --git a/docs/ux-ui/acceptance/browser-outbox-source-2026-10-08.json b/docs/ux-ui/acceptance/browser-outbox-source-2026-10-08.json new file mode 100644 index 00000000..803fa5a8 --- /dev/null +++ b/docs/ux-ui/acceptance/browser-outbox-source-2026-10-08.json @@ -0,0 +1,58 @@ +{ + "date": "2026-10-08", + "frontendSource": "b55588f", + "backendSource": "8782054", + "browserHttpMocks": false, + "cases": [ + { + "lateOutcome": "normal-receipt-after-commit", + "databaseA": "mmapp_acceptance_20261007", + "databaseB": "mmapp_acceptance_sourceb_20261008", + "heldAfterActualCommit": { + "id": "acceptance-source-A-1791445970964", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + }, + "sourceBUnchangedAndWritable": true, + "noCheckpointLeakToB": true, + "checkpointRetainedOnReturnA": true, + "lateOutcomeCannotClearCheckpoint": true, + "reloadPreservesCheckpoint": true, + "explicitReviewDoesNotRetry": true, + "retryRequests": 1, + "sourceBRetryCalls": 0, + "externalSenderCalls": 0, + "mobileFits": true, + "pageErrors": [] + }, + { + "lateOutcome": "backend-error-after-commit", + "databaseA": "mmapp_acceptance_20261007", + "databaseB": "mmapp_acceptance_sourceb_20261008", + "heldAfterActualCommit": { + "id": "acceptance-source-A-1791445970964", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + }, + "sourceBUnchangedAndWritable": true, + "noCheckpointLeakToB": true, + "checkpointRetainedOnReturnA": true, + "lateOutcomeCannotClearCheckpoint": true, + "reloadPreservesCheckpoint": true, + "explicitReviewDoesNotRetry": true, + "retryRequests": 1, + "sourceBRetryCalls": 0, + "externalSenderCalls": 0, + "mobileFits": true, + "pageErrors": [] + } + ], + "limits": [ + "Current committed frontend in Next dev local mode; deployed production remains locked same-origin", + "Two real backend processes and distinct PostgreSQL databases, synthetic queue fixtures", + "Response held after actual SQL COMMIT; navigation aborts old client request; no physical network fault", + "Auth false; no real Telegram send/chat or Portal login" + ] +} diff --git a/docs/ux-ui/screens/outbox-source-error-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-source-error-real-320-2026-10-08.png new file mode 100644 index 00000000..99d7e754 Binary files /dev/null and b/docs/ux-ui/screens/outbox-source-error-real-320-2026-10-08.png differ diff --git a/docs/ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png new file mode 100644 index 00000000..0ba8ed34 Binary files /dev/null and b/docs/ux-ui/screens/outbox-source-receipt-real-320-2026-10-08.png differ