Block G · Geometry as a declaration

Geometry as a declaration

Cottony's tray, star, ball and props are four modules of imperative geometry code, and the shape each one describes is not readable without running it. Stating a shape should not mean writing and debugging a program.

tray.geom.toml [[part]] op = "extrude_outline" outline = "rounded_rect" radius = 0.06 height = 0.018 [[part]] op = "radial_array" count = 6 BUILT six seats, one radial array reachable by the search radius and height are numbers in a file, not constants inside a module nothing can reach reviewable before it is built two wrong constructions of one tray each looked reasonable while being written

Read off what the assets already do

A format covering only primitives would leave every real asset back in code. The vocabulary comes from the existing models: extruded outlines, crowned plates, radial arrays, annuli and boolean pockets — not from a list of shapes that seemed reasonable.

Numbers the search can reach

Geometry constants live inside a module while the rig's live in a dataclass, so a search can reach the lighting and never the shape it is lighting. A declaration puts both in the same place, which is the whole reason this block is worth doing at all.

The escape hatch is part of the design

Any format will meet a shape it cannot state, and forcing that shape into the format produces worse geometry than the script it replaced. So the way back to code is a node, not a mode: a custom node names a function in the project, and the rest of the declaration stays data around it.