Repository navigation
EN Contribute 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.
"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.
| Suite | Command | What it runs | PR | main |
Candidate | Release | Nightly | Weekly |
|---|---|---|---|---|---|---|---|---|
| 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 files |
as coverage; on Node 24 (gate node24); on Windows without the POSIX files (gate windows) |
yes | yes (release-check:ci) |
yes (release-check:ci) |
— | — |
| Coverage | npm run test:coverage |
the unit suite and the asset tests under V8 coverage, then the floors of vite.config.ts and the ratchet |
yes (coverage job; ratchet warns) |
yes (ratchet strict) | yes | yes | — | — |
| Assets | npm run test:assets |
tests/pixel.test.ts, tests/studio-assets.test.ts (Python needed) |
inside coverage | inside coverage | inside coverage | inside coverage | — | — |
| Heavy solver | npm run test:heavy |
9 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) |
— |
| Quality | npm run quality |
format, code lint, knip, both TypeScript configurations, content lint | yes (check) |
yes | yes | yes | — | — |
| Docs truth | npm run docs:truth |
what the docs claim against the code | yes (check) |
yes | — | — | — | — |
| Wiki | npm run wiki -- check |
the manifest, pages, links, parity, examples; inside the unit suite as tests/wiki-*.test.ts
|
yes | yes | yes (unit suite) |
check --publish (docs-publish) |
— | — |
| Game gates |
npm run build:game (verify:game, the bundle, verify:dist, spoilers, asset audit) |
the sample game | yes (check); the reference chapter and heroes (gate reference); a new game (gate secondGame) |
yes | yes | yes | — | — |
| Baseline | npm run quality:baseline -- --check --dist |
witnesses, proofs, golden saves, public surface, test count, first visit | yes (check) |
yes | — | — | — | — |
| Proof | npm run prove:game |
the exhaustive proof, global and by chapter, and solve:reality
|
yes (check; reference, second-game by gate) |
yes | yes | yes | — | yes (prove) |
| Abstraction audit | npm run solve -- --audit-abstractions |
the sample proved with and without the abstractions | — | — | yes (release-check:ci) |
yes | — | — |
| Corpus | npm run audit:corpus |
the abstractions against the explicit search on random games | — | — | — | — | yes (500 seeds of each kind, four shards) | — |
| Proof matrix | npm run prove:matrix |
the twelve instances of docs/dev/PROOF-MATRIX.md
|
— | — | — | — | yes (matrix) |
— |
| Bench | npm run bench |
a generated 100-room game, timed and proved within a budget | — | — | — | — | — | yes (prove, uploaded) |
| Playtests | npm run playtests |
committed sessions replayed and summed up | inside verify:game
|
yes |
--strict in verify:release
|
--strict in verify:release
|
— |
--strict (prove) |
| e2e, Chromium |
npm run e2e, e2e:weight, e2e:music, e2e:visual, e2e:perf, e2e:studio, e2e:a11y, e2e:pwa, e2e:taps
|
the production build played by touch, at the keyboard, in French, with Canvas | gate e2e, reference, secondGame
|
yes | — | — | — | — |
| e2e, WebKit | the same scripts with E2E_BROWSER=webkit
|
generic and keyboard rows, the reference chapter, e2e:pwa (offline skipped) |
gate e2e, reference
|
yes | — | — | — | — |
| e2e, Firefox |
npm run e2e:pwa, e2e:studio-hosted -- --browser=firefox
|
the PWA scenario; the hosted Studio | gate pwaFirefox, studioHosted
|
yes | — | — | — | — |
| Cross-runtime |
npm run e2e:canonical, e2e:remix, e2e:speedrun, e2e:remix-speedrun
|
the same results in Node, Chromium, WebKit and Firefox | yes (every change) | yes | yes (500 Remix seeds) | — | yes (500 Remix seeds) | — |
| Reality |
npm run e2e:reality, npm run reality:xcheck -- --require-rust, the connectors' tests and fuzz, the Bridge on Postgres |
signals end to end; Biscuit in JS and Rust; connectors | gate reality
|
yes |
reality:xcheck in release-check:ci
|
yes | fuzz, a minute per connector | — |
| Hosted Studio |
npx vitest run tests/studio-server.test.ts …, npm run e2e:studio-hosted, e2e:studio-collab
|
Postgres, S3, Keycloak; Chromium and Firefox | gate studioHosted
|
yes | studio-install-smoke |
— | — | — |
| Packages |
npm run fresh-install, npm run external-consumer, npm run upgrade-check -- --from=previous
|
packed, installed outside the repository, upgraded | gate freshInstall, upgrade
|
yes | yes, on the candidate's own archives | — | — | — |
| Mutation | npm run test:mutation:core -- --set=<set> |
every gated set (Mutation testing) | only with full-ci
|
— | yes | yes | yes (--fresh) |
— |
| Bridge loads |
npm run bridge:load, npm run runs:load
|
SQLite and Postgres | — | — | yes (medians) | — | yes | — |
| Qualification | npm run ops:qualify |
the Bridge's deployment profile on Docker | when ops/, bridge/, scripts/pack.mjs or the dependencies change (qualify) |
same paths | yes (deployment-smoke) |
— | — | — |
| Field passes | npm run field:* |
what only people and real devices can check | — | — | the reports committed for the version are checked | reported 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-prThe heavy solver tests do not run on an ordinary pull request. Thefull-cilabel starts a candidate run, which runs them three times; otherwise a change to the solver that breaks them is seen by the next nightly. Runnpm run test:heavylocally (about 13 minutes on a laptop, one file after the other) before asking for a review of such a change.
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.
-
A command: grep its key in
tests/cmds.test.ts(every key has an example there) andtests/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*.mjsandscripts/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:
TESTSintools/mutation-sets.tslists, 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.
-
npm test,npm run test:node,npm run test:coverage,npm run test:assets,npm run test:heavy,npm run verify:game,npm run prove:game,npm run prove:matrix,npm run audit:corpus,npm run e2e. - CI explained, The coverage ratchet, The quality baseline, Mutation testing.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Start (6)
Play (9)
Install (17)
- Requirements
- Install from the release archive
- Install from npm, once published
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits