quest'n'click 4.5.0 · r1

Built for quest'n'click 4.5.0, revision r1. Whether it is published, and which one is current, is recorded at publication.json.

Which tests run when

Français · Type: reference · Audience: contributor · Context: engine repository · Status: ready · Applies from: 4.5.0

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).

Limit · heavy-not-on-pr The heavy solver tests do not run on an ordinary pull request. The full-ci label starts a candidate run, which runs them three times; otherwise a change to the solver that breaks them is seen by the next nightly. Run npm run test:heavy locally (about 13 minutes on a laptop, one file after the other) before asking for a review of such a change.

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

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


Edit the source of this page · Report an error