# DeepPluck V0.8.0 Randomization & Preset System — Implementation Report

Date: 2026-08-31

Branch: `master`

Starting HEAD: `1139685f1143b30bb11598e4b78bcbcf2b0b596c`

Implementation commit: `786de0fb7aaefaef183d9bfd5fa5e88b574b2a9c` — `feat: add randomization and user preset system`

## 1. Outcome

The complete automatable V0.8.0 Definition of Done passed. DeepPluck now has musically weighted control-thread randomization, nine module locks, global Amount, one-step Random Undo, a file-based User preset/pack system, grouped browser workflow, and centralized artifact-version validation. The DSP, four Factory presets, forty-four APVTS parameters, plugin identity, automation, host-state format, bus contract, and 16-voice contract remain unchanged.

The user had previously confirmed the starting milestone with `0.7.5 läuft, zur info`. This report does not reinterpret that statement as V0.8.0 acceptance. V0.8.0 listening, visible GUI workflow, and Cubase verification remain open and are listed separately below.

## 2. Start gate and normative inputs

The work started from a clean tracked `master` at the V0.7.5 report commit. Only protected untracked Cubase files, images, and milestone master prompts were present. Before implementation the following were read and applied:

- `Docs/Sound/DeepPluck_Sound_Manifest_v1.0.md`;
- the V0.8.0 master prompt in full;
- `README.md`, `ARCHITECTURE.md`, `AGENTS.md`, and `CMakeLists.txt`;
- all implementation reports from V0.2.0b through V0.7.5;
- the current parameter, preset, processor, editor, GUI, DSP, and test sources.

Sound Manifest decision: Randomization favors short/deep/controlled emotional-house pluck sweet spots. Broad extremes have low but nonzero probability. No new waveform, modulation target, effect, general-purpose synthesis path, limiter, clipper, compressor, auto-gain, or hidden headroom control was introduced.

## 3. Confirmed environment

- Windows 11 x64
- Visual Studio 2026 Developer Command Prompt 18.9.2
- generator `Visual Studio 18 2026`, architecture `x64`
- MSVC 19.51.36256.0 (`14.51.36231` tool directory)
- Windows SDK 10.0.26100.0
- CMake 4.4.3
- JUCE 9.0.1
- C++20

The final configure command was:

```powershell
cmake --fresh -S . -B build -G "Visual Studio 18 2026" -A x64
```

## 4. V0.7.5 baseline

The pristine starting tree was freshly configured and measured before implementation:

| Configuration | CTest result | Duration |
|---|---:|---:|
| Debug | 22/22 pass | 20.50 s |
| Release | 22/22 pass | 6.67 s |

Immediate Release CPU baseline, using the unchanged deterministic performance harness:

| Scenario | V0.7.5 baseline |
|---|---:|
| 16 voices, both oscillators, Unison 1/2/4 | 21.7155 / 26.4997 / 36.3712 ms |
| maximum active modulation | 41.2497 ms; 1.13413 x Amount-zero |
| Saw/Saw versus V0.7.0 reference | 1.11729 x |
| worst pair, Sine/Sine | 51.0129 ms; 1.40256 x Saw/Saw |

The maximum Factory headroom baseline was Tight Pluck at `0.473075`.

## 5. Identity and compatibility

Unchanged identity:

- manufacturer code `Tntx`;
- plugin code `DpV1`;
- bundle identifier `de.tonetrax.deeppluck`;
- VST3 and Standalone formats;
- no audio input, stereo audio output, MIDI input, no MIDI output;
- exactly 16 preallocated musical voices;
- all forty-four parameter IDs, order, ranges, defaults, and version hints;
- all four Factory preset names, order, and values;
- host-state migration from V0.1.0 through V0.7.5.

V0.8.0 adds no APVTS utility parameter. Amount, locks, Undo, RNG state, catalog identity, and metadata are runtime/control state. Host state remains the complete APVTS value tree and contains no external preset ID or path.

## 6. Complete parameter and randomization matrix

| # | Parameter ID | Random module |
|---:|---|---|
| 0 | `outputGain` | excluded |
| 1 | `masterTune` | excluded |
| 2 | `ampAttack` | Amp Envelope |
| 3 | `ampDecay` | Amp Envelope |
| 4 | `ampSustain` | Amp Envelope |
| 5 | `ampRelease` | Amp Envelope |
| 6 | `filterEnabled` | Filter |
| 7 | `filterCutoff` | Filter |
| 8 | `filterResonance` | Filter |
| 9 | `filterDrive` | Filter |
| 10 | `filterKeyTracking` | Filter |
| 11 | `filterEnvAmount` | Filter Envelope |
| 12 | `filterAttack` | Filter Envelope |
| 13 | `filterDecay` | Filter Envelope |
| 14 | `filterSustain` | Filter Envelope |
| 15 | `filterRelease` | Filter Envelope |
| 16 | `transientEnabled` | Transient |
| 17 | `transientLevel` | Transient |
| 18 | `transientDecay` | Transient |
| 19 | `transientTone` | Transient |
| 20 | `noiseEnabled` | Noise |
| 21 | `noiseLevel` | Noise |
| 22 | `noiseDecay` | Noise |
| 23 | `noiseTone` | Noise |
| 24 | `osc2Enabled` | Oscillator 2 |
| 25 | `osc2Level` | Oscillator 2 |
| 26 | `osc2Octave` | Oscillator 2 |
| 27 | `osc2Semitone` | Oscillator 2 |
| 28 | `osc2FineTune` | Oscillator 2 |
| 29 | `unisonVoices` | Unison / Stereo |
| 30 | `unisonDetune` | Unison / Stereo |
| 31 | `stereoSpread` | Unison / Stereo |
| 32 | `lfoRate` | Modulation |
| 33 | `lfoSync` | Modulation |
| 34 | `lfoSyncDivision` | Modulation |
| 35 | `lfoWaveform` | Modulation |
| 36 | `lfoRestartMode` | Modulation |
| 37 | `lfoFilterAmount` | Modulation |
| 38 | `lfoPitchAmount` | Modulation |
| 39 | `lfoSpreadAmount` | Modulation |
| 40 | `osc1Waveform` | Oscillator 1 |
| 41 | `osc1PulseWidth` | Oscillator 1 |
| 42 | `osc2Waveform` | Oscillator 2 |
| 43 | `osc2PulseWidth` | Oscillator 2 |

The automated matrix test proves exactly 42 unique randomizable IDs, each in exactly one of nine modules, with indices 0 and 1 absent.

## 7. Exact target distributions

Notation: `D` is a weighted discrete draw, `U` uniform linear, `LU` log-uniform, and `M` a weighted mixture. Every mixture totals exactly 100 and the final result is canonicalized through the actual JUCE parameter.

### Oscillator 1

- `osc1Waveform`: `D{Saw:35, Triangle:25, Sine:20, Square:12, Pulse:8}`
- `osc1PulseWidth`: `M{75:U[0.30,0.70], 20:U[0.15,0.85], 5:U[0.05,0.95]}`

### Oscillator 2

- `osc2Enabled`: `D{On:85, Off:15}`
- `osc2Level`: `M{60:U[-24,-12], 25:U[-36,-24], 10:U[-12,-6], 5:U[-6,0]}` dB
- `osc2Octave`: `D{-1:30, 0:60, +1:10}`
- `osc2Semitone`: `D{0:38, -12:12, +12:10, +7:10, -5:10, +5:6, -7:6, +3:2, +4:2, -3:2, -4:2}`
- `osc2FineTune`: `M{65:U[-12,+12], 25:U[-25,+25], 10:U[-50,+50]}` cents
- `osc2Waveform`: `D{Sine:35, Saw:25, Triangle:20, Square:10, Pulse:10}`
- `osc2PulseWidth`: `M{75:U[0.30,0.70], 20:U[0.15,0.85], 5:U[0.05,0.95]}`

### Amp Envelope

- `ampAttack`: `M{70:LU[0.001,0.015], 25:LU[0.015,0.080], 5:LU[0.080,0.500]}` s
- `ampDecay`: `M{55:LU[0.080,0.550], 25:LU[0.020,0.080], 15:LU[0.550,1.800], 5:LU[1.800,4.000]}` s
- `ampSustain`: `M{65:U[0.00,0.12], 25:U[0.12,0.40], 10:U[0.40,0.75]}`
- `ampRelease`: `M{50:LU[0.080,0.500], 30:LU[0.500,1.500], 15:LU[0.020,0.080], 5:LU[1.500,5.000]}` s

### Filter

- `filterEnabled`: `D{On:90, Off:10}`
- `filterCutoff`: `M{10:LU[250,700], 55:LU[700,4500], 25:LU[4500,9000], 10:LU[9000,16000]}` Hz
- `filterResonance`: `M{65:U[0.05,0.40], 25:U[0.40,0.65], 8:U[0.65,0.82], 2:U[0.82,0.95]}`
- `filterDrive`: `M{55:U[0,6], 30:U[6,10], 12:U[10,14], 3:U[14,18]}` dB
- `filterKeyTracking`: `M{60:U[0.20,0.60], 25:U[0.00,0.20], 15:U[0.60,0.90]}`

### Filter Envelope

- `filterEnvAmount`: `M{70:U[0.50,3.50], 15:U[0.00,0.50], 10:U[-2.00,0.00], 5:U[3.50,5.00]}` octaves
- `filterAttack`: `M{75:LU[0.001,0.020], 20:LU[0.020,0.100], 5:LU[0.100,0.800]}` s
- `filterDecay`: `M{60:LU[0.060,0.500], 25:LU[0.500,1.500], 10:LU[0.015,0.060], 5:LU[1.500,3.000]}` s
- `filterSustain`: `M{70:U[0.00,0.15], 20:U[0.15,0.40], 10:U[0.40,0.70]}`
- `filterRelease`: `M{60:LU[0.050,0.600], 25:LU[0.600,1.800], 10:LU[0.010,0.050], 5:LU[1.800,4.000]}` s

### Transient and Noise

- `transientEnabled`: `D{On:85, Off:15}`
- `transientLevel`: `M{65:U[-30,-16], 25:U[-40,-30], 8:U[-16,-9], 2:U[-9,0]}` dB
- `transientDecay`: `M{60:U[0.006,0.020], 25:U[0.020,0.045], 10:U[0.001,0.006], 5:U[0.045,0.080]}` s
- `transientTone`: `M{70:U[0.30,0.70], 15:U[0.15,0.30], 15:U[0.70,0.85]}`
- `noiseEnabled`: `D{On:70, Off:30}`
- `noiseLevel`: `M{70:U[-42,-24], 20:U[-24,-16], 8:U[-60,-42], 2:U[-16,-8]}` dB
- `noiseDecay`: `M{60:LU[0.040,0.250], 25:LU[0.250,0.600], 10:LU[0.010,0.040], 5:LU[0.600,1.200]}` s
- `noiseTone`: `M{70:U[0.20,0.60], 15:U[0.05,0.20], 15:U[0.60,0.80]}`

### Unison / Stereo

- `unisonVoices`: `D{1:25, 2:45, 3:22, 4:8}`
- `unisonDetune`: `M{65:U[1,9], 25:U[9,16], 8:U[0,1], 2:U[16,24]}` cents
- `stereoSpread`: `M{60:U[0.20,0.65], 25:U[0.00,0.20], 12:U[0.65,0.85], 3:U[0.85,1.00]}`

### Modulation

- `lfoRate`: `M{55:LU[0.05,0.50], 30:LU[0.50,2.00], 10:LU[0.02,0.05], 5:LU[2.00,6.00]}` Hz
- `lfoSync`: `D{Free:75, Sync:25}`
- `lfoSyncDivision`: `D{4/1:2, 2/1:4, 1/1:12, 1/2:23, 1/4:34, 1/8:20, 1/16:5}`
- `lfoWaveform`: `D{Sine:45, Triangle:30, Saw:15, Square:10}`
- `lfoRestartMode`: `D{Free Running:35, Retrigger First Note:65}`
- `lfoFilterAmount`: `M{25:exact 0, 50:U[-0.50,+0.50], 20:U[-1.20,+1.20], 5:U[-2.00,+2.00]}` octaves
- `lfoPitchAmount`: `M{50:exact 0, 40:U[-7,+7], 8:U[-20,+20], 2:U[-50,+50]}` cents
- `lfoSpreadAmount`: `M{30:exact 0, 50:U[-0.35,+0.35], 15:U[-0.70,+0.70], 5:U[-1.00,+1.00]}`

Every declared branch was observed in a fixed 10,000-draw corpus per parameter, and every observed branch frequency stayed within the required ±3 percentage points of its declared weight.

## 8. Amount, RNG, locks, Undo, and display behavior

For continuous parameter current normalized value `c`, target normalized value `t`, and Amount `a`:

```text
resultNormalized = c + a * (t - c)
```

Bool and choice targets use Amount as the probability of accepting the drawn target. Parameter ranges, integer steps, and choices are canonicalized by the actual JUCE parameter.

- Amount 0 is a total no-op and consumes no RNG.
- A locked module consumes no RNG, changes no sound/display, and creates no Undo.
- Master Random with all nine modules locked is a total no-op.
- Equal seed/state/Amount/locks produce exact equal values; different seeds vary.
- Production seeding is per instance and occurs outside audio.
- One successful Random stores the immediately preceding forty-two values and preferred display fingerprint.
- A second successful Random replaces that one-step snapshot.
- Undo restores the forty-two values while leaving current Output and Tune untouched.
- Manual edits do not destroy the snapshot; preset/Factory load and host restore do.
- Save, Refresh, Amount, and Lock changes do not invalidate it.
- Successful Random displays Custom unless the complete preferred/factory fingerprint matches; Undo restores the preferred name when it matches again.

## 9. Preset root, schema, and compatibility

Default root:

```text
%USERPROFILE%/Documents/Tonetrax/Just a Lil' Pluck Synth/Presets
```

Tests inject `build/TestData/...` and never use the real Documents folder. The extension is `.deeppluckpreset`, case-insensitive. A complete fresh-default schema-1 example is:

```json
{
  "format": "JustALilPluckPreset",
  "schemaVersion": 1,
  "name": "Deep Pluck Example",
  "author": "User",
  "pluginVersion": "0.8.0",
  "parameters": {
    "outputGain": -3.0,
    "masterTune": 440.0,
    "ampAttack": 0.003,
    "ampDecay": 0.320,
    "ampSustain": 0.0,
    "ampRelease": 0.180,
    "filterEnabled": 1,
    "filterCutoff": 1800.0,
    "filterResonance": 0.18,
    "filterDrive": 3.0,
    "filterKeyTracking": 0.35,
    "filterEnvAmount": 2.5,
    "filterAttack": 0.002,
    "filterDecay": 0.280,
    "filterSustain": 0.0,
    "filterRelease": 0.180,
    "transientEnabled": 1,
    "transientLevel": -18.0,
    "transientDecay": 0.012,
    "transientTone": 0.55,
    "noiseEnabled": 1,
    "noiseLevel": -27.0,
    "noiseDecay": 0.120,
    "noiseTone": 0.35,
    "osc2Enabled": 1,
    "osc2Level": -15.0,
    "osc2Octave": 0,
    "osc2Semitone": 0,
    "osc2FineTune": -7.0,
    "unisonVoices": 2,
    "unisonDetune": 4.0,
    "stereoSpread": 0.35,
    "lfoRate": 0.25,
    "lfoSync": 0,
    "lfoSyncDivision": 4,
    "lfoWaveform": 0,
    "lfoRestartMode": 1,
    "lfoFilterAmount": 0.0,
    "lfoPitchAmount": 0.0,
    "lfoSpreadAmount": 0.0,
    "osc1Waveform": 0,
    "osc1PulseWidth": 0.50,
    "osc2Waveform": 0,
    "osc2PulseWidth": 0.50
  },
  "metadata": { "description": "optional" }
}
```

`pluginVersion` records the writer and does not gate compatible schema 1. Missing known values use current APVTS defaults, not the previously loaded sound. Unknown future values are ignored. Invalid format/schema, nonnumeric known values, nonfinite values, corrupt JSON, and files larger than one MiB reject before parameter application. Values are bounded/quantized through their real parameters.

## 10. Scan, packs, save, delete, and navigation

- The root and `User/` are created on the first runtime scan.
- Files under `User/` are editable; direct root files appear read-only under Imported.
- Every other direct subfolder is a read-only Pack.
- Valid `pack.json` uses format `JustALilPluckPack`, schema 1, and `packName`; missing/bad metadata falls back to the folder name.
- Nested folders become categories.
- Sorting is stable by source, group, and case-insensitive relative path.
- Scans skip symbolic links and path escapes, stop below depth 8, process at most 2,000 preset files, and reject files above one MiB.
- Repeated Refresh requests coalesce; catalog replacement is atomic from the GUI's perspective.
- Save/Save As write UTF-8 JSON to a temporary sibling and atomically replace/move it.
- Windows-invalid/control characters become `_`; trailing dots/spaces are removed; reserved device names are prefixed; basename length is capped at 80; extension is appended.
- Filename collision returns an explicit overwrite-confirmation result.
- Only a contained `User/` file may be overwritten or moved to the recycle bin.
- Factory, Pack, Imported, and escaped paths cannot be overwritten/deleted.
- Open Folder is an explicit GUI action; it is never called from DSP or startup.
- Previous/Next cycles Factory followed by the stable dynamic catalog. From Custom, Next starts at Factory 0 and Previous selects the final catalog entry.

Host-state independence passed: after a User preset load, the host state was saved, the test-root preset file removed, and a new processor restored all forty-four values with no external identity dependency.

## 11. GUI integration

The editor remains fixed at 1180 x 700 and has exactly forty-four APVTS attachments. The expanded permanent header contains:

- grouped preset selector and Previous/Next;
- Master Random, Undo, and Amount;
- Save, Save As, Delete, Refresh, and Open Folder;
- status, Master Tune, Output, and version label.

Each of the nine existing module panels owns one unique `random.<module>` / `lock.<module>` pair. Lock toggles disable and dim their matching Random button. The automated GUI suite verifies unique IDs, positive in-parent bounds, no pair/header overlap, grouped Factory entries, unchanged forty-four attachment ownership, repeated page/editor lifecycle, and audio-neutral GUI activity. The version text is derived from `JucePlugin_VersionString`.

## 12. Realtime, threading, and security review

`processBlock`, voices, Unison, oscillators, filters, envelopes, modulation, and sample loops contain no Random/Preset call path. The audio callback still performs no allocation, lock, file/network access, logging, GUI call, string lookup, ValueTree work, or entropy acquisition.

Randomization writes host-notified APVTS values only from explicit control actions. Audio sees changes through the existing once-per-block validated snapshot and existing smoothers. The preset scanner is a low-priority worker. Catalog access uses immutable copies behind a control-side lock that audio never reads. An injected file-operation hook observed scan I/O during concurrent audio rendering and recorded zero operations on the marked audio thread; compared audio remained finite and sample-identical.

No metadata is executed or used to build a shell command. Containment is checked against normalized root/User paths. Symlinks are skipped. Scans and parsers have depth, count, and size limits. No admin, registry, installer, network, or external dependency was added.

## 13. Automated tests

All previous twenty-two suites remain. New suites:

- `randomization`;
- `preset_files`;
- `preset_integration`;
- `artifact_version`.

Final results after the last test-source change:

| Configuration | Build | CTest | Duration | Compiler errors | New compiler warnings |
|---|---:|---:|---:|---:|---:|
| Debug | pass | 26/26 pass | 25.58 s | 0 | 0 |
| Release | pass | 26/26 pass | 8.72 s | 0 | 0 |

Randomization coverage includes every branch of all 42 distributions at 10,000 deterministic target draws each, every value of all forty-four parameters after each of 10,000 mixed module/Amount/lock actions, exact RNG no-consumption for no-ops, Undo/display boundaries, 32 rendered deterministic randomized states, forced high-risk states, 16 voices, twenty Note-Ons for voice stealing, and twelve render blocks per state.

Preset coverage includes all forty-four values, Unicode UTF-8 roundtrip, atomic save, collision confirmation, Save As, missing/unknown fields, bad schema/format/type/corruption/size, Windows filenames, path escape, User/Pack/Imported/categories, valid/missing/bad pack metadata, stable sort, depth 8, 2,000-of-2,001 file cap, delete protection, host-state independence, refresh coalescing, navigation, GUI lifecycle, and concurrent scan/audio separation.

## 14. Audio, headroom, determinism, and CPU

- maximum randomized/forced-high-risk 16-voice peak: `0.52128`;
- maximum Factory headroom matrix peak: `0.473075`;
- all tested samples finite;
- required peak limit: `0.95`;
- no limiter/clipper/auto-gain added;
- equal random seed/state/Amount/locks: exact value equality;
- concurrent scan versus control audio: sample-identical within `1e-7` test tolerance;
- fixed eight-entry preset scan: `3.5015 ms` measured Release run.

Final Release CPU measurement:

| Scenario | V0.8.0 | Ratio / acceptance |
|---|---:|---:|
| Unison 1/2/4, 16 voices, both oscillators | 22.0763 / 26.8029 / 37.3526 ms | 1.0166 / 1.0114 / 1.0270 x V0.7.5 start baseline; target <=1.05 |
| Amount zero / maximum active modulation | 37.3526 / 43.1971 ms | 1.15647 x; limit 2.0 |
| Saw/Saw versus V0.7.0 reference | 37.3526 ms | 1.14744 x; limit 1.20 |
| worst waveform pair, Sine/Sine | 51.3226 ms | 1.374 x Saw/Saw; limit 2.0 |
| Unison 4 / Unison 1 | — | 1.69198 x; limit 8.0 |

One transient Debug-only timing sample was rejected during iterative testing when the host was under abnormal load; the isolated rerun and complete final Debug run passed. Per specification, Debug timing is not the CPU acceptance basis. The final Release measurements above are the acceptance evidence.

## 15. Central version flow

`project(DeepPluck VERSION 0.8.0)` is the only authoritative current version. CMake passes `${PROJECT_VERSION}` to `juce_add_plugin`, asserts the JUCE target version, and passes the expected version/test root to tests. The GUI reads `JucePlugin_VersionString`. JUCE generates VST3 metadata and Windows VERSIONINFO. Configure deletes only the two known build-local generated resource files to prevent stale Standalone metadata.

`Tests/VerifyArtifacts.ps1` receives version and paths from CMake. Current-config CTest and the final all-config invocation passed:

- Debug VST3 module version `0.8.0`;
- Release VST3 module version `0.8.0`;
- Debug Standalone FileVersion/ProductVersion `0.8.0 / 0.8.0`;
- Release Standalone FileVersion/ProductVersion `0.8.0 / 0.8.0`;
- build output and local copy byte-identical;
- no current-version literal in `Source/`.

## 16. Artifacts and SHA-256

| Artifact | Bytes | SHA-256 |
|---|---:|---|
| Debug VST3 `moduleinfo.json` | 1,086 | `101DE1A429C9E204F2BD12909E07BE944ACA0F4F1624997BCE72F396ADC9D85A` |
| Debug VST3 inner binary | 25,216,000 | `A698B46EC27D6A17F3493B80B89E5BDA6B0CE4E260129170C4651981F098012E` |
| Debug Standalone | 27,601,408 | `113B827B98B8C7634267942F63DFE41901839D6957DAF91EE11FD750663DFCB1` |
| Release VST3 `moduleinfo.json` | 1,086 | `101DE1A429C9E204F2BD12909E07BE944ACA0F4F1624997BCE72F396ADC9D85A` |
| Release VST3 inner binary | 7,993,344 | `27E00522130C4827743D05F9650E3B3BBB0FED1BF236E2A605C4245D466C4B90` |
| Release Standalone | 9,172,992 | `AF6B8A8014426C69DD4D5DD7C8DD0E69B7E7BA4AF51A550DF2906EFF648093B5` |

The matching files under `Artifacts/Debug` and `Artifacts/Release` have exactly the same sizes and hashes. `COPY_PLUGIN_AFTER_BUILD` remains `FALSE`. No system installation occurred.

The pre-existing system VST3 was read-only checked after the work and remained unchanged:

| System file | Bytes | SHA-256 |
|---|---:|---|
| `Contents/Resources/moduleinfo.json` | 1,086 | `E42CA30EF209944C12BFB43805D72306F36C642408794DC3D428586F5486FD45` |
| `Contents/x86_64-win/DeepPluck.vst3` | 7,870,464 | `288F1BC88BBB8FCD131DA089846C3ED99D5E554B77EA9DA4A97EA18E2000FDC3` |

## 17. Standalone smoke

Both final project-local executables started, exposed a nonzero native main-window handle, accepted a normal window close, exited with code 0, and left no process behind:

- Debug: handle `527716`, exit 0;
- Release: handle `4457834`, exit 0.

This hidden process/window smoke is not a claim of visible GUI acceptance or listening acceptance.

## 18. Protected files, JUCE, and repository hygiene

Final protected-file hashes matched their recorded values. `CubaseTest/` remained recursively unchanged:

| Protected file | Bytes | SHA-256 |
|---|---:|---|
| `CubaseTest/DeepPluckTest.cpr` | 785,571 | `A039DBBF9F60E8A8C61AC11C5CD63527CCD2EE5FF9935020CC0071B93AF36C5B` |
| `CubaseTest/Auto Saves/DeepPluckTest-01-(MIDI importieren SpurDeepPluck).bak` | 677,938 | `F589C323777A8CBEC9C3C1EF334E443E05C2889D14C5C834D66C7209EAEF8380` |
| `Docs/Codex-Bild 31. Aug. 2026, 11_53_35.png` | 1,487,439 | `067F6550C004B2C47857A9F75496F493E3A3C3DBC424F44DD69BA56D5DCEDDB2` |
| `Docs/deeppluck_synthesizer_oberfläche.png` (appeared externally near completion) | 1,487,439 | `067F6550C004B2C47857A9F75496F493E3A3C3DBC424F44DD69BA56D5DCEDDB2` |
| V0.2.0a master prompt | 71,058 | `D9FBC1AC0F427E85FEBA3001018FB7A180AB3AA9BEFB23E9345FDCE215C6A9AC` |
| V0.2.0b master prompt | 69,848 | `7485ED397B1B2541D8F3062F141388B4A31F4496465031535E2A989B9E398B4D` |
| V0.5.0 master prompt | 67,755 | `FE239DD85257ADDF1C77562414EA44126CE71EB23FCAA38C9A0D495458B8115A` |
| V0.6.0 master prompt | 74,230 | `F955FBF5E8EC1FF1AA3029ACD36195E8C282E65F7AC0CBDF382D651EAC0B51B7` |
| V0.6.5 master prompt | 47,921 | `8EBFE9705CDA3593B45A4795D02D9C7BF9D0778C92AFDA4C49546B172DC4AA00` |
| V0.7.0 master prompt | 63,160 | `250F5EB3F8092FFD6E601CEB014AAA998B133A13D029E5B68F67EF8D9BBA4051` |
| V0.7.5 master prompt | 68,380 | `F197C3C2FF2C7B661101E198D6DDECE8680556EBCBDB85CE44B9D62FD6952C67` |
| V0.8.0 master prompt | 73,491 | `35D6D31BCB2DEE560DB38DFA3FFBA97E527536B1B5E6D1E46B944F042E74EF04` |

No file under `JUCE/` changed. `build/` and `Artifacts/` remain ignored and unstaged. No protected untracked file or master prompt was staged. No push was performed.

## 19. Documentation and implementation files

Commit 1 changed normal project documentation:

- `README.md`: V0.8.0 workflow, modules, Amount/Undo/locks, root/schema/packs, limits, compatibility, tests, and manual verification;
- `ARCHITECTURE.md`: control/audio boundary, RNG/Undo/locks, parameter-value layer, preset worker/schema/state independence, GUI ownership, version flow, and 26-suite contract;
- `AGENTS.md`: V0.8.0 reference environment, central version consistency, and permanent preset/audio-thread separation rules;
- `CMakeLists.txt`: version 0.8.0, source registration, configure assertion, test-provided version/root, 26 suites, and artifact check.

Implementation and tests are in focused new `Parameters/DeepPluckParameterState`, `Randomization/DeepPluckRandomization`, and `Presets/DeepPluckPresetManager` files plus processor/editor integration and `Tests/VerifyArtifacts.ps1`.

This report is the sole content of commit 2, `docs: add V0.8.0 implementation report`. Its own full hash cannot be embedded in the immutable commit it identifies; the final delivery supplies that hash together with implementation commit `786de0fb7aaefaef183d9bfd5fa5e88b574b2a9c`.

## 20. Manual listening and visible GUI workflow — open

The user must still verify, with the visible UI and listening environment:

1. Master Random at 0/10/25/50/100% and all nine module Random buttons.
2. Every module lock, disabled/dimmed locked Random, and Master lock exclusion.
3. Random/Random/Undo, manual edit/Undo, and preferred/Custom display behavior.
4. Musical focus across many random sounds; rare extremes must remain useful rather than general-purpose.
5. Headroom/loudness, held notes, tails, voice stealing, Transient, Noise, modulation, high Resonance/Drive, and no abrupt transitions.
6. Save, Save As, overwrite confirmation, reload after reopening, and confirmed User delete.
7. Factory/Pack delete protection; packs with/without/bad `pack.json`; categories and Refresh.
8. Open Preset Folder and real Documents-root behavior.
9. All unchanged Factory sounds and prior waveform/filter/unison/modulation listening contracts.
10. GUI layout at 100%, 125%, and 150% Windows scaling.

No manual result is claimed here.

## 21. Cubase validation — open

The user must still verify in Cubase:

1. V0.8.0 is discovered as the same instrument and shows exactly forty-four automation parameters, with no Random/Lock/Preset utility parameter.
2. Existing V0.1.0-through-V0.7.5 projects, states, automation, IDs, and Factory sounds recall unchanged.
3. A loaded User preset survives project save/close/reopen after the external preset file is moved or deleted.
4. Randomization during held notes and release tails remains smooth; locks, Undo, Custom, and preferred names behave correctly.
5. Pack copy/Refresh/select/recall works in the host.
6. Realtime and offline bounces remain deterministic for unchanged states.
7. Multiple instances, audio-device behavior, peak meters, and host CPU remain healthy while refreshing/scanning.
8. Complete User/Factory/Pack workflow and automation modes work without automatic installation.

No Cubase, automation, host-state, host-CPU, or listening acceptance is claimed by the automated run.

## 22. Final status

All automatable requirements are complete. Manual listening/GUI workflow and Cubase validation remain explicitly pending. No external blocker remains and no push was performed.

**automatable DoD complete; manual V0.8.0 verification pending**
