Skip to content

v0.2.1

Hardening (post-release fixes, still 0.2.1)

Section titled “Hardening (post-release fixes, still 0.2.1)”

A review-driven hardening pass landed after the initial 0.2.1 release, without changing the version or the public API surface:

  • Memory safety: the IPC layer now treats the shared-memory header as untrusted — magic/version/term-length and shared positions are bounds-checked, eliminating out-of-bounds access from a corrupt segment. The SPSC/MPSC ring buffers and the broadcast buffer were made memory-safe (no use-after-release, proper back-pressure).
  • Untrusted-input validation: the UDP/wire parsers (FIX/SBE decoders, protocol flyweights, WireCodec) validate untrusted bytes — checked enum values and bounded group counts — so a malformed or malicious datagram cannot cause out-of-bounds reads or panics.
  • Reliability: de-duplication, a sliding NAK window, and flow-control credits verified end-to-end; fragmentation/reassembly works end-to-end in NetworkChannel.
  • Raft (experimental): in-memory safety restored (only committed entries are applied; term-validated vote/response handling; single-node election) and durable persistence wired in (write-ahead log, persisted vote/term, atomic snapshots, crash recovery on restart). Raft remains experimental: no built-in election timers/transport loop, no log compaction / InstallSnapshot / membership changes, and not yet validated with real multi-process fault injection.
  • Language bindings: all five bindings — C, Rust, Python, Go, and TypeScript — now build and pass smoke tests against the real shared library (reporting 0.2.1). Previously the Go binding did not compile, the Rust binding was unsound, and the shared library was not built by default.
  • Tests: the full suite (423 tests) passes in both Debug and ReleaseFast builds.
  • FFI library is now built by default: zig build produces zig-out/lib/libzigbolt.{dylib/so} and libzigbolt.a with all 10 C-ABI exports
  • Version unified to 0.2.1 across VERSION.toml, build.zig.zon, src/root.zig, the FFI runtime (zigbolt_version_* = 0/2/1), and all language bindings
  • Subscriber(T) type filtering implemented: poll now delivers only frames matching the subscriber’s msg_type_id and skips short/garbage frames; the handler signature is *align(1) const T
  • Fragmentation/reassembly wired end-to-end in NetworkChannel
  • LICENSE file added (MIT)
  • Test suite grown to 423 passing tests (was 199)
  • Contrast: Fix low-contrast “ZigBolt” title text in header (Lighthouse accessibility warning)
  • LCP: Add fetchpriority="high" to hero image via custom Hero component override for faster Largest Contentful Paint
  • Override Starlight Hero component to set fetchpriority="high" on the LCP image
  • Add CSS rules to ensure site title uses high-contrast colors in both light and dark themes
  • frontend/astro.config.mjs — added Hero component override
  • frontend/src/components/Hero.astro — custom Hero with fetchpriority
  • frontend/src/styles/custom.css — contrast fix for site title