Three small follow-ups after the first user-visible spike test.
shelf cursor stuck at origin:
The placeholder cursor is a translucent slab inside a <group ref>.
The tool was calling setCursor(state) on every grid:move, which
triggered a React re-render. R3F re-applies props on each render,
and since the <group> had no `position` prop, the implicit default
[0,0,0] clobbered the imperative `position.set` from the previous
tick. Result: cursor stuck at level origin instead of following
the mouse.
Fix: drop the unused useState entirely. Pure imperative position
updates via the ref. No re-renders, no clobbering. (The legacy
spawn tool gets away with the same pattern because CursorSphere
buffers its position prop differently — but for the spike, the
simpler model is fine.)
shelf snap step:
Was 0.1 (10cm) — much finer than the editor's default 0.5 grid.
Bumped to 0.5 (matches the toolbar grid setting and the legacy
half-meter snap pattern used by spawn/column).
registry-driven spawn renderer paints red:
Temporary verification marker. With NEXT_PUBLIC_USE_REGISTRY_FOR_
SPAWN=1, spawns rendered via the new path now appear in #ef4444
red. Legacy renderer stays in #22c55e green. Easy visual check
for "which dispatch path is this spawn on?" Reverted in the PR
that signs off spawn parity (alongside legacy file deletion).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>