Scene serialization and migrations. Part of fourJS.
Implements §79–80 of docs/SPECIFICATION.md; shipped in Phase 11 (§113a). Documents are versioned (SCENE_FORMAT_VERSION = 1), canonical, and diff-friendly; round trips are byte-identical.
SceneDocument / SceneNodeDocument / ComponentDocument types, encodeSceneDocument / decodeSceneDocument (canonical JSON text), and validators (validateSceneDocument, transform/vector/quaternion document validation).decodeSceneDocument(text, limits?) takes UntrustedJsonLimits (maximumTextLength, maximumDepth; finite defaults) and refuses an over-budget or over-deep document with UNTRUSTED_INPUT_REJECTED before validateNode recurses. validateSceneDocument is deliberately unguarded — it takes values, not text.serializeScene / instantiateScene over a ComponentSerializerRegistry keyed by component class; createDefaultComponentSerializers covers the built-in components (including PoseTarget).SceneMigration / SceneMigrationRegistry, migrateSceneDocument / runSceneMigrations, with structured warnings.JsonValue guards (isJsonObject, isJsonArray, asJsonObject) and cloneJsonValue (re-exported from @fourjs/core, __proto__-refusing).@fourjs/diagnostics) carry that state..four format is not implemented; the JSON document is the shipped format.Unit tests are colocated in tests/ per §92.
Workspace name @fourjs/serialization; publishes as @danielsimonjr/fourjs-serialization.