Compat: what the recording holds, and what two of the tests now prove

record-compat.py ran against the live server as a server-level
administrator: 8 accounts, which matches the dashboard, so it reached all
of them. One tenant with its quotas and members; no masked addresses, no
archived items.

The empty files are right rather than short. INBUXA has no masked
addresses and retention is off, so masked_email_compat and undelete_compat
iterate an empty list: they pass without comparing anything, which is worth
saying plainly, because a green run from either would otherwise read as
evidence of compatibility. That puts them where scim_compat and
per_domain_directory_compat already sit.

So one recording carries weight, expected.json, and it is made. SPEC §7's
cutover steps 2 and 3 come down to the tenant, the domains and the
accounts until either feature is switched on.
This commit is contained in:
2026-09-19 20:10:50 -07:00
parent 3d28f6bff2
commit d407509f59
2 changed files with 33 additions and 4 deletions
+4 -1
View File
@@ -534,7 +534,10 @@ before anything that could prompt that notice happens.
2. INBUXA's data opens in the fork on a copy: tenants, masked addresses, 2. INBUXA's data opens in the fork on a copy: tenants, masked addresses,
archived items, every account. archived items, every account.
3. Masked addresses already handed out still deliver; archived items still 3. Masked addresses already handed out still deliver; archived items still
restore. restore. Moot as things stand: INBUXA has no masked addresses and
retention is off (2026-09-19), so steps 2 and 3 come down to the tenant,
the domains and the accounts. It applies again the moment either feature
is switched on (`compat-tests.md`).
4. Cutover on the running host, with the Enterprise build kept for rollback. 4. Cutover on the running host, with the Enterprise build kept for rollback.
5. Only then: public repository and announcement, with the INBUXA fork of 5. Only then: public repository and announcement, with the INBUXA fork of
ihasmail released alongside. Public ihasmail stays Stalwart-facing (§5). ihasmail released alongside. Public ihasmail stays Stalwart-facing (§5).
+29 -3
View File
@@ -129,11 +129,37 @@ plumbing before the day the copy exists. What that established:
What it can't establish is anything about INBUXA's data: every run ended at What it can't establish is anything about INBUXA's data: every run ended at
the authentication check, since an empty store holds no such administrator. the authentication check, since an empty store holds no such administrator.
## What was recorded, 2026-09-19
`record-compat.py` ran against the live Enterprise server as a server-level
administrator and saw 8 accounts, which is what the dashboard reports, so it
reached all of them. It recorded:
| File | Contents |
|---|---|
| `expected.json` | 1 tenant, with its quotas and members. `tenantAdmins` empty: no `--tenant-admin` was passed |
| `masks.json` | nothing |
| `archived.json` | nothing |
The two empty files are right, not a short recording: INBUXA has no masked
addresses and deleted-mail retention is off (John, 2026-09-19). So
`masked_email_compat` and `undelete_compat` iterate over an empty list.
**They pass without comparing anything, and a green run from either proves
nothing about compatibility** — the same standing as `scim_compat` and
`per_domain_directory_compat`, which assert INBUXA uses neither feature.
That leaves one recording that carries weight, `expected.json`, and it is
made. Should either feature be switched on before the cutover, record again:
the files are a picture of the day they were taken.
## What a failure means ## What a failure means
- `tenant_compat`, `masked_email_compat`, `undelete_compat`, - `tenant_compat`, `branding_compat`, `ai_compat`: the fork reads that data
`branding_compat`, `ai_compat`: the fork reads that data differently from differently from the Enterprise server. Treat as a cutover blocker and fix
the Enterprise server. Treat as a cutover blocker and fix before moving. before moving.
- `masked_email_compat` and `undelete_compat` would mean the same, but as of
2026-09-19 they have nothing to read: see "What was recorded" above. They
can only fail once INBUXA has masked addresses or retention on.
- `monitoring_compat`: old telemetry that can't be decoded is expected and - `monitoring_compat`: old telemetry that can't be decoded is expected and
is skipped; a failure here means the settings differ from what was is skipped; a failure here means the settings differ from what was
observed. observed.