chore(test): проверить Selectel S3 и операции резервных копий
This commit is contained in:
1 parent
2277a76196
commit
03b0896369
14 files changed
+377
-19
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
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).
|
||||
|
||||
@@ -2643,3 +2643,7 @@ Runtime backend ux-regression222/frontend ux-routing218. Latest backend25/UI52
|
||||
## 12.5.228 — S3 runner подготовлен, реальная проверка ожидается (2026-10-14)
|
||||
|
||||
11 safety/dry-run checks passed, network0. Helper использует compiled S3 client, harmless own UUID prefix2 objects, HTTPS/explicit live guards и cleanup только attempted keys. Application jobs/native restore/versioned retention не приняты. Требуются endpoint/region/bucket/keys/path-style. [Guard протокол](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json).
|
||||
|
||||
## 12.5.228–229 — Selectel S3/client/API/owned SQL приняты (2026-10-14)
|
||||
|
||||
2 roundtrip objects,12 unique API scenarios, synthetic native export/CHR contacts0. Own DB/roles/catalog/localfiles/currentobjects cleaned. Versioning Enabled:8versions+8markers removed,3 own prefixes remaining0; bucket configuration unchanged. Native backup/restore/live UI/смена storage origin/retention semantics остаются230. Private env удалены, secrets не в published files. [API](ux-ui/acceptance/s3-application229.json), [version cleanup](ux-ui/acceptance/s3-version-cleanup229.json).
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-14. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
| REST и достоверность данных | Ошибки OSPF/BFD/BGP/GRE/WAN215–221 явные; latest API smoke222 прошёл | Причина единичных native401/500 неизвестна. Короткое независимое наблюдение возможно сейчас; оно не даст SLA |
|
||||
| Клиентские ОС и внешняя сеть | CHR↔CHR/Linux, private IPv4/ULA и synthetic IPv6/IPFIX; Android full-tunnel/reconnect227 подтверждены пользователем | Windows/macOS/iOS VPN, расширенная Android приёмка, независимые WAN/multi-WAN и public IPv6; public IPv6 на текущем стенде отсутствует |
|
||||
| Масштаб и длительная устойчивость | Контролируемые lock/dedupe/loss/recovery и короткие native проверки | Несколько backend/worker/writers, длительный rekey/REST/traffic, physical disconnect и maximum throughput |
|
||||
| Внешние хранилища и jobs | Локальные API/errors/RBAC/owned SQL; реальные Portal1.3.1 и Telegram доставлены195–201 | Реальные S3/provider/container/Gitea/MaxMind jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
|
||||
| Внешние хранилища и jobs | Локальные API/errors/RBAC/owned SQL; реальные Portal1.3.1/Telegram195–201 и Selectel S3/client/API/ownSQL228–229 | Native S3 backup/restore/live UI/retention; provider/container/Gitea/MaxMind jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
|
||||
| Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP сценарии и точные границы записаны | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/policy/path-length и длительные переходы; BFD-only gate гарантией не стал |
|
||||
| Общий UX, доступность и производительность | Полная UI192 исторически; latest backend25/UI52, scoped contrast/live218 и keyboard206 | Финальная свежая UI-регрессия перед выпуском, профильный performance и ручная accessibility/screen-reader приёмка; scoped axe не полный WCAG |
|
||||
| Границы выпуска | План/доказательства/датированные блоки сохранены; коммиты локальные | Определить требуемые конфигурации и принять результат в этих границах; невыполненные варианты остаются явными ограничениями |
|
||||
|
||||
+19
-6
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -36,15 +36,28 @@
|
||||
| 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–227 завершены в записанных scopes, этап открыт. Runtime backend ux-regression222/frontend ux-routing218; backend25/UI52 и дополнительные SQL/UDP222 прошли. |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка12.3.83 в границах журнала. Внешняя12.5: блоки1–229 завершены в записанных scopes, этап открыт. Runtime backend ux-regression222/frontend ux-routing218; backend25/UI52 и дополнительные SQL/UDP222 прошли. |
|
||||
|
||||
## 12.5.228 — подготовка безопасной реальной S3-проверки (2026-10-14)
|
||||
## 12.5.229 — API резервных копий с real S3, owned SQL и очистка версий (2026-10-14)
|
||||
|
||||
Пользователь предложил тестовый S3; endpoint/region/bucket/access/secret и path-style ещё не получены. Подготовлен backend/scripts/acceptance/s3-roundtrip.mjs для запуска в compiled test backend image. Он вызывает существующий production S3 client, использует отдельный mmapp-acceptance/<UUID>/, проверяет пустоту prefix до записи, сохраняет planned/attempted keys до каждого PUT и удаляет только собственные attempted keys, включая неопределённый результат PUT. Тела — безвредные synthetic .rsc comments; native config/backup/credential exports не загружаются.
|
||||
12 unique сценариев compiled createBackupsRoutes/backup-service + Selectel S3 + отдельная PostgreSQL mm_accept_166_<timestamp>. Role NOSUPERUSER/NOCREATEDB/NOCREATEROLE/NOBYPASSRLS подтверждена до bootstrap; main DSN/данные не копировались. RouterOS export заменён только HTTP fixture на container loopback, возвращающим harmless .rsc comment: actual fixture exports3/run, CHR contacts0, native restore0. Приложение/production images не менялись.
|
||||
|
||||
Запуск требует HTTPS без userinfo/query/hash, явного owned-scope=yes, region/path-style и live RUN=confirmed. Нет TLS bypass или передачи credentials в вывод. Предусмотрены PUT→GET+SHA256, exact listing2 keys, Delete и readback текущих объектов; report содержит acknowledgement/cleanup failures отдельно. Version history/delete markers/retention, application backup jobs/SQL/UI/native restore в этот helper НЕ входят. Реальную S3-приёмку по его dry-run не объявлять.
|
||||
Приняты: storage PUT без secret disclosure; real HeadBucket test receipt; async create both; повтор requestId без второй выгрузки; download точных bytes; invalid credential test400 с сохранением settings; download fallback local при отказе S3; upload failure сохраняет local backup/uploadError; s3-only удаляет local copy и скачивается remote; sync/import/idempotent repeat; catalog/imported download; DELETE204/current-object cleanup/missing404. Сохраняемый в репо helper дополнен explicit owned/live/vHosted guards; свежий повтор тех же12 passed, не24 unique. UI/RBAC/native export+restore этим не объявляются повторёнными.
|
||||
|
||||
Обе own SQL DB/roles/containers удалены и отсутствие подтверждено trap. Catalog rows0/local files0/current own S3 objects0. GetBucketVersioning200 выявил Enabled. Для трёх наших UUID prefixes выполнена строгая проверка allowed keys и DeleteObject с точными VersionId:8versions+8delete markers удалены, version readback0 всех трёх. Чужие prefixes/versions не затрагивались, bucket settings не менялись. Credentials отсутствуют в published scripts/reports, private env удалены после cleanup.
|
||||
|
||||
[API12](ux-ui/acceptance/s3-application229.json), [initial12](ux-ui/acceptance/s3-application229-first.json), [versioning](ux-ui/acceptance/s3-versioning229.json), [cleanup16versions/markers](ux-ui/acceptance/s3-version-cleanup229.json). Reproducible helpers: backend/scripts/acceptance/s3-backups-api.mjs, run-s3-backups-api.sh, s3-owned-versions-cleanup.mjs. Wrapper на Debian ожидает private env /opt/mmapp-test/artifacts/s3-228-private.env и mount s3-229; version helper получает curated owned-prefixes-public.json из наших reports, не произвольный namespace.
|
||||
|
||||
Следующий230 — real S3 с native backup/ограниченным restore и live UI в согласованном scope; отдельно проверить смену bucket/endpoint при имеющемся каталоге и retention/version semantics. Остальные группы матрицы остаются открытыми. Runtime backend ux-regression222/frontend ux-routing218. Этап12.5 не завершён.
|
||||
|
||||
## 12.5.228 — реальные операции Selectel S3 (2026-10-14)
|
||||
|
||||
После11 safety/dry-run guards пользователь предоставил тестовый Selectel S3: HTTPS s3.ru-1.storage.selcloud.ru:443, region ru-1, bucket mikrotik-test-s3, virtual-hosted (forcePathStyle=false). Завершающий слеш в Secret key подтверждён как форматирование и не использован. Credentials сохранялись только в ignored/private env, не в коде/Git/публичных отчётах; временные env после всей проверки удалены локально и на Debian.
|
||||
|
||||
Runner вызвал существующий compiled production S3 client в отдельном read-only/cap-drop container. В собственном mmapp-acceptance/<UUID>/ выполнены empty-prefix preflight,2 PUT→GET+SHA256 equality и exact listing2. Два Delete подтверждены; текущих объектов0. Тела — harmless synthetic .rsc comments, device configuration exports0. TLS verification сохранена. [Реальный roundtrip](ux-ui/acceptance/s3-real228.json), [guards11](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json).
|
||||
|
||||
В229 обнаружено enabled versioning: ordinary Delete создаёт delete marker. После API проверок удалены версии/markers только трёх собственных UUID prefixes; initial228 prefix2versions+2markers очищен отдельно. Bucket configuration writes0. Version history/retention поведения самого приложения этим не принимаются: очистка acceptance fixture не меняет production deletion semantics. Далее229 — compiled backup API/SQL с real S3 и synthetic native export.
|
||||
|
||||
11 локальных guard/dry-run cases passed: HTTP, URL credentials/query/invalid URL, отсутствующие scope/bucket/credentials/region, invalid path-style и отсутствующее live confirmation отклонены; fake secret/access markers отсутствуют в stdout/stderr. Dry-run0 network requests. Syntax/diff check passed. [Guard протокол](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json). Подготовка runner закончена; реальное выполнение228 и расширенная application S3 приёмка ожидают параметров пользователя. Backend ux-regression222/frontend ux-routing218 сохранены. Этап12.5 открыт.
|
||||
|
||||
## 12.5.226 — свежая общая UI-регрессия и защита пользовательских снимков (2026-10-14)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Оставшаяся внешняя приёмка — 2026-10-14
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
Это актуальная матрица после 12.5.227. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
Это актуальная матрица после 12.5.229. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
|
||||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-regression222`, frontend `ux-routing218`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
| REST и достоверность данных | Ошибки OSPF/BFD/BGP/GRE/WAN215–221 явные; latest API smoke222 прошёл | Причина единичных native401/500 неизвестна. Короткое независимое наблюдение возможно сейчас; оно не даст SLA |
|
||||
| Клиентские ОС и внешняя сеть | CHR↔CHR/Linux, private IPv4/ULA и synthetic IPv6/IPFIX; Android full-tunnel/reconnect227 подтверждены пользователем | Windows/macOS/iOS VPN, расширенная Android приёмка, независимые WAN/multi-WAN и public IPv6; public IPv6 на текущем стенде отсутствует |
|
||||
| Масштаб и длительная устойчивость | Контролируемые lock/dedupe/loss/recovery и короткие native проверки | Несколько backend/worker/writers, длительный rekey/REST/traffic, physical disconnect и maximum throughput |
|
||||
| Внешние хранилища и jobs | Локальные API/errors/RBAC/owned SQL; реальные Portal1.3.1 и Telegram доставлены195–201 | Реальные S3/provider/container/Gitea/MaxMind jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
|
||||
| Внешние хранилища и jobs | Локальные API/errors/RBAC/owned SQL; реальные Portal1.3.1/Telegram195–201 и Selectel S3/client/API/ownSQL228–229 | Native S3 backup/restore/live UI/retention; provider/container/Gitea/MaxMind jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
|
||||
| Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP сценарии и точные границы записаны | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/policy/path-length и длительные переходы; BFD-only gate гарантией не стал |
|
||||
| Общий UX, доступность и производительность | Полная UI192 исторически; latest backend25/UI52, scoped contrast/live218 и keyboard206 | Свежая UI226 принята в записанных границах; профильный performance и ручная accessibility/screen-reader приёмка; scoped axe не полный WCAG |
|
||||
| Границы выпуска | План/доказательства/датированные блоки сохранены; коммиты локальные | Определить требуемые конфигурации и принять результат в этих границах; невыполненные варианты остаются явными ограничениями |
|
||||
@@ -35,7 +35,7 @@ Portal offline JWT действует доexp после logout/role change; э
|
||||
| BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93; basic native IPv6 eBGP/AFI/NLRI/Ping/withdrawal/API/UI155; native IPv6 BGP/BFD scoped withdrawal/recovery160; private4-byte ASN/as4/API/UI162 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, basic BFDv6 принят160; IPv6 outer/public WAN/scale. Два логических пути используют тот же public WAN; physical redundancy не принята |
|
||||
| Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята |
|
||||
| Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
|
||||
| Portal/интеграции | Реальный Portal1.3.1/issuer/login/reader privacy195–196, expiry/reissue/role change/logout boundaries198, context/return_to199; actual Telegram delivery201 | Offline access JWT не отзывается logout/ролью мгновенно доexp; public IPv6 WAN, licensed MaxMind/S3/container/certificate/Gitea jobs требуют отдельных endpoints/аккаунтов. Клиентские ОС/scale отдельно |
|
||||
| Portal/интеграции | Реальный Portal1.3.1/issuer/login/reader privacy195–196, expiry/reissue/role change/logout boundaries198, context/return_to199; actual Telegram delivery201 | Offline access JWT не отзывается logout/ролью мгновенно доexp; public IPv6 WAN, Selectel S3 client/API228–229 принят; native S3 backup/restore/live UI/retention открыты. Licensed MaxMind/container/certificate/Gitea jobs требуют отдельных endpoints/аккаунтов. Клиентские ОС/scale отдельно |
|
||||
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; OSPF/BFD boundary/warning153 passed; OSPFv3 routes154 accepted in recorded bounds; BGP IPv6 basic155 passed; bigint ID/SQL guards156 passed; общая UI1260/context221/backend24 regression157 passed; IPv6 BFD correlation158 profile/deployed passed; native OSPFv3/BFDv6 boundary/recovery159 passed; BGP IPv6/BFD withdrawal/recovery160 passed; selected BGP/alert unknown guards161 replay/profiles/deployed passed (SQL stability skipped); private4-byte ASN162 native/API/UI passed; duplicate BGP alert keys163 replay/profiles/deployed passed; nullable selected BGP164 replay/profiles/API/UI passed; collector165 parallel/current guards/read-only PG passed; positive partial/error SQL166/full24 with PG passed (optional network SQL not repeated); GRE/BGP freshness167/SQL8 passed; other source audit168 выявил identity/disabled/freshness gaps; локальный server/traffic identity guard169 passed без SQL/deploy, source/per-probe/freshness170/ownSQL16/compiled1008/deployed passed; source diagnostics171/42E2E/ownSQL metadata/live2 passed; monitoring history172/ownSQL26/compiled1020/deployed passed; Ping known/error173/ownHTTP-SQL8/85uniqueE2E/native4/4/deployed passed; traffic confidence174 baseline reproduced/local guard passed; owned SQL9/9358ms/deploy175/1024compiled/live smoke passed; legacy history/provenance open; compound RTT176 local/native replay2 passed, SQL10/deploy177/1024compiled/live smoke passed; history178/legacy provenance/current TTL/manual truth/SQL9+14/35unique E2E/native GET/deployed passed; live179 complete/disable-config/bounded fallback/ownSQL10/nativeSSE2/liveUI2 passed; volume180 exact/unit marker/ownSQL6/18E2E/API/liveUI/deployed passed; binding status181 native/ownSQL9/8E2E/deployed passed; peer atomicity182 ownSQL3/native/API/UI passed; peer failure warning183 ownSQL2/4E2E/deployed passed; inactive history184 ownSQL2/deployed passed; gap185/identity186/restore187/wave188/sourceguard189/confirmed peak190 passed; aggregate peaks191, request dedupe193, cross-process lock194/200, full regression192 (1286 unique E2E и25-й профиль privacy196 scoped), Portal195–199/Telegram201 passed; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
|
||||
|
||||
Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение.
|
||||
@@ -1573,3 +1573,7 @@ Backend25/UI52, disabled33/months5 и оба IPv6 UDP/SQL worker режима п
|
||||
## 12.5.228 — S3 runner подготовлен, реальная проверка ожидается (2026-10-14)
|
||||
|
||||
11 safety/dry-run checks passed, network0. Helper использует compiled S3 client, harmless own UUID prefix2 objects, HTTPS/explicit live guards и cleanup только attempted keys. Application jobs/native restore/versioned retention не приняты. Требуются endpoint/region/bucket/keys/path-style. [Guard протокол](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json).
|
||||
|
||||
## 12.5.228–229 — Selectel S3/client/API/owned SQL приняты (2026-10-14)
|
||||
|
||||
2 roundtrip objects,12 unique API scenarios, synthetic native export/CHR contacts0. Own DB/roles/catalog/localfiles/currentobjects cleaned. Versioning Enabled:8versions+8markers removed,3 own prefixes remaining0; bucket configuration unchanged. Native backup/restore/live UI/смена storage origin/retention semantics остаются230. Private env удалены, secrets не в published files. [API](ux-ui/acceptance/s3-application229.json), [version cleanup](ux-ui/acceptance/s3-version-cleanup229.json).
|
||||
+17
-5
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -4065,11 +4065,23 @@ VXLAN mobile layout упал UNKNOWN при записи tracked docs/ux-ui/scre
|
||||
Runtime unchanged: backend ux-regression222/frontend ux-routing218, новые production build/deploy не требовались для test artifact path. Android227 принят по human confirmation/cleanup16 в соседней записи. Далее228 — тестовый S3 с выделенным bucket/prefix после получения endpoint/region/keys. Остальные группы матрицы и причина native intermittent401/500 остаются открытыми; этап12.5 не завершён.
|
||||
|
||||
|
||||
## 12.5.228 — подготовка безопасной реальной S3-проверки (2026-10-14)
|
||||
## 12.5.228 — реальные операции Selectel S3 (2026-10-14)
|
||||
|
||||
Пользователь предложил тестовый S3; endpoint/region/bucket/access/secret и path-style ещё не получены. Подготовлен backend/scripts/acceptance/s3-roundtrip.mjs для запуска в compiled test backend image. Он вызывает существующий production S3 client, использует отдельный mmapp-acceptance/<UUID>/, проверяет пустоту prefix до записи, сохраняет planned/attempted keys до каждого PUT и удаляет только собственные attempted keys, включая неопределённый результат PUT. Тела — безвредные synthetic .rsc comments; native config/backup/credential exports не загружаются.
|
||||
После11 safety/dry-run guards пользователь предоставил тестовый Selectel S3: HTTPS s3.ru-1.storage.selcloud.ru:443, region ru-1, bucket mikrotik-test-s3, virtual-hosted (forcePathStyle=false). Завершающий слеш в Secret key подтверждён как форматирование и не использован. Credentials сохранялись только в ignored/private env, не в коде/Git/публичных отчётах; временные env после всей проверки удалены локально и на Debian.
|
||||
|
||||
Запуск требует HTTPS без userinfo/query/hash, явного owned-scope=yes, region/path-style и live RUN=confirmed. Нет TLS bypass или передачи credentials в вывод. Предусмотрены PUT→GET+SHA256, exact listing2 keys, Delete и readback текущих объектов; report содержит acknowledgement/cleanup failures отдельно. Version history/delete markers/retention, application backup jobs/SQL/UI/native restore в этот helper НЕ входят. Реальную S3-приёмку по его dry-run не объявлять.
|
||||
Runner вызвал существующий compiled production S3 client в отдельном read-only/cap-drop container. В собственном mmapp-acceptance/<UUID>/ выполнены empty-prefix preflight,2 PUT→GET+SHA256 equality и exact listing2. Два Delete подтверждены; текущих объектов0. Тела — harmless synthetic .rsc comments, device configuration exports0. TLS verification сохранена. [Реальный roundtrip](ux-ui/acceptance/s3-real228.json), [guards11](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json).
|
||||
|
||||
11 локальных guard/dry-run cases passed: HTTP, URL credentials/query/invalid URL, отсутствующие scope/bucket/credentials/region, invalid path-style и отсутствующее live confirmation отклонены; fake secret/access markers отсутствуют в stdout/stderr. Dry-run0 network requests. Syntax/diff check passed. [Guard протокол](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json). Подготовка runner закончена; реальное выполнение228 и расширенная application S3 приёмка ожидают параметров пользователя. Backend ux-regression222/frontend ux-routing218 сохранены. Этап12.5 открыт.
|
||||
В229 обнаружено enabled versioning: ordinary Delete создаёт delete marker. После API проверок удалены версии/markers только трёх собственных UUID prefixes; initial228 prefix2versions+2markers очищен отдельно. Bucket configuration writes0. Version history/retention поведения самого приложения этим не принимаются: очистка acceptance fixture не меняет production deletion semantics. Далее229 — compiled backup API/SQL с real S3 и synthetic native export.
|
||||
|
||||
## 12.5.229 — API резервных копий с real S3, owned SQL и очистка версий (2026-10-14)
|
||||
|
||||
12 unique сценариев compiled createBackupsRoutes/backup-service + Selectel S3 + отдельная PostgreSQL mm_accept_166_<timestamp>. Role NOSUPERUSER/NOCREATEDB/NOCREATEROLE/NOBYPASSRLS подтверждена до bootstrap; main DSN/данные не копировались. RouterOS export заменён только HTTP fixture на container loopback, возвращающим harmless .rsc comment: actual fixture exports3/run, CHR contacts0, native restore0. Приложение/production images не менялись.
|
||||
|
||||
Приняты: storage PUT без secret disclosure; real HeadBucket test receipt; async create both; повтор requestId без второй выгрузки; download точных bytes; invalid credential test400 с сохранением settings; download fallback local при отказе S3; upload failure сохраняет local backup/uploadError; s3-only удаляет local copy и скачивается remote; sync/import/idempotent repeat; catalog/imported download; DELETE204/current-object cleanup/missing404. Сохраняемый в репо helper дополнен explicit owned/live/vHosted guards; свежий повтор тех же12 passed, не24 unique. UI/RBAC/native export+restore этим не объявляются повторёнными.
|
||||
|
||||
Обе own SQL DB/roles/containers удалены и отсутствие подтверждено trap. Catalog rows0/local files0/current own S3 objects0. GetBucketVersioning200 выявил Enabled. Для трёх наших UUID prefixes выполнена строгая проверка allowed keys и DeleteObject с точными VersionId:8versions+8delete markers удалены, version readback0 всех трёх. Чужие prefixes/versions не затрагивались, bucket settings не менялись. Credentials отсутствуют в published scripts/reports, private env удалены после cleanup.
|
||||
|
||||
[API12](ux-ui/acceptance/s3-application229.json), [initial12](ux-ui/acceptance/s3-application229-first.json), [versioning](ux-ui/acceptance/s3-versioning229.json), [cleanup16versions/markers](ux-ui/acceptance/s3-version-cleanup229.json). Reproducible helpers: backend/scripts/acceptance/s3-backups-api.mjs, run-s3-backups-api.sh, s3-owned-versions-cleanup.mjs. Wrapper на Debian ожидает private env /opt/mmapp-test/artifacts/s3-228-private.env и mount s3-229; version helper получает curated owned-prefixes-public.json из наших reports, не произвольный namespace.
|
||||
|
||||
Следующий230 — real S3 с native backup/ограниченным restore и live UI в согласованном scope; отдельно проверить смену bucket/endpoint при имеющемся каталоге и retention/version semantics. Остальные группы матрицы остаются открытыми. Runtime backend ux-regression222/frontend ux-routing218. Этап12.5 не завершён.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-10
|
||||
|
||||
Актуальное продолжение 2026-10-14: подготовлен S3 runner228,11 safety/dry-run checks passed, network requests0; реальная S3 приёмка ожидает endpoint/region/bucket/keys/path-style. UI226 —1366 unique accepted со scoped recovery2;364 исходных screenshots сохранены. Android227 human full-tunnel/reconnect accepted,16 own objects удалены, исходные поля13 коллекций сохранены, оба CHR доступны/пароли прежние. Backend ux-regression222/frontend ux-routing218; этап12.5 открыт.
|
||||
Актуальное продолжение 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 открыт.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -2374,3 +2374,7 @@ Runtime backend ux-regression222/frontend ux-routing218. Latest backend25/UI52
|
||||
## 12.5.228 — S3 runner подготовлен, реальная проверка ожидается (2026-10-14)
|
||||
|
||||
11 safety/dry-run checks passed, network0. Helper использует compiled S3 client, harmless own UUID prefix2 objects, HTTPS/explicit live guards и cleanup только attempted keys. Application jobs/native restore/versioned retention не приняты. Требуются endpoint/region/bucket/keys/path-style. [Guard протокол](ux-ui/acceptance/s3-guard-preflight-2026-10-14.json).
|
||||
|
||||
## 12.5.228–229 — Selectel S3/client/API/owned SQL приняты (2026-10-14)
|
||||
|
||||
2 roundtrip objects,12 unique API scenarios, synthetic native export/CHR contacts0. Own DB/roles/catalog/localfiles/currentobjects cleaned. Versioning Enabled:8versions+8markers removed,3 own prefixes remaining0; bucket configuration unchanged. Native backup/restore/live UI/смена storage origin/retention semantics остаются230. Private env удалены, secrets не в published files. [API](ux-ui/acceptance/s3-application229.json), [version cleanup](ux-ui/acceptance/s3-version-cleanup229.json).
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.229",
|
||||
"scope": "Compiled backup API + owned PostgreSQL + real Selectel S3; synthetic RouterOS HTTP export fixture, no CHR contacts",
|
||||
"prefix": "mmapp-acceptance/33808c8a-93ae-45a8-ac1a-eb7e9430e4d9",
|
||||
"checks": [
|
||||
{
|
||||
"name": "empty-prefix-preflight",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "settings-save-without-secret-disclosure",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "real-headbucket-test-receipt",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "async-create-both-and-request-id-no-repeat",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "download-exact-bytes",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "denied-credentials-test-preserves-settings",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "download-local-fallback-during-s3-denial",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "upload-denial-keeps-local-backup-and-error",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "s3-only-removes-local-copy-and-downloads-remote",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "sync-import-and-idempotent-repeat",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "catalog-and-imported-object-download",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "delete-catalog-and-current-remote-objects",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"cleanup": {
|
||||
"currentObjectsRemaining": 0,
|
||||
"catalogRowsRemaining": 0,
|
||||
"localFilesRemaining": 0
|
||||
},
|
||||
"nativeChrContacts": 0,
|
||||
"nativeRestoreCalls": 0,
|
||||
"fixtureExportCalls": 3,
|
||||
"completedAt": "2026-10-14T02:46:27.754Z",
|
||||
"bounds": [
|
||||
"Native export is HTTP fixture; no real device backup/restore or UI repeated",
|
||||
"RBAC not repeated in this standalone injected API",
|
||||
"S3 current-object deletion only; retained versions/retention not inspected"
|
||||
],
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.229",
|
||||
"scope": "Compiled backup API + owned PostgreSQL + real Selectel S3; synthetic RouterOS HTTP export fixture, no CHR contacts",
|
||||
"prefix": "mmapp-acceptance/1c4ed929-296f-458b-ba57-9ffeae1f44e4",
|
||||
"checks": [
|
||||
{
|
||||
"name": "empty-prefix-preflight",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "settings-save-without-secret-disclosure",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "real-headbucket-test-receipt",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "async-create-both-and-request-id-no-repeat",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "download-exact-bytes",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "denied-credentials-test-preserves-settings",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "download-local-fallback-during-s3-denial",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "upload-denial-keeps-local-backup-and-error",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "s3-only-removes-local-copy-and-downloads-remote",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "sync-import-and-idempotent-repeat",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "catalog-and-imported-object-download",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "delete-catalog-and-current-remote-objects",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"cleanup": {
|
||||
"currentObjectsRemaining": 0,
|
||||
"catalogRowsRemaining": 0,
|
||||
"localFilesRemaining": 0
|
||||
},
|
||||
"nativeChrContacts": 0,
|
||||
"nativeRestoreCalls": 0,
|
||||
"fixtureExportCalls": 3,
|
||||
"completedAt": "2026-10-14T02:51:42.670Z",
|
||||
"bounds": [
|
||||
"Native export is HTTP fixture; no real device backup/restore or UI repeated",
|
||||
"RBAC not repeated in this standalone injected API",
|
||||
"S3 current-object deletion only; retained versions/retention not inspected"
|
||||
],
|
||||
"ownedDatabaseAndRoleRemoved": true,
|
||||
"provider": {
|
||||
"endpoint": "https://s3.ru-1.storage.selcloud.ru",
|
||||
"region": "ru-1",
|
||||
"bucket": "mikrotik-test-s3",
|
||||
"addressing": "virtual-hosted",
|
||||
"tlsVerification": true
|
||||
},
|
||||
"uniqueApiScenarios": 12,
|
||||
"firstCoreAttemptPassed": true,
|
||||
"repeatReason": "Final published helper adds explicit ownership/live/path-style guards; same12 cases repeated, not24 unique",
|
||||
"versionedCleanup": {
|
||||
"versioning": "Enabled",
|
||||
"versionsRemoved": 8,
|
||||
"deleteMarkersRemoved": 8,
|
||||
"remaining": 0,
|
||||
"bucketConfigurationWrites": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"startedAt": "2026-10-14T02:41:23.800Z",
|
||||
"scope": "Compiled application S3 client; harmless synthetic bodies; dedicated UUID prefix",
|
||||
"prefix": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c",
|
||||
"passed": true,
|
||||
"checks": [
|
||||
{
|
||||
"operation": "empty-prefix-preflight",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"operation": "put-get-content",
|
||||
"key": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-1.rsc",
|
||||
"bytes": 112,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"operation": "put-get-content",
|
||||
"key": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-2.rsc",
|
||||
"bytes": 112,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"operation": "list-exact-owned-keys",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
{
|
||||
"key": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-1.rsc",
|
||||
"acknowledged": true
|
||||
},
|
||||
{
|
||||
"key": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-2.rsc",
|
||||
"acknowledged": true
|
||||
}
|
||||
],
|
||||
"deviceConfigurationUploads": 0,
|
||||
"bounds": [
|
||||
"No application backup jobs, SQL catalog, native restore or UI acceptance",
|
||||
"Cleanup covers current objects; retained versions/delete markers/retention policies are not inspected"
|
||||
],
|
||||
"plannedKeys": [
|
||||
"mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-1.rsc",
|
||||
"mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-2.rsc"
|
||||
],
|
||||
"attemptedKeys": [
|
||||
"mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-1.rsc",
|
||||
"mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c/probe-2.rsc"
|
||||
],
|
||||
"currentOwnedObjectsRemaining": 0,
|
||||
"completedAt": "2026-10-14T02:41:24.497Z",
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.228",
|
||||
"provider": {
|
||||
"endpoint": "https://s3.ru-1.storage.selcloud.ru",
|
||||
"region": "ru-1",
|
||||
"bucket": "mikrotik-test-s3",
|
||||
"addressing": "virtual-hosted",
|
||||
"tlsVerification": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"at": "2026-10-14T02:54:41.959Z",
|
||||
"bucketConfigurationWrites": 0,
|
||||
"prefixes": [
|
||||
{
|
||||
"prefix": "mmapp-acceptance/238b046e-dd1a-4a7d-8bec-62b67e7b411c",
|
||||
"versionsBefore": 2,
|
||||
"deleteMarkersBefore": 2,
|
||||
"removed": 4,
|
||||
"versionsAndMarkersRemaining": 0
|
||||
},
|
||||
{
|
||||
"prefix": "mmapp-acceptance/33808c8a-93ae-45a8-ac1a-eb7e9430e4d9",
|
||||
"versionsBefore": 3,
|
||||
"deleteMarkersBefore": 3,
|
||||
"removed": 6,
|
||||
"versionsAndMarkersRemaining": 0
|
||||
},
|
||||
{
|
||||
"prefix": "mmapp-acceptance/1c4ed929-296f-458b-ba57-9ffeae1f44e4",
|
||||
"versionsBefore": 3,
|
||||
"deleteMarkersBefore": 3,
|
||||
"removed": 6,
|
||||
"versionsAndMarkersRemaining": 0
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"at": "2026-10-14T02:53:27.486Z",
|
||||
"httpStatus": 200,
|
||||
"status": "Enabled",
|
||||
"bucketConfigurationWrites": 0
|
||||
}
|
||||
Reference in new issue
Block a user