This is an automated email from the ASF dual-hosted git repository.
rahulvats pushed a commit to branch v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-2-test by this push:
new 346f3329ec5 Add 3.2.0 release notes
346f3329ec5 is described below
commit 346f3329ec556755a14c0acf1d57cd172d4b3b6b
Author: vatsrahul1001 <[email protected]>
AuthorDate: Tue Mar 3 19:15:47 2026 +0530
Add 3.2.0 release notes
---
RELEASE_NOTES.rst | 229 +++++++++++++++++++++++
airflow-core/newsfragments/54505.significant.rst | 61 ------
airflow-core/newsfragments/56866.significant.rst | 38 ----
airflow-core/newsfragments/57069.significant.rst | 16 --
airflow-core/newsfragments/58337.feature.rst | 1 -
airflow-core/newsfragments/58524.significant.rst | 7 -
airflow-core/newsfragments/58992.significant.rst | 43 -----
airflow-core/newsfragments/59239.feature.rst | 1 -
airflow-core/newsfragments/59780.significant.rst | 9 -
airflow-core/newsfragments/59785.significant.rst | 10 -
airflow-core/newsfragments/59835.significant.rst | 6 -
airflow-core/newsfragments/59855.significant.rst | 1 -
airflow-core/newsfragments/59880.bugfix.rst | 1 -
airflow-core/newsfragments/59938.bugfix.rst | 1 -
airflow-core/newsfragments/60268.improvement.rst | 1 -
airflow-core/newsfragments/60619.significant.rst | 22 ---
airflow-core/newsfragments/60803.significant.rst | 1 -
airflow-core/newsfragments/60921.significant.rst | 51 -----
airflow-core/newsfragments/60951.significant.rst | 7 -
airflow-core/newsfragments/61400.significant.rst | 20 --
reproducible_build.yaml | 4 +-
21 files changed, 231 insertions(+), 299 deletions(-)
diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index 598ab1e7fc7..201c555437c 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -24,6 +24,235 @@
.. towncrier release notes start
+Airflow 3.2.0b1 (2026-03-03)
+--------------------------
+
+Significant Changes
+^^^^^^^^^^^^^^^^^^^
+
+- Move task-level exception imports into the Task SDK
+
+ Airflow now sources task-facing exceptions (``AirflowSkipException``,
``TaskDeferred``, etc.) from
+ ``airflow.sdk.exceptions``. ``airflow.exceptions`` still exposes the same
exceptions, but they are
+ proxies that emit ``DeprecatedImportWarning`` so Dag authors can migrate
before the shim is removed.
+
+ **What changed:**
+
+ - Runtime code now consistently raises the SDK versions of task-level
exceptions.
+ - The Task SDK redefines these classes so workers no longer depend on
``airflow-core`` at runtime.
+ - ``airflow.providers.common.compat.sdk`` centralizes compatibility imports
for providers.
+
+ **Behaviour changes:**
+
+ - Sensors and other helpers that validate user input now raise
``ValueError`` (instead of
+ ``AirflowException``) when ``poke_interval``/ ``timeout`` arguments are
invalid.
+ - Importing deprecated exception names from ``airflow.exceptions`` logs a
warning directing users to
+ the SDK import path.
+
+ **Exceptions now provided by ``airflow.sdk.exceptions``:**
+
+ - ``AirflowException`` and ``AirflowNotFoundException``
+ - ``AirflowRescheduleException`` and ``AirflowSensorTimeout``
+ - ``AirflowSkipException``, ``AirflowFailException``,
``AirflowTaskTimeout``, ``AirflowTaskTerminated``
+ - ``TaskDeferred``, ``TaskDeferralTimeout``, ``TaskDeferralError``
+ - ``DagRunTriggerException`` and ``DownstreamTasksSkipped``
+ - ``AirflowDagCycleException`` and
``AirflowInactiveAssetInInletOrOutletException``
+ - ``ParamValidationError``, ``DuplicateTaskIdFound``,
``TaskAlreadyInTaskGroup``, ``TaskNotFound``, ``XComNotFound``
+ - ``AirflowOptionalProviderFeatureException``
+
+ **Backward compatibility:**
+
+ - Existing Dags/operators that still import from ``airflow.exceptions``
continue to work, though
+ they log warnings.
+ - Providers can rely on ``airflow.providers.common.compat.sdk`` to keep one
import path that works
+ across supported Airflow versions.
+
+ **Migration:**
+
+ - Update custom operators, sensors, and extensions to import exception
classes from
+ ``airflow.sdk.exceptions`` (or from the provider compat shim).
+ - Adjust custom validation code to expect ``ValueError`` for invalid sensor
arguments if it
+ previously caught ``AirflowException``.
+
+- Support numeric multiplier values for retry_exponential_backoff parameter
+
+ The ``retry_exponential_backoff`` parameter now accepts numeric values to
specify custom exponential backoff multipliers for task retries. Previously,
this parameter only accepted boolean values (``True`` or ``False``), with
``True`` using a hardcoded multiplier of ``2.0``.
+
+ **New behavior:**
+
+ - Numeric values (e.g., ``2.0``, ``3.5``) directly specify the exponential
backoff multiplier
+ - ``retry_exponential_backoff=2.0`` doubles the delay between each retry
attempt
+ - ``retry_exponential_backoff=0`` or ``False`` disables exponential backoff
(uses fixed ``retry_delay``)
+
+ **Backwards compatibility:**
+
+ Existing DAGs using boolean values continue to work:
+
+ - ``retry_exponential_backoff=True`` → converted to ``2.0`` (maintains
original behavior)
+ - ``retry_exponential_backoff=False`` → converted to ``0.0`` (no exponential
backoff)
+
+ **API changes:**
+
+ The REST API schema for ``retry_exponential_backoff`` has changed from
``type: boolean`` to ``type: number``. API clients must use numeric values
(boolean values will be rejected).
+
+ **Migration:**
+
+ While boolean values in Python DAGs are automatically converted for
backwards compatibility, we recommend updating to explicit numeric values for
clarity:
+
+ - Change ``retry_exponential_backoff=True`` →
``retry_exponential_backoff=2.0``
+ - Change ``retry_exponential_backoff=False`` →
``retry_exponential_backoff=0``
+
+- Move serialization/deserialization (serde) logic into Task SDK
+
+ Airflow now sources serde logic from ``airflow.sdk.serde`` instead of
+ ``airflow.serialization.serde``. Serializer modules have moved from
``airflow.serialization.serializers.*``
+ to ``airflow.sdk.serde.serializers.*``. The old import paths still work but
emit ``DeprecatedImportWarning``
+ to guide migration. The backward compatibility layer will be removed in
Airflow 4.
+
+ **What changed:**
+
+ - Serialization/deserialization code moved from ``airflow-core`` to
``task-sdk`` package
+ - Serializer modules moved from ``airflow.serialization.serializers.*`` to
``airflow.sdk.serde.serializers.*``
+ - New serializers should be added to ``airflow.sdk.serde.serializers.*``
namespace
+
+ **Code interface changes:**
+
+ - Import serializers from ``airflow.sdk.serde.serializers.*`` instead of
``airflow.serialization.serializers.*``
+ - Import serialization functions from ``airflow.sdk.serde`` instead of
``airflow.serialization.serde``
+
+ **Backward compatibility:**
+
+ - Existing serializers importing from
``airflow.serialization.serializers.*`` continue to work with deprecation
warnings
+ - All existing serializers (builtin, datetime, pandas, numpy, etc.) are
available at the new location
+
+ **Migration:**
+
+ - **For existing custom serializers**: Update imports to use
``airflow.sdk.serde.serializers.*``
+ - **For new serializers**: Add them to ``airflow.sdk.serde.serializers.*``
namespace (e.g., create
``task-sdk/src/airflow/sdk/serde/serializers/your_serializer.py``)
+
+- Methods removed from PriorityWeightStrategy and TaskInstance
+
+ On (experimental) class ``PriorityWeightStrategy``, functions ``serialize()``
+ and ``deserialize()`` were never used anywhere, and have been removed. They
+ should not be relied on in user code.
+
+ On class ``TaskInstance``, functions ``run()``, ``render_templates()``, and
+ private members related to them have been removed. The class has been
+ considered internal since 3.0, and should not be relied on in user code.
(#59780)
+- Modify the information returned by ``DagBag``
+
+ **New behavior:**
+ - ``DagBag`` now uses ``Path.relative_to`` for consistent cross-platform
behavior.
+ - ``FileLoadStat`` now has two additional nullable fields: ``bundle_path``
and ``bundle_name``.
+
+ **Backward compatibility:**
+ ``FileLoadStat`` will no longer produce paths beginning with ``/`` with the
meaning of "relative to the dags folder".
+ This is a breaking change for any custom code that performs string-based
path manipulations relying on this behavior.
+ Users are advised to update such code to use ``pathlib.Path``. (#59785)
+- Methods removed from TaskInstance
+
+ On class ``TaskInstance``, functions ``run()``, ``render_templates()``,
+ ``get_template_context()``, and private members related to them have been
+ removed. The class has been considered internal since 3.0, and should not be
+ relied on in user code. (#59835)
+- Removed the redundant ``--conn-id`` option from the ``airflow connections
list`` CLI command. Use ``airflow connections get`` instead. (#59855)
+- Add operator-level ``render_template_as_native_obj`` override
+
+ Operators can now override the DAG-level ``render_template_as_native_obj``
setting,
+ enabling fine-grained control over whether templates are rendered as native
Python
+ types or strings on a per-task basis. Set
``render_template_as_native_obj=True`` or
+ ``False`` on any operator to override the DAG setting, or leave as ``None``
(default)
+ to inherit from the DAG.
+
+- Add gunicorn support for API server with zero-downtime worker recycling
+
+ The API server now supports gunicorn as an alternative server with rolling
worker restarts
+ to prevent memory accumulation in long-running processes.
+
+ **Key Benefits:**
+
+ * **Rolling worker restarts**: New workers spawn and pass health checks
before old workers
+ are killed, ensuring zero downtime during worker recycling.
+
+ * **Memory sharing**: Gunicorn uses preload + fork, so workers share memory
via
+ copy-on-write. This significantly reduces total memory usage compared to
uvicorn's
+ multiprocess mode where each worker loads everything independently.
+
+ * **Correct FIFO signal handling**: Gunicorn's SIGTTOU kills the oldest
worker (FIFO),
+ not the newest (LIFO), which is correct for rolling restarts.
+
+ **Configuration:**
+
+ .. code-block:: ini
+
+ [api]
+ # Use gunicorn instead of uvicorn
+ server_type = gunicorn
+
+ # Enable rolling worker restarts every 12 hours
+ worker_refresh_interval = 43200
+
+ # Restart workers one at a time
+ worker_refresh_batch_size = 1
+
+ Or via environment variables:
+
+ .. code-block:: bash
+
+ export AIRFLOW__API__SERVER_TYPE=gunicorn
+ export AIRFLOW__API__WORKER_REFRESH_INTERVAL=43200
+
+ **Requirements:**
+
+ Install the gunicorn extra: ``pip install 'apache-airflow-core[gunicorn]'``
+
+ **Note on uvicorn (default):**
+
+ The default uvicorn mode does not support rolling worker restarts because:
+
+ 1. With workers=1, there is no master process to send signals to
+ 2. uvicorn's SIGTTOU kills the newest worker (LIFO), defeating rolling
restart purposes
+ 3. Each uvicorn worker loads everything independently with no memory sharing
+
+ If you need worker recycling or memory-efficient multi-worker deployment,
use gunicorn. (#60921)
+- Improved performance of rendered task instance fields cleanup for DAGs with
many mapped tasks (~42x faster).
+
+ The config ``max_num_rendered_ti_fields_per_task`` is renamed to
``num_dag_runs_to_retain_rendered_fields``
+ (old name still works with deprecation warning).
+
+ Retention is now based on the N most recent dag runs rather than N most
recent task executions,
+ which may result in fewer records retained for conditional/sparse tasks.
(#60951)
+- AuthManager Backfill permissions are now handled by the
``requires_access_dag`` on the ``DagAccessEntity.Run``
+
+ ``is_authorized_backfill`` of the ``BaseAuthManager`` interface has been
removed. Core will no longer call this method and their
+ provider counterpart implementation will be marked as deprecated.
+ Permissions for backfill operations are now checked against the
``DagAccessEntity.Run`` permission using the existing
+ ``requires_access_dag`` decorator. In other words, if a user has permission
to run a DAG, they can perform backfill operations on it.
+
+ Please update your security policies to ensure that users who need to
perform backfill operations have the appropriate ``DagAccessEntity.Run``
permissions. (Users
+ having the Backfill permissions without having the DagRun ones will no
longer be able to perform backfill operations without any update)
+
+
+Features
+^^^^^^^^
+
+- Enable FIPS Support by making Python LTO configurable via ``PYTHON_LTO``
build argument (#58337)
+- Support for task queue-based Trigger assignment to specific Triggerer hosts
via the new ``--queues`` CLI option for the ``trigger`` command. (#59239)
+
+
+Improvements
+^^^^^^^^^^^^
+
+- The ``PythonOperator`` parameter ``python_callable`` now also supports async
callables in Airflow 3.2, allowing users to run async def functions without
manually managing an event loop. (#60268)
+
+
+Bug Fixes
+^^^^^^^^^
+
+- Always mask sensitive configuration values in public config APIs and treat
the deprecated ``non-sensitive-only`` value as ``True``. (#59880)
+- Pool names with invalid characters for stats reporting are now automatically
normalized (invalid characters replaced with underscores) when emitting
metrics, preventing ``InvalidStatsNameException``. A warning is logged when
normalization occurs, suggesting the pool be renamed. (#59938)
+
+
Airflow 3.1.7 (2026-02-04)
--------------------------
diff --git a/airflow-core/newsfragments/54505.significant.rst
b/airflow-core/newsfragments/54505.significant.rst
deleted file mode 100644
index 3289308fa0f..00000000000
--- a/airflow-core/newsfragments/54505.significant.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-Move task-level exception imports into the Task SDK
-
-Airflow now sources task-facing exceptions (``AirflowSkipException``,
``TaskDeferred``, etc.) from
-``airflow.sdk.exceptions``. ``airflow.exceptions`` still exposes the same
exceptions, but they are
-proxies that emit ``DeprecatedImportWarning`` so Dag authors can migrate
before the shim is removed.
-
-**What changed:**
-
-- Runtime code now consistently raises the SDK versions of task-level
exceptions.
-- The Task SDK redefines these classes so workers no longer depend on
``airflow-core`` at runtime.
-- ``airflow.providers.common.compat.sdk`` centralizes compatibility imports
for providers.
-
-**Behaviour changes:**
-
-- Sensors and other helpers that validate user input now raise ``ValueError``
(instead of
- ``AirflowException``) when ``poke_interval``/ ``timeout`` arguments are
invalid.
-- Importing deprecated exception names from ``airflow.exceptions`` logs a
warning directing users to
- the SDK import path.
-
-**Exceptions now provided by ``airflow.sdk.exceptions``:**
-
-- ``AirflowException`` and ``AirflowNotFoundException``
-- ``AirflowRescheduleException`` and ``AirflowSensorTimeout``
-- ``AirflowSkipException``, ``AirflowFailException``, ``AirflowTaskTimeout``,
``AirflowTaskTerminated``
-- ``TaskDeferred``, ``TaskDeferralTimeout``, ``TaskDeferralError``
-- ``DagRunTriggerException`` and ``DownstreamTasksSkipped``
-- ``AirflowDagCycleException`` and
``AirflowInactiveAssetInInletOrOutletException``
-- ``ParamValidationError``, ``DuplicateTaskIdFound``,
``TaskAlreadyInTaskGroup``, ``TaskNotFound``, ``XComNotFound``
-- ``AirflowOptionalProviderFeatureException``
-
-**Backward compatibility:**
-
-- Existing Dags/operators that still import from ``airflow.exceptions``
continue to work, though
- they log warnings.
-- Providers can rely on ``airflow.providers.common.compat.sdk`` to keep one
import path that works
- across supported Airflow versions.
-
-**Migration:**
-
-- Update custom operators, sensors, and extensions to import exception classes
from
- ``airflow.sdk.exceptions`` (or from the provider compat shim).
-- Adjust custom validation code to expect ``ValueError`` for invalid sensor
arguments if it
- previously caught ``AirflowException``.
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [ ] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [x] Code interface changes
-
-* Migration rules needed
-
- * Import task-level exceptions such as ``AirflowSkipException``,
``TaskDeferred``,
- ``AirflowFailException``, etc. from ``airflow.sdk.exceptions`` instead of
``airflow.exceptions``.
- * Update custom sensors/operators that validated arguments by catching
``AirflowException`` to
- expect ``ValueError`` for invalid ``poke_interval`` / ``timeout`` inputs.
diff --git a/airflow-core/newsfragments/56866.significant.rst
b/airflow-core/newsfragments/56866.significant.rst
deleted file mode 100644
index ac3806334a5..00000000000
--- a/airflow-core/newsfragments/56866.significant.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-Support numeric multiplier values for retry_exponential_backoff parameter
-
-The ``retry_exponential_backoff`` parameter now accepts numeric values to
specify custom exponential backoff multipliers for task retries. Previously,
this parameter only accepted boolean values (``True`` or ``False``), with
``True`` using a hardcoded multiplier of ``2.0``.
-
-**New behavior:**
-
-- Numeric values (e.g., ``2.0``, ``3.5``) directly specify the exponential
backoff multiplier
-- ``retry_exponential_backoff=2.0`` doubles the delay between each retry
attempt
-- ``retry_exponential_backoff=0`` or ``False`` disables exponential backoff
(uses fixed ``retry_delay``)
-
-**Backwards compatibility:**
-
-Existing DAGs using boolean values continue to work:
-
-- ``retry_exponential_backoff=True`` → converted to ``2.0`` (maintains
original behavior)
-- ``retry_exponential_backoff=False`` → converted to ``0.0`` (no exponential
backoff)
-
-**API changes:**
-
-The REST API schema for ``retry_exponential_backoff`` has changed from ``type:
boolean`` to ``type: number``. API clients must use numeric values (boolean
values will be rejected).
-
-**Migration:**
-
-While boolean values in Python DAGs are automatically converted for backwards
compatibility, we recommend updating to explicit numeric values for clarity:
-
-- Change ``retry_exponential_backoff=True`` → ``retry_exponential_backoff=2.0``
-- Change ``retry_exponential_backoff=False`` → ``retry_exponential_backoff=0``
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [x] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
diff --git a/airflow-core/newsfragments/57069.significant.rst
b/airflow-core/newsfragments/57069.significant.rst
deleted file mode 100644
index a4d1c22bb7a..00000000000
--- a/airflow-core/newsfragments/57069.significant.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-Git provider: Remove '.git' folder from versions in GitDagBundle
-
-A new option(``prune_dotgit_folder``) has been added to the GitDagBundle to
remove ``.git`` from
-versioned bundles by default to reduce disk usage; set
prune_dotgit_folder=False to keep
-repo metadata in the dag bundle's versions folders.
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [ ] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
diff --git a/airflow-core/newsfragments/58337.feature.rst
b/airflow-core/newsfragments/58337.feature.rst
deleted file mode 100644
index e2720735819..00000000000
--- a/airflow-core/newsfragments/58337.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Enable FIPS Support by making Python LTO configurable via ``PYTHON_LTO`` build
argument
diff --git a/airflow-core/newsfragments/58524.significant.rst
b/airflow-core/newsfragments/58524.significant.rst
deleted file mode 100644
index ef94f296dcf..00000000000
--- a/airflow-core/newsfragments/58524.significant.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-FastAPI dependency is updated and lower bound set to ``0.121.0``
-
-Airflow now requires FastAPI ``>=0.121.0`` and removes the previous upper
-constraint. This aligns with FastAPI's new dependency lifecycle scopes
-(e.g. request/function) that change how dependencies with ``yield`` are
-exited.
-See `FastAPI PR #14262 <https://github.com/fastapi/fastapi/pull/14262>`_.
diff --git a/airflow-core/newsfragments/58992.significant.rst
b/airflow-core/newsfragments/58992.significant.rst
deleted file mode 100644
index 22eb8fe6d8a..00000000000
--- a/airflow-core/newsfragments/58992.significant.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-Move serialization/deserialization (serde) logic into Task SDK
-
-Airflow now sources serde logic from ``airflow.sdk.serde`` instead of
-``airflow.serialization.serde``. Serializer modules have moved from
``airflow.serialization.serializers.*``
-to ``airflow.sdk.serde.serializers.*``. The old import paths still work but
emit ``DeprecatedImportWarning``
-to guide migration. The backward compatibility layer will be removed in
Airflow 4.
-
-**What changed:**
-
-- Serialization/deserialization code moved from ``airflow-core`` to
``task-sdk`` package
-- Serializer modules moved from ``airflow.serialization.serializers.*`` to
``airflow.sdk.serde.serializers.*``
-- New serializers should be added to ``airflow.sdk.serde.serializers.*``
namespace
-
-**Code interface changes:**
-
-- Import serializers from ``airflow.sdk.serde.serializers.*`` instead of
``airflow.serialization.serializers.*``
-- Import serialization functions from ``airflow.sdk.serde`` instead of
``airflow.serialization.serde``
-
-**Backward compatibility:**
-
-- Existing serializers importing from ``airflow.serialization.serializers.*``
continue to work with deprecation warnings
-- All existing serializers (builtin, datetime, pandas, numpy, etc.) are
available at the new location
-
-**Migration:**
-
-- **For existing custom serializers**: Update imports to use
``airflow.sdk.serde.serializers.*``
-- **For new serializers**: Add them to ``airflow.sdk.serde.serializers.*``
namespace (e.g., create
``task-sdk/src/airflow/sdk/serde/serializers/your_serializer.py``)
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [ ] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [x] Code interface changes
-
-* Migration rules needed
-
- * Import serializers from ``airflow.sdk.serde.serializers.*`` instead of
``airflow.serialization.serializers.*``
- * Add new custom serializers to ``airflow.sdk.serde.serializers.*`` namespace
diff --git a/airflow-core/newsfragments/59239.feature.rst
b/airflow-core/newsfragments/59239.feature.rst
deleted file mode 100644
index e4292a4b906..00000000000
--- a/airflow-core/newsfragments/59239.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Support for task queue-based Trigger assignment to specific Triggerer hosts
via the new ``--queues`` CLI option for the ``trigger`` command.
diff --git a/airflow-core/newsfragments/59780.significant.rst
b/airflow-core/newsfragments/59780.significant.rst
deleted file mode 100644
index fb989784a25..00000000000
--- a/airflow-core/newsfragments/59780.significant.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Methods removed from PriorityWeightStrategy and TaskInstance
-
-On (experimental) class ``PriorityWeightStrategy``, functions ``serialize()``
-and ``deserialize()`` were never used anywhere, and have been removed. They
-should not be relied on in user code.
-
-On class ``TaskInstance``, functions ``run()``, ``render_templates()``, and
-private members related to them have been removed. The class has been
-considered internal since 3.0, and should not be relied on in user code.
diff --git a/airflow-core/newsfragments/59785.significant.rst
b/airflow-core/newsfragments/59785.significant.rst
deleted file mode 100644
index f92ccbc0122..00000000000
--- a/airflow-core/newsfragments/59785.significant.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Modify the information returned by ``DagBag``
-
-**New behavior:**
-- ``DagBag`` now uses ``Path.relative_to`` for consistent cross-platform
behavior.
-- ``FileLoadStat`` now has two additional nullable fields: ``bundle_path`` and
``bundle_name``.
-
-**Backward compatibility:**
-``FileLoadStat`` will no longer produce paths beginning with ``/`` with the
meaning of "relative to the dags folder".
-This is a breaking change for any custom code that performs string-based path
manipulations relying on this behavior.
-Users are advised to update such code to use ``pathlib.Path``.
diff --git a/airflow-core/newsfragments/59835.significant.rst
b/airflow-core/newsfragments/59835.significant.rst
deleted file mode 100644
index 02b9d709a49..00000000000
--- a/airflow-core/newsfragments/59835.significant.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Methods removed from TaskInstance
-
-On class ``TaskInstance``, functions ``run()``, ``render_templates()``,
-``get_template_context()``, and private members related to them have been
-removed. The class has been considered internal since 3.0, and should not be
-relied on in user code.
diff --git a/airflow-core/newsfragments/59855.significant.rst
b/airflow-core/newsfragments/59855.significant.rst
deleted file mode 100644
index 94507ca9e3c..00000000000
--- a/airflow-core/newsfragments/59855.significant.rst
+++ /dev/null
@@ -1 +0,0 @@
-Removed the redundant ``--conn-id`` option from the ``airflow connections
list`` CLI command. Use ``airflow connections get`` instead.
diff --git a/airflow-core/newsfragments/59880.bugfix.rst
b/airflow-core/newsfragments/59880.bugfix.rst
deleted file mode 100644
index e1c35a9d640..00000000000
--- a/airflow-core/newsfragments/59880.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Always mask sensitive configuration values in public config APIs and treat the
deprecated ``non-sensitive-only`` value as ``True``.
diff --git a/airflow-core/newsfragments/59938.bugfix.rst
b/airflow-core/newsfragments/59938.bugfix.rst
deleted file mode 100644
index db9ecabfc0c..00000000000
--- a/airflow-core/newsfragments/59938.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Pool names with invalid characters for stats reporting are now automatically
normalized (invalid characters replaced with underscores) when emitting
metrics, preventing ``InvalidStatsNameException``. A warning is logged when
normalization occurs, suggesting the pool be renamed.
diff --git a/airflow-core/newsfragments/60268.improvement.rst
b/airflow-core/newsfragments/60268.improvement.rst
deleted file mode 100644
index 8c7e92b8f0d..00000000000
--- a/airflow-core/newsfragments/60268.improvement.rst
+++ /dev/null
@@ -1 +0,0 @@
-The ``PythonOperator`` parameter ``python_callable`` now also supports async
callables in Airflow 3.2, allowing users to run async def functions without
manually managing an event loop.
diff --git a/airflow-core/newsfragments/60619.significant.rst
b/airflow-core/newsfragments/60619.significant.rst
deleted file mode 100644
index 2d975f624bd..00000000000
--- a/airflow-core/newsfragments/60619.significant.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-Add operator-level ``render_template_as_native_obj`` override
-
-Operators can now override the DAG-level ``render_template_as_native_obj``
setting,
-enabling fine-grained control over whether templates are rendered as native
Python
-types or strings on a per-task basis. Set
``render_template_as_native_obj=True`` or
-``False`` on any operator to override the DAG setting, or leave as ``None``
(default)
-to inherit from the DAG.
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [ ] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
-
-* Migration rules needed
-
- * None - this is a new optional feature with backwards-compatible defaults
diff --git a/airflow-core/newsfragments/60803.significant.rst
b/airflow-core/newsfragments/60803.significant.rst
deleted file mode 100644
index 1054258ad38..00000000000
--- a/airflow-core/newsfragments/60803.significant.rst
+++ /dev/null
@@ -1 +0,0 @@
-Move ``upstream_map_indexes`` computation from API server to Task SDK,
reducing memory usage on task start by eliminating ``SerializedDAG`` loads.
diff --git a/airflow-core/newsfragments/60921.significant.rst
b/airflow-core/newsfragments/60921.significant.rst
deleted file mode 100644
index c97bbcdf97a..00000000000
--- a/airflow-core/newsfragments/60921.significant.rst
+++ /dev/null
@@ -1,51 +0,0 @@
-Add gunicorn support for API server with zero-downtime worker recycling
-
-The API server now supports gunicorn as an alternative server with rolling
worker restarts
-to prevent memory accumulation in long-running processes.
-
-**Key Benefits:**
-
-* **Rolling worker restarts**: New workers spawn and pass health checks before
old workers
- are killed, ensuring zero downtime during worker recycling.
-
-* **Memory sharing**: Gunicorn uses preload + fork, so workers share memory via
- copy-on-write. This significantly reduces total memory usage compared to
uvicorn's
- multiprocess mode where each worker loads everything independently.
-
-* **Correct FIFO signal handling**: Gunicorn's SIGTTOU kills the oldest worker
(FIFO),
- not the newest (LIFO), which is correct for rolling restarts.
-
-**Configuration:**
-
-.. code-block:: ini
-
- [api]
- # Use gunicorn instead of uvicorn
- server_type = gunicorn
-
- # Enable rolling worker restarts every 12 hours
- worker_refresh_interval = 43200
-
- # Restart workers one at a time
- worker_refresh_batch_size = 1
-
-Or via environment variables:
-
-.. code-block:: bash
-
- export AIRFLOW__API__SERVER_TYPE=gunicorn
- export AIRFLOW__API__WORKER_REFRESH_INTERVAL=43200
-
-**Requirements:**
-
-Install the gunicorn extra: ``pip install 'apache-airflow-core[gunicorn]'``
-
-**Note on uvicorn (default):**
-
-The default uvicorn mode does not support rolling worker restarts because:
-
-1. With workers=1, there is no master process to send signals to
-2. uvicorn's SIGTTOU kills the newest worker (LIFO), defeating rolling restart
purposes
-3. Each uvicorn worker loads everything independently with no memory sharing
-
-If you need worker recycling or memory-efficient multi-worker deployment, use
gunicorn.
diff --git a/airflow-core/newsfragments/60951.significant.rst
b/airflow-core/newsfragments/60951.significant.rst
deleted file mode 100644
index 1f203b34a62..00000000000
--- a/airflow-core/newsfragments/60951.significant.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Improved performance of rendered task instance fields cleanup for DAGs with
many mapped tasks (~42x faster).
-
-The config ``max_num_rendered_ti_fields_per_task`` is renamed to
``num_dag_runs_to_retain_rendered_fields``
-(old name still works with deprecation warning).
-
-Retention is now based on the N most recent dag runs rather than N most recent
task executions,
-which may result in fewer records retained for conditional/sparse tasks.
diff --git a/airflow-core/newsfragments/61400.significant.rst
b/airflow-core/newsfragments/61400.significant.rst
deleted file mode 100644
index 7bdee4390a7..00000000000
--- a/airflow-core/newsfragments/61400.significant.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-AuthManager Backfill permissions are now handled by the
``requires_access_dag`` on the ``DagAccessEntity.Run``
-
-``is_authorized_backfill`` of the ``BaseAuthManager`` interface has been
removed. Core will no longer call this method and their
-provider counterpart implementation will be marked as deprecated.
-Permissions for backfill operations are now checked against the
``DagAccessEntity.Run`` permission using the existing
-``requires_access_dag`` decorator. In other words, if a user has permission to
run a DAG, they can perform backfill operations on it.
-
-Please update your security policies to ensure that users who need to perform
backfill operations have the appropriate ``DagAccessEntity.Run`` permissions.
(Users
-having the Backfill permissions without having the DagRun ones will no longer
be able to perform backfill operations without any update)
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [x] API changes
- * [ ] CLI changes
- * [x] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
diff --git a/reproducible_build.yaml b/reproducible_build.yaml
index 37f32a0bb8f..a40fbcd1b4b 100644
--- a/reproducible_build.yaml
+++ b/reproducible_build.yaml
@@ -1,2 +1,2 @@
-release-notes-hash: b70d35a9f25bf4c0d4a8e16361becc4b
-source-date-epoch: 1771642162
+release-notes-hash: 2a829d64295e423a1b0c8f546addbb6a
+source-date-epoch: 1772545530