Releases: FelixMiddelhoff/ravel
Release list
ravel 0.4.0
Seeds, choice lists and the C ABI are unchanged from 0.3.0: no behavior change apart
from the shrinking fix below.
Added
- NuGet package
Ravel.Dstfor Visual Studio C++ projects (x64, static library with the
dynamic MSVC runtime, Release and Debug), built bypackaging/nuget/pack.ps1. Not on
nuget.org yet; it is attached to each GitHub release. release.yml: pushing avX.Y.Ztag checks the version everywhere, the CHANGELOG entry and a
green soak run on that commit, tests on three systems, packs and tests the NuGet package,
and creates the GitHub release.- CMake option
RAVEL_COVERAGEand a CI job that builds with coverage, runs the
tests and uploads an HTML report. - CMake option
RAVEL_WERROR(warnings as errors, used in CI). Every target now builds
with-Wall -Wextra -Wpedantic -Wconversion -Wshadow(MSVC/W4), not only the library. tools/mutation.shandmull.yml: mutation testing of the library with Mull (Clang).- CI jobs
warnings(GCC and Clang) andstatic-analysis(clang-tidy on the library, cppcheck). - CI job
compilers: GCC 10, 11 and 14, Clang 14, 15 and 19, and a 32-bit GCC 13 build. The README
now lists exactly what is tested. - Fuzz targets for the choice-list parser and the sweep command line (
fuzz/, CMake option
RAVEL_BUILD_FUZZ,RAVEL_FUZZfor libFuzzer), a fuzz smoke job in CI and a manual long-run
workflow. - Documentation:
docs/disk-model.md(the exact rules of the virtual disk, and how the model
is tested against a reference implementation) anddocs/known-limitations.md. - Property tests, a disk reference-model differential test, thread-pool stress tests, and a
coverage floor in CI (97% lines, 92% branches). The soak workflow also runs ThreadSanitizer
and ASan/UBSan variants.
Fixed
- The library, the tests and the examples now build without warnings on 32-bit targets:
severaluint64_ttosize_tconversions were unchecked. - GCC 10 builds: CMake adds
-fcoroutinesfor it, which<coroutine>needs there. - The Conan recipe and the vcpkg port no longer try to build the fuzz targets.
tools/ravel_trace.pycrashed with a Python traceback on some damaged trace files
(invalid UTF-8, a header or event that is not a JSON object, an event with a
missing or wrongly typed field, absurdly deep nesting). It now reports each with
exit status 2. Found bytools/fuzz_trace.py, which is also a unit test.shrink(and sorun_seedswithshrink_first_failure, and--replay) could not
minimize a run that threw after making random choices: the choices were lost and
shrinking failed with "the setup is not deterministic". The choices made before the
throw are now kept. Found by the new thread-pool stress tests.
ravel 0.3.0
Third pre-release. Still pre-1.0: the API, the seed-to-run mapping and the C ABI may change between minor versions. Seeds and saved choice lists from 0.2.0 still mean the same runs.
New since 0.2.0:
ravel::run_sweep_main: a ready-made command line for simulation test programs (--seeds,--first-seed,--threads,--trace-dir,--no-shrink,--time-limit,--replay FILE,--check-determinism), with CI-friendly exit statuses and GitHub Actions error annotations.ravel::check_determinism: runs each seed twice and once more replayed from its choices, and names the first step where the runs differ.tools/ravel_trace.py:summary,show,timeline(one column per task, channel or disk) anddifffor trace files.- Documentation: a tutorial, a porting guide, a debugging guide, a concepts page, a CI guide, a key-value store walkthrough, a comparison with related tools and a troubleshooting guide. Every code and output block is generated from real programs and every quoted error message is looked up in the source, both checked in CI.
- API reference published at https://felixmiddelhoff.github.io/ravel/ (public headers now use Doxygen doc comments, so the descriptions actually show up).
Also new: Simulation::describe(event), TraceEvent equality, a changelog, and an architecture map and release checklist in CONTRIBUTING.md.
CI passes on Linux, macOS and Windows with ASan, UBSan and TSan; 50,000 seeds across five systems (including Raft with crashing nodes) pass the soak test.
ravel 0.2.0
Second pre-release. Still pre-1.0: the API, seed-to-run mapping and C ABI may change between minor versions.
New since 0.1.0:
- Virtual disk directories: rename, remove, sync_dir and list. Directory changes are durable only when synced, and a crash keeps an in-order prefix of the pending ones.
- Shrinking replays candidates in parallel (same result at any thread count) and has a new pass that lowers two choices together or moves value between them.
- Channel::receive_within (timeouts), Channel::clear_inbox, and SimulationOptions::time_limit for systems that never go quiet.
- A working Raft example (election, log replication, state persisted through the virtual disk, node crashes) with three deliberate bugs that ravel finds. It replaces the quorum-register example.
- Fixed: shrink's reproducibility check ignored the run's own options (such as a time limit).
Behavior changes: reading a missing file now returns NotFound instead of an empty read, and a disk crash now also decides which pending directory changes survive, so seeds and choice lists from 0.1.0 do not carry over.
ravel 0.1.0
First pre-release of ravel, deterministic simulation testing for C++20.
Included: coroutine scheduler with seeded interleaving and virtual time, virtual channels and disks with fault injection (loss, latency, reordering, torn writes, crashes, ENOSPC, I/O errors), a parallel multi-seed runner, choice-stream shrinking with replayable reproducers, JSON Lines traces, and a small C ABI.
This is pre-1.0: the API, the seed-to-run mapping and the C ABI may change between minor versions. CI passes on Linux, macOS and Windows with ASan, UBSan and TSan.