Files
SVSimServer/SVSim.BattleNode/SVSim.BattleNode.csproj
gamer147 e982300c6d feat(battlenode): inject SessionBattleEngine into BattleSession in pure shadow (Phase 2 N1 exit)
The engine is constructed per session, seated once from the master seed + both
shuffled decks (F-N-5), and fed each frame via ShadowIngest — all inside a
try/catch in ComputeFrames so a shadow failure can never break live dispatch
(ND1/ND6). Routes still come from the existing handlers: wire output is
byte-for-byte unchanged. FrameDispatchContext gains the Engine ref for N2+.

csproj: PrivateAssets=compile on the engine ref so its global-namespace type
surface (MessagePackSerializer, UserConfig, UserCard, ChallengeConfig, ...) does
not leak transitively into SVSim.EmulatedEntrypoint (which references BattleNode)
and collide with that project's own types; the runtime DLL still flows.

All 238 BattleNode unit tests pass; EmulatedEntrypoint builds clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 15:35:35 -04:00

26 lines
1.3 KiB
XML

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="MessagePack" Version="2.5.172" />
</ItemGroup>
<ItemGroup>
<!-- Aliased: the copied decompiled engine puts a huge type surface in the GLOBAL namespace
(BattlePlayer, MessagePackSerializer, ...) which would otherwise leak into and collide
with every node file. The extern alias confines it; only Sessions/Engine/* opts in.
PrivateAssets=compile: the engine is an implementation detail of the node — hide its TYPES
from the COMPILE closure of consumers (SVSim.EmulatedEntrypoint references BattleNode and
would otherwise re-hit the MessagePackSerializer global-namespace collision), while still
flowing the RUNTIME asset so SVSim.BattleEngine.dll deploys into consumers' output. -->
<ProjectReference Include="..\SVSim.BattleEngine\SVSim.BattleEngine.csproj" Aliases="engine" PrivateAssets="compile" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="SVSim.UnitTests" />
<InternalsVisibleTo Include="SVSim.BattleEngine.Tests" />
</ItemGroup>
</Project>