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

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

[Unreleased]

[1.0.0] — 2026-05-30

Added

Core Infrastructure

  • Railsr.ConfigNimbleOptions-validated runtime config with :play, :play_live, :live environment support
  • Railsr.Auth — OAuth 2.0 client-credentials token fetch
  • Railsr.Auth.TokenCache — ETS-backed GenServer with automatic pre-expiry refresh and full-jitter exponential back-off on failures
  • Railsr.HTTP — Core request pipeline with automatic Authorization: Bearer injection, idempotency key generation, retry logic, telemetry emission, and circuit breaker integration
  • Railsr.Error — Structured error type with type, code, request_id, retryable? fields
  • Railsr.Types — Full struct definitions for all Railsr domain objects

Middleware

  • Railsr.Middleware.RateLimiter — Client-side token-bucket rate limiter (ETS-backed, lock-free reads)
  • Railsr.Middleware.CircuitBreaker — Three-state circuit breaker (closed / open / half-open)
  • Railsr.Middleware.IdempotencyKey — Automatic 128-bit random idempotency key generation on all mutating requests

Telemetry

Resources — complete coverage of every Railsr v1/v2 endpoint group

  • Railsr.Resources.Endusers — v2 enduser CRUD, KYC trigger/retrieval, compliance firewall recalculation, wait_for_status/3 polling helper
  • Railsr.Resources.Ledgers — GBP/EUR/virtual ledger CRUD, account/IBAN lookup, entry history, virtual credit/debit, PLAY-only dev credit, wait_for_active/2
  • Railsr.Resources.Transactions — send money, inter-ledger, FX, quarantine list/approve/reject, retry, wait_for_terminal/2
  • Railsr.Resources.Beneficiaries — CRUD, Confirmation of Payee (CoP), firewall recalculation
  • Railsr.Resources.Cards — virtual/physical card create, full lifecycle (activate/freeze/unfreeze/cancel/suspend), replace, PAN retrieval, PIN reset, card transaction history, spend rules (amount limit, MCC block, country block), card programmes, digital wallet token provisioning (Labs)
  • Railsr.Resources.Mandates — BACS Direct Debit mandate CRUD, cancel, wait_for_active/2
  • Railsr.Resources.Payments — Direct Debit payment create/get/list
  • Railsr.Resources.Firewall — Rule set CRUD, dataset CRUD, functions reference
  • Railsr.Resources.Webhooks — Endpoint configuration, delivery history, retry, HMAC-SHA256 signature verification, event catalogue (31 event types), parse_event/1
  • Railsr.Resources.Customer — Get/update customer account, list products, list customer-level ledgers

Testing (≥90% coverage target)

  • Full Bypass-based HTTP interception tests for all resource modules
  • Retry behaviour, circuit breaker state, rate limiter bucket tests
  • Config validation, type deserialisation, error classification tests
  • Webhook signature verification edge cases

Developer Experience

  • GitHub Actions CI: test matrix (Elixir 1.15/1.16 × OTP 25/26), format check, Credo strict, Dialyzer, Coveralls
  • ExDoc documentation with module groups, @spec on all public functions
  • mix ci alias: format + credo + dialyzer + test --cover