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
localStorageand 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_tokencookie andDQ_API_TOKENcontinue to work.
Added¶
DQ_DEV_TOKENenv for the Vite dev proxy (authenticated local UI development against a running stack); launch article and real embedded screenshots indocs/.
[0.2.1] - 2026-07-12¶
Fixed¶
- Installation with Airflow constraints: the
sqlalchemy>=2.0floor 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/distfailed withFileNotFoundError; 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
_tokensession cookie), verified live against Airflow 3.1.0; legacyDQ_API_TOKENshared secret kept for machine clients; write routes consultis_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), dbtschema.ymlimport. - 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")¶
freshnessdefaults tomode: max_age(table-level newest-row age); the old per-row behavior ismode: row_age. Theunitparam (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=Truerestores). - 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 ascustomengine blocks (engine: airflow-dq), column-scoped checks nest under their schema property, and legacy logical types normalize on read (decimal→number). - Trends
rows_failedis 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.