arch(runtime): establish presentation-independent boundary

Create the dependency-only Runtime project before moving any gameplay owner, enforce its direct, transitive, source, and load-time closure, and pin coherent lifetime-group extraction plus retryable teardown ordering. No production behavior changes in J0.

Validated by the four focused Runtime boundary tests, a zero-error Release solution build, and 8,406 passing Release tests with five pre-existing skips.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-25 17:33:11 +02:00
parent 9f37d17936
commit b632672e5c
10 changed files with 457 additions and 2 deletions

View file

@ -39,6 +39,7 @@
<PackageReference Include="StbTrueTypeSharp" Version="1.26.12" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AcDream.Runtime\AcDream.Runtime.csproj" />
<ProjectReference Include="..\AcDream.Core\AcDream.Core.csproj" />
<ProjectReference Include="..\AcDream.Core.Net\AcDream.Core.Net.csproj" />
<ProjectReference Include="..\AcDream.Content\AcDream.Content.csproj" />

View file

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<RootNamespace>AcDream.Runtime</RootNamespace>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="AcDream.Runtime.Tests" />
</ItemGroup>
<ItemGroup>
<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.Plugin.Abstractions\AcDream.Plugin.Abstractions.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,10 @@
namespace AcDream.Runtime;
/// <summary>
/// Identifies the presentation-independent runtime assembly.
/// </summary>
/// <remarks>
/// Slice J0 establishes only the dependency boundary. Runtime owners move here
/// in coherent lifetime groups during the later Slice J steps.
/// </remarks>
internal static class RuntimeAssemblyMarker;