refactor(runtime): cut graphical host over to canonical root

Make every App composition phase borrow one GameRuntime, retire the duplicate view/event adapters, and dispose the root only after its graphical borrowers release. This preserves synchronous UI commands while giving shutdown one exact ownership ledger.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-26 19:06:09 +02:00
parent ecb9f79444
commit ce41efb9e5
29 changed files with 613 additions and 778 deletions

View file

@ -109,6 +109,8 @@ public sealed class ContentEffectsAudioCompositionTests
Assert.Throws<InvalidOperationException>(() => fixture.Phase().Compose(
fixture.Platform,
fixture.Host));
Assert.False(
fixture.Dependencies.Runtime.CaptureOwnership().IsDisposeRequested);
Assert.NotNull(fixture.Publication.Audio);
Assert.False(fixture.Publication.Audio!.Engine.IsDisposalComplete);
@ -127,6 +129,8 @@ public sealed class ContentEffectsAudioCompositionTests
Assert.Throws<InvalidOperationException>(() => fixture.Phase().Compose(
fixture.Platform,
fixture.Host));
Assert.False(
fixture.Dependencies.Runtime.CaptureOwnership().IsDisposeRequested);
Assert.Equal(
Enum.GetValues<ContentEffectsAudioCompositionPoint>()
@ -258,7 +262,7 @@ public sealed class ContentEffectsAudioCompositionTests
ResidencyBudgetOptions.Default,
new PhysicsDataCache(),
false,
new RuntimeCharacterState(),
GameRuntimeTestFactory.Create(),
Router,
Poses,
new DeferredEntityEffectAdvanceSource(),
@ -293,7 +297,7 @@ public sealed class ContentEffectsAudioCompositionTests
public void Dispose()
{
Publication.Dispose();
Dependencies.Character.Dispose();
Dependencies.Runtime.Dispose();
}
}