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. A declaration that cannot express a shape has to leave a way back to code, and saying so now is cheaper than discovering it later.

The block itself

Five open lines, in the roadmap's own words

Each line names the failure it exists to remove and the measurement behind it. None of them has shipped. This list is generated from docs/ROADMAP.md, so it cannot describe a backlog the file does not have.

๐Ÿ“‹PW30a shape is a Python script, so stating one means writing and debugging a programCottony's tray, star, ball and props are four modules of imperative geometry code, and the shape each describes is not readable without running it.
๐Ÿ“‹PW31a format covering only primitives would leave every real asset in codeThe existing models use extruded outlines, crowned plates, radial arrays, annuli and boolean pockets, so the vocabulary has to be read off what they already do.waits on PW30
๐Ÿ“‹PW32a shape's own numbers are unreachable from the search that tunes everything elseGeometry 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.waits on PW13, PW30
๐Ÿ“‹PW33a shape cannot be reviewed without building it, so a wrong construction is found in the renderTwo wrong constructions of one tray's seats each looked reasonable while being written and were only visible once rendered, which is the expensive place.waits on PW30
๐Ÿ“‹PW34a declaration that cannot express a shape leaves no way back to codeAny format will meet a shape it cannot state, and forcing that shape into the format produces worse geometry than the script it replaced.waits on PW30