Skip to content

Add bounded pedal multi-delay audition and profiling package - #14

Closed
Denys wants to merge 18 commits into
masterfrom
codex/pedal-multidelay-audition-profiler-2026-08-13
Closed

Denys wants to merge 18 commits into
masterfrom
codex/pedal-multidelay-audition-profiler-2026-08-13

Conversation

@Denys

@Denys Denys commented Aug 13, 2026 •

Copy link
Copy Markdown
Owner

Manager summary

Adds a deterministic host-audition and timing-evidence package around the existing five-mode PedalDelayEngine without changing the pedal UI, public parameter contract, engine implementation, or target firmware.

This makes every compact mode reproducibly renderable and measurable for engineering review:

  • DIGI
  • TAPE
  • MOD
  • REV
  • FREEZE

The result is deliberately named HOST_AUDITION_PACKAGE_READY, not HOST_LISTENED_ACCEPTED or TARGET_READY.

What changed

  • adds a standalone C++17 runner under DaisyHost/tools/pedal_multidelay_audition/;
  • adds 15 deterministic cells, three per mode: reference / character / stress;
  • emits 15 stereo float WAVs, 15 per-cell JSON records, an aggregate audition manifest, host timing CSV, and environment JSON;
  • records finite/non-silent status, peak, RMS, tail RMS, max adjacent step, stereo-difference RMS, and deterministic FNV-1a checksum;
  • implements bounded host profiling with:
    • 1,000 warm-up blocks;
    • 50,000 measured blocks per mode;
    • arithmetic mean;
    • p99 and p99.9 via offline std::nth_element;
    • observed maximum, explicitly not WCET;
    • p99.9 margin/utilization;
    • observed execution deadline misses/rate/lateness;
    • timer-bracket overhead and environment metadata;
  • adds the corrected Real-Time DSP Profiling System v1.1 candidate;
  • adds a source-grounded work-package contract separating host render evidence, host timing, human listening, and physical target feasibility;
  • adds a scoped GitHub Actions gate that runs existing focused PedalDelay tests on Windows and the bounded renderer/profiler on Ubuntu.

Public and parallel-work contract

Unchanged:

  • app id pedal_multidelay;
  • mode and slot identity/order;
  • canonical parameter ids and descriptor schema;
  • freeze operations;
  • bypass/trails and tap/hold behavior;
  • PedalDelayEngine.h/.cpp;
  • PedalDelayCore.h/.cpp;
  • JUCE editor/processor and board-profile/UI files.

The final diff contains exactly seven newly added files. No pre-existing source, shared tracker, JUCE/UI file, engine file, core wrapper, or target-firmware file is modified.

Exact final evidence

PR head:

f65de8be96b268576e121e65f5423b4852b9c44c

Base inspected:

041bfcbb7975316606ece8f1ccbacbab9c0e1482

Scoped multi-delay workflow

GitHub Actions DaisyHost Pedal Multi-Delay Audition run 31696153621: SUCCESS.

Actually executed on the final PR head/merge ref:

  • Windows Server 2022 / MSVC 19.44 Release-focused build;
  • existing focused PedalDelay CTest suite: 37/37 PASS;
  • Ubuntu 24.04 / GCC 13.3 Release bounded runner build;
  • bounded audition/profiling CTest: PASS;
  • audition cells: 15/15 PASS;
  • generated evidence files: 33;
  • artifact ID: 9179550895;
  • artifact size: 10,391,426 bytes;
  • artifact SHA-256: 90f4a152b95475c305fe783a9749724c5fb3a9fcc024190219e705cadd66d865.

Host-only timing evidence

Configuration:

48 kHz
48 frames per channel
1,000 warm-up blocks
50,000 measured blocks per mode
50 s measured audio per mode
std::chrono::steady_clock
GCC 13.3.0 Release
Mode Mean µs p99 µs p99.9 µs Observed max µs p99.9 load Observed execution deadline misses
DIGI 2.7948 2.982 8.256 25.014 0.8256% 0
TAPE 6.7337 9.204 14.239 45.173 1.4239% 0
MOD 2.4914 2.583 7.941 21.335 0.7941% 0
REV 3.3256 3.614 9.085 53.195 0.9085% 0
FREEZE 7.4889 10.443 14.039 32.848 1.4039% 0

These measurements are regression/characterization evidence for the CI host only. They are not converted into Cortex-M7 margin.

Repository checks

  • Fix Style run 31696153590: SUCCESS using the repository-pinned clang-format 10 path;
  • Build All run 31696153589: SUCCESS for repository libraries, embedded examples, and distributable generation; deploy step skipped for the PR event as designed.

Build All is not the full DaisyHost/JUCE milestone gate and is not presented as such.

Known real-time safety hold

The runner calls PedalDelayEngine directly. The existing live PedalDelayCore::Process() wrapper still contains a scratch-vector growth fallback for an oversized callback. That shared wrapper file is intentionally untouched here.

Current evidence boundary:

ENGINE_PROCESS_ALLOCATION_FREE: VERIFIED_SOURCE
CORE_WRAPPER_ALLOCATION_GUARANTEE: HOLD
RT_SAFETY_EXCEPTION_REQUIRED: YES

The smallest coordinated follow-up is to preallocate before audio start, fail closed on an oversized block, add a negative no-growth test, and rerun the focused/full DaisyHost gates.

Diagnostic precursor runs

Earlier source-branch runs intentionally exposed and corrected:

  • a freeze character cell whose final tail was below the declared evidence threshold;
  • an unsuitable Linux route for the complete DaisyHost/JUCE configure;
  • missing selective submodule initialization in the Windows focused-test job.

Those diagnostic failures did not modify the current runtime engine. The exact final-head workflow and repository style/build checks listed above are green.

Explicitly not claimed / not run

  • human listening acceptance;
  • full serialized DaisyHost 337/337 plus Hub/Render/VST3/Standalone milestone gate;
  • manual standalone or DAW/VST3 interaction;
  • ARM/Daisy build, flash, or callback timing;
  • target SDRAM/cache behavior;
  • physical audio, controls, electrical, EMI/EMC, mechanical, or production readiness;
  • parity with the current portable product DSP/firmware implementation.

Review focus

  1. bounded timing/statistics implementation and terminology;
  2. scenario/event semantics and evidence schema;
  3. host-vs-target claim boundary;
  4. whether the isolated tool/workflow should remain standalone or later be integrated by the main DaisyHost integrator;
  5. the separately recorded PedalDelayCore allocation-safety follow-up.

@Denys Denys closed this Sep 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant