Skip to content

v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Sep 16:25
· 3 commits to main since this release
5899e39

Unirust v0.2.0 adds persistent distributed temporal entity resolution, coordinated recovery and backup, mutual TLS, synchronous replication, and extensive correctness hardening.

Highlights

  • Accepted records complete entity resolution before durable acknowledgement; rejected batches cannot leak staged records or overwrite another source record.
  • Transitive cross-shard merges respect component-wide temporal strong identifiers, including previously reconciled remote fragments.
  • Queries assemble complete canonical entities before applying conjunction and mastering golden attributes.
  • Common keys and the memory-saver profile continue matching correctly; tiered indexes preserve full buckets through eviction, updates, and restart.
  • Persistent interner IDs, DSU membership, deferred merges, and restored query labels survive bounded caches and recovery.
  • Unbounded intervals avoid duration overflow and unbounded temporal-index expansion.
  • CI checks MSRV, all tests and targets, Rust 1.98 Clippy, formatting, package contents/build, deployment manifests, and the production container. Publishing is gated on those checks and a matching version tag.

Upgrade

Requires Rust 1.88 or newer. The live cluster protocol is 6: stop and upgrade routers, shards, and replicas together. WAL and checkpoint version 1, durable reservation format 5, and existing record snapshots remain readable. Public router clients retain their existing request contract.

Performance

For one indexed entity among 80,000 persistent records, a query after an unrelated insert fell from approximately 300 ms to 0.008 ms in the local release-mode diagnostic. Composite labels retain their global collision semantics. Shard queries now dispatch concurrently with bounded fan-out.

A five-shard run with one million records, 16 streams, batches of 5,000, and 10% overlap acknowledged every record with no failed batches: 43.4K records/s before and 43.9K after, effectively unchanged throughput. These are local measurements, not universal latency or throughput guarantees.

See the full changelog and audit, regressions, and measurements.