From e797e7482af06f7f2bcaa2badec56b860757cff1 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 24 Jul 2026 12:49:59 +0200 Subject: [PATCH] fix(diag): gate connected soak on guaranteed login boundary The first-player-position line is emitted only when initial streaming must recenter. Treating it as a required login event made a valid same-landblock login time out while route automation was already running. Gate on in-world and the route's authoritative materialization barriers instead. Co-Authored-By: Codex --- .../ConnectedR6SoakContractTests.cs | 22 +++++++++++++++++++ tools/run-connected-r6-soak.ps1 | 5 ++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/AcDream.App.Tests/Diagnostics/ConnectedR6SoakContractTests.cs b/tests/AcDream.App.Tests/Diagnostics/ConnectedR6SoakContractTests.cs index 7c86f2d8..53ef5409 100644 --- a/tests/AcDream.App.Tests/Diagnostics/ConnectedR6SoakContractTests.cs +++ b/tests/AcDream.App.Tests/Diagnostics/ConnectedR6SoakContractTests.cs @@ -344,6 +344,28 @@ public sealed class ConnectedR6SoakContractTests StringComparison.Ordinal); } + [Fact] + public void LoginGateDoesNotRequireTheOptionalFirstPositionRecenterDiagnostic() + { + string source = File.ReadAllText(Path.Combine( + FindRepoRoot(), + "tools", + "run-connected-r6-soak.ps1")); + + Assert.Contains( + "Wait-ForLogPattern $process $stdoutLog 'live: in world'", + source, + StringComparison.Ordinal); + Assert.DoesNotContain( + "Wait-ForLogPattern $process $stdoutLog 'live: first player position'", + source, + StringComparison.Ordinal); + Assert.Contains( + "route materialization below is the deterministic world-ready barrier.", + source, + StringComparison.Ordinal); + } + [Fact] public void DenseTownModeUsesTheDedicatedOneCheckpointRoute() { diff --git a/tools/run-connected-r6-soak.ps1 b/tools/run-connected-r6-soak.ps1 index 3e71438a..22a44f39 100644 --- a/tools/run-connected-r6-soak.ps1 +++ b/tools/run-connected-r6-soak.ps1 @@ -717,7 +717,10 @@ try { } $null = Wait-ForLogPattern $process $stdoutLog 'live: in world' 1 $LoginTimeoutSeconds - $null = Wait-ForLogPattern $process $stdoutLog 'live: first player position' 1 $LoginTimeoutSeconds + # "live: first player position" is a recenter diagnostic, not a session + # boundary: it is intentionally absent when the player's authoritative + # first cell already matches the initial streaming center. The first + # route materialization below is the deterministic world-ready barrier. Write-Marker ("in-world elapsed={0:N1}s" -f $stopwatch.Elapsed.TotalSeconds) foreach ($destination in $destinations) {