Specs: point a stock ihasmail at the migrated server afterwards
Asked for by John, 2026-09-19. Public ihasmail is Stalwart-facing and knows nothing about INBUXA, so running an unmodified one against the migrated server checks something the fork's own suites cannot: that a client written for upstream still works. Each difference it finds is one of two things, and the point is to say which: a regression against upstream's contract, which the fork's tests would not catch because they test the fork; or a feature that now expects INBUXA's own front ends, which belongs in the contract and the release notes rather than in a user's surprise. After mail is flowing, not as a gate. It informs the contract; it doesn't block a cutover.
This commit is contained in:
+26
-1
@@ -4,7 +4,9 @@ Status: draft, 2026-09-19. Nothing here has been rehearsed yet.
|
|||||||
|
|
||||||
SPEC.md §7 step 4. This run is also the first run of the migration tool
|
SPEC.md §7 step 4. This run is also the first run of the migration tool
|
||||||
INBUXA will ship (`migration.md`): what is done by hand here is what that
|
INBUXA will ship (`migration.md`): what is done by hand here is what that
|
||||||
tool automates, including its rollback. Steps 1 to 3 are met: the fork builds and its suites pass
|
tool automates, including its rollback.
|
||||||
|
|
||||||
|
Steps 1 to 3 are met: the fork builds and its suites pass
|
||||||
(`container-tests.md`), and all eight compat tests pass against a copy of
|
(`container-tests.md`), and all eight compat tests pass against a copy of
|
||||||
INBUXA's store (`compat-tests.md`). What is left is running it as the mail
|
INBUXA's store (`compat-tests.md`). What is left is running it as the mail
|
||||||
server.
|
server.
|
||||||
@@ -143,6 +145,29 @@ never been checked, and checking it is worth an hour beforehand rather than
|
|||||||
an argument at 2am. Until it is checked, treat the fork's store as
|
an argument at 2am. Until it is checked, treat the fork's store as
|
||||||
forward-only.
|
forward-only.
|
||||||
|
|
||||||
|
## After: stock ihasmail against the fork
|
||||||
|
|
||||||
|
Once the migration is done, point an **unmodified public ihasmail**
|
||||||
|
container at the new server — it can run on a laptop, since it talks JMAP
|
||||||
|
and OAuth over the network (SPEC.md §5.3) — and work through what it can
|
||||||
|
do. It needs an OAuth client it is allowed to use and a reachable URL for
|
||||||
|
the server, nothing else.
|
||||||
|
|
||||||
|
This is the one check that comes from outside the fork's own world. Public
|
||||||
|
ihasmail is Stalwart-facing by design (SPEC.md §5) and knows nothing about
|
||||||
|
INBUXA, so whatever it can no longer do is one of two things, and both are
|
||||||
|
worth knowing:
|
||||||
|
|
||||||
|
- a **regression**: the fork broke something upstream's clients rely on,
|
||||||
|
which the fork's own suites wouldn't catch because they test the fork;
|
||||||
|
- a **gap by design**: a feature that now needs INBUXA's own front ends,
|
||||||
|
which belongs in the contract (SPEC.md §5.2) and in the release notes
|
||||||
|
rather than being discovered by a user.
|
||||||
|
|
||||||
|
Write down which of the two each difference is. Do it after mail is
|
||||||
|
flowing, not as a gate: it informs the contract, it doesn't block the
|
||||||
|
cutover.
|
||||||
|
|
||||||
## The first week
|
## The first week
|
||||||
|
|
||||||
- **Certificate renewal.** The one thing that fails quietly and late. Watch
|
- **Certificate renewal.** The one thing that fails quietly and late. Watch
|
||||||
|
|||||||
@@ -83,6 +83,19 @@ The same checks as `cutover.md`, run by the tool rather than by hand:
|
|||||||
A failed check is a failed migration, and the tool rolls back rather than
|
A failed check is a failed migration, and the tool rolls back rather than
|
||||||
leaving a half-migrated server for the operator to reason about at 2am.
|
leaving a half-migrated server for the operator to reason about at 2am.
|
||||||
|
|
||||||
|
## After a migration: the stock client
|
||||||
|
|
||||||
|
A migration that passes its own verification has proved the fork works for
|
||||||
|
the fork. Pointing an **unmodified public ihasmail** at the migrated server
|
||||||
|
proves something else: that a client which knows nothing about INBUXA still
|
||||||
|
works against it. It runs anywhere — JMAP and OAuth over the network — and
|
||||||
|
needs only an OAuth client it may use.
|
||||||
|
|
||||||
|
Each difference it turns up is either a regression against upstream's
|
||||||
|
contract or a feature that now expects INBUXA's own front ends. The tool
|
||||||
|
doesn't run this; it belongs in the release notes and the contract
|
||||||
|
(SPEC.md §5.2). It is named here so the first migration doesn't skip it.
|
||||||
|
|
||||||
## Rollback
|
## Rollback
|
||||||
|
|
||||||
A first-class path, not an appendix.
|
A first-class path, not an appendix.
|
||||||
|
|||||||
Reference in New Issue
Block a user