v0.7.0 (2026-01-31)
Features
- Same trait can be set by multiple commands
- "Did you mean?" suggestions in compile-time errors for typos
Compile-time Validations
- Validate referenced entities in params
- Validate circular trait dependencies
- Validate trait references in
:fromoption (non-existent trait, wrong entity)
Bug Fixes
- Fix trait transition execution order
- Fix trait resolution for commands in conflict groups
- Fix
:is_subsetconflict resolution removing commands in multiple groups - Fix trait resolution when command produces multiple entities
Improvements
- Major internal refactoring - extracted modules:
Context,Requirements,CommandGraph,Exceptions - Improved exception messages with better context
- Improved error reporting
- Better error message when produced entity was already produced by another command
- Hide
__spark_metadata__from inspect output - Compile test support files
Dependencies
- Updated Spark and other dependencies
v0.6.0 (2024-05-17)
Features
:fromoption now accepts list of traits - a trait can replace multiple parent traits:trait :suspended, :user do from [:pending, :active] # Can transition from either state exec :suspend_user end
Bug Fixes
- Match generated args by
args_matchfunction when there's a conflict - fixes cases whengenerate_argshas randomness - Don't treat structs as maps in deep comparison/merging
Improvements
- Better error message when entity was put manually into context without using SeedFactory
Breaking Changes
- Requires Elixir ~> 1.15 (due to Spark ~> 2.1 dependency)
v0.5.0 (2024-03-12)
Features
- Multiple commands can produce the same entity - the first defined command becomes the default
- Automatic command selection based on trait restrictions - when traits require a specific command that produces the entity, SeedFactory automatically switches to that command
Improvements
- Better conflict resolution when merging trait arguments
- Validate entity existence in
rebind/3- raisesArgumentErrorfor unknown entities - Custom
Inspectimplementation forSeedFactory.Commandfor cleaner output
Bug Fixes
- Fix producing entity with traits when it already exists without traits
Error Messages
- Show command name when merging of args fails
- Show command name in errors when entity doesn't exist
- Helpful message when
produceis called with 1 argument incorrectly - Disallow nil command names
Validations
:with_traitsoption must be used only for parameters with type:entity
v0.4.0 (2023-08-16)
Features
- Schema composition - include other schemas using
include_schema MyApp.OtherSchemato reuse commands and traits generate_argsandargs_matchoptions for traits - more flexible alternative toargs_patternfor dynamic trait matching:trait :expired, :project do exec :publish_project do args_match(fn args -> Date.compare(Date.utc_today(), args.expiry_date) == :gt end) generate_args(fn -> %{start_date: Date.add(today, -22), expiry_date: Date.add(today, -1)} end) end end
Improvements
:fromoption is now optional forproduceandupdateinstructions - defaults to entity name- Allow
param/1macro without parentheses in formatter
v0.3.0 (2023-07-23)
Features
- Traits support - labels assigned to entities when specific commands are executed. Allows requesting entities with specific traits via
produce(context, user: [:admin, :active]) pre_exec/3- creates dependencies needed to execute a command, useful when executing the same command multiple timespre_produce/2- produces dependencies needed for specified entities
Breaking Changes
- DSL syntax for parameters changed:
# Before (v0.2.0) param :name, &Faker.Person.name/0 param :role, fn -> :normal end param :company, :company # After (v0.3.0) param :name, generate: &Faker.Person.name/0 param :role, value: :normal param :company, entity: :company - Renamed internal
:commandsDSL section to:root
Improvements
- Friendly error when unknown command is passed to
exec - Raise error if unknown entity is passed to
produce - Allow rebinding to the same value (no longer raises)
- Compile-time validations for traits
- Exported formatter settings for
exec/1-2andfrom/1
v0.2.0 (2023-06-07)
Features
- Support nested rebinding -
rebind/3can now be nested, merging rebindings at each level and properly restoring previous state after callback completion. Raises on rebinding conflicts.
Improvements
- Raise an error when redundant keys are passed to a command (keys not defined in params)
v0.1.0 (2023-05-06)
Initial release.
Features
- Schema DSL for defining entities and commands
- Command system with:
produce- for creating entitiesupdate- for modifying entitiesdelete- for removing entities
- Parameter handling with support for generating values and dependencies on other entities
- Test utilities (
SeedFactory.Test) for using in ExUnit tests - Compile-time verification of dependencies between commands and entities