Author a Mesh Model Test Case
Scaffold a new static mesh-model asset-generation
test case — a 3D model the model sculpts by compositing a continuous signed-distance
field and meshing it with a binary (mc → mc-model, sn → sn-model, or dc →
dc-model), one recorded operation at a time. This is the short version;
Authoring a Mesh Model Test Case
covers it in full, and
Manifests is the authoritative
schema.
A rigged, animated mesh instead? See Author a Mesh Animation Test Case. Discrete cube voxels rather than a meshed field? See Author a Voxel Model Test Case.
Layout
Section titled “Layout”A version lives at test-cases/<type>/<difficulty>/<slug>/<version>/ and is immutable once runs
reference it — revise by adding a new version.
test-cases/<type>/<difficulty>/<slug>/<version>/ test-case.toml # manifest: type, asset_kind, [voxel], [tool], [output], the overall domain variants/ # one standalone TOML file per variant (listed in `variants`) prompt.hbs # rendered into the harness instruction (NOT seeded) description.md # site blurb (NOT seeded) README.md # human overview (NOT seeded) specs/brief.md # what to sculpt + how the tool behaves — SEEDEDA run seeds only the brief, the binary on PATH, a pre-seeded <binary>.config.json,
and a blank preview. There is no target model and no operations schema — the
binary’s --help is the contract.
- Pick a catalog slug (e.g.
aegis-dc) and the subject to sculpt. It should read clearly at the volume size from silhouette and palette alone and be achievable by compositing CSG primitives (add-*/subtract-*,--blend,mirror). - Pick the algorithm for the surface you want — it fixes the
asset_kindand[tool].binary:mc(low-poly faceted),sn(smooth watertight),dc(crisp sharp edges; onlydcexposes a per-primitive--sharp/--smoothtag). The kind is a property of the whole version, not a variant axis. - Write
specs/brief.md: subject, silhouette, orientation, exact opaque#rrggbbpalette, the[voxel]volume, and — factually — which extractor meshes the field. Keep it self-contained; state the extractor’s behaviour, don’t prescribe the look. - Write
prompt.hbsusing only the documented template variables ({{variant.*}},{{#each specs}}) — it renders in strict mode — pointing at the binary’s--helpand restating that it mustrenderbefore finishing so the mesh is emitted. - Write
test-case.tomlper the Voxel cases schema: metadata (name,difficulty,tags— include3d/meshand the algorithm),type = "asset-generation",asset_kind("mc-model"/"sn-model"/"dc-model"), avariantslist (a root key, so it precedes the first table; first = default), the[voxel]volume, and the[tool]/[output]tables.[tool].binaryis the meshing binary;[tool].preview(e.g.model.png) and[output].actions(the op log) are each a single file — no{part}token. Add the singleoverall[[domain]]a human rates under; there is no[[review_item]]checklist. The extractedmesh.glbis emitted by core onrender, not declared in the manifest. - Reject the wrong tables: a meshed case declares no
[canvas], no[model](a static model has no rig), no[[reference]](no target), no[build], and no[[check]]. Writedescription.mdandREADME.md(both non-seeded).
Worked examples: the Aegis Bastion walking fortress, authored once per algorithm
(test-cases/asset-generation/medium/aegis-mc/v1.0.0, aegis-sn/v1.0.0, aegis-dc/v1.0.0). Read the one
matching your surface alongside the full guide before you start.
Validate
Section titled “Validate”npm run lint:specs # markdownlint-cli2 + cspell over test-cases/**tcab prompt --test-case <slug> --version <version> --variant <variant>tcab seed --test-case <slug> --version <version> --variant <variant>Render the prompt and inspect the seeded repository for every variant to confirm the manifest resolves and the seeded set is self-contained. After editing, force-re-ingest so a backend-driven run picks up the change — see Running the services locally.
Next steps
Section titled “Next steps”- Create a Mesh Model Variant to add a brief variation.
- Run a Test Case to exercise it end to end.
- Review a Run to assess the result.