THREE.JS / FOUNDATIONS 318

Migration belongs at the document boundary.

Three.js loaders deserialize what they receive; they do not negotiate application schema versions or strict registries. Wrap the pinned loader in an explicit envelope, migrate it, validate every reference, then load the result.

Preparing registry envelope—

The fixture will create a legacy v0 document around one texture-bearing node graph.

envelope
—
UUID remap
—
registry
—
references
—
loader graph
—
graph parity
—
stock fallback
—
backend
—
frame samples
—
timing
NOT RUN
migration contractwaiting

Application-owned v0→v1 normalization must happen before Three.js sees the document.

registry contractwaiting

The strict allowlist rejects missing node/material constructors before native fallback behavior can hide a mismatch.

reference contractwaiting

UUID remapping is only safe when node, texture, image, material, and object references remain closed.

version boundarywaiting

Pinned Source is exercised; current-dev TextureSource migration remains an explicit source-review boundary.

MIGRATION / WAITINGEVENTS / —

This harness owns the envelope and validation policy; it does not patch node_modules or claim a Three.js cross-version migration API.

Sources: NodeLoader · NodeMaterialLoader · NodeObjectLoader · ObjectLoader · TSL graph

LAB 318 / NODE REGISTRY MIGRATION CONTRACT