- pure CustomPaint builders, semantics pinned with the yoclip agent:
rect/circle size exactly to their box with inside strokes
(Container semantics); line/polygon size to the tight geometry bounds
plus stroke inset, painted at the node origin
- polygon.points is a FLAT [x1, y1, x2, y2, ...] array (>= 3 pairs,
trailing odd coordinate ignored, numeric strings tolerated); line has
one canonical form (x1/y1/x2/y2)
- opacity multiplies fill/stroke alpha; missing fill AND stroke renders
SizedBox.shrink; UiViewTreeNormalizer maps PascalCase aliases
- tests: 15 widget/painter tests incl. shouldRepaint branch coverage;
skill docs: Shapes section in the node catalog