0.6.0 (2026-03-04)
New features
Resiliency.RateLimiter— new module. Token-bucket rate limiter with lazy refill, lock-free ETS CAS hot path (no GenServer message on grant or reject), weighted calls,on_rejectcallback,get_stats/1,reset/1, and built-in telemetry (start/rejected/stopevents).
Bug fixes
- Duplicate
start_linkwith the same name now returns{:error, {:already_started, pid}}instead of allowing split-brain state. terminate/1now deletes the ETS table before erasingpersistent_term, preventing a brief window where callers could obtain a dead ETS reference.- Unknown name now raises a clear
ArgumentErrorinstead of a:badargcrash frompersistent_term.get/1.
0.5.0 (2026-03-03)
New features
Built-in telemetry — all 10 modules now emit
:telemetryevents following the standard span convention (start/stop/exception) plus point events for significant occurrences (retry,hedge,rejected,permitted,state_change). Zero configuration required; attach handlers with the standard:telemetryAPI. SeeResiliency.Telemetryfor the complete event catalogue.Resiliency.Bulkhead— new module. Isolates workloads with per-partition concurrency limits. Supports configurable queue depth (max_queue) and optional caller-side wait timeout (max_wait). Rejects immediately when queue is full.
Bug fixes
Resiliency.WeightedSemaphore—try_acquire/3now wraps the GenServer call intry/catchso process exits close the telemetry span instead of leaking it.Resiliency.WeightedSemaphore—acquire/4now handles all exit reasons, not just{:timeout, _}. Non-timeout exits re-exit after emitting a:stopevent.Resiliency.SingleFlight—flight/3now wraps the GenServer call intry/catch, matching the behaviour offlight/4and ensuring the span is always closed.
0.4.0
- Add
Resiliency.CircuitBreakerwith sliding-window failure-rate tracking and automatic half-open probing.
0.3.1
- Fix flaky FIFO ordering test in
WeightedSemaphore.
0.3.0
- Split
TaskExtensioninto top-levelRace,AllSettled,Map,FirstOkmodules.
0.2.0
- Initial public release with
BackoffRetry,Hedged,SingleFlight,WeightedSemaphore, and task combinators.