diff --git a/AGENTS.md b/AGENTS.md index face4fb7..4f457e24 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -174,9 +174,12 @@ true` ⇒ `history` required; `slashCommands` ≠ `'none'` ⇒ `commands` requir - Whiteboard (TanStack DB over libSQL): never write to the db inside a collection subscription, effect, or render body: it triggers a re-render storm. Writes go in event handlers only. -- The whiteboard test suite (`packages/extensions/whiteboard/test`) runs in CI only, never locally: - not one test, not `--filter`'d. Local gates for whiteboard changes are typecheck/build/lint; - behavior evidence comes from a green CI run on the PR. +- The whiteboard integration tests (`packages/extensions/whiteboard/test/*.it.test.ts` and the + browser project) each boot a real Chromium + server; unit tests there are plain node. Its vitest + config self-caps `maxWorkers` at 3 off-CI (`localForkCap`), which makes local runs safe: build + first (`pnpm turbo run build --filter=@conciv/extension-whiteboard`), then `pnpm exec vitest run` + from the package. Never bypass or remove that cap; uncapped runs have saturated a workstation + before. - The widget bundle must externalize every `@conciv/extension/*` subpath and shared Ark/Solid deps; a second bundled copy splits the Solid/Ark context and extension popovers render at 0,0. Guarded by the mount-externals build test; don't weaken it. diff --git a/packages/extensions/whiteboard/vitest.config.ts b/packages/extensions/whiteboard/vitest.config.ts index db982a71..62e8e608 100644 --- a/packages/extensions/whiteboard/vitest.config.ts +++ b/packages/extensions/whiteboard/vitest.config.ts @@ -3,12 +3,21 @@ import {playwright} from '@vitest/browser-playwright' import {defineConfig} from 'vitest/config' import {ciTest} from '@conciv/vitest-config' +function localForkCap(): {maxWorkers?: number} { + if (process.env.GITHUB_ACTIONS !== undefined) return {} + const cap = Number(process.env.VITEST_MAX_FORKS) + if (Number.isInteger(cap) && cap >= 1) return {} + return {maxWorkers: 3} +} + export default defineConfig({ test: { ...ciTest(), + ...localForkCap(), projects: [ { test: { + ...localForkCap(), name: 'whiteboard', environment: 'node', include: ['test/**/*.test.ts', 'test/**/*.it.test.ts'], @@ -20,6 +29,7 @@ export default defineConfig({ plugins: [solid()], test: { ...ciTest(), + ...localForkCap(), name: 'whiteboard-browser', include: ['test/**/*.browser.test.tsx'], testTimeout: 200_000,