Skip to content

v2.0.0

Latest

Choose a tag to compare

@ccamel ccamel released this 09 May 20:15
b210357

2.0.0 (2026-05-09)

⚠ BREAKING CHANGES

  • kernel: change event store behavior to return result tuples
  • kernel: rename domain to aggregate_type (everywhere)
  • kernel: use aggregate_id instead of stream_id
  • kernel: rename command key() to target() for clarity
  • kernel: refine command, event and snapshot keys
  • kernel: route all commands through a singleton aggregate manager
  • kernel: remove manager behaviour (used for routing)
  • kernel: remove lifecycle management from kernel layer
  • kernel: turn the kernel into a plain OTP app

Features

  • contract: add contain/2 to the range ADT (0f3eb9e)
  • contract: add difference/2 to the range ADT (cadf54a)
  • contract: add equal/2 to the range ADT (4a85896)
  • contract: add intersection/2 to the range ADT (31fb6c8)
  • contract: add lt/2 to the range ADT (439d82d)
  • contract: add overlap/2 to the range ADT (5542f1f)
  • contract: add projection checkpoint store behavior (61c3bc7)
  • core: refine store startup and validation (5ed9e55)
  • example: extract interactive bank account example into standalone script (5ea9e33)
  • kernel: add projection event log folding (7bb5ce7)
  • kernel: add projection runtime (9ee6ddd)
  • kernel: handle aggregate process failures in command dispatch (f9c8691)
  • kernel: introduce registry mapping aggregate_type to aggregate_module (0e2acc9)
  • kernel: make snapshot interval configurable (d4b0f57)
  • projection: add managed projection runners (1ccc6ae)
  • store_ets: add global event positions (b397992)
  • store_file: add File store backend (e16058b)
  • store_file: add global event index (19f5d73)
  • store_mnesia: add global event positions (0c09f08)
  • xp: improve xp (demo) application (32f777d)
  • xp: wire projection runtime into demo app (8c829cc)

Bug Fixes

  • contract: correct behavior of advance/2 to return empty range when beyond upper bound (4f7f60a)
  • contract: correct error tuple for invalid range creation (dff2608)
  • file: handle file:write_file error return type (1c6b31e)
  • kernel: add (missing) event_type/1 callback to aggregate behavior (97ec156)
  • kernel: add warning log for missing registry entry in init/1 (c67b810)
  • kernel: align manager dispatch specs with actual return types (95774e9)
  • kernel: make checkpoint ets startup race-safe (1c5e5db)
  • kernel: preserve event order in aggregate batches (59046e4)
  • xp: enforce positive withdraw amounts (813f7da)

Documentation

  • kernel: document projection runner failure mode (7e768e4)
  • kernel: tighten aggregate process documentation (ff3cea9)
  • README: add codecov badge (c1aa4e3)
  • README: add pull-based projection runtime and checkpointing details (2dde721)
  • README: clarify command payload and aggregate type resolution (19af86b)
  • README: describe file store backend (+ cosmetics) (dd9174a)
  • README: describe lint workflow (dialyzer, fmt) (9663a18)
  • README: document global event folding (fa2f543)
  • README: document kernel refactor and supervision tree (fdd21b4)
  • README: document managed projections (8cfdf16)
  • README: document projection app runtime (6a4de80)
  • README: include capabilities for each store (29bfe3c)
  • README: refresh feature overview (1eee3a9)
  • README: specify event store backend roadmap (e91c279)

Styles

  • contract: polish style (14990a8)
  • fix line length lint (8ee4e12)
  • kernel: make linter happy again (7f509bb)
  • kernel: simplify metadata and tags handling (0214388)

Refactors

  • apply es_ prefix to all modules (simplify naming) (8ceee1e)
  • contract: change fold callback to use interval as first-class parameter (6a020f2)
  • contract: rename interval ADT into range (c6c3056)
  • core: split store behaviours (a6022c2)
  • extract event sourcing contract into dedicated app (33241ee)
  • kernel: change event store behavior to return result tuples (8186b17)
  • kernel: configure store via OTP application environment (6fb6c45)
  • kernel: extract rehydration logic from aggregate init (60c7c70)
  • kernel: migrate es_kernel_aggregate_sup to modern dynamic supervisor (f2001cf)
  • kernel: refine command, event and snapshot keys (8ad27c2)
  • kernel: remove lifecycle management from kernel layer (07ddecb)
  • kernel: remove manager behaviour (used for routing) (acb0e75)
  • kernel: remove wrapper functions from es_kernel_store (d835daf)
  • kernel: rename command key() to target() for clarity (58d60e9)
  • kernel: rename dispatch to execute in es_kernel_aggregate (cb49631)
  • kernel: rename domain to aggregate_type (everywhere) (4188fc1)
  • kernel: restructure stream_id as {domain, aggregate_id} tuple (b475ab7)
  • kernel: route all commands through a singleton aggregate manager (ed6c697)
  • kernel: turn the kernel into a plain OTP app (b7af467)
  • kernel: use aggregate_id instead of stream_id (eade7e5)
  • merge es_contract into es_kernel application (f23018a)
  • move contract types to dedicated modules (6c9bd74)
  • projection: move projection runtime to dedicated app (93a5f07)
  • range: normalize/relax range creation logic (8cac1d9)
  • remove configurable sequence_zero and sequence_next functions (055087e)
  • rename es_core to es_kernel (d7fd4c1)
  • rename event store and snapshot store callbacks (74a5dc4)
  • reorder fold/4 callback parameters (39d927e)
  • split store backends into dedicated apps (fa9dd51)
  • store_ets: make store_es a standalone OTP application (73f716d)
  • store_ets: parametrize table name with configurable defaults (d66b918)
  • store_mnesia: make store_es a standalone OTP application (d37902e)
  • store_mnesia: parametrize table name with configurable defaults (de2300e)
  • store: clarify meaning of store context (844e054)
  • store: split event and snapshot stores (bcb6199)

Performance Improvements

  • kernel: optimize retrieve_events to build event lists in O(n) (889be9e)

Tests

  • contract: add comprehensive unit tests for event_sourcing_interval module (012d846)
  • contract: cover contain/2 for the range ADT (f9839c1)
  • contract: cover difference/2 for the range ADT (90a7533)
  • contract: cover equal/2 for the range ADT (b6072e1)
  • contract: cover intersection/2 for the range ADT (a7d047b)
  • contract: cover lt/2 for the range ADT (b73e816)
  • contract: cover overlap/2 for the range ADT (2fd9119)
  • contract: make range tests black-box (f994fa5)
  • kernel: add aggregate_survives_dead_worker test case (cb450e0)
  • kernel: cover file store backend (0236ec9)
  • kernel: cover global event folding (1e65094)
  • kernel: cover projection runtime (5d779e3)
  • projection: cover projection management (79830cd)
  • projection: ensure polling runner cleanup (f5e6a33)
  • remove domain from aggregateId (not necessary) (ced40f8)
  • xp: put bank_account_aggregate under testing (21f5df0)

Build System

  • agents: bring erlang_otp_developer to life (43d6fc1)
  • agents: remove unnecessary tools field (61731ec)
  • deps: bump actions/cache from 4 to 5 (2db2fc8)
  • deps: bump actions/checkout from 5 to 6 (beed6fc)
  • deps: bump codecov/codecov-action from 5 to 6 (4a3c7a4)
  • deps: bump crazy-max/ghaction-import-gpg from 6 to 7 (8522c7c)
  • project: configure covertool coverdata properly (809ce64)
  • rebar: add projection app to umbrella (25fce84)
  • release: add escript to generate release BOM (dcaf2f4)
  • release: categorize non-feature commits in changelog (ec7d421)

Continuous Integration

  • codecov: ignore demo app coverage (4a597e2)
  • workflow: addcoverage reporting job and upload to Codecov (22c0631)
  • workflow: ensure injected demo snippet is up to date (884609c)
  • workflow: fix example script path (deea666)

Chores

  • project: add data directory to git ignore list (9cdf6a3)