diff --git a/tests/AcDream.Launcher.Tests/AcDream.Launcher.Tests.csproj b/tests/AcDream.Launcher.Tests/AcDream.Launcher.Tests.csproj
index 78b2ec1b..23aedde8 100644
--- a/tests/AcDream.Launcher.Tests/AcDream.Launcher.Tests.csproj
+++ b/tests/AcDream.Launcher.Tests/AcDream.Launcher.Tests.csproj
@@ -23,14 +23,4 @@
-
-
-
-
-
diff --git a/tests/AcDream.Launcher.Tests/TestAppBuilder.cs b/tests/AcDream.Launcher.Tests/TestAppBuilder.cs
index 4245f0e4..777f559b 100644
--- a/tests/AcDream.Launcher.Tests/TestAppBuilder.cs
+++ b/tests/AcDream.Launcher.Tests/TestAppBuilder.cs
@@ -1,9 +1,18 @@
using Avalonia;
using Avalonia.Headless;
+using Xunit;
[assembly: AvaloniaTestApplication(typeof(AcDream.Launcher.Tests.TestAppBuilder))]
[assembly: AvaloniaTestIsolation(AvaloniaTestIsolationLevel.PerAssembly)]
+// Compiled INTO the assembly on purpose. A xunit.runner.json expresses the same
+// intent but only works if the file is copied beside the test DLL; under CI's
+// `dotnet build` + `dotnet test --no-build` split it did not arrive, so the
+// suite ran with parallel collections and MainWindowViewTests failed in Test
+// Case Cleanup ("The calling thread cannot access this object") while passing
+// locally. An assembly attribute cannot fail to deploy.
+[assembly: CollectionBehavior(DisableTestParallelization = true)]
+
namespace AcDream.Launcher.Tests;
///
diff --git a/tests/AcDream.Launcher.Tests/xunit.runner.json b/tests/AcDream.Launcher.Tests/xunit.runner.json
deleted file mode 100644
index c3155894..00000000
--- a/tests/AcDream.Launcher.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
-}