Skip to content

v0.4.0

Choose a tag to compare

@sb2bg sb2bg released this 30 Jun 23:42
· 184 commits to main since this release
  • Adds named simulation profiles (baseline, swarm, replay, and
    performance) that expand into run metadata, simulator options, and explicit
    runtime-control application. The replicated-register swarm now uses the
    shared profile and reports the expanded profile values in traces and failure
    summaries.
  • Adds a durable-broadcast bug-search test that finds the planted
    broadcast-before-sync bug under probabilistic crash-loss faults while keeping
    the deterministic single-seed failure for readable traces.
  • Adds scheduler-backed Io.Group async/concurrent/await/cancel behavior with
    deterministic task ownership, reuse, and process-kill cleanup.
  • Adds the simulated directory operations needed by ordinary storage engines:
    absolute and handle-relative paths, create/open/access/stat, iteration,
    directory syncing through File.sync, and process-coordinated blocking and
    non-blocking advisory file locks. Directory namespace state now lives in
    SimDisk, so processes share it and crash metadata faults apply to it.
  • Adds a pinned lazy Ochi validation that starts the unmodified store, ingests
    a line, flushes index/data tables, queries the line, crashes and reopens the
    store, and verifies the same line through recovery.
  • Fixes a same-directory SimDisk.rename metadata allocation leak.
  • Fixes sector read-modify-write handling so short std.Io writes retain their
    logical file length across crashes, and atomic rename discards pending writes
    belonging to the replaced destination.
  • Fixes cross-process file-lock rekeying on rename so open lock holders release
    the renamed path and source/destination waiters are preserved.
  • Adds process-scoped simulation std.Io backends with stable per-node
    identity, shared listener/connection registration, and process-local futex
    namespaces.
  • Adds logical process lifecycle controls: killProcess, registered process
    initializers, and restart semantics that discard volatile state while
    preserving durable disk state.
  • Fixes cross-process async closure cleanup so awaits release task closures
    through the owning backend.
  • Requires callers to pass an allocator to Production.init, removing the
    production default to std.heap.smp_allocator.
  • Retires completed scheduler task records after completion while preserving
    stable task counts.
  • Narrows the public/internal module boundary so backend coordinators, task
    runtimes, process runtimes, and teardown hooks are kept under explicit
    internal roots.
  • Adds a release-symbol readiness check that verifies simulation-only symbols
    are absent from release binaries.
  • Adds a contributor-facing repository layout guide.