From c556c8beb7b7e8bad136c7dd96d03be40fd7d19a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 13 May 2026 00:19:02 +0100 Subject: [PATCH] Pin synth DSL as local package --- Aquarium.Engine.sln | 14 ------------ NuGet.config | 7 ++++++ README.md | 10 +++++++++ .../AquariumSynth.Dsl.0.1.0-aquarium.1.nupkg | Bin 0 -> 58511 bytes scripts/update-synth-package.ps1 | 20 ++++++++++++++++++ src/Aquarium.Engine/Aquarium.Engine.csproj | 2 +- state/evidence.jsonl | 1 + state/map.yaml | 7 ++++-- state/memory.json | 2 +- state/scratch.md | 5 +++-- 10 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 NuGet.config create mode 100644 packages/AquariumSynth.Dsl.0.1.0-aquarium.1.nupkg create mode 100644 scripts/update-synth-package.ps1 diff --git a/Aquarium.Engine.sln b/Aquarium.Engine.sln index 95d49bd..62eb52f 100644 --- a/Aquarium.Engine.sln +++ b/Aquarium.Engine.sln @@ -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 diff --git a/NuGet.config b/NuGet.config new file mode 100644 index 0000000..d7660e3 --- /dev/null +++ b/NuGet.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/README.md b/README.md index f0ce411..7f8007a 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/packages/AquariumSynth.Dsl.0.1.0-aquarium.1.nupkg b/packages/AquariumSynth.Dsl.0.1.0-aquarium.1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..e2cf8d40d660ec8c4cfa319b7c2b222653c54710 GIT binary patch literal 58511 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 z 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 + - diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 19e4fce..8b3b8a9 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -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"} diff --git a/state/map.yaml b/state/map.yaml index bacc9c5..8c6171f 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -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. diff --git a/state/memory.json b/state/memory.json index c05b282..ff588f3 100644 --- a/state/memory.json +++ b/state/memory.json @@ -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.", diff --git a/state/scratch.md b/state/scratch.md index a84a042..ee47330 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -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: