fix(rendering): restore equipped scene projections on pose

Treat the equipped-child controller's composed-pose callback as the authoritative attached projection presence edge. Portal transit can withdraw presentation while retaining the accepted parent relation, so the first destination pose must register the child again.

Release gate: 3,734 App tests / 3 skips; 8,218 complete-solution tests / 5 skips.

Co-Authored-By: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-24 23:11:48 +02:00
parent 9fab1feb46
commit bb1f4a64bf
3 changed files with 48 additions and 1 deletions

View file

@ -70,12 +70,16 @@ internal sealed class LiveRenderProjectionJournal : ILiveRenderProjectionSink
{
if (!_runtime.TryGetRecord(serverGuid, out LiveEntityRecord record)
|| record.WorldEntity is not { } entity
|| !_byLocalId.ContainsKey(entity.Id)
|| record.ProjectionKind is not LiveEntityProjectionKind.Attached)
{
return;
}
// This callback is the attached-projection owner's authoritative
// presence edge as well as its pose-update edge. A child can leave
// presentation during a portal transition while its accepted parent
// relation remains alive; the first composed destination pose must
// therefore restore a projection removed by that transition.
Upsert(record, entity, record.IsSpatiallyVisible);
}