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

+19 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 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 открыта.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -38,6 +38,24 @@
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–168 и ограничения ниже. Runtime backend ux-month149/frontend ux-sessions150. |
## 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.
## 12.5.185 — граница доверия скорости после пропусков: baseline (2026-10-12)
Блок начат; реализация и приёмка не завершены. [Чистый read-only пример](ux-ui/acceptance/traffic-gap-baseline-2026-10-12.json) проверил один и тот же достоверный delta1MiB между двумя counters с интервалами30s,90s,1h,24h. Учтённый объём во всех случаях1MiB — корректное свойство counter difference. Но observations.rxNow=true также для среднего за1h/24h; длительность последнего интервала пока не влияет на доверие текущей скорости. Это не native monitor-traffic: среднее за интервал не доказывает instantaneous rate в конце интервала.4 baseline cases не являются4 новыми принятыми production сценариями.