fix(backups): получать нативный экспорт и проверить восстановление из S3

This commit is contained in:
Denozordec committed 2026-10-14 10:31:14 +07:00
1 parent 03b0896369
commit c3fb66dcbf
18 files changed
+1405 -120

No files matched your search

+16 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-14: Selectel S3 принят228–229:2 real roundtrip objects и12 unique compiled backup API/owned SQL сценариев, включая upload denial/local fallback/sync/delete. Все собственные DB/roles/files/current objects очищены; enabled versioning обработан отдельно —8versions+8delete markers удалены из3 own prefixes, remaining0. Keys не в Git/reports, private env удалены. Native export — HTTP fixture, CHR contacts0; real native backup/restore/live UI остаются230. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
Актуальное продолжение 2026-10-14: блок230 — исправлена подмена нативного экспорта частичным синтетическим скриптом. Реальные конфигурации обоих CHR выгружены в Selectel S3 и скачаны; ограниченный restore собственного bridge подтверждён RouterOS. Исходные файлы/bridge сохранены, собственные DB/roles/объекты удалены;6 versions+6 delete markers очищены. Live UI1440/390 с real Portal/API принят без изменения storage settings. Backend ux-backup230/frontend ux-routing218. Далее231 — чтение файлов>=61439 байт; S3 retention/смена bucket и расширенная приёмка открыты. Этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,21 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка12.3.83 в границах журнала. Внешняя12.5: блоки1–229 завершены в записанных scopes, этап открыт. Runtime backend ux-regression222/frontend ux-routing218; backend25/UI52 и дополнительные SQL/UDP222 прошли. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка12.3.83 в границах журнала. Внешняя12.5: блоки1–230 завершены в записанных scopes, этап открыт. Runtime backend ux-backup230/frontend ux-routing218; backend25/UI52 и дополнительные SQL/UDP222 прошли. |
## 12.5.230 — нативные резервные копии CHR в S3 и ограниченное восстановление (2026-10-14)
Нативные POST /console/export и /export без file вернули пустые массивы на обоих CHR. Старый fallback составлял частичный скрипт из нескольких разделов и мог выдавать его за полную резервную копию. Fallback удалён: выполняется однократный /export file со случайным собственным именем, проверяются список/ID/размер/RouterOS header/ошибки разделов/целостность UTF-8, временный файл удаляется с readback. Неполный экспорт или неподтверждённая очистка завершаются ошибкой. Повтор mutations не добавлен.
8 HTTP-сценариев нового exporter, test:backups, test:ros-file, backend/contracts build и scoped ESLint прошли. Уточнены два существующих let: entry стал const; req остаётся let, чтобы не нарушить обработку уже отменённого запроса. Production image ux-backup230 проверен:500 source files/1060 compiled outputs совпали; main backend развёрнут и healthy, frontend ux-routing218 сохранён. [Сборка](ux-ui/acceptance/backup230-deployment.json).
После отдельного согласия пользователя реальные native конфигурации194.226.121.150 и104.165.244.7 выгружены через compiled backup API/owned SQL в Selectel S3 (1063/782 bytes), downloads/hash подтверждены. Полное восстановление конфигурации не выполнялось: из native export выделена только команда собственного bridge без ports/addresses; S3 download→upload→import→native readback подтвердили его восстановление. [Native/S3](ux-ui/acceptance/s3-native230.json).
Первый прогон выполнил backup/restore, но cleanup assertion полного file metadata завершился ошибкой. Для повторного прогона baseline сохранён приватно; у directory исключены только изменяемые creation-time/last-modified, остальные поля и все поля обычных файлов/bridge сравниваются точно. Новый полный прогон passed; причина первого несовпадения по сохранённому baseline не доказана. [Первый результат](ux-ui/acceptance/s3-native230-first.json). Собственные bridge/files/catalog/SQL DB/roles удалены, passwords changes0. Из двух собственных prefixes удалены6 S3 versions+6 delete markers, readback0, bucket settings writes0. [Очистка](ux-ui/acceptance/s3-native230-version-cleanup.json). Private credentials env удалён локально/на Debian.
Live браузер с real Portal SSO/API, без mocks: /backups и настройки на1440/390, успешные API чтения, page errors0, horizontal overflow0. Первый harness ошибочно ожидал /dashboard; Portal правильно вернул /backups, скорректированный harness прошёл. Настройки хранилища в main не изменялись; S3 save/test и restore через UI этим не приняты. [UI](ux-ui/acceptance/backups230-live-ui.json).
Ограничение: текущий /file/get отклоняет файлы>=61439 bytes; частичная подмена больше не допускается. Следующий231 — документированный /file/read с порциями, затем проверка смены S3 bucket/endpoint и retention semantics. Общая UI-регрессия повторно не запускалась; этап12.5 открыт.
## 12.5.229 — API резервных копий с real S3, owned SQL и очистка версий (2026-10-14)