Skip to content

v0.4.0

@nshkrdotcom nshkrdotcom tagged this 27 Dec 20:27
Normalize the Stage.describe/1 return value to a canonical schema format
that aligns with the Crucible.Stage behaviour contract. This breaking
change establishes a consistent introspection interface across all
Crucible stages.

Schema Format Changes:

The name field changes from a string ("ensemble_voting") to an atom
(:ensemble_voting) for consistency with Elixir conventions and pattern
matching ergonomics.

Added __schema_version__ marker ("1.0.0") to enable future schema
evolution and backward compatibility detection.

Introduced core schema fields: required, optional, types, and defaults.
These provide machine-readable option specifications that enable
tooling, validation, and documentation generation.

Moved domain-specific metadata (strategies, execution_modes, inputs,
outputs, config_type, behaviour) into the __extensions__.ensemble
namespace. This separates universal stage metadata from ensemble-
specific concerns.

Dependency Updates:

Upgraded crucible_framework from ~> 0.4.0 to ~> 0.5.0 to align with
the new Stage behaviour contract requirements.

Bumped crucible_ir from ~> 0.2.0 to ~> 0.2.1 for compatibility.

Extended dialyxir to run in test environment for improved CI coverage.

Testing:

Added comprehensive conformance test suite in conformance_test.exs
that validates schema structure, field relationships, type
specifications, and extension format.

Updated existing stage_test.exs and stage_behaviour_test.exs to
verify the new canonical format, including atom name assertions and
extension namespace access patterns.

Documentation:

Updated README Stage Introspection example to demonstrate the new
canonical schema format with all core fields and extension access.

Added Stage Contract section documenting available options including
normalization, timeout_ms, and min_responses with their types and
default values.
Assets 2
Loading