Three related editor fixes surfaced while debugging a captured house
project that rendered an infinite wall and failed to load.
Infinite wall (core/systems/wall/wall-mitering.ts):
Junction miters are line-line intersections, so the joint point sits
~halfThickness/sin(theta) from the junction. The only guard was an
exact-parallel check (det < 1e-9), so two walls meeting at a shallow
angle (a room-preset preview dragged onto an existing wall, or a wall
drawn nearly collinear to its neighbour) produced a joint point far
away — an infinite spike. Add a miter limit: reject joints farther
than 10x half-thickness from the junction and fall back to a square
joint, exactly like the parallel case.
Scene load failure (core/utils/heal-scene-graph.ts + validate-build-json
+ use-scene migrateNodes):
Capture wall-merge could leave a `children: [null]` entry (see the
matching merge-walls.ts fix in private-editor) and zero-length walls.
`null` children fail wall schema validation, so the whole scene fails
to load. Add a shared heal step — strip non-string child refs, drop
childless zero-length walls — run on every load path: import
validation now repairs instead of hard-failing (with a warning), and
setScene heals on the prod project-load path too.
Grid snap (nodes slab/ceiling/spawn tools):
These tools hardcoded a 0.5 m snap (Math.round(x*2)/2) and ignored the
editor's grid-snap setting, so the cursor jumped by 0.5 while later
vertices already followed the configured step. Route them through
snapPointToGrid / snapScalar with gridSnapStep.
Adds unit tests for the miter limit and the heal step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wholesale swap of packages/{core,viewer,editor,mcp} and apps/editor with the
versions from the private editor repo, which is the production source of truth.
Setup changes:
- packages/{core,viewer,editor} versions held at 0.7.0 baseline (matching
the most recent published release) so a bump=minor publishes 0.8.0
- packages/mcp held at 0.1.1 (never published; first publish will go through
the new release.yml flow)
- peerDependencies and devDependencies for inter-package @pascal-app/*
references pinned to ^0.7.0 instead of '*' / 'workspace:*' so they are
valid for npm consumers
- Root package.json: TypeScript bumped to 6.0.2, added overrides for
@types/react, @types/react-dom, @types/three to prevent JSX namespace
fragmentation across the workspace
- release.yml extended to also publish editor and mcp; 'both' option renamed
to 'all'; added a sync step that updates inter-package peerDeps/devDeps to
match the new versions on every bump (so viewer/editor/mcp tarballs always
reference the version of core they were built against)
- Root scripts gained release:editor and release:mcp shortcuts
Verification:
- bun install --frozen-lockfile is consistent
- packages/{core,viewer,mcp} build cleanly, dist/index.d.ts emitted
- packages/editor check-types reports 21 pre-existing errors, identical to
what private-editor currently reports
Open PRs against editor-v2 will need rebasing/conflict resolution.
* feat: add polygon movement support to editor and implement dedicated move tools for walls, slabs, and ceilings
* feat: add uv2 attribute to ceiling and slab geometries for lightmap support
* Fix curved wall miters and align roof position sliders
* Fix wall measurement label and extension anchors
* Fix WebGPU renderer initialization order
* fix(editor): scope wall movement to the selected level
---------
Co-authored-by: Pascal <open@pascal.app>
Major changes:
- Roof system rewrite with roof-segment support
- Scene store refactor
- Spatial grid improvements
- Item light system
- Post-processing and selection manager updates
- Perf monitor component
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>