diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 50ddc207..0a4a4331 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/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. 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/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). @@ -2340,3 +2340,17 @@ Backend ux-peak194/version1.0.0-test.peak194 развёрнут, frontend ux-pea Протоколы: [SQL](ux-ui/acceptance/traffic-lock194-sql194-result.json), [source](ux-ui/acceptance/traffic-lock194-source194-result.json), [compiled](ux-ui/acceptance/traffic-lock194-compiled194-result.json), [runtime](ux-ui/acceptance/traffic-lock194-runtime194-result.json), [API](ux-ui/acceptance/traffic-lock194-peak194-api-result.json), [live UI](ux-ui/acceptance/traffic-collection-lock-deployed-2026-10-13.json). Границы: принято отсутствие параллельного traffic run при двух исправных process/session в одной БД, не координация всех writers приложения. Физическая потеря lock connection во время native GET/записи других pool connections не проверена; session lock не является fencing token. Не считать этот блок полной multi-instance/restore-drain/failover приёмкой. Следующий шаг — закончить и разобрать общую E2E192; затем отдельные multi-instance failures и внешние зависимости матрицы.12.5 открыта. + +## 12.5.192 — общая регрессия после накопленных изменений (2026-10-13) + +Завершена одна согласованная общая проверка:24 профиля backend из test:all прошли321237ms на собственной временной PostgreSQL БД с ограниченной ролью. Набор выполнялся на источнике191; backend193 request cache и194 collection lock после этого отдельно приняты актуальными полными traffic-rate SQL-профилями, build/source/compiled/API/live UI. Общие неизменённые разделы повторно не запускались. Протокол не приравнивает количество profiles к числу assertions или native операций. + +В исходном общем прогоне были3 реальные skip-сообщения: Monthly SQL, IPv6 UDP/worker/SQL и replay сохранённого CHR Ping payload. Они проверены отдельно: Monthly на собственной БД mm_accept_149_* подтвердил5 точных месячных интервалов, leap-year и exclusion outside rows; IPv6 на собственной mm_accept_144_* прошёл через собранный production worker с UDP/SQL/minute-hour-day totals и shutdown; Ping replay использовал сохранённый публичный payload без новых команд CHR. Первая IPv6 попытка на TypeScript worker harness не загрузила src/db/index.js; это ошибка запуска harness, исправлена запуском того же теста в JavaScript с реальным compiled worker. Не скрывать исходный отказ и не выдавать loopback UDP за public IPv6 WAN. DB/roles/containers всех проверок удалены, production DSN не копировался. + +Frontend:59 lib test files прошли с одной исправленной устаревшей проверкой dashboard-readers.test.ts. Ранее тест запрещал series:[null]; актуальная модель Ping намеренно допускает пропуски и переводит legacy measurements в unknown. Исправлен только тест: unknown/null проверен положительно, отрицательная/NaN series остаются rejected. Повторно прошли2 reader tests и4 соседних probe tests; runtime source/семантика не менялись. Scoped ESLint passed. + +Общий настроенный браузерный набор:1286 уникальных сценариев в217 файлах passed1936347ms (32.3min), unexpected0/skipped0/flaky0. Включены77 сценариев трафика; их повторные focused/full runs не прибавляются к1286. Настроенные testIgnore context suites и внешние native сценарии в эту цифру не входят. Промежуточный сигнал ошибки по форматированному выводу не подтвердился: итоговый JSON содержит0 unexpected.125 исходно чистых отслеживаемых screenshots, перезаписанных тестами, восстановлены;8 исходно изменённых пользовательских PNG сохранены отдельно и восстановлены с проверкой SHA256. Пользовательские skills/AGENTS/config не включались в commits. + +Протоколы: [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 остаётся открытой. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 33da6a8e..6724073b 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-13: завершены191/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-13. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-13 -Актуальное продолжение 2026-10-13: завершены191/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Этапы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/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 0bca4178..fc8ff216 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-13: завершены191/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,7 @@ | 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–191 и193–194;192 в проверке и ограничения ниже. Runtime backend ux-peak194/frontend ux-peak191. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–194 и ограничения ниже. Runtime backend ux-peak194/frontend ux-peak191. | ## 12.5.194 — трафик: координация опроса разных backend-процессов (2026-10-13) @@ -64,6 +64,20 @@ Backend build passed. Production backend ux-peak193/version1.0.0-test.peak193 р Общая регрессия192 начата на backend191; её24 backend профиля passed, текущий cache193 отдельно принят полным traffic-rate профилем. Не повторять общие неизменённые разделы. Полный браузерный прогон1286 ещё выполняется — не считать его завершённым. Исправлена ссылка live UI191: его evidence теперь хранится отдельно от исторического190, исходный протокол190 восстановлен. Следующий шаг — завершить192, разобрать ошибки полного E2E и восстановить только снимки текущего тестового запуска с сохранением8 исходно изменённых пользовательских PNG. Затем multi-instance/scale и внешние группы матрицы.12.5 открыта. +## 12.5.192 — общая регрессия после накопленных изменений (2026-10-13) + +Завершена одна согласованная общая проверка:24 профиля backend из test:all прошли321237ms на собственной временной PostgreSQL БД с ограниченной ролью. Набор выполнялся на источнике191; backend193 request cache и194 collection lock после этого отдельно приняты актуальными полными traffic-rate SQL-профилями, build/source/compiled/API/live UI. Общие неизменённые разделы повторно не запускались. Протокол не приравнивает количество profiles к числу assertions или native операций. + +В исходном общем прогоне были3 реальные skip-сообщения: Monthly SQL, IPv6 UDP/worker/SQL и replay сохранённого CHR Ping payload. Они проверены отдельно: Monthly на собственной БД mm_accept_149_* подтвердил5 точных месячных интервалов, leap-year и exclusion outside rows; IPv6 на собственной mm_accept_144_* прошёл через собранный production worker с UDP/SQL/minute-hour-day totals и shutdown; Ping replay использовал сохранённый публичный payload без новых команд CHR. Первая IPv6 попытка на TypeScript worker harness не загрузила src/db/index.js; это ошибка запуска harness, исправлена запуском того же теста в JavaScript с реальным compiled worker. Не скрывать исходный отказ и не выдавать loopback UDP за public IPv6 WAN. DB/roles/containers всех проверок удалены, production DSN не копировался. + +Frontend:59 lib test files прошли с одной исправленной устаревшей проверкой dashboard-readers.test.ts. Ранее тест запрещал series:[null]; актуальная модель Ping намеренно допускает пропуски и переводит legacy measurements в unknown. Исправлен только тест: unknown/null проверен положительно, отрицательная/NaN series остаются rejected. Повторно прошли2 reader tests и4 соседних probe tests; runtime source/семантика не менялись. Scoped ESLint passed. + +Общий настроенный браузерный набор:1286 уникальных сценариев в217 файлах passed1936347ms (32.3min), unexpected0/skipped0/flaky0. Включены77 сценариев трафика; их повторные focused/full runs не прибавляются к1286. Настроенные testIgnore context suites и внешние native сценарии в эту цифру не входят. Промежуточный сигнал ошибки по форматированному выводу не подтвердился: итоговый JSON содержит0 unexpected.125 исходно чистых отслеживаемых screenshots, перезаписанных тестами, восстановлены;8 исходно изменённых пользовательских PNG сохранены отдельно и восстановлены с проверкой SHA256. Пользовательские skills/AGENTS/config не включались в commits. + +Протоколы: [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.191 — подтверждённый общий пик привязок: реализация и приёмка (2026-10-13) Исправлен baseline ниже: индивидуальные максимумы в разные моменты больше не складываются. A=100Mbps на первой волне и B=100Mbps на следующей дают общий пик100, совпадающие интервалы —200. Сумма byte deltas/учтённый объём сохранена. Пик является максимумом подтверждённых средних скоростей соседних счётчиков за совпадающие интервалы, а не мгновенным максимумом линии или максимумом chart bucket average. diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index ca3cffde..75722735 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,6 +1,6 @@ # Оставшаяся внешняя приёмка — 2026-10-13 -Актуальное продолжение 2026-10-13: завершены191/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Это актуальная матрица после 12.5.194. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. @@ -26,8 +26,8 @@ ## Следующая последовательность — 2026-10-13 -1. **192 — общая регрессия:** завершить полный E2E1286, разобрать ошибки; backend24 профиля/отдельные SQL controls и frontend59 test files уже проверены.191 temporal peak и193 request cache приняты, runtime backend194/frontend191;194 cross-process traffic skip/recovery принят в указанных границах. -2. **Профильный контроль:** проверить изменённые readers/API/UI и актуальный runtime; полную регрессию выполнить один раз после согласованного завершения доработок. +1. **195 — failure/recovery межпроцессного опроса:** проверить аварийное завершение holder процесса и неопределённость lock connection в собственной БД, не приравнивая session lock к fencing. Общая192 E2E1286/backend24 профиля/frontend59 files принята; runtime backend194/frontend191. +2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания. 3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций. Каждый блок: конкретный результат → профильные проверки → независимая сверка cleanup → датированная запись → локальный коммит без push. Не повторять уже принятые сценарии без изменения исходников или нового выявленного риска. @@ -1256,3 +1256,17 @@ Backend ux-peak194/version1.0.0-test.peak194 развёрнут, frontend ux-pea Протоколы: [SQL](ux-ui/acceptance/traffic-lock194-sql194-result.json), [source](ux-ui/acceptance/traffic-lock194-source194-result.json), [compiled](ux-ui/acceptance/traffic-lock194-compiled194-result.json), [runtime](ux-ui/acceptance/traffic-lock194-runtime194-result.json), [API](ux-ui/acceptance/traffic-lock194-peak194-api-result.json), [live UI](ux-ui/acceptance/traffic-collection-lock-deployed-2026-10-13.json). Границы: принято отсутствие параллельного traffic run при двух исправных process/session в одной БД, не координация всех writers приложения. Физическая потеря lock connection во время native GET/записи других pool connections не проверена; session lock не является fencing token. Не считать этот блок полной multi-instance/restore-drain/failover приёмкой. Следующий шаг — закончить и разобрать общую E2E192; затем отдельные multi-instance failures и внешние зависимости матрицы.12.5 открыта. + +## 12.5.192 — общая регрессия после накопленных изменений (2026-10-13) + +Завершена одна согласованная общая проверка:24 профиля backend из test:all прошли321237ms на собственной временной PostgreSQL БД с ограниченной ролью. Набор выполнялся на источнике191; backend193 request cache и194 collection lock после этого отдельно приняты актуальными полными traffic-rate SQL-профилями, build/source/compiled/API/live UI. Общие неизменённые разделы повторно не запускались. Протокол не приравнивает количество profiles к числу assertions или native операций. + +В исходном общем прогоне были3 реальные skip-сообщения: Monthly SQL, IPv6 UDP/worker/SQL и replay сохранённого CHR Ping payload. Они проверены отдельно: Monthly на собственной БД mm_accept_149_* подтвердил5 точных месячных интервалов, leap-year и exclusion outside rows; IPv6 на собственной mm_accept_144_* прошёл через собранный production worker с UDP/SQL/minute-hour-day totals и shutdown; Ping replay использовал сохранённый публичный payload без новых команд CHR. Первая IPv6 попытка на TypeScript worker harness не загрузила src/db/index.js; это ошибка запуска harness, исправлена запуском того же теста в JavaScript с реальным compiled worker. Не скрывать исходный отказ и не выдавать loopback UDP за public IPv6 WAN. DB/roles/containers всех проверок удалены, production DSN не копировался. + +Frontend:59 lib test files прошли с одной исправленной устаревшей проверкой dashboard-readers.test.ts. Ранее тест запрещал series:[null]; актуальная модель Ping намеренно допускает пропуски и переводит legacy measurements в unknown. Исправлен только тест: unknown/null проверен положительно, отрицательная/NaN series остаются rejected. Повторно прошли2 reader tests и4 соседних probe tests; runtime source/семантика не менялись. Scoped ESLint passed. + +Общий настроенный браузерный набор:1286 уникальных сценариев в217 файлах passed1936347ms (32.3min), unexpected0/skipped0/flaky0. Включены77 сценариев трафика; их повторные focused/full runs не прибавляются к1286. Настроенные testIgnore context suites и внешние native сценарии в эту цифру не входят. Промежуточный сигнал ошибки по форматированному выводу не подтвердился: итоговый JSON содержит0 unexpected.125 исходно чистых отслеживаемых screenshots, перезаписанных тестами, восстановлены;8 исходно изменённых пользовательских PNG сохранены отдельно и восстановлены с проверкой SHA256. Пользовательские skills/AGENTS/config не включались в commits. + +Протоколы: [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 остаётся открытой. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index ef278c6e..188f3a28 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/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -3645,3 +3645,17 @@ Backend ux-peak194/version1.0.0-test.peak194 развёрнут, frontend ux-pea Протоколы: [SQL](ux-ui/acceptance/traffic-lock194-sql194-result.json), [source](ux-ui/acceptance/traffic-lock194-source194-result.json), [compiled](ux-ui/acceptance/traffic-lock194-compiled194-result.json), [runtime](ux-ui/acceptance/traffic-lock194-runtime194-result.json), [API](ux-ui/acceptance/traffic-lock194-peak194-api-result.json), [live UI](ux-ui/acceptance/traffic-collection-lock-deployed-2026-10-13.json). Границы: принято отсутствие параллельного traffic run при двух исправных process/session в одной БД, не координация всех writers приложения. Физическая потеря lock connection во время native GET/записи других pool connections не проверена; session lock не является fencing token. Не считать этот блок полной multi-instance/restore-drain/failover приёмкой. Следующий шаг — закончить и разобрать общую E2E192; затем отдельные multi-instance failures и внешние зависимости матрицы.12.5 открыта. + +## 12.5.192 — общая регрессия после накопленных изменений (2026-10-13) + +Завершена одна согласованная общая проверка:24 профиля backend из test:all прошли321237ms на собственной временной PostgreSQL БД с ограниченной ролью. Набор выполнялся на источнике191; backend193 request cache и194 collection lock после этого отдельно приняты актуальными полными traffic-rate SQL-профилями, build/source/compiled/API/live UI. Общие неизменённые разделы повторно не запускались. Протокол не приравнивает количество profiles к числу assertions или native операций. + +В исходном общем прогоне были3 реальные skip-сообщения: Monthly SQL, IPv6 UDP/worker/SQL и replay сохранённого CHR Ping payload. Они проверены отдельно: Monthly на собственной БД mm_accept_149_* подтвердил5 точных месячных интервалов, leap-year и exclusion outside rows; IPv6 на собственной mm_accept_144_* прошёл через собранный production worker с UDP/SQL/minute-hour-day totals и shutdown; Ping replay использовал сохранённый публичный payload без новых команд CHR. Первая IPv6 попытка на TypeScript worker harness не загрузила src/db/index.js; это ошибка запуска harness, исправлена запуском того же теста в JavaScript с реальным compiled worker. Не скрывать исходный отказ и не выдавать loopback UDP за public IPv6 WAN. DB/roles/containers всех проверок удалены, production DSN не копировался. + +Frontend:59 lib test files прошли с одной исправленной устаревшей проверкой dashboard-readers.test.ts. Ранее тест запрещал series:[null]; актуальная модель Ping намеренно допускает пропуски и переводит legacy measurements в unknown. Исправлен только тест: unknown/null проверен положительно, отрицательная/NaN series остаются rejected. Повторно прошли2 reader tests и4 соседних probe tests; runtime source/семантика не менялись. Scoped ESLint passed. + +Общий настроенный браузерный набор:1286 уникальных сценариев в217 файлах passed1936347ms (32.3min), unexpected0/skipped0/flaky0. Включены77 сценариев трафика; их повторные focused/full runs не прибавляются к1286. Настроенные testIgnore context suites и внешние native сценарии в эту цифру не входят. Промежуточный сигнал ошибки по форматированному выводу не подтвердился: итоговый JSON содержит0 unexpected.125 исходно чистых отслеживаемых screenshots, перезаписанных тестами, восстановлены;8 исходно изменённых пользовательских PNG сохранены отдельно и восстановлены с проверкой SHA256. Пользовательские skills/AGENTS/config не включались в commits. + +Протоколы: [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 остаётся открытой. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 9c61ede6..7ae85089 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/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. | Параметр | Проверенное состояние | | --- | --- | @@ -708,7 +708,7 @@ flowchart LR ## 12.5.77 — основной блок IPsec (2026-10-09) -Актуальное продолжение 2026-10-13: завершены191/193/194 — temporal peak, request cache, межпроцессная блокировка опроса трафика. Runtime backend ux-peak194/frontend ux-peak191 healthy/API/live UI2 passed; traffic ownSQL71+cross-process sequence passed53237ms.192: общая backend24 профиля/отдельные SQL controls/frontend59 test files приняты; полный E2E1286 ещё выполняется, итог ещё не принят.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 открыта. Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). @@ -2071,3 +2071,17 @@ Backend ux-peak194/version1.0.0-test.peak194 развёрнут, frontend ux-pea Протоколы: [SQL](ux-ui/acceptance/traffic-lock194-sql194-result.json), [source](ux-ui/acceptance/traffic-lock194-source194-result.json), [compiled](ux-ui/acceptance/traffic-lock194-compiled194-result.json), [runtime](ux-ui/acceptance/traffic-lock194-runtime194-result.json), [API](ux-ui/acceptance/traffic-lock194-peak194-api-result.json), [live UI](ux-ui/acceptance/traffic-collection-lock-deployed-2026-10-13.json). Границы: принято отсутствие параллельного traffic run при двух исправных process/session в одной БД, не координация всех writers приложения. Физическая потеря lock connection во время native GET/записи других pool connections не проверена; session lock не является fencing token. Не считать этот блок полной multi-instance/restore-drain/failover приёмкой. Следующий шаг — закончить и разобрать общую E2E192; затем отдельные multi-instance failures и внешние зависимости матрицы.12.5 открыта. + +## 12.5.192 — общая регрессия после накопленных изменений (2026-10-13) + +Завершена одна согласованная общая проверка:24 профиля backend из test:all прошли321237ms на собственной временной PostgreSQL БД с ограниченной ролью. Набор выполнялся на источнике191; backend193 request cache и194 collection lock после этого отдельно приняты актуальными полными traffic-rate SQL-профилями, build/source/compiled/API/live UI. Общие неизменённые разделы повторно не запускались. Протокол не приравнивает количество profiles к числу assertions или native операций. + +В исходном общем прогоне были3 реальные skip-сообщения: Monthly SQL, IPv6 UDP/worker/SQL и replay сохранённого CHR Ping payload. Они проверены отдельно: Monthly на собственной БД mm_accept_149_* подтвердил5 точных месячных интервалов, leap-year и exclusion outside rows; IPv6 на собственной mm_accept_144_* прошёл через собранный production worker с UDP/SQL/minute-hour-day totals и shutdown; Ping replay использовал сохранённый публичный payload без новых команд CHR. Первая IPv6 попытка на TypeScript worker harness не загрузила src/db/index.js; это ошибка запуска harness, исправлена запуском того же теста в JavaScript с реальным compiled worker. Не скрывать исходный отказ и не выдавать loopback UDP за public IPv6 WAN. DB/roles/containers всех проверок удалены, production DSN не копировался. + +Frontend:59 lib test files прошли с одной исправленной устаревшей проверкой dashboard-readers.test.ts. Ранее тест запрещал series:[null]; актуальная модель Ping намеренно допускает пропуски и переводит legacy measurements в unknown. Исправлен только тест: unknown/null проверен положительно, отрицательная/NaN series остаются rejected. Повторно прошли2 reader tests и4 соседних probe tests; runtime source/семантика не менялись. Scoped ESLint passed. + +Общий настроенный браузерный набор:1286 уникальных сценариев в217 файлах passed1936347ms (32.3min), unexpected0/skipped0/flaky0. Включены77 сценариев трафика; их повторные focused/full runs не прибавляются к1286. Настроенные testIgnore context suites и внешние native сценарии в эту цифру не входят. Промежуточный сигнал ошибки по форматированному выводу не подтвердился: итоговый JSON содержит0 unexpected.125 исходно чистых отслеживаемых screenshots, перезаписанных тестами, восстановлены;8 исходно изменённых пользовательских PNG сохранены отдельно и восстановлены с проверкой SHA256. Пользовательские skills/AGENTS/config не включались в commits. + +Протоколы: [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 остаётся открытой. diff --git a/docs/ux-ui/acceptance/general-e2e-2026-10-13.json b/docs/ux-ui/acceptance/general-e2e-2026-10-13.json new file mode 100644 index 00000000..28fe8cc3 --- /dev/null +++ b/docs/ux-ui/acceptance/general-e2e-2026-10-13.json @@ -0,0 +1,21 @@ +{ + "date": "2026-10-13", + "block": "12.5.192", + "command": "playwright test --reporter=json", + "files": 217, + "stats": { + "startTime": "2026-10-13T07:00:55.640Z", + "duration": 1936347.118, + "expected": 1286, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "passed": true, + "scope": "Configured default E2E suite; ordinary HTTP fixtures; explicitly ignored context suites and external native tests not included", + "bounds": [ + "Source frontend behavior unchanged after191;193/194 backend separately verified in traffic SQL profiles", + "Includes77 traffic cases; do not add repeated focused runs to unique case count" + ], + "userScreenshotsPreserved": 8 +} diff --git a/docs/ux-ui/acceptance/general-frontend-units-2026-10-13.json b/docs/ux-ui/acceptance/general-frontend-units-2026-10-13.json new file mode 100644 index 00000000..2f6a5c39 --- /dev/null +++ b/docs/ux-ui/acceptance/general-frontend-units-2026-10-13.json @@ -0,0 +1,309 @@ +{ + "date": "2026-10-13", + "block": "12.5.192", + "files": 59, + "results": [ + { + "file": "lib\\wireguard-url-state.test.ts", + "passed": true, + "durationMs": 445 + }, + { + "file": "lib\\wg-export-peer.test.ts", + "passed": true, + "durationMs": 447 + }, + { + "file": "lib\\vxlan-export.test.ts", + "passed": true, + "durationMs": 409 + }, + { + "file": "lib\\user-save.test.ts", + "passed": true, + "durationMs": 466 + }, + { + "file": "lib\\traffic-observations.test.ts", + "passed": true, + "durationMs": 888 + }, + { + "file": "lib\\traffic-binding-status.test.ts", + "passed": true, + "durationMs": 405 + }, + { + "file": "lib\\terminal-response.test.ts", + "passed": true, + "durationMs": 897 + }, + { + "file": "lib\\statistics-range.test.ts", + "passed": true, + "durationMs": 433 + }, + { + "file": "lib\\statistics-context.test.ts", + "passed": true, + "durationMs": 396 + }, + { + "file": "lib\\speed-run-response.test.ts", + "passed": true, + "durationMs": 908 + }, + { + "file": "lib\\speed-probe-snapshot.test.ts", + "passed": true, + "durationMs": 992 + }, + { + "file": "lib\\speed-persistence-outcome.test.ts", + "passed": true, + "durationMs": 465 + }, + { + "file": "lib\\scheduler-run-snapshot.test.ts", + "passed": true, + "durationMs": 491 + }, + { + "file": "lib\\route-optimizer-routes.test.ts", + "passed": true, + "durationMs": 467 + }, + { + "file": "lib\\route-optimizer-response.test.ts", + "passed": true, + "durationMs": 1220 + }, + { + "file": "lib\\route-optimizer-observed.test.ts", + "passed": true, + "durationMs": 455 + }, + { + "file": "lib\\route-optimizer-assignment.test.ts", + "passed": true, + "durationMs": 603 + }, + { + "file": "lib\\release-metadata.test.ts", + "passed": true, + "durationMs": 460 + }, + { + "file": "lib\\recursive-route-url-state.test.ts", + "passed": true, + "durationMs": 426 + }, + { + "file": "lib\\proxy-backend-request.test.ts", + "passed": true, + "durationMs": 771 + }, + { + "file": "lib\\probe-url.test.ts", + "passed": true, + "durationMs": 450 + }, + { + "file": "lib\\probe-source.test.ts", + "passed": true, + "durationMs": 901 + }, + { + "file": "lib\\probe-schedule-response.test.ts", + "passed": true, + "durationMs": 949 + }, + { + "file": "lib\\probe-response.test.ts", + "passed": true, + "durationMs": 954 + }, + { + "file": "lib\\ospf-url-state.test.ts", + "passed": true, + "durationMs": 469 + }, + { + "file": "lib\\ospf-state.test.ts", + "passed": true, + "durationMs": 575 + }, + { + "file": "lib\\ospf-router-identity.test.ts", + "passed": true, + "durationMs": 2337 + }, + { + "file": "lib\\ospf-cost.test.ts", + "passed": true, + "durationMs": 475 + }, + { + "file": "lib\\network-map-url-state.test.ts", + "passed": true, + "durationMs": 454 + }, + { + "file": "lib\\network-map-response.test.ts", + "passed": true, + "durationMs": 1085 + }, + { + "file": "lib\\network-map-metrics.test.ts", + "passed": true, + "durationMs": 412 + }, + { + "file": "lib\\network-map-camera.test.ts", + "passed": true, + "durationMs": 465 + }, + { + "file": "lib\\gre-export.test.ts", + "passed": true, + "durationMs": 401 + }, + { + "file": "lib\\format-service-path-label.test.ts", + "passed": true, + "durationMs": 421 + }, + { + "file": "lib\\fmt-rate.test.ts", + "passed": true, + "durationMs": 474 + }, + { + "file": "lib\\evobgp-test-receipt.test.ts", + "passed": true, + "durationMs": 905 + }, + { + "file": "lib\\evobgp-catalog.test.ts", + "passed": true, + "durationMs": 3220 + }, + { + "file": "lib\\data-filters\\uptime-url-state.test.ts", + "passed": true, + "durationMs": 487 + }, + { + "file": "lib\\data-filters\\statistics-filter-query.test.ts", + "passed": true, + "durationMs": 444 + }, + { + "file": "lib\\data-filters\\server-url-state.test.ts", + "passed": true, + "durationMs": 596 + }, + { + "file": "lib\\data-filters\\bgp-url-state.test.ts", + "passed": true, + "durationMs": 432 + }, + { + "file": "lib\\data-filters\\backups-url-state.test.ts", + "passed": true, + "durationMs": 536 + }, + { + "file": "lib\\data-filters\\apply-filter-query.test.ts", + "passed": true, + "durationMs": 421 + }, + { + "file": "lib\\dashboard-traffic.test.ts", + "passed": true, + "durationMs": 954 + }, + { + "file": "lib\\dashboard-readers.test.ts", + "passed": true, + "initialFailure": { + "errorName": "Error", + "exitCode": 1, + "reason": "Stale expectation rejected nullable Ping history introduced previously" + }, + "rerunPassed": true + }, + { + "file": "lib\\dashboard-probes.test.ts", + "passed": true, + "durationMs": 1109 + }, + { + "file": "lib\\dashboard-permissions.test.ts", + "passed": true, + "durationMs": 502 + }, + { + "file": "lib\\dashboard-path-response.test.ts", + "passed": true, + "durationMs": 1097 + }, + { + "file": "lib\\dashboard-overlays.test.ts", + "passed": true, + "durationMs": 1008 + }, + { + "file": "lib\\dashboard-bgp.test.ts", + "passed": true, + "durationMs": 1134 + }, + { + "file": "lib\\containers-url-state.test.ts", + "passed": true, + "durationMs": 447 + }, + { + "file": "lib\\certificates-url-state.test.ts", + "passed": true, + "durationMs": 415 + }, + { + "file": "lib\\certificate-snapshots.test.ts", + "passed": true, + "durationMs": 1005 + }, + { + "file": "lib\\certificate-issue-poll.test.ts", + "passed": true, + "durationMs": 896 + }, + { + "file": "lib\\certificate-issue-checkpoint.test.ts", + "passed": true, + "durationMs": 946 + }, + { + "file": "lib\\backup-settings.test.ts", + "passed": true, + "durationMs": 862 + }, + { + "file": "lib\\backup-restore-checkpoint.test.ts", + "passed": true, + "durationMs": 914 + }, + { + "file": "lib\\backup-job-poll.test.ts", + "passed": true, + "durationMs": 894 + }, + { + "file": "lib\\backup-job-checkpoint.test.ts", + "passed": true, + "durationMs": 902 + } + ], + "passed": true, + "additionalFocusedProbeTests": 4 +} diff --git a/docs/ux-ui/acceptance/general192-owned192-result.json b/docs/ux-ui/acceptance/general192-owned192-result.json new file mode 100644 index 00000000..80d24257 --- /dev/null +++ b/docs/ux-ui/acceptance/general192-owned192-result.json @@ -0,0 +1,167 @@ +{ + "date": "2026-10-13", + "block": "12.5.192", + "scope": "full backend profile list on owned isolated PostgreSQL; no production DSN", + "database": "mm_accept_166_1791874576155", + "profiles": [ + { + "profile": "test:probes", + "passed": true, + "durationMs": 25521, + "actualSkipMessages": [ + "ping RTT recorded native payload replay: skipped; evidence file not present" + ] + }, + { + "profile": "test:exec", + "passed": true, + "durationMs": 7560, + "actualSkipMessages": [] + }, + { + "profile": "test:alert-engine", + "passed": true, + "durationMs": 16695, + "actualSkipMessages": [] + }, + { + "profile": "test:alerts-telegram", + "passed": true, + "durationMs": 14971, + "actualSkipMessages": [] + }, + { + "profile": "test:auth", + "passed": true, + "durationMs": 9884, + "actualSkipMessages": [] + }, + { + "profile": "test:wireguard", + "passed": true, + "durationMs": 12354, + "actualSkipMessages": [] + }, + { + "profile": "test:ipsec", + "passed": true, + "durationMs": 15947, + "actualSkipMessages": [] + }, + { + "profile": "test:traffic-rate", + "passed": true, + "durationMs": 36753, + "actualSkipMessages": [] + }, + { + "profile": "test:traffic-flow", + "passed": true, + "durationMs": 49457, + "actualSkipMessages": [ + "Monthly SQL: skip (requires an owned isolated database)", + "IPv6 UDP/worker/SQL: skip (requires an owned isolated database)" + ] + }, + { + "profile": "test:users", + "passed": true, + "durationMs": 7490, + "actualSkipMessages": [] + }, + { + "profile": "test:pg", + "passed": true, + "durationMs": 10421, + "actualSkipMessages": [] + }, + { + "profile": "test:backups", + "passed": true, + "durationMs": 9160, + "actualSkipMessages": [] + }, + { + "profile": "test:scheduler", + "passed": true, + "durationMs": 6200, + "actualSkipMessages": [] + }, + { + "profile": "test:live-maps", + "passed": true, + "durationMs": 21351, + "actualSkipMessages": [] + }, + { + "profile": "test:ospf-optimizer", + "passed": true, + "durationMs": 6652, + "actualSkipMessages": [] + }, + { + "profile": "test:recursive-routes", + "passed": true, + "durationMs": 4569, + "actualSkipMessages": [] + }, + { + "profile": "test:config-sync", + "passed": true, + "durationMs": 15267, + "actualSkipMessages": [] + }, + { + "profile": "test:ros-file", + "passed": true, + "durationMs": 1615, + "actualSkipMessages": [] + }, + { + "profile": "test:containers", + "passed": true, + "durationMs": 5078, + "actualSkipMessages": [] + }, + { + "profile": "test:certificates", + "passed": true, + "durationMs": 11789, + "actualSkipMessages": [] + }, + { + "profile": "test:netflow-settings", + "passed": true, + "durationMs": 4482, + "actualSkipMessages": [] + }, + { + "profile": "test:netflow-purge", + "passed": true, + "durationMs": 2986, + "actualSkipMessages": [] + }, + { + "profile": "test:evolution", + "passed": true, + "durationMs": 6488, + "actualSkipMessages": [] + }, + { + "profile": "test:system-database", + "passed": true, + "durationMs": 18547, + "actualSkipMessages": [] + } + ], + "passed": true, + "actualSkipMessageCount": 3, + "databaseRemoved": true, + "roleRemoved": true, + "testContainerRemoved": true, + "subsequentControls": { + "pingRecordedReplay": "passed; saved CHR payload, no new Ping commands", + "monthlyOwnedSql": "passed separately", + "ipv6UdpOwnedSql": "passed with compiled production worker; TypeScript worker harness failed first" + } +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/general192-ping-replay-result.json b/docs/ux-ui/acceptance/general192-ping-replay-result.json new file mode 100644 index 00000000..a7425fa7 --- /dev/null +++ b/docs/ux-ui/acceptance/general192-ping-replay-result.json @@ -0,0 +1 @@ +{"date": "2026-10-13", "block": "12.5.192", "passed": true, "scope": "saved public native payload replay; no new native commands"} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/general192-special-144-result.json b/docs/ux-ui/acceptance/general192-special-144-result.json new file mode 100644 index 00000000..046ed544 --- /dev/null +++ b/docs/ux-ui/acceptance/general192-special-144-result.json @@ -0,0 +1,11 @@ +{ + "date": "2026-10-13", + "block": "12.5.192", + "database": "mm_accept_144_1791875186435", + "script": "traffic-flow-ipv6-pipeline", + "passed": true, + "actualSqlExecuted": true, + "databaseRemoved": true, + "roleRemoved": true, + "testContainerRemoved": true +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/general192-special-149-result.json b/docs/ux-ui/acceptance/general192-special-149-result.json new file mode 100644 index 00000000..cb38f28b --- /dev/null +++ b/docs/ux-ui/acceptance/general192-special-149-result.json @@ -0,0 +1,11 @@ +{ + "date": "2026-10-13", + "block": "12.5.192", + "database": "mm_accept_149_1791874985903", + "script": "traffic-flow-month", + "passed": true, + "actualSqlExecuted": true, + "databaseRemoved": true, + "roleRemoved": true, + "testContainerRemoved": true +} \ No newline at end of file diff --git a/lib/dashboard-readers.test.ts b/lib/dashboard-readers.test.ts index e014b895..a3be44d0 100644 --- a/lib/dashboard-readers.test.ts +++ b/lib/dashboard-readers.test.ts @@ -9,5 +9,7 @@ test("dashboard server catalog validates identities and keeps unknown status",() }) test("dashboard probes validate real shape, uniqueness and numeric ranges before publication",()=>{ assert.equal(parseDashboardProbes({probes:[probe]}).probes[0].rtt,null);assert.deepEqual(parseDashboardProbes({probes:[]}),{probes:[],sampledAt:null}) - for(const raw of [{},{probes:[probe,probe]},{probes:[{...probe,loss:101}]},{probes:[{...probe,status:"invalid"}]},{probes:[{...probe,series:[null]}]},{probes:[{}]}])assert.throws(()=>parseDashboardProbes(raw)) + const legacyGap=parseDashboardProbes({probes:[{...probe,series:[null]}]}).probes[0] + assert.equal(legacyGap.status,"unknown");assert(legacyGap.series.every(v=>v===null)) + for(const raw of [{},{probes:[probe,probe]},{probes:[{...probe,loss:101}]},{probes:[{...probe,status:"invalid"}]},{probes:[{...probe,series:[-1]}]},{probes:[{...probe,series:[NaN]}]},{probes:[{}]}])assert.throws(()=>parseDashboardProbes(raw)) })