chore(tests): подтвердить общую регрессию интерфейса и backend

This commit is contained in:
Denozordec committed 2026-10-13 14:40:20 +07:00
1 parent b525e70655
commit efdfc6f224
13 files changed
+606 -14

No files matched your search

+16 -2
View File
@@ -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 остаётся открытой.
+3 -3
View File
@@ -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).
+16 -2
View File
@@ -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.
+17 -3
View File
@@ -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 остаётся открытой.
+15 -1
View File
@@ -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 остаётся открытой.
+16 -2
View File
@@ -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 остаётся открытой.
@@ -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
}
@@ -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
}
@@ -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"
}
}
@@ -0,0 +1 @@
{"date": "2026-10-13", "block": "12.5.192", "passed": true, "scope": "saved public native payload replay; no new native commands"}
@@ -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
}
@@ -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
}
+3 -1
View File
@@ -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))
})