- roof-system: replace BoxGeometry placeholders (initial swap + empty-roof
merged shell) with a group-less degenerate geometry — a Box's 6 groups
against the roof's 4-material array crashed GLTFExporter on every scene
with a segment-less roof node (prod: 'reading isShaderMaterial'), and
count-0 groups crash MeshBVH's packed-tree build.
- glb-export: sanitizeMaterialGroups pass repairs any mesh whose geometry
groups don't line up with its material array before GLTFExporter runs.
- export-manager: give neutralised (attribute-less) meshes an empty position
attribute before STL/OBJ export — both exporters read position.count
unconditionally.
- bake-exporter: log the full error stack so the bake worker's console relay
captures it in the job's error trail.
- viewer: host-controlled disablePostFx prop (Viewer → PostProcessing) that
skips building the SSGI/denoise pipeline entirely; the ?disable=postFx URL
flag previously only bypassed it per-frame while still allocating it.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>