2026-05-12 22:53:22 +01:00
project : AquariumSynthCSharp
spine_version : 1
2026-05-13 11:47:39 +01:00
updated : 2026-05-13T11:46:38 +01 : 00
2026-05-12 22:53:22 +01:00
prime_directive : >
Build coherent synth machinery. References exist to reveal missing structure,
not to justify piling parameters onto the current patch DSL.
current_objective : >
Turn AquariumSynthCSharp into a reference-driven patch authoring and Faust
generation library. Use external synths and DSP corpora as pressure tests so
Aquarium's DSL grows only when a real target proves the abstraction belongs.
current_mechanism :
parser : src/AquariumSynth.Dsl/PatchScript.cs
model : src/AquariumSynth.Dsl/Model.cs
faust_emitter : src/AquariumSynth.Dsl/FaustExport.cs
2026-05-13 01:25:05 +01:00
operator_graph_model : src/AquariumSynth.Dsl/Model.cs
2026-05-12 22:53:22 +01:00
analysis : src/AquariumSynth.Dsl/AudioAnalysis.cs
built_ins : src/AquariumSynth.Dsl/BuiltInScripts.cs
2026-05-13 00:45:00 +01:00
dx7_references : src/AquariumSynth.Dsl/Dx7SysEx.cs
2026-05-13 00:54:59 +01:00
reference_rebuilds : src/AquariumSynth.Dsl/ReferenceRebuilds.cs
2026-05-12 22:53:22 +01:00
tests : tests/AquariumSynth.Dsl.Tests/PatchScriptTests.cs
doctrine : docs/audio-doctrine.md
roadmap : docs/reference-synth-roadmap.md
2026-05-13 00:28:31 +01:00
parameter_contracts : src/AquariumSynth.Dsl/Model.cs
2026-05-12 22:53:22 +01:00
live_invariants :
- Aquarium owns its patch graph; external synths are references, not runtime dependencies.
- Patch scripts lower into explicit graph records before Faust emission.
2026-05-13 01:25:05 +01:00
- Operator graphs own FM topology : operators, modulation edges, carriers, and feedback. Do not hide this authority inside Voice fields.
2026-05-13 11:47:39 +01:00
- Readable operator graph authoring uses `operator`, `route`, and `carrier` declarations; compact `ops=`/`edges=` is only scaffolding/interchange.
2026-05-12 22:53:22 +01:00
- Generated Faust should remain inspectable and deterministic.
2026-05-12 23:06:24 +01:00
- Reference-patch correctness and synth parity tests live in AquariumSynthCSharp, not Aquarium.
2026-05-12 22:57:56 +01:00
- Exposed patch parameters are runtime controls, not compile-time constants.
2026-05-13 00:38:23 +01:00
- Parameter binding uses field-site references like `lpf=@/macro/brightness`; do not add target-routing semantics unless a later map proves a new authority is needed.
2026-05-12 22:57:56 +01:00
- Recompile only for graph shape changes; vary declared parameters through the hosted DSP control API.
2026-05-12 22:53:22 +01:00
- Reference fixtures must preserve provenance, license status, source hash, and feature pressure.
- Audio metrics are evidence, not final judgment.
- Do not add a generic graph escape hatch until specific references force it.
- Do not hide missing graph structure behind unrelated voice fields.
reference_targets :
dx7_dexed :
priority : 1
purpose : "Structured FM/operator graph pressure test."
source : "https://github.com/asb2m10/dexed"
2026-05-13 01:25:05 +01:00
status : "DX7 SysEx parser, algorithm topology extraction, two Aquarium DSL rebuild attempts, and first-class operator graph support exist."
2026-05-12 22:53:22 +01:00
first_slice :
2026-05-13 11:47:39 +01:00
- "Refine operator graph parameter binding and envelope internals."
2026-05-13 01:25:05 +01:00
- "Add rendered/audio comparison once a render path is explicit."
2026-05-12 22:53:22 +01:00
zynaddsubfx :
priority : 2
purpose : "Additive, subtractive, PAD, formant, kit, and layered-instrument pressure test."
source : "https://github.com/zynaddsubfx/zynaddsubfx"
first_slice :
- "Parse selected instrument XML files into neutral reference records."
- "Classify additive, PAD, formant, and effect usage before translation."
faust :
priority : 3
purpose : "General DSP graph topology pressure test."
sources :
- "https://github.com/grame-cncm/faust"
- "https://faustlibraries.grame.fr/"
first_slice :
- "Add ExternalFaustReference catalog entries."
- "Compile selected official examples as external references."
- "Use failures to decide whether Aquarium needs a lower-level graph DSL."
surge_xt :
priority : 4
purpose : "Modern hybrid synth and modulation matrix pressure test."
source : "https://github.com/surge-synthesizer/surge"
first_slice :
- "Inspect factory patch format and license/provenance."
- "Build feature extractor before translation."
cardinal :
priority : 5
purpose : "Modular graph and cable/rate semantics pressure test."
source : "https://github.com/DISTRHO/Cardinal"
first_slice :
- "Defer until a lower-level graph layer exists."
next_agent_start_here :
recommended_first_task : >
2026-05-13 11:47:39 +01:00
Refine operator graph parameter binding and envelope internals. Keep
readable authoring syntax as operator/route/carrier declarations.
2026-05-12 22:53:22 +01:00
must_read :
- AGENTS.md
- docs/audio-doctrine.md
- docs/reference-synth-roadmap.md
- state/spine.yaml
- state/memory.json
- state/evidence.jsonl
verification :
- "dotnet test AquariumSynthCSharp.slnx --no-restore"
2026-05-13 00:28:31 +01:00
completed_slices :
2026-05-13 11:47:39 +01:00
- date : 2026-05-13
summary : >
Added readable operator graph authoring syntax with `operator`, `route`,
and `carrier` declarations, plus `env=ad:attack:decay` and
`env=adsr:attack:sustain:level:release` forms. Converted the DX7
algorithm-8 rebuild away from compact number soup.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 36 passed"
2026-05-13 01:25:05 +01:00
- date : 2026-05-13
summary : >
Added first-class OperatorGraph support with operators, modulation edges,
carriers, operator feedback, parser syntax, and Faust emission mixed with
normal voices. Updated the DX7 algorithm-8 rebuild to use the operator
graph; remaining pressure is exact DX7 feedback-register timing and
rate/level envelopes.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 35 passed"
2026-05-13 00:54:59 +01:00
- date : 2026-05-13
summary : >
Added ReferenceRebuild catalog entries and two DX7-style Aquarium DSL
rebuilds. Algorithm 32 maps cleanly to six additive voices; algorithm 8
exposes missing operator graph concepts including explicit modulation
edges, summed modulators, and operator-local self-feedback.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 34 passed"
2026-05-13 00:49:53 +01:00
- date : 2026-05-13
summary : >
Added DX7 algorithm topology metadata for algorithms 1-32 from the
reverse-engineered OPS algorithm ROM table. Topology exposes carrier
operators, modulation edges, feedback-register writers, self-feedback
operators, delayed-feedback targets, raw ROM steps, and ReferencePatch
feature pressure.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 31 passed"
2026-05-13 00:45:00 +01:00
- date : 2026-05-13
summary : >
Added DX7 SysEx records and parsing for 155-byte voice edit buffers,
128 -byte packed voices, and 4104-byte packed 32-voice banks. Extracted
operators, envelopes, algorithm, feedback, oscillator sync, LFO,
transpose, voice name, checksum validation, and ReferencePatch features.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 28 passed"
2026-05-13 00:28:31 +01:00
- date : 2026-05-13
summary : >
Added PatchParameter and ReferencePatch contracts, `param` script parsing,
duplicate path validation, and Faust hslider emission for declared
2026-05-13 00:38:23 +01:00
controls. Parameter binding uses field-site references such as
`lpf=@/macro/brightness`; the emitter substitutes the parameter only at
the exact bound field site and warns for unbound parameters.
verification : "dotnet test AquariumSynthCSharp.slnx --no-restore: 23 passed"
2026-05-13 00:28:31 +01:00
2026-05-12 22:53:22 +01:00
cut_line :
- "Cut any importer that cannot state source provenance and license."
- "Cut weak tests that only prove parser leniency."
- "Cut voice-field sprawl when a target needs topology."
2026-05-12 22:57:56 +01:00
- "Cut any design that requires recompiling a patch to move an exposed musical parameter."
2026-05-12 22:53:22 +01:00
- "Split a lower-level graph DSL if Faust/Cardinal-style references make the voice DSL lie."