diff --git a/docs/spec/SPEC.md b/docs/spec/SPEC.md index d366594..0847245 100644 --- a/docs/spec/SPEC.md +++ b/docs/spec/SPEC.md @@ -539,6 +539,12 @@ before anything that could prompt that notice happens. 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. + +Steps 1 to 3 are met as of 2026-09-19: the fork builds and its suites pass +(`container-tests.md`), and all eight compat tests pass against a copy of +INBUXA's store, with the caveat that two of them have nothing to read and +the tenant administrators' own view is not yet recorded +(`compat-tests.md`). What remains is step 4. 5. Only then: public repository and announcement, with the INBUXA fork of ihasmail released alongside. Public ihasmail stays Stalwart-facing (§5). diff --git a/docs/spec/compat-tests.md b/docs/spec/compat-tests.md index 32f4507..fd89722 100644 --- a/docs/spec/compat-tests.md +++ b/docs/spec/compat-tests.md @@ -1,6 +1,7 @@ # Running the compat tests against a copy of INBUXA's data -Status: 2026-09-19 (dry run below; still unrun against INBUXA data). +Status: 2026-09-19. All eight run against a copy of INBUXA's data; see +"The first run". Each feature spec has one **(compat)** acceptance test: the check that INBUXA's own data opens in inbuxa-server and reads back as it did on the @@ -200,6 +201,33 @@ 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. +## The first run, 2026-09-19 + +All eight ran against a copy of INBUXA's RocksDB store, taken from the +stopped server, with `run-compat.sh` and `john@linuxexperts.net` as the +administrator. **All eight pass.** SPEC.md §7's cutover steps 2 and 3 are +met: INBUXA's data opens in the fork and reads back as it did. + +What each one actually proved, which is not the same as eight green lines: + +| Test | What the pass means | +|---|---| +| `tenant_compat` | The tenant, its quotas and its members read back unchanged. `tenantAdmins` was empty, so **what each tenant administrator can see is still unchecked** | +| `branding_compat` | Every domain's logo answered, and the stored templates read back | +| `ai_compat` | The twelve `LLM_*` tags are there with the scores observed: real, not vacuous | +| `monitoring_compat` | Retention and stores read back; old history in the stripped encoding was skipped rather than erroring, and went after one purge | +| `scim_compat`, `per_domain_directory_compat` | Confirm INBUXA still uses neither feature | +| `masked_email_compat`, `undelete_compat` | **Nothing.** No masked addresses, retention off: they iterate an empty list | + +So six of the eight carry weight today, and one of those six is only +half-checked until a tenant administrator's view is recorded +(`--tenant-admin`, "Recording the three files"). + +Three things had to be fixed before any of this ran, each of which failed +every test identically and none of which was about the data: the copy's +listener names, its privileged ports, and its pending tasks. They are +described below, because the next import's copy will bring the same three. + ## What a failure means - `tenant_compat`, `branding_compat`, `ai_compat`: the fork reads that data