T43 MySQL and MariaDB Probe Adapter Validation
T43 MySQL and MariaDB Probe Adapter Validation
Scope
- Task: T43 — Implement MySQL and MariaDB Probe adapters
- Requirements: VES-DBP-002…005
- Commit target:
feat(probe): add mysql mariadb adapters - Focused evidence: 70 cases (18 contract, 18 integration, 34 security), 35 independently attributed to each engine
- Spec deviations: none
T43 introduces a conservative shared MySQL-family read grammar with separate MySQL and MariaDB components, server-family/version qualification, capability evidence, privilege checks, read-only session controls, timeout semantics, cancellation, metadata allowlists, protected parameters, and deterministic engine fixtures.
Deterministic gates
| Command | Result |
|---|---|
node --test tests/contract/mysql-family-probe-adapters.test.mjs tests/integration/mysql-family-probe-adapters.test.mjs tests/security/mysql-family-parser-security.test.mjs |
PASS — 70 passed, 0 failed/skipped |
node scripts/gate.mjs security |
PASS — format, lint, typecheck/build, 1,496 unit/property, 10 architecture, 248 qualification, 347 security, and 55 fault cases |
Adequacy matrix
| Criterion | MySQL | MariaDB |
|---|---|---|
| Independently attributed focused cases | 35 | 35 |
| SELECT and read-only CTE | Yes | Yes |
| Safe information_schema introspection | Yes | Yes |
| Distinct component identity | probe-worker:mysql |
probe-worker:mariadb |
| Version/family qualification | MySQL 8+ and non-MariaDB identity | MariaDB identity and CTE-capable version |
| Required capabilities | CTE, read-only transactions, metadata | CTE, read-only transactions, metadata |
| Read-only variable | @@transaction_read_only |
@@tx_read_only |
| Timeout control | MAX_EXECUTION_TIME milliseconds |
max_statement_time seconds |
| Privilege negatives | Write, FILE, SUPER, CREATE USER | Write, FILE, SUPER, CREATE USER |
| Unsafe paths | Procedure, export, LOAD DATA, HANDLER, metadata | Procedure, export, LOAD DATA, HANDLER, metadata |
| Parser bypass | Multi-statement, comments, literals, quoting, Unicode | Multi-statement, comments, literals, quoting, Unicode |
| Cancellation and protected parameters | Yes | Yes |
| Required minimum | 24 | 24 |
Non-shallow checks
- Shared parsing does not imply shared qualification: the worker components, server identity, version policy, read-only observation, and timeout statements remain engine-specific.
- The grammar accepts only ASCII, schema-qualified, parameterized SELECT/CTE forms and a closed information_schema relation set.
- Stored procedures, server-side OUTFILE/DUMPFILE exports, LOAD DATA, HANDLER, system schemas, dangerous functions, comments, semicolons, literals, quoting, and Unicode tricks fail before streaming.
- Principal evidence rejects schema write grants and FILE, SUPER, or CREATE USER privileges independently for both engines.
- The exact protected SQL is reparsed at execution and must equal the approved normalized operation; parameter count must equal placeholder count.
- SQL and values remain inside the protected callback and connection stream, never the plan or result envelope.
- Live container evidence was unavailable for the same Docker daemon condition recorded by T42; deterministic per-engine connection fixtures provide portable conformance, while live MySQL/MariaDB promotion evidence remains mandatory.
Verdict
PASS for T43 implementation and portable conformance. Both engines independently exceed the required test floor, their semantic differences remain explicit, and the full security gate passes. Live-container promotion evidence remains pending in a qualified environment.