Quality

Built with quality in mind.

Quality you can verify.

On stage there is no second take. So we do not ask you to trust SHUFFLE Framework: we measure it, and every number on this page comes straight from the engine's quality report.

  • shuffle_engine 0.1.0 · commit 37b8eb9
  • Snapshot committed with the site

Release gates

4 of 5 pass
  1. Every test job passes on every platform verifiedPasses
  2. Static analysis: no open high-severity finding261 high-severity and 420 other findings open, being fixedNot yet
  3. No known vulnerability without a notePasses
  4. REUSE licence compliancePasses
  5. Every stable module's requirements verifiedPasses

A release is not tagged until every gate passes.

The numbers

Measured, not claimed.

Each figure is read from the report when the site is built. When a number gets worse, this page shows it.

2,255requirements verified by passing testsof 2,650 specified (85.1%); 2,262 are cited by at least one test
100%of stable-module requirements verified527 requirements in 5 stable modules: 517 by passing tests, 10 elsewhere with a documented reason

Code coverage

  • 89.3%Lines108,390 of 121,390
  • 92.5%Functions10,014 of 10,828
  • 76.3%Branches52,960 of 69,388

Clang source-based coverage of the cores and adapters; tests, examples and third-party code left out. There is no coverage target in percent: requirement coverage is the gate, and these numbers are shown as they are.

Tests per platform

Tested where it will run.

The same suite on every platform verified, built and run by local CI. A platform that was not run for this report says so.

  • Windows3,277passed0 failed · 1 skippedWindows, MSVC (Release)
  • Linux3,446passed0 failed · 13 skippedLinux, Clang 20 (core-only preset)
  • WebAssemblyNot in this reportThe job exists in local CI; its results were not recorded for this commit.
  • AndroidNot in this reportThe job exists in local CI; its results were not recorded for this commit.
  • macOSComingSupported by design; not yet run by local CI.
  • iOSComingSupported by design; not yet run by local CI.

Sanitizers

Memory errors, undefined behaviour and real-time violations, caught while the tests run.

AddressSanitizer + UBSan3,414 passed0 failedLinux, Clang 20, AddressSanitizer and UBSan
RealtimeSanitizer384 passed0 failedLinux, Clang 20, real-time checks and RealtimeSanitizer
Real time, by construction

The compiler guards the audio thread.

Every function that runs on the audio thread carries SHUFFLE_RT. With the real-time checks on, a marked function that allocates, locks, throws or calls unmarked code does not compile. A promise in a comment becomes a property of the build.

  • Checked at compile timeClang's function-effect analysis rejects the mistake before anyone hears it, not after a dropout on stage.
  • Checked again at run timeThe engine and real-time tests run under RealtimeSanitizer, including the tests that count allocations on audio paths.
  • Exceptions are reviewedA call that is safe for a reason the compiler cannot see is wrapped alone, with the reason next to it; the repository checks refuse a region without one.

384tests under RealtimeSanitizer · 0 failed

core/base · SHUFFLE_RT
// Runs on the audio thread: the compiler checks it.
void process (float* const* channels, int frames) noexcept SHUFFLE_RT;

// SHUFFLE_RT is [[clang::nonblocking]] on Clang 20 and later. With
// SHUFFLE_ENGINE_RT_CHECKS=ON, a marked function fails the build if it
//   - allocates (new, delete, anything that may allocate),
//   - throws or catches, or takes a lock that can block,
//   - calls a function that is neither marked nor visibly safe.

// A call that is safe for a reason the compiler cannot see is
// reviewed, alone, with the reason written next to it:
SHUFFLE_RT_ALLOW_BEGIN ("std::sin is pure arithmetic: no allocation or lock")
value = static_cast<float> (std::sin (phase));
SHUFFLE_RT_ALLOW_END
What makes the framework different

Quality built into the method, not bolted on.

These are the working rules of the repository, checked on every change.

Every behaviour specified and traced

Each domain has a spec with numbered requirements and examples as data. Tests cite the IDs, so one search finds the requirement and the tests that verify it.

$ grep -r "TC-R12" specs core
specs/timecode.md:- **TC-R12** Parsing text into a time:
specs/timecode.md:### 4.5 Formatting and parsing (TC-R11, TC-R12)
core/timecode/tests/SmpteTimeTests.cpp:// TC-R12 (table 4.5)
core/timecode/tests/SmpteTimeTests.cpp:// TC-R12 (table 4.5)
the requirementthe tests that verify it

Zero allocations, measured

Tests on audio paths count every allocation and expect none. They run in the real-time job, under the sanitizer.

Reproducible local CI

Every job runs on one workstation: Windows natively, Linux in a pinned Docker image with Clang 20. Anyone with the repository can repeat it.

Honest gates

A release is tagged only when every gate passes. There is no percentage to game: the gates are written down, with what each one checks.

Errors are values

No exception crosses a module boundary or touches the audio thread, and every error message says how to fix the problem.

How quality is measured →

Requirement coverage

Module by module.

Each bar is one module's numbered requirements. Stable modules are the release gate; experimental modules show their gaps openly.

Requirements per module and how they are verified
ModuleShare verifiedVerified
Stable5
commandsPassing test: 80; Verified elsewhere, with a reason: 2; Cited, not yet passing: 0; Not yet cited by a test: 0.100%82 of 82
dspPassing test: 133; Verified elsewhere, with a reason: 8; Cited, not yet passing: 0; Not yet cited by a test: 0.100%141 of 141
midiPassing test: 142; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0.100%142 of 142
timePassing test: 42; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0.100%42 of 42
timecodePassing test: 120; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0.100%120 of 120
Experimental15
setlistPassing test: 76; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0.100%76 of 76
ui_modelPassing test: 184; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1.99%184 of 185
synthPassing test: 102; Verified elsewhere, with a reason: 0; Cited, not yet passing: 1; Not yet cited by a test: 0.99%102 of 103
loudnessPassing test: 72; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1.99%72 of 73
oscPassing test: 62; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1.98%62 of 63
formatsPassing test: 125; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 4.97%125 of 129
showcontrolPassing test: 139; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 6.96%139 of 145
enginePassing test: 149; Verified elsewhere, with a reason: 0; Cited, not yet passing: 3; Not yet cited by a test: 6.94%149 of 158
ui_themePassing test: 116; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 8.94%116 of 124
cuesPassing test: 162; Verified elsewhere, with a reason: 0; Cited, not yet passing: 1; Not yet cited by a test: 12.93%162 of 175
redundancyPassing test: 69; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 6.92%69 of 75
netaudioPassing test: 143; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 17.89%143 of 160
routingPassing test: 151; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 20.88%151 of 171
ui_layoutPassing test: 46; Verified elsewhere, with a reason: 0; Cited, not yet passing: 2; Not yet cited by a test: 5.87%46 of 53
ui_bridgePassing test: 95; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 17.85%95 of 112

No numbered requirements of their own in this report: base, resample, ui_render.

Static analysis and supply chain

What we check beyond the tests.

Findings, vulnerabilities and licences, shown as they are, including what is still open.

Static analysis

681 findings being fixed

  • High261
  • Medium320
  • Low100

10 accepted with a reason

Most frequent open checks

  • bugprone-unchecked-optional-access261
  • bugprone-misplaced-widening-cast123
  • bugprone-implicit-widening-of-multiplication-result84
  • cert-err33-c47
  • performance-inefficient-vector-operation44

clang-tidy 20.1.8 over 459 translation units, with the bugprone, cert, clang-analyzer and performance checks. The cert checks cover a subset of SEI CERT C++: no claim of full conformance is made.

Dependencies

0known vulnerabilities open

15pinned dependencies

2 known vulnerabilities do not apply, each with its reason:

  • flac 1.5.0 · OSV-2024-678FLAC__replaygain_synthesis__apply_gain is in src/share/replaygain_synthesis, part of the flac command-line program; shuffle_engine builds only the libFLAC target, which does not contain it
  • miniaudio 0.11.25 · CVE-2026-32837the out-of-bounds read is in the WAV BEXT metadata parser of miniaudio's decoders; shuffle_engine compiles miniaudio with MA_NO_DECODING and MA_NO_ENCODING (cmake/ShuffleEngineDeps.cmake), device I/O only, so the parser is not built

Licences

REUSE compliant

1,982of 1,982 files carry their copyright and licence

A software bill of materials (SPDX) with every release

When we open the repositories

Outside eyes, next.

Free services for public open-source projects, added the day the repositories become public. Until then they are plans, not results.

  • PlannedCoverity ScanDeep static analysis of the C and C++ code, with its public badge.
  • PlannedSonarQube CloudA dashboard and a quality gate, fed with our own coverage.
  • PlannedOpenSSF Scorecard and Best PracticesExternal scores for security and for the project's process.
  • PlannedOSS-FuzzContinuous fuzzing of the parsers that read data from outside.
  • PlannedSigned releasesSigstore signatures with SLSA build attestations: the origin of every release, verifiable.
About these numbers

Where the data comes from.

The full report (requirements, static analysis, coverage) comes with every release.

Report generated
Engine version
0.1.0
Engine commit
37b8eb9
Source
Snapshot committed with the site; a newer report replaces it at the next build

Measured quality is not a warranty: SHUFFLE Framework is provided “as is”, see the disclaimer. Test it in your own setup before you rely on it.