Skip to content

Latest commit

 

History

History
92 lines (70 loc) · 4.71 KB

File metadata and controls

92 lines (70 loc) · 4.71 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project aims to follow Semantic Versioning.

1.4.0 - 2026-05-16

Fixed

  • Canonicalize explicit zero-counter VectorClock entries away during parse/read paths so structural equality matches vector-clock semantics for missing entries.

Added

  • Add opt-in UuidV7FactoryStatistics counters for generated UUIDs, clock rollback, counter overflow, spin-wait, logical drift, CAS retries, and random-buffer refills.
  • Add opt-in UUIDv7 node partitioning that reserves 1 to 16 rand_b bits for a node, shard, process, or deployment discriminator.
  • Add opt-in UuidV7FactoryState restart frontier snapshots for services that persist and restore UUIDv7 logical cursors.

Changed

  • UuidV7Factory now applies CounterOverflowBehavior consistently when logical time is ahead of physical time and the 12-bit counter is exhausted.
  • HlcGuidFactory constructor now enforces a 14-bit node ID constraint and throws ArgumentOutOfRangeException for values above HlcGuidFactory.MaxNodeId (16383). Previously, higher values were silently truncated in generated UUIDv7 values.

Documentation

  • Document UUIDv7 restart-state invariants, durability boundaries, and multi-writer failure modes.
  • Document UUIDv7 node partitioning trade-offs versus default UUIDv7, HlcGuidFactory, Snowflake-style IDs, and database allocators.
  • Document UUIDv7 factory statistics and counter semantics.
  • Clarify UuidV7Factory collision and clock-skew guarantees, including the distinction between per-instance deterministic monotonicity and probabilistic cross-factory uniqueness.
  • Document the custom RNG contract for UuidV7Factory, including deterministic replay behavior and production CSPRNG guidance.

1.3.1 - 2026-04-02

Build

  • Add GitHub Actions CI workflow for pushes and pull requests to main.
  • Add tag-driven release workflow to publish NuGet packages and create GitHub Releases.
  • Remove setup-dotnet lock-file caching requirement from workflows (no packages.lock.json needed).

Infrastructure

  • Add a repository commit-msg hook under .githooks/ to strip auto-injected Co-authored-by trailers for Copilot/dexcompiler identities.

1.3.0 - 2026-02-19

Fixed

  • Fix packed HLC decode for high-bit wall times.
  • Enforce HLC drift bounds when the clock moves backwards.
  • Harden VectorClock string parsing and coordinator locking.
  • Fix VectorClock overflow behavior.
  • Fix thread safety in demo FailureInjector.
  • Preserve correlation IDs correctly in at-least-once demo flows.
  • Prevent a template dictionary memory leak in the integration demo.
  • Stabilize demo MessageId generation.

Changed

  • Optimize HLC timestamp serialization/parsing, and simplify witness max selection.
  • Make HLC message header TryParse non-exceptional.
  • Split HLC coordinator supporting types into separate files.
  • Optimize VectorClock merge/compare/increment and serialization.
  • Use ArrayPool<T> for vector clock merge buffers.
  • Use CollectionsMarshal for vector clock canonicalization.
  • UUIDv7 packing now uses BinaryPrimitives and a tighter packing path.
  • UUIDv7 factory batch generation throughput improvements.
  • Adopt C# 14 extension member blocks.

Added

  • Add high-value property tests for HLC and vector clocks.
  • Demo: add distributed-systems at-least-once simulation with HLC/VC stats.

Documentation

  • Update README with HLC and VectorClock wire formats.
  • Clarify HLC drift bounds and ordering scope.

Build

  • Infrastructure scripts: improve setup/maintenance harness and dotnet installation step.

1.2.0 - 2026-01-27

Changed

  • HLC receive semantics now witness the full remote HlcTimestamp (wallTime, counter, nodeId) (including nodeId tie-breaking) rather than only the remote wall time.
  • HLC coordinator receive statistics now treat "remote ahead" based on full timestamp ordering.

Added

  • Additional property tests for HlcCoordinator covering remote-ahead by counter, nodeId tie-breaking, remote-behind behavior, and mixed send/receive/time interleavings.
  • Unit test coverage for receiving a remote timestamp with higher counter at the same wall time.

Build

  • Centralized common build properties in Directory.Build.props.