Author a Voxel Model Test Case
Scaffold an asset-generation test case of
asset_kind = "voxel-model": a static 3D model a model sculpts out of opaque
#rrggbb voxels with the voxel binary, one recorded operation at a time, to
match a written brief. Read
Authoring a Voxel Model Test Case
for the full procedure;
Voxel cases is the
authoritative schema.
For a rigged, animated cube model see Author a Voxel Animation Test Case. For a smooth, meshed model built from a signed-distance field see Author a Mesh Model Test Case.
Layout
Section titled “Layout”A version lives at
test-cases/asset-generation/<difficulty>/<slug>/<version>/. A version with runs
recorded against it is frozen; revise a case by adding a new version.
test-cases/asset-generation/<difficulty>/<slug>/<version>/ test-case.toml # manifest: type, asset_kind, voxel, tool, output 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/brief.md # what to sculpt and how the tool behaves; seededA run seeds the brief plus voxel.config.json, an empty action log, and a blank
preview. The model sculpts toward the brief alone; the case declares no
[[reference]] and carries no target model.
- Pick a catalog slug and the subject to sculpt. It should read clearly at the
volume size from silhouette and palette alone, need no game context, and be
achievable in the
voxeloperation set: boxes, lines, spheres, ellipsoids, cylinders, and amirrorplane. A subject with a plane of symmetry suitsmirror. - Size the volume from real dimensions at a fixed scale so cases stay comparable. Pick a plausible real size in metres, then use 10 voxels per metre for smaller units whose longest side is about 8 m or less, and 5 voxels per metre for larger units. Keep the largest dimension roughly in the 40 to 150 band.
- Write
specs/brief.md: the subject and its silhouette, the volume and its orientation (which axis is up, which way is forward), the exact opaque#rrggbbpalette, and how the tool behaves. A sculpting operation records without rendering, so state thatvoxel renderruns before finishing to emit the geometry. Point the model at the binary’s--help, which is the operation contract. Keep the brief self-contained, and specify what to build rather than how. - Write
prompt.hbs. It renders in strict mode against{{variant.*}},{{#each specs}},{{workspace}},{{time_limit_hours}}, and{{voxel.*}}. A spec template sees{{version}},{{variant.*}}, and{{voxel.*}}, so a brief reads its volume from one source of truth and serves every size variant. - Write
test-case.toml: metadata (name,difficulty,tagsincluding3dandvoxel), the requiredchangelog,type = "asset-generation",asset_kind = "voxel-model", and thevariantslist. It is a root key, so it precedes the first table header, and the first entry is the default variant. - Declare
[voxel]:width,height(up), anddepthin voxels, plus abackgroundused as the preview clear color. It replaces[canvas], which resolution rejects on a voxel case. - Declare
[tool]withbinary = "voxel"and apreviewpath, and[output]with anactionspath. Both name single files such asmodel.pngandactions.json; the{part}token belongs to the per-part animated kinds and is rejected here. - Declare the single
overall[[domain]]a human rates the model under. The model is judged as a whole against its brief on that one rating, so the case declares no[[review_item]]checklist, no[model]rig, no[[reference]], no[build], and no[[check]].
skyshard, a symmetric forward-swept interceptor, is the worked example.
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>prompt catches strict-mode template and manifest errors, including a stray
{part} token on preview or actions and a stray [model], [canvas], or
[[reference]]. seed writes the seeded repository under tmp/, where you
confirm the brief and voxel.config.json are self-contained. To push edits into
a backend-driven run, force a re-ingest; see
Running the Local Service Stack.
Next steps
Section titled “Next steps”- Create a Voxel Model Variant to add a brief variation.
- Run a Test Case to exercise it end to end.
- Review a Run to assess the result.