Symptom
node dist/cli/index.js validate --include-interference examples/gallery/meta-glasses.kcad.ts reports mechanism: broken with 16 failures (10 mechanism.orphan-part, 6 mechanism.interpenetration).
Orphan parts: left/right smoked lens inserts, left/right Meta camera bezels + glass, left/right privacy LED diffusers, left/right electronics temples, left/right hinge barrel pairs, right touch-control strip — none of them are reached from the mate graph rooted at the frame.
Interpenetration: frame↔left/right temples (74 mm³), camera-bezel↔camera-glass (12 mm³), temple↔hinge-barrel pairs (103 mm³), right temple↔touch-strip (18 mm³).
Root cause
The meta-glasses build is decorative geometry without any mate edges (it's a static visual model). The new physics loop treats every part as needing a mate path to the frame; absent that, all decorative pieces flag as orphans, and their incidental contacts with each other flag as unexplained interpenetration.
Fix scope
Two reasonable approaches:
- Stop treating this as an assembly — author it as a single fused part (one big union, or a small number of parts joined by
fastened mates with proper topology connectors) so the orphan + interpenetration criteria don't apply. ~hour of refactoring.
- Add fastened mates for every decorative piece (lens insert ↔ frame, camera bezel ↔ frame, etc.) and use topology-bound connectors so the rigidity check passes. ~2-3 hours given the part count.
Either way needs the offset trick from examples/kinematic/luxo-lamp.kcad.ts (SPRING_TEST_OFFSET) for the fastened mates to pass the rigidity invariant.
Spec
- docs/specs/2026-06-01-physics-grounded-loop-design.md §criterion 4 / §criterion 2
- docs/plans/2026-06-01-physics-loop-P3-sweep-and-demote.md
Symptom
node dist/cli/index.js validate --include-interference examples/gallery/meta-glasses.kcad.tsreportsmechanism: brokenwith 16 failures (10mechanism.orphan-part, 6mechanism.interpenetration).Orphan parts: left/right smoked lens inserts, left/right Meta camera bezels + glass, left/right privacy LED diffusers, left/right electronics temples, left/right hinge barrel pairs, right touch-control strip — none of them are reached from the mate graph rooted at the frame.
Interpenetration: frame↔left/right temples (74 mm³), camera-bezel↔camera-glass (12 mm³), temple↔hinge-barrel pairs (103 mm³), right temple↔touch-strip (18 mm³).
Root cause
The meta-glasses build is decorative geometry without any mate edges (it's a static visual model). The new physics loop treats every part as needing a mate path to the frame; absent that, all decorative pieces flag as orphans, and their incidental contacts with each other flag as unexplained interpenetration.
Fix scope
Two reasonable approaches:
fastenedmates with proper topology connectors) so the orphan + interpenetration criteria don't apply. ~hour of refactoring.Either way needs the offset trick from
examples/kinematic/luxo-lamp.kcad.ts(SPRING_TEST_OFFSET) for the fastened mates to pass the rigidity invariant.Spec