Follow-up to #12014 (PR #12134), sized by that card's own measurement as its dispatch required. The number is 2.
⛔ Do not start until PR #12134 has landed — this card edits the ledger it creates.
Route is RULED — do not re-open it
domain:engine PM seat, 2026-08-25, on #12014's ACCEPT. Both halves were measured on origin/main, not argued:
1. Convert sql-driver-comparand-type-conformance.test.ts to the dialect matrix
FILTER_COMPARAND_TYPE_CASES is the only dialect-scored cell with no matrix-routed suite at all, and its own case-set entry claims universality it does not measure — scripts/check-driver-conformance.mjs:231, verbatim:
the comparand-type door: the six accepted types compile everywhere, everything else is refused loudly — #7872
"Compile everywhere", measured on one dialect. That is #12014's thesis one level in, and it is why this conversion is earned rather than tidy.
⚠️Expect this to find something.#7872's door is about which comparand types are accepted; whether all six really do compile on Postgres and MySQL is exactly what has never been checked. If a type turns out not to compile everywhere, that is a real finding — stop and report it, do not narrow the case-set to make the suite pass.
2. Mark sql-driver-icontains-and-retired-operators.test.ts as dialectCell('sqlite')
Measured: sql-driver-text-case-conformance.test.ts mentions icontains16 times and routes through the testkit, so FILTER_TEXT_CASESis genuinely covered on all three dialects by that suite. This one is a second pass over covered ground; declaring it a deliberate single cell loses no coverage.
⚠️ Verify that before marking. If the matrix suite turns out not to cover the same operators this one does, marking it hides a real gap — measure by operator, not by file, and report if the coverage does not actually overlap. #6518 records that FILTER_TEXT_CASES answers differ by dialect (GLOB on SQLite, LIKE on Postgres, LIKE over CAST(.. AS BINARY) on MySQL), so a wrong call here is expensive.
⛔ Both options were weighed and B ("convert both") was rejected on measurement, not taste: converting the icontains suite would add no dialect coverage, because its cell is already matrix-covered.
3. Then promote the invariant — this card's closing step
With the ledger empty, promote "every dialect-scored cell has at least one matrix-routed suite" from a printed measurement to an enforced invariant, and empty DIALECT_LEDGER. This is what makes the census enforce ADR-0053 D-A3 (driver {SQLite, Postgres at minimum}) rather than report it.
It could not be done inside #12014 because promoting it there would have redded exactly one cell, and clearing that red needs a test-file edit — the gate-change/test-change coupling that card's scope ruled out. Once steps 1–2 land the population is zero and the promotion is free. ⛔ Do not promote before the ledger is empty; a gate that ships red is worse than one that ships honest.
Clause ②
No — test coverage plus a gate invariant. No shipped behaviour, no public surface. ⚠️ But note this card does change what suites assert, which #12014 deliberately would not: that is the whole reason it is a separate card, and it is why the conversion in step 1 may surface a genuine dialect divergence.
Surface
packages/drivers/driver-sql/src/sql-driver-comparand-type-conformance.test.tspackages/drivers/driver-sql/src/sql-driver-icontains-and-retired-operators.test.tsscripts/check-driver-conformance.mjs (the ledger and the promotion)
⚠️ Re-check the in-flight ledger at claim time — several sql-driver.ts bands and test files were held by concurrent cards on 2026-08-25.
Refs
#12014 (parent, the axis) · PR #12134 · #7872 (the comparand-type door) · #6518 (why FILTER_TEXT_CASES diverges) · ADR-0053 D-A3 · #12135 (a neighbouring consumes() defect in the same script)
Follow-up to #12014 (PR #12134), sized by that card's own measurement as its dispatch required. The number is 2.
⛔ Do not start until PR #12134 has landed — this card edits the ledger it creates.
Route is RULED — do not re-open it
domain:enginePM seat, 2026-08-25, on #12014's ACCEPT. Both halves were measured onorigin/main, not argued:1. Convert
sql-driver-comparand-type-conformance.test.tsto the dialect matrixFILTER_COMPARAND_TYPE_CASESis the only dialect-scored cell with no matrix-routed suite at all, and its own case-set entry claims universality it does not measure —scripts/check-driver-conformance.mjs:231, verbatim:"Compile everywhere", measured on one dialect. That is #12014's thesis one level in, and it is why this conversion is earned rather than tidy.
2. Mark
sql-driver-icontains-and-retired-operators.test.tsasdialectCell('sqlite')Measured:
sql-driver-text-case-conformance.test.tsmentionsicontains16 times and routes through the testkit, soFILTER_TEXT_CASESis genuinely covered on all three dialects by that suite. This one is a second pass over covered ground; declaring it a deliberate single cell loses no coverage.FILTER_TEXT_CASESanswers differ by dialect (GLOB on SQLite, LIKE on Postgres, LIKE overCAST(.. AS BINARY)on MySQL), so a wrong call here is expensive.⛔ Both options were weighed and B ("convert both") was rejected on measurement, not taste: converting the icontains suite would add no dialect coverage, because its cell is already matrix-covered.
3. Then promote the invariant — this card's closing step
With the ledger empty, promote "every dialect-scored cell has at least one matrix-routed suite" from a printed measurement to an enforced invariant, and empty
DIALECT_LEDGER. This is what makes the census enforce ADR-0053 D-A3 (driver {SQLite, Postgres at minimum}) rather than report it.It could not be done inside #12014 because promoting it there would have redded exactly one cell, and clearing that red needs a test-file edit — the gate-change/test-change coupling that card's scope ruled out. Once steps 1–2 land the population is zero and the promotion is free. ⛔ Do not promote before the ledger is empty; a gate that ships red is worse than one that ships honest.
Clause ②
No — test coverage plus a gate invariant. No shipped behaviour, no public surface.⚠️ But note this card does change what suites assert, which #12014 deliberately would not: that is the whole reason it is a separate card, and it is why the conversion in step 1 may surface a genuine dialect divergence.
Surface
packages/drivers/driver-sql/src/sql-driver-comparand-type-conformance.test.tspackages/drivers/driver-sql/src/sql-driver-icontains-and-retired-operators.test.tsscripts/check-driver-conformance.mjs(the ledger and the promotion)sql-driver.tsbands and test files were held by concurrent cards on 2026-08-25.Refs
#12014 (parent, the axis) · PR #12134 · #7872 (the comparand-type door) · #6518 (why
FILTER_TEXT_CASESdiverges) · ADR-0053 D-A3 · #12135 (a neighbouringconsumes()defect in the same script)