# DeepPluck V0.12.0 — Factory Presets

Status: **116/116 user-selected Factory presets implemented and automatically
validated. Technical Gate A remains OPEN for the unresolved 96-kHz/64-sample
deadline finding; final Cubase and real Standalone audio/MIDI checks are manual.**
Generator, candidates, audition workflow and final embedded library are built.
Every latest `Keep` decision is promoted byte-identically with an approval hash.
The prior four active Factory entries are replaced in the browser but retained
internally under `factory:0..3` with their original sounds for state compatibility.
Release passes 38/38 CTests; Debug covers all 38 after two test-only expectation
corrections. The final content matrix passes 696/696 native renders in each
configuration. Physical versions, local copies, VST3 load and Standalone window
smokes pass. Eleven of twelve CPU cases pass; the extreme D96/64 finding remains
OPEN after its one permitted confirmation. No installation, Git staging, commit,
push or rollback has been performed.

## Start and protected baseline

- Start: 2026-09-03, branch `master`, HEAD `4b4d0e5867799f66b9e3db95eb70cad195b57d33`.
- Existing working-copy version: 0.11.5, with 11 modified tracked files and 45
  untracked files including the now-authorized V0.12.0 specification. Index empty.
- The V0.11.5 oscillator-settled-mix-02 optimization remains the DSP basis.
  Previous practical acceptance permits roadmap continuation. The historical
  eleven timing overruns and formal `performancePass=false` remain deferred;
  this content milestone does not retroactively clear that gate.
- Evidence root: `Artifacts/V0.12.0/20260903T134200Z/`.
- `verification/start.json`: complete starting diff, 129 input hashes and
  20 protected user inputs (the earlier 19 plus the V0.12.0 masterprompt).
- `baseline/working-copy/`: original source/test/build files before this work.
- `baseline/binaries/`: original Debug/Release plugin, Standalone, tests,
  ToneAudit and Benchmark; plus the new preset adapter compiled while all
  original production sources were still unchanged at 0.11.5.
- `baseline/identity.json` proves zero original source changes at adapter capture.
  Both original adapter smokes passed; Deep Pluck raw peak 0.0795999 at 48 kHz/128.

## Implementation plan and current work

1. Preserve baseline; add a hardware-free real-processor preset audio/CPU adapter.
2. Extract the existing schema-1 codec with unchanged read/write policy.
3. Add deterministic developer category profiles and bounded candidate files.
4. Add final-content validation/embedding and an isolated audition workflow.
5. Add generator/codec/catalogue/negative-path tests and expand version checks.
6. Build and run all Debug/Release tests, prepare/audit 160 candidates, compare
   identical snapshots with the preserved 0.11.5 adapters and selected benchmarks.
7. Preserve the user's complete ratings and promote every latest `Keep` decision
   exactly, following the explicit 2026-09-04 scope amendment.

The generator uses a parameter-only APVTS owner with the production layout;
it never instantiates the production Random object for generation. Seeds use
fixed FNV-1a category bytes, SplitMix64 mixing and mt19937_64 with an explicit
53-bit unit mapping. Profile revision `rev1` and candidate index are part of
the identity. Batch ordering and output paths do not contribute to RNG input.
For one-slot Unison, a selected LFO Spread route falls back to Filter; no false
claim of audible single-slot spread movement and no change to plugin modulation.

The existing manager keeps scan/file permissions, schema and runtime identity.
Its parser/serializer are extracted into the shared pure `DeepPluckPresetCodec`.
No DSP, parameter layout, Random distributions, state migration or JUCE file is
changed by this extraction. The final content adds one registered suite per
configuration, bringing the total to 38 each. The separate timing acceptance is
not counted as a pass.

## Builds and known environment issue

Confirmed VS Community 2026 18.9.2, x64 MSVC 19.51.36256, tools 14.51.36231,
SDK 10.0.26100.0, CMake 4.4.3. The first sandboxed configure failed inside the
MSBuild FileTracker with E_ACCESSDENIED before compilation. The authorized
non-sandboxed retry passed; no admin policy, toolchain or system installation
was changed. `Tests/InvokeFactoryPresetBuild.ps1` initializes and checks the
actual Developer Environment, preserves the existing CPU reference cache,
and writes per-command native-exit/environment receipts under this evidence root.

Both seven-target V0.12.0 builds succeeded at an intermediate source checkpoint.
The then-current Release build receipt was
`verification/build-Release-20260903T142436733Z-result.json` (exit 0, 10.37 s,
incremental); Debug is `build-Debug-20260903T142555763Z-result.json` (exit 0,
190.40 s). Both corresponding logs contain zero warning lines. A prior configure
regeneration warned that the inherited CMAKE_GENERATOR_PLATFORM lacked a matching
CMAKE_GENERATOR; the wrapper now sets both for the child process, and the clean
later logs confirm the correction. No compiler/toolchain policy was changed.

The complete intermediate Debug suite passed **37/37**, 724.70 s:
`verification/test-Debug-20260903T142949100Z-result.json`. This includes all 33
existing suites and the four new ones. The four new suites also passed directly
in Release, including all 8,192 fixed seeds against the same raw-float goldens.
At that checkpoint full Release CTest had NOT yet run. Small later additions (strict final-name
whitespace checks, additional negative/statistical tests, isolated Developer GUI
preferences and explicit fine-tune-origin confirmation) still needed compilation
and tests. The resumed final builds below include those safeguards; the
intermediate receipts remain historical and have not been relabelled.

### Resumed final build/test receipts

Execution resumed on 2026-09-03 after the user enabled manual approval and asked
to continue. The first approved wrapper invocation exited 1 before compilation:
Windows PowerShell 5.1 retained the `vswhere` JSON array as one object, joining
the VS2019 and VS2026 launcher paths. The helper now assigns the parsed array
before filtering and captures the expected `cl` stderr banner without a false
PowerShell native-command error. This is a workflow-only fix; no toolchain,
DSP, reference, installed application or machine policy changed.
`verification/resume-build-discovery-failure.json` records the failed attempt.

| Final check | Result | Receipt under verification/ |
|---|---|---|
| Release build | PASS, exit 0, 16.59 s, zero warning lines | build-Release-20260903T153635575Z-result.json |
| Debug build | PASS, exit 0, 27.16 s, zero warning lines | build-Debug-20260903T153724261Z-result.json |
| Release CTest | PASS, 37/37, 108.86 s, exit 0 | test-Release-20260903T153813386Z-result.json |
| Debug CTest | PASS, 37/37, 436.89 s, exit 0 | test-Debug-20260903T154045616Z-result.json |

Each complete run includes the old 33 suites and all four new suites;
each configuration's 8,192 profile samples match the fixed raw-float golden file.
No existing test, reference or tolerance was removed or weakened. The later
window-smoke script correction below changes no compiled source or CTest target.

### Final 116-preset build and validation

After the user's 2026-09-04 content decision, a fresh Visual Studio 18 2026 x64
configure embedded exactly 116 approved entries and reported the four Legacy IDs
as compatibility-only. Debug and Release then built successfully with no compiler
errors or new warning lines. The preserved V0.11.5 Benchmark reference was reused.
After the final documentation/CMake-comment synchronization, clean confirmed-
environment builds pass again with zero diagnostic lines in
`verification-doc-sync/build-Debug-20260904T150835424Z.log` and
`verification-doc-sync/build-Release-20260904T150849861Z.log`. A preceding
sandboxed Debug attempt is retained as a failed FileTracker E_ACCESSDENIED receipt;
it did not compile and the authorized retry passed without warnings.

The complete Release run passes **38/38** in one invocation. The initial complete
Debug run passed 36/38; its only failures were obsolete test expectations that
still named the former visible Legacy entries and treated a documentation comment
as a product-version literal. No production code changed. Those two assertions
were corrected, rebuilt and rerun successfully, so the same Debug product state
has passing coverage for all 38 registered tests. No failed DSP, content, audio,
state, compatibility, artifact or binary test is being reclassified.

The real final-content audit uses the actual `DeepPluckPresetAudit` executable,
`scene full`, buffer 128, three sample rates and dry/wet variants:

| Configuration | Native cases | Result | Maximum raw peak | Evidence |
|---|---:|---|---:|---|
| Debug | 116 x 3 x 2 = 696 | PASS 696/696 | 0.5835207105 | `final-library-116-01/audio-debug-01/summary.json` |
| Release | 116 x 3 x 2 = 696 | PASS 696/696 | 0.5835207105 | `final-library-116-01/audio-release-01/summary.json` |

The Release summary was reconstructed by `-FinalizeExisting` from all 696 retained
successful native `result.json` receipts after the first summarization attempt hit
a PowerShell `OrderedDictionary` aggregation error. No render was rerun or invented;
the corrected script validates the complete receipt set before writing the summary.
Summary SHA256 values are
`8B7DDEE8E3EB8B7864257816FF9B600C8085ADB531C12059F0FF633795057AFD`
(Debug) and
`7F9C5EF66D800EE144C661EDD16D98A69670D643214C6F6A85EC537D9429100F`
(Release).

Two initial developer probes found and fixed tooling issues, not DSP problems:
decimal JSON endpoints needed comparison in the frozen float domain, and JUCE's
in-memory pretty JSON CRLF needed normalization to the on-disk UTF-8/LF hash
contract. The old compact User writer keeps its original once-canonicalized
semantics. Earlier probe output directories remain preserved; the regular
160-candidate run was generated after those fixes.

## Candidate and unchanged-audio evidence

- Initial run: `candidates-01`, seed `0x44504c55434b1200`, profile `rev1`,
  indices 1..20 in all eight categories, exactly 160 files.
- Manifest SHA256:
  `F4B63561F35A6A4CB129E8DCBAA493D38E6BB57F99DDAA7C9F6B7EB3E4DD8EFA`.
- `audition-01` is the isolated read-only candidate Pack plus separate User root;
  its candidate manifest is identical. No ratings or approvals have been invented.
- `screening-release-01/summary.json`: **160/160** actual-processor 48-kHz/128
  short MIDI renders passed finite/non-silent/peak/tail screening. Raw peak range
  **0.0181780215..0.1337778419**; every tail reached the stated quiet criterion.
  Longest whole clip (phrase plus tail) is 312,832 frames, about 6.517 s.
  No normalization, limiter, AGC or Output rescue was used.
- `screening-release-01/LISTENING_LIST.md` is the complete technical listening
  inventory. Technical eligibility is not a loudness, musical or user approval.
- `reference-release-01/summary.json` and `reference-debug-01/summary.json`:
  **16/16 per configuration** (first candidate in each category, dry and wet)
  match the genuine preserved V0.11.5 adapter exactly: all 62 applied values
  and every raw PCM byte. These receipts identify the tested intermediate binaries.
- `reference-release-final-01/summary.json` and
  `reference-debug-final-01/summary.json`: the final rebuilt binaries again pass
  **16/16 each**, with identical raw PCM and applied values against the original
  V0.11.5 binaries. These are new receipts, not relabelled intermediate results.
- Both final generators revalidated all 160 original candidates and all 160
  audition copies. Seeds, profile goldens, original manifests/files, DSP and
  the screening codec are unchanged. The existing 160 short renders remain
  valid screening evidence; none was regenerated or normalized unnecessarily.
- Preserved adapter source remains unchanged, SHA256
  `FFC1FDF18B711F355A96E02B37C9C8DE604E44F5AA7C3E83F1DBE7063BC817D4`.

`verification/candidate-level-review-01.json` adds review hints from those same
unaltered renders. Eleven candidates differ by more than 6 dB from their category's
median active-phrase RMS: ARP_016, ATM_019, BRIGHT_009, EMO_013, EXP_003/008/013/
014/017/018/020. These are listening flags, not automatic rejects or permission
to normalize Output. Whole-clip mono/ stereo RMS change is -0.653..0 dB; that
metric does not substitute for mono listening or prove perceived balance.

## Representative CPU comparison — executed, timing finding OPEN

`Tests/RunFactoryPresetPerformance.ps1` executed the predeclared serial
12-case comparison (B48, C48, D48, D96 and eight screened category representatives),
five alternating 0.5/2-second pairs, with at most one documented confirmation.
`performance-release-01/plan.json` was written before timing and fixes cases,
binary hashes, screening selection, environment and baseline provenance.
All 130 individual invocations exited 0 and paired the same 62 values/inputs.
The orchestration's exit 0 means measurements completed, **not acceptance**:
`summary.json` explicitly has `comparisonPass=false`.

Positive percentages mean more current CPU; negative values mean less. Ranges
are the five paired percentages, not confidence intervals. P99/max below are
the largest current-build values across the corresponding five runs.

| Case | Series | Median extra CPU | Pair range | P99 / max block (ms) | Misses old/new | Status |
|---|---:|---:|---:|---:|---:|---|
| Typical B, 48k/128 | 0 | +0.82% | +0.34..+3.87% | 0.0664 / 0.1434 | 0/0 | PASS |
| Dense C, 48k/128 | 0 | +0.64% | -0.74..+1.28% | 0.2078 / 0.4037 | 0/0 | PASS |
| Worst D, 48k/128 | 0 | -0.41% | -2.83..-0.24% | 0.3612 / 0.4610 | 0/0 | PASS |
| Worst D, 96k/64 | 0 | -1.42% | -4.06..+3.87% | 0.2639 / 5.5540 | 3/4 | OPEN |
| Worst D, 96k/64 | 1, confirmation | -0.75% | -2.82..+1.10% | 0.2476 / 3.7260 | 1/4 | OPEN |
| DEEP_001 | 0 | -0.01% | -13.68..+0.69% | 0.0869 / 0.1608 | 0/0 | PASS |
| WARM_001 | 0 | -1.31% | -4.93..-0.29% | 0.1898 / 0.3772 | 0/0 | PASS |
| BRIGHT_001 | 0 | -0.84% | -0.93..+0.63% | 0.0789 / 0.1498 | 0/0 | PASS |
| EMO_001 | 0 | +0.04% | -1.50..+5.83% | 0.2569 / 0.5268 | 0/0 | PASS |
| ATM_001 | 0 | -1.23% | -1.40..-0.73% | 0.1457 / 0.2488 | 0/0 | PASS |
| ARP_001 | 0 | -1.93% | -5.62..+2.15% | 0.1023 / 0.2782 | 0/0 | PASS |
| POLY_001 | 0 | -0.47% | -0.56..+1.16% | 0.1168 / 0.2404 | 0/0 | PASS |
| EXP_001 | 0 | -1.06% | -1.57..-0.11% | 0.1142 / 0.2134 | 0/0 | PASS |

No case confirms a >3% median CPU regression. D96/64 nevertheless exceeds its
0.6667-ms deadline in 4 baseline and 8 current blocks over the two series
(30,000 measured blocks per version). Both versions exhibit spikes; the baseline
maximum is 2.1076 ms, current maximum 5.5540 ms. Typical measured current D96
blocks are about 0.143 ms. Timer calibration is retained without subtraction.
These facts do not identify scheduling/Windows as the cause, nor prove that the
extra current misses are harmless. No attribution to an external cause is made.
The old eleven V0.11.5 misses remain a separate historical, deferred finding.

No additional retries, cherry-picking, priority/affinity/power changes, profiler
installation or DSP optimization were performed. The predeclared confirmation
allowance is exhausted. Further targeted diagnosis or a documented scope decision
requires explicit user direction; an unproven external-blocker claim would be wrong.

## Physical artifacts and process checks

All current VST3/Standalone and six tool/test EXEs per configuration report
0.12.0 (native x64); the project-local plugin/Standalone copies are byte-identical.
Generated version checks cover all seven versioned CMake targets.
`verification/versions-Release-20260903T155101753Z-result.json` and
`versions-Debug-20260903T155103975Z-result.json` both exit 0, including separate
stale/missing/class-version negative probes. The final inventory records all
20 current physical binaries and their exact hashes.

`verification/vst3-factory-{Debug,Release}-final-01.json` adds actual native
LoadLibrary/InitDll/GetPluginFactory/countClasses (two)/release/ExitDll checks.
These load the built modules, not just parse metadata. They do not instantiate
a processor in a host, validate device audio, replace Cubase or claim a full
Steinberg validator run. The bundle/identity CTests independently pass.

`verification/standalone-{Debug,Release}-final-02.json` and
`audition-{Debug,Release}-final-02.json`: **four PASS**, native window, normal
close, exit 0, no forced cleanup or remaining owned process. Developer smokes
use the isolated root and `--silent-smoke`; no note/device is started there.
Normal Standalone smokes do not assert actual audio/MIDI/listening quality.

After final-library embedding, Debug and Release artifact-version checks pass
again, including byte-identical project-local VST3/Standalone copies and all
negative probes. Native final VST3 factory loading passes in both configurations.
`final-library-116-01/standalone-debug.json` and
`final-library-116-01/standalone-release.json` both record a native window,
normal close and exit 0. These are process smokes, not Cubase or device listening.

The first Debug Audition smoke (`audition-Debug-final-01.json`) failed WM_CLOSE
and used forced cleanup; it remains a FAIL. JUCE recreates its native peer while
enabling the native title bar. The original test retained the earlier handle.
`Tests/SmokeStandalone.ps1` now requires input-idle, reacquires the matching
process-owned window, and records Win32 failure details. Both successful Audition
receipts confirm `windowRecreatedDuringStartup=true` on the unchanged binaries;
normal Standalone receipts report false. No plugin GUI/DSP workaround was added.

## Historical execution blocker and current resume point

The requested final local build/test invocation was stopped before process
creation by the automatic approval review backend twice: HTTP 404 Not Found,
request markers `a3558781cf5bdbe8-FRA` and `a35588c5bb65ae0b-FRA`.
Read-only inspection confirmed build/evidence roots are project-local,
COPY_PLUGIN_AFTER_BUILD remains FALSE and no system installation is involved.
The same authorized invocation was retried once after those checks; it failed
at the approval service again. The denied build/CTest action was not rerouted
through another shell or permission mode. Independent candidate file/audio
screening used the already-built tools; no denied compilation was performed.

Normal/manual execution is available again; all originally blocked build and test
checks have run. The user's complete audition and rating pass is also finished.
Do not recreate the baseline, candidates, ratings or final renders. Remaining work:

1. Preserve all completed receipts, candidate files and reference binaries.
2. Keep the D96/64 timing finding OPEN. No third timing series under the already
   exhausted protocol and no automatic Gate A PASS.
3. Perform final-version Cubase and real Standalone audio/MIDI checks manually.
4. Resolve baseline/commit ownership before committing the accumulated V0.11.5
   and V0.12.0 work. Never reset the working copy to simplify Git.

## Definition of Done — actual status

| Technical Gate A requirement | Status |
|---|---|
| Genuine current baseline, source/binary/protected-input inventories | PASS |
| Separate deterministic generator, eight profiles and fixed goldens | PASS |
| 160 candidates and short audio/schema/roundtrip eligibility | PASS |
| Isolated audition, review events, fine-tune origin, no candidate leakage | PASS (device/listening manual) |
| Schema/Factory/User/Pack, 62 parameters, host/state/Random/Undo contracts | PASS, registered tests |
| All Debug/Release builds and 38+38 registered CTest coverage | PASS; Release 38/38 complete, Debug 36/38 complete plus corrected targeted 2/2 |
| Unchanged tested raw audio against actual V0.11.5 | PASS, 16+16 final comparisons |
| CPU/no-new-timing-regression acceptance | OPEN, D96/64 finding above |
| Physical versions/local copies, bundle/native factory load, four window smokes | PASS |
| No install/push, disabled COPY_PLUGIN_AFTER_BUILD, protected files/JUCE, empty index | PASS |
| Workflow/report and retained reproducible evidence | PASS |

| Real Library Gate B requirement | Status |
|---|---|
| Approved fixed library | PASS, 116/116 with category counts 14/13/12/15/17/10/19/16 |
| Final names/IDs, all four Legacy replacement decisions, exact approval hashes | PASS |
| Real content embedding/count/audio gates at 44.1/48/96 kHz in both configs | PASS, 696/696 Debug and 696/696 Release |
| Final-version Cubase and Standalone audio/MIDI validation | OPEN, user task |
| Every final Factory preset manually auditioned and approved | PASS, 116/116 exact reviewed candidate files |

An explicit `factory-check --require-final yes` against the actual repository
catalogue exits 0 in Debug and Release and reports 116 approved active entries.
The registered `factory_final_content` suite validates the real files rather than
presenting a synthetic fixture as successful library content.

## Manual decisions and content

| Category | Generated / screened | Unreviewed | Keep / Maybe / Reject | Final selected | User approved |
|---|---:|---:|---:|---:|---:|
| Deep Plucks | 20/20 | 0 | 14/0/6 | 14 | 14/14 |
| Warm & Soft | 20/20 | 0 | 13/0/7 | 13 | 13/13 |
| Bright & Present | 20/20 | 0 | 12/0/8 | 12 | 12/12 |
| Emotional | 20/20 | 0 | 15/0/5 | 15 | 15/15 |
| Atmospheric | 20/20 | 0 | 17/0/3 | 17 | 17/17 |
| Arp & Sequence | 20/20 | 1 | 10/2/7 | 10 | 10/10 |
| Chord & Poly | 20/20 | 0 | 19/0/1 | 19 | 19/19 |
| Experimental | 20/20 | 0 | 16/0/4 | 16 | 16/16 |

The user reported completion of the complete 160-candidate listening pass on
2026-09-04. The isolated audition root contains **159 identifiable latest review
decisions: 116 Keep, 2 Maybe and 41 Reject**. Every stored decision has a known
candidate ID, a valid rating and the expected candidate-file SHA256; all current
candidate files still match the manifest. ARP_001 and EMO_007 each have one
superseded append-only event and correctly use the latest decision. The two Maybe
decisions are ARP_008 and ARP_014. **ARP_006 has no persisted review event**, so
the report retains it as unreviewed even though the user states the listening pass
was completed; no missing decision is invented. No notes or fine-tune origins
were recorded.

The review `Keep` values were initially shortlist evidence. The user's subsequent
instruction to remove the four old active presets and make **all** `Keep` entries
fixed Factory content is the explicit final selection and approval decision for
those exact files. This approved amendment replaces the original 48/six-per-category
target. The production copies and catalog approval hashes match the reviewed
candidate bytes; no sound was changed during promotion. Candidate working names
are retained as stable display names.

Deep Pluck, Soft Pluck, Tight Pluck and Long Pluck are removed from the active
browser. Their original `factory:0..3` snapshots remain available internally only
for old-state compatibility and cannot be silently reinterpreted.

**PASS: Every active Factory preset was manually auditioned and approved by the user.**
Cubase and real Standalone audio/MIDI validation remain manual OPEN items.

## Git and scope

No Git staging, commit, push or system installation. Content promotion used only
project files plus ignored evidence staging under `Artifacts/`. Gate A's timing result is still
OPEN, so an automatic package commit is not allowed. Existing V0.11.5 work is not
silently bundled into a V0.12.0 commit. A coherent commit that depends on that
uncommitted baseline requires an explicit baseline/commit decision once all
technical package gates pass. Never reset the working copy to solve that issue.
Checkpoint protection audit: all **20 protected user files unchanged**, all
**34 DSP/parameter/randomization/metering source files unchanged from the actual
starting working copy**, no JUCE changes, empty index and unchanged HEAD
`4b4d0e5867799f66b9e3db95eb70cad195b57d33`. Build/Artifacts are ignored, not staged.
`verification/resume-final-inventory-01.json` records final hashes, actual build/
test receipts and Git status. All 14 original reference-binary/bundle files and
both 160-file candidate copies are unchanged. The earlier
`verification/checkpoint-approval-blocked-final.json` remains preserved. Source
changes are limited to the shared preset codec/catalogue, control-side Processor
selection, browser population, developer tools, tests/build integration and docs.
The final-library turn adds the explicit 116-file catalogue/content, count and
compatibility validation, dynamic tests, reproducible promotion/final-audit tools
and synchronized documentation. It changes no DSP, parameter, effect, voice,
processor-audio, editor-control or JUCE implementation.

Concrete Git dependency: the current CMake/tests include the prior uncommitted
Benchmark target, four CPU suites and preserved oscillator optimization. A
V0.12.0-only commit on HEAD would lack that coherent baseline. The user has been
asked whether the previously practically accepted V0.11.5 work may be secured as
a separate, explicitly documented basis commit; no answer or timing waiver has
been assumed. There are no new commit hashes to report.
