From the 2026-07-03 comprehensive review. Three reviewers independently flagged the same seam — this is the "calcifies if ignored" item ADR-0006 warns about, and it is cheap to decide now vs expensive after Phase E starts.
Problem 1 — process-local entity handles as wire identity. Every per-tick bus payload keys on uint64 casts of entt::entity (ClipCatalogEntry::entity, targetScreen, sourceProjector, modelEntity, R2D reply body.entity — Message.hpp:531,581,847). In-process fine; a Phase E Performer cannot resolve a Conductor-registry-local handle. AssetId (content hash) is process-portable but threaded only through ProvisionClipResources, not the per-tick catalog.
Problem 2 — no wire version field. The envelope is {"type","data"} only (Serialization.cpp:1470-1475). Cross-machine, mismatched builds silently default missing fields (j.value(...)) or throw on unknown types with no skew detection. A top-level "v":<int> gives a negotiation point before the format calcifies.
Problem 3 — snapshots bake Conductor-local resource slots. SceneSnapshot/RenderFrame carry editor-assigned descriptorSlot/renderTargetSlot/sourceSlot/textTextureSlot/remoteSlot. ADR-0006 §3 already says slots are per-Renderer; baking one process's slots into snapshots sent to remote Performers is meaningless. This is the load-bearing single-process assumption to unwind.
Deliverable: an ADR deciding (a) stable cross-node entity identity (content-hash AssetId in the hot path? explicit stable-ID map?), (b) wire versioning/handshake, (c) slot-assignment ownership in a multi-Renderer world. Related: Either-affinity commands execute on whichever thread drains first (CommandDispatcher.cpp:83-90) — nondeterministic ordering is a hazard for cluster replay determinism; determinism work should pin command execution to one defined thread.
Also worth a Tracy budget check before Phase E: the editor does a full-scene JSON serialize+deserialize every editor frame (Engine.cpp:1247-1248) — fine in-process today, but Phase E UDP inherits this format and it scales with scene size.
From the 2026-07-03 comprehensive review. Three reviewers independently flagged the same seam — this is the "calcifies if ignored" item ADR-0006 warns about, and it is cheap to decide now vs expensive after Phase E starts.
Problem 1 — process-local entity handles as wire identity. Every per-tick bus payload keys on uint64 casts of
entt::entity(ClipCatalogEntry::entity, targetScreen, sourceProjector, modelEntity, R2D reply body.entity — Message.hpp:531,581,847). In-process fine; a Phase E Performer cannot resolve a Conductor-registry-local handle. AssetId (content hash) is process-portable but threaded only through ProvisionClipResources, not the per-tick catalog.Problem 2 — no wire version field. The envelope is
{"type","data"}only (Serialization.cpp:1470-1475). Cross-machine, mismatched builds silently default missing fields (j.value(...)) or throw on unknown types with no skew detection. A top-level"v":<int>gives a negotiation point before the format calcifies.Problem 3 — snapshots bake Conductor-local resource slots. SceneSnapshot/RenderFrame carry editor-assigned descriptorSlot/renderTargetSlot/sourceSlot/textTextureSlot/remoteSlot. ADR-0006 §3 already says slots are per-Renderer; baking one process's slots into snapshots sent to remote Performers is meaningless. This is the load-bearing single-process assumption to unwind.
Deliverable: an ADR deciding (a) stable cross-node entity identity (content-hash AssetId in the hot path? explicit stable-ID map?), (b) wire versioning/handshake, (c) slot-assignment ownership in a multi-Renderer world. Related: Either-affinity commands execute on whichever thread drains first (CommandDispatcher.cpp:83-90) — nondeterministic ordering is a hazard for cluster replay determinism; determinism work should pin command execution to one defined thread.
Also worth a Tracy budget check before Phase E: the editor does a full-scene JSON serialize+deserialize every editor frame (Engine.cpp:1247-1248) — fine in-process today, but Phase E UDP inherits this format and it scales with scene size.