diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index b17e0ca3..bc520620 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.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.93–105. Backend ux-patch102/frontend ux-a11y101, final904 source inputs/984 compiled backend matches, обаCHR доступны/own fixtures0/servers2/migrations9/3 compose services. Все результаты/границы вжурнале, local commits безpush. Следующий106 — external Portal/Telegram readiness при предоставленных тестовых доступах; explicit разрешение на сообщение отдельно. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт; квота89% использовано при final audit. 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). @@ -1010,3 +1010,15 @@ ACK добавления двухdrops41,3ms; первое notEstablished наб Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push. Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым. + +## 12.5.105 — source/runtime/evidence: заключительный контроль окна (2026-10-10) + +[Финальная source сверка](ux-ui/acceptance/deployment-final-audit-2026-10-10.json), HEADbeb72ce.904 unique tracked application/config inputs: frontend515/backend406 matched; production source drift0. Root package preprocessing/workspaces/clean-context dockerignore идве исключённые backend tests(recursive as const/speed98 assertions) разобраны. Backend984 compiled files actual container совпадают с local build после явнойLF normalisation; byte identity не заявлена. Frontend identified by source context/lockfile/image/build101/live20, independent binary reproducibility не заявлена. + +[Read-only stand](ux-ui/acceptance/stand-final-control-2026-10-10.json): обаenabled CHR отвечают/RouterOS7.24.5,14 native collections×2 не содержат prefixes объектов этого окна. Own speed history/probes0, servers2/migrations9. Это выборочная GET/SELECT сверка по своим namespace, не full export/universal ownership scanner. Нативные session caches не удалялись.3 compose services running/backend/PG healthy/compose config passed; дополнительных fixture containers нет. Credentials/RouterOS defaults/public/195.195.195.195/32 сохранены в профильных baseline проверках. + +Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; frontend ux-a11y101/version1.0.0-test.a11y101/image52b50784b914….13 контрольных блоков93–105; каждый фактический результат сохранён локально безpush. Whole main1207/1208 с исходным failure иdelta5/5, context221/221, backend100 groups24/node171 +parser1028/8/IPsec/OSPF profiles, accessibility24local/20live; это точные границы, не суммарная выдуманная «полная production приёмка». Принятые unchanged tests повторно не запускались. + +Все numbered records датированы, no duplicate12.5.21 после exact dedup, progress/stage12 согласованы.120 перегенерированных canonical/mock evidence files восстановлены из493 protected originals, прежние чужие skills/AGENTS/8GRE-VXLANscreens/tsbuildinfo/.codex/.codegraph изменения сохранены.20 новых JSON reports разобраны и проверены по заданным sensitive keys(password/secret/private-key/privateKey/token/authorization/tcp-md5-key): непустых strings0. Это конкретный recursive key scan, не универсальная гарантия secret-free всех артефактов. + +Внешняя12.5 открыта: настоящие PortalSSO/Telegram/clientOS/IPv6/WAN policy/scale/multi-instance/durable retry/physical loss идругие условия [матрицы](ux-ui-remaining-acceptance.md) не заменяются лабораторными two-CHR proofs. По Telegram отправки0; для real delivery нужны отдельный тестовый бот/чат иявное разрешение на конкретное сообщение. Запрошено наличие Portal/Telegram, зависимые действия не выполнялись. Следующий106 — подготовка внешних интеграций при наличии доступов, иначе отдельные согласованные network/scale bounds. Квота89% использовано при заключительной сверке; новые крупные блоки не начинать без возможностей закончить checks/cleanup/commit. Один локальный commit без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 4f6b0e70..1ca9f9b0 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.93–105. Backend ux-patch102/frontend ux-a11y101, final904 source inputs/984 compiled backend matches, обаCHR доступны/own fixtures0/servers2/migrations9/3 compose services. Все результаты/границы вжурнале, local commits безpush. Следующий106 — external Portal/Telegram readiness при предоставленных тестовых доступах; explicit разрешение на сообщение отдельно. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт; квота89% использовано при final audit. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.93–105. Backend ux-patch102/frontend ux-a11y101, final904 source inputs/984 compiled backend matches, обаCHR доступны/own fixtures0/servers2/migrations9/3 compose services. Все результаты/границы вжурнале, local commits безpush. Следующий106 — external Portal/Telegram readiness при предоставленных тестовых доступах; explicit разрешение на сообщение отдельно. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт; квота89% использовано при final audit. Этапы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 d5bd9a2e..c553888e 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-10: завершены12.5.93–104. BGP безBFD/hold3s/keepalive1s: scoped TCP loss при GRE ICMP3/3×2 вызвал session/own-route withdrawal; снятиеdrops вернуло Established/Rx1, baseline10 collections×2 restored. Backend ux-patch102/frontend ux-a11y101, credentials прежние. Следующий12.5.105 — финальный source/context/runtime/evidence контроль и оставшиеся внешние условия. Матрица docs/ux-ui-remaining-acceptance.md; этап12.5 открыт. +Актуальное продолжение 2026-10-10: завершены12.5.93–105. Backend ux-patch102/frontend ux-a11y101, final904 source inputs/984 compiled backend matches, обаCHR доступны/own fixtures0/servers2/migrations9/3 compose services. Все результаты/границы вжурнале, local commits безpush. Следующий106 — external Portal/Telegram readiness при предоставленных тестовых доступах; explicit разрешение на сообщение отдельно. Матрица docs/ux-ui-remaining-acceptance.md,12.5 открыт; квота89% использовано при final audit. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,19 @@ | 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–104 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–105 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. | + +## 12.5.105 — source/runtime/evidence: заключительный контроль окна (2026-10-10) + +[Финальная source сверка](ux-ui/acceptance/deployment-final-audit-2026-10-10.json), HEADbeb72ce.904 unique tracked application/config inputs: frontend515/backend406 matched; production source drift0. Root package preprocessing/workspaces/clean-context dockerignore идве исключённые backend tests(recursive as const/speed98 assertions) разобраны. Backend984 compiled files actual container совпадают с local build после явнойLF normalisation; byte identity не заявлена. Frontend identified by source context/lockfile/image/build101/live20, independent binary reproducibility не заявлена. + +[Read-only stand](ux-ui/acceptance/stand-final-control-2026-10-10.json): обаenabled CHR отвечают/RouterOS7.24.5,14 native collections×2 не содержат prefixes объектов этого окна. Own speed history/probes0, servers2/migrations9. Это выборочная GET/SELECT сверка по своим namespace, не full export/universal ownership scanner. Нативные session caches не удалялись.3 compose services running/backend/PG healthy/compose config passed; дополнительных fixture containers нет. Credentials/RouterOS defaults/public/195.195.195.195/32 сохранены в профильных baseline проверках. + +Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; frontend ux-a11y101/version1.0.0-test.a11y101/image52b50784b914….13 контрольных блоков93–105; каждый фактический результат сохранён локально безpush. Whole main1207/1208 с исходным failure иdelta5/5, context221/221, backend100 groups24/node171 +parser1028/8/IPsec/OSPF profiles, accessibility24local/20live; это точные границы, не суммарная выдуманная «полная production приёмка». Принятые unchanged tests повторно не запускались. + +Все numbered records датированы, no duplicate12.5.21 после exact dedup, progress/stage12 согласованы.120 перегенерированных canonical/mock evidence files восстановлены из493 protected originals, прежние чужие skills/AGENTS/8GRE-VXLANscreens/tsbuildinfo/.codex/.codegraph изменения сохранены.20 новых JSON reports разобраны и проверены по заданным sensitive keys(password/secret/private-key/privateKey/token/authorization/tcp-md5-key): непустых strings0. Это конкретный recursive key scan, не универсальная гарантия secret-free всех артефактов. + +Внешняя12.5 открыта: настоящие PortalSSO/Telegram/clientOS/IPv6/WAN policy/scale/multi-instance/durable retry/physical loss идругие условия [матрицы](ux-ui-remaining-acceptance.md) не заменяются лабораторными two-CHR proofs. По Telegram отправки0; для real delivery нужны отдельный тестовый бот/чат иявное разрешение на конкретное сообщение. Запрошено наличие Portal/Telegram, зависимые действия не выполнялись. Следующий106 — подготовка внешних интеграций при наличии доступов, иначе отдельные согласованные network/scale bounds. Квота89% использовано при заключительной сверке; новые крупные блоки не начинать без возможностей закончить checks/cleanup/commit. Один локальный commit без push. ## 12.5.104 — BGP hold expiry без BFD (2026-10-10) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index 9d5537c4..4e43cfa0 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,6 +1,6 @@ # Оставшаяся внешняя приёмка — 2026-10-10 -Это актуальная матрица после 12.5.104. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.105. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-patch102`, frontend `ux-a11y101`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты последнего сценария удалены, исходные11 коллекций×2 восстановлены; пароли не менялись. @@ -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. +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 — readiness настоящих Portal/Telegram при предоставленных доступах. 3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime. 4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 7fc47a33..111dbb25 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -2315,3 +2315,15 @@ ACK добавления двухdrops41,3ms; первое notEstablished наб Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push. Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым. + +## 12.5.105 — source/runtime/evidence: заключительный контроль окна (2026-10-10) + +[Финальная source сверка](ux-ui/acceptance/deployment-final-audit-2026-10-10.json), HEADbeb72ce.904 unique tracked application/config inputs: frontend515/backend406 matched; production source drift0. Root package preprocessing/workspaces/clean-context dockerignore идве исключённые backend tests(recursive as const/speed98 assertions) разобраны. Backend984 compiled files actual container совпадают с local build после явнойLF normalisation; byte identity не заявлена. Frontend identified by source context/lockfile/image/build101/live20, independent binary reproducibility не заявлена. + +[Read-only stand](ux-ui/acceptance/stand-final-control-2026-10-10.json): обаenabled CHR отвечают/RouterOS7.24.5,14 native collections×2 не содержат prefixes объектов этого окна. Own speed history/probes0, servers2/migrations9. Это выборочная GET/SELECT сверка по своим namespace, не full export/universal ownership scanner. Нативные session caches не удалялись.3 compose services running/backend/PG healthy/compose config passed; дополнительных fixture containers нет. Credentials/RouterOS defaults/public/195.195.195.195/32 сохранены в профильных baseline проверках. + +Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; frontend ux-a11y101/version1.0.0-test.a11y101/image52b50784b914….13 контрольных блоков93–105; каждый фактический результат сохранён локально безpush. Whole main1207/1208 с исходным failure иdelta5/5, context221/221, backend100 groups24/node171 +parser1028/8/IPsec/OSPF profiles, accessibility24local/20live; это точные границы, не суммарная выдуманная «полная production приёмка». Принятые unchanged tests повторно не запускались. + +Все numbered records датированы, no duplicate12.5.21 после exact dedup, progress/stage12 согласованы.120 перегенерированных canonical/mock evidence files восстановлены из493 protected originals, прежние чужие skills/AGENTS/8GRE-VXLANscreens/tsbuildinfo/.codex/.codegraph изменения сохранены.20 новых JSON reports разобраны и проверены по заданным sensitive keys(password/secret/private-key/privateKey/token/authorization/tcp-md5-key): непустых strings0. Это конкретный recursive key scan, не универсальная гарантия secret-free всех артефактов. + +Внешняя12.5 открыта: настоящие PortalSSO/Telegram/clientOS/IPv6/WAN policy/scale/multi-instance/durable retry/physical loss идругие условия [матрицы](ux-ui-remaining-acceptance.md) не заменяются лабораторными two-CHR proofs. По Telegram отправки0; для real delivery нужны отдельный тестовый бот/чат иявное разрешение на конкретное сообщение. Запрошено наличие Portal/Telegram, зависимые действия не выполнялись. Следующий106 — подготовка внешних интеграций при наличии доступов, иначе отдельные согласованные network/scale bounds. Квота89% использовано при заключительной сверке; новые крупные блоки не начинать без возможностей закончить checks/cleanup/commit. Один локальный commit без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 650792b7..f03a8cf3 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -826,3 +826,15 @@ ACK добавления двухdrops41,3ms; первое notEstablished наб Определение hold/keepalive подтверждено [официальным BGP connection reference](https://manual.mikrotik.com/docs/cli-reference/routing/bgp/connection/); текущая online docs7.26, наличие свойств/поведение непосредственно проверено на lab7.24.5. Source/UI/build/DB writes/messages0, первая попытка passed. Ownership preflight exact IDs/name/comment/chain/list/address/interface/protocol/src/dst, drops сначала удалены дляrecovery, потом own BGP/filter/address-list/IP/bridge/GRE. Baseline10 коллекций×2 совпал, public/default/metadata/195.195.195.195/32/credentials сохранены, обаCHR доступны. Runtime backend patch102/frontend a11y101, extra fixtures/containers0. Один локальный commit без push. Следующий105 — заключительный source/context/runtime/evidence контроль окна и точная матрица оставшихся внешних условий. Принятые network tests не повторять без изменения/ошибки. Этап12.5 остаётся открытым. + +## 12.5.105 — source/runtime/evidence: заключительный контроль окна (2026-10-10) + +[Финальная source сверка](ux-ui/acceptance/deployment-final-audit-2026-10-10.json), HEADbeb72ce.904 unique tracked application/config inputs: frontend515/backend406 matched; production source drift0. Root package preprocessing/workspaces/clean-context dockerignore идве исключённые backend tests(recursive as const/speed98 assertions) разобраны. Backend984 compiled files actual container совпадают с local build после явнойLF normalisation; byte identity не заявлена. Frontend identified by source context/lockfile/image/build101/live20, independent binary reproducibility не заявлена. + +[Read-only stand](ux-ui/acceptance/stand-final-control-2026-10-10.json): обаenabled CHR отвечают/RouterOS7.24.5,14 native collections×2 не содержат prefixes объектов этого окна. Own speed history/probes0, servers2/migrations9. Это выборочная GET/SELECT сверка по своим namespace, не full export/universal ownership scanner. Нативные session caches не удалялись.3 compose services running/backend/PG healthy/compose config passed; дополнительных fixture containers нет. Credentials/RouterOS defaults/public/195.195.195.195/32 сохранены в профильных baseline проверках. + +Runtime backend ux-patch102/version1.0.0-test.patch102/image34fca84b8721…; frontend ux-a11y101/version1.0.0-test.a11y101/image52b50784b914….13 контрольных блоков93–105; каждый фактический результат сохранён локально безpush. Whole main1207/1208 с исходным failure иdelta5/5, context221/221, backend100 groups24/node171 +parser1028/8/IPsec/OSPF profiles, accessibility24local/20live; это точные границы, не суммарная выдуманная «полная production приёмка». Принятые unchanged tests повторно не запускались. + +Все numbered records датированы, no duplicate12.5.21 после exact dedup, progress/stage12 согласованы.120 перегенерированных canonical/mock evidence files восстановлены из493 protected originals, прежние чужие skills/AGENTS/8GRE-VXLANscreens/tsbuildinfo/.codex/.codegraph изменения сохранены.20 новых JSON reports разобраны и проверены по заданным sensitive keys(password/secret/private-key/privateKey/token/authorization/tcp-md5-key): непустых strings0. Это конкретный recursive key scan, не универсальная гарантия secret-free всех артефактов. + +Внешняя12.5 открыта: настоящие PortalSSO/Telegram/clientOS/IPv6/WAN policy/scale/multi-instance/durable retry/physical loss идругие условия [матрицы](ux-ui-remaining-acceptance.md) не заменяются лабораторными two-CHR proofs. По Telegram отправки0; для real delivery нужны отдельный тестовый бот/чат иявное разрешение на конкретное сообщение. Запрошено наличие Portal/Telegram, зависимые действия не выполнялись. Следующий106 — подготовка внешних интеграций при наличии доступов, иначе отдельные согласованные network/scale bounds. Квота89% использовано при заключительной сверке; новые крупные блоки не начинать без возможностей закончить checks/cleanup/commit. Один локальный commit без push. diff --git a/docs/ux-ui/acceptance/deployment-final-audit-2026-10-10.json b/docs/ux-ui/acceptance/deployment-final-audit-2026-10-10.json new file mode 100644 index 00000000..d8dd3105 --- /dev/null +++ b/docs/ux-ui/acceptance/deployment-final-audit-2026-10-10.json @@ -0,0 +1,1005 @@ +{ + "date": "2026-10-10", + "head": "beb72ceea1d2579954e5a1a5fa3e5d7d6425c888", + "normalization": "CRLF to LF for text; binary unchanged", + "contexts": { + "frontend": { + "root": "/opt/mmapp-test/build-a11y101", + "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-patch102", + "matchedCount": 406, + "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-mutation.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-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/ipsec-state.test.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/recursive-routes.test.ts", + "local": "e2458b856a41033504699675a883cc7f3f5a8cf793d3db3f10446fe5696c3ea8", + "context": "315e149aac9c963beacfbe099a3dddc286ffe1e7cfa31e7fa32bed1a445ec722" + }, + { + "path": "backend/src/routes/speed-test.test.ts", + "local": "4c73f7b15a299a8ed25bab6cc015c36ca4050900fb09da888f95da3cc864e42d", + "context": "ee2d57f470a206cc59ea18fa789ea1bbc20d0694f96cf51680bdc3ff03ac0de3" + }, + { + "path": "package.json", + "local": "03f5ca2dbd26db7c51605fb439f234219293a03ea367ac48bb59030c82f68410", + "context": "707d04dcda7f82c1ae7f4f3072a898647a328c6338ebd32c8187cd33bc58acbf" + } + ] + } + }, + "runtime": { + "frontend": { + "imageId": "sha256:52b50784b914e3a7f224b9c8f491855831ea93cae9b0403fc07dc12602bfbccd", + "imageTag": "mmapp-test/frontend:ux-a11y101", + "revisionLabel": "a11y101", + "state": "running", + "health": null, + "startedAt": "2026-10-09T19:38:44.275248097Z" + }, + "backend": { + "imageId": "sha256:34fca84b8721ff4b83501acea24f18195ae000b788a15f835da4d056b207977f", + "imageTag": "mmapp-test/backend:ux-patch102", + "revisionLabel": "patch102", + "state": "running", + "health": "healthy", + "startedAt": "2026-10-09T20:01:58.715227437Z" + } + }, + "compiledBackend": { + "checked": 984, + "normalization": "CRLF to LF; byte identity not claimed", + "different": [] + }, + "contextExceptions": { + "frontendPackage": "Only workspaces; backend intentionally excluded from frontend context", + "backendPackage": "Root scripts/dependencies/devDependencies stripped for backend", + "excludedTests": [ + "recursive-routes.test.ts differs only late as const", + "speed-test.test.ts lacks local98 transport assertions; tsconfig excludes both from production" + ], + "frontendDockerignore": "Absent in clean enumerated COPY context; no env/secrets inputs" + }, + "limits": [ + "All production inputs match; excluded test/context exceptions explicit", + "Compiled backend984 normalizedLF matches actual container; byte identity not claimed", + "Frontend build context/imageID/build101/live20 evidence, not independent reproducible frontend binary build" + ] +} diff --git a/docs/ux-ui/acceptance/stand-final-control-2026-10-10.json b/docs/ux-ui/acceptance/stand-final-control-2026-10-10.json new file mode 100644 index 00000000..80410ab0 --- /dev/null +++ b/docs/ux-ui/acceptance/stand-final-control-2026-10-10.json @@ -0,0 +1,146 @@ +{ + "date": "2026-10-10", + "readOnly": true, + "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 + } + } + }, + { + "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 + } + } + } + ], + "database": { + "uptime_speed_test_runs": { + "ownFixtures": 0 + }, + "uptime_speed_probes": { + "ownFixtures": 0 + }, + "servers": 2, + "migrations": 9 + } +} \ No newline at end of file