Repository navigation
EN Team Known Limits
Français · Type: reference · Audience: author, admin · Context: hosted Studio · Status: ready · Applies from: 4.4.0
The Studio Server (hosted team Studio) · contract: experimental · verified by CI (support matrix of 4.4.0, 2026-10-23): Postgres, S3 and Keycloak in CI; Chromium and Firefox (job studio-hosted); WebKit on macOS, by hand only · automated checks: jobs
studio-hosted,studio-install-smoke; CI planstudioHosted; 3 test files · people's passes:studio-hostednot run (#149),studio-collabnot run (#150),studio-previewnot run (#166),studio-assets-hostednot run (#167),studio-mcp-remotenot run (#196),studio-oidc-genericnot run (#197) · known limits:one-instance,preview-of-a-revision,preview-text-only,preview-kept,game-frame-idle,diagnostics-on-worker,read-revision,health-bounds,worker-lanes,snapshot-shared,outside-folder,assets-hosted,local-only-features,base-revision-scope,room-editor-save,groupings-span-by-hand,undo-not-for-all,people-limits,browsers
What the team Studio (the Studio Server) does not do, or does only within bounds, as of the current code. Each limit says where it applies; the pages linked give the details.
Limit ·
one-instanceOne game per instance, and one instance serving writes at a time: the server takes a service lease, and a second instance waits for it. During a redeploy writes are refused for a short while (see Redeploys).
Limit ·
preview-of-a-revisionThe game in the Studio is the preview of a revision (4.2.2): after each change the worker builds the head (a burst of changes builds its last revision only), and the room view loads it once built, unless a placement is not saved. Meanwhile the frames show the last ready preview, and the label under the room view says which revision it is, the one building, and a revision that does not build, with its reason. A save made in other content asks before it is resumed: Resume here, Restart, or Stay in its own revision (ADR 0026). The Play tab keeps the preview it loaded until "Load the latest preview".
Limit ·
preview-text-onlyA preview is built from the game's text files only (sources, data): a game whose code imports a stylesheet or an image cannot be previewed.
Limit ·
preview-keptEach revision's preview is kept, with no expiry:gcnever collects a blob a preview names. The base/preview/<rev>/is written into the page and its code, so few files are shared between revisions (under 1 MB of code per revision for the demo game: a design figure, not a measure, from the 4.2.2 preview spike, 18 Oct 2026).
Limit ·
game-frame-idleA game frame left idle past its 15-minute game session shows nothing new: "Reload view" (or the Play tab) opens it again.
Limit ·
diagnostics-on-workerThe diagnostics that run the game's code (lint, solve, playtests) run on the worker, with the game's own commands (4.2.2); the solver stops after 45 s there and says it was cut short. Every read says the revision it was made at: the Check tab shows it, and marks its results stale once the head has moved on.
Limit ·
read-revisionA read's revision is the journal's head: an instance that does not hold the lease yet (a deploy) may answer from a folder behind it, and a new history (an import, a restore) is not told apart from an older revision.
Limit ·
health-boundsThe header's health at a revision runs the validator, then the solver from a new game (45 s at most), on the worker, after each burst of changes. A bisection names the first failing revision in at most ⌈log₂ n⌉ judgements, never who made it. A solver cut short says "unknown", never "valid", and stops a bisection; a revision that fails to be judged five times says "cannot be judged". An older verdict is shown greyed, never green. A Check run holds the instance's reads while the worker runs its diagnostics: a write waits for it. See Health and metrics routes.
Applies from 4.4.0
Limit ·
worker-lanesThe worker runs one job at a time per lane (4.4.0): a preview's build (or a published build) in its own lane, every other kind in the other, so two children at most at once. Each revision asks it for three jobs: a preview's build, the validator and a solver run (up to 45 s); the preview no longer waits behind the other two, and the next change's validation can still wait for them. A bisection asks for up to two jobs per revision it judges. Each lane holds 8 jobs at most (running or waiting); the next is refused (429).
Limit ·
snapshot-sharedSince 4.4.0 one snapshot per revision is packed (under the lock, the folder repaired) and shared by the preview, the health, the published builds and the engine's upgrade, given again while the head has not moved. Its files are stored 8 at a time, and a blob this instance stored less than an hour ago is not written again. The Studio answers as soon as it has read the worker's result, its staging deleted after. What each phase takes is in thepreviewlog line and instudio_preview_phase_seconds. Vite's cache is not kept between jobs: avite builddoes not use it, and a folder the game's code writes in must not outlive its job (ADR 0028).
Limit ·
outside-folderA game that imports files outside its own folder cannot run on the worker.
Limit ·
assets-hostedUploads are 10 MiB at most once decoded, typed by their bytes: PNG, JPEG or WebP images (a decor: PNG or JPEG), Ogg, MP3 or WAV sounds (a local Studio also takes M4A, FLAC, AAC, Opus and WebM). A hosted Studio does not keep an uploaded sheet itself. Prepare is refused, and the game is prepared on a local Studio, past about 31 MiB of art and sounds (in base64) or about 22 MiB of prepared files, with asources.json, or when the new manifest would lose an image or a sound. Published builds serve the prepared set as it is now. One job runs at a time, four more wait (429 past them); a job's state is lost at a restart. See Hosted assets.
Limit ·
local-only-featuresCaptures (and the diff's before/after captures) are not available on a hosted Studio. The Play tab shows the game with its DEV panel; the state inspector, the rule explainer and the replays beside it need the game on the Studio's origin, so the local Studio only. The Assistant is not on a hosted Studio yet. A hosted Studio's MCP offers no screenshots, test suite, documentation or asset prompts (Remote MCP).
Limit ·
base-revision-scopeSince 4.2.3 the Studio's editors send the revision of what they read (x-studio-base) with each write that belongs to a read (a room, the storyboard, the notes, the groupings, the voices…), and a file someone else wrote since is a 409. The check is per file. A write that derives a file (the storyboard's Markdown export) sends none. The CLI's and the MCP's clients send none either: their writes are made on the file as it is, within the span rules (409).
Limit ·
room-editor-saveThe room editor's own Save does nothing on a hosted Studio: "Save layout" in the Studio saves (the editor's page is the game's, and only the member starts a write).
Limit ·
groupings-span-by-handThe spangroupings(the scenario map) is taken by a write like any other, but it cannot be taken ahead, released or taken over by hand: the API's list of span names does not include it (400, "spansis a list of span names"), although the Spans panel lists it.
Limit ·
undo-not-for-allUndo takes back your own undoable operations only. Uploads, cuts, Prepare, a Git import and the rename of the former name are written without an undo: a backup taken before is their way back.
Limit ·
people-limitsThree fixed roles, no per-room right. A pending invitation cannot be withdrawn. The audit API gives the 200 latest entries, without paging. No command-line subcommand manages members (Managing members). A provider that issues opaque access tokens (GitLab's OAuth applications, at the time of writing) serves the browser but not the CLI nor the remote MCP (Generic OIDC and GitLab).
Limit ·
browsersCI runs the hosted e2e on Chromium and Firefox; WebKit on macOS keeps the game's partitioned cookie, and is run by hand only (the support matrix of 4.4.0, 23 Oct 2026). WebKit on Linux (GNOME Web) stores no cookie a frame of another host sets: the game's frames stay empty there. A real Safari, on macOS and iOS, is thestudio-hostedhuman pass, not yet made.
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