Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
6bd241d
add process-varying-sample-rates and process-random-block-sizes test …
Quant1um Dec 15, 2025
898be16
add process-varying-block-sizes test
Quant1um Dec 15, 2025
c249ca8
refactor:
Quant1um Dec 16, 2025
8d431e3
add in-place audio process test
Quant1um Dec 16, 2025
a56cd1c
add methods-non-null test that checks for a common? mistake of export…
Quant1um Dec 16, 2025
001a7dc
detect when output is left uninitialized
Quant1um Dec 17, 2025
fd98238
refactor `ProcessingTest` and `AudioBuffers` further; add `process-au…
Quant1um Dec 17, 2025
73c5eb6
add 'state-random-garbage' test; relax other state tests
Quant1um Dec 17, 2025
24ccdfd
refactor stuff; print per-test run time info
Quant1um Dec 18, 2025
373f799
implement more host interfaces and upgrade clap-sys to latest
Quant1um Dec 18, 2025
919f934
fix 'audio-process-constant-mask' test; add latency plugin extension
Quant1um Dec 20, 2025
761f650
cleanup
Quant1um Dec 20, 2025
0841638
relax 'state-*' tests: binary equality check now emits a warning instead
Quant1um Dec 20, 2025
fdc8fb6
refactor process (again); add `process-reset-determinism` test
Quant1um Dec 30, 2025
3f62efe
refactor 'assert_plugin_state'
Quant1um Dec 30, 2025
a8f5115
fix unhandled callback error
Quant1um Dec 30, 2025
af16313
add 'param-default-values' test
Quant1um Dec 30, 2025
8be177a
add `param-fuzz-bounds` and `param-fuzz-sample-accurate` tests
Quant1um Jan 13, 2026
8e18f9e
add 'audio-ports-config' and 'audio-ports-config-info' extension supp…
Quant1um Jan 13, 2026
296c5b1
fix & refactor some tests
Quant1um Jan 13, 2026
f5c543e
bump dependencies
Quant1um Jan 13, 2026
c5d9ae1
add 'param-fuzz-polyphonic' test
Quant1um Jan 14, 2026
8e64816
replace 'param-fuzz-polyphonic' with 'param-fuzz-modulation'
Quant1um Jan 14, 2026
346aa53
increase iteration count for 'param-conversions' test
Quant1um Jan 14, 2026
6055bba
fix clippy warnings
Quant1um Jan 17, 2026
f2fc203
add configurable-audio-ports layout test
Quant1um Jan 17, 2026
d316bab
a lot of refactoring
Quant1um Jan 18, 2026
649946c
improved param diffs for state tests, rayon is back on the menu
Quant1um Jan 18, 2026
5c947ca
add test plugin, validate in ci
Quant1um Jan 18, 2026
dda682f
add layout extensions to test plugin, fix ci, fix bugs
Quant1um Jan 18, 2026
393a4fc
fix unused variable warning on windows
Quant1um Jan 18, 2026
9637872
add macos-latest to ci runners
Quant1um Jan 18, 2026
e352f6d
add macos bundling code
Quant1um Jan 18, 2026
0a4e2d1
experiemnting with stuff
Quant1um Jan 19, 2026
d7df6a2
add surround/ambisonic port checks
Quant1um Jan 19, 2026
46205a8
simplify plugin-host api
Quant1um Jan 19, 2026
577d652
refactor
Quant1um Jan 21, 2026
662c83d
latest macos runners
Quant1um Jan 21, 2026
b81e6e1
latest macos runners
Quant1um Jan 21, 2026
11f0efc
warn if none of applied layouts was accepted (configurable-audio-port…
Quant1um Jan 24, 2026
9f93fd3
64-bit out of place processing test
Quant1um Jan 25, 2026
2f3a1d6
fix process audio constant mask warning when no input ports available
Quant1um Jan 25, 2026
3b5af4a
big refactor
Quant1um Jan 28, 2026
fc143bf
big refactor (2)
Quant1um Jan 29, 2026
a4f02a9
add transport-* tests
Quant1um Jan 29, 2026
87fd981
fix transport-sample-accurate test; cargo fmt run; add 'default' tran…
Quant1um Jan 29, 2026
6a81b3a
- more host extension checks
Quant1um Jan 30, 2026
0e8faf5
- poll_callback which handles various callback events (currently unused)
Quant1um Jan 30, 2026
533b4d9
refactor audio buffers abstraction; move in-place port checks to in-p…
Quant1um Jan 31, 2026
72cc7e3
ambisonic/surround support for the configurable-audio-ports test; ini…
Quant1um Feb 1, 2026
4ac9aef
better panic handling; object lifetime tracking; fixed sleep tests (m…
Quant1um Feb 1, 2026
8a068a7
refactor extensions a little; add `Proxy` helper
Quant1um Feb 2, 2026
d03dc1f
tracing experiment
Quant1um Feb 3, 2026
b897694
finished the tracing experiment; new logger using tracing
Quant1um Feb 3, 2026
5f57833
initial audio-ports-activation test; move from tracing-subscriber Lay…
Quant1um Feb 4, 2026
86909b6
clap-validator.toml support
Quant1um Feb 4, 2026
3763753
out-of-process plugin scan
Quant1um Feb 4, 2026
4a013e3
implement host log extension; forward to tracing
Quant1um Feb 5, 2026
76aff6b
prettier output experiment
Quant1um Feb 7, 2026
2da6529
pretty plugin-list/preset-list output
Quant1um Feb 10, 2026
af32146
better instrumentation/structured `args` section
Quant1um Feb 10, 2026
069f9d8
more instrumentation spans; unicode support check for pretty terminal…
Quant1um Feb 11, 2026
e956638
use square corners for pretty output instead
Quant1um Feb 11, 2026
ae81881
fix 'layout-audio-ports-activation' test
Quant1um Mar 4, 2026
bfa842b
replace --filter with --include/--exclude; allow multiple --include p…
Quant1um Mar 4, 2026
52817f1
improve tracing args output for events/process calls
Quant1um Mar 4, 2026
327b8ad
test plugin (clack-synth): fix reset behavior
Quant1um Mar 4, 2026
dd538ed
more tracing span coverage
Quant1um Mar 4, 2026
eee73be
maitenance/minor tweaks
Quant1um Mar 7, 2026
17d6b51
bring back the reset-reactivate test
Quant1um Mar 7, 2026
b4b4225
refactor & move stuff around
Quant1um Mar 8, 2026
d70fbae
move state flush test to params; add a separate binary equality state…
Quant1um Mar 9, 2026
aada1c5
fix param-flush test (im dumb)
Quant1um Mar 9, 2026
01efa50
fix param-flush test (2)
Quant1um Mar 9, 2026
95ad77e
refactor out-of-process stuff
Quant1um Mar 13, 2026
c14a446
more checks, callback loop checks, fixed audio-ports-activation test,…
Quant1um Mar 19, 2026
9d5ca7b
minor tweaks, more checks, fix some error messages
Quant1um Mar 21, 2026
1df1fe3
fix validate.yml workflow
Quant1um Mar 21, 2026
79b80c4
- fix params-set-events test (invalid cookie pointers between plugin …
Quant1um Mar 23, 2026
b64e89a
increase timeout for validator subprocess to 45s
Quant1um Mar 23, 2026
3c0bf8c
bump version, add changes to changelog.md
Quant1um Mar 23, 2026
6ec077b
update README.md
Quant1um Mar 23, 2026
05e0357
add clap_audio_buffer not-modified by plugin during process check
Quant1um Mar 23, 2026
a924cbd
moved validation tests from workflow to cargo test
Quant1um Mar 28, 2026
363ff0a
add fmt check to github ci; fix macos validation workflow
Quant1um Mar 28, 2026
7320546
fix param-fuzz-modulation test; fix/simplify on_main_thread dispatch …
Quant1um Mar 28, 2026
7d0e628
update actions/checkout & actions/cache; add cache to check.yml
Quant1um Mar 28, 2026
e20ad0c
change release date in changelog; add authors section to cargo.toml
Quant1um Mar 28, 2026
4e06232
fix github actions cache
Quant1um Mar 28, 2026
dfa3528
Update README.md
Quant1um Mar 28, 2026
397e71d
fix error message formatting error for test-features-standard
Quant1um Mar 28, 2026
f020b7a
refactor validator/test cases modules
Quant1um Mar 31, 2026
9c7b9ff
the fuzzer experiment - initial runner and harness
Quant1um Apr 2, 2026
b679091
more work on the fuzzer
Quant1um Apr 3, 2026
7101d8b
even more work on the fuzzer; random audio signals when fuzzing; add …
Quant1um Apr 7, 2026
69e91b0
add tracing notice to readme
Quant1um Apr 7, 2026
a38d979
add HostCapabilities
Quant1um Apr 8, 2026
105adea
fuzzing: add audio-ports-activation support; audio-ports-activation t…
Quant1um Apr 13, 2026
0cc3b95
minor tweaks and clippy fixes
Quant1um Apr 16, 2026
23cd60c
fuzzer: reduce generated audio signal amplitude
Quant1um Apr 18, 2026
e8777af
fuzzer: limit amplitude to 40dbfs just in case
Quant1um Apr 18, 2026
ec2c194
fix Plugin::activate cycle detection (thanks @edwloef)
Quant1um Apr 18, 2026
c977b47
error on activate/request_restart loop
Quant1um Apr 18, 2026
9d1774a
add wildcard & overlapping events tests/checks
Quant1um Apr 18, 2026
132061d
add out-of-bounds overwrite check for output/inplace ports
Quant1um Apr 27, 2026
824d8b5
add render extension support; call render::set in fuzz runner
Quant1um Apr 27, 2026
5423c55
remove features-standard test (too strict)
Quant1um May 2, 2026
8d8d3de
fix: allow calling host methods while inside plugin->init()
Quant1um May 21, 2026
a76cbf6
fix layout-audio-ports-config test
Quant1um Jun 7, 2026
5c61856
Merge pull request #1 from blepfx/fuzzing
Quant1um Jun 12, 2026
b5b1aea
- add rescan checks to state-reproducibility tests
Quant1um Jul 19, 2026
6704595
fix clippy warnings
Quant1um Jul 19, 2026
dcacc20
fix clippy warnings
Quant1um Jul 19, 2026
5bd482d
Merge pull request #2 from blepfx/fuzzing
Quant1um Jul 19, 2026
ea82cbc
remove (fork) from CHANGELOG.md
Quant1um Jul 22, 2026
e91d9f7
fix typo in test description
Quant1um Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,24 @@ jobs:
matrix:
include:
- { name: ubuntu-22.04, os: ubuntu-22.04, cross-target: '' }
- { name: macos-12-x86_64, os: macos-12, cross-target: '' }
- { name: macos-12-aarch64, os: macos-12, cross-target: aarch64-apple-darwin }
- { name: windows, os: windows-latest, cross-target: '' }
- { name: macos-15-aarch64, os: macos-15, cross-target: '' }
- { name: macos-15-x86_64, os: macos-15, cross-target: x86_64-apple-darwin }
name: Build binary
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Fetch all git history
run: git fetch --force --prune --tags --unshallow

- uses: actions/cache@v4
- uses: actions/cache@v5
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ matrix.name }}-cargo-${{ hashFiles('**/Cargo.lock') }}
key: build-${{ matrix.name }}-cargo-${{ hashFiles('**/Cargo.lock') }}

- name: Set up Rust toolchain
uses: dtolnay/rust-toolchain@stable
Expand Down Expand Up @@ -92,7 +91,7 @@ jobs:

universal-binary:
name: Build a universal macOS binary
runs-on: macos-12
runs-on: macos-15
needs: package
steps:
- uses: actions/checkout@v4
Expand All @@ -101,8 +100,8 @@ jobs:

- name: Determine the previously build archive names
run: |
echo "X86_64_ARCHIVE_NAME=clap-validator-$(git describe --always)-macos-12-x86_64" >> "$GITHUB_ENV"
echo "AARCH64_ARCHIVE_NAME=clap-validator-$(git describe --always)-macos-12-aarch64" >> "$GITHUB_ENV"
echo "X86_64_ARCHIVE_NAME=clap-validator-$(git describe --always)-macos-15-x86_64" >> "$GITHUB_ENV"
echo "AARCH64_ARCHIVE_NAME=clap-validator-$(git describe --always)-macos-15-aarch64" >> "$GITHUB_ENV"

- name: Determine archive name for the universal binary
run: |
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Test Validate

on:
push:
pull_request:
branches:
- master

defaults:
run:
shell: bash

jobs:
check:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
name: Check on ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v6

- uses: actions/cache@v5
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: check-${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

- name: Run clippy
run: cargo clippy --all -- -D warnings

- name: Run format check
run: cargo fmt --all -- --check

- name: Run tests
run: cargo test --all -- --test-threads 1
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/target/
rustc-ice-*.txt
1 change: 0 additions & 1 deletion .rustfmt.toml

This file was deleted.

72 changes: 71 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,87 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic
Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.4.1] - 2026-07-19

### Added
- Added an experimental fuzzing harness that runs plugins for an extended period of time to discover potential issues.
- Add parameter rescan checks to `state-reproducibility-*` tests.
- Add `render` extension support, call `render::set` while fuzzing.
- Add overlapping & wildcard event checks.
- Add out-of-bounds write checks for output/inplace buffers.

### Changed
- Bump MSRV to 1.95.0.
- Remove `features-standard` test (too strict).

### Fixed
- Allow calling host methods inside `clap_plugin::init`.
- Fix `clap_plugin::activate` cycle detection logic (thanks @edwloef!)

## [0.4.0] - 2026-03-28

### Added

- New tests:
- `features-standard`
- `layout-audio-ports-activation`
- `layout-audio-ports-config`
- `layout-configurable-audio-ports`
- `process-audio-basic-in-place`
- `process-audio-double-in-place`
- `process-audio-double-out-of-place`
- `process-audio-denormals`
- `process-sleep-constant-mask`
- `process-sleep-process-status`
- `process-varying-block-sizes`
- `process-varying-sample-rates`
- `process-random-block-sizes`
- `process-reset-reactivate`
- `param-fuzz-bounds`
- `param-fuzz-sample-accurate`
- `param-fuzz-modulation`
- `param-set-events`
- `param-set-no-cookies`
- `param-default-values`
- `state-invalid-random`
- `state-reproducibility-binary` (other reproducibility tests have been relaxed to not check for exact binary state matches)
- `transport-null`
- `transport-fuzz`
- `transport-fuzz-sample-accurate`

- Extra checks:
- `ambisonic`/`surround` checks when querying audio port info.
- Thread/state/extension checks for host callback functions.
- More lenient param reproducibility checks that allow for some imprecision when comparing parameter values.
- Object validity checks, now passing an invalid object pointer to a callback will catch it and report it as an error instead of causing undefined behavior in the validator. This has some performance impact but it is negligible.
- Implemented more host-side extensions and specific checks for each host-side extension callback.
- Implemented infinite restart loop check in activate (similar to the infinite `request_callback` loop check for `on_main_thread`).
- Check if `clap_audio_buffer` data is not modified by the plugin within the `clap_plugin::process` call.

### Changed

- Update `clap-sys` to latest (CLAP 1.2.2)
- Having both the `CLAP_PARAM_IS_READONLY` flag and any of the
`CLAP_PARAM_IS_AUTOMATABLE` or `CLAP_PARAM_IS_MODULATABLE` flags set now
results in an error.
- The logic for which parameters can be randomized has changed. Previously all
parameters marked as automatable could be changed. Now parameters marked as
hidden or readonly are ignored instead, as non-automatable parameters can
still be changed as the result of live user input.
- When doing out-of-process validation, the validator now also checks for timeouts in addition to crashes.
If a plugin takes too long to respond during validation, the validator will kill the process and report a timeout error. The timeout duration is currently set to 45 seconds.
- Pretty printing of validation/list/scan results in non-JSON output modes has been improved.
- Changed log formatting to be prettier, plugin log messages are propagated to the validator's output via the `log` extension.
- Added `clap-validator.toml` config files for easier per-project test enabling/disabling.
- When running validation in-process, it is possible to turn on tracing, which emits a detailed Chrome-tracing compatible .json trace file that can be loaded into Chrome's tracing viewer or other compatible tools. This is especially useful for debugging test failures and crashes.

- Removed tests:
- `state-reproducibility-flush` - replaced by `param-set-events`.
- `state-reproducibility-null-cookies` - replaced by `param-set-no-cookies`.

### Fixed
- Wrong state transition check on plugin instance destroy.
- Output note events were queried as inputs.

## [0.3.2] - 2023-03-25

Expand Down
Loading
Loading