Understand that Airflow 3 tracks DAG versions automatically whenever a DAG file changes; no opt-in configuration is required for the LocalDagBundle, while GitDagBundle versions are tied to git commits
Query GET /api/v2/dags/{dag_id}/versions to list stored DAG versions; each entry contains a version_number and a created_at timestamp
To trigger a backfill against a specific historical version, supply the version_number in the POST /api/v2/backfills request body under dag_version_id if the field is available in your Airflow release, or use the Airflow UI backfill dialog which exposes the version picker
Verify the run used the intended version by checking the bundle_version field in the DagRun response object
For GitDagBundle-backed DAGs, ensure the relevant git commit is still present in the repository history; deleted commits cannot be re-fetched by the bundle loader
Known gotchas
DAG versioning is fully automatic in Airflow 3 and cannot be disabled; every file-level change creates a new version entry, so rapidly iterating DAG files will accumulate version records
The LocalDagBundle (default) is not versioned in the git sense; Airflow creates a new internal version entry on parse but cannot reproduce the exact code later if the file has been overwritten
Backfill-by-version support via API was still being extended as of Airflow 3.2; verify the dagVersionId parameter exists in your specific version before building automation around it
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp