Specs: a migration tool, with rollback as a path rather than an appendix

INBUXA's cutover is the first run of something other operators will want:
an existing Stalwart server becoming an INBUXA one with nothing re-entered
and nothing re-issued. Accounts, passwords, app passwords, OAuth sessions,
aliases, tenants, DNS records and provider settings, certificates and ACME
state, Sieve scripts, the queue and the mail all live in the store, so a
migration that copies the store carries them.

Offered beside the fresh-install workflow, which has different questions to
ask, so §6.1 now names both.

It rolls back, which is where it parts company with stalwart-migrator:
that one upgrades in place and says outright it cannot undo a migration.
This one never writes to what it migrates from, so going back is stopping
one service and starting another. Rollback is automatic when verification
fails, available on demand while the old install stands, honest about the
mail that stays behind, and never points the old server at the store the
fork has written.

Every phase is timed, and the number to advertise is the downtime, phases
2 to 7, not the total that preflight and the copy dominate. The report
writes both as JSON so a release note quotes something measured.
This commit is contained in:
2026-09-19 21:34:11 -07:00
parent 92aed3df21
commit 7d468ad22e
3 changed files with 134 additions and 1 deletions
+5
View File
@@ -437,6 +437,11 @@ Where each of the web interface's jobs goes:
### 6.1 The installer
Two workflows, and they differ (John, 2026-09-19): a **fresh installation**,
below, and a **migration** of an existing Stalwart server, which keeps its
accounts, passwords, DNS records and certificates and is specified in
`migration.md`. INBUXA's own cutover is the migration tool's first run.
ihasmail-oneshot is the starting point: a Go binary using only the standard
library, which drives `docker compose`. Its commands and options carry over.