diff --git a/README.md b/README.md
index c9ddf35..0e0d4f6 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,17 @@ the Rust crate into the room by the ankle.
dotnet test
```
+## Package Boundary
+
+Aquarium consumes this library as a pinned `AquariumSynth.Dsl` NuGet package,
+not as a live project reference. Breaking synth-library work should happen here
+freely, then Aquarium should intentionally update only after a new package
+version is packed and tested.
+
+```powershell
+dotnet pack src\AquariumSynth.Dsl\AquariumSynth.Dsl.csproj -c Release
+```
+
## Shape
- `PatchScript.Parse(script)` lowers terse script into `SynthPatch`.
diff --git a/src/AquariumSynth.Dsl/AquariumSynth.Dsl.csproj b/src/AquariumSynth.Dsl/AquariumSynth.Dsl.csproj
index b760144..9651933 100644
--- a/src/AquariumSynth.Dsl/AquariumSynth.Dsl.csproj
+++ b/src/AquariumSynth.Dsl/AquariumSynth.Dsl.csproj
@@ -4,6 +4,17 @@
net10.0
enable
enable
+ AquariumSynth.Dsl
+ 0.1.0-aquarium.1
+ GameCult
+ GameCult
+ Aquarium synth patch DSL model, parser, analysis helpers, and Faust source emitter.
+ README.md
+ https://github.com/GameCult/AquariumSynthCSharp
+
+
+
+
diff --git a/state/evidence.jsonl b/state/evidence.jsonl
index 8bb6ddb..d99f3b8 100644
--- a/state/evidence.jsonl
+++ b/state/evidence.jsonl
@@ -7,3 +7,4 @@
{"kind":"reference_synth_roadmap","lesson":"AquariumSynthCSharp should use external synth and DSP corpora as reference targets, not just internal demo patches. Start with DX7/Dexed SysEx for structured FM, then ZynAddSubFX, Faust examples/libraries, Surge XT, and Cardinal as progressively broader pressure tests. Keep provenance and license state explicit before vendoring fixtures.","source":"user clarified any synth can be broken down and rebuilt via Aquarium DSL"}
{"kind":"runtime_patch_parameters","lesson":"Synth patches must expose expressive runtime parameters. Faust supports this through UI controls and hosted parameter APIs, so Aquarium should compile a graph once and vary declared parameter values without recompilation. Recompile only for structural graph changes.","source":"user asked whether Faust can vary one number without recompiling"}
{"kind":"synth_test_ownership","lesson":"AquariumSynthCSharp owns reference-patch correctness. Aquarium should only smoke-test the engine synth host and bundled Faust boundary; SFXR/BFXR/reference parity belongs here so the engine can keep moving while the synth library is under active surgery.","source":"user questioned synth tests living in Aquarium"}
+{"kind":"package_boundary","lesson":"Aquarium consumes AquariumSynth.Dsl through a pinned package, not a live project reference. Breaking changes in AquariumSynthCSharp are allowed during synth construction as long as a new package version is packed and Aquarium is updated deliberately when the boundary should move.","source":"user wanted Aquarium builds insulated from synth-agent work"}
diff --git a/state/map.yaml b/state/map.yaml
index a4cec04..11d2d89 100644
--- a/state/map.yaml
+++ b/state/map.yaml
@@ -14,6 +14,7 @@ surfaces:
library: src/AquariumSynth.Dsl
tests: tests/AquariumSynth.Dsl.Tests
reference_roadmap: docs/reference-synth-roadmap.md
+ package: AquariumSynth.Dsl 0.1.0-aquarium.1
modules:
model: src/AquariumSynth.Dsl/Model.cs
parser: src/AquariumSynth.Dsl/PatchScript.cs
@@ -38,4 +39,5 @@ boundaries:
- Faust source and target-code generation
checks:
default: dotnet test
+ package: dotnet pack src/AquariumSynth.Dsl/AquariumSynth.Dsl.csproj -c Release
faust_validation: automatic in tests when Faust is installed