Skip to content

Note

This page includes the repository's CHANGELOG.md verbatim.

Changelog

All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning (0.x: minor bumps may break).

[0.2.2] - 2026-07-12

Fixed

  • Embedded UI authentication: Airflow 3.1's UI keeps its JWT in localStorage and sets no session cookie on browser login, so the plugin's embedded views received 401s for logged-in users. The plugin UI now reuses Airflow's own token (shared same-origin storage) as a Bearer header; the _token cookie and DQ_API_TOKEN continue to work.

Added

  • DQ_DEV_TOKEN env for the Vite dev proxy (authenticated local UI development against a running stack); launch article and real embedded screenshots in docs/.

[0.2.1] - 2026-07-12

Fixed

  • Installation with Airflow constraints: the sqlalchemy>=2.0 floor conflicted with Airflow 3.1's official constraints (sqlalchemy==1.4.54), making constraint-respecting installs impossible. Relaxed to >=1.4.36; the code uses only 1.4-compatible Core APIs and the suite runs against 1.4.54 in CI.
  • Installs without a built UI (editable/dev/CI): the static wheel force-include of ui/dist failed with FileNotFoundError; replaced by a conditional hatchling build hook. Published wheels still ship the UI (verified by the release workflow).
  • sdists no longer include the local .claude/ dev config; GitHub links updated to the renamed repository owner.

[0.2.0] - 2026-07-12

Added

  • Auth: Airflow auth-manager JWT validation (Bearer header or _token session cookie), verified live against Airflow 3.1.0; legacy DQ_API_TOKEN shared secret kept for machine clients; write routes consult is_authorized_custom_view.
  • UI: three new views on the Airflow-native design system — Overview (per-contract rollup with SLA scorecard + anomaly counts), Quarantine triage (filters, pagination, bulk resolve), and dashboard upgrades (server-flagged anomalies, dag/status filters); the built UI now ships inside the wheel.
  • SLA checks compiled from ODCS slaProperties (latency, frequency, retention).
  • Anomaly detection: leave-current-out baselines for the z-score rule; persisted server-side metric anomalies (dq_metric_anomalies) surfaced in trends and alerts.
  • Alerting: per-(run, contract) grouped alerts with scheme-routed channels (webhook, mailto:, pagerduty://, opsgenie://) and severity-aware routing.
  • Contracts: immutable versions (409 on conflict), atomic writes, registry sync with version timeline API, param/severity-aware breaking-change detection, git propose-as-PR flow (propose: true), dbt schema.yml import.
  • Executors: Airflow Connection resolution, pooled engines with statement timeouts, dialect layer, experimental Snowflake/BigQuery/Databricks/Trino adapters (SQL-generation tested; not yet run against live warehouses).
  • Results store: SQL migration runner, idempotent upserts keyed by (dag_id, run_id, task_id, check_name), paginated/filterable results API, retention helper.
  • OpenLineage: dataset naming derived from the resolved connection per the OL naming spec.
  • Packaging: py.typed, Python 3.10–3.12 classifiers, Airflow-constraints CI matrix, real docker-compose integration test (scripts/integration_test.sh, make integration).

Changed (breaking — see README "Upgrading from 0.1.x")

  • freshness defaults to mode: max_age (table-level newest-row age); the old per-row behavior is mode: row_age. The unit param (day/hour) is now honored.
  • Executor errors produce status='error' results instead of only crashing the task; record-only monitors no longer fail on infra blips.
  • Quarantine no longer fires for tolerated (pass-graded) results.
  • Check tasks no longer push result XComs by default (return_result=True restores).
  • The API no longer injects a bearer token into the served UI; auth is cookie/JWT based.
  • Contract YAML output follows ODCS v3.1 and is validated by the official JSON Schema and datacontract lint (CI job): quality rules are emitted as custom engine blocks (engine: airflow-dq), column-scoped checks nest under their schema property, and legacy logical types normalize on read (decimalnumber).
  • Trends rows_failed is now serialized as an integer (was a JSON string on Postgres).

[0.1.0] - 2026-07 (unreleased baseline)

  • Initial framework: ODCS-dialect contracts, 12 rule types, dynamic-task-mapped checks, fail/warn/quarantine policies, results store, embedded dashboard + low-code editor, webhook alerting, OpenLineage facets, DuckDB/Postgres executors.