Apache Airflow this week, multi team triggerer and dags clear CLI
Apache Airflow shipped 143 commits to main in the last seven days, touching 1,210 files across 46,490 insertions and 11,241 deletions. The headline change is multi team triggerer support landing as a schema migration on the trigger table, plus a new airflow dags clear CLI for partition range reprocessing. This post walks the activity that actually matters for operators and DAG authors who follow apache/airflow.
Multi team triggerer lands in the schema
Multi team triggerer support adds a team_name column to the trigger table, an index on it, and a foreign key to team.name with ON DELETE SET NULL. The Alembic migration file is 0116_3_3_0_add_team_name_to_trigger_table.py, and the model lives in airflow-core/src/airflow/models/trigger.py.
The column is intentionally denormalized, and the model carries a comment that spells out why. The triggerer polls roughly once per second, and joining dag_bundle_team on every poll would add two or three joins depending on trigger type. Trigger rows are ephemeral, so eventual consistency on the team name is acceptable. Performance testing confirmed no measurable overhead in the triggerer loop under load.
The migration head moves to acc215baed80 and Alembic applies it on upgrade. Operators running multi team deployments should expect UI and API filters to start keying off this column.
New CLI for partition range reprocessing
The maintainers added an airflow dags clear command aimed at partition range reprocessing. Clearing a range of dag runs to rerun a backfill used to require stitching multiple commands and date filters together. Now it is a single CLI call.
Alongside that, airflow dags next-execution reports when a given DAG will run next. Both fit the larger theme of trimming rough edges in day to day operator workflows.
If your team keeps ops runbooks in version control, plan an update. These are stable surfaces in 3.3.
JWT, Akeyless, and OpenLineage auth fixes
Several patches close real footguns in the auth layer:
- Revoke JWT on /auth/logout regardless of which auth manager owns the logout URL. Previously logout could leave a JWT live if the auth manager redirected before the revoke ran.
- Fix Akeyless JWT connection credentials not being redacted in logs. If you use Akeyless, audit retained log streams for the leaked tokens.
- Require starlette>=1.0.1 to pull in the upstream Host header parsing fix.
- Read OpenLineage HTTP API key auth from the Airflow connection instead of env vars or extra config. Cleaner secret rotation, fewer places to forget.
The v3.2 JWT and security model docs got a refresh with mermaid diagrams. If you bounced off the older version, the new one is worth a second pass.
Triggerer and deferrable operator fixes
This was a busy week for the triggerer loop and deferrable operators:
- Share one poll loop across sibling event triggers. Cuts duplicate polling overhead when many triggers in a DAG resolve from the same event source.
- Fix deferrable execution_timeout handling in AirbyteTriggerSyncOperator and the same fix in DbtCloudRunJobOperator. If you run either as deferrable, your
execution_timeoutwas probably not behaving the way the docs say. - Preallocate external_executor_id correctly with multiple executors. Anyone running hybrid executor setups should pick this up.
- Return the raw import error stacktrace when a Python file is parsed but contains no registered DAG. The previous behavior swallowed the actual exception, which made the file harder to debug than it needed to be.
The supervisor child schema migration is also worth flagging. It touches the task SDK runner side, so confirm custom operators still serialize cleanly after upgrade.
Monaco workers, Playwright bump, and DAG tab titles
A handful of cleanups that the maintainers shipped this week:
- Monaco editor workers now load via a same origin Blob shim, which unblocks deployments behind strict CSP.
- Show DAG name in the browser tab title. Small change. Very useful when you have ten tabs open.
- Fix Expand/Collapse All on XComs and Audit Log JSON cells.
- Bump @playwright/test to 1.60 to fix the UI e2e install hang on Node 24+.
On the contributor side, the test stack picked up a pymysql 1.2.0 compatibility fix for aiomysql, and a flaky AzureDataFactory test was pinned by mocking time.
What to watch
- The
team_namecolumn is nullable withSET NULLon delete, which is the right call for ephemeral rows. Watch downstream code that assumes the column is always populated. airflow dags clearandairflow dags next-executionare new surfaces. Pin scripted ops to the 3.3 release tag if you want stable flags.- The Akeyless redaction fix is a candidate for backport requests. If you operate older Airflow with the Akeyless provider, ask the maintainers about a patch release window.
Diff stats are big this week, but most of the volume is uv.lock, pyproject.toml, and provider yaml churn. The functional changes worth your attention are the ones above.