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 onlyEach 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.
Share codes
What a generator author must know about share codes - parameter specs as the shared state, step grids, the layout hash, and versions.
The toolkit
@voxolith/gen-kit: the Volume, capsule and line rasterisers, seeded noise, branch growth, clusters, canopy carving, rock masses, rigging and refinement.