Skip to content

ETLantic 0.30.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 19:09

[0.30.0] - 2026-07-28

Added

  • Provisional etlantic.quality/1 portable quality-expression AST + JSON Schema
  • etlantic.quality helpers: serialize/fingerprint, ContractModel mapping, analyze, evaluate, make_quality_gate
  • Plan metadata for quality gates (cost, capabilities, fallback evidence, validation_boundary)
  • Plan-time fail-closed diagnostics PMPLAN420 / PMPLAN421 for unsupported required quality capabilities
  • Portable quality conformance suite: etlantic.testing.run_quality_conformance_suite
  • Polars / Pandas advertise portable quality rule capabilities
  • Medallantic rule DSL (parse_rules_shorthand) and real quality-gate lowering (replaces MDL110 passthrough)
  • Medallantic evaluate_accept_rates for layer threshold comparison
  • What's New / Migration / Exit Gate 0.30 documentation

Changed

  • Official package versions align at 0.30.0; plugins require etlantic>=0.30.0,<0.31
  • Local stub registry advertises portable quality capabilities for plan-time negotiation
  • Medallantic bronze steps with rules insert {name}__ingest + gate nodes
  • Surface inventory marks etlantic.quality/1 provisional and adds quality lazy namespace

Fixed

  • Quality gate factory resolves ContractModel port types and invalid-role rejected outputs
  • Name-only custom_contract rules fail closed at evaluate time (no silent pass)
  • Quality capability asserts run before native implementation selection so SQL/PySpark profiles emit PMPLAN420/421 instead of PMPLAN302
  • Plan metadata recomputes quality fingerprints so embedded hashes cannot drift
  • Optional required=False quality rules skip rejection while recording soft diagnostics
  • Regex / range / length DSL evaluation no longer crashes the gate on bad inputs
  • field_constraints_dict projects nullable, compare ops, and composite unique_fields
  • Medallantic quality gates attach {step}__rejected sink Loads (invalid→sink wiring allowed)
  • PySpark stops advertising invalid_row_separation without dataframe
  • Surface / agent / capability / diagnostics catalogs reflect etlantic.quality for 0.30