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 7f9352d865034698d1ccc0976aa4e04439ebc25d Author: Rahul Vats <[email protected]> AuthorDate: Mon Oct 26 18:38:54 2026 +0530 Add release notes for 3.4.0rc1 --- RELEASE_NOTES.rst | 274 ++++++++++++++++------- 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, 193 insertions(+), 108 deletions(-) diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index fe8d90f0f25..83c4d667c0b 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -30,7 +30,7 @@ Airflow 3.4.0 (2026-11-02) Significant Changes ^^^^^^^^^^^^^^^^^^^ -Task Loops (#73005, #74222, #74274, #74275) +Task Loops (#73005, #74222, #74275, #74345) """"""""""""""""""""""""""""""""""""""""""" Airflow 3.4.0 introduces Task Loops (AIP-111): a decorated task group can be repeated a number of @@ -486,20 +486,45 @@ Custom Task State Store backends will likewise need to include ``scope.region_id`` in their storage key to support mapped tasks inside a loop and loop iterations regenerated by clearing. +``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. + New Features ^^^^^^^^^^^^ -- 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) -- TS SDK: Add edge labels with label() (#75031) +- UI: Show task group states as stacked cards in the Grid view (#75442) +- Let plugins add their own actions to Dag, run and task instance rows (#75427) +- TS SDK: Reject blank edge labels and label task edges into groups (#75190) +- Expose task instance loop pass and expansion size to listeners (#75132) +- Add a Duplicate action to the Connections list (#75110) - Let retry policies reschedule a task without using a retry (#74993) - Let plugin views be scoped to specific Assets (#74992) -- UI: Add Select Recent Configurations dropdown to Trigger Dag form (#74977) -- Add support for forwarding CeleryExecutor task logs to stdout (#74976) -- Add deadline callback log visibility to the Dag Run view in UI (#74955) -- Allow loop gates to add human-readable decisions (#74932) - Add Map Index search to dag breadcrumb (#74893) +- UI: Show secondary states of mapped tasks in the Grid view (#74883) +- Allow loop gates to add human-readable decisions (#74806) +- Java SDK: Let a native Java Dag set one queue for all its tasks (#74538) +- Java SDK: Add edge labels to native Dags (#74523) +- Add asset ID filtering to ``airflow db clean`` (#74498) +- TS SDK: Add edge labels with label() (#74494) - Add dag version lookup on get task endpoint (#74365) - Add Logical Date column to the Runs table (#74340) - UI: Add a Dag Run ID column to the Task Instances list (#74316) @@ -508,8 +533,10 @@ New Features - Add URL param support to calendar view (#73237) (#73762) - UI: Add team filter to Human-in-the-loop task instances listing (#73726) - add bundle_name tags to missing dag processor metrics (#73717) +- Add deadline callback log visibility to the Dag Run view in UI (#73580) - Add fab-oauth meta-package extra (#73565) - Allow a Job to be associated with several teams (#73561) +- UI: Add time range filtering to the Gantt view (#73555) - Add ``ChainRetryPolicy`` to compose retry policies in order (#73508) - Add task state store API to the Java SDK (#73464) - UI: Add a default preference for expanded task groups (#73429) @@ -531,6 +558,7 @@ New Features - ``is_scheduled`` REST API parameter (#72029) - Allow Variable.get to reuse the caller's database session (#71968) - UI: Add team column and filter to the audit log (#71916) +- Make the scheduler Dag cache size and TTL configurable (#71816) - Support a regex for the API's CORS allowed origins (#71778) - CLI: Add --limit flag to airflow dags list-runs (#71729) - Add SSL cipher list option to the api server (#71645) @@ -542,6 +570,7 @@ New Features - Add a user settings page for cross-page UI defaults (#70687) - Support a Unix Domain Socket for the metrics clients (#70517) - UI: Add a time-window scope to the Dags list run state filter (#70470) +- UI: Add Select Recent Configurations dropdown to Trigger Dag form (#70413) - UI: Add a slowest tasks chart to the Dag Overview (#70305) - Add task log message when the Execution API is unreachable (#70290) - UI: Add team column and filter to Dag Run and Task Instance lists (#70241) @@ -552,6 +581,7 @@ New Features - Add serialized Dag version diff engine (#69864) - UI: Add timetable type filter to Dag list (#69728) - Allow embedding a Dag run in an external trace via run conf (#69633) +- Add support for forwarding CeleryExecutor task logs to stdout (#69597) - Add deadlines to Calendar Tab (#69559) - Add team_name attribute to plugins for multi-team (#69502) - Add exact-match uri filter to GET /assets endpoint (#69489) @@ -573,60 +603,88 @@ New Features Bug Fixes ^^^^^^^^^ -- 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) -- Keep Dag folder selection distinct across bundle names (#75146) -- Keep parent Dag folders collapsed after one click (#75145) -- Fix ``Trigger.clean_unused`` rejecting a caller-provided session (#75122) -- Scope asset Dag and task references to readable Dags (#75107) -- Reject reserved serialization keys in Dag run conf (#75105) +- Let listeners see the end date of a skipped task instance (#75685) +- Refuse Human-in-the-Loop responses once the task stopped waiting (#75645) +- TS SDK: Reject a blank queue in Dag and task specs (#75573) +- Fix scheduler crash when retrying a task that timed out or was killed externally (#75472) +- Fix task loop iteration log links pointing to a nonexistent page (#75458) +- Go SDK: Fail a task whose return-value XCom push fails (#75443) +- UI: Fix visual and console-error bugs in the Dag list and details pages (#75418) +- Decide the ``min_one_success`` trigger rule per index in mapped task groups (#75417) +- Return a 5xx response on a database deadlock when updating task state (#75368) +- Run team tasks on the team executor when named by class or path (#75362) +- Fix task instance filtering for null start dates (#75321) +- UI: Keep the multiselect filter pill's focus ring visible (#75307) +- UI: Show errors when the task clear confirmation check fails (#75269) +- Skip scheduling tasks when their Dag cannot be deserialized (#75263) +- Read a team's running task logs through the team's executor (#75255) +- Keep the token cookie set by a route in ``JWTRefreshMiddleware`` (#75217) +- UI: Reveal selected Dag folders when names contain pipes (#75196) +- UI: Show a label instead of a broken link for hidden assets (#75178) +- Show source code lines in task log tracebacks (#75100) +- Fix ``Trigger.clean_unused`` rejecting a caller-provided session (#75096) - Reserve graph header width for loop-group iteration badge (#75095) -- Scope asset-wide queued event deletion to editable Dags (#75089) -- Refuse a HITL response for a request the task has since replaced (#74982) -- Stop the secrets backend lookup from importing the task runner outside tasks (#74980) -- Fix ``map_index_template`` failing for numeric-looking labels with ``render_template_as_native_obj`` (#74978) -- Do not abort Dag run creation when a deadline alert fails (#74975) -- Fix ORM models failing to configure in processes that skip database setup (#74971) -- Fix Lang-SDK decoder typing for pydantic 2.14 ``TypeForm`` signature (#74970) -- Fix CLI --bundle-name finding no Dags in Git bundles (#74969) -- Fix clearing with upstream and downstream selecting unrelated tasks (#74968) -- Make ``ZIP_REGEX`` case-insensitive to match .ZIP archives (#74967) -- Fix /ui/dags recent-runs query degradation on large, skewed dag_run tables (#74966) -- Fix missing ``task.queued_duration`` metric in Airflow 3 (#74965) -- UI: Keep JSON text in string HITL params instead of showing [object Object] (#74961) -- UI: Fix the Dags list showing an error page and reduce unnecessary re-renders (#74956) -- Fix Dag list run badges and counters not refreshing after completion (#74954) -- Drain result_queue before dispatch in LocalExecutor to prevent runtime dispatch deadlock (#74949) -- Clear language SDK task XComs in the coordinator when a try starts (#74936) -- Fix dynamically mapped tasks never running on scheduled Dag runs (#74918) -- Match camelCase keys against sensitive field names in masker (#74897) -- Keep queued connection tests from overwriting newer connections (#74895) -- Fix Dag version diff max-changes border, limit wording and duplicate count (#74886) -- Do not warn about bare postgresql:// metadata DB URLs (#74884) +- Keep Dag folder selection distinct across bundle names (#75080) +- Keep parent Dag folders collapsed after one click (#75079) +- Reject non-positive ``max_active_runs`` when creating a backfill (#75071) +- TS SDK: Fix "Dynamic require" error for CommonJS packages in ``airflow-ts-pack`` (#75067) +- Fix 500 when ordering the Dag list by state or start_date (#75025) +- Run the Kerberos ticket renewer without metadata database checks (#75000) +- Fix serialization of datetimes with a fixed UTC offset (#74922) +- Reset Dag autoregistration state when a Python Dag file fails to load (#74911) +- Reject blank pool names and Variable keys in the REST API (#74896) - Resolve a trigger's XCom requests as its deferred task instance (#74868) - Fix JWT token not refreshed when token expires mid-request (#74865) -- Java SDK: Reject byte arrays instead of letting the task hang (#74831) -- Go SDK: pack a bundle that registers no Dags at pack time (#74821) -- Report a Dag whose timetable fails to load as an import error (#74807) -- UI: Fix clearing a task instance doing nothing after Confirm (#74738) +- Do not warn about bare postgresql:// metadata DB URLs (#74863) +- Fix dynamically mapped tasks never running on scheduled Dag runs (#74861) +- Speed up API server requests by keeping JWT checks off the event loop (#74856) +- Keep ``.airflowignore`` rules when the Dags folder symlink is switched (#74853) +- Match camelCase keys against sensitive field names in masker (#74840) +- Scope asset-wide queued event deletion to editable Dags (#74839) +- Keep queued connection tests from overwriting newer connections (#74837) +- Scope asset Dag and task references to readable Dags (#74836) +- Reject reserved serialization keys in Dag run conf (#74834) +- Fix Dag version diff max-changes border, limit wording and duplicate count (#74818) +- Java SDK: Send log timestamps in UTC (#74783) +- Fix Dag list run badges and counters not refreshing after completion (#74734) +- UI: Fix clearing a task instance doing nothing after Confirm (#74725) +- Report a Dag whose timetable fails to load as an import error (#74709) +- UI: Keep JSON text in string HITL params instead of showing [object Object] (#74702) +- Refuse a HITL response for a request the task has since replaced (#74688) +- Fix ORM models failing to configure in processes that skip database setup (#74642) +- Stop the secrets backend lookup from importing the task runner outside tasks (#74641) +- Go SDK: pack a bundle that registers no Dags at pack time (#74637) +- Fix Lang-SDK decoder typing for pydantic 2.14 ``TypeForm`` signature (#74628) - Fix 400 and 500s on POST /connections/defaults in multi-team mode (#74615) +- Fix clearing with upstream and downstream selecting unrelated tasks (#74548) - Keep the scheduler running when a queued run's Dag fails to deserialize (#74499) +- UI: Fix the Dags list showing an error page and reduce unnecessary re-renders (#74426) - Fix plugin applies_to scoping (#74425) +- Fix /ui/dags recent-runs query degradation on large, skewed dag_run tables (#74401) - Fix XCom query in not_previously_skipped_dep to use xcom_entity (#74377) - Fix short-circuit in a mapped task group not skipping later tasks (#74283) +- Make ``ZIP_REGEX`` case-insensitive to match .ZIP archives (#74269) +- Clear language SDK task XComs in the coordinator when a try starts (#74221) +- Java SDK: Reject byte arrays instead of letting the task hang (#74218) - UI : Fix duplicate "From" label on DAG backfill filters (#74189) - Improve LocalExecutor bookkeeping: correctly add tasks to the ``running`` list (#74142) - UI: Fix XCom list crash when a value request fails (#74131) - Fix date range filter inputs committing on every keystroke (#74011) - Fix short-circuit not skipping already expanded mapped tasks (#73960) - Fix short-circuit inside a mapped task group not skipping downstream (#73959) +- Fix task clear and callback bundles after code-only Dag changes (#73915) - UI: Fix external plugin nav links not navigating on click (#73913) +- Clear retry policy state when a task instance is cleared (#73889) - Correctly shutdown async sessions on exit. (#73838) +- Go SDK: Stop log attributes from displacing standard log fields (#73820) - API: Translate domain ValueError in Task State Store route (#73753) - Filter jobs API ``is_alive`` in SQL so pagination stays correct (#73684) +- Guard ``register_at_fork`` in shared stats for Windows compatibility (#73680) - 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 empty audit log ``dag_id`` for ``DAG.cli()`` subcommands (#73379) +- Fix CLI --bundle-name finding no Dags in Git bundles (#73377) - 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) - Fix slow task-log scrolling by memoizing useLogGroups' visible-items index (#73252) @@ -637,26 +695,36 @@ Bug Fixes - Stop the scheduler creating Dag runs for paused partitioned-asset Dags (#73151) - Fix Dags staying blocked by max_active_runs until the next parse (#73032) - Fix airflow standalone announcing readiness before the API server is up (#73025) +- Hide assets the caller may not read from the UI dependencies graph (#73008) - Fix airflow teams list --output json printing prose when no teams exist (#72945) +- Fix ``tasks clear --task-regex`` matching as a plain substring (#72941) - Avoid a full asset table scan per request in simple auth manager (#72934) - Fix Dag callbacks dropped when bundle versioning is disabled (#72930) - Stop one malformed provider from breaking discovery for all providers (#72854) - Fix backfill DagRuns being permanently starved from scheduling (#72730) - Fix airflow db check reporting one fewer retry than it will make (#72708) - Fix airflow dags list --columns help showing wrong default columns (#72607) +- UI: Render Arabic durations with the correct plural form (#72604) - Fix XCom slice endpoint for crossed bounds (#72584) +- Fix the ``dag_processing.last_duration`` timing metric reporting the wrong value (#72553) - Stop emitting the legacy first_task_scheduling_delay metric twice (#72512) - Fix Dag metrics dropped when a tag contains invalid characters (#72364) - Fix misleading error for malformed version in airflow db downgrade (#72331) - Fix timedelta serde to accept int payloads (#72326) - Fix plugin registration returning early on duplicate names in Task SDK (#72253) +- Redact secrets written through ``RedactedIO.writelines()`` (#72063) +- Fix Dag run filtering for null start dates (#71654) +- Fix ``map_index_template`` failing for numeric-looking labels with ``render_template_as_native_obj`` (#71592) - Keep the MeterProvider configured via OTEL_CONFIG_FILE (#71529) - Fix Asset Event table titles showing a raw translation key (#71443) - Fix executor validation error referencing non-existent [core] executors (#71336) - Fix MySQL metadata database failing when only PyMySQL is installed (#71251) - Fix OpenSearch remote logging crash if port is empty (#71170) +- Fix duplicate pending Dag runs for the same asset partition key (#71074) - Fix /ui/assets picking a stale "last event" under concurrent asset writes (#71047) - Stop airflow config update from writing a backup during dry-run (#70979) +- Fix log template sync failing when a custom SQL Alchemy schema is configured (#70793) +- Drain result_queue before dispatch in LocalExecutor to prevent runtime dispatch deadlock (#70545) - Fix TypeError clearing a DAG run when a queued-at deadline interval is stored as JSON (#70370) - Fix manual runs getting a zero-length data interval across DST (#70089) - Use atomic upsert for asset run queue on MySQL to avoid deadlocks (#69977) @@ -671,8 +739,10 @@ Bug Fixes - Fix mapped task group XCom collapsing to a bare value for a single expansion (#69075) - Fix macOS SIGSEGV in triggerer and Dag processor via fork+exec (#69008) - Fix branch not skipping mapped tasks with custom XCom backend (#68954) +- Do not abort Dag run creation when a deadline alert fails (#68917) - Fix duplicate heartbeat-timeout task callbacks (#68008) - Drain result_queue in LocalExecutor to prevent process join deadlock (#67881) +- Fix missing ``task.queued_duration`` metric in Airflow 3 (#67592) - Fix CLI connection display reporting wrong is_extra_encrypted flag (#67561) - Fix remote processor injection happening before dictConfig runs in configure_logging (#66633) - Fix airflow db clean IntegrityError when a dag_version is referenced by a task_instance (#66350) @@ -685,43 +755,49 @@ Bug Fixes Miscellaneous ^^^^^^^^^^^^^ -- 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) -- Pass runtime values to example Dag shell commands through env (#75121) -- Read XCom without object reconstruction during dependency evaluation (#75117) -- Add the resume event to stored next_kwargs without decoding them (#75116) -- Mask XCom values in the audit log (#75113) -- Mask registered secrets at any nesting depth (#75112) -- Open the Dags menu from the Dags nav button instead of navigating (#75109) -- Scope upstream asset events of a Dag run to assets and Dags the caller may read (#75108) -- Mask provider-declared sensitive connection extras on every connection type (#75106) -- Validate ``CallbackTrigger`` callback path before running the callback (#75102) -- Render XCom values on the API server without rebuilding objects (#75088) -- UI: Guard the remaining ``RadioCardRoot`` values instead of casting (#74989) -- UI: Keep unnamed columns out of the table columns menu (#74988) -- Lazy-load the Code tab grammar from the Dag's stored language (#74987) -- UI: Use ``RadioCardRoot``'s typed ``onValueChange`` instead of DOM casts (#74979) -- Highlight YAML Dag source in the Code tab (#74972) -- UI: Drop the loading spinner for base React plugins (#74964) -- Resolve loop iterations through family and path columns on dynamic regions (#74963) -- Show Dag version diff values-hidden pill only when values are hidden (#74960) -- Coerce delta and other typed fields when building operators from YAML Dags (#74959) -- UI: Fold draining into the Dags Paused state filter (#74958) -- UI: Add clicked tags to the Dags list filters instead of replacing them (#74957) -- UI: Open nav sidebar menus on hover and add a Dags menu (#74953) -- Reduce db clean batch probe overhead (#74952) -- Batch triggerer unused trigger cleanup deletes (#74950) -- Upgrade Task Loop UX (#74931) -- Skip the scheduler's Dag lookup for Dag runs with no callback to send (#74857) -- TS SDK: Reject ``triggerDagRun`` tasks in ``dag.if`` and ``dag.switch`` (#74828) -- Java SDK: Rename annotation namespace from Builder to Airflow (#74826) -- Show serializer schema in Dag version diff only when it differs (#74739) +- Add metrics for task and asset state store access (#75729) +- Add ``dag_id`` and ``task_id`` tags to the resumable_job metrics (#75721) +- Run a language SDK runtime in its own process group (#75707) +- Require cadwyn 8.1 to allow FastAPI 0.137+ (#75689) +- Report language SDK runtime launch failures in the task log (#75561) +- UI: Remove the info tooltip from the Dag version comparison (#75526) +- UI: Show the filtered task count in the Dag Tasks tab heading (#75448) +- TS SDK: Take the task state store retention in seconds (#75445) +- UI: Show the Dag version diff occurrence count on the path (#75433) +- UI: Make the Dags sidebar button a link and move Dag Runs and Task Instances under Browse (#75422) +- Optimize the scheduler's asset orphanage check with an ``EXISTS`` subquery instead of a fan-out join (#75404) +- UI: Clean up the Dag Version tab (#75244) +- Go SDK: Write the edge label text before the task (#75185) +- Open the Dags menu from the Dags nav button instead of navigating (#75092) +- TS SDK: Collect ``dag_dependencies`` in the tasks pass (#75032) +- Warn about overly large task state values from language SDK tasks (#74945) +- Resolve loop iterations through family and path columns on dynamic regions (#74892) +- Validate ``CallbackTrigger`` callback path before running the callback (#74842) +- Skip the scheduler's Dag lookup for Dag runs with no callback to send (#74835) +- Render XCom values on the API server without rebuilding objects (#74829) +- UI: Preload base React plugin bundles with the page (#74777) +- UI: Keep unnamed columns out of the table columns menu (#74774) +- Number task loop iterations from one instead of zero (#74773) +- UI: Drop the loading spinner for base React plugins (#74762) +- Coerce delta and other typed fields when building operators from YAML Dags (#74749) +- Show Dag version diff values-hidden pill only when values are hidden (#74746) +- UI: Open nav sidebar menus on hover and add a Dags menu (#74745) +- UI: Guard the remaining ``RadioCardRoot`` values instead of casting (#74743) +- Show serializer schema in Dag version diff only when it differs (#74683) +- Upgrade Task Loop UX (#74671) +- UI: Fold draining into the Dags Paused state filter (#74668) +- Lazy-load the Code tab grammar from the Dag's stored language (#74643) +- Highlight YAML Dag source in the Code tab (#74633) +- UI: Add clicked tags to the Dags list filters instead of replacing them (#74622) +- Java SDK: Rename annotation namespace from Builder to Airflow (#74604) - Update waiting tasks to the latest Dag version (#74592) - Disable psycopg3 auto-prepare by default behind connection poolers (#74581) +- UI: Replace stacked Dag header banners with inline status (#74516) +- TS SDK: Reject ``triggerDagRun`` tasks in ``dag.if`` and ``dag.switch`` (#74492) - Make airflow standalone discover new Dag files within seconds (#74479) - Use the configured API port in the default execution API URL (#74478) - Dag run breadcrumb switcher (#74471) +- Reduce db clean batch probe overhead (#74455) - UI: Show important form inputs instead of hiding them in accordions (#74422) - Speed up Migration 0136 on MySQL (#74409) - Scope the mapped task group skip-decision query to its own Dag run (#74390) @@ -739,6 +815,7 @@ Miscellaneous - UI: Open provider connection fields by default and title them by connection type (#74273) - Keep get_dag_details and get_pools database queries off the API server event loop (#74247) - Guard the Dag Code tab's Monaco grammar exports against drift (#74246) +- Require ``httpx2`` instead of ``httpx`` in airflow-core (#74244) - Scope audit log rows to a Dag only from the request path or body (#74232) - Register TypeScript, Java and Go grammars for the Dag Code tab (#74231) - Discover executable bundles by footer, not by execute bit (#74227) @@ -754,17 +831,23 @@ Miscellaneous - UI: Keep Dags list table rows on a single line (#74002) - Pr/split storage tab (#73989) - Surface Dag run conf in the header (#73987) +- UI: Use ``RadioCardRoot``'s typed ``onValueChange`` instead of DOM casts (#73985) - Keep agent framework spans when worker tracing is off (#73903) - Enforce execution_timeout from the task supervisor side (#73806) - Keep the Dag asset schedule the same shape for every caller (#73805) - Update supported Kubernetes versions (#73798) +- Mask provider-declared sensitive connection extras on every connection type (#73794) +- Mask registered secrets at any nesting depth (#73793) +- Mask XCom values in the audit log (#73791) - Always clear the session cookie on logout (#73788) +- Pass runtime values to example Dag shell commands through env (#73787) - Eager-load DagCode in the Dag source API (#73752) - Speed up zip Dag discovery and keep member file names (#73727) - UI: Group digits of counters according to the selected locale (#73713) - Correct the meaning of _arg_bindings in the serialization schema (#73644) - Sync the UI Dags list applied sort rule with URL query param (#73622) - Link calendar cell to filter dagruns by the respective start_date and state. (#73611) +- Add the resume event to stored next_kwargs without decoding them (#73576) - Scope plugin scheduling classes to their team in multi-team mode (#73569) - Warn when db clean skips only some rows of a batch (#73568) - Widen revoked_token.jti to store external-issuer token identifiers (#73562) @@ -784,6 +867,7 @@ Miscellaneous - Identity-only DAG discovery and byte-importing (#73118) - Move retry policy decision outside post execute log group block (#73023) - Speed up the event logs API by loading only display names (#73021) +- Scope upstream asset events of a Dag run to assets and Dags the caller may read (#72924) - Warn at provider discovery about an unresolvable connection type (#72904) - Mark task-group aggregate bars on Gantt with a diagonal stripe (#72894) - Hide unreadable assets in the asset expression served by next_run_assets (#72864) @@ -796,6 +880,9 @@ Miscellaneous - Show whether a calendar day's run was a backfill (#72782) - Replace AssertionError as ValueError in production code (#72763) - Keep the task instance in dag callbacks when its Dag version is missing (#72721) +- Read XCom without object reconstruction during dependency evaluation (#72718) +- Mask CLI secrets in the audit log by parsed argument, not argv position (#72650) +- Clarify the backfill reprocessing option labels in the CLI and REST API (#72590) - Keep provider_config_fallback_defaults.cfg in sync with provider.yaml (#72549) - Warn when connections/variables list output may be incomplete (#72484) - Adjust warnings, import errors, and Dag source models for sdk/importers (#72474) @@ -827,6 +914,7 @@ Miscellaneous - Reject serde-reserved keys in HITL params_input (#71054) - Update grid view refresh (#71004) - Improve assets list performance (#70997) +- Batch triggerer unused trigger cleanup deletes (#70961) - Multi-Team: Add teams verify command to validate multi-team configuration (#70947) - Describe default Airflow loggers (#70842) - Rename dag serialization metrics. (#70838) @@ -881,20 +969,33 @@ Miscellaneous Doc Only Changes ^^^^^^^^^^^^^^^^ -- 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) -- Add documentation for the new YAML Dag format (#75053) -- Add missing zh-CN translations for new UI strings (#75023) -- Close German Translation Gaps 2026-10-15 (#74990) -- Point the TaskFlow tutorial's retries section to resumable tasks (#74984) -- Close German Translation Gaps 2026-10-14 (#74962) -- Document that ``use_job_schedule`` also stops asset-triggered Dag runs (#74951) -- Complete Hebrew UI translations 2026-10-16 (#74855) +- Go SDK: Correct the documented install command that broke the first bundle build (#75574) +- Add missing German Dag trigger translations (#75519) +- Normalize zh-TW plural forms and wording (#75504) +- Limit the CLI reference's page contents to top-level commands (#75483) +- Fix docs pages listing their sections as separate pages in the sidebar (#75478) +- Fix upgrade guide sections showing as separate pages in the docs sidebar (#75468) +- Add missing zh-TW translations for Dag version path tooltips (#75450) +- Java SDK: Rewrite the user docs around Dag definition (#75439) +- Fix deferral paths in the task lifecycle diagram (#75428) +- Add missing Taiwanese Mandarin translations for Dag start and end date trigger messages (#75371) +- Complete German UI translations (#75301) +- Add missing Taiwanese Mandarin UI translations (#75278) +- Close German translation gaps (#75137) +- Document that the HITL operator body is rendered as Markdown (#75130) +- Complete Hindi (hi) UI translations (#75057) +- Fix missing and incorrect endpoints in the API permission reference (#74871) +- Close German Translation Gaps 2026-10-15 (#74802) +- Close German Translation Gaps 2026-10-14 (#74760) +- Add documentation for the new YAML Dag format (#74748) +- Go SDK: Rewrite the user docs around Dag definition (#74698) +- TS SDK: Align the README with the authoring guide (#74693) +- Point the TaskFlow tutorial's retries section to resumable tasks (#74608) - Add missing Taiwanese Mandarin translations (#74545) - Add missing Polish UI translations (#74533) - Add missing Taiwanese Mandarin translations for task states and Dag list settings (#74486) - Fix Quick Start installing Airflow 3.1.1 instead of the documented version (#74474) +- Complete Hebrew UI translations 2026-10-16 (#74467) - Add missing UI translations for Greek(el) (#74460) - Dedent task docstrings used as doc_md (#74436) - Close Catalan gap (#74361) @@ -912,7 +1013,9 @@ Doc Only Changes - Close German Translation Gaps 2026-09-30 (#73980) - Clarify Dag processor scoping and team config in Multi-Team docs (#73958) - Fix typo in apache-airflow-providers-fab error message (#73956) +- Document that ``use_job_schedule`` also stops asset-triggered Dag runs (#73952) - Fix misleading timetable Variable example in best practices (#73945) +- Add missing zh-CN translations for new UI strings (#73943) - Update the TypeScript SDK docs for Dags declared in TypeScript (#73875) - i18n(ko): Align particles after Dag with the agreed pronunciation (#73799) - i18n(ko): Add missing translations (Sep25) (#73757) @@ -952,6 +1055,7 @@ Doc Only Changes - Improve TypeScript SDK API reference navigation (#71833) - Close spanish translation gap (#71796) - i18n(Ko): add missing translations in assets.json (Aug 18) (#71760) +- Add a consolidated language SDK compatibility matrix (#71757) - Fix inverted docstring for config write hide_sensitive option (#71623) - Fix the translation Gap for Taiwanese Mandarin (#71482) - Update Deadline Reference docs to match the code (#71469) 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
