Three of the six Vitest projects ran on Vitest's own testTimeout: 5000 and five on its hookTimeout/teardownTimeout: 10000, and all 788 Testing Library waits in the web unit project ran on asyncUtilTimeout: 1000. None of those numbers was chosen here, and all of them were sized for an idle machine rather than for three or four concurrent worktree sessions each running a full local:gate on eight cores. #2292, #2278, #2250, #1942 and #1742 were each that class, diagnosed one site at a time. This is the complement of #1596, not a retreat from it: every fix that issue produced stands, and no race is hidden here. What changes is that a correct, deterministic test is no longer cut off by a budget nobody picked. - vitest.shared.mts exports frozen TIMEOUTS / INTEGRATION_TIMEOUTS; all six projects spread one of them, clients/launcher importing the shared module for the first time to do so. - Both web projects configure Testing Library's asyncUtilTimeout. The storybook one needs its own setup file, deliberately outside .storybook/ and free of setProjectAnnotations so the automatic preview-annotation provisioning (#1898) is untouched. - 28 per-suite restatements of the integration project's own budget are gone, so raising the shared value now moves every site under it. The handful that genuinely differ — cross-process lock contention, a full OAuth round trip — keep their budget as a named constant that says why. - AppRenderer's waitFor no longer asks for exactly its enclosing budget, which it could never win (#2292's shape); cli's e2e child timer drops below the project budget so the bound carrying the diagnostic is the one that fires. - The transition auto-settle's slack term is named RAF_SLACK_MS and raised; the term derived from HEADER_ANIM_MS is untouched. The two answer to different things and must not be scaled as one number. - The 19 Playwright budgets scattered across three web smokes become four named constants in scripts/lib/browser-timeouts.mjs. scripts/verify-test-timeouts.mjs resolves each project through Vitest itself and asserts the budgets, the asyncUtilTimeout sites, and that retry stays unset. It was observed red against the pre-change config: unit/tui/launcher at testTimeout 5000, five projects at hookTimeout 10000, both asyncUtilTimeout sites unmet. Closes #2323 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PsmUAZ6aLUAFqenjJKSSRp Signed-off-by: cliffhall <cliff@futurescale.com>
24 lines
1.2 KiB
JSON
24 lines
1.2 KiB
JSON
{
|
|
// Typecheck the __tests__ dir. The build config (`tsconfig.json`) emits with
|
|
// `rootDir: ./src`, so the tests can't join it — this is a `noEmit` sibling
|
|
// rooted at the package so it can reach both `__tests__` and the `src` the
|
|
// tests import. See #1791.
|
|
"extends": "./tsconfig.json",
|
|
"compilerOptions": {
|
|
"noEmit": true,
|
|
// Wide enough to contain `vitest.shared.mts`, which `vitest.config.ts`
|
|
// imports for the shared test budgets (#2323). `rootDir` only shapes error
|
|
// reporting under `noEmit`, and the emitting build config next door keeps
|
|
// its own `./src` — this project compiles nothing. `cli` and `tui` reach
|
|
// the same file with no `rootDir` at all, which infers the same thing.
|
|
"rootDir": "../..",
|
|
// Same import: `.mts` in a specifier needs this, and it is safe for the
|
|
// same reason — nothing here is emitted. `cli` and `tui` both set it.
|
|
"allowImportingTsExtensions": true,
|
|
"types": ["node"]
|
|
},
|
|
// `vitest.config.ts` lives here (not the src project) because the build
|
|
// config's `rootDir: ./src` rejects it — same reason as the tests.
|
|
"include": ["__tests__/**/*", "vitest.config.ts"],
|
|
"exclude": ["node_modules", "build"]
|
|
}
|