diff --git a/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj b/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj
index dc186f13..a77f941d 100644
--- a/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj
+++ b/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj
@@ -22,15 +22,4 @@
-
-
-
-
-
diff --git a/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs b/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs
index 2d79544f..18abee77 100644
--- a/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs
+++ b/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs
@@ -14,6 +14,13 @@ namespace AcDream.Core.Net.Tests.Transport;
///
public sealed class FakeAceTransportTests
{
+ ///
+ /// Wall-clock allowance for background transport work in these
+ /// virtual-clock harnesses. Generous on purpose: it bounds a hang without
+ /// encoding an assumption that the machine is idle.
+ ///
+ private static readonly TimeSpan HarnessPatience = TimeSpan.FromSeconds(60);
+
// ---- LossyLink ----
[Fact]
@@ -212,7 +219,14 @@ public sealed class FakeAceTransportTests
Task gapDriver = Task.Run(() =>
{
- Assert.True(enterRequest.Wait(TimeSpan.FromSeconds(2)));
+ // These two windows are wall-clock patience for a harness whose
+ // CLOCK is virtual, not part of what the test verifies. Two
+ // seconds was enough on an idle dev box but not on a loaded CI
+ // runner, where this test took 37-42 s and failed while passing
+ // 5/5 in ~350 ms in isolation. Widening the window changes no
+ // assertion — recovery must still happen, and a genuine failure
+ // to NAK still fails the test, just later.
+ Assert.True(enterRequest.Wait(HarnessPatience));
// This later sequenced packet passes the seeded loss gate,
// exposing the missing ServerReady and parking behind it.
fake.EnqueueServerGameMessage(
@@ -220,7 +234,7 @@ public sealed class FakeAceTransportTests
GameMessageGroup.UIQueue);
Assert.True(SpinWait.SpinUntil(
() => session.Transport?.Inbound.NakCount > 0,
- TimeSpan.FromSeconds(2)));
+ HarnessPatience));
// No datagram follows this virtual-time edge. Recovery now
// requires paused EnterWorld's independent periodic sweep.
diff --git a/tests/AcDream.Core.Net.Tests/xunit.runner.json b/tests/AcDream.Core.Net.Tests/xunit.runner.json
deleted file mode 100644
index c3155894..00000000
--- a/tests/AcDream.Core.Net.Tests/xunit.runner.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
- "parallelizeAssembly": false,
- "parallelizeTestCollections": false,
- "maxParallelThreads": 1
-}