Divvent

For Divvent’s own team. It is generated from the operations document in our repository, which is the one to edit. If you use Divvent, the help centre is for you.

3b. A customer's restore, and when one needs an operator

Customers back up and restore from the portal (Settings → Backups, docs/BACKUPS.md). The portal writes a row; backups.yml's pass does the work in the company's own account, with the company's own credential opened as a deploy opens it:

divvent backups --env staging --runner <run id>

A restore goes requested → staging → staged → approved → promoting → promoted, or discarding → discarded, or failed, each step a restore.* audit row naming the runner:

When a person is needed, and what to do:

The row saysWhat happenedWhat to do
failed, "the runner promoting this restore stopped answering…"a runner died mid-promote (a cancelled job, a lost runner); the control plane never retries a promoteopen the company's database in its Cloudflare account, compare it with the undo_bookmark on the row; if it is half-loaded, restore the bookmark (POST /d1/database/<id>/time_travel/restore?bookmark=<undo>) — the same call divvent deploy --rollback --restore makes — and tell the customer to stage it again
failed, "holds N rows, more than a self-service restore compares"a table over RESTORE_ROW_LIMIT (200,000)restore by hand from the catalogued key: divvent snapshot restore's machinery, with the customer's written approval, recorded on the account
failed, "(DeployError …)" or "(Error)"something below us refused: the message is not recorded, because a database's error can quote a valueread the job's log for the step; nothing of the database is in it either
a ---restore-copy left in an accounta runner died mid-stagethe next stage or discard removes it — once its own ledger says it is that target's copy, never by name alone