SPEC v1.0 declares four relation types — parent-of, wire-binds, reacts-to-audio, tracks — but does not fully specify runtime semantics. This RFC pins the semantics + reference-implementation expectations so every v1.0-conformant runtime exhibits the same observable behavior.
The pre-launch read-through 2026-04-22 (pre-launch audit, kept private) flagged that the SPEC’s “normative source of truth = running Portals runtime” claim is inconsistent with these four relation-type names appearing in runtime C# / TS code 0 times. Either:
Option (b) chosen. This RFC is the queue entry.
| Type | Meaning | Semantics at render time |
|---|---|---|
parent-of |
Entity from is the transform parent of entity to |
Renderer MAY reparent to’s transform under from; at minimum must preserve the relation on round-trip |
wire-binds |
Output property of from drives an input property of to (Portals Wire System) |
Runtime with Wire support invokes the reactive binding; runtime without MAY log + preserve |
reacts-to-audio |
Entity to reacts to audio source from (amplitude, bands) |
Runtime with audio + VFX Graph bindings applies audio properties; others preserve |
tracks |
Entity to tracks position/rotation of from (e.g. face / hand anchor) |
Runtime with tracking support applies the tracking; others preserve |
SceneComposer.AddRelation(type, from, to, props) stores in _relations dict; each relation type delegates to an existing subsystem:
parent-of → Transform.SetParentwire-binds → WireSystem.AddWirereacts-to-audio → VFXARBinder._audioSource = fromtracks → TrackingProvider.Bind(from, to){type, from, to, props} objects into relations[] on serialize; no-op on deserialize yettap, wire-binds fires”) deferred to RFC-0001 event primitives.examples/runtimes/_conformance/ passes on ≥2 runtimesSPEC.md:75 — v1.0 relation declaration_LAUNCH_READTHROUGH_2026-04-22.md — pre-launch finding 1RFC-0002 — Typed N-ary hyperedges — future upgrade path