Phase 3 of the decoupling refactor (behavior-preserving):
- registry.py: atomic_executor decorator, ALL_ATOMIC_IDS with
fail-fast registration validation, execute_node dispatcher
- executors/: one module per family (extrude, revolve, surfaces,
loft_sweep, bodies, context, primitives, parametric, holes,
dressup, patterns) + shared helpers in executors/common
- executors/__init__: explicit aggregation + completeness check
(registry must cover every declared atomic id at import time)
- runtime.py: slimmed to entry points (analyze_cdsl/rebuild_cdsl)
plus full historical re-exports incl. test-referenced privates
Adding an atomic operation now touches only one executor module and
its schema contract; the shared registry never changes. Verified
against baseline: zero new failures.