Skip to content

Releases: FelixMiddelhoff/ravel

ravel 0.4.0

ravel 0.4.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Sep 18:23

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.Dst for Visual Studio C++ projects (x64, static library with the
    dynamic MSVC runtime, Release and Debug), built by packaging/nuget/pack.ps1. Not on
    nuget.org yet; it is attached to each GitHub release.
  • release.yml: pushing a vX.Y.Z tag 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_COVERAGE and 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.sh and mull.yml: mutation testing of the library with Mull (Clang).
  • CI jobs warnings (GCC and Clang) and static-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_FUZZ for 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) and docs/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:
    several uint64_t to size_t conversions were unchecked.
  • GCC 10 builds: CMake adds -fcoroutines for it, which <coroutine> needs there.
  • The Conan recipe and the vcpkg port no longer try to build the fuzz targets.
  • tools/ravel_trace.py crashed 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 by tools/fuzz_trace.py, which is also a unit test.
  • shrink (and so run_seeds with shrink_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

ravel 0.3.0 Pre-release
Pre-release

Choose a tag to compare

@FelixMiddelhoff FelixMiddelhoff released this 19 Sep 20:01

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) and diff for 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

ravel 0.2.0 Pre-release
Pre-release

Choose a tag to compare

@FelixMiddelhoff FelixMiddelhoff released this 19 Sep 19:01

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

ravel 0.1.0 Pre-release
Pre-release

Choose a tag to compare

@FelixMiddelhoff FelixMiddelhoff released this 19 Sep 18:07

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.