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.Config—NimbleOptions-validated runtime config with:play,:play_live,:liveenvironment supportRailsr.Auth— OAuth 2.0 client-credentials token fetchRailsr.Auth.TokenCache— ETS-backedGenServerwith automatic pre-expiry refresh and full-jitter exponential back-off on failuresRailsr.HTTP— Core request pipeline with automaticAuthorization: Bearerinjection, idempotency key generation, retry logic, telemetry emission, and circuit breaker integrationRailsr.Error— Structured error type withtype,code,request_id,retryable?fieldsRailsr.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
Railsr.Telemetry— Emits[:railsr, :request, :start | :stop | :exception]events compatible withTelemetry.MetricsRailsr.Telemetry.attach_logger/1— Development convenience logger attachment
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/3polling helperRailsr.Resources.Ledgers— GBP/EUR/virtual ledger CRUD, account/IBAN lookup, entry history, virtual credit/debit, PLAY-only dev credit,wait_for_active/2Railsr.Resources.Transactions— send money, inter-ledger, FX, quarantine list/approve/reject, retry,wait_for_terminal/2Railsr.Resources.Beneficiaries— CRUD, Confirmation of Payee (CoP), firewall recalculationRailsr.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/2Railsr.Resources.Payments— Direct Debit payment create/get/listRailsr.Resources.Firewall— Rule set CRUD, dataset CRUD, functions referenceRailsr.Resources.Webhooks— Endpoint configuration, delivery history, retry, HMAC-SHA256 signature verification, event catalogue (31 event types),parse_event/1Railsr.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,
@specon all public functions mix cialias: format + credo + dialyzer + test --cover