Skip to main content

CHANGELOG.md

# Changelog

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

This project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [v1.0.0-rc.1](https://github.com/cabol/tidefall/tree/v1.0.0-rc.1) (2026-06-21)
> [Full Changelog](https://github.com/cabol/tidefall/compare/v1.0.0-rc.0...v1.0.0-rc.1)

### Enhancements

- [Tidefall.Queue] Added the `:sort_key` runtime option on `push/3` to control
  how buffered items are ordered within a partition. Defaults to insertion
  order; accepts a function (arity 1 applied to each item, or arity 0 evaluated
  per item) that returns the sort term. Ordering is per partition and no item
  is ever dropped.
- [Tidefall.Buffer] Added the `:drain_threshold` and `:drain_check_interval`
  options (available on both `Tidefall.Queue` and `Tidefall.HashMap`) to drain
  a partition early once it reaches `:drain_threshold` items, instead of
  waiting for the next `:processing_interval` tick — draining on whichever
  fires first. Per-partition, lossless (an early-flush trigger, not a cap), and
  off by default.

### Bug Fixes

- [Tidefall.Buffer] Fixed `update_options/2` so a partial update changes only
  the options you pass; previously, omitting an option silently reset it to its
  default (e.g. updating `:processing_interval` also reset
  `:processing_batch_size` to `10`).

## [v1.0.0-rc.0](https://github.com/cabol/tidefall/tree/v1.0.0-rc.0) (2026-06-13)

### Enhancements

- [Tidefall.Queue] Insertion-ordered ETS buffer (`:ordered_set`) that
  accumulates items and drains them to a processor in periodic batches.
- [Tidefall.HashMap] Coalescing key-value buffer (`:set`, last-write-wins)
  with version-aware conditional writes (`put_newer/4`, `put_all_newer/3`)
  and an optional `:key_hasher` for complex keys.
- Module-based buffers via `use Tidefall.Queue` / `use Tidefall.HashMap` —
  the module name becomes the default instance, with start options layered
  across compile-time `use` opts, the application environment, and explicit
  `start_link`/child-spec opts. `:otp_app` is required and validated at
  compile time.
- Partitioned writes (`:erlang.phash2/2` routing, configurable
  `:partition_key`) with double-buffering for zero-downtime processing.
- Telemetry events under `[:tidefall, :partition, ...]` covering partition
  lifecycle and batch processing.