fix(traffic): подтверждать идентичность соседних счётчиков

This commit is contained in:
Denozordec committed 2026-10-13 01:19:22 +07:00
1 parent 493c30bebc
commit b57ae316ba
27 files changed
+1444 -36

No files matched your search

+24 -2
View File
@@ -1,8 +1,8 @@
# Оставшаяся внешняя приёмка — 2026-10-12
Это актуальная матрица после 12.5.185. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.186. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-gap185`, frontend `ux-warning183`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-identity186`, frontend `ux-warning183`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
| Раздел | Подтверждено | Осталось / условие завершения |
| --- | --- | --- |
@@ -1117,3 +1117,25 @@ Unit threshold/invalid interval/merge/collector guards, backend/application Type
[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.186 — подтверждение идентичности пары счётчиков (2026-10-13)
Имя интерфейса больше не является единственным основанием новой counter pair. Nullable native_counter_identity хранит нормализованные source.updatedAt и native RouterOS.id (*HEX). Producer подтверждает continuity только когда identity непустая и совпадает с предыдущей строкой того же interface/peer key. Новый native ID, конфигурация источника или missing/invalid ID дают первую pair unknown; следующий подтверждённый poll восстанавливает измерение. Для WG используются peer.id и существующий public-key/iface series key, не ID самого интерфейса.
Биты16/32 различают confirmed continuity и сам факт проверки новым producer; running/disabled/counter/status markers не меняют смысла. Builder исключает неподтверждённую или несовпадающую pair из новых rates/bytes, сохраняя остальные подтверждённые исторические пары. Первый корректный counter остаётся baseline для следующей pair, даже если его собственная предыдущая continuity неизвестна. Legacy rows не переписываются: absent new marker/native identity оставляет прежнюю явно ограниченную историю. Это не доказательство непрерывности legacy, повторного использования того же native ID после перезагрузки или физической доступности.
| Изменение | Схема результата | Проверка |
| --- | --- | --- |
| Same name, новый native ID | old counter → unknown boundary → новый baseline → confirmed0 | own SQL interface+peer |
| Config version изменилась | не переносить counter pair между источниками → normal next poll | own SQL |
| Missing native ID | новые pair unknown, без guessed zero/bytes | own SQL/unit |
Миграция0012 добавляет nullable TEXT к partitioned traffic_samples, включая существующие partitions; нет массового UPDATE/переписывания flags. Downgrade старого reader может игнорировать новый столбец, migration removal не выполнялась. Реальный backup/restore с новой колонкой — следующий187, пока не принят данным блоком.
Unit identity/config/legacy-marker/pair guards, backend/application TypeScript и diff checks passed. [Own PG SQL](ux-ui/acceptance/traffic-identity-sql-2026-10-13.json):62 cases9counter+14history+10TCP SSE+10volume+19status/37613ms, no skip.4 новые cases: interface ID replacement/config version/missing ID/peer ID replacement с positive counters, unknown boundary, no extra bytes и последующим measured0. Fixtures явно объявляют native IDs; VM actual-collector unit получил настоящий identity/peer parser dependencies вместо отсутствовавших globals. Первая попытка остановилась до SQL scenarios на прежнем VM fixture; временная база/role удалены. Последний namespace mm_accept_166_1791828561251/role/container удалён, absence verified.
[Source458/524](ux-ui/acceptance/traffic-identity-source-2026-10-13.json)/[compiled1040](ux-ui/acceptance/traffic-identity-compiled-2026-10-13.json) SHA256 parity. [Backend ux-identity186](ux-ui/acceptance/traffic-identity-runtime-2026-10-13.json) healthy/imageIds; frontend ux-warning183 без изменений/новой сборки. Only backend.env tag, rollback backend ux-gap185/frontend ux-warning183; additive migration остаётся. Secret env copy0.
[Native GET](ux-ui/acceptance/traffic-identity-native-2026-10-13.json): оба CHR доступны, interface native IDs/flags/counters валидны;0012 applied. Peers фактически0 — positive peer replacement доказан изолированным fixture, не реальным VPN-туннелем. DB read-only/RouterOS config writes0/password changes0/messages0. [Initial API](ux-ui/acceptance/traffic-identity-api-2026-10-13.json) ожидаемо unknown при первом baseline после нового writer; [штатное восстановление](ux-ui/acceptance/traffic-identity-recovery-2026-10-13.json) подтвердило current/rxKnown/txKnown обоих CHR с30s interval без manual collector invocation. [Production UI1440/320](ux-ui/acceptance/traffic-identity-deployed-2026-10-13.json) actual live/receipt labels/no errors/overflow. Native SSE не изменён; предшествующие6E2E185 UI guard checks не пересчитываются как новые186.
Следующий187 — own-schema archive restore для nullable native counter identity/continuity flags и старого schema archive с повторным bootstrap migration. Потом отдельная приёмка многопроцессной координации/масштаба/внешних доступов.12.5 открыта. Локальный коммит без push.