feat(core): add ellipse ring and path repeat - #118
Conversation
|
Implementation direction looks good and CI is green, but I found one stable-API blocker before merge: PathRepeat has no vertical placement / Y offset. The new placement carries only an XZ ellipse path and expands the source assembly at local Y=0. Because PathRepeat references an assembly directly rather than an anchored Instance, authors cannot cleanly reuse the same arcade/module at an arbitrary global Y without baking that Y into every assembly member (which inflates assembly bounds/budgets) or moving the whole construct into a section. Please add an explicit vertical placement semantic before this becomes stable schema—e.g. While touching the API, please also review closed-path phase semantics. Today a full closed ellipse effectively has to be expressed as 0→360, so authors cannot phase-shift the sample pattern (for example, start the 24 bays at 7.5°) without changing the path geometry. This is secondary to the missing Y offset, but now is the cheapest point to make the v1 sampling contract intentional. No objection to the bounded EllipseRing + ellipse-only PathRepeat design itself; keep CircleRing/RadialRepeat behavior unchanged. |
|
Follow-up review of head Verified from the actual diff/head:
I do not see a remaining blocker in #118. Keep it unmerged until the normal human merge decision; after #116 lands first, refresh/rebase #118 only if main moved in a way that requires it. |
Summary
EllipseRingsupport for deterministic true-ellipse voxel shells, partial arcs, bounds, budget estimation, and ordinary provenance/support behavior.PathRepeatfor reusable assemblies with stable closed/open sampling, optional analytic tangent orientation, conservative rotated-envelope budgets and bounds, and source-aware support diagnostics.Fixtures and validation
pnpm test: passed; build passed; 207 tests passed across core (188), importer-schem (3), exporter-schem (6), and CLI (10).pnpm typecheck: passed.pnpm lint: passed.git diff --check: passed.Closes #117