Skip to content

Резервные копии: UX и визуальная спецификация ​

Статус: проект интерфейса, 2026-09-26; первый экран консоли реализован 2026-10-02 (см. ниже). Backend B2 реализован (2026-10-02, ADR 0056): консоль строится на /api/v1/backup через SDK client.backup — статус, план с CAS, задания, точки, закрепление, preview/apply retention и предупреждения с машинными кодами. Реализовать поверх BACKUP_RECOVERY, не добавляя в рабочую консоль фиктивные «успешные» операции.

Реализовано в консоли (B2) ​

Раздел «Резервные копии / Backups» (#/backups, поведение и приёмка — CONSOLE_UX) работает только с настоящими API и агентом:

  • одна страница вместо трёх представлений: сводка (состояние по предупреждениям, возраст от T, следующий запуск в местном времени и UTC, агент, свободное место vault), предупреждения с действием оператора в подсказке, текущее задание, точки, задания и план;
  • «Создать копию сейчас», «Проверить полностью», закрепление, «Применить хранение» после preview «удаляются/остаются с причинами» в окне подтверждения;
  • план: включение, время, явный IANA-пояс (пояс браузера только предлагается), хранение 7/4/6 по умолчанию, CAS с перечитыванием при конфликте и отметкой полей;
  • опрос только при открытом задании и видимом экране, обновление строк на месте, карточки точек и заданий на 320–390 px;
  • признак шифрования vault (ADR 0070): «зашифрован»/«не зашифрован» по последнему heartbeat агента; для открытого vault — подсказка создать зашифрованный, не предупреждение. Шифрование, recovery kit и слоты ключей (vault init, vault key …) — команды оператора, в консоли их нет;
  • раздел скрыт без backup.read, изменения — только с backup.manage; restore остаётся командой оператора (строка с подсказкой, без кнопки).

Ещё не реализовано и в консоли не изображается: мастер первого плана (vault задаётся оператором через ARKVORY_BACKUP_VAULT и создаётся командой vault init; проверки доступа из консоли нет), несколько vault и S3, выбор дней недели, ближайшие 3 запуска, лимит сети и advanced-настройки, пауза/отмена задания, скорость/ETA и занятое на source место, детали точки (release/schema, состав, отчёт), меню удаления отдельной точки, мастер восстановления, preflight, restore drill и план переключения (B4), вход «Восстановить из копии» в Arkvory Setup. Строка «Пробное восстановление ещё не выполнялось» не показывается, пока drill не существует.

Основной сценарий ​

После первичной настройки пользователь нажимает «Создать копию». Arkvory сам ставит job, показывает этап и после закрытия страницы продолжает работу. При возвращении отображается тот же job. Восстановление имеет несколько осмысленных шагов: выбрать точку, проверить новую цель, восстановить и проверить. Переключение production выполняется отдельно.

Первый запуск не может честно быть без настройки: нужно выбрать независимое место хранения, проверить доступ, сохранить recovery key и задать расписание. Эти четыре решения мастер объясняет обычными словами; пути, engine flags, dump arguments и SQL в основной форме не показываются.

Информационная архитектура ​

В консоли — самостоятельный раздел «Резервные копии / Backups», не вкладка last-N очистки билдов. В верхней строке — source instance, его доступность, общий выбор языка/темы. Внутри три представления: Копии, Планы, Восстановление. Vault и ключи открываются из плана, диагностика — из конкретного job. Не помещать все настройки на одну страницу.

Главная содержит:

  • Последнюю завершённую точку с датой состояния T, возрастом и назначением. Если копий нет, вместо зелёной плашки — «Резервирование ещё не настроено» и «Настроить копии».
  • Отдельный результат проверки bytes и отдельный результат последнего restore drill. Нельзя объединять их в «Защищено на 100%».
  • Текущий job, если он есть: этап, обработанный объём/всего, новые bytes назначения, скорость/ETA только при наличии измерений, допустимые сейчас действия.
  • Список последних точек: T, vault, логический объём, завершение, степень проверки, pin/retention, меню действий. Детали содержат release/schema, состав, исключённые pending uploads и отчёт.
  • Одна главная кнопка «Создать копию». «Восстановить» доступно у выбранной завершённой точки; delete/prune — в отдельном меню с preview.

При нескольких vault статус каждого независим: успешный NAS не делает устаревший S3 зелёным. Точка «Завершена, проверка не выполнялась» остаётся доступной для preflight/restore, но не получает значок подтверждённого восстановления. Повреждённая точка блокирует штатный restore с объяснением причины.

Мастер первого плана ​

ШагОсновные поляПроверка и результат
1. Где хранитьНазвание; диск/NAS либо S3; путь mount либо endpoint/bucket/prefix/region; доступ через защищённый вводProbe от service identity на source. Показать место/права/identity и домен отказа. Секрет после сохранения не возвращается.
2. Доступ при аварииEncryption/recovery key, «Сохранить набор восстановления», проверка повторного открытия vaultНе активировать unattended backup, пока recovery access не проверен. Набор не должен остаться только на source.
3. Когда и сколькоЕжедневно/по выбранным дням/вручную; время и timezone; retention template; лимит сетиБлижайшие 3 запуска, timezone/UTC, retain preview. Advanced: I/O/concurrency/cache/hold deadline.
4. ИтогSource → vault, расписание, хранение, проверка, предупреждения, оценка первого объёма«Сохранить и создать первую копию». При недоступном vault предложить сохранить выключенный план; не показывать его активным.

Редактирование: отдельная сохранённая revision, предупреждение о несохранённых полях, серверный CAS. Фоновое обновление статуса не перезаписывает форму. Часовой пояс браузера не меняет тихо время существующего плана. Повторная проверка vault обязательна после изменения адреса/credential.

Не показывать пользовательские absolute paths другим ролям. Нельзя выдавать локальный file picker браузера за выбор каталога на удалённом сервере. Для NAS — зарегистрированный серверный mount и проверяемый относительный каталог; для advanced пути нужны повышенные права и server-side validation.

Текущая операция ​

Этапы: Подготовка → Снимок каталога → Передача → Проверка → Завершение. Процент существует только внутри этапа с измеримым знаменателем. В подготовке — название действия и elapsed time, без выдуманных «97%». Большой размер копии не превращается в долго зависший общий progress bar.

«Пауза» доступна только после durable capture; рядом — срок удержания исходных данных. Pause реализуется checkpoint + остановка/возобновление поддерживаемой engine-операции, а не произвольная заморозка процесса. При close UI job продолжается. «Отменить» означает отмену задания, не удаление предыдущих копий. При неопределённом исходе — «Проверяем результат на сервере», затем interrupted/нужна проверка, а не ложное success.

Во время длительного backup показывать удерживаемое для него место source и влияние выбранного бюджета. Настройка лимита применяется на поддерживаемой безопасной границе; UI сообщает, если потребуется перезапуск передачи. Нельзя показывать как работающий slider, который backend игнорирует.

Мастер восстановления ​

ШагЧто видит пользовательГлавная кнопка
1. ТочкаДанные по состоянию на T; завершено в X; версия; состав; проверки; какая история после T потеряется«Выбрать цель»
2. Новая цельНовый сервер/зарегистрированный target, новый root/volume, нужное место, сеть изолирована«Проверить восстановление»
3. Результат preflightСовместимость, ключ, состав, место, пустая цель, отключение старых ключей/расписаний; ошибки с конкретным действием«Восстановить в новую цель» либо disabled с причиной
4. Работа и итогЭтапы/объёмы; отчёт ссылок/ACL/bytes/health; «Проверен, не опубликован»«Открыть изолированную консоль»

Preflight ничего не перезаписывает; его plan устаревает после изменения копии/цели/версии. Перед start backend снова проверяет identity, свободное место, права и пустоту цели. Нельзя превращать название hostname в команду shell.

Из готовой цели доступен отдельный «План переключения»: потеря данных относительно T, адрес, остановка/fencing старого writer, maintenance window, внешняя проверка. Последний destructive шаг требует актуального плана и явного подтверждения имени цели. Отказ от переключения оставляет исходный сервис работающим. Старый и новый writers не должны одновременно принимать production mutations.

Аварийный вход из локального Arkvory Setup: «Установить новый» / «Восстановить из копии». Для восстановления source API не нужен. Мастер сначала открывает vault и проверяет recovery key, затем подбирает совместимый доверенный runtime и цель. Автоматическая авторизация старыми пользователями/ключами отсутствует до завершения security recovery.

Визуальный язык ​

Сохранять визуальную систему Arkvory: спокойные поверхности, чёткая иерархия, аккуратные границы, один акцентный primary action. Без огромного «показателя надёжности», декоративных графиков и ряда бессмысленных KPI. Плотность таблиц настраивается, размеры управляющих элементов остаются удобными.

Использовать существующие tokens консоли, расширяя семантические группы: backup.surface, backup.border, backup.text.secondary, backup.status.success/warning/error, backup.progress.track/fill, backup.radius.panel/control, backup.spacing.*, backup.motion.*. Фактические имена согласовать с tokens.css при реализации; hardcoded palette внутри компонента запрещена. Светлая/тёмная схемы равноправны, тёмная не получается инверсией белой.

Статус выражается текстом и значком, не только цветом. Ссылки и destructive actions различаются. На 320–390px таблица переходит в карточки точек, summary — в одну колонку; restore шаги не образуют горизонтальный скролл. Поля не меньше 16px на touch, цели касания около 44px. Масштаб браузера 200% не скрывает кнопки.

Keyboard и screen reader: семантические controls, видимый focus, понятные labels ошибок, сохранение фокуса при обновлении job. Не заменять весь экран при каждом polling. Live region объявляет смену этапа и итог, а не каждый переданный MiB. Reduced motion отключает необязательные анимации. Закрытие панели возвращает focus к инициатору.

RU/EN: все строки и plurals в существующей i18n-системе, время через locale + явный zone, байты одинаковых единиц в одном сравнении. Не склеивать предложения из фрагментов. Увиденное пользователем 4 TB нельзя сравнивать с 4 TiB без корректного пересчёта.

Состояния, обязательные для дизайна и тестов ​

СостояниеОтображение/действие
Нет плана/копииСпокойный onboarding с настройкой; нет зелёного статуса.
Первая копия идёт«Первая точка ещё не готова» + прогресс; исходный сервис работает.
Есть завершённая, нет drillТочная дата и «Пробное восстановление ещё не выполнялось».
Пропущен запуск/просрочена точкаВозраст T, проблема расписания/доступа, «Посмотреть причину».
Vault недоступенСохранённый каталог помечен устаревшим; restore/start не обещают доступность.
Недостаточно местаНужно/доступно/запас; start заблокирован, настройки не потеряны.
Неверный recovery keyОтдельная ошибка ключа, без повторного создания vault поверх существующего.
ПовреждениеКакая глубина проверки выявила сбой; предыдущая пригодная точка.
Нет правRead-only либо раздел скрыт по capability; подсказка запрашиваемого права без раскрытия чужих копий.
Browser reconnectТот же job и сохранённая позиция; никаких повторных запусков из-за refresh.
Restore готов«Проверен, не опубликован»; production URL ещё не изменён.

Интерактивный дизайн использует только демонстрационные данные и явно показывает «Прототип · операции не выполняются». Его кнопки позволяют оценить переходы, layout и ошибки; их наличие не означает готовность API, backup agent или engine. При реализации все эти состояния проверяются через общий browser gate и настоящие API/SDK scenarios.

Arkvory · ProAnimaStudio