From 06d73c50cca12130216b1740ae5c1758d29fa907 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Thu, 8 Oct 2026 10:53:03 +0700 Subject: [PATCH] =?UTF-8?q?chore(test):=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D1=82=D1=8C=20=D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BD=D1=83=D1=8E=20=D0=B4=D0=B5=D0=B4=D1=83?= =?UTF-8?q?=D0=BF=D0=BB=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=20=D0=B2=20PostgreSQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-external-acceptance.md | 4 +++ docs/ux-ui-plan.md | 4 +-- docs/ux-ui-progress.md | 10 ++++++- docs/ux-ui-stage-12.md | 10 ++++++- docs/ux-ui-test-server.md | 4 +++ .../acceptance/outbox-dedupe-2026-10-08.json | 26 +++++++++++++++++++ 6 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 docs/ux-ui/acceptance/outbox-dedupe-2026-10-08.json diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 71b81fb0..bab83079 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -177,3 +177,7 @@ BGP-prefix evaluator, отдельное live GRE расписание и recove ## UDP native/API/history/UI — 2026-10-08 12.5.34 [UDPtransmit3s](ux-ui/acceptance/speed-udp-2026-10-08.json) passed: HTTP200/native done testing, TXmeasured/RXnull, Ping53ms0%loss; independenthistory/realbrowserUDP/done/unknownRX/320fits/JS0. Mainhistory8→9 намеренно. Rate cap не задавался, ограничение поduration3s; packet-deliveryratio/benchmark не заявлены. КонфигурацияRouterOS/пароли/runtimebackend8782054/frontendf194e72 прежние. Следующий12.5.35 — Q-6 PostgreSQL dedupe без реальнойотправки сообщений. Остальной12.5 открыт. + +## Q-6 dedupe — 2026-10-08 + +12.5.35 [productionenqueue/PG race](ux-ui/acceptance/outbox-dedupe-2026-10-08.json) passed:2blockedINSERTs/receipts true-false/однаpendingстрока/повторfalse. Fixtureудалена/countbaseline восстановлен; dispatcherне запускался/сообщений0, mainruntime прежний. Q-6 принят; следующий12.5.36 — Q-4 unknownretry/version без отправки. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 4f71edee..b9c842d4 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-08: 12.5.34 завершён — реальный UDPtransmit3s1→2 done/HTTP200, API/history/UI совпали, RXnull/«Неизвестно», Ping53ms0%loss,320fits/JS0. Mainhistory8→9 намеренно. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.35 — Q-6: конкурентный enqueue/dedupe в выделенномPostgreSQL без отправки сообщений; busy/disconnect/abort и остальные12.5 открыты. +Актуальное продолжение 2026-10-08: 12.5.35 Q-6 passed на выделенномPG: два productionenqueue INSERT подреальнойблокировкой, receipts true/false, однаpendingстрока, повторотклонён. Fixtureудалена, сообщений0. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.36 — Q-4 конкурентный unknown retry/version check без отправки сообщений. Общий план проекта 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; следующий12.5.35 — PostgreSQL enqueue/dedupe Q-6 без отправки сообщений. [Протокол](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; следующий12.5.36 — unknownretry/versionQ-4 без отправки. [Протокол](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 55da8629..e2d950fa 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-08: 12.5.34 завершён — реальный UDPtransmit3s1→2 done/HTTP200, API/history/UI совпали, RXnull/«Неизвестно», Ping53ms0%loss,320fits/JS0. Mainhistory8→9 намеренно. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.35 — Q-6: конкурентный enqueue/dedupe в выделенномPostgreSQL без отправки сообщений; busy/disconnect/abort и остальные12.5 открыты. +Актуальное продолжение 2026-10-08: 12.5.35 Q-6 passed на выделенномPG: два productionenqueue INSERT подреальнойблокировкой, receipts true/false, однаpendingстрока, повторотклонён. Fixtureудалена, сообщений0. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.36 — Q-4 конкурентный unknown retry/version check без отправки сообщений. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -34,6 +34,14 @@ | 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.35 — PostgreSQL dedupe конкурентного enqueue (2026-10-08) + +[Q-6 real PG evidence](ux-ui/acceptance/outbox-dedupe-2026-10-08.json): production function enqueueTelegramOutbox/source8782054, dedicatedmmapp_acceptance_20261007. Guard проверил имяБД. Scheduler admission закрыт внутри тестового процесса; dispatcher/Telegram sender не вызывались. + +Две настоящие production INSERT сразнымиid/однимdedupekey одновременно ждали LOCK TABLEalert_outbox IN SHARE MODE: независимыйobserver увидел2Lockwaiters. ПослеCOMMIT holder обеоперации завершились, receipts[true,false]. SQL подтвердил однуpendingстроку/version0 сidпобедителя. Последующийenqueue стемжеключомвернулfalse, строкпо-прежнему1. Это реальная uniqueconstraint гонка/productionenqueue, не mockDB. + +Fixture удалена, countoutbox совпал сbaseline, транзакция/соединения закрыты, container--rm удалён; основнойстенд/БД не затрагивались. Сообщений отправлено0. Q-6 принят в этих границах; claim/send/settlement/Q-1–5/7–8 отдельно не проверены. Продуктовыйкод/runtime прежний. Следующий12.5.36 — Q-4: конкурентныйunknownretry/expectedVersion без отправки сообщений. План/паспорт/протокол обновлены; локальный коммит без push. + ## 12.5.34 — короткий UDP native test и реальная история UI (2026-10-08) Пятичасовой остаток перед блоком13%; выполнен один самостоятельный тест без изменениякода/образов. [Real native/API/browser evidence](ux-ui/acceptance/speed-udp-2026-10-08.json): основной стендbackend8782054/frontendf194e72, CHR1→CHR2, UDP/transmit/duration3s. HTTP/RouterOS-моков нет. Один POST, native connecting/running/done testing, HTTP200 за10.3s; TX3712.811856Mbps, RXnull, after-ping53ms/0%loss. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index ffa132ef..36995b52 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.34 завершён — реальный UDPtransmit3s1→2 done/HTTP200, API/history/UI совпали, RXnull/«Неизвестно», Ping53ms0%loss,320fits/JS0. Mainhistory8→9 намеренно. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.35 — Q-6: конкурентный enqueue/dedupe в выделенномPostgreSQL без отправки сообщений; busy/disconnect/abort и остальные12.5 открыты. +Актуальное продолжение 2026-10-08: 12.5.35 Q-6 passed на выделенномPG: два productionenqueue INSERT подреальнойблокировкой, receipts true/false, однаpendingстрока, повторотклонён. Fixtureудалена, сообщений0. Runtimebackend8782054/frontendf194e72 прежний. Следующий12.5.36 — Q-4 конкурентный unknown retry/version check без отправки сообщений. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1322,3 +1322,11 @@ Mainhistory6→8 намеренно: ровно две записи этой п Это трёхсекундная функциональнаяпроверка; rate cap текущийAPI не задаёт, нагрузка ограничена длительностью. ЗначениеsenderTX и последующийPing не доказываютUDPpacket-deliveryratio приёмника или устойчивуюпропускнуюспособность. НовыеUDP directions/размерыpacket/длительнаянагрузка не проверялись. RouterOSконфигурация/пароли/сnapshotпроб (runбезprobeId) не менялись; продуктовыйкод иобразы прежние. Следующий12.5.35 — Q-6: конкурентный enqueue с однимdedupekey в выделенномPostgreSQL, без фактическойотправки сообщений. ROS-2busy/disconnect/abort, профильныесетевыеоперации/Q/интеграции иполный12.5 остаютсяоткрытыми. План/паспорт/протокол обновлены; локальный коммит без push. + +## 12.5.35 — PostgreSQL dedupe конкурентного enqueue (2026-10-08) + +[Q-6 real PG evidence](ux-ui/acceptance/outbox-dedupe-2026-10-08.json): production function enqueueTelegramOutbox/source8782054, dedicatedmmapp_acceptance_20261007. Guard проверил имяБД. Scheduler admission закрыт внутри тестового процесса; dispatcher/Telegram sender не вызывались. + +Две настоящие production INSERT сразнымиid/однимdedupekey одновременно ждали LOCK TABLEalert_outbox IN SHARE MODE: независимыйobserver увидел2Lockwaiters. ПослеCOMMIT holder обеоперации завершились, receipts[true,false]. SQL подтвердил однуpendingстроку/version0 сidпобедителя. Последующийenqueue стемжеключомвернулfalse, строкпо-прежнему1. Это реальная uniqueconstraint гонка/productionenqueue, не mockDB. + +Fixture удалена, countoutbox совпал сbaseline, транзакция/соединения закрыты, container--rm удалён; основнойстенд/БД не затрагивались. Сообщений отправлено0. Q-6 принят в этих границах; claim/send/settlement/Q-1–5/7–8 отдельно не проверены. Продуктовыйкод/runtime прежний. Следующий12.5.36 — Q-4: конкурентныйunknownretry/expectedVersion без отправки сообщений. План/паспорт/протокол обновлены; локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 45c80568..ce5ba8e0 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -185,3 +185,7 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 ## UDP native/API/history/UI — 2026-10-08 12.5.34 [UDPtransmit3s](ux-ui/acceptance/speed-udp-2026-10-08.json) passed: HTTP200/native done testing, TXmeasured/RXnull, Ping53ms0%loss; independenthistory/realbrowserUDP/done/unknownRX/320fits/JS0. Mainhistory8→9 намеренно. Rate cap не задавался, ограничение поduration3s; packet-deliveryratio/benchmark не заявлены. КонфигурацияRouterOS/пароли/runtimebackend8782054/frontendf194e72 прежние. Следующий12.5.35 — Q-6 PostgreSQL dedupe без реальнойотправки сообщений. Остальной12.5 открыт. + +## Q-6 dedupe — 2026-10-08 + +12.5.35 [productionenqueue/PG race](ux-ui/acceptance/outbox-dedupe-2026-10-08.json) passed:2blockedINSERTs/receipts true-false/однаpendingстрока/повторfalse. Fixtureудалена/countbaseline восстановлен; dispatcherне запускался/сообщений0, mainruntime прежний. Q-6 принят; следующий12.5.36 — Q-4 unknownretry/version без отправки. diff --git a/docs/ux-ui/acceptance/outbox-dedupe-2026-10-08.json b/docs/ux-ui/acceptance/outbox-dedupe-2026-10-08.json new file mode 100644 index 00000000..bd12df4c --- /dev/null +++ b/docs/ux-ui/acceptance/outbox-dedupe-2026-10-08.json @@ -0,0 +1,26 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054", + "database": "mmapp_acceptance_20261007", + "productionFunction": "enqueueTelegramOutbox", + "actualConcurrentBlockedInserts": 2, + "receipts": [ + true, + false + ], + "rows": [ + { + "id": "acceptance-dedupe-1791431500914-a", + "dedupe_key": "acceptance-dedupe-1791431500914", + "status": "pending", + "resolution_version": 0 + } + ], + "sequentialDuplicateRejected": true, + "externalMessagesSent": 0, + "limits": [ + "No dispatcher invoked; Telegram delivery not tested", + "One backend process, multiple real pool connections; unique dedupe constraint exercised", + "Not Q-1 claim/settlement/unknown retry proof" + ] +} \ No newline at end of file