Author a Full-Stack Test Case
Scaffold a full-stack test case: a playable game a model builds from a seeded specification while producing the game’s own assets during the same run. Everything in Author an End-to-End Test Case holds; this page covers what full-stack adds. Read Authoring a Full-Stack Test Case for the full procedure and the asset contract.
Layout
Section titled “Layout”A version lives at test-cases/full-stack/<difficulty>/<slug>/<version>/ and
follows the end-to-end layout, with specs/assets.md added and assets/
omitted.
test-cases/full-stack/<difficulty>/<slug>/<version>/ test-case.toml # manifest: type = "full-stack", build, specs, domains variants/ # one standalone TOML file per variant prompt.hbs # rendered into the harness instruction; not seeded changelog.md # required per-version entry; not seeded description.md # site blurb; not seeded specs/ # the spec, including assets.md; seeded reference/ # mockup source, rendered to screenshots; not seeded workspaces/ # starter project seeded at the run root (optional)Follow the end-to-end steps for everything shared, with these differences.
-
Set
type = "full-stack"intest-case.toml, plusasset_dimension = "3d"when the game’s art is 3D. The two keys schedule the run onto the matching image:test-cabinet-full-stack-2dputsdraw,draw-sheet,particle-2d,sfx-synth,sfx-sample, andmusicon the model’sPATH, andtest-cabinet-full-stack-3daddsvoxel,voxel-anim, andparticle-3d. The dimension defaults to"2d"and applies to every variant of the version. -
Leave the case’s art to the model. A full-stack case declares no
assetslist, and resolution rejects the asset-generation tables (asset_kind,[sheet],[canvas],[tool],[output],[voxel],[model],[ui],[material],[particle]). -
Declare the audio palette in
[audio] packs, a list ofname@versionrefs. It is required, and the run container carries exactly what it names, so declare the full published set unless the brief calls for a narrower one. The first entry of each kind is what a tool config naming no pack plays. See[audio]. -
Write
specs/assets.md, the asset-production contract: every asset the game needs, which binary produces it, where the file lands in the workspace, and how the build wires it in. Seed it for every variant. -
Word the
[[domain]]and[[review_item]]entries so the produced art, motion, effects, and sound are first-class quality dimensions.hollowdeepsplits its domains intosimulationfor the code andpresentationfor the produced assets; mirror that split. -
When the game plays a produced particle
system.json, declarepackages = ["@clockwyrks/particle-runtime"], and add"@clockwyrks/voxel-runtime"when it draws a produced voxel model. The workspacepackage.jsondeclares each asfile:./.vendor/packages/<name>, and the case’sinitcommand isnpm ci && npx playwright install chromium. -
Ship a
package-lock.jsonbeside every workspacepackage.json. It links each package and engine dependency at its.vendor/packages/path, so generate it from a staged package store, and regenerate it whenever thepackage.jsonor the store’s versions change:Terminal window # In microservice-driver.npm cinode scripts/stage-tcab-packages.mjs /tmp/tcab-packages# In test-suites.node scripts/workspace-lockfiles.mjs --store /tmp/tcab-packages <version-folder>node scripts/workspace-lockfiles.mjs --store /tmp/tcab-packages --check <version-folder> -
Keep the asset-quality wording out of
prompt.hbs. The harness prepends the standing full-stack quality directive at render time. -
Keep the build self-contained. It bundles the committed asset files that the run produced, because the generation binaries are on
PATHonly while the run is live. A build that shells out todrawor its siblings fails wherever those binaries are absent.
test-cases/full-stack/medium/hollowdeep/v1.0.0/ is the worked example a new
case should resemble.
Validate
Section titled “Validate”Run these for every variant.
npm run lint:specstcab prompt --test-case <slug> --version <version> --variant <variant>tcab seed --test-case <slug> --version <version> --variant <variant>Confirm the manifest resolves, that the seeded set including specs/assets.md
is self-contained, and that no asset-generation table slipped in.
Next steps
Section titled “Next steps”- Create an End-to-End Variant. Variants work identically for a full-stack case.
- Run a Test Case to exercise it end to end.