fix(wireguard): учитывать неподтверждённую ревизию импорта

This commit is contained in:
Denozordec committed 2026-10-09 09:21:02 +07:00
1 parent 91ee424b42
commit 8eaf78b686
10 files changed
+84 -11

No files matched your search

+10
View File
@@ -619,3 +619,13 @@ Supplemental native service run на каждом CHR использовал н
[Native service/API evidence](ux-ui/acceptance/wg-import-compensation-native-2026-10-09.json), [production browser failure/retry](ux-ui/acceptance/browser-wg-import-compensation-e01454b-2026-10-09.json), [deploy/DB controls](ux-ui/acceptance/wg-import-compensation-deploy-controls-2026-10-09.json), [smoke6 страниц](ux-ui/acceptance/deploy-browser-e01454b-backend-2026-10-09.json). Финальный fixture exit0, собственные WG/peers/IP/connected routes удалены; выбранные WG/peers/IP/routes/IPv4 filter/nat/mangle совпали с baseline на обоих CHR. Остались3 основные службы, backend healthy. DB controls до/после servers2,speedHistory9,retentionDays14,migrations9; audit revisions намеренно сохранены. Smoke /dashboard,/servers,/uptime?tab=speed,/settings,/filters,/wireguard →200,320px fits,0 page/API errors. Ключи/конфигурации не включались в отчёты/скриншоты/traces/файлы; public JSON проверены. Product source после71 не менялся, общая локальная регрессия не повторялась; выполнены production build и реальные scoped сценарии.
Граница результата: подтверждённый native validation failure после трёх создающих операций, компенсация и ручной успешный retry в production HTTP/UI. Потерянный ответ/HTTP408/500 после commit,потеря процесса,unconfirmed cleanup,concurrent changes и audit DB failure остаются внешними ограничениями; unit71 их не заменяет. Следующий12.5.73 — изолированный audit failure после настоящего apply и truthful состояние applied с собственной WG парой/cleanup. RBAC/IPv6/throughput/multi-instance/PSK/multi-address/unknown-conf поля и остальные протоколы/интеграции остаются открытыми. Доступы и чужая RouterOS конфигурация не менялись. Локальный коммит без push.
## 12.5.73 — отсутствие audit receipt не означает полный успех импорта (2026-10-09)
При подготовке внешнего fault scenario найдено: captureAndAppendRevision перехватывает capture/persistence errors и возвращает null, а recordWireguard раньше игнорировал return value. Поэтому catch из71 не срабатывал при обычном сбое сохранения и route мог вернуть200. Внешний тест перенесён до исправления обнаруженной причины; реальный DB fault в73 не заявлен принятым.
recordWireguard теперь возвращает результат helper. Новый confirmWireguardImportRevision проверяет null/undefined и exception; созданная или уже существующая неизменённая ревизия считается подтверждением. Импорт после успешного native apply при отсутствующем receipt возвращает502,state applied: «Конфигурация применена, но сохранение ревизии не подтверждено. Обновите данные перед повтором». Формулировка не утверждает отсутствие строки БД: error может случиться после INSERT при prune/read. Подтверждённые изменения RouterOS не откатываются из-за audit error. Другие consumers recordWireguard продолжают игнорировать nullable receipt, их поведение не расширялось этим блоком.
Новый wireguard-import-revision.test.ts4/4: created/unchanged receipt, null/undefined, exception и настоящий captureAndAppendRevision с падающим capture callback. Последний воспроизводит именно контракт swallowing→null, DB запрос не выполняется; это не реальный отказ PostgreSQL. Новые tests включены в backend test:wireguard:42/42 (22 preflight+16 apply+4 revision), codec и Fastify4 invalid cases passed. Backend TypeScript/ESLint passed. Browser applied1/1 с подменённым502/точным новым message сохраняет textarea/server/error и не повторяет POST автоматически; это UI boundary, не native/DB интеграция. Diff check passed. Production UI/ReUI primitives не менялись.
Исправление локальное, runtime backend e01454b/frontend479f2ad не менялся; RouterOS объекты/пароли и DB schema в73 не менялись. Следующий12.5.74 — production build/deploy backend и изолированный реальный audit persistence failure после настоящего apply на собственных WG объектах: подтвердить applied/native/связность, предупреждение HTTP/UI, отсутствие повторной мутации и cleanup/baseline. Нельзя считать73 доказательством сбоев DB/процесса/transport/concurrency/RBAC/IPv6/интеграций; они и прочие внешние ограничения остаются открытыми. Локальный коммит без push.