fix(bgp): сохранять неизвестное состояние и достоверную историю оповещений

This commit is contained in:
Denozordec committed 2026-10-12 10:14:39 +07:00
1 parent 8cb0fbd195
commit fef7bc5520
15 files changed
+1196 -40

No files matched your search

+17 -3
View File
@@ -1,8 +1,8 @@
# Оставшаяся внешняя приёмка — 2026-10-12
Это актуальная матрица после 12.5.160. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.161. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-id156`, frontend `ux-bfd158`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-bgp161b`, frontend `ux-bfd158`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
| Раздел | Подтверждено | Осталось / условие завершения |
| --- | --- | --- |
@@ -18,7 +18,7 @@
| 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; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
| Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; RIPE SDK two-IP/no-fetch passed140, native IPv6 ULA flow pipeline passed145 (IPv4 transport), public IPv6 WAN/local licensed MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения |
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; OSPF/BFD boundary/warning153 passed; OSPFv3 routes154 accepted in recorded bounds; BGP IPv6 basic155 passed; bigint ID/SQL guards156 passed; общая UI1260/context221/backend24 regression157 passed; IPv6 BFD correlation158 profile/deployed passed; native OSPFv3/BFDv6 boundary/recovery159 passed; BGP IPv6/BFD withdrawal/recovery160 passed; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; OSPF/BFD boundary/warning153 passed; OSPFv3 routes154 accepted in recorded bounds; BGP IPv6 basic155 passed; bigint ID/SQL guards156 passed; общая UI1260/context221/backend24 regression157 passed; IPv6 BFD correlation158 profile/deployed passed; native OSPFv3/BFDv6 boundary/recovery159 passed; BGP IPv6/BFD withdrawal/recovery160 passed; selected BGP/alert unknown guards161 replay/profiles/deployed passed (SQL stability skipped); последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение.
@@ -682,3 +682,17 @@ Source TypeScript прошёл после остановки тестового
Протоколы: [native44/withdrawal/recovery/cleanup](ux-ui/acceptance/bgp-ipv6-bfd-native-2026-10-12.json), [2 live UI](ux-ui/acceptance/bgp-ipv6-live-ui-2026-10-12.json), [ПК](ux-ui/screens/bgp-ipv6-160-1440-2026-10-12.png), [телефон](ux-ui/screens/bgp-ipv6-160-320-2026-10-12.png). Source/dependencies/build не менялись; runtime ux-id156/ux-bfd158 сохранён, без повторной общей регрессии.
Basic single-path BGP IPv6/BFD withdrawal/recovery принят, не IPv6 public WAN/outer/scale/interop/physical redundancy/бесшовность. [BFD с BGP](https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/bfd/) — справочный документ; результат фактически проверен на7.24.5. Следующий161 — audit legacy selected BGP/alert parser: общий catalog сохраняет Unknown, но старый detectState угадывает Active из uptime и Idle при отсутствующем native FSM.12.5 открыт.
## 12.5.161 — неизвестные состояния BGP без ложных оповещений (2026-10-12)
Общий legacy/selected parser больше не угадывает Active из uptime и Idle при отсутствии native FSM. Established=true сохраняет подтверждённое Established; остальные известные FSM распознаются точным match, malformed/future-prefix/blank/missing сохраняют Unknown. Catalog и selected state согласованы; legacy числовые counters/timers этим блоком не мигрировались. BGP alert evaluation рассматривает только известные FSM: Unknown/blank/future state не подтверждают проблему и не становятся подтверждённым previous down при recovery.
Из collector выделена чистая корреляция BGP signals: newest current Unknown остаётся Unknown, previous baseline ищет ближайшее известное состояние среди сохранённых runs. Так Idle→Unknown→Established подтверждает recovery на основе последнего известного Idle; Established→Unknown→Established не создаёт ложный recovery; Unknown current не создаёт event. История ограничена существующими8 прочитанными collector runs, неизвестный период не становится новым фактом. Legacy peer keys serverName:peerName сохранены; миграция неоднозначных одинаковых имён этим блоком не заявляется.
Live-maps parser/profile прошёл; alert-engine groups/evaluate прошли, SQL confirm-stability тест **пропущен** из-за отсутствующего локального PG подключения/EACCES, не записан как pass. Outbox/alerts HTTP/JWT profile прошёл на controlled sender interfaces, реальные сообщения не отправлялись. На скомпилированном коде replay92 сохранённых настоящих RouterOS rows из160:19 Established/73 Unknown, selected/catalog states совпали;73 unknown problem и73 unknown previous recovery проверки не создали event. Это воспроизведение native payloads, не новый live mutation/SQL/outbox-delivery тест.
Backend build прошёл, окончательный Docker кандидат ux-bgp161b совпал с локальными988 emitted non-test файлами (новый module добавил4 outputs). Первоначальный ux-bgp161/984 был развёрнут до обнаружения last-known gap; финальный161b пересобран и развёрнут после исправления baseline, обе версии/rollback env сохранены. Backend/PG healthy, frontend ux-bfd158 сохранён;3 readonly real GET catalog/selected и2 browser1440/320 passed/no errors/overflow после cleanup. Positive missing-FSM rows доказаны replay, пустой live catalog не выдан за native inactive proof. Общая регрессия157 относится к прежнему source; эта delta проверена профильными сценариями.
Протоколы: [compiled988](ux-ui/acceptance/bgp-unknown-compiled-2026-10-12.json), [native payload replay](ux-ui/acceptance/bgp-unknown-replay-2026-10-12.json), [deployed API/UI](ux-ui/acceptance/bgp-unknown-deployed-2026-10-12.json). RouterOS конфигурация/пароли этим блоком не менялись, новые native fixtures не создавались, ReUI/Frame/base-nova UI primitives сохранены.
Следующий162 — native private4-byte ASN в IPv6 BGP и отображение длинных AS на1440/320; прежний BFD fault повторять без новой delta не требуется.12.5 открыт.