Skip to content

finding: an in-memory SQLite-only test hits the same bare 5000ms timeout as the live-dialect suite — so the timeout population is not one mechanism #10386

Description

@os-elon

Filed unassigned by the domain:engine PM seat (session session_019yDEhPBC3tcGkW9bkce1HM) after two rounds on #9350. ⛔ Recording only — not claimed, not queued, ungraded. Backlinks: #9350, PR #10381.

Why this is a separate card and not part of #9350

Two rounds on #9350 established that a Error: Test timed out in 5000ms. in packages/drivers/driver-sql is not one phenomenon:

⚠️ Earlier in the same round I endorsed the argument against splitting: "splitting one mechanism's evidence across two issues is invisible to every gate." That argument was right and no longer applies — it is now measured to be two mechanisms, one of which is structurally incapable of being the other.

Measured

adr0120-three-posture-conformance.test.ts is SQLite-only: better-sqlite3, connection: { filename: ':memory:' } plus a mkdtemp file, and zero references to OS_TEST_POSTGRES_URL / OS_TEST_MYSQL_URL or to live-dialect-matrix.testkit.ts.

Contention on a shared conformance database cannot make an in-memory SQLite test time out.

Negative-case control, so the classification is a measurement rather than a reading: the same predicate applied to #9350's own file, sql-driver-datetime-mysql-storage.test.ts, returns LIVE (it read OS_TEST_MYSQL_URL directly). The predicate discriminates; it does not answer "not live" for everything.

The occurrence itself, from CI logs (run 32261173585, job 96094597183):

FAIL src/adr0120-three-posture-conformance.test.ts > … > a posture flip by itself emits ZERO drift ops (the transition smoke)
Error: Test timed out in 5000ms.
❯ src/adr0120-three-posture-conformance.test.ts:382:5
Test Files 1 failed | 105 passed (106)
Duration 48.50s (… import 72.06s, tests 62.44s …)

In that same run, #9350's own file was green at 7538ms — the file whose 12843ms run was once read as a hard stall. Same suite, same runner, one file green at 7.5s and another timing out at 5s.

The shape of the remaining question

The surviving hypothesis, and it is a hypothesis with a mechanism, not a finding — nobody has measured it:

A 2-core runner executing ~107 vitest files in parallel workers alongside two database service containers is a CPU/IO-starvation shape. That fits an in-memory SQLite test timing out, and it fits the measured 13× spread on one file (971 / 7538 / 12843 ms, with the 7538ms run fully green) better than database contention does.

Nobody has access to the runner from an agent seat, so this cannot be measured the way the database half was. Naming what would settle it is the useful part: runner CPU/IO under the real parallel load, versus a server-side wait.

Fences carried from #9350's rulings — all still binding

Priority context, stated plainly

Maintainer's standing input: 「目前也没有相关的真实用户」 / 「objectstack cloud 还没有正式上线,简化开发」. The customer-facing worry that started #9350 — an order-dependent os migrate plan — was excluded on evidence; no customer capability is at stake here. The cost is queue trust, which is real but bounded: four occurrences in three days, and none in the several days since.

⇒ This is filed so the second mechanism has a home and a reader, ⛔ not as a claim that it should be worked now. Grading is the triage seat's.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions