Legend

  • [+] Added for new features
  • [-] Removed for now removed features
  • [C] Changed for changes in existing functionality
  • [F] Fixed for any bug fixes
  • [O] Obsolete for soon-to-be removed features
  • [T] Technical change that doesn't affect the API (eg. refactoring, tooling, etc.)

Next release

1.0.2

  • [T] Changes in mix.exs description entry.
  • [T] Opaque type added to roadmap.
  • [T] Post execution patterns documented.
  • [T] GitLab CI/CD just on develop and main, avoid running the pipeline on tags

1.0.1

  • [T] GitLab CI/CD prepared
  • [T] Publishing to hex.pm prepared
  • [T] LICENSE Added

1.0.0

  • [C] Logger messages improved
  • [+] Use case pipeline: create/1, async/1, timeout/2, callback/2, reply/2, input/2, run/1/run/2
  • [+] Module-based use cases: any module exporting exec/1 is a valid use case
  • [+] Function-based use cases: fn closures and &Module.function/1 captures work directly
  • [+] Every pipeline function accepts a module or function directly — create/1 is optional and the pipeline can start at any step
  • [+] Asynchronous execution via async/1 (fire and forget; default is synchronous)
  • [+] Timeout via timeout/2: kills the underlying task when the deadline is exceeded and sets timedout_at on the result struct
  • [+] Result delivery to processes via reply/2; validated that all targets are actual PIDs
  • [+] Result delivery via functions with callback/2; callbacks fire asynchronously even for synchronous use cases
  • [+] Lifecycle tracking via started_at, finished_at, and timedout_at timestamps on the result struct
  • [+] Exception capture: exceptions raised by the use case are stored in error and stacktrace; the caller never crashes
  • [+] Already-started guard: every pipeline function raises ArgumentError if called on a struct whose started_at is set
  • [+] Automatic supervision tree — no manual setup required in the application supervisor
  • [C] Use case callback named exec/1 (not run/1) to avoid collision with Interact.UseCase.run/1

0.1.0

  • [+] Starting point is the UseCase module presented on January 2025 at the Elixir Madrid Meetup by Ángel Herranz.