chore(ux): зафиксировать аудит свежести и контекста источников оповещений

This commit is contained in:
Denozordec committed 2026-10-12 12:13:23 +07:00
1 parent 13618e7efe
commit 65d4a17882
7 files changed
+200 -11

No files matched your search

+31 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-12: завершён 12.5.167 — GRE/BGP freshness: fixed30s interval вынесен в общую константу, newest completion/sample старше90s или более30s в будущем не подтверждает current alert facts. Unit clock boundaries/scheduler/owned PG8 rows/confirm-stability/build/1000 parity/2 real UI passed; own DB/container removed, main static config unchanged. Runtime ux-fresh167/ux-bfd158 healthy. Следующий168 — audit свежести и disabled config остальных alert collector families; физические WAN/multi-instance/реальные интеграции остаются внешними условиями.12.5 открыт.
Актуальное продолжение 2026-10-12: завершён 12.5.168 — readonly audit остальных alert sources. На стенде resources15s/traffic30s/REST disabled120s/active probes0;2 enabled CHR с одинаковым normalized name сворачиваются в1 server signal. Source code не проверяет возраст/disabled config этих families; ошибки фильтруются как only-ok history. Это audit, исправление не заявляется. Runtime ux-fresh167/ux-bfd158 healthy. Следующий169 — единый блок current/identity/config/freshness guards для server/probe/traffic signals с учётом per-probe intervals, owned PG fixtures и profile tests;12.5 открыт.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -696,7 +696,7 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-12: завершён 12.5.167 — GRE/BGP freshness: fixed30s interval вынесен в общую константу, newest completion/sample старше90s или более30s в будущем не подтверждает current alert facts. Unit clock boundaries/scheduler/owned PG8 rows/confirm-stability/build/1000 parity/2 real UI passed; own DB/container removed, main static config unchanged. Runtime ux-fresh167/ux-bfd158 healthy. Следующий168 — audit свежести и disabled config остальных alert collector families; физические WAN/multi-instance/реальные интеграции остаются внешними условиями.12.5 открыт.
Актуальное продолжение 2026-10-12: завершён 12.5.168 — readonly audit остальных alert sources. На стенде resources15s/traffic30s/REST disabled120s/active probes0;2 enabled CHR с одинаковым normalized name сворачиваются в1 server signal. Source code не проверяет возраст/disabled config этих families; ошибки фильтруются как only-ok history. Это audit, исправление не заявляется. Runtime ux-fresh167/ux-bfd158 healthy. Следующий169 — единый блок current/identity/config/freshness guards для server/probe/traffic signals с учётом per-probe intervals, owned PG fixtures и profile tests;12.5 открыт.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
@@ -1851,3 +1851,32 @@ Unit clock injection проверяет stale/future completion и sample, malfo
Backend production build/1000 emitted parity passed, ux-fresh167 развёрнут с rollback env, backend/PG healthy, frontend ux-bfd158 сохранён.3 readonly catalog/selected GET и2 live UI1440/320 passed/no errors/overflow. Source frontend/ReUI/Frame/base-nova и RouterOS правила/пароли не менялись, native tunnels не создавались, сообщения не отправлялись. Running containers после cleanup только3 основных сервиса. Свежесть других collector families/отключаемых jobs и stable-ID target migration этим блоком не закрыты.
Протоколы: [owned SQL8/cleanup](ux-ui/acceptance/collector-freshness-sql-2026-10-12.json), [compiled1000](ux-ui/acceptance/collector-freshness-compiled-2026-10-12.json), [deployed API/UI](ux-ui/acceptance/collector-freshness-deployed-2026-10-12.json). Следующий168 — audit остальных alert source families: stale/disabled config не должны создавать current facts.12.5 остаётся открытым в матрице внешних ограничений.
## 12.5.168 — карта оставшихся источников оповещений (2026-10-12)
Выполнен source audit и чтение метаданных production PG с default_transaction_read_only=on. Source/database settings не менялись, default-seeding getters не вызывались, bootstrap/RouterOS/messages отсутствовали. Реальные текущие настройки: resources enabled/15s, traffic enabled/30s, REST disabled/120s, active Ping probes0. Builder в момент audit выдавал1 server signal (max age3.197s), traffic1 (max age18.24s), probes0. Это возраст наблюдаемого снимка, не controlled stale fixture. Одновременно обнаружена1 группа одинаковых имён у enabled servers: оба CHR называются одинаково,2 devices сворачиваются в1 name-based signal. Audit не исправляет это поведение.
Source findings: non-GRE/BGP reader выбирает только status=ok; resource/REST/traffic/probe reducers восстанавливают ключи из старых runs; evaluation не проверяет sampledAt age; builder не применяет текущие enabled flags источников. Resource reducer превращает всякое не-online значение в offline; одинаковые имена могут смешать current и previous разных устройств. Это подтверждённые свойства кода, но runtime disabled/stale/malformed fixture пока не выполнен. Не считать найденные проблемы устранёнными только по этому документу.
| Источник | Интервал / особенность | Требование к следующему блоку |
| --- | --- | --- |
| Resources | Настраиваемый intervalSec, на стенде15s; default300s | Effective resourcesEnabled; уникальная identity/current known state; возраст по своему периоду |
| REST availability | Отдельные enabled/intervalSec; сейчас выключен | Выключенные/старые REST данные не переопределяют свежий resource result и не подтверждают recovery |
| Ping | probeIntervalSec и individual uptime_probes.intervalSec; snapshot содержит только due probes | Фильтр enabled probes/source servers; latest observed row каждого probe и его собственный TTL, не latest-run-only |
| Traffic | Настраиваемый enabled/intervalSec; сейчас30s | Отсутствие/старое/disabled не превращается в zero/low traffic; identity не смешивает одинаковые имена |
Период GRE/BGP30s/границу90s167 нельзя механически распространить на resources default5min или Ping с индивидуальным расписанием. Для169 сначала определить effective config каждого family и per-probe timing, затем coherent current states/previous known history без cross-device aliases. Проверить own PG: disabled source с retained history, stale/future times, newer error/null, empty/deleted object, duplicate labels, частичный due-probe batch и controlled recovery. Локальные unit/profile tests + scoped SQL; production build только backend после окончательной delta. Полную UI/context regression повторять лишь при frontend foundation change, остальные native протоколы не переснимать без новой причины.
Схема доработки:
~~~mermaid
flowchart LR
A["Текущий источник и устройство"] --> B["Enabled и уникальная identity"]
B --> C["Последнее наблюдение и свой интервал"]
C --> D{"Свежий известный факт?"}
D -->|да| E["Условие правила и last-known history"]
D -->|нет| F["Нет подтверждения события"]
E --> G["Outbox после подтверждения"]
~~~
Протокол: [readonly audit168](ux-ui/acceptance/alert-source-audit-2026-10-12.json). Source/build/runtime не менялись после167, новые тесты и исправления не заявляются. Следующий169 — выполнить этот единый блок, сохранить profile/owned SQL результаты и локальный коммит без push. Реальные Telegram/Portal/внешние accounts, client OS/physical WAN/multi-instance остаются отдельными условиями12.5.