fix(traffic): ограничивать доверие скорости после пропусков

This commit is contained in:
Denozordec committed 2026-10-13 00:54:42 +07:00
1 parent 9603048bd8
commit 493c30bebc
21 files changed
+1367 -22

No files matched your search

+20 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-12: завершён12.5.184, backend ux-history184/frontend ux-warning183 healthy. Начат185: baseline4 воспроизводит current mask для среднего counter rate за30s/90s/1h/24h; это не исправлено и не принято. Следующий шаг — ограничить доверие текущей counter-derived скорости длительностью интервала, сохраняя подтверждённые bytes/history.12.5 открыта.
Актуальное продолжение 2026-10-13: завершён12.5.185 — current counter rate ограничен3периодами; long gap→unknown без потери history/known bytes; collector snapshot также не выдаёт long average как current. OwnSQL58/37008ms/6E2E14.7s/types/build/ESLint/source456+524/1040compiled/API/browser2 passed. Backend ux-gap185 healthy/frontend ux-warning183; ownDB/role/container удалены. Следующий186 — native identity/config continuity;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.184, backend ux-history184/frontend ux-warning183 healthy. Начат185: baseline4 воспроизводит current mask для среднего counter rate за30s/90s/1h/24h; это не исправлено и не принято. Следующий шаг — ограничить доверие текущей counter-derived скорости длительностью интервала, сохраняя подтверждённые bytes/history.12.5 открыта.
Актуальное продолжение 2026-10-13: завершён12.5.185 — current counter rate ограничен3периодами; long gap→unknown без потери history/known bytes; collector snapshot также не выдаёт long average как current. OwnSQL58/37008ms/6E2E14.7s/types/build/ESLint/source456+524/1040compiled/API/browser2 passed. Backend ux-gap185 healthy/frontend ux-warning183; ownDB/role/container удалены. Следующий186 — native identity/config continuity;12.5 открыта.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
@@ -2184,3 +2184,21 @@ Backend TypeScript/build, [source455/524](ux-ui/acceptance/traffic-membership-so
Точный следующий шаг: передавать длительность последней пары measurements в provenance и ограничить current counter-derived rate согласованным пределом относительно collector period. Аналогичный guard нужен в snapshot collector, чтобы новое чтение после длительного сбоя не объявляло старое среднее текущей скоростью. Подтвердить normal/threshold/long gap/recovery/reset на собственном SQL/HTTP и UI. Не подменять average/unknown нулём и не менять actual SSE monitor rate. Отдельно остаётся неоднозначность пересоздания интерфейса с прежним именем и увеличившимся counter: существующая sample identity не доказывает непрерывность.
Стенд остаётся backend ux-history184/frontend ux-warning183, source/runtime184 не менялись. Аудит не обращался к CHR/DB, writes0/native commands0, пароли/конфигурация не менялись. Состояние сохранено локальным коммитом без push для продолжения185 после сброса лимита.
## 12.5.185 — доверие текущей скорости после длительного пропуска (2026-10-13)
Завершает baseline185 от2026-10-12. Builder сообщает measurementIntervalMs последней пары counter samples; для агрегата используется максимальный интервал всех составляющих, отсутствие interval в одной из новых составляющих даёт null. applyTrafficFreshness разрешает текущую counter-derived скорость только при положительном конечном interval≤3×max(5s,configured period). Это тот же запас3периода, что у TTL. При периоде30s граница90s включительно; более длинный или неизвестный интервал даёт unknown и понятную причину. Историческое среднее и подтверждённые counter bytes сохраняются.
Collector использует тот же предел в observedTrafficRate: после длинного пропуска snapshot не содержит sumRxMbps/sumTxMbps как измеренную текущую скорость. Следующая нормальная пара восстанавливает current, включая measured0. Native SSE monitor-traffic не изменён; native link status не зависит от длительности counter pair. Legacy вручную сформированная meta без interval сохраняет прежнюю совместимость; production builder выдаёт interval/null явно. Это не подтверждение native identity или полного billing за период.
| Состояние | Схема | Проверка |
| --- | --- | --- |
|30s/90s | свежая пара → current | unit threshold |
|90.001s/1h/24h | history+known bytes → текущая скорость неизвестна | unit, own SQL, UI1440/320 |
| Новый poll после пропуска | нормальная пара → current0 допустим | own collector/SQL recovery |
Unit threshold/invalid interval/merge/collector guards, backend/application TypeScript и ESLint passed.6 E2E14.7s (2new gap+2binding freshness+2peer warnings) passed. UI использует существующий ReUI Alert/base-nova без новой темы или компонентов. [Owned SQL](ux-ui/acceptance/traffic-gap-sql-2026-10-13.json):58 cases9counter+14history+10TCP SSE+10volume+15status/37008ms, no unavailable skip.3 новые cases: API сохраняет1MiB/history при120s gap, API recovery30s возвращает current и2MiB, actual fixture collector long gap не выдаёт current sum и второй poll подтверждает0. Первоначальный SQL запуск выявил fixture duplicate PK при переносе всех исторических timestamps; fixture оставляет только последнюю волну перед сдвигом. Ошибка не выдана за passed, обе временные базы/роли удалены. Последняя ownDB mm_accept_166_1791827374886/role/container удалена и отсутствие проверено.
[Source456/524](ux-ui/acceptance/traffic-gap-source-2026-10-13.json)/[compiled1040](ux-ui/acceptance/traffic-gap-compiled-2026-10-13.json) SHA256 parity. Backend production ux-gap185 [healthy/imageIds](ux-ui/acceptance/traffic-gap-runtime-2026-10-13.json), frontend ux-warning183 без исходных изменений/повторной сборки. Только backend.env tag, rollback backend ux-history184/frontend ux-warning183; secret env copy0, migration0. [Actual API](ux-ui/acceptance/traffic-gap-api-2026-10-13.json)/[production UI1440/320](ux-ui/acceptance/traffic-gap-deployed-2026-10-13.json) passed с actual live и backend receipt labels, no errors/overflow. Checker не отправлял новых native commands и не создавал отказ на CHR. Password/config/message changes0.
Следующий186 — provenance native interface/peer identity и конфигурации источника: positive counter difference по одному прежнему имени не доказывает непрерывность после пересоздания/смены устройства. Старую историю не переписывать по догадке. Общая12.5 и внешние зависимости остаются открыты. Локальный коммит без push.