refactor(app): complete session startup composition

Move the live-session reset and routing graph, combat and diagnostic command targets, and the sole gameplay input subscriber into Phase 7 before frame publication. Add exact retryable ownership for late bindings so partial startup cannot strand session or component teardown edges.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-22 18:49:31 +02:00
parent 7fa60971e2
commit 826f9ea9b5
22 changed files with 924 additions and 412 deletions

View file

@ -108,6 +108,25 @@ public sealed class RuntimeDiagnosticCommandControllerTests
Assert.Throws<ObjectDisposedException>(() => slot.Bind(target));
}
[Fact]
public void DeferredSlotOwnedBindingReleasesExactlyAndAllowsRebind()
{
var slot = new RuntimeDiagnosticCommandSlot();
var first = new FakeCommands();
var second = new FakeCommands();
IDisposable firstBinding = slot.BindOwned(first);
Assert.Throws<InvalidOperationException>(() => slot.BindOwned(second));
firstBinding.Dispose();
using IDisposable secondBinding = slot.BindOwned(second);
firstBinding.Dispose();
slot.CycleWeather();
Assert.Equal(0, first.CallCount);
Assert.Equal(1, second.CallCount);
}
[Fact]
public void NullToast_DoesNotSuppressDiagnosticStateChanges()
{