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

8.2 KiB

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, setup, and runtime provenance.

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 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 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. 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.

Authenticated hosted verification: run843 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. 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.