Checkpoint review for the shapes-first pivot: all 16 ops of shapes-v1 (vocabulary.md §1). The canvas primitive is the shape, not the website component — users draw approximate shapes and MaoBi makes them crisp and styled; components exist only behind opt-in glyphs. The model emits {op, from, params, snap} and no coordinates: every bbox and path below stands in for geometry derived from ink. All randomness is seeded, so every frame is fully deterministic. Flag anything that fails the taste bar. (The pre-pivot 18-component web-ui gallery lives in git history; its pack still backs the glyph components.)
Shapes (6 ops)
The 6 base ops — every stroke-set becomes one of these unless a glyph or decorative signature says otherwise. Geometry (bbox, path) arrives from the ink; the renderer only makes it crisp. smooth_path keeps the user's own silhouette — the flame below is the fire-shape demo.
body size from small bbox · {"text":"Sketch it. Ship it."}heading weight from tall bbox · {"text":"Big idea"}colored, centered · {"text":"MaoBi","fill":"#4f6ef7","align":"center"}
smooth_path
flame silhouette · fire gradient · {"gradient":{"colors":["#f76e6e","#f5a623"],"direction":"down"}}hand-drawn star · solid fill · {"fill":"#f5a623"}open squiggle stays a stroke · {"stroke":{"color":"#1a1a1a","width":3}}
Glyph components (6 ops)
Semantics are opt-in: a single letter alone inside a box picks the component; nearby handwriting routes to its label param.
Chart + lookup ops on the same shapes contract: geometry from ink, precision from code. periodic_table is the lookup-asset proof — a real 18×7 main block plus separated f-block lanes, category-tinted, with symbols auto-hidden below 9px cells. Everything seeded and deterministic.