This is an automated email from the ASF dual-hosted git repository.

vatsrahul1001 pushed a commit to branch changes-3.4.0rc1
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit d1c2fdd0e32989e8cc0398be15b9d9bf52481aae
Author: Rahul Vats <[email protected]>
AuthorDate: Mon Oct 26 18:38:54 2026 +0530

    Add release notes for 3.4.0rc1
---
 RELEASE_NOTES.rst                                | 100 +++++++++++++++++++++++
 airflow-core/newsfragments/74896.bugfix.rst      |   1 -
 airflow-core/newsfragments/75414.significant.rst |  20 -----
 docs/spelling_wordlist.txt                       |   2 +
 reproducible_build.yaml                          |   4 +-
 5 files changed, 104 insertions(+), 23 deletions(-)

diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index fe8d90f0f25..b4a9b5e0cb0 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -30,6 +30,28 @@ Airflow 3.4.0 (2026-11-02)
 Significant Changes
 ^^^^^^^^^^^^^^^^^^^
 
+``airflow.utils.email`` is deprecated in favor of the SMTP provider (#75414)
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+The functions in ``airflow.utils.email`` (``send_email``, ``send_email_smtp``, 
``send_mime_email``,
+``build_mime_message`` and ``get_email_address_list``) now live in
+``airflow.providers.smtp.utils.emailer``. The old names still work and raise a 
``DeprecatedImportWarning``.
+Airflow now requires ``apache-airflow-providers-smtp>=3.2.0``.
+
+Keep ``[email] email_backend`` set to ``airflow.utils.email.send_email_smtp``. 
Airflow treats that value as
+"send task emails with ``SmtpNotifier``", which reads all SMTP settings from 
the Connection. Changing it to
+the provider path sends through the ``[smtp]`` settings instead.
+
+If you call these functions directly:
+
+* The SMTP Connection is looked up with ``BaseHook.get_connection``. A script 
that runs outside Airflow's
+  processes needs the Connection in an environment variable or a secrets 
backend, not only in the metadata
+  database.
+* Settings are read through the Task SDK configuration, so values changed at 
runtime with
+  ``airflow.configuration.conf.set()`` are not seen. ``airflow.cfg`` and 
environment variables work as before.
+* Tests that patch ``airflow.utils.email.send_mime_email`` no longer intercept 
the call made by
+  ``send_email_smtp``. Patch 
``airflow.providers.smtp.utils.emailer.send_mime_email`` instead.
+
 Task Loops (#73005, #74222, #74274, #74275)
 """""""""""""""""""""""""""""""""""""""""""
 
@@ -489,6 +511,14 @@ and loop iterations regenerated by clearing.
 New Features
 ^^^^^^^^^^^^
 
+- Add asset ID filtering to ``airflow db clean`` (#75581)
+- UI: Show task group states as stacked cards in the Grid view (#75486)
+- Let plugins add their own actions to Dag, run and task instance rows (#75427)
+- UI: Show secondary states of mapped tasks in the Grid view (#75426)
+- Java SDK: Let a native Java Dag set one queue for all its tasks (#75402)
+- TS SDK: Reject blank edge labels and label task edges into groups (#75385)
+- Expose task instance loop pass and expansion size to listeners (#75309)
+- UI: Add time range filtering to the Gantt view (#75261)
 - Java SDK: Add edge labels to native Dags (#75173)
 - Add a Duplicate action to the Connections list (#75143)
 - Make the scheduler Dag cache size and TTL configurable (#75087)
@@ -573,6 +603,44 @@ New Features
 Bug Fixes
 ^^^^^^^^^
 
+- Let listeners see the end date of a skipped task instance (#75685)
+- Reset Dag autoregistration state when a Python Dag file fails to load 
(#75648)
+- Fix serialization of datetimes with a fixed UTC offset (#75647)
+- Clear retry policy state when a task instance is cleared (#75646)
+- Refuse Human-in-the-Loop responses once the task stopped waiting (#75645)
+- TS SDK: Reject a blank queue in Dag and task specs (#75605)
+- TS SDK: Fix "Dynamic require" error for CommonJS packages in 
``airflow-ts-pack`` (#75603)
+- UI: Fix visual and console-error bugs in the Dag list and details pages 
(#75593)
+- Fix scheduler crash when retrying a task that timed out or was killed 
externally (#75582)
+- Go SDK: Stop log attributes from displacing standard log fields (#75564)
+- Decide the ``min_one_success`` trigger rule per index in mapped task groups 
(#75511)
+- Fix task loop iteration log links pointing to a nonexistent page (#75494)
+- Go SDK: Fail a task whose return-value XCom push fails (#75476)
+- Run the Kerberos ticket renewer without metadata database checks (#75467)
+- Guard ``register_at_fork`` in shared stats for Windows compatibility (#75464)
+- Redact secrets written through ``RedactedIO.writelines()`` (#75463)
+- Fix the ``dag_processing.last_duration`` timing metric reporting the wrong 
value (#75459)
+- Keep the token cookie set by a route in ``JWTRefreshMiddleware`` (#75454)
+- Run team tasks on the team executor when named by class or path (#75436)
+- Speed up API server requests by keeping JWT checks off the event loop 
(#75409)
+- Read a team's running task logs through the team's executor (#75408)
+- UI: Keep the multiselect filter pill's focus ring visible (#75398)
+- Hide assets the caller may not read from the UI dependencies graph (#75390)
+- Fix empty audit log ``dag_id`` for ``DAG.cli()`` subcommands (#75388)
+- Fix duplicate pending Dag runs for the same asset partition key (#75382)
+- Return a 5xx response on a database deadlock when updating task state 
(#75368)
+- Show source code lines in task log tracebacks (#75355)
+- UI: Show errors when the task clear confirmation check fails (#75331)
+- Fix ``tasks clear --task-regex`` matching as a plain substring (#75325)
+- Fix task instance filtering for null start dates (#75324)
+- UI: Render Arabic durations with the correct plural form (#75323)
+- Reject non-positive ``max_active_runs`` when creating a backfill (#75320)
+- UI: Reveal selected Dag folders when names contain pipes (#75319)
+- Skip scheduling tasks when their Dag cannot be deserialized (#75263)
+- Reject blank pool names and Variable keys in the REST API (#75258)
+- Fix task clear and callback bundles after code-only Dag changes (#75256)
+- UI: Show a label instead of a broken link for hidden assets (#75250)
+- Fix Dag run filtering for null start dates (#75233)
 - Fix log template sync failing when a custom SQL Alchemy schema is configured 
(#75194)
 - Java SDK: Send log timestamps in UTC (#75186)
 - Fix 500 when ordering the Dag list by state or start_date (#75148)
@@ -626,6 +694,7 @@ Bug Fixes
 - API: Translate domain ValueError in Task State Store route (#73753)
 - Filter jobs API ``is_alive`` in SQL so pagination stays correct (#73684)
 - Fix boolean value of start date used in url start_date_gte filter. (#73676)
+- Stop a commented-out ``executable_resumable`` from marking a module durable 
(#73607)
 - Fix square corner on fully filled dashboard History bars (#73543)
 - Fix airflow plugins and dags pause printing prose with --output json (#73270)
 - Fix 500 from POST ``/auth/token`` on a request body it cannot parse (#73258)
@@ -685,6 +754,23 @@ Bug Fixes
 Miscellaneous
 ^^^^^^^^^^^^^
 
+- Add metrics for task and asset state store access (#75729)
+- Add ``dag_id`` and ``task_id`` tags to the resumable_job metrics (#75721)
+- Require cadwyn 8.1 to allow FastAPI 0.137+ (#75689)
+- Optimize the scheduler's asset orphanage check with an ``EXISTS`` subquery 
instead of a fan-out join (#75644)
+- Report language SDK runtime launch failures in the task log (#75561)
+- UI: Remove the info tooltip from the Dag version comparison (#75535)
+- UI: Make the Dags sidebar button a link and move Dag Runs and Task Instances 
under Browse (#75517)
+- UI: Show the filtered task count in the Dag Tasks tab heading (#75490)
+- Clarify the backfill reprocessing option labels in the CLI and REST API 
(#75465)
+- TS SDK: Take the task state store retention in seconds (#75460)
+- UI: Show the Dag version diff occurrence count on the path (#75441)
+- Require ``httpx2`` instead of ``httpx`` in airflow-core (#75424)
+- Go SDK: Write the edge label text before the task (#75365)
+- UI: Clean up the Dag Version tab (#75318)
+- Warn about overly large task state values from language SDK tasks (#75299)
+- Number task loop iterations from one instead of zero (#75260)
+- UI: Preload base React plugin bundles with the page (#75259)
 - TS SDK: Collect ``dag_dependencies`` in the tasks pass (#75191)
 - Mask CLI secrets in the audit log by parsed argument, not argv position 
(#75144)
 - UI: Replace stacked Dag header banners with inline status (#75125)
@@ -881,6 +967,20 @@ Miscellaneous
 Doc Only Changes
 ^^^^^^^^^^^^^^^^
 
+- Go SDK: Correct the documented install command that broke the first bundle 
build (#75594)
+- Add missing German Dag trigger translations (#75568)
+- Complete German UI translations (#75567)
+- Fix deferral paths in the task lifecycle diagram (#75515)
+- Limit the CLI reference's page contents to top-level commands (#75501)
+- Add missing zh-TW translations for Dag version path tooltips (#75484)
+- Add a consolidated language SDK compatibility matrix (#75482)
+- Fix upgrade guide sections showing as separate pages in the docs sidebar 
(#75470)
+- Java SDK: Rewrite the user docs around Dag definition (#75439)
+- Close German translation gaps (#75389)
+- Go SDK: Rewrite the user docs around Dag definition (#75383)
+- Add missing Taiwanese Mandarin translations for Dag start and end date 
trigger messages (#75372)
+- TS SDK: Align the README with the authoring guide (#75300)
+- Add missing Taiwanese Mandarin UI translations (#75278)
 - Complete Hindi (hi) UI translations (#75183)
 - Document that the HITL operator body is rendered as Markdown (#75136)
 - Fix missing and incorrect endpoints in the API permission reference (#75099)
diff --git a/airflow-core/newsfragments/74896.bugfix.rst 
b/airflow-core/newsfragments/74896.bugfix.rst
deleted file mode 100644
index 0ea1420f44e..00000000000
--- a/airflow-core/newsfragments/74896.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-The REST API now rejects a pool name or variable key that is empty or only 
whitespace. ``POST /api/v2/pools`` and ``POST /api/v2/variables`` return 422 
for such a value, and ``PATCH /api/v2/pools/{pool_name}`` returns 400 instead 
of renaming the pool to the empty string. Pools and variables that already have 
a blank name can still be read and deleted.
diff --git a/airflow-core/newsfragments/75414.significant.rst 
b/airflow-core/newsfragments/75414.significant.rst
deleted file mode 100644
index 8feb51b2682..00000000000
--- a/airflow-core/newsfragments/75414.significant.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-``airflow.utils.email`` is deprecated in favor of the SMTP provider
-
-The functions in ``airflow.utils.email`` (``send_email``, ``send_email_smtp``, 
``send_mime_email``,
-``build_mime_message`` and ``get_email_address_list``) now live in
-``airflow.providers.smtp.utils.emailer``. The old names still work and raise a 
``DeprecatedImportWarning``.
-Airflow now requires ``apache-airflow-providers-smtp>=3.2.0``.
-
-Keep ``[email] email_backend`` set to ``airflow.utils.email.send_email_smtp``. 
Airflow treats that value as
-"send task emails with ``SmtpNotifier``", which reads all SMTP settings from 
the Connection. Changing it to
-the provider path sends through the ``[smtp]`` settings instead.
-
-If you call these functions directly:
-
-* The SMTP Connection is looked up with ``BaseHook.get_connection``. A script 
that runs outside Airflow's
-  processes needs the Connection in an environment variable or a secrets 
backend, not only in the metadata
-  database.
-* Settings are read through the Task SDK configuration, so values changed at 
runtime with
-  ``airflow.configuration.conf.set()`` are not seen. ``airflow.cfg`` and 
environment variables work as before.
-* Tests that patch ``airflow.utils.email.send_mime_email`` no longer intercept 
the call made by
-  ``send_email_smtp``. Patch 
``airflow.providers.smtp.utils.emailer.send_mime_email`` instead.
diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index 8df92f5f9ed..e66f9466c55 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -138,6 +138,7 @@ autocomplete
 autodetect
 autogenerated
 automl
+autoregistration
 Autoscale
 autoscale
 autoscaled
@@ -1141,6 +1142,7 @@ mTLS
 multi-cloud
 multimodal
 multiprocess
+multiselect
 mutex
 mv
 mwaa
diff --git a/reproducible_build.yaml b/reproducible_build.yaml
index 9aaa1727bab..3889c951f39 100644
--- a/reproducible_build.yaml
+++ b/reproducible_build.yaml
@@ -1,2 +1,2 @@
-release-notes-hash: 20fa29512a9fcb66caeeb13a65a38fe2
-source-date-epoch: 1792517881
+release-notes-hash: 581265b7dbb2f8ffca89b968b5f1f1f6
+source-date-epoch: 1793020461

Reply via email to