feat(platform): Campaign LA LA0 — extract ApplicationPathSet to AcDream.Platform

The launcher (LA3/LA4) needs the XDG/Windows path contract
(ApplicationPathSet/IApplicationPathEnvironment) without pulling in any
gameplay assembly. Move it out of AcDream.Runtime into a new BCL-only
AcDream.Platform project so the launcher-side Launcher.Core project can
reference it directly per the campaign plan (docs/plans/2026-08-14-launcher-campaign.md,
LA0). Namespace renamed AcDream.Runtime.Platform -> AcDream.Platform;
code is otherwise byte-identical (no logic changes).

AcDream.Runtime now carries a ProjectReference to AcDream.Platform and
re-exports it transitively, so App and Headless keep resolving the type
without a direct reference and K0's Headless single-ProjectReference
guard (HeadlessAssemblyReferencesOnlyTheRuntimeProject) stands unchanged.
The sibling Runtime dependency-boundary guard
(RuntimeProjectDeclaresOnlyApprovedProjectDependencies) does assert
Runtime's own project-reference set, so it needed a deliberate,
documented addition of AcDream.Platform to its expected list.

Moved tests/AcDream.Runtime.Tests/Platform/ApplicationPathSetTests.cs to
a new tests/AcDream.Platform.Tests/ project (namespace
AcDream.Platform.Tests) referencing only AcDream.Platform. Registered
both new projects in AcDream.slnx.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-14 15:19:02 +02:00
parent 7f24af1a37
commit cb6502c8a5
14 changed files with 49 additions and 10 deletions

View file

@ -1,6 +1,6 @@
using System.Runtime.InteropServices;
using AcDream.App.Rendering;
using AcDream.Runtime.Platform;
using AcDream.Platform;
namespace AcDream.App.Platform;

View file

@ -1,4 +1,4 @@
using AcDream.Runtime.Platform;
using AcDream.Platform;
namespace AcDream.App.Platform;

View file

@ -3,7 +3,7 @@ using AcDream.App.Plugins;
using AcDream.App.Platform;
using AcDream.App.Rendering;
using AcDream.Core.Plugins;
using AcDream.Runtime.Platform;
using AcDream.Platform;
using Serilog;
GraphicalHostPlatformServices graphicalPlatform =

View file

@ -8,8 +8,8 @@ using AcDream.App.Settings;
using AcDream.App.Platform;
using AcDream.App.World;
using AcDream.Content;
using AcDream.Platform;
using AcDream.Runtime;
using AcDream.Runtime.Platform;
using AcDream.Runtime.Entities;
using AcDream.Runtime.Gameplay;
using AcDream.Runtime.Session;

View file

@ -1,5 +1,5 @@
using AcDream.Headless.Configuration;
using AcDream.Runtime.Platform;
using AcDream.Platform;
namespace AcDream.Headless.Platform;

View file

@ -1,4 +1,4 @@
using AcDream.Runtime.Platform;
using AcDream.Platform;
namespace AcDream.Headless.Platform;

View file

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

View file

@ -1,4 +1,4 @@
namespace AcDream.Runtime.Platform;
namespace AcDream.Platform;
/// <summary>
/// BCL-only view of the process environment used to resolve portable

View file

@ -19,6 +19,7 @@
<ProjectReference Include="..\AcDream.Core\AcDream.Core.csproj" />
<ProjectReference Include="..\AcDream.Core.Net\AcDream.Core.Net.csproj" />
<ProjectReference Include="..\AcDream.Content\AcDream.Content.csproj" />
<ProjectReference Include="..\AcDream.Platform\AcDream.Platform.csproj" />
<ProjectReference Include="..\AcDream.Plugin.Abstractions\AcDream.Plugin.Abstractions.csproj" />
</ItemGroup>
</Project>