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. Set the case’sinitcommand tonpm installso the injectedfile:dependencies resolve. - 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.