From 507c7010adfdd9b34664af1c4db75f63c66696c6 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Thu, 8 Oct 2026 14:06:23 +0700 Subject: [PATCH] =?UTF-8?q?chore(test):=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B4=D0=B8=D1=82=D1=8C=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D1=83=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-external-acceptance.md | 10 ++++ docs/ux-ui-plan.md | 4 +- docs/ux-ui-progress.md | 12 +++- docs/ux-ui-stage-12.md | 12 +++- docs/ux-ui-test-server.md | 10 ++++ .../outbox-settlement-2026-10-08.json | 60 +++++++++++++++++++ 6 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 docs/ux-ui/acceptance/outbox-settlement-2026-10-08.json diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 68e1c726..5a607d44 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -193,3 +193,13 @@ BGP-prefix evaluator, отдельное live GRE расписание и recove ## Q-1 production claim — 2026-10-08 12.5.37 [realPG/productiondispatcher](ux-ui/acceptance/outbox-claim-2026-10-08.json) passed:2blockedclaims/interceptedsender1/sentfixture1/history1/no duplicatecall. Реальныхсообщений0; fakeTelegramsettings/fetchзамена сняты, fixtureудалена/DBcountbaseline восстановлен. Q-1принятдляодногопроцесса/несколькихPGconnections, не реальнаяTelegramдоставка. Runtimeпрежний. Следующий12.5.38 — SQLsettlementfailure послеfixtureacceptedresponse. + +## 12.5.38 — ошибки сохранения после принятого ответа отправителя (2026-10-08) + +[Отчёт PostgreSQL](ux-ui/acceptance/outbox-settlement-2026-10-08.json): production dispatchPendingOutbox из backend8782054, отдельная БД mmapp_acceptance_20261007. Telegram fetch перехвачен внутри изолированного процесса и возвращает ok=true; реальных сообщений не отправлено. + +Реальный BEFORE INSERT trigger отклонил запись истории: транзакция settlement откатилась, outbox перешёл в unknown, история отсутствует. Повторный dispatcher не вызывает отправителя. После явно подтверждённого повторения синтетической записи проверена другая граница: PostgreSQL действительно выполнил COMMIT, затем обёртка node-pg ввела ошибку получения подтверждения. Outbox остался sent с resolution_version=1, история содержит ровно одну строку sent_ok=true; попытка hold не перезаписала подтверждённое состояние. Следующий dispatcher не повторил отправку. Поле result.sent=1 отражает принятый подменённый API-ответ и само по себе не подтверждает сохранение или реальную доставку. + +Тестовые outbox/history/trigger/function удалены; исходные настройки Telegram восстановлены из памяти, fetch возвращён, pool и контейнер завершены. Основная БД и runtime не менялись. Это проверка SQL rollback и границы подтверждения COMMIT в одном процессе; физический разрыв соединения и реальная доставка Telegram не проверены. + +Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ записи unknown, без реальных сообщений. План, журнал этапа и протокол синхронизированы; локальный коммит без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 43f92d38..fd8c3faa 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-08: 12.5.37 Q-1 productionclaim/realPG passed:2blockedUPDATE, один intercepted sender call/однаsent+history fixture, повторне отправляет. Реальных сообщений0, настройки/fixtureвосстановлены. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.38 — settlement/history failure после принятого simulatedTelegramresponse; реальнаядоставка остаётсянепроверенной. +Актуальное продолжение 2026-10-08: 12.5.38 проверил production settlement на PostgreSQL: отказ INSERT истории оставляет unknown без автоматического повтора; ошибка подтверждения после реального COMMIT сохраняет sent и одну историю. Ответ Telegram подменён, реальных сообщений нет. Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ сохранения unknown. Runtime backend8782054/frontendf194e72 прежний; внешняя приёмка 12.5 остаётся открытой. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-08 -Этапы0–11 завершены в описанных локальных границах. Этап12 остаётся открытым. На161.104.46.222 развёрнуты backend/frontend8782054; два CHR подключены. PG backup/restore/rollback, single-instance quiescence, JWT/RBAC и browser restore приняты в границах журнала. PG-8 проверен с настоящими PG/native и введённой после COMMIT ошибкой подтверждения; новый browser UI сохраняет snapshot и сверяет историю. ROS-8/9 API/SQL/native приняты в описанных границах. Browser-смена пары/длительности и удаление во время native-теста приняты в12.5.24. Реальный отказ bandwidth-аутентификации принят в12.5.25. 12.5.26 обнаружил и локально исправил30s timeout Next proxy. Исправленный frontendaa7dbdf развёрнут и проверен в12.5.27; backend8782054 прежний. ROS-3 reverse2→1/native-afterping принят в12.5.28; forward timeout открыт. Форма frontendf194e72 проверена без моков и развёрнута в12.5.29. Read-only диагностика12.5.30 не установила причину. 12.5.31 выявил текущий отказ авторизацииCHR2 вCLI/REST/SSH. В12.5.32 пользователь восстановил доступCHR2; dashboard/native1→2 passed, блокировка снята. TCP receive/both подтверждены после восстановлениядоступа в12.5.33; UDP transmit3s/API/history/UI подтверждены в12.5.34; Q-6productionenqueue/PG race принят в12.5.35; Q-4 realHTTP/PG race принят в12.5.36; Q-1productionclaim/PG/interceptedsender принят в12.5.37; следующий12.5.38 — settlement/historyfailure безреальныхсообщений. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) сохраняют точные доказательства и ограничения. +Этапы0–11 завершены в описанных локальных границах. Этап12 остаётся открытым. На161.104.46.222 развёрнуты backend/frontend8782054; два CHR подключены. PG backup/restore/rollback, single-instance quiescence, JWT/RBAC и browser restore приняты в границах журнала. PG-8 проверен с настоящими PG/native и введённой после COMMIT ошибкой подтверждения; новый browser UI сохраняет snapshot и сверяет историю. ROS-8/9 API/SQL/native приняты в описанных границах. Browser-смена пары/длительности и удаление во время native-теста приняты в12.5.24. Реальный отказ bandwidth-аутентификации принят в12.5.25. 12.5.26 обнаружил и локально исправил30s timeout Next proxy. Исправленный frontendaa7dbdf развёрнут и проверен в12.5.27; backend8782054 прежний. ROS-3 reverse2→1/native-afterping принят в12.5.28; forward timeout открыт. Форма frontendf194e72 проверена без моков и развёрнута в12.5.29. Read-only диагностика12.5.30 не установила причину. 12.5.31 выявил текущий отказ авторизацииCHR2 вCLI/REST/SSH. В12.5.32 пользователь восстановил доступCHR2; dashboard/native1→2 passed, блокировка снята. TCP receive/both подтверждены после восстановлениядоступа в12.5.33; UDP transmit3s/API/history/UI подтверждены в12.5.34; Q-6productionenqueue/PG race принят в12.5.35; Q-4 realHTTP/PG race принят в12.5.36; Q-1productionclaim/PG/interceptedsender принят в12.5.37; 12.5.38 подтвердил SQL settlement rollback и сохранение sent после ошибки подтверждения COMMIT; следующий 12.5.39 — неизвестный ответ отправителя и отказ hold, без реальных сообщений. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) сохраняют точные доказательства и ограничения. Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 38248910..47fa90da 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-08: 12.5.37 Q-1 productionclaim/realPG passed:2blockedUPDATE, один intercepted sender call/однаsent+history fixture, повторне отправляет. Реальных сообщений0, настройки/fixtureвосстановлены. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.38 — settlement/history failure после принятого simulatedTelegramresponse; реальнаядоставка остаётсянепроверенной. +Актуальное продолжение 2026-10-08: 12.5.38 проверил production settlement на PostgreSQL: отказ INSERT истории оставляет unknown без автоматического повтора; ошибка подтверждения после реального COMMIT сохраняет sent и одну историю. Ответ Telegram подменён, реальных сообщений нет. Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ сохранения unknown. Runtime backend8782054/frontendf194e72 прежний; внешняя приёмка 12.5 остаётся открытой. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -34,6 +34,16 @@ | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | | 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | +## 12.5.38 — ошибки сохранения после принятого ответа отправителя (2026-10-08) + +[Отчёт PostgreSQL](ux-ui/acceptance/outbox-settlement-2026-10-08.json): production dispatchPendingOutbox из backend8782054, отдельная БД mmapp_acceptance_20261007. Telegram fetch перехвачен внутри изолированного процесса и возвращает ok=true; реальных сообщений не отправлено. + +Реальный BEFORE INSERT trigger отклонил запись истории: транзакция settlement откатилась, outbox перешёл в unknown, история отсутствует. Повторный dispatcher не вызывает отправителя. После явно подтверждённого повторения синтетической записи проверена другая граница: PostgreSQL действительно выполнил COMMIT, затем обёртка node-pg ввела ошибку получения подтверждения. Outbox остался sent с resolution_version=1, история содержит ровно одну строку sent_ok=true; попытка hold не перезаписала подтверждённое состояние. Следующий dispatcher не повторил отправку. Поле result.sent=1 отражает принятый подменённый API-ответ и само по себе не подтверждает сохранение или реальную доставку. + +Тестовые outbox/history/trigger/function удалены; исходные настройки Telegram восстановлены из памяти, fetch возвращён, pool и контейнер завершены. Основная БД и runtime не менялись. Это проверка SQL rollback и границы подтверждения COMMIT в одном процессе; физический разрыв соединения и реальная доставка Telegram не проверены. + +Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ записи unknown, без реальных сообщений. План, журнал этапа и протокол синхронизированы; локальный коммит без push. + ## 12.5.37 — конкурентный production claim с перехваченным отправителем (2026-10-08) [Q-1 real PG evidence](ux-ui/acceptance/outbox-claim-2026-10-08.json): productiondispatchPendingOutbox/source8782054, dedicatedmmapp_acceptance_20261007. Guard проверил имяБД и отсутствиедругихготовыхpendingзаписей; scheduleradmission закрыт в isolatedprocess. Productionenqueue/claim/settle SQL использованы напрямую, queryкод не копировался в тест. Внешний fetch Telegram перехвачен только внутри процесса и вернулfixture oktrue; ниодногонастоящего сообщенияне отправлено. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 80cb6d35..3b883088 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.37 Q-1 productionclaim/realPG passed:2blockedUPDATE, один intercepted sender call/однаsent+history fixture, повторне отправляет. Реальных сообщений0, настройки/fixtureвосстановлены. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.38 — settlement/history failure после принятого simulatedTelegramresponse; реальнаядоставка остаётсянепроверенной. +Актуальное продолжение 2026-10-08: 12.5.38 проверил production settlement на PostgreSQL: отказ INSERT истории оставляет unknown без автоматического повтора; ошибка подтверждения после реального COMMIT сохраняет sent и одну историю. Ответ Telegram подменён, реальных сообщений нет. Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ сохранения unknown. Runtime backend8782054/frontendf194e72 прежний; внешняя приёмка 12.5 остаётся открытой. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1358,3 +1358,13 @@ Fixture удалена/countoutbox восстановленкbaseline; locks/app Fixtureoutbox/historyудалены, countoutbox восстановленкbaseline, временныеfakeTelegramsettings замененыисходными изпамяти безсохранениятокеноввфайлы/отчёт. Fetchзамена снята, locks/pool/containerзакрыты. Основнойстенд/БД не затрагивались, runtimeпрежний. Q-1claim/uniquesender принят в этихграницах, многопроцессныйdispatcher/реальнаяTelegramдоставка отдельнонепроверены. Следующий12.5.38 — реальныйSQL settlement/history failure после принятого simulatedTelegramresponse, безреальныхсообщений. Q-2внешняядоставка не можетсчитатьсяпринятой поfixture. План/паспорт/протокол обновлены; локальныйкоммитбезpush. + +## 12.5.38 — ошибки сохранения после принятого ответа отправителя (2026-10-08) + +[Отчёт PostgreSQL](ux-ui/acceptance/outbox-settlement-2026-10-08.json): production dispatchPendingOutbox из backend8782054, отдельная БД mmapp_acceptance_20261007. Telegram fetch перехвачен внутри изолированного процесса и возвращает ok=true; реальных сообщений не отправлено. + +Реальный BEFORE INSERT trigger отклонил запись истории: транзакция settlement откатилась, outbox перешёл в unknown, история отсутствует. Повторный dispatcher не вызывает отправителя. После явно подтверждённого повторения синтетической записи проверена другая граница: PostgreSQL действительно выполнил COMMIT, затем обёртка node-pg ввела ошибку получения подтверждения. Outbox остался sent с resolution_version=1, история содержит ровно одну строку sent_ok=true; попытка hold не перезаписала подтверждённое состояние. Следующий dispatcher не повторил отправку. Поле result.sent=1 отражает принятый подменённый API-ответ и само по себе не подтверждает сохранение или реальную доставку. + +Тестовые outbox/history/trigger/function удалены; исходные настройки Telegram восстановлены из памяти, fetch возвращён, pool и контейнер завершены. Основная БД и runtime не менялись. Это проверка SQL rollback и границы подтверждения COMMIT в одном процессе; физический разрыв соединения и реальная доставка Telegram не проверены. + +Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ записи unknown, без реальных сообщений. План, журнал этапа и протокол синхронизированы; локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index a8c3161b..a4fa0be2 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -201,3 +201,13 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 ## Q-1 production claim — 2026-10-08 12.5.37 [realPG/productiondispatcher](ux-ui/acceptance/outbox-claim-2026-10-08.json) passed:2blockedclaims/interceptedsender1/sentfixture1/history1/no duplicatecall. Реальныхсообщений0; fakeTelegramsettings/fetchзамена сняты, fixtureудалена/DBcountbaseline восстановлен. Q-1принятдляодногопроцесса/несколькихPGconnections, не реальнаяTelegramдоставка. Runtimeпрежний. Следующий12.5.38 — SQLsettlementfailure послеfixtureacceptedresponse. + +## 12.5.38 — ошибки сохранения после принятого ответа отправителя (2026-10-08) + +[Отчёт PostgreSQL](ux-ui/acceptance/outbox-settlement-2026-10-08.json): production dispatchPendingOutbox из backend8782054, отдельная БД mmapp_acceptance_20261007. Telegram fetch перехвачен внутри изолированного процесса и возвращает ok=true; реальных сообщений не отправлено. + +Реальный BEFORE INSERT trigger отклонил запись истории: транзакция settlement откатилась, outbox перешёл в unknown, история отсутствует. Повторный dispatcher не вызывает отправителя. После явно подтверждённого повторения синтетической записи проверена другая граница: PostgreSQL действительно выполнил COMMIT, затем обёртка node-pg ввела ошибку получения подтверждения. Outbox остался sent с resolution_version=1, история содержит ровно одну строку sent_ok=true; попытка hold не перезаписала подтверждённое состояние. Следующий dispatcher не повторил отправку. Поле result.sent=1 отражает принятый подменённый API-ответ и само по себе не подтверждает сохранение или реальную доставку. + +Тестовые outbox/history/trigger/function удалены; исходные настройки Telegram восстановлены из памяти, fetch возвращён, pool и контейнер завершены. Основная БД и runtime не менялись. Это проверка SQL rollback и границы подтверждения COMMIT в одном процессе; физический разрыв соединения и реальная доставка Telegram не проверены. + +Следующий блок 12.5.39 — неопределённый ответ отправителя и отказ записи unknown, без реальных сообщений. План, журнал этапа и протокол синхронизированы; локальный коммит без push. diff --git a/docs/ux-ui/acceptance/outbox-settlement-2026-10-08.json b/docs/ux-ui/acceptance/outbox-settlement-2026-10-08.json new file mode 100644 index 00000000..9689e610 --- /dev/null +++ b/docs/ux-ui/acceptance/outbox-settlement-2026-10-08.json @@ -0,0 +1,60 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054", + "database": "mmapp_acceptance_20261007", + "cases": [ + { + "case": "history-insert-failure", + "result": { + "sent": 1, + "failed": 0, + "held": 1, + "errors": [ + "outbox acceptance-claim-1791442930116: Telegram API принял сообщение, но запись результата в БД не подтверждена" + ] + }, + "saved": { + "id": "acceptance-claim-1791442930116", + "status": "unknown", + "retry_count": 0, + "resolution_version": 0 + }, + "historyRows": 0, + "senderCalls": 1, + "noAutomaticRetry": true + }, + { + "case": "commit-acknowledgement-loss", + "result": { + "sent": 1, + "failed": 0, + "held": 1, + "errors": [ + "outbox acceptance-claim-1791442930116: Telegram API принял сообщение, но запись результата в БД не подтверждена. Сохранение статуса не подтверждено; processing не повторяется автоматически" + ] + }, + "saved": { + "id": "acceptance-claim-1791442930116", + "status": "sent", + "retry_count": 0, + "resolution_version": 1 + }, + "history": [ + { + "id": "acceptance-claim-1791442930116-history", + "sent_ok": true + } + ], + "injectedAfterRealCommit": true, + "noFalseUnknownOverwrite": true, + "noAutomaticRetry": true + } + ], + "interceptedSenderCalls": 2, + "realExternalMessages": 0, + "limits": [ + "Telegram response intercepted in-process; no actual delivery claim", + "SQL history failure real trigger; COMMIT ack fault injected at node-pg boundary after actual COMMIT", + "Single test process, no physical network-disconnect or multi-instance proof" + ] +} \ No newline at end of file