diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index c4bb8744..b17e0ca3 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–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап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 открыт. 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). @@ -998,3 +998,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки. Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт. + +## 12.5.104 — BGP hold expiry без BFD (2026-10-10) + +[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались. + +Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2. + +ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты. + +Определение 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 остаётся открытым. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 052cf548..4f6b0e70 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–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап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 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-10. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-10 -Актуальное продолжение 2026-10-10: завершены12.5.93–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап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 открыт. Этапы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 b26d5464..d5bd9a2e 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–103. Native Ping8×10 packets: public10/10 в обоих направлениях/фазах, GRE initial9/10→settled10/10 наCHR1→2, reverse10/10; raw counts согласованы, прежние потери102 не скрыты. Own fixtures очищены; backend ux-patch102/frontend ux-a11y101. Следующий12.5.104 — BGP безBFD, scoped TCP loss/hold3s и withdrawal/recovery при работающем GRE. Матрица docs/ux-ui-remaining-acceptance.md; этап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 открыт. Общий план: [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–103 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–104 и ограничения ниже. Runtime backend ux-diagnostics89/frontend ux-ospf91. | + +## 12.5.104 — BGP hold expiry без BFD (2026-10-10) + +[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались. + +Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2. + +ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты. + +Определение 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.103 — native Ping: public и собственный GRE (2026-10-10) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index fa1ea22b..9d5537c4 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,6 +1,6 @@ # Оставшаяся внешняя приёмка — 2026-10-10 -Это актуальная матрица после 12.5.103. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это актуальная матрица после 12.5.104. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 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 восстановлены; пароли не менялись. @@ -14,7 +14,7 @@ | VXLAN | Собственная пара/private Ping/catalog/URL/export75–76 | API приложения read-only: create/delete проверены native. IPv6, bridge/FDB/масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты | | IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT | Клиентские Windows/macOS/iOS/Android, сложные/escaped DN, полная 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 безBFD, packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята | +| 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 миграция не принята | | Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты | | Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; внешние RIPE/MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения | @@ -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 — BGP hold-timer безBFD. +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. 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 f1477b9c..7fc47a33 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -2303,3 +2303,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки. Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт. + +## 12.5.104 — BGP hold expiry без BFD (2026-10-10) + +[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались. + +Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2. + +ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты. + +Определение 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 остаётся открытым. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index cc9b2f5c..650792b7 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -814,3 +814,15 @@ Scoped TypeScript/новые components+test lint passed; старый NavUser s Во всех8 ответах final sent/received соответствуют числу raw reply/timeout rows. В этой серии статистика согласована; счётчики нельзя «исправить», скрыв timeout. Наблюдения102 с1/3 и2/3 не переписаны. Здесь steady sample не выявил устойчивых потерь, но причиной начальных потерь и долгосрочной zero-loss/SLA это не является; startup/transient explanation остаётся гипотезой. Нет packet capture/физическогоWAN теста/максимальной нагрузки. Exact own GRE/IP IDs/name/comment/address/interface удалены, baseline3 коллекций×2 совпал; public/default/metadata/195.195.195.195/32 иcredentials сохранены. ОбаCHR доступны, native fixtures/extra containers0, build/DB writes/messages0. Следующий104 — собственная BGP пара безBFD, negotiated hold3s/keepalive1s, scoped TCP loss при работающем GRE/ICMP, withdrawal/recovery. Проверка отличает hold expiry от административного connection/interface disable; не обещает точный timing/physical WAN redundancy. Один локальный commit без push; этап12.5 открыт. + +## 12.5.104 — BGP hold expiry без BFD (2026-10-10) + +[Native/API/cleanup](ux-ui/acceptance/bgp-hold-timer-2026-10-10.json). Собственная GRE198.18.104.0/30/loopbacks198.18.204.1/32↔2/32, AS65104/65105; input/output chains принимают только соответствующий exact own /32, output.network single own loopback/default-originate never. Обаnative connection use-bfd=false, hold3s/keepalive1s; session local/remote hold-time3s иkeepalive1s подтверждены, BFD configurations не создавались. + +Две собственные firewall rules только наCHR1: input/output TCP между own GRE link IPs с exact in/out-interface; baseline firewall empty проверен. НиGRE, ниBGPconnection не отключались. Полный underlay остаётся активным, после protocol loss direct GRE ICMP3/3×2/running=true. BGP initially Established/own route/Ping3/3×2; после scoped TCP loss обе сессии перестали быть Established/active own route отсутствует. Снятие двух own rules восстановило Established/own /32/catalog Rx1×2. + +ACK добавления двухdrops41,3ms; первое notEstablished наблюдение2667,3ms, обе active routes отсутствуют3690,5ms от начала fault. last-keepalive instant не зафиксирован, samples включаютREST/планирование: это upper observation bounds, не точное hold duration/SLA. Различие с92 административнымdisable/93BFD-path loss сохранено. В этой конфигурации отказ TCP проявился при работающем GRE/ICMP; physical WAN redundancy/разные peers/IPv6/scale не приняты. + +Определение 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 остаётся открытым. diff --git a/docs/ux-ui/acceptance/bgp-hold-timer-2026-10-10.json b/docs/ux-ui/acceptance/bgp-hold-timer-2026-10-10.json new file mode 100644 index 00000000..837689b8 --- /dev/null +++ b/docs/ux-ui/acceptance/bgp-hold-timer-2026-10-10.json @@ -0,0 +1,718 @@ +{ + "date": "2026-10-10", + "name": "mm-bgp104-1791577657130", + "devices": [ + { + "serverId": 1, + "catalog": { + "id": "*2800007", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bgp104-1791577657130-1", + "peerIp": "198.18.104.2", + "remoteAs": 65105, + "localAs": 65104, + "localId": "198.18.204.1", + "remoteId": "198.18.204.2", + "state": "Established", + "type": "eBGP", + "uptime": "440ms", + "holdTime": 3, + "keepalive": 1, + "prefixesRx": 1, + "prefixesTx": null, + "inputMessages": 2, + "outputMessages": 2, + "capabilities": [ + "MP-BGP", + "Route Refresh", + "Extended Next-Hop", + "Graceful Restart", + "4-byte-AS" + ], + "lastError": null, + "afi": "ip" + }, + "nativeRoute": { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.2/32", + "dynamic": "true", + "gateway": "198.18.104.2", + "immediate-gw": "198.18.104.2%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + }, + "pingReceived": 3, + "pingAttempts": [ + 3 + ], + "exactOwnPrefixOnly": true + }, + { + "serverId": 2, + "catalog": { + "id": "*2800006", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bgp104-1791577657130-1", + "peerIp": "198.18.104.1", + "remoteAs": 65104, + "localAs": 65105, + "localId": "198.18.204.2", + "remoteId": "198.18.204.1", + "state": "Established", + "type": "eBGP", + "uptime": "320ms", + "holdTime": 3, + "keepalive": 1, + "prefixesRx": 1, + "prefixesTx": null, + "inputMessages": 2, + "outputMessages": 2, + "capabilities": [ + "MP-BGP", + "Route Refresh", + "Extended Next-Hop", + "Graceful Restart", + "4-byte-AS" + ], + "lastError": null, + "afi": "ip" + }, + "nativeRoute": { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.1/32", + "dynamic": "true", + "gateway": "198.18.104.1", + "immediate-gw": "198.18.104.1%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + }, + "pingReceived": 3, + "pingAttempts": [ + 3 + ], + "exactOwnPrefixOnly": true + } + ], + "cleanup": [ + { + "serverId": 1, + "/ip/firewall/filter": true, + "/routing/bfd/configuration": true, + "/routing/bgp/connection": true, + "/routing/bgp/instance": true, + "/routing/filter/rule": true, + "/ip/firewall/address-list": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + }, + { + "serverId": 2, + "/ip/firewall/filter": true, + "/routing/bfd/configuration": true, + "/routing/bgp/connection": true, + "/routing/bgp/instance": true, + "/routing/filter/rule": true, + "/ip/firewall/address-list": true, + "/interface/gre": true, + "/interface/bridge": true, + "/ip/address": true, + "/ip/route": true + } + ], + "initial": [ + { + "sessions": [ + { + ".id": "*2800007", + "ebgp": "", + "established": "true", + "hold-time": "3s", + "input.filter": "mm-bgp104-1791577657130-in", + "input.procid": "20", + "instance": "mm-bgp104-1791577657130", + "keepalive-time": "1s", + "last-started": "2026-10-09 23:27:41", + "local.address": "198.18.104.1", + "local.afi": "ip", + "local.as": "65104", + "local.bytes": "68", + "local.capabilities": "mp,rr,enhe,gr,as4", + "local.cluster-id": "198.18.204.1", + "local.eor": "", + "local.id": "198.18.204.1", + "local.messages": "2", + "name": "mm-bgp104-1791577657130-1", + "output.filter-chain": "mm-bgp104-1791577657130-out", + "output.network": "mm-bgp104-1791577657130", + "output.procid": "20", + "prefix-count": "1", + "remote.address": "198.18.104.2", + "remote.afi": "ip", + "remote.as": "65105", + "remote.bytes": "68", + "remote.capabilities": "mp,rr,enhe,gr,as4", + "remote.eor": "", + "remote.hold-time": "3s", + "remote.id": "198.18.204.2", + "remote.messages": "2", + "uptime": "440ms" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.2/32", + "dynamic": "true", + "gateway": "198.18.104.2", + "immediate-gw": "198.18.104.2%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + } + ] + }, + { + "sessions": [ + { + ".id": "*2800006", + "ebgp": "", + "established": "true", + "hold-time": "3s", + "input.filter": "mm-bgp104-1791577657130-in", + "input.procid": "20", + "instance": "mm-bgp104-1791577657130", + "keepalive-time": "1s", + "last-started": "2026-10-09 22:27:41", + "local.address": "198.18.104.2", + "local.afi": "ip", + "local.as": "65105", + "local.bytes": "68", + "local.capabilities": "mp,rr,enhe,gr,as4", + "local.cluster-id": "198.18.204.2", + "local.eor": "", + "local.id": "198.18.204.2", + "local.messages": "2", + "name": "mm-bgp104-1791577657130-1", + "output.filter-chain": "mm-bgp104-1791577657130-out", + "output.network": "mm-bgp104-1791577657130", + "output.procid": "20", + "prefix-count": "0", + "remote.address": "198.18.104.1", + "remote.afi": "ip", + "remote.as": "65104", + "remote.bytes": "68", + "remote.capabilities": "mp,rr,enhe,gr,as4", + "remote.eor": "", + "remote.hold-time": "3s", + "remote.id": "198.18.204.1", + "remote.messages": "2", + "uptime": "320ms" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.1/32", + "dynamic": "true", + "gateway": "198.18.104.1", + "immediate-gw": "198.18.104.1%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + } + ] + } + ], + "nativeConnections": [ + { + "serverId": 1, + "useBfd": "false", + "hold": "3s", + "keepalive": "1s" + }, + { + "serverId": 2, + "useBfd": "false", + "hold": "3s", + "keepalive": "1s" + } + ], + "loss": { + "scopedTcpOnly": true, + "interfaceDisabled": false, + "connectionDisabled": false, + "acknowledgedMs": 41.25659199999973, + "firstNotEstablished": 2667.269095999999, + "firstNoActiveRoute": 3690.540894999999, + "samples": [ + { + "beganMs": 41.262173000000075, + "endedMs": 267.55814199999986, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 368.28421699999944, + "endedMs": 436.9728669999995, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 537.3723649999993, + "endedMs": 606.6827239999993, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 707.1440159999993, + "endedMs": 777.1101789999993, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 877.5098009999992, + "endedMs": 947.3788399999994, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1047.8871149999995, + "endedMs": 1124.0534739999994, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1224.647223, + "endedMs": 1297.0276879999992, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1397.4342539999989, + "endedMs": 1467.2807449999991, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1567.6731119999995, + "endedMs": 1639.8602739999997, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1740.2848239999994, + "endedMs": 1809.9277119999997, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 1910.3524179999995, + "endedMs": 1979.1934699999993, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 2079.598013, + "endedMs": 2149.2285079999992, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 2249.6923909999996, + "endedMs": 2327.2061430000003, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 2427.641654, + "endedMs": 2496.8365949999998, + "established": [ + true, + true + ], + "activeRoutes": [ + true, + true + ] + }, + { + "beganMs": 2597.2220740000002, + "endedMs": 2667.269095999999, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 2767.72232, + "endedMs": 2836.9666019999995, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 2937.351680999999, + "endedMs": 3007.000541999999, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 3107.417828999999, + "endedMs": 3179.8466070000004, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 3280.268379, + "endedMs": 3348.9262389999994, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 3449.27934, + "endedMs": 3518.761459999999, + "established": [ + false, + true + ], + "activeRoutes": [ + false, + true + ] + }, + { + "beganMs": 3620.6175749999993, + "endedMs": 3690.540894999999, + "established": [ + false, + false + ], + "activeRoutes": [ + false, + false + ] + } + ] + }, + "linkDuringLoss": [ + { + "serverId": 1, + "received": 3 + }, + { + "serverId": 2, + "received": 3 + } + ], + "recovered": [ + { + "sessions": [ + { + ".id": "*2800007", + "ebgp": "", + "established": "true", + "hold-time": "3s", + "input.filter": "mm-bgp104-1791577657130-in", + "input.procid": "20", + "instance": "mm-bgp104-1791577657130", + "keepalive-time": "1s", + "last-started": "2026-10-09 23:27:50", + "last-stopped": "2026-10-09 23:27:45", + "local.address": "198.18.104.1", + "local.afi": "ip", + "local.as": "65104", + "local.bytes": "68", + "local.capabilities": "mp,rr,enhe,gr,as4", + "local.cluster-id": "198.18.204.1", + "local.eor": "", + "local.id": "198.18.204.1", + "local.messages": "2", + "name": "mm-bgp104-1791577657130-1", + "output.filter-chain": "mm-bgp104-1791577657130-out", + "output.last-notification": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0015030400", + "output.network": "mm-bgp104-1791577657130", + "output.procid": "20", + "prefix-count": "1", + "remote.address": "198.18.104.2", + "remote.afi": "ip", + "remote.as": "65105", + "remote.bytes": "68", + "remote.capabilities": "mp,rr,enhe,gr,as4", + "remote.eor": "", + "remote.hold-time": "3s", + "remote.id": "198.18.204.2", + "remote.messages": "2", + "uptime": "40ms" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.2/32", + "dynamic": "true", + "gateway": "198.18.104.2", + "immediate-gw": "198.18.104.2%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + } + ] + }, + { + "sessions": [ + { + ".id": "*2800006", + "ebgp": "", + "established": "true", + "hold-time": "3s", + "input.filter": "mm-bgp104-1791577657130-in", + "input.procid": "20", + "instance": "mm-bgp104-1791577657130", + "keepalive-time": "1s", + "last-started": "2026-10-09 22:27:50", + "last-stopped": "2026-10-09 22:27:46", + "local.address": "198.18.104.2", + "local.afi": "ip", + "local.as": "65105", + "local.bytes": "68", + "local.capabilities": "mp,rr,enhe,gr,as4", + "local.cluster-id": "198.18.204.2", + "local.eor": "", + "local.id": "198.18.204.2", + "local.messages": "2", + "name": "mm-bgp104-1791577657130-1", + "output.filter-chain": "mm-bgp104-1791577657130-out", + "output.last-notification": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0015030400", + "output.network": "mm-bgp104-1791577657130", + "output.procid": "20", + "prefix-count": "1", + "remote.address": "198.18.104.1", + "remote.afi": "ip", + "remote.as": "65104", + "remote.bytes": "68", + "remote.capabilities": "mp,rr,enhe,gr,as4", + "remote.eor": "", + "remote.hold-time": "3s", + "remote.id": "198.18.204.1", + "remote.messages": "2", + "uptime": "140ms" + } + ], + "routes": [ + { + ".id": "*2014D000", + "active": "true", + "bgp": "true", + "distance": "20", + "dst-address": "198.18.204.1/32", + "dynamic": "true", + "gateway": "198.18.104.1", + "immediate-gw": "198.18.104.1%mm-bgp104-1791577657130", + "inactive": "false", + "routing-table": "main", + "scope": "40", + "target-scope": "10" + } + ] + } + ], + "recoveryCatalog": [ + { + "id": "*2800007", + "serverId": 1, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bgp104-1791577657130-1", + "peerIp": "198.18.104.2", + "remoteAs": 65105, + "localAs": 65104, + "localId": "198.18.204.1", + "remoteId": "198.18.204.2", + "state": "Established", + "type": "eBGP", + "uptime": "40ms", + "holdTime": 3, + "keepalive": 1, + "prefixesRx": 1, + "prefixesTx": null, + "inputMessages": 2, + "outputMessages": 2, + "capabilities": [ + "MP-BGP", + "Route Refresh", + "Extended Next-Hop", + "Graceful Restart", + "4-byte-AS" + ], + "lastError": null, + "afi": "ip" + }, + { + "id": "*2800006", + "serverId": 2, + "serverName": "CHR", + "serverSite": "", + "serverCountry": "", + "name": "mm-bgp104-1791577657130-1", + "peerIp": "198.18.104.1", + "remoteAs": 65104, + "localAs": 65105, + "localId": "198.18.204.2", + "remoteId": "198.18.204.1", + "state": "Established", + "type": "eBGP", + "uptime": "140ms", + "holdTime": 3, + "keepalive": 1, + "prefixesRx": 1, + "prefixesTx": null, + "inputMessages": 2, + "outputMessages": 2, + "capabilities": [ + "MP-BGP", + "Route Refresh", + "Extended Next-Hop", + "Graceful Restart", + "4-byte-AS" + ], + "lastError": null, + "afi": "ip" + } + ] +} \ No newline at end of file