Pin synth DSL as local package

This commit is contained in:
Meta Vens 2026-05-13 00:19:02 +01:00
commit c556c8beb7
10 changed files with 48 additions and 20 deletions

View file

@ -11,8 +11,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aquarium.Engine", "src\Aqua
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CultMath", "..\CultMath\src\CultMath\CultMath.csproj", "{0089E341-25F2-43FC-8FD9-CBD1AE646D91}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AquariumSynth.Dsl", "..\AquariumSynthCSharp\src\AquariumSynth.Dsl\AquariumSynth.Dsl.csproj", "{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aquarium.Epiphany", "src\Aquarium.Epiphany\Aquarium.Epiphany.csproj", "{33654E0D-B31A-4062-B6AC-C1CE4C1A1F65}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameCult.Caching.MessagePack", "..\CultLib\src\GameCult.Caching.MessagePack\GameCult.Caching.MessagePack.csproj", "{A8EDAE19-805B-4B09-9566-BE63937CA1B9}"
@ -79,18 +77,6 @@ Global
{0089E341-25F2-43FC-8FD9-CBD1AE646D91}.Release|x64.Build.0 = Release|Any CPU
{0089E341-25F2-43FC-8FD9-CBD1AE646D91}.Release|x86.ActiveCfg = Release|Any CPU
{0089E341-25F2-43FC-8FD9-CBD1AE646D91}.Release|x86.Build.0 = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|x64.ActiveCfg = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|x64.Build.0 = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|x86.ActiveCfg = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Debug|x86.Build.0 = Debug|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|Any CPU.Build.0 = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|x64.ActiveCfg = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|x64.Build.0 = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|x86.ActiveCfg = Release|Any CPU
{4C3D0CEB-83B9-4A5F-9514-6E07061E5674}.Release|x86.Build.0 = Release|Any CPU
{33654E0D-B31A-4062-B6AC-C1CE4C1A1F65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{33654E0D-B31A-4062-B6AC-C1CE4C1A1F65}.Debug|Any CPU.Build.0 = Debug|Any CPU
{33654E0D-B31A-4062-B6AC-C1CE4C1A1F65}.Debug|x64.ActiveCfg = Debug|Any CPU

7
NuGet.config Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AquariumLocal" value="packages" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>

View file

@ -35,6 +35,16 @@ Aquarium currently expects the sibling `CultMath` and `CultLib` repos at
`E:\Projects\CultMath` and `E:\Projects\CultLib`, or the equivalent
`..\..\..\CultMath` / `..\..\..\CultLib` paths from the engine project.
Aquarium consumes `AquariumSynth.Dsl` from the repo-local `packages` NuGet feed,
not as a live project reference to `AquariumSynthCSharp`. This keeps Aquarium
builds stable while synth work is in flight. To intentionally update that
boundary, pack a new synth version and bump the `Aquarium.Engine` package
reference:
```powershell
.\scripts\update-synth-package.ps1
```
```powershell
dotnet build Aquarium.Engine.sln
dotnet run --project src\Aquarium.Engine\Aquarium.Engine.csproj -- --client-assembly src\Aquarium.Epiphany\bin\Debug\net10.0\Aquarium.Epiphany.dll

Binary file not shown.

View file

@ -0,0 +1,20 @@
param(
[string]$SynthRepo = "E:\Projects\AquariumSynthCSharp",
[string]$Configuration = "Release"
)
$ErrorActionPreference = "Stop"
$root = Resolve-Path (Join-Path $PSScriptRoot "..")
$feed = Join-Path $root "packages"
$project = Join-Path $SynthRepo "src\AquariumSynth.Dsl\AquariumSynth.Dsl.csproj"
if (-not (Test-Path $project)) {
throw "AquariumSynth.Dsl project not found at $project"
}
New-Item -ItemType Directory -Force -Path $feed | Out-Null
dotnet pack $project -c $Configuration -o $feed
Write-Host "Packed AquariumSynth.Dsl into $feed"
Write-Host "If the package version changed, update src\Aquarium.Engine\Aquarium.Engine.csproj to match."

View file

@ -11,8 +11,8 @@
<ItemGroup>
<PackageReference Include="Vortice.Direct2D1" Version="3.8.3" />
<PackageReference Include="AquariumSynth.Dsl" Version="0.1.0-aquarium.1" />
<ProjectReference Include="..\Aquarium.Engine.Contracts\Aquarium.Engine.Contracts.csproj" />
<ProjectReference Include="..\..\..\AquariumSynthCSharp\src\AquariumSynth.Dsl\AquariumSynth.Dsl.csproj" />
<PackageReference Include="Vortice.Direct3D11" Version="3.8.3" />
<PackageReference Include="Vortice.Direct3D12" Version="3.8.3" />
<PackageReference Include="Vortice.D3DCompiler" Version="3.8.3" />

View file

@ -70,3 +70,4 @@
{"timestamp":"2026-05-12T20:04:11+01:00","topic":"debug-ui-mouse-input-capture","lesson":"Renderer input capture must include both keyboard ownership and mouse ownership. If Debug UI consumes wheel or mouse interaction but the renderer only reports keyboard capture, the same wheel event leaks into client camera/runtime controls after the overlay handles it.","files":["src/Aquarium.Engine/Render/D3D12Renderer.cs","state/evidence.jsonl"],"source":"user dropdown scroll capture correction"}
{"timestamp":"2026-05-12T21:28:22+01:00","topic":"single-solution-authority","lesson":"Keep one solution inventory for Aquarium. Maintaining both Aquarium.Engine.sln and Aquarium.Engine.slnx created duplicate project authority, Rider confusion, and verification races when both were built against shared obj/bin outputs. Aquarium.Engine.sln is the canonical solution for IDE and CLI work.","files":["Aquarium.Engine.sln","AGENTS.md","README.md","scripts/dev-watch.ps1","state/map.yaml","state/evidence.jsonl"],"source":"user solution authority cleanup"}
{"timestamp":"2026-05-12T23:08:00+01:00","topic":"synth-test-ownership","lesson":"Aquarium must not own synth reference truth. Engine tests may smoke-test the runtime synth host boundary, but synth correctness belongs in AquariumSynthCSharp so Aquarium can keep iterating while the synth library is under construction.","files":["tests/Aquarium.Engine.Tests/SynthPlaybackTests.cs","tests/Aquarium.Engine.Tests/Aquarium.Engine.Tests.csproj","state/evidence.jsonl"],"source":"user questioned synth testing ownership"}
{"timestamp":"2026-05-13T00:26:00+01:00","topic":"synth-package-boundary","lesson":"Aquarium must not build against the live AquariumSynthCSharp project while a synth agent is mutating it. Consume AquariumSynth.Dsl as a pinned repo-local NuGet package and update that package only by deliberate version bump.","files":["NuGet.config","packages/AquariumSynth.Dsl.0.1.0-aquarium.1.nupkg","src/Aquarium.Engine/Aquarium.Engine.csproj","scripts/update-synth-package.ps1","state/map.yaml","state/memory.json","state/scratch.md","state/evidence.jsonl"],"source":"user asked whether synth-agent work can break Aquarium builds"}

View file

@ -24,6 +24,8 @@ current_model:
synth_host: src/Aquarium.Engine/Audio/AquariumSynthHost.cs
wasapi_audio_device: src/Aquarium.Engine/Audio/WasapiAudioDevice.cs
faust_toolchain_sync: scripts/sync-faust-toolchain.ps1
synth_package_update: scripts/update-synth-package.ps1
local_package_feed: packages
runtime_loader: src/Aquarium.Engine/Runtime/ClientRuntimeLoader.cs
dev_reload: scripts/dev-reload.ps1
dev_watch: scripts/dev-watch.ps1
@ -41,7 +43,7 @@ current_model:
dependencies:
cult_math: E:\Projects\CultMath
cult_lib: E:\Projects\CultLib
aquarium_synth_dsl: E:\Projects\AquariumSynthCSharp\src\AquariumSynth.Dsl
aquarium_synth_dsl: NuGet package AquariumSynth.Dsl 0.1.0-aquarium.1 from repo-local packages feed
docs:
doctrine: docs/aquarium-engine-doctrine.md
engine_client_boundary: docs/engine-client-boundary.md
@ -79,7 +81,7 @@ renderer_state:
- SDF light buffer feeds Self emission and direct object lighting; future other Selves should join this light lane, not a generic field-instance table.
- Studio2 PMREM and irradiance DDS cubemaps are loaded as D3D12 TextureCubes; PMREM serves roughness-mip specular, irradiance serves Lambertian diffuse IBL for non-metal bodies.
- DirectWrite/Direct2D unified debug panel with tabs for Aquarium renderer controls, client-declared debug panels, terminal commands, and engine/client tooling surfaces.
- Aquarium exposes an optional synth/audio hosting boundary through AquariumSynthDocument; AquariumSynthCSharp owns synth internals while Aquarium.Engine owns device/toolchain integration.
- Aquarium exposes an optional synth/audio hosting boundary through AquariumSynthDocument; Aquarium consumes AquariumSynth.Dsl as a pinned repo-local NuGet package so synth-agent construction cannot break Aquarium builds until the package is intentionally updated.
- Global GraphicsSettings document feeding render debug, exposure, bloom intensity, and bloom veil.
- Temporal resolve uses scene color, metadata, and control history only; dormant event history lanes are cut until a real producer and consumer contract exists.
- Bundled blue-noise texture assets are retained for future dithering/noise work even though the removed medium path no longer samples them.
@ -97,6 +99,7 @@ next_actions:
- Keep main as the live development branch.
- Keep scripts/verify-boundaries.ps1 green: Aquarium.Engine and Aquarium.Engine.Contracts must not contain Epiphany/client policy nouns such as grid, agent, body, or epiphany.
- Verify publish output after every packaging-affecting change.
- Update AquariumSynth.Dsl only by packing a new version into packages and changing the pinned PackageReference version deliberately.
- Grow renderer debug controls through the Direct2D/DirectWrite overlay path.
- Follow research/rendering/hdr-pbr-presentation.md before changing HDR exposure, bloom, tonemapping, or display transforms.
- Follow docs/tsr-inspired-taa-spec.md when changing current temporal diagnostics.

View file

@ -76,7 +76,7 @@
],
"audio": [
"Aquarium exposes an optional audio/synth hosting boundary through contracts; clients declare intent, Aquarium schedules playback and owns device/toolchain integration.",
"AquariumSynthCSharp owns synth internals and tests. Aquarium should keep only engine smoke coverage at this boundary so visual/renderer work can continue while synth construction changes underneath."
"Aquarium consumes AquariumSynth.Dsl as a pinned repo-local NuGet package. AquariumSynthCSharp owns synth internals and tests; update the package only by deliberate version bump so visual/renderer work can continue while synth construction changes underneath."
],
"state_and_reload": [
"CultCache is the client memory organ. Runtime state, camera, renderer knobs, body state, UI state, and future Epiphany connection state should be typed Cult documents.",

View file

@ -11,8 +11,9 @@ Keep the engine/client boundary strict:
debug UI plumbing, and device/toolchain integration.
- Aquarium.Epiphany owns client policy, semantic state interpretation, role
layout, and render-plan configuration through Aquarium.Engine.Contracts.
- AquariumSynthCSharp owns synth internals and tests. Aquarium should remember
only the hosting boundary.
- Aquarium consumes AquariumSynth.Dsl as a pinned package in the repo-local
`packages` feed. AquariumSynthCSharp owns synth internals and tests; update
the package only through an intentional version bump.
The renderer work that matters next: