-
generate-registry/— the registry compiler (npm run generate:registry,--checkfor the CI parity gate). See its README. -
validate-library/— schema, facet and capability lint forlibrary/(npm run validate:library). -
navigation/— renders the product-map reference and syncs the web route snapshot (npm run generate:product-map,npm run sync:web-routes). -
smoke-test.sh— CLI-level smoke tests (unit tests, command basics, template creation). Engine optional; engine-dependent checks are skipped when no editor is running. -
build-api-docs.mjs— compiles the engine's class-reference XML intoassets/api-docs.json.gz(served offline by thesummer_api_docsMCP tool). Needs an engine checkout:node scripts/build-api-docs.mjs /path/to/summerengine(orSUMMER_ENGINE_ROOT). The asset is committed; rerun after engine API changes. -
compat-smoke.sh(+compat-smoke.mjshelper) — latest-MCP x candidate-engine compatibility gate. Engine REQUIRED. See below.
bash scripts/compat-smoke.sh [--project <path>]
Run it before every engine release AND before every npm publish of summer-engine. Both sides of the MCP <-> engine HTTP contract are unit-tested only against mocks (MCP tests mock the engine; engine tests mock the client), so a contract drift between them is invisible to CI. That is exactly how MCP 2.7.0-2.8.0 shipped appending SaveScene into multi-op batches while engine 0.5.60+ rejects such batches wholesale (failure_reason: "unsupported_transport") — every scene mutation via MCP was broken for weeks with all tests green.
What it does:
- Builds the local CLI (
npm run build) and starts the REAL built MCP server (dist/bin/summer.js mcp) over stdio, driving the actualsummer_*tool handlers — including the scene-tools op-splitting logic — against the running engine. No hand-rolled HTTP. - Exercises:
summer_get_project_context;summer_add_nodeverified via scene state;summer_batchwith a mixed op list including anInstantiateScene(asserts the single-op split lands as 3 sequential requests against the real engine); aRunVerificationprobe usingsave_frame("compat");SimulateInputas a single op (failure_reason: "not_running"counts as a pass when no game is running). - Any
unsupported_transporton a mutation path exits 1 with a loud message naming the incompatible CLI x engine version pair. - Cleans up the nodes and the throwaway prefab scene it created. Completes in well under 2 minutes.
Precondition: a running Summer editor with a scratch project open (it mutates the open/main scene). Auto-detected via the ~/.summer/instances registry, falling back to the legacy ~/.summer/api-port/api-token files. --project <path> is required only when several editors are running.
Exit codes: 0 compatible, 1 incompatibility or failure, 2 precondition not met (no running editor / no scene).
Env: SUMMER_COMPAT_SKIP_BUILD=1 reuses an existing dist/ build; SUMMER_COMPAT_TIMEOUT_MS overrides the global watchdog (default 115000 ms).