The prompt becomes typed intent — dimensions, constraints, fasteners, tolerances.
A validated JSON spec. The editable source of truth for the part.
A deterministic CAD engine emits OpenSCAD, then solid geometry.
Wall thickness, overhang, manifold, bed fit — checked before export.
STL now, STEP and 3MF next. Parameters travel with the file.
The model never emits triangles directly. It emits BullSpec — a typed JSON description of parameters and features — and a deterministic CAD engine turns that into geometry. That is why "make it 20 mm wider" changes one number instead of producing an unrelated part.