Files
jobtrackingapp/docs/database/mariadb-standardisation/ACCEPTANCE.md
T
cesnimda 549b2cba5a
MariaDB persistence qualification / mariadb (push) Failing after 46s
docs(ci): record hosted MariaDB runner prerequisite failure
2026-10-24 01:55:56 +02:00

92 lines
8.2 KiB
Markdown

# MariaDB standardisation and RD21 qualification — 24 October 2026
RD21 is **resolved within the qualified MariaDB 12.2.2 save/concurrency scope**. The pinned official
Linux/amd64 image passes the actual Docker Compose persistence lane and a native browser/API recovery
journey with independent SQL reads. This supersedes the earlier addendum's missing-MariaDB blocker;
it does not reaccept all of Phase 9 or authorize release.
Baseline: `0d16a691e0249fe1264bf960de5e59eaa9b87fed`. Implementation checkpoint: `a2c9bda` on
`codex/rd21-mariadb-standardisation`. Main stays `5f835e54a9b74e6b71418422e28431b2af06453f`.
Raw runtime timestamps are UTC on 23 October; the owner's local report date is 24 October.
See [machine-readable validation](validation.json), [setup](README.md), and [runtime provenance](runtime-provenance.json).
## Separate decisions
| Gate | Verdict | Evidence or remaining blocker |
| --- | --- | --- |
| MariaDB 12.2.2 RD21 qualification | **PASS, bounded resolution** | 32 real-provider cases and one native browser journey; durable SQL state, transactions, rejected drafts, revision conflicts, recovery and tenant isolation. No production image equality claim. |
| MariaDB local development | **READY** | Pinned Compose image, healthy loopback service, separate persistent development volume, API startup applies 51 migrations; synthetic company survives database stop/start. |
| MariaDB CI/integration tests | **LOCAL READY; HOSTED BLOCKED** | Same fail-closed runner passes 32/32 locally. Hosted run843 passed checkout/SDK setup/five runner guards, then failed `Require Docker and Compose`: `docker: command not found`, exit127. No hosted MariaDB tests ran. A dedicated test runner needs Docker/Compose and an isolated engine. |
| Historical fixture repairs | **PASS** | Three obsolete revision fixtures corrected without weakening assertions: diagnostics 18/18, volume 3/3. Stale writes now assert 409 and preservation of the winner/source/history. |
| SQLite retirement | **PLAN READY; REMOVAL NO-GO** | Complete baseline classification; defaults corrected. Remaining legacy coverage, full-fidelity transfer and preservation/restore gates must precede package/branch removal. |
| MariaDB 12.3 LTS migration | **INVESTIGATION READY; MIGRATION NO-GO** | Separate 12.3.3 rehearsal proposed; target image/driver certification, copied-data upgrade, backup/restore and rollback-after-writes remain untested. |
| Phase 9 reacceptance | **NO-GO** | RD21's provider blocker closes; wider manual/device/provider/security/output/release qualifications remain. Preservation remains 57 groups/33 routes, 56 PARTIAL and C11 DEFERRED. |
| Phase 10 readiness | **NO-GO** | Phase 9 not fully reaccepted; implementation explicitly prohibited. |
| Production readiness | **NO-GO** | No production qualification, infrastructure/backup-restore/release acceptance, deployed identity verification or reviewed pinning change. No production operation performed. |
## Verified scope and accounting
| Lane | Final distinct results | Limits |
| --- | --- | --- |
| Existing backend Release | 1,123 passed, 0 failed/skipped | Includes 14 configuration cases; retained SQLite/InMemory contracts do not count as MariaDB qualification. |
| MariaDB Docker Compose Release | 32 passed, 0 failed/skipped | Exact official 12.2.2 image; repeated run after bridge-network cleanup fix also passes. Repeats are not added to the count. |
| Native MariaDB browser | 1 passed | Real API, Chromium and SQL client against the same pinned Docker image; controlled network failure, not power-loss testing. |
| Corrected diagnostics | 18 passed | Explicit temporary SQLite browser lane; includes data/sustained fixtures. |
| Corrected volume fixtures | 3 passed | Explicit temporary SQLite lane; separate configuration. |
| Disposable-runner guards | 5 passed | Offline subprocess doubles, including setup/cleanup failure; not database proof. |
| Browser connection guards | 10 passed | Duplicate/alias keys, remote/existing schema and port mismatches rejected. |
| Static checks | Passed | Full frontend typecheck/lint and targeted browser/config TypeScript compilation. |
The initial real-server run failed: startup omitted three Identity columns. After schema repair,
the writer-lock test exposed dirty tracked entities when Pomelo wrapped error 1205 in
`InvalidOperationException`. Both defects were repaired and covered by real-provider assertions.
The browser then exposed an untranslatable import-history ordering query; ordering/limiting the
tenant-filtered entities before DTO projection repairs the MariaDB path. A later browser failure
used a stale Release binary after a Debug-only rebuild; the Release suite was rebuilt and the final
browser rerun passed, including import-history HTTP 200. These failures remain recorded in validation.
The final 32 cases exercise Career Profile and Job saves, stale revision rejection, missing/legacy
revision handling, atomic projection/history/job/event updates, independent reads after commits,
controlled concurrent writes and lock timeout recovery, repeated/populated startup, additive RD21
migration preservation and tenant isolation. They use actual InnoDB persistence with independent TCP
connections. Identity/summarizer doubles in controller fixtures do not replace database behavior;
the separate browser uses the real hosted API. They do not certify every application query or
historically restore data already overwritten before RD21. Existing creation/idempotency and
unrelated Phase 9 reliability qualifications remain outside this bounded repair.
Production's owner-reported server is `12.2.2-MariaDB-ubu2404`, but its reported configuration ID
differs from the verified official image config. Version parity is established; exact production
image/configuration/environment parity is not. The [image record](image-provenance.json) distinguishes
manifest and config digests. Locked provider versions are Pomelo 9.0.0, EF Core 9.0.14 and
MySqlConnector 2.4.0. Real 12.2.2 results establish this application's tested compatibility, despite
Pomelo's published older tested-server matrix; they do not certify 12.3.
## Preservation, review and operational limits
The [SQLite audit](SQLITE_AUDIT.md) classifies 1,602 baseline references in 415 tracked files:
1,169 required historical/preservation references, 420 temporary transition references and 13
obsolete defaults/guidance references. The obsolete active defaults/guidance were corrected;
SQLite dependencies, compatibility branches, historical migrations and user data remain preserved.
The three fixture changes have exact before/after deltas in [fixture-delta.json](fixture-delta.json).
Previous acceptance counts and reports remain historical, not silently rewritten.
Independent review found and verified fixes for duplicate connection keys bypassing the browser's
database guard, server reuse and missing actual version verification. The generated test service
now uses the existing bridge network, avoiding leaked per-run networks. Final review has no further
actionable findings. Docker's local stale socket issue was also resolved without resetting Docker
or deleting its persistent data; see [local recovery](DOCKER_LOCAL_RECOVERY.md).
Authenticated hosted verification: [run843](https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/843)
at report commit `e75c4a477555bbd360b83004c25c30fbfcf233d3` failed the explicit Docker prerequisite.
The Gitea step API labels earlier steps as failed too; the actual job log confirms checkout, SDK
installation and five guard cases succeeded. No database tests or database artifacts were produced.
Do not bypass the gate with SQLite, attach a production host socket, or silently grant runner
privileges. Provision an isolated CI database execution environment, rerun the same command and
verify the actual TRX/cleanup evidence before changing hosted readiness to PASS.
The intended final architecture is **MariaDB only** for application development, integration,
CI and production. Keep 12.2.2 pinned for the present qualification; rehearse the supported 12.3 LTS
path separately using [the migration gates](MARIADB_12_3_PLAN.md). Retire SQLite in the documented
stages after equivalent coverage and verified preservation, not by deleting existing databases.
No main merge, deployment, production connection/container change or Phase 10 implementation occurred.