You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] driver-sql's live PG + MySQL matrix runs under vitest's default 5000ms — the only live-DB driver in the repo with no testTimeout, and it just dequeued an unrelated PR #16434
Filed by the domain:engine dispatching seat from a merge-queue failure that dequeued a changeset-body-only PR. ⛔ Observation, not a runtime defect in shipped code — no assignee, no pm:queue, no domain:*, no priority; triage grades it.
× §2 a millisecond-precision delta cursor does not SKIP the updated row 5004ms
FAIL src/sql-driver-11224-update-stamp-precision.test.ts
> #11224 — the UPDATE door stamps at the audit column's precision (live mysql)
> §2 a millisecond-precision delta cursor does not SKIP the updated row
↳ Error: Test timed out in 5000ms.
PR #16430 was dequeued at 00:45:57Z with reason CI_FAILURE. That PR changes one file — .changeset/platform-iana-timezone-columns.md, +46 / −1 against merge base 0a038cc06 — and zero files under packages/drivers/driver-sql/. The queue runs the full suite, so it paid for a rebuild of everything behind it on a failure nothing in its own diff could cause.
The finding — this is a missing budget, not a flaky assertion
⭐ §2 has nothing to de-race. It deliberately does no sleeping. The file's own head docblock says so, in the section recording what #11572 traded away when it fixed §3:
What was traded away is the back-to-back WRITE RATE — §3 no longer fires […] §1, §1b and §2 still create and update with no sleep between them ("No sleep and no backdating", §1), so the same-millisecond path stays measured where it belongs.
So the two prior repairs to this file do not apply here: #11572 drove §3's clock instead of racing it, and #13691 moved §3's validity ceiling. Neither touches §2, and neither should — §2's subject is the unslept same-millisecond path.
What §2 actually spends is network time. With ROUNDS = 6, each iteration issues four live round-trips — driver.create → readAudit → driver.update → the cursor comparison, which is deliberately made by the server (knex(MANAGED).where('updated_at', '>=', before.rawCreatedAt).first(), so the comparison happens in the column's own type rather than in JS). That is 24 live round-trips inside one test.
And the test has no budget of its own:
probe
reading
explicit per-test timeouts in sql-driver-11224-update-stamp-precision.test.ts
0
explicit timeouts across 20 sibling driver-sql live-cell suites
0
testTimeout in packages/drivers/driver-sql/vitest.config.ts
absent ⇒ vitest's default 5000 ms
⭐ The firing control: six packages in this repo do set one, and the closest analogue sets 30 s
⇒ The one driver package whose suite talks to two live servers is the only live-database driver in the repo with no budget at all, while its nearest sibling — the other live-DB driver — carries 30 s. driver-sql's config is not silent on hard-won operational facts either: it already carries globalSetup: ['./src/live-dialect-matrix.globalsetup.ts'] for #9350 (each live file owns a schema on Postgres / a database on MySQL, and MySQL refuses the handshake for a database that does not exist). The timeout simply never got the same treatment.
⚠️What this finding does NOT claim. It does not claim the default is wrong for the in-memory / SQLite cells — they are the majority of this package's tests and 5 s is a reasonable guard there. The gap is specific: the matrix multiplies every live file across cells and the live cells alone are exposed to network and server load inside a budget sized for neither.
Why it is worth a card rather than a re-run
A re-run is the correct response to this instance and it was spent (#16430 re-queued at 00:49:01Z). The card is about the class: a timeout in the merge queue does not merely redden one PR — it dequeues it and rebuilds everything behind it. The 24h ledger recorded 0 other queue failures, so this is the first, which is exactly when the budget question is cheap to answer.
Shape of the fix, for triage — direction only, ⛔ not a ruling
The obvious move is a testTimeout on packages/drivers/driver-sql/vitest.config.ts. Two things a dev should settle rather than assume:
One budget or two? A single package-wide value raises the ceiling for the fast in-memory cells too, which weakens them as a guard. A per-cell budget (live cells only) keeps the fast cells strict, at the cost of the live matrix carrying it explicitly at each it.
git show origin/main:packages/drivers/driver-sql/vitest.config.ts | grep -c testTimeout # expect 0
grep -rn "testTimeout" --include=vitest.config.ts . | grep -v node_modules # the control table above
git show origin/main:packages/drivers/driver-sql/src/sql-driver-11224-update-stamp-precision.test.ts | grep -n "^const ROUNDS"
Readings taken on origin/mainac76425f0.
Refs: #16430 (the PR this dequeued) · #11224 (the defect the suite pins) · #11572 (§3 driven, not raced) · #13691 (§3's validity ceiling) · #9350 (the live-matrix globalSetup)
Filed by the
domain:enginedispatching seat from a merge-queue failure that dequeued a changeset-body-only PR. ⛔ Observation, not a runtime defect in shipped code — no assignee, nopm:queue, nodomain:*, no priority; triage grades it.What happened
Queue build 34069423383, job Temporal Conformance (live PG + MySQL):
PR #16430 was dequeued at
00:45:57Zwith reasonCI_FAILURE. That PR changes one file —.changeset/platform-iana-timezone-columns.md,+46 / −1against merge base0a038cc06— and zero files underpackages/drivers/driver-sql/. The queue runs the full suite, so it paid for a rebuild of everything behind it on a failure nothing in its own diff could cause.The finding — this is a missing budget, not a flaky assertion
⭐ §2 has nothing to de-race. It deliberately does no sleeping. The file's own head docblock says so, in the section recording what #11572 traded away when it fixed §3:
So the two prior repairs to this file do not apply here: #11572 drove §3's clock instead of racing it, and #13691 moved §3's validity ceiling. Neither touches §2, and neither should — §2's subject is the unslept same-millisecond path.
What §2 actually spends is network time. With
ROUNDS = 6, each iteration issues four live round-trips —driver.create→readAudit→driver.update→ the cursor comparison, which is deliberately made by the server (knex(MANAGED).where('updated_at', '>=', before.rawCreatedAt).first(), so the comparison happens in the column's own type rather than in JS). That is 24 live round-trips inside one test.And the test has no budget of its own:
sql-driver-11224-update-stamp-precision.test.tsdriver-sqllive-cell suitestestTimeoutinpackages/drivers/driver-sql/vitest.config.ts⭐ The firing control: six packages in this repo do set one, and the closest analogue sets 30 s
grep -rn "testTimeout" --include=vitest.config.ts(non-node_modules), complete:testTimeoutpackages/drivers/driver-mongodbpackages/services/service-datasourcepackages/specpackages/qa/http-conformancepackages/plugins/plugin-authpackages/metadata-fspackages/drivers/driver-sql⇒ The one driver package whose suite talks to two live servers is the only live-database driver in the repo with no budget at all, while its nearest sibling — the other live-DB driver — carries 30 s.
driver-sql's config is not silent on hard-won operational facts either: it already carriesglobalSetup: ['./src/live-dialect-matrix.globalsetup.ts']for #9350 (each live file owns a schema on Postgres / a database on MySQL, and MySQL refuses the handshake for a database that does not exist). The timeout simply never got the same treatment.Why it is worth a card rather than a re-run
A re-run is the correct response to this instance and it was spent (#16430 re-queued at
00:49:01Z). The card is about the class: a timeout in the merge queue does not merely redden one PR — it dequeues it and rebuilds everything behind it. The 24h ledger recorded 0 other queue failures, so this is the first, which is exactly when the budget question is cheap to answer.Shape of the fix, for triage — direction only, ⛔ not a ruling
The obvious move is a
testTimeoutonpackages/drivers/driver-sql/vitest.config.ts. Two things a dev should settle rather than assume:it.driver-mongodbby analogy. The honest derivation is the observed live round-trip cost — the same discipline [finding]sql-driver-11224-update-stamp-precision§3 now reds on a SLOW runner too — thespan < 1000msline is a validity precondition, and #11572's fix spends deliberate clock time inside that same budget #13691 applied to §3's span ceiling, where a bound was derived from the conclusion it guards rather than picked.Re-check
Readings taken on
origin/mainac76425f0.Refs: #16430 (the PR this dequeued) · #11224 (the defect the suite pins) · #11572 (§3 driven, not raced) · #13691 (§3's validity ceiling) · #9350 (the live-matrix
globalSetup)