Files
Ekklesia/core/tests/support/import-safety.ts
T
ekklesiaandClaude Opus 5.5 796ad4f16e
CI / verify (pull_request) Successful in 1m5s
CI / infrastructure-smoke (pull_request) Successful in 37s
CI / migration-smoke (pull_request) Successful in 1m55s
CI / image-build (pull_request) Successful in 24s
CI / deploy-smoke (same-origin) (pull_request) Successful in 49s
CI / deploy-smoke (split) (pull_request) Successful in 1m31s
test: give Core's import-safety tests a timeout that holds under full verify load
Four Core tests prove that importing a module has no side effects. Each one
does a cold dynamic import() of a large Core source graph inside its test
body:
- doctor-import
- module-http-import
- cli-bootstrap-platform-owner
- cli-create-initial-owner (its first test)

Vitest transforms and evaluates that graph on demand, so the CPU-bound cost
counts against the default 5 s per-test timeout. Ordinary test files import
at the top level, outside any test timeout. There is no subprocess, shared
resource, or test bug.

Measured on six cores:
- alone: 0.7–1.2 s;
- alongside five other packages' suites, as in a full pnpm verify:
  3.0–5.4 s (doctor-import reached 5,400 ms).

A shared IMPORT_SAFETY_TEST_TIMEOUT_MS of 30 s (core/tests/support/
import-safety.ts) now applies to exactly these four tests. That is about five
times the slowest time measured under load, the same as the repository's
integration-test timeout, and still bounded, so an import that genuinely
hangs fails. Assertions, coverage, the global Vitest timeout, parallelism,
and production code are unchanged; there are no retries.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 19:08:30 -05:00

20 lines
1.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* The per-test timeout for Core's import-safety tests, and only those.
*
* Each of these tests proves that importing a module does nothing (no I/O, no connection, no output)
* by performing a cold dynamic `import()` of a large Core source graph inside the test body. Vitest
* transforms and evaluates that whole graph on demand, and that work is CPU-bound. An ordinary test
* file's own top-level imports run before its tests start and fall under no per-test timeout; these
* deliberately do not, so the cost lands inside Vitest's default 5-second test timeout.
*
* Alone they take about 0.7–1.2 s. During a full `pnpm verify`, Turbo runs every package's suite at
* once and the CPU is saturated. Reproduced locally (six cores, Core's suite alongside five other
* packages' suites), the same tests took 3.0–5.4 s, and so timed out intermittently.
*
* 30 seconds is about five times the slowest time measured under load, which leaves room for slower
* shared CI runners. It matches the repository's integration-test timeout. It is still bounded, so a
* module that genuinely hangs while being imported, for example on a network call, still fails. The
* assertions themselves are unchanged: these tests fail on what an import does, never on speed.
*/
export const IMPORT_SAFETY_TEST_TIMEOUT_MS = 30_000;