voxolith

The contract

Every check generators/contract runs against each registered entity generator, the quick, full and fine modes, and how to read a failure.

The engine and its hosts rely on a handful of promises from every EntityGenerator: stable identity, honest roles, deterministic output, a model that stands on its base. The private generators/contract package checks all of them for every registered generator in the repository. It is not published; it exists so that a new generator, or a change to an old one, cannot quietly break a host. The interface itself is documented with the engine under generator contract.

bun run --cwd generators/contract verify   # quick: defaults only (part of `bun run check`)
bun run --cwd generators/contract full     # every parameter extreme and every finer scale (CI)
bun run --cwd generators/contract fine     # defaults at the finer scales only

Each failure prints as ✗ what failed — detail, and the run ends with a count and a list of every problem. A generator is covered once its package is a dev dependency of the contract package and its register...Generators() is called at the top of tools/contract.ts.

What is checked

Not covered

@voxolith/gen-terrain is not an entity generator: it describes a region (a heightfield and water), takes a seed rather than an rng, and has its own checks in bun run --cwd generators/terrain verify (shape, river continuity, fillBrick against roleAt, determinism, picking).

The contract says nothing about whether a model looks right. Each package's own verify adds generator-specific checks (budgets, knobs that must respond, a building's hollowness and openings, a creature's hidden interior and footfalls), and the preview renderer is how a person judges the look.

On this page