NoteBugsDocs

Features

Backup and restore

A `.zip` with the database and the files, made by a job and restored selectively.

Exporting is a job, not a download

A .zip with the whole volume does not fit in the time of one request. So the route schedules the generation and returns the state; the file is downloaded later, once the status reaches READY.

StatusWhat it means
IDLEnothing has been asked for
PENDING · RUNNINGthe generation is queued or under way
READYthe .zip is in the container, ready to download
SENTthe .zip went to the bucket, which is why the local download refuses
FAILEDsomething went wrong; the error field says what

Here or in the bucket

The .zip that stays in the container has a fixed name, one copy and an expiry. The one that goes to the bucket has a timestamped name, accumulates and never expires: it is the history, and it is where a remote restore reads from.

Automatic backup

Daily, weekly or by cron expression, in the container's timezone. The schedule is stored in Settings and travels as a whole object: “weekly with no day” and “cron with no expression” have no next occurrence.

The next run is not configuration

It is computed by the process's timer, and read from /api/backup/schedule, not from Settings.

Restoring: inspect first

  1. 1Inspect reads the .zip and answers what a restore *would* do: one block per workspace, with the count of each scope. It writes no byte.
  2. 2Select what comes back, per workspace: only the cards, only the projects, everything.
  3. 3Import applies it. With no selection, it restores everything, except accounts, which take an explicit ask.
  • The file can come from disk (file) or from the bucket (remote), never both: that is 400.
  • A remote source loosens no validation: from there down there are only bytes.
  • Scopes depend on scopes: epics requires projects, comments requires cards.