The push/ci lint step intermittently failed with:
x Package traversal error: .../packages/macp/vitest.config.ts.timestamp-
<n>.mjs: IO error ... No such file or directory (os error 2)
vite/vitest/esbuild write a transient *.timestamp-*.mjs next to a TS
config while loading it, then unlink it. The files were untracked but not
ignored, so turbo's package traversal hashed them and raced the unlink.
Ignoring them excludes them from turbo's input set and removes the race.
Same class of fix as the pglite timeout/OOM change in this PR: transient
test tooling artifacts destabilising CI.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
packages/db's migrate.test.ts spins up a real PGlite (WASM Postgres)
instance per test and applies the full drizzle migration set. Each case
takes ~3-5s locally and longer on CI, where turbo runs ~20 packages'
suites concurrently. Two failure modes resulted, bouncing between the
push/ci and pr/ci pipelines on identical SHAs:
FAIL src/migrate.test.ts > runPgliteMigrations > ...
Error: Test timed out in 5000ms.
-> memory access out of bounds (wasm:/wasm/...)
1. The 5s vitest default timeout expires mid-migration -> phantom
'Test timed out in 5000ms'. Raise testTimeout/hookTimeout to 120s so
legitimately-slow migrations finish.
2. Each PGlite WASM heap is multi-hundred-MB (RSS ~705MB for this file
alone); parallel forks multiply the peak and tip the runner into the
WASM OOM. Pin the package to a single fork so only one instance is
resident at a time.
Also register packages/db/vitest.config.ts in eslint's allowDefaultProject
(alongside the gateway/storage vitest configs) so the typed lint can parse
the now-non-trivial config.
Verified: full db suite green 3x locally with the new config; each run
~13s, no timeouts, no OOM. eslint clean on both files.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>