@@ -217,11 +217,11 @@ The command line is structured into subcommands, peeled off by a thin verb
217217dispatcher in front of the settings pipeline (it does ** not** use CLI11-native
218218subcommands, so the env/config/CLI layering below is untouched):
219219
220- - ` pluginval validate [options] <plugin> ` — the default; ` <plugin> ` is a
220+ - ` pluginval validate [options] <plugin> ` - the default; ` <plugin> ` is a
221221 positional argument. ` pluginval <plugin> ` and ` pluginval [options] <plugin> `
222222 (no verb) also resolve to validate.
223- - ` pluginval run-tests ` — runs the internal unit tests.
224- - ` pluginval strictness-help [level] ` — lists tests at a strictness level.
223+ - ` pluginval run-tests ` - runs the internal unit tests.
224+ - ` pluginval strictness-help [level] ` - lists tests at a strictness level.
225225
226226` settings_parser::dispatch() ` (in ` SettingsParser.cpp ` ) takes the ` tokenise() ` d
227227command line and returns a `DispatchResult { command, validateTokens,
@@ -248,7 +248,7 @@ that CLI11 binds to directly. A single instance is filled by successive layers,
248248** lowest to highest precedence: defaults → environment → ` --config ` → CLI**
249249(in ` SettingsParser::parseTokens ` ):
250250
251- 1 . ** preprocess** the raw command line — rewrite the deprecated ` strictnessLevel ` ,
251+ 1 . ** preprocess** the raw command line - rewrite the deprecated ` strictnessLevel ` ,
252252 strip the macOS ` -NSDocumentRevisionsDebugMode YES ` flag, and insert an
253253 implicit ` --validate ` when the last argument is a bare plugin path.
2542542 . ** Environment layer.** Env-var names are * derived* from the registered
@@ -267,7 +267,7 @@ uses a `CheckedTransformer`, and the hex/int seed is a small callback.
267267` PluginTests::Options ` at the boundary.
268268
269269Adding a new option is three edits: a struct member, an entry in the nlohmann
270- macro list, and one ` add_option(...) ` line — its environment variable then works
270+ macro list, and one ` add_option(...) ` line - its environment variable then works
271271automatically. ` SettingsSerializer ` handles JSON load/save plus the two
272272remaining conversions (hex seed, disabled-tests file).
273273
@@ -279,7 +279,7 @@ are handled by CLI11 (auto usage + a footer with the env-var/commands notes).
279279### Acceptance Testing (` pluginval test ` )
280280
281281A ** parallel subsystem** to validate, in ` source/acceptance/ ` . It answers "does
282- this plugin produce the expected output for a known input + state?" — a
282+ this plugin produce the expected output for a known input + state?" - a
283283deterministic * render + golden-file comparison* , not a unit-test pass/fail. Full
284284spec: ` tests/acceptance/Acceptance testing design.md ` ; end-user guide:
285285` docs/Acceptance testing.md ` .
@@ -295,7 +295,7 @@ spec: `tests/acceptance/Acceptance testing design.md`; end-user guide:
295295 ` acceptance::TestRunner ` , which renders on a ** background thread** (message
296296 thread left free; plugin deleted on it), with a watchdog for the timeout, and
297297 quits via ` callAsync ` when done.
298- - ** Config** : ` acceptance::TestConfig ` (` TestConfig.cpp/h ` ) — std-typed struct,
298+ - ** Config** : ` acceptance::TestConfig ` (` TestConfig.cpp/h ` ) - std-typed struct,
299299 ** snake_case JSON keys** mapped via explicit ` to_json ` /` from_json ` (members
300300 stay camelCase). It is ** independent** of ` PluginvalSettings ` / the ` --config `
301301 layering: the test config is a positional argument loaded standalone.
@@ -314,7 +314,7 @@ spec: `tests/acceptance/Acceptance testing design.md`; end-user guide:
314314 tolerance, default one 16-bit LSB = ` 1/32768 ` ; ` 0 ` = bit-exact). Adding
315315 ` spectrum ` /` crosscorr ` /etc. is one registry entry, no config/runner changes.
316316- ** Dogfood + self-tests** : three minimal deterministic ` juce_add_plugin ` targets
317- behind ` PLUGINVAL_BUILD_TEST_PLUGINS ` — ` tests/test_plugins/tone_generator/ `
317+ behind ` PLUGINVAL_BUILD_TEST_PLUGINS ` - ` tests/test_plugins/tone_generator/ `
318318 (closed-form sine/square generator, phase resets on ` prepareToPlay ` ),
319319 ` tests/test_plugins/gain/ ` (a gain effect, dogfoods the ` input.audio ` path) and
320320 ` tests/test_plugins/playhead_probe/ ` (writes the host transport to its output,
@@ -401,8 +401,8 @@ The VST3 validator (Steinberg's vstvalidator) is embedded into pluginval when bu
4014015. When the `VST3validator` test runs, it spawns the extracted validator as a subprocess
402402
403403**Key files:**
404- - `cmake/GenerateBinaryHeader.cmake` — binary-to-C-header conversion script
405- - `source/vst3validator/VST3ValidatorRunner.h/cpp` — extracts embedded binary, returns `juce::File`
404+ - `cmake/GenerateBinaryHeader.cmake` - binary-to-C-header conversion script
405+ - `source/vst3validator/VST3ValidatorRunner.h/cpp` - extracts embedded binary, returns `juce::File`
406406
407407**Disabling embedded validator:**
408408```bash
@@ -451,6 +451,8 @@ Located in `TestUtilities.h`:
451451- ` countNaNs() ` , ` countInfs() ` , ` countSubnormals() ` - Audio validation
452452- ` ScopedEditorShower ` - RAII editor creation/destruction
453453- ` callPrepareToPlayOnMessageThreadIfVST3() ` - VST3-safe lifecycle
454+ - ` callOnMessageThreadAndWait() ` - Run code on the message thread and wait; rethrows its exceptions on the caller
455+ - ` ChildProcessOutputDecoder ` - Decode child-process output read in chunks without splitting UTF-8 characters
454456- ` ScopedAllocationDisabler ` - Detect allocations in audio thread
455457
456458### Real-time Safety Checking
0 commit comments