diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index e8a48400..6248919a 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-10: завершён12.5.116 — DELETE клиента больше не угадывает certificate по display name; удаляется только прямо привязанный remote-certificate либо явно выбранный cert. PSK UI объясняет сохранение сертификатов. Backend114 state/8 scripts, build/TypeScript/ESLint, E2E28/28, live dialogs4/4/mobile PSK DELETE и native сохранение unbound cert ID passed; before bug доказан на собственном decoy. Backend/frontend ux-bound116/version1.0.0-test.bound116, cleanup13×2. Следующий117 — общая UI-регрессия (основной набор1244 запущен), контекст и сверка текущего source/runtime;12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.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). @@ -1189,3 +1189,21 @@ Before на backend114: создана собственная PSK identity с ma | Референс | Схема | | --- | --- | | [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → явная certificate связь → preflight → удаление выбранных объектов / сохранение несвязанных | + +## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10) + +Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed. + +Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA. + +Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет. + +Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git. + +Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json). + +Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт. + +| Референс | Схема | +| --- | --- | +| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe | diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 4a87c0f9..7c3f48d4 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-10: завершён12.5.116 — DELETE клиента больше не угадывает certificate по display name; удаляется только прямо привязанный remote-certificate либо явно выбранный cert. PSK UI объясняет сохранение сертификатов. Backend114 state/8 scripts, build/TypeScript/ESLint, E2E28/28, live dialogs4/4/mobile PSK DELETE и native сохранение unbound cert ID passed; before bug доказан на собственном decoy. Backend/frontend ux-bound116/version1.0.0-test.bound116, cleanup13×2. Следующий117 — общая UI-регрессия (основной набор1244 запущен), контекст и сверка текущего source/runtime;12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.12.5 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-10: завершён12.5.116 — DELETE клиента больше не угадывает certificate по display name; удаляется только прямо привязанный remote-certificate либо явно выбранный cert. PSK UI объясняет сохранение сертификатов. Backend114 state/8 scripts, build/TypeScript/ESLint, E2E28/28, live dialogs4/4/mobile PSK DELETE и native сохранение unbound cert ID passed; before bug доказан на собственном decoy. Backend/frontend ux-bound116/version1.0.0-test.bound116, cleanup13×2. Следующий117 — общая UI-регрессия (основной набор1244 запущен), контекст и сверка текущего source/runtime;12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.12.5 открыт. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index b74bf8e2..0a864fbf 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-10: завершён12.5.116 — DELETE клиента больше не угадывает certificate по display name; удаляется только прямо привязанный remote-certificate либо явно выбранный cert. PSK UI объясняет сохранение сертификатов. Backend114 state/8 scripts, build/TypeScript/ESLint, E2E28/28, live dialogs4/4/mobile PSK DELETE и native сохранение unbound cert ID passed; before bug доказан на собственном decoy. Backend/frontend ux-bound116/version1.0.0-test.bound116, cleanup13×2. Следующий117 — общая UI-регрессия (основной набор1244 запущен), контекст и сверка текущего source/runtime;12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.12.5 открыт. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,25 @@ | 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–116 и ограничения ниже. Runtime backend/frontend ux-bound116. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–117 и ограничения ниже. Runtime backend/frontend ux-bound116. | + +## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10) + +Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed. + +Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA. + +Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет. + +Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git. + +Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json). + +Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт. + +| Референс | Схема | +| --- | --- | +| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe | ## 12.5.116 — IPsec: не удалять сертификат, угаданный по имени PSK (2026-10-10) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index 4d99d8b6..e25c292f 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,6 +1,6 @@ # Оставшаяся внешняя приёмка — 2026-10-10 -Это актуальная матрица после 12.5.116. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.117. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend/frontend `ux-bound116`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. @@ -12,7 +12,7 @@ | GRE | Native lifecycle, metadata, live формы/меню/URL/Ping53–57; GRE используется в OSPF/BGP/IPsec последующих блоков; native IPv6 ULA inner109 | IPv6 outer и application IPv6 interface address lifecycle, независимые WAN, масштаб и длительное восстановление; принятие GRE не означает приёмку всех сценариев автоматического расписания | | WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74; native IPv6 ULA inner/allowedIps/handshake109 | Клиентские ОС и произвольные конфигурации, IPv6 outer/scale и application IPv6 interface address lifecycle, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel | | VXLAN | Собственная пара/private Ping/catalog/URL/export75–76; bridge/FDB/port loss/recovery107; IPv6 ULA inner по IPv4 outer108 | API приложения read-only: create/delete проверены native. IPv6 outer, масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты | -| IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116 | Реальные одновременные sessions с одним ID, Итоговая source/runtime сверка и общая регрессия текущей версии; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput | +| IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116 | Реальные одновременные sessions с одним ID, Legacy certificate export binding; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput | | OSPF/BFD | Real Full/own routes84–85, раздельные наблюдения BFD86, effective disabled/optimizer cost/partial/RBAC87, alternate path90 и CIDR91 | Sustained BFD-only gate не принят: в86 сосед мог вновь статьFull при доступныхHello. В90 переходный Ping18/40 с55% loss: бесшовность не принята. REST timing — наблюдаемая граница, не SLA; IPv6/scale/independent WAN открыты | | BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята | | Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята | @@ -25,7 +25,7 @@ ## Следующая последовательность 1. **12.5.95 завершён:** [source/context/compiled audit](ux-ui/acceptance/deployment-source-audit-2026-10-10.json), production source drift не выявлен; нормализация и исключения явно указаны. -2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN принят, initial0/3 и1/3 остаются в протоколе;109 — native GRE/WireGuard IPv6 inner принят; readers /ip/address не показывают native IPv6 interface addresses.110 — полный native DN/online исправлен и принят;111 — literal CN guards/real explicit FQDN accepted;112 — certificate/PSK alias ambiguity marked unknown/recovery accepted;113 — repeated native ID groups исправлены на controlled snapshots; 114 — multiple refs/target guards/native conflict приняты в описанных границах. 115 — UI сохранения сертификата/native DELETE принят; 116 — name-based guessing удалён/live PSK collision принят;117 — общая регрессия запущена. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение. +2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN принят, initial0/3 и1/3 остаются в протоколе;109 — native GRE/WireGuard IPv6 inner принят; readers /ip/address не показывают native IPv6 interface addresses.110 — полный native DN/online исправлен и принят;111 — literal CN guards/real explicit FQDN accepted;112 — certificate/PSK alias ambiguity marked unknown/recovery accepted;113 — repeated native ID groups исправлены на controlled snapshots; 114 — multiple refs/target guards/native conflict приняты в описанных границах. 115 — UI сохранения сертификата/native DELETE принят; 116 — name-based guessing удалён/live PSK collision принят;117 — main1243/1failed+delta1/context221/source runtime приняты в точных границах; следующий118 — legacy export binding. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение. 3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime. 4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически. @@ -104,3 +104,21 @@ Before на backend114: создана собственная PSK identity с ma | Референс | Схема | | --- | --- | | [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → явная certificate связь → preflight → удаление выбранных объектов / сохранение несвязанных | + +## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10) + +Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed. + +Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA. + +Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет. + +Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git. + +Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json). + +Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт. + +| Референс | Схема | +| --- | --- | +| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe | diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 1d1999b3..fd8428a1 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-10: завершён12.5.116 — DELETE клиента больше не угадывает certificate по display name; удаляется только прямо привязанный remote-certificate либо явно выбранный cert. PSK UI объясняет сохранение сертификатов. Backend114 state/8 scripts, build/TypeScript/ESLint, E2E28/28, live dialogs4/4/mobile PSK DELETE и native сохранение unbound cert ID passed; before bug доказан на собственном decoy. Backend/frontend ux-bound116/version1.0.0-test.bound116, cleanup13×2. Следующий117 — общая UI-регрессия (основной набор1244 запущен), контекст и сверка текущего source/runtime;12.5 открыт. +Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.12.5 открыт. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -2494,3 +2494,21 @@ Before на backend114: создана собственная PSK identity с ma | Референс | Схема | | --- | --- | | [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → явная certificate связь → preflight → удаление выбранных объектов / сохранение несвязанных | + +## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10) + +Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed. + +Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA. + +Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет. + +Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git. + +Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json). + +Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт. + +| Референс | Схема | +| --- | --- | +| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe | diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 4023e0ff..92d03c33 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-10 -Сервер161.104.46.222: backend/frontend ux-bound116/version1.0.0-test.bound116. Backend/PG healthy, четыре live PSK подтверждения/один mobile DELETE, unbound certificate native ID сохранён, исходная IKE сессия стабильна. Before name-collision bug доказан на своём decoy. Cleanup13×2, оба CHR доступны/пароли прежние. Следующий117 — общая UI-регрессия и source/runtime сверка. +Сервер161.104.46.222: backend/frontend ux-bound116/version1.0.0-test.bound116. Source905 проверен с явными exceptions, production drift0;984 emitted normalized files совпали. Read-only27×2 own fixtures0, servers2/migrations9, оба CHR доступны/пароли прежние. UI main1243+1 corrected delta/context221 приняты с original failure. Следующий118 — legacy certificate export binding. | Параметр | Проверенное состояние | | --- | --- | @@ -920,3 +920,21 @@ Before на backend114: создана собственная PSK identity с ma | Референс | Схема | | --- | --- | | [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → явная certificate связь → preflight → удаление выбранных объектов / сохранение несвязанных | + +## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10) + +Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed. + +Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA. + +Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет. + +Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git. + +Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json). + +Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт. + +| Референс | Схема | +| --- | --- | +| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe | diff --git a/docs/ux-ui/acceptance/regression-current-source-2026-10-10.json b/docs/ux-ui/acceptance/regression-current-source-2026-10-10.json new file mode 100644 index 00000000..c663c447 --- /dev/null +++ b/docs/ux-ui/acceptance/regression-current-source-2026-10-10.json @@ -0,0 +1,2406 @@ +{ + "date": "2026-10-10", + "block": "12.5.117", + "sourceBaselineCommit": "057b530364b7193ad74d770499d6e30ad7b24f20", + "source": { + "date": "2026-10-10", + "head": "057b530364b7193ad74d770499d6e30ad7b24f20", + "normalization": "CRLF to LF for text; binary unchanged", + "contexts": { + "frontend": { + "root": "/opt/mmapp-test/build-bound116-front", + "matchedCount": 515, + "matched": [ + "Dockerfile.frontend", + "app/(main)/alerts/page.tsx", + "app/(main)/asns/page.tsx", + "app/(main)/backups/page.tsx", + "app/(main)/bgp/page.tsx", + "app/(main)/certificates/page.tsx", + "app/(main)/communities/page.tsx", + "app/(main)/containers/page.tsx", + "app/(main)/dashboard/page.tsx", + "app/(main)/data-collection/page.tsx", + "app/(main)/domains/page.tsx", + "app/(main)/filters/page.tsx", + "app/(main)/firewall/page.tsx", + "app/(main)/gre/page.tsx", + "app/(main)/ip-ranges/page.tsx", + "app/(main)/ipsec/page.tsx", + "app/(main)/layout.tsx", + "app/(main)/loading.tsx", + "app/(main)/network-map/page.tsx", + "app/(main)/ospf/page.tsx", + "app/(main)/probes/page.tsx", + "app/(main)/recursive-routes/page.tsx", + "app/(main)/releases/page.tsx", + "app/(main)/route-optimizer/page.tsx", + "app/(main)/servers/page.tsx", + "app/(main)/settings/page.tsx", + "app/(main)/statistics/page.tsx", + "app/(main)/terminal/page.tsx", + "app/(main)/traffic/page.tsx", + "app/(main)/uptime/page.tsx", + "app/(main)/uptime/probe-rows.module.css", + "app/(main)/users/page.tsx", + "app/(main)/vxlan/page.tsx", + "app/(main)/wireguard/page.tsx", + "app/access-denied/page.tsx", + "app/api/system/database/backup/route.ts", + "app/api/system/database/restore/route.ts", + "app/auth/callback/page.tsx", + "app/globals.css", + "app/layout.tsx", + "app/page.tsx", + "components.json", + "components/alerts-group-form.tsx", + "components/alerts-outbox-panel.tsx", + "components/alerts-targets-status.tsx", + "components/alerts-telegram-form.tsx", + "components/app-sidebar.tsx", + "components/app-switcher.tsx", + "components/apps-menu.tsx", + "components/auth-guard.tsx", + "components/backups/backup-confirm-dialogs.tsx", + "components/backups/backup-create-sheet.tsx", + "components/backups/backups-history.tsx", + "components/backups/backups-settings.tsx", + "components/certificates/certificate-acme-settings.tsx", + "components/certificates/certificate-renew-settings.tsx", + "components/command-palette.tsx", + "components/config-history-sheet.tsx", + "components/dashboard/bandwidth-chart.tsx", + "components/dashboard/dashboard-data-status.tsx", + "components/dashboard/dashboard-events-timeline.tsx", + "components/dashboard/internet-path-map.tsx", + "components/dashboard/internet-path-panel.tsx", + "components/dashboard/internet-path-summary.tsx", + "components/dashboard/latency-chart.tsx", + "components/data-grids/asns-data-grid.tsx", + "components/data-grids/backups-data-grid.tsx", + "components/data-grids/bgp-session-detail.tsx", + "components/data-grids/bgp-sessions-data-grid.tsx", + "components/data-grids/certificate-days-cell.tsx", + "components/data-grids/certificate-expanded-detail.tsx", + "components/data-grids/certificate-observed-view.test.tsx", + "components/data-grids/certificates-data-grid.tsx", + "components/data-grids/communities-data-grid.tsx", + "components/data-grids/compact-data-grid.tsx", + "components/data-grids/dashboard-active-probes-data-grid.tsx", + "components/data-grids/data-collection-scheduler-data-grid.tsx", + "components/data-grids/domains-data-grid.tsx", + "components/data-grids/filters-data-grid.tsx", + "components/data-grids/firewall-rules-data-grid.tsx", + "components/data-grids/firewall-scenario-rules-data-grid.tsx", + "components/data-grids/gre-pools-data-grid.tsx", + "components/data-grids/gre-tunnels-data-grid.tsx", + "components/data-grids/ip-ranges-data-grid.tsx", + "components/data-grids/ospf-bfd-data-grid.tsx", + "components/data-grids/ospf-neighbors-data-grid.tsx", + "components/data-grids/ospf-routes-data-grid.tsx", + "components/data-grids/probes-schedule-data-grid.tsx", + "components/data-grids/probes-speed-probes-data-grid.tsx", + "components/data-grids/query-filters.tsx", + "components/data-grids/recursive-routes-data-grid.tsx", + "components/data-grids/route-optimizer-comm-recs-data-grid.tsx", + "components/data-grids/route-optimizer-full-routes-data-grid.tsx", + "components/data-grids/route-optimizer-ospf-preview-data-grid.tsx", + "components/data-grids/route-optimizer-wan-matrix-data-grid.tsx", + "components/data-grids/server-expanded-detail.tsx", + "components/data-grids/server-filters.tsx", + "components/data-grids/servers-data-grid.tsx", + "components/data-grids/shared/data-grid-layout.ts", + "components/data-grids/shared/data-grid-shell.tsx", + "components/data-grids/shared/data-grid-sort-header.tsx", + "components/data-grids/snapshot-data-grid.tsx", + "components/data-grids/statistics-breakdown-data-grid.tsx", + "components/data-grids/subusers-data-grid.tsx", + "components/data-grids/traffic-flows-data-grid.tsx", + "components/data-grids/uptime-resources-data-grid.tsx", + "components/data-grids/uptime-speed-history-data-grid.tsx", + "components/data-grids/users-data-grid.tsx", + "components/data-grids/users-expanded-detail.tsx", + "components/data-grids/vxlan-data-grid.tsx", + "components/data-grids/wireguard-data-grid.tsx", + "components/data-grids/wireguard-peers-detail.tsx", + "components/data-grids/wireguard-peers-grid.tsx", + "components/data-page-card.tsx", + "components/data-page-toolbar.tsx", + "components/data-table.tsx", + "components/empty-state.tsx", + "components/examples/c-data-grid-1.tsx", + "components/file-import-dialog.tsx", + "components/flag.tsx", + "components/form-kit/form-field.tsx", + "components/form-kit/form-toggle.tsx", + "components/form-kit/index.ts", + "components/form-kit/section-title.tsx", + "components/form-kit/segmented-control.tsx", + "components/ipsec/ipsec-cert-sheet.tsx", + "components/ipsec/ipsec-init-sheet.tsx", + "components/ipsec/ipsec-peer-sheet.tsx", + "components/ipsec/ipsec-server-grid.tsx", + "components/ipsec/ipsec-user-sheet.tsx", + "components/ipsec/ipsec-users-grid.tsx", + "components/nav-main.tsx", + "components/nav-projects.tsx", + "components/nav-user.tsx", + "components/network-map/country-flag-svg.tsx", + "components/network-map/service-brand-icon.tsx", + "components/ops-panel.tsx", + "components/optimizer-homes-list.tsx", + "components/optimizer-site-summary.tsx", + "components/ospf-detail-list.tsx", + "components/ospf-topology-scope.tsx", + "components/page-header.tsx", + "components/placeholder-page.tsx", + "components/probes-speed-schedule.tsx", + "components/recursive-gateway-choices.tsx", + "components/release-notes-modal.tsx", + "components/reui-kit/attention-queue.tsx", + "components/reui-kit/code-export-sheet.tsx", + "components/reui-kit/index.ts", + "components/reui-kit/kpi-cols.ts", + "components/reui-kit/kpi-stat-grid.tsx", + "components/reui-kit/quick-action-grid.tsx", + "components/reui-kit/traffic-mini-chart.tsx", + "components/reui-kit/traffic-rx-tx-chart.tsx", + "components/reui/alert.tsx", + "components/reui/autocomplete.tsx", + "components/reui/badge.tsx", + "components/reui/cascader/cascader-async.tsx", + "components/reui/cascader/cascader-columns.tsx", + "components/reui/cascader/cascader-context.tsx", + "components/reui/cascader/cascader-footer.tsx", + "components/reui/cascader/cascader-i18n.tsx", + "components/reui/cascader/cascader-item.tsx", + "components/reui/cascader/cascader-lib.tsx", + "components/reui/cascader/cascader-nav.tsx", + "components/reui/cascader/cascader-types.tsx", + "components/reui/cascader/cascader-virtual.tsx", + "components/reui/cascader/cascader.tsx", + "components/reui/data-grid/data-grid-cell-selection.tsx", + "components/reui/data-grid/data-grid-column-filter.tsx", + "components/reui/data-grid/data-grid-column-header.tsx", + "components/reui/data-grid/data-grid-column-visibility.tsx", + "components/reui/data-grid/data-grid-i18n.tsx", + "components/reui/data-grid/data-grid-pagination.tsx", + "components/reui/data-grid/data-grid-scroll-area.tsx", + "components/reui/data-grid/data-grid-table-dnd-rows.tsx", + "components/reui/data-grid/data-grid-table-dnd.tsx", + "components/reui/data-grid/data-grid-table-virtual.tsx", + "components/reui/data-grid/data-grid-table.tsx", + "components/reui/data-grid/data-grid.tsx", + "components/reui/data-grid/index.ts", + "components/reui/date-selector.tsx", + "components/reui/filters/filters-advanced.tsx", + "components/reui/filters/filters-builder.tsx", + "components/reui/filters/filters-chip.tsx", + "components/reui/filters/filters-context.tsx", + "components/reui/filters/filters-date.tsx", + "components/reui/filters/filters-dnd.tsx", + "components/reui/filters/filters-draft.tsx", + "components/reui/filters/filters-editors.tsx", + "components/reui/filters/filters-i18n.tsx", + "components/reui/filters/filters-lib.tsx", + "components/reui/filters/filters-operators.tsx", + "components/reui/filters/filters-query.tsx", + "components/reui/filters/filters-types.tsx", + "components/reui/filters/filters.tsx", + "components/reui/frame.tsx", + "components/reui/icon-stack.tsx", + "components/reui/icon-tile.tsx", + "components/reui/number-field.tsx", + "components/reui/sortable.tsx", + "components/reui/stepper.tsx", + "components/reui/timeline.tsx", + "components/server-rail-layout.tsx", + "components/server-tile-rail.tsx", + "components/settings/evobgp-catalog-status.tsx", + "components/settings/evobgp-data-status.tsx", + "components/settings/evobgp-settings-section.tsx", + "components/settings/system-database-section.tsx", + "components/sparkline.tsx", + "components/statistics/breakdown-dashboard.tsx", + "components/statistics/date-selector-i18n.ts", + "components/statistics/dimension-select.tsx", + "components/statistics/period-selector.tsx", + "components/statistics/slice-chips.tsx", + "components/statistics/statistics-filters.tsx", + "components/statistics/statistics-pivot-grid.tsx", + "components/statistics/statistics-volume-chart.tsx", + "components/status-badge.tsx", + "components/status-dot.tsx", + "components/system-monitor-popover.tsx", + "components/team-switcher.tsx", + "components/theme-provider.tsx", + "components/traffic/flow-analytics-panel.tsx", + "components/traffic/flow-overlay-sheet.tsx", + "components/traffic/flow-traffic-map.tsx", + "components/traffic/geoip-settings-section.tsx", + "components/traffic/netflow-purge-dialog.tsx", + "components/traffic/netflow-settings-panel.tsx", + "components/traffic/traffic-data-time.tsx", + "components/ui/alert-dialog.tsx", + "components/ui/alert.tsx", + "components/ui/avatar.tsx", + "components/ui/badge.tsx", + "components/ui/breadcrumb.tsx", + "components/ui/button-group.tsx", + "components/ui/button.tsx", + "components/ui/calendar.tsx", + "components/ui/card.tsx", + "components/ui/chart.tsx", + "components/ui/checkbox.tsx", + "components/ui/collapsible.tsx", + "components/ui/combobox.tsx", + "components/ui/command.tsx", + "components/ui/dialog.tsx", + "components/ui/dropdown-menu.tsx", + "components/ui/empty.tsx", + "components/ui/field.tsx", + "components/ui/input-group.tsx", + "components/ui/input.tsx", + "components/ui/item.tsx", + "components/ui/kbd.tsx", + "components/ui/label.tsx", + "components/ui/popover.tsx", + "components/ui/scroll-area.tsx", + "components/ui/select.tsx", + "components/ui/separator.tsx", + "components/ui/sheet.tsx", + "components/ui/sidebar.tsx", + "components/ui/skeleton.tsx", + "components/ui/sonner.tsx", + "components/ui/spinner.tsx", + "components/ui/switch.tsx", + "components/ui/table.tsx", + "components/ui/tabs.tsx", + "components/ui/textarea.tsx", + "components/ui/tooltip.tsx", + "components/users/user-sheet.tsx", + "components/wireguard/wg-create-sheet.tsx", + "components/wireguard/wg-export-sheet.tsx", + "components/wireguard/wg-import-sheet.tsx", + "components/wireguard/wg-peer-sheet.tsx", + "entities/server/model/mappers.ts", + "hooks/use-alerts-config-write.ts", + "hooks/use-alerts-targets.ts", + "hooks/use-alerts-telegram-preview.ts", + "hooks/use-app-switcher.ts", + "hooks/use-backups-url-state.ts", + "hooks/use-bgp-url-state.ts", + "hooks/use-dashboard-live.ts", + "hooks/use-file-upload.ts", + "hooks/use-flow-live.ts", + "hooks/use-mobile.ts", + "hooks/use-prefers-reduced-motion.ts", + "hooks/use-server-url-state.ts", + "hooks/use-traffic-live.ts", + "hooks/use-uptime-url-state.ts", + "hooks/use-wireguard-url-state.ts", + "lib/alerts-outbox-checkpoint.ts", + "lib/alerts-telegram-checkpoint.ts", + "lib/api-mock.ts", + "lib/api.ts", + "lib/app-switcher-config.ts", + "lib/app-version.ts", + "lib/auth.ts", + "lib/backend-internal-url.ts", + "lib/backend-url.ts", + "lib/backup-job-checkpoint.test.ts", + "lib/backup-job-checkpoint.ts", + "lib/backup-job-poll.test.ts", + "lib/backup-job-poll.ts", + "lib/backup-restore-checkpoint.test.ts", + "lib/backup-restore-checkpoint.ts", + "lib/backup-settings.test.ts", + "lib/backup-settings.ts", + "lib/bgp/helpers.ts", + "lib/bgp/response.ts", + "lib/bgp/types.ts", + "lib/certificate-issue-checkpoint.test.ts", + "lib/certificate-issue-checkpoint.ts", + "lib/certificate-issue-poll.test.ts", + "lib/certificate-issue-poll.ts", + "lib/certificate-snapshots.test.ts", + "lib/certificate-snapshots.ts", + "lib/certificate-view.ts", + "lib/certificates-url-state.test.ts", + "lib/certificates-url-state.ts", + "lib/config-revisions.ts", + "lib/containers-url-state.test.ts", + "lib/containers-url-state.ts", + "lib/dashboard-bgp.test.ts", + "lib/dashboard-bgp.ts", + "lib/dashboard-internet-path.ts", + "lib/dashboard-latency.ts", + "lib/dashboard-overlays.test.ts", + "lib/dashboard-overlays.ts", + "lib/dashboard-path-response.test.ts", + "lib/dashboard-path-response.ts", + "lib/dashboard-permissions.test.ts", + "lib/dashboard-permissions.ts", + "lib/dashboard-probes.test.ts", + "lib/dashboard-probes.ts", + "lib/dashboard-readers.test.ts", + "lib/dashboard-readers.ts", + "lib/dashboard-source-state.ts", + "lib/dashboard-traffic.test.ts", + "lib/dashboard-traffic.ts", + "lib/data-filters/apply-filter-query.test.ts", + "lib/data-filters/apply-filter-query.ts", + "lib/data-filters/backup-filter-fields.ts", + "lib/data-filters/backups-url-state.test.ts", + "lib/data-filters/backups-url-state.ts", + "lib/data-filters/bgp-filter-fields.ts", + "lib/data-filters/bgp-url-state.test.ts", + "lib/data-filters/bgp-url-state.ts", + "lib/data-filters/filter-labels-ru.ts", + "lib/data-filters/server-filter-fields.ts", + "lib/data-filters/server-url-state.test.ts", + "lib/data-filters/server-url-state.ts", + "lib/data-filters/statistics-filter-fields.ts", + "lib/data-filters/statistics-filter-query.test.ts", + "lib/data-filters/statistics-filter-query.ts", + "lib/data-filters/uptime-url-state.test.ts", + "lib/data-filters/uptime-url-state.ts", + "lib/data-grid-labels-ru.ts", + "lib/data-source.tsx", + "lib/data.ts", + "lib/evobgp-catalog.test.ts", + "lib/evobgp-catalog.ts", + "lib/evobgp-context.tsx", + "lib/evobgp-test-receipt.test.ts", + "lib/evobgp-test-receipt.ts", + "lib/filters-response.ts", + "lib/firewall-freshness.ts", + "lib/firewall-response.ts", + "lib/fmt-rate.ts", + "lib/format-service-path-label.test.ts", + "lib/format-service-path-label.ts", + "lib/gre-endpoint-resolve.ts", + "lib/gre-export.test.ts", + "lib/gre-export.ts", + "lib/gre-response.ts", + "lib/ipsec-client.ts", + "lib/map-gre-speed-probe.ts", + "lib/map-netflow-hops.ts", + "lib/navigation.ts", + "lib/network-map-camera.test.ts", + "lib/network-map-camera.ts", + "lib/network-map-layout.ts", + "lib/network-map-metrics.test.ts", + "lib/network-map-response.test.ts", + "lib/network-map-response.ts", + "lib/network-map-url-state.test.ts", + "lib/network-map-url-state.ts", + "lib/ospf-cost.test.ts", + "lib/ospf-cost.ts", + "lib/ospf-response.ts", + "lib/ospf-router-identity.test.ts", + "lib/ospf-router-identity.ts", + "lib/ospf-state.test.ts", + "lib/ospf-state.ts", + "lib/ospf-url-state.test.ts", + "lib/ospf-url-state.ts", + "lib/ping-probe.ts", + "lib/probe-response.test.ts", + "lib/probe-response.ts", + "lib/probe-schedule-response.test.ts", + "lib/probe-schedule-response.ts", + "lib/probe-source.test.ts", + "lib/probe-source.ts", + "lib/probe-url.test.ts", + "lib/probe-url.ts", + "lib/proxy-backend-request.test.ts", + "lib/proxy-backend-request.ts", + "lib/recursive-route-response.ts", + "lib/recursive-route-url-state.test.ts", + "lib/recursive-route-url-state.ts", + "lib/release-commits.ts", + "lib/release-manifest.ts", + "lib/release-metadata.test.ts", + "lib/release-metadata.ts", + "lib/release-modal-storage.ts", + "lib/route-optimizer-assignment.test.ts", + "lib/route-optimizer-data.ts", + "lib/route-optimizer-observed.test.ts", + "lib/route-optimizer-response.test.ts", + "lib/route-optimizer-response.ts", + "lib/route-optimizer-routes.test.ts", + "lib/scheduler-run-snapshot.test.ts", + "lib/scheduler-run-snapshot.ts", + "lib/scheduler-settings.ts", + "lib/server-operations.ts", + "lib/sidebar-badges.ts", + "lib/speed-persistence-outcome.test.ts", + "lib/speed-persistence-outcome.ts", + "lib/speed-probe-snapshot.test.ts", + "lib/speed-probe-snapshot.ts", + "lib/speed-run-response.test.ts", + "lib/speed-run-response.ts", + "lib/statistics-context.test.ts", + "lib/statistics-context.ts", + "lib/statistics-dims.ts", + "lib/statistics-range.test.ts", + "lib/statistics-range.ts", + "lib/terminal-response.test.ts", + "lib/terminal-response.ts", + "lib/use-backup-job.ts", + "lib/use-backup-restore-guard.ts", + "lib/use-certificate-catalog.ts", + "lib/use-certificate-issue.ts", + "lib/user-save.test.ts", + "lib/user-save.ts", + "lib/users.ts", + "lib/utils.ts", + "lib/vxlan-export.test.ts", + "lib/vxlan-export.ts", + "lib/vxlan-response.ts", + "lib/wg-config.ts", + "lib/wg-export-peer.test.ts", + "lib/wg-export-peer.ts", + "lib/wireguard-response.ts", + "lib/wireguard-url-state.test.ts", + "lib/wireguard-url-state.ts", + "next.config.ts", + "package-lock.json", + "packages/contracts/package.json", + "packages/contracts/src/alerts-normalization.test.ts", + "packages/contracts/src/alerts.ts", + "packages/contracts/src/backups.ts", + "packages/contracts/src/certificates.ts", + "packages/contracts/src/containers.ts", + "packages/contracts/src/events.ts", + "packages/contracts/src/evobgp.ts", + "packages/contracts/src/geoip.ts", + "packages/contracts/src/index.ts", + "packages/contracts/src/ipsec.ts", + "packages/contracts/src/ospf-optimizer.ts", + "packages/contracts/src/servers.ts", + "packages/contracts/src/statistics.ts", + "packages/contracts/src/traffic-flow.ts", + "packages/contracts/src/uptime-probes.ts", + "packages/contracts/src/uptime-speed.ts", + "packages/contracts/src/users.ts", + "packages/contracts/src/wireguard.ts", + "packages/contracts/tsconfig.json", + "postcss.config.mjs", + "public/release-manifest.json", + "shared/api/alerts-outbox.test.ts", + "shared/api/alerts-outbox.ts", + "shared/api/alerts-targets.test.ts", + "shared/api/alerts-targets.ts", + "shared/api/alerts.test.ts", + "shared/api/alerts.ts", + "shared/api/backend-health.test.ts", + "shared/api/backend-health.ts", + "shared/api/backups.test.ts", + "shared/api/backups.ts", + "shared/api/certificates.test.ts", + "shared/api/certificates.ts", + "shared/api/collector-settings-mutations.test.ts", + "shared/api/collector-settings.test.ts", + "shared/api/collector-settings.ts", + "shared/api/containers.ts", + "shared/api/events.ts", + "shared/api/evobgp-settings.test.ts", + "shared/api/evobgp-settings.ts", + "shared/api/geoip.test.ts", + "shared/api/geoip.ts", + "shared/api/http-client.ts", + "shared/api/ipsec.ts", + "shared/api/netflow-settings-form.test.ts", + "shared/api/netflow-settings-form.ts", + "shared/api/scheduler.test.ts", + "shared/api/scheduler.ts", + "shared/api/servers.ts", + "shared/api/sidebar-counts.test.ts", + "shared/api/sidebar-counts.ts", + "shared/api/statistics.ts", + "shared/api/system-database.test.ts", + "shared/api/system-database.ts", + "shared/api/traffic-flow-settings.test.ts", + "shared/api/traffic-flow.ts", + "shared/api/users.ts", + "shared/api/wireguard.ts", + "tsconfig.json" + ], + "missing": [ + ".dockerignore" + ], + "different": [ + { + "path": "package.json", + "local": "03f5ca2dbd26db7c51605fb439f234219293a03ea367ac48bb59030c82f68410", + "context": "21f8544f70a993b1d6c44865e10173a3436a7cc87a14f455acb9af15bbdc634e" + } + ] + }, + "backend": { + "root": "/opt/mmapp-test/build-bound116", + "matchedCount": 405, + "matched": [ + "backend/Dockerfile", + "backend/drizzle/0000_postgresql.sql", + "backend/drizzle/0002_compact_schema.sql", + "backend/drizzle/0003_backup_s3.sql", + "backend/drizzle/0004_geoip_settings.sql", + "backend/drizzle/0005_flow_facts.sql", + "backend/drizzle/0006_config_revisions.sql", + "backend/drizzle/0007_flow_buckets_nat.sql", + "backend/drizzle/0008_alert_outbox_outcomes.sql", + "backend/drizzle/0009_alert_outbox_resolution.sql", + "backend/drizzle/meta/0000_snapshot.json", + "backend/drizzle/meta/_journal.json", + "backend/package.json", + "backend/src/config.ts", + "backend/src/constants/ping-probe.ts", + "backend/src/db/bootstrap.ts", + "backend/src/db/index.ts", + "backend/src/db/json.ts", + "backend/src/db/migrate.ts", + "backend/src/db/operation-lock.test.ts", + "backend/src/db/operation-lock.ts", + "backend/src/db/partitions.ts", + "backend/src/db/pg-schema.test.ts", + "backend/src/db/schema.ts", + "backend/src/db/sql-bind.test.ts", + "backend/src/db/sql-bind.ts", + "backend/src/db/sqlite-import.ts", + "backend/src/db/sqlite-json.test.ts", + "backend/src/db/traffic-flags.test.ts", + "backend/src/db/traffic-flags.ts", + "backend/src/index.ts", + "backend/src/lib/permissions.test.ts", + "backend/src/lib/permissions.ts", + "backend/src/managed-markers.ts", + "backend/src/modules/events/repository/events-repository.ts", + "backend/src/modules/events/service/events-service.ts", + "backend/src/modules/servers/mapper/servers-mapper.ts", + "backend/src/modules/servers/repository/servers-repository.ts", + "backend/src/modules/servers/service/servers-service.ts", + "backend/src/modules/users/bindings.test.ts", + "backend/src/modules/users/iface-type.test.ts", + "backend/src/modules/users/iface-type.ts", + "backend/src/modules/users/interface-inventory.test.ts", + "backend/src/modules/users/interface-inventory.ts", + "backend/src/modules/users/peer-bind.ts", + "backend/src/modules/users/repository/users-repository.ts", + "backend/src/modules/users/service/users-service.ts", + "backend/src/plugins/auth.alerts.test.ts", + "backend/src/plugins/auth.evolution-settings.test.ts", + "backend/src/plugins/auth.exec.test.ts", + "backend/src/plugins/auth.geoip.test.ts", + "backend/src/plugins/auth.netflow-settings.test.ts", + "backend/src/plugins/auth.ospf-optimizer.test.ts", + "backend/src/plugins/auth.smoke.test.ts", + "backend/src/plugins/auth.system-database.test.ts", + "backend/src/plugins/auth.ts", + "backend/src/plugins/database-request-gate.ts", + "backend/src/routes/alerts.test.ts", + "backend/src/routes/alerts.ts", + "backend/src/routes/backups-operations.test.ts", + "backend/src/routes/backups.ts", + "backend/src/routes/bgp-catalog.test.ts", + "backend/src/routes/bgp.ts", + "backend/src/routes/certificates-issue.test.ts", + "backend/src/routes/certificates-state.test.ts", + "backend/src/routes/certificates.ts", + "backend/src/routes/containers-state.test.ts", + "backend/src/routes/containers.ts", + "backend/src/routes/events.ts", + "backend/src/routes/evobgp-catalog.test.ts", + "backend/src/routes/evobgp-catalog.ts", + "backend/src/routes/evobgp-settings.test.ts", + "backend/src/routes/evobgp-settings.ts", + "backend/src/routes/evobgp.ts", + "backend/src/routes/exec.test.ts", + "backend/src/routes/exec.ts", + "backend/src/routes/filters-gre-catalog.test.ts", + "backend/src/routes/filters.ts", + "backend/src/routes/firewall.ts", + "backend/src/routes/geoip.ts", + "backend/src/routes/gre.ts", + "backend/src/routes/internet-path.ts", + "backend/src/routes/ipsec-group.test.ts", + "backend/src/routes/ipsec-history.test.ts", + "backend/src/routes/ipsec-nat.test.ts", + "backend/src/routes/ipsec.ts", + "backend/src/routes/network.ts", + "backend/src/routes/ospf-catalog.test.ts", + "backend/src/routes/ospf-optimizer.test.ts", + "backend/src/routes/ospf.ts", + "backend/src/routes/ping-probes-write.test.ts", + "backend/src/routes/ping-probes-write.ts", + "backend/src/routes/probes.cancel.test.ts", + "backend/src/routes/probes.test.ts", + "backend/src/routes/probes.ts", + "backend/src/routes/recursive-routes.ts", + "backend/src/routes/scheduler.test.ts", + "backend/src/routes/scheduler.ts", + "backend/src/routes/servers-api-ping.ts", + "backend/src/routes/servers.ts", + "backend/src/routes/sidebar-counts.test.ts", + "backend/src/routes/sidebar-counts.ts", + "backend/src/routes/speed-probes-write.test.ts", + "backend/src/routes/speed-probes-write.ts", + "backend/src/routes/speed-test.ts", + "backend/src/routes/statistics.ts", + "backend/src/routes/system-database.test.ts", + "backend/src/routes/system-database.ts", + "backend/src/routes/traffic-flow-purge.test.ts", + "backend/src/routes/traffic-flow-purge.ts", + "backend/src/routes/traffic-flow-settings.test.ts", + "backend/src/routes/traffic-flow-settings.ts", + "backend/src/routes/traffic-flow.ts", + "backend/src/routes/traffic.ts", + "backend/src/routes/uptime.ts", + "backend/src/routes/users-catalog.test.ts", + "backend/src/routes/users.ts", + "backend/src/routes/vxlan.test.ts", + "backend/src/routes/vxlan.ts", + "backend/src/routes/wireguard-import.test.ts", + "backend/src/routes/wireguard.ts", + "backend/src/scripts/migrate-sqlite-to-pg.ts", + "backend/src/scripts/rebuild-flow-facts.ts", + "backend/src/services/acme-cloudflare.ts", + "backend/src/services/alert-collector-hooks.ts", + "backend/src/services/alert-engine/confirm-stability.test.ts", + "backend/src/services/alert-engine/confirm-stability.ts", + "backend/src/services/alert-engine/cooldown.ts", + "backend/src/services/alert-engine/decision-engine.ts", + "backend/src/services/alert-engine/evaluate-rule.test.ts", + "backend/src/services/alert-engine/evaluate-rule.ts", + "backend/src/services/alert-engine/groups.test.ts", + "backend/src/services/alert-engine/groups.ts", + "backend/src/services/alert-engine/outbox-execution.test.ts", + "backend/src/services/alert-engine/outbox-execution.ts", + "backend/src/services/alert-engine/outbox.ts", + "backend/src/services/alert-engine/prev-live-store.ts", + "backend/src/services/alert-engine/rule-matcher.ts", + "backend/src/services/alert-engine/run-once.ts", + "backend/src/services/alert-engine/signal-ingestor.ts", + "backend/src/services/alert-engine/signals-from-collectors.ts", + "backend/src/services/alert-engine/snapshot.ts", + "backend/src/services/alert-engine/source-watermark.ts", + "backend/src/services/alert-engine/state-machine.test.ts", + "backend/src/services/alert-engine/state-machine.ts", + "backend/src/services/alert-engine/telegram-emoji.test.ts", + "backend/src/services/alert-engine/telegram-emoji.ts", + "backend/src/services/alert-engine/types.ts", + "backend/src/services/alerts-config-execution.test.ts", + "backend/src/services/alerts-config-execution.ts", + "backend/src/services/alerts-outbox-overview.test.ts", + "backend/src/services/alerts-outbox-overview.ts", + "backend/src/services/alerts-outbox-retry.test.ts", + "backend/src/services/alerts-outbox-retry.ts", + "backend/src/services/alerts-overview.test.ts", + "backend/src/services/alerts-overview.ts", + "backend/src/services/alerts-revision.test.ts", + "backend/src/services/alerts-revision.ts", + "backend/src/services/alerts-service.ts", + "backend/src/services/alerts-telegram-delivery.test.ts", + "backend/src/services/alerts-telegram-delivery.ts", + "backend/src/services/alerts-telegram-send.test.ts", + "backend/src/services/alerts-telegram-send.ts", + "backend/src/services/alerts-telegram-settings.test.ts", + "backend/src/services/alerts-telegram-settings.ts", + "backend/src/services/backup-deletion.test.ts", + "backend/src/services/backup-deletion.ts", + "backend/src/services/backup-dto.test.ts", + "backend/src/services/backup-dto.ts", + "backend/src/services/backup-job-execution.test.ts", + "backend/src/services/backup-job-execution.ts", + "backend/src/services/backup-prune.ts", + "backend/src/services/backup-restore.test.ts", + "backend/src/services/backup-restore.ts", + "backend/src/services/backup-scheduler-collector.ts", + "backend/src/services/backup-scheduler-run.test.ts", + "backend/src/services/backup-scheduler-run.ts", + "backend/src/services/backup-service.ts", + "backend/src/services/backup-storage-update.test.ts", + "backend/src/services/backup-storage-update.ts", + "backend/src/services/bandwidth-test-rates.test.ts", + "backend/src/services/bandwidth-test-rates.ts", + "backend/src/services/bandwidth-test-status.test.ts", + "backend/src/services/bandwidth-test-status.ts", + "backend/src/services/bgp-catalog-parse.test.ts", + "backend/src/services/bgp-catalog-poll.ts", + "backend/src/services/bgp-parse-sessions.ts", + "backend/src/services/bgp-peers-live.ts", + "backend/src/services/btest-node-locks.ts", + "backend/src/services/certificate-issue-dto.test.ts", + "backend/src/services/certificate-issue-dto.ts", + "backend/src/services/certificate-issue-execution.test.ts", + "backend/src/services/certificate-issue-execution.ts", + "backend/src/services/certificate-issue-request.test.ts", + "backend/src/services/certificate-issue-request.ts", + "backend/src/services/certificate-issue-runner.ts", + "backend/src/services/certificate-parse.test.ts", + "backend/src/services/certificate-parse.ts", + "backend/src/services/certificate-renew-collector.ts", + "backend/src/services/certificates-service.ts", + "backend/src/services/certificates-state.test.ts", + "backend/src/services/certificates-state.ts", + "backend/src/services/complete-count.test.ts", + "backend/src/services/complete-count.ts", + "backend/src/services/config-apply-plan.test.ts", + "backend/src/services/config-apply-plan.ts", + "backend/src/services/config-revisions.test.ts", + "backend/src/services/config-revisions.ts", + "backend/src/services/containers-live.test.ts", + "backend/src/services/containers-live.ts", + "backend/src/services/containers-state.test.ts", + "backend/src/services/containers-state.ts", + "backend/src/services/database-background-work.test.ts", + "backend/src/services/database-background-work.ts", + "backend/src/services/database-request-gate.test.ts", + "backend/src/services/database-request-gate.ts", + "backend/src/services/entity-snapshots.test.ts", + "backend/src/services/entity-snapshots.ts", + "backend/src/services/evobgp-catalog.test.ts", + "backend/src/services/evobgp-catalog.ts", + "backend/src/services/firewall-live.ts", + "backend/src/services/firewall-poll.test.ts", + "backend/src/services/firewall-poll.ts", + "backend/src/services/geoip-settings.ts", + "backend/src/services/geoip-update-collector.ts", + "backend/src/services/gre-bgp-snapshot-collector.ts", + "backend/src/services/gre-catalog-poll.test.ts", + "backend/src/services/gre-catalog-poll.ts", + "backend/src/services/gre-comment.test.ts", + "backend/src/services/gre-comment.ts", + "backend/src/services/gre-live.ts", + "backend/src/services/gre-tunnels-live.ts", + "backend/src/services/internet-path-collector.ts", + "backend/src/services/internet-path-snapshot.test.ts", + "backend/src/services/internet-path-snapshot.ts", + "backend/src/services/ipsec-ca.ts", + "backend/src/services/ipsec-certificate-dn.ts", + "backend/src/services/ipsec-cleanup.ts", + "backend/src/services/ipsec-config.test.ts", + "backend/src/services/ipsec-config.ts", + "backend/src/services/ipsec-live.ts", + "backend/src/services/ipsec-operation.test.ts", + "backend/src/services/ipsec-operation.ts", + "backend/src/services/ipsec-restore.test.ts", + "backend/src/services/ipsec-ros.ts", + "backend/src/services/mikrotik-response.test.ts", + "backend/src/services/mikrotik.ts", + "backend/src/services/monitoring-server-catalog.ts", + "backend/src/services/ospf-catalog-poll.ts", + "backend/src/services/ospf-effective-disabled.test.ts", + "backend/src/services/ospf-effective-disabled.ts", + "backend/src/services/ospf-observed-values.test.ts", + "backend/src/services/ospf-observed-values.ts", + "backend/src/services/ospf-optimizer-identity.test.ts", + "backend/src/services/ospf-optimizer-identity.ts", + "backend/src/services/ospf-optimizer-metrics.test.ts", + "backend/src/services/ospf-optimizer-metrics.ts", + "backend/src/services/ospf-optimizer-plan.test.ts", + "backend/src/services/ospf-optimizer-plan.ts", + "backend/src/services/ospf-route-parse.test.ts", + "backend/src/services/ospf-route-parse.ts", + "backend/src/services/ping-probe-replacement.ts", + "backend/src/services/poller.ts", + "backend/src/services/recursive-apply.test.ts", + "backend/src/services/recursive-apply.ts", + "backend/src/services/recursive-route-catalog.test.ts", + "backend/src/services/recursive-route-catalog.ts", + "backend/src/services/recursive-route-validation.ts", + "backend/src/services/ros-file-contents.test.ts", + "backend/src/services/ros-metric-parse.ts", + "backend/src/services/ros-ops.ts", + "backend/src/services/s3-backup-client.test.ts", + "backend/src/services/s3-backup-client.ts", + "backend/src/services/scheduler-recorded-run.test.ts", + "backend/src/services/scheduler-recorded-run.ts", + "backend/src/services/scheduler-running.test.ts", + "backend/src/services/scheduler-running.ts", + "backend/src/services/scheduler.ts", + "backend/src/services/serial-operation.ts", + "backend/src/services/servers-rest-ping-collector.ts", + "backend/src/services/speed-history-dto.test.ts", + "backend/src/services/speed-history-dto.ts", + "backend/src/services/speed-probe-dto.test.ts", + "backend/src/services/speed-probe-dto.ts", + "backend/src/services/speed-probe-replacement.ts", + "backend/src/services/speed-run-error-message.ts", + "backend/src/services/speed-run-persistence.test.ts", + "backend/src/services/speed-run-persistence.ts", + "backend/src/services/statistics-aggregate.test.ts", + "backend/src/services/statistics-aggregate.ts", + "backend/src/services/system-database-backup.ts", + "backend/src/services/system-database-cache.test.ts", + "backend/src/services/system-database-cache.ts", + "backend/src/services/system-database-operation.test.ts", + "backend/src/services/system-database-operation.ts", + "backend/src/services/system-database-partition-restore.test.ts", + "backend/src/services/system-database-partition-restore.ts", + "backend/src/services/system-database-restore-execution.test.ts", + "backend/src/services/system-database-restore-execution.ts", + "backend/src/services/traffic-collector.ts", + "backend/src/services/traffic-flow-analytics.test.ts", + "backend/src/services/traffic-flow-analytics.ts", + "backend/src/services/traffic-flow-apps.ts", + "backend/src/services/traffic-flow-brands.test.ts", + "backend/src/services/traffic-flow-brands.ts", + "backend/src/services/traffic-flow-classify.test.ts", + "backend/src/services/traffic-flow-classify.ts", + "backend/src/services/traffic-flow-collector-ipc.ts", + "backend/src/services/traffic-flow-collector-worker.ts", + "backend/src/services/traffic-flow-dedup.test.ts", + "backend/src/services/traffic-flow-dedup.ts", + "backend/src/services/traffic-flow-dest.test.ts", + "backend/src/services/traffic-flow-dest.ts", + "backend/src/services/traffic-flow-engine.ts", + "backend/src/services/traffic-flow-facts-filter.test.ts", + "backend/src/services/traffic-flow-facts-filter.ts", + "backend/src/services/traffic-flow-facts-rebuild.test.ts", + "backend/src/services/traffic-flow-facts-rebuild.ts", + "backend/src/services/traffic-flow-facts.test.ts", + "backend/src/services/traffic-flow-facts.ts", + "backend/src/services/traffic-flow-geoip.test.ts", + "backend/src/services/traffic-flow-geoip.ts", + "backend/src/services/traffic-flow-host-file-builders.test.ts", + "backend/src/services/traffic-flow-host-file-builders.ts", + "backend/src/services/traffic-flow-host-files.ts", + "backend/src/services/traffic-flow-ifaces.test.ts", + "backend/src/services/traffic-flow-ifaces.ts", + "backend/src/services/traffic-flow-ifindex.test.ts", + "backend/src/services/traffic-flow-ifindex.ts", + "backend/src/services/traffic-flow-ingest.test.ts", + "backend/src/services/traffic-flow-ingest.ts", + "backend/src/services/traffic-flow-ip.test.ts", + "backend/src/services/traffic-flow-ip.ts", + "backend/src/services/traffic-flow-key-execution.test.ts", + "backend/src/services/traffic-flow-key-execution.ts", + "backend/src/services/traffic-flow-map-exporter.test.ts", + "backend/src/services/traffic-flow-map-exporter.ts", + "backend/src/services/traffic-flow-map-hops.test.ts", + "backend/src/services/traffic-flow-map-hops.ts", + "backend/src/services/traffic-flow-overlay.ts", + "backend/src/services/traffic-flow-parse.test.ts", + "backend/src/services/traffic-flow-parse.ts", + "backend/src/services/traffic-flow-planes.test.ts", + "backend/src/services/traffic-flow-planes.ts", + "backend/src/services/traffic-flow-purge-execution.test.ts", + "backend/src/services/traffic-flow-purge-execution.ts", + "backend/src/services/traffic-flow-purge.test.ts", + "backend/src/services/traffic-flow-ripe.test.ts", + "backend/src/services/traffic-flow-ripe.ts", + "backend/src/services/traffic-flow-settings.ts", + "backend/src/services/traffic-flow-topology.ts", + "backend/src/services/traffic-flow-worker-shutdown.test.ts", + "backend/src/services/traffic-flow-worker-shutdown.ts", + "backend/src/services/traffic-rate.test.ts", + "backend/src/services/traffic-rate.ts", + "backend/src/services/traffic-users.ts", + "backend/src/services/uptime-collector.ts", + "backend/src/services/uptime-probe-observations.test.ts", + "backend/src/services/uptime-probe-observations.ts", + "backend/src/services/uptime-speed-service.ts", + "backend/src/services/vxlan-live.test.ts", + "backend/src/services/vxlan-live.ts", + "backend/src/services/wg-keys.ts", + "backend/src/services/wireguard-config.test.ts", + "backend/src/services/wireguard-config.ts", + "backend/src/services/wireguard-delete.test.ts", + "backend/src/services/wireguard-delete.ts", + "backend/src/services/wireguard-import-apply.test.ts", + "backend/src/services/wireguard-import-apply.ts", + "backend/src/services/wireguard-import-revision.test.ts", + "backend/src/services/wireguard-import-revision.ts", + "backend/src/services/wireguard-import.test.ts", + "backend/src/services/wireguard-import.ts", + "backend/src/services/wireguard-live.ts", + "backend/src/services/wireguard-observed-values.test.ts", + "backend/src/services/wireguard-observed-values.ts", + "backend/src/services/wireguard-ros.ts", + "backend/src/test/pg.ts", + "backend/src/types/scheduler-run-snapshot.ts", + "backend/src/types/server.ts", + "backend/src/utils/abort-signals.ts", + "backend/src/utils/ros-src-address.ts", + "backend/src/utils/server-id.ts", + "backend/tsconfig.json", + "package-lock.json", + "packages/contracts/package.json", + "packages/contracts/src/alerts-normalization.test.ts", + "packages/contracts/src/alerts.ts", + "packages/contracts/src/backups.ts", + "packages/contracts/src/certificates.ts", + "packages/contracts/src/containers.ts", + "packages/contracts/src/events.ts", + "packages/contracts/src/evobgp.ts", + "packages/contracts/src/geoip.ts", + "packages/contracts/src/index.ts", + "packages/contracts/src/ipsec.ts", + "packages/contracts/src/ospf-optimizer.ts", + "packages/contracts/src/servers.ts", + "packages/contracts/src/statistics.ts", + "packages/contracts/src/traffic-flow.ts", + "packages/contracts/src/uptime-probes.ts", + "packages/contracts/src/uptime-speed.ts", + "packages/contracts/src/users.ts", + "packages/contracts/src/wireguard.ts", + "packages/contracts/tsconfig.json" + ], + "missing": [], + "different": [ + { + "path": "backend/src/routes/ipsec-mutation.test.ts", + "local": "e6d0eb22a7a14701c67d49651b853d31785736c154f81c827a7538305685d67b", + "context": "563097ee8fbf6d22bc0694fb689df70f68ab8e4c51ad3eaa3bd282dbcf7673dc" + }, + { + "path": "backend/src/routes/recursive-routes.test.ts", + "local": "e2458b856a41033504699675a883cc7f3f5a8cf793d3db3f10446fe5696c3ea8", + "context": "315e149aac9c963beacfbe099a3dddc286ffe1e7cfa31e7fa32bed1a445ec722" + }, + { + "path": "backend/src/routes/speed-test.test.ts", + "local": "4c73f7b15a299a8ed25bab6cc015c36ca4050900fb09da888f95da3cc864e42d", + "context": "ee2d57f470a206cc59ea18fa789ea1bbc20d0694f96cf51680bdc3ff03ac0de3" + }, + { + "path": "backend/src/services/ipsec-state.test.ts", + "local": "95261a8ba5f285df12fb78a85d912b8449b91f5363feed5125e3e92f2cf70675", + "context": "8a0f19b3a16962a2217ac76bfd4c1009813f59cf9e50a4b90fb31165ff6a9a6d" + }, + { + "path": "package.json", + "local": "03f5ca2dbd26db7c51605fb439f234219293a03ea367ac48bb59030c82f68410", + "context": "707d04dcda7f82c1ae7f4f3072a898647a328c6338ebd32c8187cd33bc58acbf" + } + ] + } + }, + "runtime": { + "frontend": { + "imageId": "sha256:d641b518fa35291e2c25dcabdef13b730c307a424d3b96bc9847df79022ead28", + "imageTag": "mmapp-test/frontend:ux-bound116", + "revisionLabel": "bound116", + "state": "running", + "health": null, + "startedAt": "2026-10-10T14:19:14.127392398Z" + }, + "backend": { + "imageId": "sha256:98a8f1c55c4dffc0eddd5b75a2ac7e420ec612d13b269e2631654409cfcf9f98", + "imageTag": "mmapp-test/backend:ux-bound116", + "revisionLabel": "bound116", + "state": "running", + "health": "healthy", + "startedAt": "2026-10-10T14:19:13.867087858Z" + } + } + }, + "compiled": { + "matched": [ + "backend/dist/config.js", + "backend/dist/config.js.map", + "backend/dist/config.d.ts", + "backend/dist/config.d.ts.map", + "backend/dist/constants/ping-probe.js", + "backend/dist/constants/ping-probe.js.map", + "backend/dist/constants/ping-probe.d.ts", + "backend/dist/constants/ping-probe.d.ts.map", + "backend/dist/db/bootstrap.js", + "backend/dist/db/bootstrap.js.map", + "backend/dist/db/bootstrap.d.ts", + "backend/dist/db/bootstrap.d.ts.map", + "backend/dist/db/index.js", + "backend/dist/db/index.js.map", + "backend/dist/db/index.d.ts", + "backend/dist/db/index.d.ts.map", + "backend/dist/db/json.js", + "backend/dist/db/json.js.map", + "backend/dist/db/json.d.ts", + "backend/dist/db/json.d.ts.map", + "backend/dist/db/migrate.js", + "backend/dist/db/migrate.js.map", + "backend/dist/db/migrate.d.ts", + "backend/dist/db/migrate.d.ts.map", + "backend/dist/db/operation-lock.js", + "backend/dist/db/operation-lock.js.map", + "backend/dist/db/operation-lock.d.ts", + "backend/dist/db/operation-lock.d.ts.map", + "backend/dist/db/partitions.js", + "backend/dist/db/partitions.js.map", + "backend/dist/db/partitions.d.ts", + "backend/dist/db/partitions.d.ts.map", + "backend/dist/db/schema.js", + "backend/dist/db/schema.js.map", + "backend/dist/db/schema.d.ts", + "backend/dist/db/schema.d.ts.map", + "backend/dist/db/sql-bind.js", + "backend/dist/db/sql-bind.js.map", + "backend/dist/db/sql-bind.d.ts", + "backend/dist/db/sql-bind.d.ts.map", + "backend/dist/db/sqlite-import.js", + "backend/dist/db/sqlite-import.js.map", + "backend/dist/db/sqlite-import.d.ts", + "backend/dist/db/sqlite-import.d.ts.map", + "backend/dist/db/traffic-flags.js", + "backend/dist/db/traffic-flags.js.map", + "backend/dist/db/traffic-flags.d.ts", + "backend/dist/db/traffic-flags.d.ts.map", + "backend/dist/index.js", + "backend/dist/index.js.map", + "backend/dist/index.d.ts", + "backend/dist/index.d.ts.map", + "backend/dist/lib/permissions.js", + "backend/dist/lib/permissions.js.map", + "backend/dist/lib/permissions.d.ts", + "backend/dist/lib/permissions.d.ts.map", + "backend/dist/managed-markers.js", + "backend/dist/managed-markers.js.map", + "backend/dist/managed-markers.d.ts", + "backend/dist/managed-markers.d.ts.map", + "backend/dist/modules/events/repository/events-repository.js", + "backend/dist/modules/events/repository/events-repository.js.map", + "backend/dist/modules/events/repository/events-repository.d.ts", + "backend/dist/modules/events/repository/events-repository.d.ts.map", + "backend/dist/modules/events/service/events-service.js", + "backend/dist/modules/events/service/events-service.js.map", + "backend/dist/modules/events/service/events-service.d.ts", + "backend/dist/modules/events/service/events-service.d.ts.map", + "backend/dist/modules/servers/mapper/servers-mapper.js", + "backend/dist/modules/servers/mapper/servers-mapper.js.map", + "backend/dist/modules/servers/mapper/servers-mapper.d.ts", + "backend/dist/modules/servers/mapper/servers-mapper.d.ts.map", + "backend/dist/modules/servers/repository/servers-repository.js", + "backend/dist/modules/servers/repository/servers-repository.js.map", + "backend/dist/modules/servers/repository/servers-repository.d.ts", + "backend/dist/modules/servers/repository/servers-repository.d.ts.map", + "backend/dist/modules/servers/service/servers-service.js", + "backend/dist/modules/servers/service/servers-service.js.map", + "backend/dist/modules/servers/service/servers-service.d.ts", + "backend/dist/modules/servers/service/servers-service.d.ts.map", + "backend/dist/modules/users/iface-type.js", + "backend/dist/modules/users/iface-type.js.map", + "backend/dist/modules/users/iface-type.d.ts", + "backend/dist/modules/users/iface-type.d.ts.map", + "backend/dist/modules/users/interface-inventory.js", + "backend/dist/modules/users/interface-inventory.js.map", + "backend/dist/modules/users/interface-inventory.d.ts", + "backend/dist/modules/users/interface-inventory.d.ts.map", + "backend/dist/modules/users/peer-bind.js", + "backend/dist/modules/users/peer-bind.js.map", + "backend/dist/modules/users/peer-bind.d.ts", + "backend/dist/modules/users/peer-bind.d.ts.map", + "backend/dist/modules/users/repository/users-repository.js", + "backend/dist/modules/users/repository/users-repository.js.map", + "backend/dist/modules/users/repository/users-repository.d.ts", + "backend/dist/modules/users/repository/users-repository.d.ts.map", + "backend/dist/modules/users/service/users-service.js", + "backend/dist/modules/users/service/users-service.js.map", + "backend/dist/modules/users/service/users-service.d.ts", + "backend/dist/modules/users/service/users-service.d.ts.map", + "backend/dist/plugins/auth.js", + "backend/dist/plugins/auth.js.map", + "backend/dist/plugins/auth.d.ts", + "backend/dist/plugins/auth.d.ts.map", + "backend/dist/plugins/database-request-gate.js", + "backend/dist/plugins/database-request-gate.js.map", + "backend/dist/plugins/database-request-gate.d.ts", + "backend/dist/plugins/database-request-gate.d.ts.map", + "backend/dist/routes/alerts.js", + "backend/dist/routes/alerts.js.map", + "backend/dist/routes/alerts.d.ts", + "backend/dist/routes/alerts.d.ts.map", + "backend/dist/routes/backups.js", + "backend/dist/routes/backups.js.map", + "backend/dist/routes/backups.d.ts", + "backend/dist/routes/backups.d.ts.map", + "backend/dist/routes/bgp.js", + "backend/dist/routes/bgp.js.map", + "backend/dist/routes/bgp.d.ts", + "backend/dist/routes/bgp.d.ts.map", + "backend/dist/routes/certificates.js", + "backend/dist/routes/certificates.js.map", + "backend/dist/routes/certificates.d.ts", + "backend/dist/routes/certificates.d.ts.map", + "backend/dist/routes/containers.js", + "backend/dist/routes/containers.js.map", + "backend/dist/routes/containers.d.ts", + "backend/dist/routes/containers.d.ts.map", + "backend/dist/routes/events.js", + "backend/dist/routes/events.js.map", + "backend/dist/routes/events.d.ts", + "backend/dist/routes/events.d.ts.map", + "backend/dist/routes/evobgp-catalog.js", + "backend/dist/routes/evobgp-catalog.js.map", + "backend/dist/routes/evobgp-catalog.d.ts", + "backend/dist/routes/evobgp-catalog.d.ts.map", + "backend/dist/routes/evobgp-settings.js", + "backend/dist/routes/evobgp-settings.js.map", + "backend/dist/routes/evobgp-settings.d.ts", + "backend/dist/routes/evobgp-settings.d.ts.map", + "backend/dist/routes/evobgp.js", + "backend/dist/routes/evobgp.js.map", + "backend/dist/routes/evobgp.d.ts", + "backend/dist/routes/evobgp.d.ts.map", + "backend/dist/routes/exec.js", + "backend/dist/routes/exec.js.map", + "backend/dist/routes/exec.d.ts", + "backend/dist/routes/exec.d.ts.map", + "backend/dist/routes/filters.js", + "backend/dist/routes/filters.js.map", + "backend/dist/routes/filters.d.ts", + "backend/dist/routes/filters.d.ts.map", + "backend/dist/routes/firewall.js", + "backend/dist/routes/firewall.js.map", + "backend/dist/routes/firewall.d.ts", + "backend/dist/routes/firewall.d.ts.map", + "backend/dist/routes/geoip.js", + "backend/dist/routes/geoip.js.map", + "backend/dist/routes/geoip.d.ts", + "backend/dist/routes/geoip.d.ts.map", + "backend/dist/routes/gre.js", + "backend/dist/routes/gre.js.map", + "backend/dist/routes/gre.d.ts", + "backend/dist/routes/gre.d.ts.map", + "backend/dist/routes/internet-path.js", + "backend/dist/routes/internet-path.js.map", + "backend/dist/routes/internet-path.d.ts", + "backend/dist/routes/internet-path.d.ts.map", + "backend/dist/routes/ipsec.js", + "backend/dist/routes/ipsec.js.map", + "backend/dist/routes/ipsec.d.ts", + "backend/dist/routes/ipsec.d.ts.map", + "backend/dist/routes/network.js", + "backend/dist/routes/network.js.map", + "backend/dist/routes/network.d.ts", + "backend/dist/routes/network.d.ts.map", + "backend/dist/routes/ospf.js", + "backend/dist/routes/ospf.js.map", + "backend/dist/routes/ospf.d.ts", + "backend/dist/routes/ospf.d.ts.map", + "backend/dist/routes/ping-probes-write.js", + "backend/dist/routes/ping-probes-write.js.map", + "backend/dist/routes/ping-probes-write.d.ts", + "backend/dist/routes/ping-probes-write.d.ts.map", + "backend/dist/routes/probes.js", + "backend/dist/routes/probes.js.map", + "backend/dist/routes/probes.d.ts", + "backend/dist/routes/probes.d.ts.map", + "backend/dist/routes/recursive-routes.js", + "backend/dist/routes/recursive-routes.js.map", + "backend/dist/routes/recursive-routes.d.ts", + "backend/dist/routes/recursive-routes.d.ts.map", + "backend/dist/routes/scheduler.js", + "backend/dist/routes/scheduler.js.map", + "backend/dist/routes/scheduler.d.ts", + "backend/dist/routes/scheduler.d.ts.map", + "backend/dist/routes/servers-api-ping.js", + "backend/dist/routes/servers-api-ping.js.map", + "backend/dist/routes/servers-api-ping.d.ts", + "backend/dist/routes/servers-api-ping.d.ts.map", + "backend/dist/routes/servers.js", + "backend/dist/routes/servers.js.map", + "backend/dist/routes/servers.d.ts", + "backend/dist/routes/servers.d.ts.map", + "backend/dist/routes/sidebar-counts.js", + "backend/dist/routes/sidebar-counts.js.map", + "backend/dist/routes/sidebar-counts.d.ts", + "backend/dist/routes/sidebar-counts.d.ts.map", + "backend/dist/routes/speed-probes-write.js", + "backend/dist/routes/speed-probes-write.js.map", + "backend/dist/routes/speed-probes-write.d.ts", + "backend/dist/routes/speed-probes-write.d.ts.map", + "backend/dist/routes/speed-test.js", + "backend/dist/routes/speed-test.js.map", + "backend/dist/routes/speed-test.d.ts", + "backend/dist/routes/speed-test.d.ts.map", + "backend/dist/routes/statistics.js", + "backend/dist/routes/statistics.js.map", + "backend/dist/routes/statistics.d.ts", + "backend/dist/routes/statistics.d.ts.map", + "backend/dist/routes/system-database.js", + "backend/dist/routes/system-database.js.map", + "backend/dist/routes/system-database.d.ts", + "backend/dist/routes/system-database.d.ts.map", + "backend/dist/routes/traffic-flow-purge.js", + "backend/dist/routes/traffic-flow-purge.js.map", + "backend/dist/routes/traffic-flow-purge.d.ts", + "backend/dist/routes/traffic-flow-purge.d.ts.map", + "backend/dist/routes/traffic-flow-settings.js", + "backend/dist/routes/traffic-flow-settings.js.map", + "backend/dist/routes/traffic-flow-settings.d.ts", + "backend/dist/routes/traffic-flow-settings.d.ts.map", + "backend/dist/routes/traffic-flow.js", + "backend/dist/routes/traffic-flow.js.map", + "backend/dist/routes/traffic-flow.d.ts", + "backend/dist/routes/traffic-flow.d.ts.map", + "backend/dist/routes/traffic.js", + "backend/dist/routes/traffic.js.map", + "backend/dist/routes/traffic.d.ts", + "backend/dist/routes/traffic.d.ts.map", + "backend/dist/routes/uptime.js", + "backend/dist/routes/uptime.js.map", + "backend/dist/routes/uptime.d.ts", + "backend/dist/routes/uptime.d.ts.map", + "backend/dist/routes/users.js", + "backend/dist/routes/users.js.map", + "backend/dist/routes/users.d.ts", + "backend/dist/routes/users.d.ts.map", + "backend/dist/routes/vxlan.js", + "backend/dist/routes/vxlan.js.map", + "backend/dist/routes/vxlan.d.ts", + "backend/dist/routes/vxlan.d.ts.map", + "backend/dist/routes/wireguard.js", + "backend/dist/routes/wireguard.js.map", + "backend/dist/routes/wireguard.d.ts", + "backend/dist/routes/wireguard.d.ts.map", + "backend/dist/scripts/migrate-sqlite-to-pg.js", + "backend/dist/scripts/migrate-sqlite-to-pg.js.map", + "backend/dist/scripts/migrate-sqlite-to-pg.d.ts", + "backend/dist/scripts/migrate-sqlite-to-pg.d.ts.map", + "backend/dist/scripts/rebuild-flow-facts.js", + "backend/dist/scripts/rebuild-flow-facts.js.map", + "backend/dist/scripts/rebuild-flow-facts.d.ts", + "backend/dist/scripts/rebuild-flow-facts.d.ts.map", + "backend/dist/services/acme-cloudflare.js", + "backend/dist/services/acme-cloudflare.js.map", + "backend/dist/services/acme-cloudflare.d.ts", + "backend/dist/services/acme-cloudflare.d.ts.map", + "backend/dist/services/alert-collector-hooks.js", + "backend/dist/services/alert-collector-hooks.js.map", + "backend/dist/services/alert-collector-hooks.d.ts", + "backend/dist/services/alert-collector-hooks.d.ts.map", + "backend/dist/services/alert-engine/confirm-stability.js", + "backend/dist/services/alert-engine/confirm-stability.js.map", + "backend/dist/services/alert-engine/confirm-stability.d.ts", + "backend/dist/services/alert-engine/confirm-stability.d.ts.map", + "backend/dist/services/alert-engine/cooldown.js", + "backend/dist/services/alert-engine/cooldown.js.map", + "backend/dist/services/alert-engine/cooldown.d.ts", + "backend/dist/services/alert-engine/cooldown.d.ts.map", + "backend/dist/services/alert-engine/decision-engine.js", + "backend/dist/services/alert-engine/decision-engine.js.map", + "backend/dist/services/alert-engine/decision-engine.d.ts", + "backend/dist/services/alert-engine/decision-engine.d.ts.map", + "backend/dist/services/alert-engine/evaluate-rule.js", + "backend/dist/services/alert-engine/evaluate-rule.js.map", + "backend/dist/services/alert-engine/evaluate-rule.d.ts", + "backend/dist/services/alert-engine/evaluate-rule.d.ts.map", + "backend/dist/services/alert-engine/groups.js", + "backend/dist/services/alert-engine/groups.js.map", + "backend/dist/services/alert-engine/groups.d.ts", + "backend/dist/services/alert-engine/groups.d.ts.map", + "backend/dist/services/alert-engine/outbox-execution.js", + "backend/dist/services/alert-engine/outbox-execution.js.map", + "backend/dist/services/alert-engine/outbox-execution.d.ts", + "backend/dist/services/alert-engine/outbox-execution.d.ts.map", + "backend/dist/services/alert-engine/outbox.js", + "backend/dist/services/alert-engine/outbox.js.map", + "backend/dist/services/alert-engine/outbox.d.ts", + "backend/dist/services/alert-engine/outbox.d.ts.map", + "backend/dist/services/alert-engine/prev-live-store.js", + "backend/dist/services/alert-engine/prev-live-store.js.map", + "backend/dist/services/alert-engine/prev-live-store.d.ts", + "backend/dist/services/alert-engine/prev-live-store.d.ts.map", + "backend/dist/services/alert-engine/rule-matcher.js", + "backend/dist/services/alert-engine/rule-matcher.js.map", + "backend/dist/services/alert-engine/rule-matcher.d.ts", + "backend/dist/services/alert-engine/rule-matcher.d.ts.map", + "backend/dist/services/alert-engine/run-once.js", + "backend/dist/services/alert-engine/run-once.js.map", + "backend/dist/services/alert-engine/run-once.d.ts", + "backend/dist/services/alert-engine/run-once.d.ts.map", + "backend/dist/services/alert-engine/signal-ingestor.js", + "backend/dist/services/alert-engine/signal-ingestor.js.map", + "backend/dist/services/alert-engine/signal-ingestor.d.ts", + "backend/dist/services/alert-engine/signal-ingestor.d.ts.map", + "backend/dist/services/alert-engine/signals-from-collectors.js", + "backend/dist/services/alert-engine/signals-from-collectors.js.map", + "backend/dist/services/alert-engine/signals-from-collectors.d.ts", + "backend/dist/services/alert-engine/signals-from-collectors.d.ts.map", + "backend/dist/services/alert-engine/snapshot.js", + "backend/dist/services/alert-engine/snapshot.js.map", + "backend/dist/services/alert-engine/snapshot.d.ts", + "backend/dist/services/alert-engine/snapshot.d.ts.map", + "backend/dist/services/alert-engine/source-watermark.js", + "backend/dist/services/alert-engine/source-watermark.js.map", + "backend/dist/services/alert-engine/source-watermark.d.ts", + "backend/dist/services/alert-engine/source-watermark.d.ts.map", + "backend/dist/services/alert-engine/state-machine.js", + "backend/dist/services/alert-engine/state-machine.js.map", + "backend/dist/services/alert-engine/state-machine.d.ts", + "backend/dist/services/alert-engine/state-machine.d.ts.map", + "backend/dist/services/alert-engine/telegram-emoji.js", + "backend/dist/services/alert-engine/telegram-emoji.js.map", + "backend/dist/services/alert-engine/telegram-emoji.d.ts", + "backend/dist/services/alert-engine/telegram-emoji.d.ts.map", + "backend/dist/services/alert-engine/types.js", + "backend/dist/services/alert-engine/types.js.map", + "backend/dist/services/alert-engine/types.d.ts", + "backend/dist/services/alert-engine/types.d.ts.map", + "backend/dist/services/alerts-config-execution.js", + "backend/dist/services/alerts-config-execution.js.map", + "backend/dist/services/alerts-config-execution.d.ts", + "backend/dist/services/alerts-config-execution.d.ts.map", + "backend/dist/services/alerts-outbox-overview.js", + "backend/dist/services/alerts-outbox-overview.js.map", + "backend/dist/services/alerts-outbox-overview.d.ts", + "backend/dist/services/alerts-outbox-overview.d.ts.map", + "backend/dist/services/alerts-outbox-retry.js", + "backend/dist/services/alerts-outbox-retry.js.map", + "backend/dist/services/alerts-outbox-retry.d.ts", + "backend/dist/services/alerts-outbox-retry.d.ts.map", + "backend/dist/services/alerts-overview.js", + "backend/dist/services/alerts-overview.js.map", + "backend/dist/services/alerts-overview.d.ts", + "backend/dist/services/alerts-overview.d.ts.map", + "backend/dist/services/alerts-revision.js", + "backend/dist/services/alerts-revision.js.map", + "backend/dist/services/alerts-revision.d.ts", + "backend/dist/services/alerts-revision.d.ts.map", + "backend/dist/services/alerts-service.js", + "backend/dist/services/alerts-service.js.map", + "backend/dist/services/alerts-service.d.ts", + "backend/dist/services/alerts-service.d.ts.map", + "backend/dist/services/alerts-telegram-delivery.js", + "backend/dist/services/alerts-telegram-delivery.js.map", + "backend/dist/services/alerts-telegram-delivery.d.ts", + "backend/dist/services/alerts-telegram-delivery.d.ts.map", + "backend/dist/services/alerts-telegram-send.js", + "backend/dist/services/alerts-telegram-send.js.map", + "backend/dist/services/alerts-telegram-send.d.ts", + "backend/dist/services/alerts-telegram-send.d.ts.map", + "backend/dist/services/alerts-telegram-settings.js", + "backend/dist/services/alerts-telegram-settings.js.map", + "backend/dist/services/alerts-telegram-settings.d.ts", + "backend/dist/services/alerts-telegram-settings.d.ts.map", + "backend/dist/services/backup-deletion.js", + "backend/dist/services/backup-deletion.js.map", + "backend/dist/services/backup-deletion.d.ts", + "backend/dist/services/backup-deletion.d.ts.map", + "backend/dist/services/backup-dto.js", + "backend/dist/services/backup-dto.js.map", + "backend/dist/services/backup-dto.d.ts", + "backend/dist/services/backup-dto.d.ts.map", + "backend/dist/services/backup-job-execution.js", + "backend/dist/services/backup-job-execution.js.map", + "backend/dist/services/backup-job-execution.d.ts", + "backend/dist/services/backup-job-execution.d.ts.map", + "backend/dist/services/backup-prune.js", + "backend/dist/services/backup-prune.js.map", + "backend/dist/services/backup-prune.d.ts", + "backend/dist/services/backup-prune.d.ts.map", + "backend/dist/services/backup-restore.js", + "backend/dist/services/backup-restore.js.map", + "backend/dist/services/backup-restore.d.ts", + "backend/dist/services/backup-restore.d.ts.map", + "backend/dist/services/backup-scheduler-collector.js", + "backend/dist/services/backup-scheduler-collector.js.map", + "backend/dist/services/backup-scheduler-collector.d.ts", + "backend/dist/services/backup-scheduler-collector.d.ts.map", + "backend/dist/services/backup-scheduler-run.js", + "backend/dist/services/backup-scheduler-run.js.map", + "backend/dist/services/backup-scheduler-run.d.ts", + "backend/dist/services/backup-scheduler-run.d.ts.map", + "backend/dist/services/backup-service.js", + "backend/dist/services/backup-service.js.map", + "backend/dist/services/backup-service.d.ts", + "backend/dist/services/backup-service.d.ts.map", + "backend/dist/services/backup-storage-update.js", + "backend/dist/services/backup-storage-update.js.map", + "backend/dist/services/backup-storage-update.d.ts", + "backend/dist/services/backup-storage-update.d.ts.map", + "backend/dist/services/bandwidth-test-rates.js", + "backend/dist/services/bandwidth-test-rates.js.map", + "backend/dist/services/bandwidth-test-rates.d.ts", + "backend/dist/services/bandwidth-test-rates.d.ts.map", + "backend/dist/services/bandwidth-test-status.js", + "backend/dist/services/bandwidth-test-status.js.map", + "backend/dist/services/bandwidth-test-status.d.ts", + "backend/dist/services/bandwidth-test-status.d.ts.map", + "backend/dist/services/bgp-catalog-poll.js", + "backend/dist/services/bgp-catalog-poll.js.map", + "backend/dist/services/bgp-catalog-poll.d.ts", + "backend/dist/services/bgp-catalog-poll.d.ts.map", + "backend/dist/services/bgp-parse-sessions.js", + "backend/dist/services/bgp-parse-sessions.js.map", + "backend/dist/services/bgp-parse-sessions.d.ts", + "backend/dist/services/bgp-parse-sessions.d.ts.map", + "backend/dist/services/bgp-peers-live.js", + "backend/dist/services/bgp-peers-live.js.map", + "backend/dist/services/bgp-peers-live.d.ts", + "backend/dist/services/bgp-peers-live.d.ts.map", + "backend/dist/services/btest-node-locks.js", + "backend/dist/services/btest-node-locks.js.map", + "backend/dist/services/btest-node-locks.d.ts", + "backend/dist/services/btest-node-locks.d.ts.map", + "backend/dist/services/certificate-issue-dto.js", + "backend/dist/services/certificate-issue-dto.js.map", + "backend/dist/services/certificate-issue-dto.d.ts", + "backend/dist/services/certificate-issue-dto.d.ts.map", + "backend/dist/services/certificate-issue-execution.js", + "backend/dist/services/certificate-issue-execution.js.map", + "backend/dist/services/certificate-issue-execution.d.ts", + "backend/dist/services/certificate-issue-execution.d.ts.map", + "backend/dist/services/certificate-issue-request.js", + "backend/dist/services/certificate-issue-request.js.map", + "backend/dist/services/certificate-issue-request.d.ts", + "backend/dist/services/certificate-issue-request.d.ts.map", + "backend/dist/services/certificate-issue-runner.js", + "backend/dist/services/certificate-issue-runner.js.map", + "backend/dist/services/certificate-issue-runner.d.ts", + "backend/dist/services/certificate-issue-runner.d.ts.map", + "backend/dist/services/certificate-parse.js", + "backend/dist/services/certificate-parse.js.map", + "backend/dist/services/certificate-parse.d.ts", + "backend/dist/services/certificate-parse.d.ts.map", + "backend/dist/services/certificate-renew-collector.js", + "backend/dist/services/certificate-renew-collector.js.map", + "backend/dist/services/certificate-renew-collector.d.ts", + "backend/dist/services/certificate-renew-collector.d.ts.map", + "backend/dist/services/certificates-service.js", + "backend/dist/services/certificates-service.js.map", + "backend/dist/services/certificates-service.d.ts", + "backend/dist/services/certificates-service.d.ts.map", + "backend/dist/services/certificates-state.js", + "backend/dist/services/certificates-state.js.map", + "backend/dist/services/certificates-state.d.ts", + "backend/dist/services/certificates-state.d.ts.map", + "backend/dist/services/complete-count.js", + "backend/dist/services/complete-count.js.map", + "backend/dist/services/complete-count.d.ts", + "backend/dist/services/complete-count.d.ts.map", + "backend/dist/services/config-apply-plan.js", + "backend/dist/services/config-apply-plan.js.map", + "backend/dist/services/config-apply-plan.d.ts", + "backend/dist/services/config-apply-plan.d.ts.map", + "backend/dist/services/config-revisions.js", + "backend/dist/services/config-revisions.js.map", + "backend/dist/services/config-revisions.d.ts", + "backend/dist/services/config-revisions.d.ts.map", + "backend/dist/services/containers-live.js", + "backend/dist/services/containers-live.js.map", + "backend/dist/services/containers-live.d.ts", + "backend/dist/services/containers-live.d.ts.map", + "backend/dist/services/containers-state.js", + "backend/dist/services/containers-state.js.map", + "backend/dist/services/containers-state.d.ts", + "backend/dist/services/containers-state.d.ts.map", + "backend/dist/services/database-background-work.js", + "backend/dist/services/database-background-work.js.map", + "backend/dist/services/database-background-work.d.ts", + "backend/dist/services/database-background-work.d.ts.map", + "backend/dist/services/database-request-gate.js", + "backend/dist/services/database-request-gate.js.map", + "backend/dist/services/database-request-gate.d.ts", + "backend/dist/services/database-request-gate.d.ts.map", + "backend/dist/services/entity-snapshots.js", + "backend/dist/services/entity-snapshots.js.map", + "backend/dist/services/entity-snapshots.d.ts", + "backend/dist/services/entity-snapshots.d.ts.map", + "backend/dist/services/evobgp-catalog.js", + "backend/dist/services/evobgp-catalog.js.map", + "backend/dist/services/evobgp-catalog.d.ts", + "backend/dist/services/evobgp-catalog.d.ts.map", + "backend/dist/services/firewall-live.js", + "backend/dist/services/firewall-live.js.map", + "backend/dist/services/firewall-live.d.ts", + "backend/dist/services/firewall-live.d.ts.map", + "backend/dist/services/firewall-poll.js", + "backend/dist/services/firewall-poll.js.map", + "backend/dist/services/firewall-poll.d.ts", + "backend/dist/services/firewall-poll.d.ts.map", + "backend/dist/services/geoip-settings.js", + "backend/dist/services/geoip-settings.js.map", + "backend/dist/services/geoip-settings.d.ts", + "backend/dist/services/geoip-settings.d.ts.map", + "backend/dist/services/geoip-update-collector.js", + "backend/dist/services/geoip-update-collector.js.map", + "backend/dist/services/geoip-update-collector.d.ts", + "backend/dist/services/geoip-update-collector.d.ts.map", + "backend/dist/services/gre-bgp-snapshot-collector.js", + "backend/dist/services/gre-bgp-snapshot-collector.js.map", + "backend/dist/services/gre-bgp-snapshot-collector.d.ts", + "backend/dist/services/gre-bgp-snapshot-collector.d.ts.map", + "backend/dist/services/gre-catalog-poll.js", + "backend/dist/services/gre-catalog-poll.js.map", + "backend/dist/services/gre-catalog-poll.d.ts", + "backend/dist/services/gre-catalog-poll.d.ts.map", + "backend/dist/services/gre-comment.js", + "backend/dist/services/gre-comment.js.map", + "backend/dist/services/gre-comment.d.ts", + "backend/dist/services/gre-comment.d.ts.map", + "backend/dist/services/gre-live.js", + "backend/dist/services/gre-live.js.map", + "backend/dist/services/gre-live.d.ts", + "backend/dist/services/gre-live.d.ts.map", + "backend/dist/services/gre-tunnels-live.js", + "backend/dist/services/gre-tunnels-live.js.map", + "backend/dist/services/gre-tunnels-live.d.ts", + "backend/dist/services/gre-tunnels-live.d.ts.map", + "backend/dist/services/internet-path-collector.js", + "backend/dist/services/internet-path-collector.js.map", + "backend/dist/services/internet-path-collector.d.ts", + "backend/dist/services/internet-path-collector.d.ts.map", + "backend/dist/services/internet-path-snapshot.js", + "backend/dist/services/internet-path-snapshot.js.map", + "backend/dist/services/internet-path-snapshot.d.ts", + "backend/dist/services/internet-path-snapshot.d.ts.map", + "backend/dist/services/ipsec-ca.js", + "backend/dist/services/ipsec-ca.js.map", + "backend/dist/services/ipsec-ca.d.ts", + "backend/dist/services/ipsec-ca.d.ts.map", + "backend/dist/services/ipsec-certificate-dn.js", + "backend/dist/services/ipsec-certificate-dn.js.map", + "backend/dist/services/ipsec-certificate-dn.d.ts", + "backend/dist/services/ipsec-certificate-dn.d.ts.map", + "backend/dist/services/ipsec-cleanup.js", + "backend/dist/services/ipsec-cleanup.js.map", + "backend/dist/services/ipsec-cleanup.d.ts", + "backend/dist/services/ipsec-cleanup.d.ts.map", + "backend/dist/services/ipsec-config.js", + "backend/dist/services/ipsec-config.js.map", + "backend/dist/services/ipsec-config.d.ts", + "backend/dist/services/ipsec-config.d.ts.map", + "backend/dist/services/ipsec-live.js", + "backend/dist/services/ipsec-live.js.map", + "backend/dist/services/ipsec-live.d.ts", + "backend/dist/services/ipsec-live.d.ts.map", + "backend/dist/services/ipsec-operation.js", + "backend/dist/services/ipsec-operation.js.map", + "backend/dist/services/ipsec-operation.d.ts", + "backend/dist/services/ipsec-operation.d.ts.map", + "backend/dist/services/ipsec-ros.js", + "backend/dist/services/ipsec-ros.js.map", + "backend/dist/services/ipsec-ros.d.ts", + "backend/dist/services/ipsec-ros.d.ts.map", + "backend/dist/services/mikrotik.js", + "backend/dist/services/mikrotik.js.map", + "backend/dist/services/mikrotik.d.ts", + "backend/dist/services/mikrotik.d.ts.map", + "backend/dist/services/monitoring-server-catalog.js", + "backend/dist/services/monitoring-server-catalog.js.map", + "backend/dist/services/monitoring-server-catalog.d.ts", + "backend/dist/services/monitoring-server-catalog.d.ts.map", + "backend/dist/services/ospf-catalog-poll.js", + "backend/dist/services/ospf-catalog-poll.js.map", + "backend/dist/services/ospf-catalog-poll.d.ts", + "backend/dist/services/ospf-catalog-poll.d.ts.map", + "backend/dist/services/ospf-effective-disabled.js", + "backend/dist/services/ospf-effective-disabled.js.map", + "backend/dist/services/ospf-effective-disabled.d.ts", + "backend/dist/services/ospf-effective-disabled.d.ts.map", + "backend/dist/services/ospf-observed-values.js", + "backend/dist/services/ospf-observed-values.js.map", + "backend/dist/services/ospf-observed-values.d.ts", + "backend/dist/services/ospf-observed-values.d.ts.map", + "backend/dist/services/ospf-optimizer-identity.js", + "backend/dist/services/ospf-optimizer-identity.js.map", + "backend/dist/services/ospf-optimizer-identity.d.ts", + "backend/dist/services/ospf-optimizer-identity.d.ts.map", + "backend/dist/services/ospf-optimizer-metrics.js", + "backend/dist/services/ospf-optimizer-metrics.js.map", + "backend/dist/services/ospf-optimizer-metrics.d.ts", + "backend/dist/services/ospf-optimizer-metrics.d.ts.map", + "backend/dist/services/ospf-optimizer-plan.js", + "backend/dist/services/ospf-optimizer-plan.js.map", + "backend/dist/services/ospf-optimizer-plan.d.ts", + "backend/dist/services/ospf-optimizer-plan.d.ts.map", + "backend/dist/services/ospf-route-parse.js", + "backend/dist/services/ospf-route-parse.js.map", + "backend/dist/services/ospf-route-parse.d.ts", + "backend/dist/services/ospf-route-parse.d.ts.map", + "backend/dist/services/ping-probe-replacement.js", + "backend/dist/services/ping-probe-replacement.js.map", + "backend/dist/services/ping-probe-replacement.d.ts", + "backend/dist/services/ping-probe-replacement.d.ts.map", + "backend/dist/services/poller.js", + "backend/dist/services/poller.js.map", + "backend/dist/services/poller.d.ts", + "backend/dist/services/poller.d.ts.map", + "backend/dist/services/recursive-apply.js", + "backend/dist/services/recursive-apply.js.map", + "backend/dist/services/recursive-apply.d.ts", + "backend/dist/services/recursive-apply.d.ts.map", + "backend/dist/services/recursive-route-catalog.js", + "backend/dist/services/recursive-route-catalog.js.map", + "backend/dist/services/recursive-route-catalog.d.ts", + "backend/dist/services/recursive-route-catalog.d.ts.map", + "backend/dist/services/recursive-route-validation.js", + "backend/dist/services/recursive-route-validation.js.map", + "backend/dist/services/recursive-route-validation.d.ts", + "backend/dist/services/recursive-route-validation.d.ts.map", + "backend/dist/services/ros-metric-parse.js", + "backend/dist/services/ros-metric-parse.js.map", + "backend/dist/services/ros-metric-parse.d.ts", + "backend/dist/services/ros-metric-parse.d.ts.map", + "backend/dist/services/ros-ops.js", + "backend/dist/services/ros-ops.js.map", + "backend/dist/services/ros-ops.d.ts", + "backend/dist/services/ros-ops.d.ts.map", + "backend/dist/services/s3-backup-client.js", + "backend/dist/services/s3-backup-client.js.map", + "backend/dist/services/s3-backup-client.d.ts", + "backend/dist/services/s3-backup-client.d.ts.map", + "backend/dist/services/scheduler-recorded-run.js", + "backend/dist/services/scheduler-recorded-run.js.map", + "backend/dist/services/scheduler-recorded-run.d.ts", + "backend/dist/services/scheduler-recorded-run.d.ts.map", + "backend/dist/services/scheduler-running.js", + "backend/dist/services/scheduler-running.js.map", + "backend/dist/services/scheduler-running.d.ts", + "backend/dist/services/scheduler-running.d.ts.map", + "backend/dist/services/scheduler.js", + "backend/dist/services/scheduler.js.map", + "backend/dist/services/scheduler.d.ts", + "backend/dist/services/scheduler.d.ts.map", + "backend/dist/services/serial-operation.js", + "backend/dist/services/serial-operation.js.map", + "backend/dist/services/serial-operation.d.ts", + "backend/dist/services/serial-operation.d.ts.map", + "backend/dist/services/servers-rest-ping-collector.js", + "backend/dist/services/servers-rest-ping-collector.js.map", + "backend/dist/services/servers-rest-ping-collector.d.ts", + "backend/dist/services/servers-rest-ping-collector.d.ts.map", + "backend/dist/services/speed-history-dto.js", + "backend/dist/services/speed-history-dto.js.map", + "backend/dist/services/speed-history-dto.d.ts", + "backend/dist/services/speed-history-dto.d.ts.map", + "backend/dist/services/speed-probe-dto.js", + "backend/dist/services/speed-probe-dto.js.map", + "backend/dist/services/speed-probe-dto.d.ts", + "backend/dist/services/speed-probe-dto.d.ts.map", + "backend/dist/services/speed-probe-replacement.js", + "backend/dist/services/speed-probe-replacement.js.map", + "backend/dist/services/speed-probe-replacement.d.ts", + "backend/dist/services/speed-probe-replacement.d.ts.map", + "backend/dist/services/speed-run-error-message.js", + "backend/dist/services/speed-run-error-message.js.map", + "backend/dist/services/speed-run-error-message.d.ts", + "backend/dist/services/speed-run-error-message.d.ts.map", + "backend/dist/services/speed-run-persistence.js", + "backend/dist/services/speed-run-persistence.js.map", + "backend/dist/services/speed-run-persistence.d.ts", + "backend/dist/services/speed-run-persistence.d.ts.map", + "backend/dist/services/statistics-aggregate.js", + "backend/dist/services/statistics-aggregate.js.map", + "backend/dist/services/statistics-aggregate.d.ts", + "backend/dist/services/statistics-aggregate.d.ts.map", + "backend/dist/services/system-database-backup.js", + "backend/dist/services/system-database-backup.js.map", + "backend/dist/services/system-database-backup.d.ts", + "backend/dist/services/system-database-backup.d.ts.map", + "backend/dist/services/system-database-cache.js", + "backend/dist/services/system-database-cache.js.map", + "backend/dist/services/system-database-cache.d.ts", + "backend/dist/services/system-database-cache.d.ts.map", + "backend/dist/services/system-database-operation.js", + "backend/dist/services/system-database-operation.js.map", + "backend/dist/services/system-database-operation.d.ts", + "backend/dist/services/system-database-operation.d.ts.map", + "backend/dist/services/system-database-partition-restore.js", + "backend/dist/services/system-database-partition-restore.js.map", + "backend/dist/services/system-database-partition-restore.d.ts", + "backend/dist/services/system-database-partition-restore.d.ts.map", + "backend/dist/services/system-database-restore-execution.js", + "backend/dist/services/system-database-restore-execution.js.map", + "backend/dist/services/system-database-restore-execution.d.ts", + "backend/dist/services/system-database-restore-execution.d.ts.map", + "backend/dist/services/traffic-collector.js", + "backend/dist/services/traffic-collector.js.map", + "backend/dist/services/traffic-collector.d.ts", + "backend/dist/services/traffic-collector.d.ts.map", + "backend/dist/services/traffic-flow-analytics.js", + "backend/dist/services/traffic-flow-analytics.js.map", + "backend/dist/services/traffic-flow-analytics.d.ts", + "backend/dist/services/traffic-flow-analytics.d.ts.map", + "backend/dist/services/traffic-flow-apps.js", + "backend/dist/services/traffic-flow-apps.js.map", + "backend/dist/services/traffic-flow-apps.d.ts", + "backend/dist/services/traffic-flow-apps.d.ts.map", + "backend/dist/services/traffic-flow-brands.js", + "backend/dist/services/traffic-flow-brands.js.map", + "backend/dist/services/traffic-flow-brands.d.ts", + "backend/dist/services/traffic-flow-brands.d.ts.map", + "backend/dist/services/traffic-flow-classify.js", + "backend/dist/services/traffic-flow-classify.js.map", + "backend/dist/services/traffic-flow-classify.d.ts", + "backend/dist/services/traffic-flow-classify.d.ts.map", + "backend/dist/services/traffic-flow-collector-ipc.js", + "backend/dist/services/traffic-flow-collector-ipc.js.map", + "backend/dist/services/traffic-flow-collector-ipc.d.ts", + "backend/dist/services/traffic-flow-collector-ipc.d.ts.map", + "backend/dist/services/traffic-flow-collector-worker.js", + "backend/dist/services/traffic-flow-collector-worker.js.map", + "backend/dist/services/traffic-flow-collector-worker.d.ts", + "backend/dist/services/traffic-flow-collector-worker.d.ts.map", + "backend/dist/services/traffic-flow-dedup.js", + "backend/dist/services/traffic-flow-dedup.js.map", + "backend/dist/services/traffic-flow-dedup.d.ts", + "backend/dist/services/traffic-flow-dedup.d.ts.map", + "backend/dist/services/traffic-flow-dest.js", + "backend/dist/services/traffic-flow-dest.js.map", + "backend/dist/services/traffic-flow-dest.d.ts", + "backend/dist/services/traffic-flow-dest.d.ts.map", + "backend/dist/services/traffic-flow-engine.js", + "backend/dist/services/traffic-flow-engine.js.map", + "backend/dist/services/traffic-flow-engine.d.ts", + "backend/dist/services/traffic-flow-engine.d.ts.map", + "backend/dist/services/traffic-flow-facts-filter.js", + "backend/dist/services/traffic-flow-facts-filter.js.map", + "backend/dist/services/traffic-flow-facts-filter.d.ts", + "backend/dist/services/traffic-flow-facts-filter.d.ts.map", + "backend/dist/services/traffic-flow-facts-rebuild.js", + "backend/dist/services/traffic-flow-facts-rebuild.js.map", + "backend/dist/services/traffic-flow-facts-rebuild.d.ts", + "backend/dist/services/traffic-flow-facts-rebuild.d.ts.map", + "backend/dist/services/traffic-flow-facts.js", + "backend/dist/services/traffic-flow-facts.js.map", + "backend/dist/services/traffic-flow-facts.d.ts", + "backend/dist/services/traffic-flow-facts.d.ts.map", + "backend/dist/services/traffic-flow-geoip.js", + "backend/dist/services/traffic-flow-geoip.js.map", + "backend/dist/services/traffic-flow-geoip.d.ts", + "backend/dist/services/traffic-flow-geoip.d.ts.map", + "backend/dist/services/traffic-flow-host-file-builders.js", + "backend/dist/services/traffic-flow-host-file-builders.js.map", + "backend/dist/services/traffic-flow-host-file-builders.d.ts", + "backend/dist/services/traffic-flow-host-file-builders.d.ts.map", + "backend/dist/services/traffic-flow-host-files.js", + "backend/dist/services/traffic-flow-host-files.js.map", + "backend/dist/services/traffic-flow-host-files.d.ts", + "backend/dist/services/traffic-flow-host-files.d.ts.map", + "backend/dist/services/traffic-flow-ifaces.js", + "backend/dist/services/traffic-flow-ifaces.js.map", + "backend/dist/services/traffic-flow-ifaces.d.ts", + "backend/dist/services/traffic-flow-ifaces.d.ts.map", + "backend/dist/services/traffic-flow-ifindex.js", + "backend/dist/services/traffic-flow-ifindex.js.map", + "backend/dist/services/traffic-flow-ifindex.d.ts", + "backend/dist/services/traffic-flow-ifindex.d.ts.map", + "backend/dist/services/traffic-flow-ingest.js", + "backend/dist/services/traffic-flow-ingest.js.map", + "backend/dist/services/traffic-flow-ingest.d.ts", + "backend/dist/services/traffic-flow-ingest.d.ts.map", + "backend/dist/services/traffic-flow-ip.js", + "backend/dist/services/traffic-flow-ip.js.map", + "backend/dist/services/traffic-flow-ip.d.ts", + "backend/dist/services/traffic-flow-ip.d.ts.map", + "backend/dist/services/traffic-flow-key-execution.js", + "backend/dist/services/traffic-flow-key-execution.js.map", + "backend/dist/services/traffic-flow-key-execution.d.ts", + "backend/dist/services/traffic-flow-key-execution.d.ts.map", + "backend/dist/services/traffic-flow-map-exporter.js", + "backend/dist/services/traffic-flow-map-exporter.js.map", + "backend/dist/services/traffic-flow-map-exporter.d.ts", + "backend/dist/services/traffic-flow-map-exporter.d.ts.map", + "backend/dist/services/traffic-flow-map-hops.js", + "backend/dist/services/traffic-flow-map-hops.js.map", + "backend/dist/services/traffic-flow-map-hops.d.ts", + "backend/dist/services/traffic-flow-map-hops.d.ts.map", + "backend/dist/services/traffic-flow-overlay.js", + "backend/dist/services/traffic-flow-overlay.js.map", + "backend/dist/services/traffic-flow-overlay.d.ts", + "backend/dist/services/traffic-flow-overlay.d.ts.map", + "backend/dist/services/traffic-flow-parse.js", + "backend/dist/services/traffic-flow-parse.js.map", + "backend/dist/services/traffic-flow-parse.d.ts", + "backend/dist/services/traffic-flow-parse.d.ts.map", + "backend/dist/services/traffic-flow-planes.js", + "backend/dist/services/traffic-flow-planes.js.map", + "backend/dist/services/traffic-flow-planes.d.ts", + "backend/dist/services/traffic-flow-planes.d.ts.map", + "backend/dist/services/traffic-flow-purge-execution.js", + "backend/dist/services/traffic-flow-purge-execution.js.map", + "backend/dist/services/traffic-flow-purge-execution.d.ts", + "backend/dist/services/traffic-flow-purge-execution.d.ts.map", + "backend/dist/services/traffic-flow-ripe.js", + "backend/dist/services/traffic-flow-ripe.js.map", + "backend/dist/services/traffic-flow-ripe.d.ts", + "backend/dist/services/traffic-flow-ripe.d.ts.map", + "backend/dist/services/traffic-flow-settings.js", + "backend/dist/services/traffic-flow-settings.js.map", + "backend/dist/services/traffic-flow-settings.d.ts", + "backend/dist/services/traffic-flow-settings.d.ts.map", + "backend/dist/services/traffic-flow-topology.js", + "backend/dist/services/traffic-flow-topology.js.map", + "backend/dist/services/traffic-flow-topology.d.ts", + "backend/dist/services/traffic-flow-topology.d.ts.map", + "backend/dist/services/traffic-flow-worker-shutdown.js", + "backend/dist/services/traffic-flow-worker-shutdown.js.map", + "backend/dist/services/traffic-flow-worker-shutdown.d.ts", + "backend/dist/services/traffic-flow-worker-shutdown.d.ts.map", + "backend/dist/services/traffic-rate.js", + "backend/dist/services/traffic-rate.js.map", + "backend/dist/services/traffic-rate.d.ts", + "backend/dist/services/traffic-rate.d.ts.map", + "backend/dist/services/traffic-users.js", + "backend/dist/services/traffic-users.js.map", + "backend/dist/services/traffic-users.d.ts", + "backend/dist/services/traffic-users.d.ts.map", + "backend/dist/services/uptime-collector.js", + "backend/dist/services/uptime-collector.js.map", + "backend/dist/services/uptime-collector.d.ts", + "backend/dist/services/uptime-collector.d.ts.map", + "backend/dist/services/uptime-probe-observations.js", + "backend/dist/services/uptime-probe-observations.js.map", + "backend/dist/services/uptime-probe-observations.d.ts", + "backend/dist/services/uptime-probe-observations.d.ts.map", + "backend/dist/services/uptime-speed-service.js", + "backend/dist/services/uptime-speed-service.js.map", + "backend/dist/services/uptime-speed-service.d.ts", + "backend/dist/services/uptime-speed-service.d.ts.map", + "backend/dist/services/vxlan-live.js", + "backend/dist/services/vxlan-live.js.map", + "backend/dist/services/vxlan-live.d.ts", + "backend/dist/services/vxlan-live.d.ts.map", + "backend/dist/services/wg-keys.js", + "backend/dist/services/wg-keys.js.map", + "backend/dist/services/wg-keys.d.ts", + "backend/dist/services/wg-keys.d.ts.map", + "backend/dist/services/wireguard-config.js", + "backend/dist/services/wireguard-config.js.map", + "backend/dist/services/wireguard-config.d.ts", + "backend/dist/services/wireguard-config.d.ts.map", + "backend/dist/services/wireguard-delete.js", + "backend/dist/services/wireguard-delete.js.map", + "backend/dist/services/wireguard-delete.d.ts", + "backend/dist/services/wireguard-delete.d.ts.map", + "backend/dist/services/wireguard-import-apply.js", + "backend/dist/services/wireguard-import-apply.js.map", + "backend/dist/services/wireguard-import-apply.d.ts", + "backend/dist/services/wireguard-import-apply.d.ts.map", + "backend/dist/services/wireguard-import-revision.js", + "backend/dist/services/wireguard-import-revision.js.map", + "backend/dist/services/wireguard-import-revision.d.ts", + "backend/dist/services/wireguard-import-revision.d.ts.map", + "backend/dist/services/wireguard-import.js", + "backend/dist/services/wireguard-import.js.map", + "backend/dist/services/wireguard-import.d.ts", + "backend/dist/services/wireguard-import.d.ts.map", + "backend/dist/services/wireguard-live.js", + "backend/dist/services/wireguard-live.js.map", + "backend/dist/services/wireguard-live.d.ts", + "backend/dist/services/wireguard-live.d.ts.map", + "backend/dist/services/wireguard-observed-values.js", + "backend/dist/services/wireguard-observed-values.js.map", + "backend/dist/services/wireguard-observed-values.d.ts", + "backend/dist/services/wireguard-observed-values.d.ts.map", + "backend/dist/services/wireguard-ros.js", + "backend/dist/services/wireguard-ros.js.map", + "backend/dist/services/wireguard-ros.d.ts", + "backend/dist/services/wireguard-ros.d.ts.map", + "backend/dist/test/pg.js", + "backend/dist/test/pg.js.map", + "backend/dist/test/pg.d.ts", + "backend/dist/test/pg.d.ts.map", + "backend/dist/types/scheduler-run-snapshot.js", + "backend/dist/types/scheduler-run-snapshot.js.map", + "backend/dist/types/scheduler-run-snapshot.d.ts", + "backend/dist/types/scheduler-run-snapshot.d.ts.map", + "backend/dist/types/server.js", + "backend/dist/types/server.js.map", + "backend/dist/types/server.d.ts", + "backend/dist/types/server.d.ts.map", + "backend/dist/utils/abort-signals.js", + "backend/dist/utils/abort-signals.js.map", + "backend/dist/utils/abort-signals.d.ts", + "backend/dist/utils/abort-signals.d.ts.map", + "backend/dist/utils/ros-src-address.js", + "backend/dist/utils/ros-src-address.js.map", + "backend/dist/utils/ros-src-address.d.ts", + "backend/dist/utils/ros-src-address.d.ts.map", + "backend/dist/utils/server-id.js", + "backend/dist/utils/server-id.js.map", + "backend/dist/utils/server-id.d.ts", + "backend/dist/utils/server-id.d.ts.map", + "packages/contracts/dist/alerts.js", + "packages/contracts/dist/alerts.js.map", + "packages/contracts/dist/alerts.d.ts", + "packages/contracts/dist/alerts.d.ts.map", + "packages/contracts/dist/backups.js", + "packages/contracts/dist/backups.js.map", + "packages/contracts/dist/backups.d.ts", + "packages/contracts/dist/backups.d.ts.map", + "packages/contracts/dist/certificates.js", + "packages/contracts/dist/certificates.js.map", + "packages/contracts/dist/certificates.d.ts", + "packages/contracts/dist/certificates.d.ts.map", + "packages/contracts/dist/containers.js", + "packages/contracts/dist/containers.js.map", + "packages/contracts/dist/containers.d.ts", + "packages/contracts/dist/containers.d.ts.map", + "packages/contracts/dist/events.js", + "packages/contracts/dist/events.js.map", + "packages/contracts/dist/events.d.ts", + "packages/contracts/dist/events.d.ts.map", + "packages/contracts/dist/evobgp.js", + "packages/contracts/dist/evobgp.js.map", + "packages/contracts/dist/evobgp.d.ts", + "packages/contracts/dist/evobgp.d.ts.map", + "packages/contracts/dist/geoip.js", + "packages/contracts/dist/geoip.js.map", + "packages/contracts/dist/geoip.d.ts", + "packages/contracts/dist/geoip.d.ts.map", + "packages/contracts/dist/index.js", + "packages/contracts/dist/index.js.map", + "packages/contracts/dist/index.d.ts", + "packages/contracts/dist/index.d.ts.map", + "packages/contracts/dist/ipsec.js", + "packages/contracts/dist/ipsec.js.map", + "packages/contracts/dist/ipsec.d.ts", + "packages/contracts/dist/ipsec.d.ts.map", + "packages/contracts/dist/ospf-optimizer.js", + "packages/contracts/dist/ospf-optimizer.js.map", + "packages/contracts/dist/ospf-optimizer.d.ts", + "packages/contracts/dist/ospf-optimizer.d.ts.map", + "packages/contracts/dist/servers.js", + "packages/contracts/dist/servers.js.map", + "packages/contracts/dist/servers.d.ts", + "packages/contracts/dist/servers.d.ts.map", + "packages/contracts/dist/statistics.js", + "packages/contracts/dist/statistics.js.map", + "packages/contracts/dist/statistics.d.ts", + "packages/contracts/dist/statistics.d.ts.map", + "packages/contracts/dist/traffic-flow.js", + "packages/contracts/dist/traffic-flow.js.map", + "packages/contracts/dist/traffic-flow.d.ts", + "packages/contracts/dist/traffic-flow.d.ts.map", + "packages/contracts/dist/uptime-probes.js", + "packages/contracts/dist/uptime-probes.js.map", + "packages/contracts/dist/uptime-probes.d.ts", + "packages/contracts/dist/uptime-probes.d.ts.map", + "packages/contracts/dist/uptime-speed.js", + "packages/contracts/dist/uptime-speed.js.map", + "packages/contracts/dist/uptime-speed.d.ts", + "packages/contracts/dist/uptime-speed.d.ts.map", + "packages/contracts/dist/users.js", + "packages/contracts/dist/users.js.map", + "packages/contracts/dist/users.d.ts", + "packages/contracts/dist/users.d.ts.map", + "packages/contracts/dist/wireguard.js", + "packages/contracts/dist/wireguard.js.map", + "packages/contracts/dist/wireguard.d.ts", + "packages/contracts/dist/wireguard.d.ts.map" + ], + "missing": [], + "different": [], + "packagePreprocessingValidated": true, + "compiledNormalization": "CRLF to LF; emitted files derived from tracked non-test source inputs; stale nested local build outputs excluded" + }, + "stand": { + "date": "2026-10-10", + "readOnly": true, + "prefixes": [ + "mm-bgp93-", + "mm-time96-", + "mm-drop97-", + "mm-drop98-", + "mm-body100-", + "mm-ack102-", + "mm-ping103-", + "mm-bgp104-", + "mm-ipsec110-", + "mm-ipsec111-", + "mm-ipsec112-", + "mm-ipsec114-", + "mm-ipsec115-", + "mm-ipsec116-", + "ipsec-user-mm-ipsec", + "mm-vx107-", + "mm-vx108-", + "mm-ipv6vpn109-" + ], + "paths": [ + "/interface/gre", + "/interface/bridge", + "/ip/address", + "/routing/bgp/connection", + "/routing/bgp/instance", + "/routing/filter/rule", + "/ip/firewall/address-list", + "/ip/firewall/filter", + "/interface/wireguard", + "/interface/wireguard/peers", + "/routing/bfd/configuration", + "/routing/ospf/interface-template", + "/routing/ospf/area", + "/routing/ospf/instance", + "/interface/vxlan", + "/interface/vxlan/vteps", + "/ip/ipsec/peer", + "/ip/ipsec/identity", + "/ip/ipsec/mode-config", + "/ip/ipsec/policy", + "/ip/ipsec/policy/group", + "/ip/ipsec/profile", + "/ip/ipsec/proposal", + "/certificate", + "/file", + "/ip/route", + "/ipv6/address" + ], + "devices": [ + { + "id": 1, + "host": "194.226.121.150", + "enabled": true, + "version": "7.24.5 (stable)", + "reachable": true, + "counts": { + "/interface/gre": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/bridge": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/address": { + "rows": 1, + "ownFixtures": 0 + }, + "/routing/bgp/connection": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/bgp/instance": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/filter/rule": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/firewall/address-list": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/firewall/filter": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/wireguard": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/wireguard/peers": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/bfd/configuration": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/interface-template": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/area": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/instance": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/vxlan": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/vxlan/vteps": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/peer": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/identity": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/mode-config": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/policy": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/policy/group": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/profile": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/proposal": { + "rows": 1, + "ownFixtures": 0 + }, + "/certificate": { + "rows": 0, + "ownFixtures": 0 + }, + "/file": { + "rows": 2, + "ownFixtures": 0 + }, + "/ip/route": { + "rows": 4, + "ownFixtures": 0 + }, + "/ipv6/address": { + "rows": 2, + "ownFixtures": 0 + } + } + }, + { + "id": 2, + "host": "104.165.244.7", + "enabled": true, + "version": "7.24.5 (stable)", + "reachable": true, + "counts": { + "/interface/gre": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/bridge": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/address": { + "rows": 2, + "ownFixtures": 0 + }, + "/routing/bgp/connection": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/bgp/instance": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/filter/rule": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/firewall/address-list": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/firewall/filter": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/wireguard": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/wireguard/peers": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/bfd/configuration": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/interface-template": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/area": { + "rows": 0, + "ownFixtures": 0 + }, + "/routing/ospf/instance": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/vxlan": { + "rows": 0, + "ownFixtures": 0 + }, + "/interface/vxlan/vteps": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/peer": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/identity": { + "rows": 0, + "ownFixtures": 0 + }, + "/ip/ipsec/mode-config": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/policy": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/policy/group": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/profile": { + "rows": 1, + "ownFixtures": 0 + }, + "/ip/ipsec/proposal": { + "rows": 1, + "ownFixtures": 0 + }, + "/certificate": { + "rows": 0, + "ownFixtures": 0 + }, + "/file": { + "rows": 3, + "ownFixtures": 0 + }, + "/ip/route": { + "rows": 5, + "ownFixtures": 0 + }, + "/ipv6/address": { + "rows": 2, + "ownFixtures": 0 + } + } + } + ], + "database": { + "uptime_speed_test_runs": { + "ownFixtures": 0 + }, + "uptime_speed_probes": { + "ownFixtures": 0 + }, + "servers": 2, + "migrations": 9 + } + }, + "regression": { + "main": { + "total": 1244, + "passed": 1243, + "failed": 1, + "minutes": 28.8, + "failedCase": "large-backups.spec.ts: mobile button geometry measured during CSS transition" + }, + "context": { + "total": 221, + "passed": 221, + "failed": 0, + "minutes": 7.2 + }, + "delta": { + "passed": 1, + "seconds": 10.2, + "change": "expect.poll waits for original >=44px and unchanged viewport/pinned bounds" + }, + "uniqueAccepted": 1465, + "wholeMainFreshPass": false + }, + "geometryDiagnostic": { + "httpMocks": true, + "immediate": { + "pinned": { + "left": 26, + "right": 136, + "width": 110 + }, + "viewport": { + "left": 26, + "right": 292, + "width": 266 + }, + "buttons": [ + { + "name": "Скачать config-1000.rsc", + "left": 136.609375, + "right": 180.40625, + "width": 43.796875, + "height": 43.796875 + }, + { + "name": "Восстановить config-1000.rsc", + "left": 184.40625, + "right": 228.203125, + "width": 43.796875, + "height": 43.796875 + }, + { + "name": "Удалить config-1000.rsc", + "left": 232.203125, + "right": 276, + "width": 43.796875, + "height": 43.796875 + } + ] + }, + "settled": { + "pinned": { + "left": 26, + "right": 136, + "width": 110 + }, + "viewport": { + "left": 26, + "right": 292, + "width": 266 + }, + "buttons": [ + { + "name": "Скачать config-1000.rsc", + "left": 136, + "right": 180, + "width": 44, + "height": 44 + }, + { + "name": "Восстановить config-1000.rsc", + "left": 184, + "right": 228, + "width": 44, + "height": 44 + }, + { + "name": "Удалить config-1000.rsc", + "left": 232, + "right": 276, + "width": 44, + "height": 44 + } + ] + } + }, + "contextExceptions": { + "frontendPackage": "Only workspaces changed to packages/*, validated by full semantic comparison", + "backendPackage": "scripts omitted; dependencies/devDependencies emptied; all other keys equal source", + "frontendDockerignore": "Absent from clean enumerated context; non-example .env inputs absent", + "testSources": [ + "backend/src/routes/ipsec-mutation.test.ts", + "backend/src/services/ipsec-state.test.ts", + "backend/src/routes/recursive-routes.test.ts", + "backend/src/routes/speed-test.test.ts" + ], + "compiled": "Emitted non-test paths derived from current tracked production TS; stale nested local outputs excluded; LF normalization, not byte identity" + }, + "bounds": [ + "HTTP fixtures prove UI behavior, not native operations across all sections", + "Main original failure remains recorded; one scoped rerun, not 1244 fresh passes", + "Frontend binary reproducibility not claimed", + "Native read-only scanner covers 27 collections and explicit own namespace prefixes, not all possible ownership", + "Legacy managed PSK certificate export inference reproduced separately; fix remains118", + "Production performance, full WCAG certification and external integrations not accepted" + ] +} diff --git a/tests/e2e/large-backups.spec.ts b/tests/e2e/large-backups.spec.ts index 198cd46a..e0047768 100644 --- a/tests/e2e/large-backups.spec.ts +++ b/tests/e2e/large-backups.spec.ts @@ -29,7 +29,8 @@ test("Backups1000: весь поиск, страница при refresh, отк const scroll = page.locator('[data-slot="data-grid"] [data-slot="scroll-area-viewport"]'); await scroll.evaluate(el => { el.scrollLeft = el.scrollWidth }) for (const action of ["Скачать", "Восстановить", "Удалить"]) { const button = rows.first().getByRole("button", { name: action + " config-1000.rsc", exact: true }) - expect(await button.evaluate(el => { const box=el.getBoundingClientRect(), viewport=el.closest('[data-slot="scroll-area-viewport"]')!.getBoundingClientRect(), pinned=el.closest("tr")!.querySelector("td")!.getBoundingClientRect(); return box.width >= 44 && box.height >= 44 && box.left >= pinned.right-1 && box.right <= viewport.right+1 })).toBe(true) + // ReUI buttons animate from desktop icon size to their mobile touch target. + await expect.poll(() => button.evaluate(el => { const box=el.getBoundingClientRect(), viewport=el.closest('[data-slot="scroll-area-viewport"]')!.getBoundingClientRect(), pinned=el.closest("tr")!.querySelector("td")!.getBoundingClientRect(); return box.width >= 44 && box.height >= 44 && box.left >= pinned.right-1 && box.right <= viewport.right+1 })).toBe(true) } const restore = rows.first().getByRole("button", { name: "Восстановить config-1000.rsc", exact: true }); await restore.focus(); await page.keyboard.press("Enter"); await expect(page.getByRole("alertdialog")).toContainText("config-1000.rsc"); await page.getByRole("alertdialog").getByRole("button", { name: "Отмена", exact: true }).click(); await expect(restore).toBeFocused() const remove = rows.first().getByRole("button", { name: "Удалить config-1000.rsc", exact: true })