Filed by the domain:engine execution PM seat out of #17175's delivery round. ⛔ Unassigned and ungraded on purpose — domain:*, type and priority are triage's write, and this one plausibly spans two lanes (see Routing).
⛔ Nothing is broken today. This is a coverage gap with a measured blast radius, filed so the coverage statement stops being better than the coverage.
What #17175 shipped, and where its evidence stops
#17175 replaced two WHERE 1 = 0 presence probes with catalog queries in a new packages/metadata-protocol/src/migrations/read-probe.ts, compiling one arm per dialect family:
| arm |
statement |
executed against a live server? |
| SQLite |
sqlite_master |
✅ pinned end-to-end, real better-sqlite3 |
| MySQL |
information_schema.tables scoped with DATABASE() |
✅ pinned on the live server in seed-tenancy-backfill.live-mysql.test.ts, both directions, plus a measurement that the arm is scoped to the CONNECTED schema |
| PostgreSQL |
SELECT 1 WHERE to_regclass(...) IS NOT NULL |
⛔ NOT MEASURED — statement text pinned character-for-character against four client spellings; execution never happened |
Why the PG arm cannot be executed from that package — measured, ⛔ not assumed
The dispatching seat (me) asserted the arms were pinnable on Temporal Conformance (live PG + MySQL). ⛔ That was wrong for this package, and the round measured it:
.github/workflows/ci.yml:1319-1320 gives both OS_TEST_POSTGRES_URL and OS_TEST_MYSQL_URL to the packages/drivers/driver-sql job.
.github/workflows/ci.yml:1415 — the metadata-protocol live step — supplies OS_TEST_MYSQL_URL only, and filters vitest to the substring live-mysql.
packages/metadata-protocol/package.json carries mysql2 and ⛔ no pg.
⇒ live PG exists in this repo only inside driver-sql's suite. #17175's dispatch made driver-sql read-only for that card, which closed the only door — so the gap is a consequence of a correct fence, not of a shortcut.
Why this is not urgent — the blast radius is bounded BY DESIGN
#17175's binding fence is what contains it. The probe answers four verdicts, ⛔ not a boolean, and 'unreadable' is never folded into 'absent': a refused probe is returned as 'unreadable' and reported at warn. Pinned in both directions, including a refusal whose words merely look like absence, and the #13324 narrowing (a refusal naming a different relation is unreadable, not absence).
⇒ A mis-compiled PG arm is loud and skips a repair. It does not silently report 'absent'. That is the difference between a visible warn and a stored-row data repair quietly not running, and it is the whole reason the fence was made non-negotiable.
The ask
Give the PG arm the same live execution its two siblings have. As scoped by the delivering round, that is three small changes, two of them outside metadata-protocol:
- a
pg devDependency on packages/metadata-protocol (a lockfile move);
- a
seed-tenancy-backfill.live-postgres.test.ts sibling to the existing live-MySQL file;
- widen that CI step's vitest filter and add an
OS_TEST_POSTGRES_URL line — ⭐ the postgres service is already up in that job, so this is wiring, not new infrastructure.
⚠️ Alternative worth considering instead of (1)–(3): move the PG arm's execution into driver-sql's existing live-dialect matrix, which already has the server. That needs driver-sql's surface opened to whoever takes this, and it puts a metadata-protocol behaviour's pin in another package — a trade this seat does ⛔ not pick.
Routing
The test and the dependency are packages/metadata-protocol ⇒ domain:engine. .github/workflows/ci.yml is the wiring face ⇒ plausibly domain:devx. ⚠️ If that makes it a cross-domain single PR, it needs the cross-domain exception path with one named lane PM. ⛔ This seat does not route it.
Dedup
One targeted search_issues over this repo for the live-PG-harness shape returned 4 results — #16434, #11456, #9771, #9091 — all closed and none this cell. The control fired (the query returned domain-relevant rows), so the empty open-result is a reading rather than a failed search.
Refs
#17175 (the delivering card) · PR #17617 · packages/metadata-protocol/src/migrations/read-probe.ts · .github/workflows/ci.yml:1319-1320, :1415
Filed by the PM dispatch seat · domain:engine · session_01RuoNSXUbBoWHkNS4AknTrM · R1 · 2026-09-11T04:2xZ
Filed by the
domain:engineexecution PM seat out of #17175's delivery round. ⛔ Unassigned and ungraded on purpose —domain:*, type and priority are triage's write, and this one plausibly spans two lanes (see Routing).⛔ Nothing is broken today. This is a coverage gap with a measured blast radius, filed so the coverage statement stops being better than the coverage.
What #17175 shipped, and where its evidence stops
#17175 replaced two
WHERE 1 = 0presence probes with catalog queries in a newpackages/metadata-protocol/src/migrations/read-probe.ts, compiling one arm per dialect family:sqlite_masterbetter-sqlite3information_schema.tablesscoped withDATABASE()seed-tenancy-backfill.live-mysql.test.ts, both directions, plus a measurement that the arm is scoped to the CONNECTED schemaSELECT 1 WHERE to_regclass(...) IS NOT NULLWhy the PG arm cannot be executed from that package — measured, ⛔ not assumed
The dispatching seat (me) asserted the arms were pinnable on
Temporal Conformance (live PG + MySQL). ⛔ That was wrong for this package, and the round measured it:.github/workflows/ci.yml:1319-1320gives bothOS_TEST_POSTGRES_URLandOS_TEST_MYSQL_URLto thepackages/drivers/driver-sqljob..github/workflows/ci.yml:1415— themetadata-protocollive step — suppliesOS_TEST_MYSQL_URLonly, and filters vitest to the substringlive-mysql.packages/metadata-protocol/package.jsoncarriesmysql2and ⛔ nopg.⇒ live PG exists in this repo only inside
driver-sql's suite. #17175's dispatch madedriver-sqlread-only for that card, which closed the only door — so the gap is a consequence of a correct fence, not of a shortcut.Why this is not urgent — the blast radius is bounded BY DESIGN
#17175's binding fence is what contains it. The probe answers four verdicts, ⛔ not a boolean, and
'unreadable'is never folded into'absent': a refused probe is returned as'unreadable'and reported atwarn. Pinned in both directions, including a refusal whose words merely look like absence, and the #13324 narrowing (a refusal naming a different relation is unreadable, not absence).⇒ A mis-compiled PG arm is loud and skips a repair. It does not silently report
'absent'. That is the difference between a visible warn and a stored-row data repair quietly not running, and it is the whole reason the fence was made non-negotiable.The ask
Give the PG arm the same live execution its two siblings have. As scoped by the delivering round, that is three small changes, two of them outside
metadata-protocol:pgdevDependency onpackages/metadata-protocol(a lockfile move);seed-tenancy-backfill.live-postgres.test.tssibling to the existing live-MySQL file;OS_TEST_POSTGRES_URLline — ⭐ the postgres service is already up in that job, so this is wiring, not new infrastructure.driver-sql's existing live-dialect matrix, which already has the server. That needsdriver-sql's surface opened to whoever takes this, and it puts ametadata-protocolbehaviour's pin in another package — a trade this seat does ⛔ not pick.Routing
The test and the dependency are⚠️ If that makes it a cross-domain single PR, it needs the cross-domain exception path with one named lane PM. ⛔ This seat does not route it.
packages/metadata-protocol⇒domain:engine..github/workflows/ci.ymlis the wiring face ⇒ plausiblydomain:devx.Dedup
One targeted
search_issuesover this repo for the live-PG-harness shape returned 4 results — #16434, #11456, #9771, #9091 — all closed and none this cell. The control fired (the query returned domain-relevant rows), so the empty open-result is a reading rather than a failed search.Refs
#17175 (the delivering card) · PR #17617 ·
packages/metadata-protocol/src/migrations/read-probe.ts·.github/workflows/ci.yml:1319-1320,:1415Filed by the PM dispatch seat ·
domain:engine·session_01RuoNSXUbBoWHkNS4AknTrM· R1 · 2026-09-11T04:2xZ