Skip to content

ETLantic 0.36.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 01:18

[0.36.0] - 2026-07-30

Adopter summary

Who must act Anyone pinning etlantic==0.35.x or plugins with <0.36
Breaking Dependency floor becomes etlantic>=0.36.0,<0.37 (no wire-schema reset). Bare run-report metadata keys migrate to namespaced keys. Production allowlists require non-empty version pins. Soft-continued runs report PARTIAL. Missing implementations fail at plan (PMPLAN301). Reliability partition-check / quality-trends require evidence flags
Upgrade pip install 'etlantic==0.36.0' and matching plugins / medallantic==0.36.0. See Migration 0.35 → 0.36
Rollback Re-pin 0.35.0 minors together; re-validate
Security Compatibility fixtures and reports remain secret-free; production allowlist pins + outbound default-deny fail closed; schema history / authoring / Safe I/O hardened; digests/attestations as shipped

Added

  • Joint compatibility burn-in evidence for 0.34 → 0.35 and 0.35 → 0.36
    (current-reader and isolated-wheel reader/writer paths)
  • Release baseline manifests and known-defect fixtures under
    tests/fixtures/releases/
  • Burn-in goldens for v0_34v0_36 alongside historical v0_24v0_27
  • Application-pipeline testing burn-in against the frozen preview minimum
    contract (etlantic.testing; foundation graduation remains 0.38)
  • What's New / Migration / Exit Gate / Findings documentation for 0.36

Changed

  • Official package versions align at 0.36.0; plugins require
    etlantic>=0.36.0,<0.37
  • etlantic.scheduler/1 promoted to stable MVP (Prefect bounds) on the
    foundation path
  • etlantic.quality/1 remains provisional (outside the full stable-foundation
    claim)
  • Run-report bare metadata keys migrate to namespaced keys without silent
    field loss
  • Production plugin_allowlist entries require non-empty version pins;
    package names are canonicalized for matching
  • Reliability CLI: partition-check requires --observed; quality-trends
    requires --values (preview-only)

Fixed

  • Forward compatibility for 0.35.0 bare-key run-report metadata via documented
    migration and known-defect fixture
    (tests/fixtures/releases/v0_35/known_defects/run_report_bare_metadata.json)
  • SecretValue is no longer a dataclass (blocks dataclasses.asdict plaintext
    leaks)
  • Schema history rejects list-of-lists, nested cells, and JSON-string row
    payloads
  • Authoring serialization rejects DSN keys and URL userinfo in definition
    values
  • Safe I/O: empty approved_roots fail closed; symlink_policy=reject denies
    any symlink component; invalid profile safe_io no longer silently dropped;
    lock/append files use 0o600
  • Production outbound requires default_deny and non-empty allowed_hosts
  • Profile warns when name looks like production without
    security_mode=production
  • Planner fails closed (PMPLAN301) without a real implementation; plan graphs
    are frozen after build
  • Contract validation requires schema fingerprint match for shared published
    ODCS ids; mixed typed/untyped ports fail
    closed
  • FailureAction.CONTINUE soft-skips report PARTIAL (never pure SUCCEEDED)
  • Spark sinks no longer coerce Delta for overwrite_partition / bare
    pyspark provider
  • LazyFrame record counts report unknown (None) instead of a false zero
  • OPS examples, FastAPI OpenAPI version, and Medallantic ROADMAP release header
    aligned to 0.36.0
  • Package READMEs, optional-API metadata, planning status, and Beta maturity
    language aligned to 0.36; release-artifact docs no longer predict an SBOM
    outcome before the tag workflow runs
  • Documentation checks now reject stale current_minor / current-boundary
    markers, contradictory package maturity text, and premature release-asset
    claims
  • Log redaction covers auth/jwt/bearer keys and JWT-shaped tokens