Skip to content
quest'n'click

ContributeReferenceFor contributorsApplies from 4.5.0

Which tests run when

Cette page en françaisThis page on the GitHub wiki

Every test suite of the engine repository, the command that runs it, and when CI runs it: on a pull request, on main, in a candidate, in the release, every night or every week. Read with CI explained, which says what each workflow and job is.

The suites

"PR" is an ordinary pull request; "gate" means the job runs only when the plan opens that gate (CI explained), and always on main, on a tag and on a pull request labelled full-ci. "Release" is the release workflow on a v* tag. Every command runs in the engine repository.

SuiteCommandWhat it runsPRmainCandidateReleaseNightlyWeekly
Unit (Node)npm test (test:node)every tests/**/*.test.ts and the game's games/<GAME>/tests/, but the 9 heavy files and the 2 asset filesas coverage; on Node 24 (gate node24); on Windows without the POSIX files (gate windows)yesyes (release-check:ci)yes (release-check:ci)——
Coveragenpm run test:coveragethe unit suite and the asset tests under V8 coverage, then the floors of vite.config.ts and the ratchetyes (coverage job; ratchet warns)yes (ratchet strict)yesyes——
Assetsnpm run test:assetstests/pixel.test.ts, tests/studio-assets.test.ts (Python needed)inside coverageinside coverageinside coverageinside coverage——
Heavy solvernpm run test:heavy9 files one after the other: ownership, audit, canonical, memo, reference-proof, solver-oracle, dominance, partition, checkpoint-matrix——three times, each on a new runner (heavy ×3)—yes (heavy)—
Qualitynpm run qualityformat, code lint, knip, both TypeScript configurations, content lintyes (check)yesyesyes——
Docs truthnpm run docs:truthwhat the docs claim against the codeyes (check)yes————
Wikinpm run wiki -- checkthe manifest, pages, links, parity, examples; inside the unit suite as tests/wiki-*.test.tsyesyesyes (unit suite)check --publish (docs-publish)——
Game gatesnpm run build:game (verify:game, the bundle, verify:dist, spoilers, asset audit)the sample gameyes (check); the reference chapter and heroes (gate reference); a new game (gate secondGame)yesyesyes——
Baselinenpm run quality:baseline -- --check --distwitnesses, proofs, golden saves, public surface, test count, first visityes (check)yes————
Proofnpm run prove:gamethe exhaustive proof, global and by chapter, and solve:realityyes (check; reference, second-game by gate)yesyesyes—yes (prove)
Abstraction auditnpm run solve -- --audit-abstractionsthe sample proved with and without the abstractions——yes (release-check:ci)yes——
Corpusnpm run audit:corpusthe abstractions against the explicit search on random games————yes (500 seeds of each kind, four shards)—
Proof matrixnpm run prove:matrixthe twelve instances of docs/dev/PROOF-MATRIX.md————yes (matrix)—
Benchnpm run bencha generated 100-room game, timed and proved within a budget—————yes (prove, uploaded)
Playtestsnpm run playtestscommitted sessions replayed and summed upinside verify:gameyes--strict in verify:release--strict in verify:release—--strict (prove)
e2e, Chromiumnpm run e2e, e2e:weight, e2e:music, e2e:visual, e2e:perf, e2e:studio, e2e:a11y, e2e:pwa, e2e:tapsthe production build played by touch, at the keyboard, in French, with Canvasgate e2e, reference, secondGameyes————
e2e, WebKitthe same scripts with E2E_BROWSER=webkitgeneric and keyboard rows, the reference chapter, e2e:pwa (offline skipped)gate e2e, referenceyes————
e2e, Firefoxnpm run e2e:pwa, e2e:studio-hosted -- --browser=firefoxthe PWA scenario; the hosted Studiogate pwaFirefox, studioHostedyes————
Cross-runtimenpm run e2e:canonical, e2e:remix, e2e:speedrun, e2e:remix-speedrunthe same results in Node, Chromium, WebKit and Firefoxyes (every change)yesyes (500 Remix seeds)—yes (500 Remix seeds)—
Realitynpm run e2e:reality, npm run reality:xcheck -- --require-rust, the connectors' tests and fuzz, the Bridge on Postgressignals end to end; Biscuit in JS and Rust; connectorsgate realityyesreality:xcheck in release-check:ciyesfuzz, a minute per connector—
Hosted Studionpx vitest run tests/studio-server.test.ts …, npm run e2e:studio-hosted, e2e:studio-collabPostgres, S3, Keycloak; Chromium and Firefoxgate studioHostedyesstudio-install-smoke———
Packagesnpm run fresh-install, npm run external-consumer, npm run upgrade-check -- --from=previouspacked, installed outside the repository, upgradedgate freshInstall, upgradeyesyes, on the candidate's own archives———
Mutationnpm run test:mutation:core -- --set=<set>every gated set (Mutation testing)only with full-ci—yesyesyes (--fresh)—
Bridge loadsnpm run bridge:load, npm run runs:loadSQLite and Postgres——yes (medians)—yes—
Qualificationnpm run ops:qualifythe Bridge's deployment profile on Dockerwhen ops/, bridge/, scripts/pack.mjs or the dependencies change (qualify)same pathsyes (deployment-smoke)———
Field passesnpm run field:*what only people and real devices can check——the reports committed for the version are checkedreported in the notes——

The release workflow does not rebuild what the candidate made: its tests are release-check:ci and the mutation sets, on the tag's commit (Releasing).

Locally, before a pull request

Before a pull request gives the order. In short: npm run quality, npm run check, npm run test:assets, npm run verify:game, npm run quality:baseline -- --check; npm run release-check:local chains most of it. Run one suite at a time.

Find the test of a thing

  • A command: grep its key in tests/cmds.test.ts (every key has an example there) and tests/core.test.ts.
  • A layer rule: tests/boundaries.test.ts (Import boundaries).
  • The public names: tests/api-surface.json.
  • A browser behaviour: the scripts scripts/e2e*.mjs and scripts/e2e-*.ts (npm run e2e, e2e:taps, e2e:pwa, e2e:a11y…), run by CI in Chromium and WebKit (and Firefox for the PWA and the hosted Studio).
  • What a stop of the code walks: each stop of the Code tour names its test.
  • What a mutant judges: TESTS in tools/mutation-sets.ts lists, for each set, the test files that judge it (npx tsx tools/mutation-sets.ts --tests=<set>).

To change a command end to end, follow The dev loop.