This is an automated email from the ASF dual-hosted git repository.
ephraimbuddy pushed a change to branch dag-processor-source-consistency
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard 9b7dfd80254 Make the bundle refresh regression test independent of
uptime
discard 653f83a43c1 Avoid parsing stalls while a bundle refresh waits for
imports
discard 9984b73eb80 Keep Dag parsing results aligned with refreshed bundle
sources
add 6639577b61e Put the PROD build virtualenv before /usr/python/bin on
PATH (#75236)
add 5fa997cf002 Add YAML Dag schema publishing infra (#75055)
add 9f1be063d49 Skip inclusive-language check for non-English UI
translations (#75247)
add 6d8a58bff74 Exempt Google Cloud link modules from provider test-file
check (#74924)
add 4ca5754ade4 UI: Show a label instead of a broken link for hidden
assets (#75178)
add 57ed6e7bcb6 UI: Add regression tests for Dags list rows remounting on
refresh (#75005)
add 89ce7a4ff70 Fix SMTP email backend documentation link (#75243)
add 0cde487d422 Stop parallel prek hooks racing on __pycache__ cleanup
(#73823)
add a8c55b78f0e Number task loop iterations from one instead of zero
(#74773)
add 05981d3e2aa Fix task Clear and callback bundles after code-only Dag
changes (#73915)
add ca6499d83b8 Reject blank pool names and variable keys in the REST API
(#74896)
add 165f5ad9054 UI: Preload base React plugin bundles with the page
(#74777)
add 30d7663297b Add time range filtering to the Gantt view (#73555)
add d39d8d54c8c Document the Dag run timeout exception to leaf-state rules
(#74809)
add fa510cdf1e8 Remove unused mypy suppressions in common providers
(#75257)
add 8cc830d4ef9 Fix Kubernetes TCP keepalive not being applied with
urllib3 2.x (#74921)
add 6ebc8d5e038 Use common.compat mask_secret in MCPHook (#75064)
add 25c93b71c4b Re-enable Dependabot and the scheduled upgrade check for
v3-4-test (#75276)
add eccdab540cf Warn about oversized task state values from language SDK
tasks (#74945)
add c57e23956e3 Update minium uv version to 0.13.4 to address
untrustworthy intermediate CA (#75296)
add f3cf550b94b TS SDK: Bump to 1.0.0-beta1 and align README with the
guide (#74693)
add e6a2c9f4e78 Expose task instance loop pass and expansion size to
listeners (#75132)
add b1728b99f60 Add latest-package-managers flag to breeze ci upgrade and
upgrade check CI (#75298)
add 745bdbfb9bc UI: Add match-anywhere toggle to the tags filter (#73616)
add 7e0c1acb426 Bump certifi to 2026.10.19 to drop the compromised emSign
ECC Root CA - G3 (#75302)
add 6aa6db263b1 Bump uv used for release sdist checks to 0.13.4 (#75305)
add b3e91e8442c Bump markdown-it (#75306)
add 4c29b3beb43 Fix outdated commands and references in contributing docs
(#75294)
add e6aa11feff8 Bump the github-actions-updates group with 7 updates
(#75293)
add a9c7f5726be Bump the registry-package-updates group across 1 directory
with 2 updates (#75282)
add be056c2ead2 Fix ruff formatting in the upgrade important versions test
(#75314)
add 57aedbf8c97 Reveal selected Dag folders when names contain pipes
(#75196)
add 5c021ce5442 Clean up Dag Version Tab UX (#75244)
add e5bd3ba9aa4 Bump the react group across 1 directory with 2 updates
(#75281)
add 7d94a66507e Reject non-positive max_active_runs when creating a
backfill (#75071)
add b32158ccdab Bump the fab-ui-package-updates group across 1 directory
with 2 updates (#75234)
add 4425e1bbff8 Bump the auth-ui-package-updates group across 1 directory
with 6 updates (#75286)
add 4fb12b3af09 Include DMS stop reason in DmsTaskBaseSensor failure
message (#75240)
add a571ed0cb60 Add missing Taiwanese Mandarin UI translations (#75277)
add 80702895deb UI: Render Arabic durations with the correct plural form
(#72604)
add b99f4a9b3f8 Fix task instance filtering for null start dates (#75321)
add aee2d4d5122 Fix tasks clear --task-regex matching as a plain substring
(#72941)
add 27b075b9488 Prepare providers release 2026-10-20 (#75209)
add dcfaae090a6 Show errors when the task clear confirmation check fails
(#75269)
add a3a4c138a08 UI: Drop Arabic plural test cases that no longer go
through dayjs (#75330)
add 90f064fa244 Allow BedrockBatchInferenceOperator to wait until the job
is scheduled (#75230)
add 5dd712998d0 Report HTTP errors from binary downloads in
example_emr_eks (#75246)
add ed6344d9dda Deprecate deferrable overriding wait_for_completion in
Comprehend (#75226)
add 3ec479258c9 Link the durable and deferrable operators page from
Registry stats (#75322)
add 35e8183358a Add EKS operator for commands in existing Pods (#72542)
add ebe476eb127 Treat in-progress Bedrock batch inference jobs as
scheduled (#75264)
add 38193762bcf Wait for MWAA Serverless run to stop before deleting
workflow (#75349)
add e02acc44f4e Close German Translation Gaps 2026-10-19 (#75137)
add 92a9e5aad39 Wait for variable form validation before asserting Save is
enabled (#75239)
add 5472d642898 Fix Snowflake connections ignoring region with
`snowflake-connector-python` 5 (#75334)
add c81ca3c4c9e UI: Warn when the logical date is outside the Dag's dates
(#75223)
add 79d3afc82b5 Show source code lines in task log tracebacks (#75100)
add 6db0df87d7f Bump eslint-plugin-unicorn from 77.0.0 to 78.0.0 in
/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui (#75287)
add c16474e39a6 Bump the edge-ui-package-updates group across 1 directory
with 11 updates (#75291)
add 599d7539369 Bump the ui-plugin-template-package-updates group across 1
directory with 8 updates (#75288)
add 66701706142 Bump eslint in /ts-sdk in the ts-sdk-package-updates group
(#75285)
add 9ce42121d0c Bump aiohttp in
/providers/informatica/dev/informatica_simulator (#75187)
add afb1ce5396b Fix ``DbApiHook.inspector`` keeping a database connection
open until process exit (#75327)
add 70b95a24582 Go SDK: Write the edge label text before the task (#75185)
add 0c43149e1b4 Bump vite (#75357)
add 6c8902b1ac5 Document per-set volumes for Celery workers (#74913)
add ab9a2facf76 Add missing Taiwanese Mandarin translations for Dag
start/end date trigger messages (#75371)
add 3fbc2639a12 Fix Google Cloud Logging task log reads before Airflow 3.4
(#74923)
add 597aff10d71 Enforce execution_timeout for tasks run by a language SDK
(#74869)
add 7483c23e9b7 Fix Edge workers not reporting the final state of deadline
callbacks (#74784)
add bf022cc64f2 Fix duplicate pending Dag runs for the same asset
partition key (#71074)
add b3db4d5201a Go SDK: Rewrite the user docs around Dag definition
(#74698)
add c558f4a60f3 TS SDK: Reject blank edge labels and label task edges into
groups (#75190)
add eda782f76ea Make Java SDK context signal-aware (#74690)
add 0fb5bfc4df1 Fill scheduler task batches after concurrency rejection
(#70307)
add 469800c11d2 Keep the multiselect filter pill's focus ring visible
(#75307)
add fc9c4b0b003 Java SDK: Let a native Java Dag set one queue for all its
tasks (#74538)
add a3cd2a59c23 Add an async upload to S3Hook: aload_bytes (#75242)
add 1e3a23293b8 Read a team's running task logs through the team's
executor (#75255)
add 4db39e4d7ea Fix breeze ci_group crash when the title is skipped in
GitHub Actions (#75401)
add e5d8cbbe679 Make JWTRefreshMiddleware extensible via
BaseAuthManager.get_jwt_refresh_middleware() (#70783)
add c510e4dab4c Let plugins add their own actions to Dag, run and task
instance rows (#75229)
add 7848035d25c Keep Dag parsing results aligned with refreshed bundle
sources
add cdb757f9190 Avoid parsing stalls while a bundle refresh waits for
imports
add 1462d071edd Make the bundle refresh regression test independent of
uptime
add 562a3874cba Keep Dag parsing responsive during bundle refresh failures
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (9b7dfd80254)
\
N -- N -- N refs/heads/dag-processor-source-consistency
(562a3874cba)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/dependabot.yml | 21 -
.github/workflows/airflow-e2e-tests.yml | 2 +-
.github/workflows/asf-allowlist-check.yml | 2 +-
.github/workflows/basic-tests.yml | 2 +-
.github/workflows/ci-amd.yml | 2 +-
.github/workflows/ci-arm.yml | 2 +-
.github/workflows/ci-image-build.yml | 8 +-
.github/workflows/ci-image-checks.yml | 2 +-
.github/workflows/codeql-analysis.yml | 8 +-
.../java-sdk-dependabot-verification-metadata.yml | 2 +-
.github/workflows/java-sdk-dependency-security.yml | 2 +-
.github/workflows/java-sdk-release-verify.yml | 4 +-
.github/workflows/k8s-tests.yml | 2 +-
.github/workflows/prod-image-build.yml | 2 +-
.github/workflows/publish-docs-to-s3.yml | 22 +-
.../scheduled-legacy-prod-image-canary.yml | 2 +-
.../scheduled-upgrade-check-v3-4-test.yml | 9 +-
.github/workflows/upgrade-check.yml | 1 +
.pre-commit-config.yaml | 326 ++++++-
Dockerfile | 8 +-
Dockerfile.ci | 2 +-
airflow-core/.pre-commit-config.yaml | 62 ++
.../administration-and-deployment/dag-bundles.rst | 19 +
.../docs/administration-and-deployment/plugins.rst | 50 ++
.../authoring-and-scheduling/language-sdks/go.rst | 997 ++++++++++++---------
.../language-sdks/java.rst | 62 +-
.../language-sdks/typescript.rst | 115 ++-
.../docs/authoring-and-scheduling/loops.rst | 53 +-
.../docs/authoring-and-scheduling/yaml-dags.rst | 4 +-
airflow-core/docs/core-concepts/dag-run.rst | 4 +
airflow-core/docs/core-concepts/tasks.rst | 8 +-
airflow-core/docs/howto/custom-action-plugin.rst | 348 +++++++
airflow-core/docs/howto/index.rst | 1 +
airflow-core/docs/migrations-ref.rst | 5 +-
airflow-core/docs/troubleshooting.rst | 2 +
airflow-core/newsfragments/74896.bugfix.rst | 1 +
airflow-core/pyproject.toml | 2 +-
airflow-core/src/airflow/api_fastapi/app.py | 18 +
.../api_fastapi/auth/managers/base_auth_manager.py | 14 +
.../auth/managers/simple/ui/package.json | 14 +-
.../auth/managers/simple/ui/pnpm-lock.yaml | 623 +++++++++----
.../managers/simple/ui/src/alert/ErrorAlert.tsx | 4 +-
.../api_fastapi/auth/middlewares/refresh_token.py | 77 +-
.../src/airflow/api_fastapi/core_api/app.py | 32 +-
.../api_fastapi/core_api/datamodels/backfills.py | 2 +-
.../api_fastapi/core_api/datamodels/plugins.py | 58 +-
.../api_fastapi/core_api/datamodels/pools.py | 6 +-
.../core_api/datamodels/task_instances.py | 2 +-
.../api_fastapi/core_api/datamodels/variables.py | 7 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 74 ++
.../core_api/openapi/v2-rest-api-generated.yaml | 112 ++-
.../api_fastapi/core_api/routes/public/pools.py | 4 +-
.../core_api/routes/public/task_instances.py | 19 +-
.../api_fastapi/core_api/routes/ui/gantt.py | 24 +-
.../api_fastapi/core_api/services/ui/grid.py | 4 +-
.../execution_api/datamodels/taskinstance.py | 54 +-
.../execution_api/routes/task_instances.py | 32 +-
.../execution_api/services/task_instances.py | 32 +-
.../api_fastapi/execution_api/versions/__init__.py | 4 +
.../execution_api/versions/v2026_10_30.py | 30 +-
airflow-core/src/airflow/assets/manager.py | 281 +++---
.../src/airflow/cli/commands/task_command.py | 12 +-
.../src/airflow/dag_processing/bundles/base.py | 16 +
.../src/airflow/dag_processing/bundles/local.py | 1 +
airflow-core/src/airflow/dag_processing/manager.py | 122 ++-
.../src/airflow/dag_processing/processor.py | 13 +-
.../src/airflow/example_dags/example_task_loops.py | 10 +-
.../src/airflow/executors/executor_loader.py | 36 +
.../src/airflow/jobs/scheduler_job_runner.py | 150 ++--
...0148_3_4_0_add_pending_partition_key_to_apdr.py | 84 ++
..._job.py => 0149_3_5_0_add_session_id_to_job.py} | 4 +-
airflow-core/src/airflow/models/asset.py | 33 +-
airflow-core/src/airflow/models/dag_version.py | 22 +-
airflow-core/src/airflow/models/dagrun.py | 5 +-
airflow-core/src/airflow/models/dynamic_region.py | 22 +-
airflow-core/src/airflow/models/serialized_dag.py | 6 +-
.../src/airflow/models/task_coordinates.py | 83 +-
airflow-core/src/airflow/models/taskinstance.py | 5 +
airflow-core/src/airflow/models/trigger.py | 21 +-
airflow-core/src/airflow/plugins_manager.py | 109 ++-
.../airflow/serialization/serialized_objects.py | 9 +-
airflow-core/src/airflow/ui/dev/index.html | 3 +
airflow-core/src/airflow/ui/index.html | 3 +
.../src/airflow/ui/openapi-gen/queries/common.ts | 12 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 22 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 22 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 22 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 22 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 149 ++-
.../ui/openapi-gen/requests/services.gen.ts | 20 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 49 +-
airflow-core/src/airflow/ui/package.json | 4 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 284 +++---
.../airflow/ui/public/i18n/locales/de/admin.json | 2 +
.../airflow/ui/public/i18n/locales/de/common.json | 4 +
.../src/airflow/ui/public/i18n/locales/de/dag.json | 24 +
.../airflow/ui/public/i18n/locales/de/dags.json | 1 +
.../airflow/ui/public/i18n/locales/en/common.json | 1 +
.../ui/public/i18n/locales/en/components.json | 6 +
.../ui/public/i18n/locales/zh-TW/admin.json | 2 +
.../ui/public/i18n/locales/zh-TW/common.json | 1 +
.../ui/public/i18n/locales/zh-TW/components.json | 6 +
.../ui/src/components/AdvancedSearchToggle.tsx | 6 +-
.../AssetExpression/AssetNode.test.tsx} | 37 +-
.../src/components/AssetExpression/AssetNode.tsx | 13 +-
.../ClearTaskInstanceConfirmationDialog.test.tsx | 185 ++++
.../ClearTaskInstanceConfirmationDialog.tsx | 20 +-
.../TaskInstance/ClearTaskInstanceDialog.test.tsx | 137 ++-
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 9 +-
.../FilterBar/filters/MultiSelectPill.tsx | 24 +-
.../FilterBar/filters/TagsFilter.test.tsx | 143 +++
.../components/FilterBar/filters/TagsFilter.tsx | 3 +
.../airflow/ui/src/components/FilterBar/types.ts | 4 +-
.../ui/src/components/JsonPreviewBadges.tsx | 42 +-
.../PluginActions/PluginActionBoundary.tsx | 63 ++
.../components/PluginActions/PluginActionIcon.tsx | 36 +-
.../PluginActions/PluginActions.test.tsx | 431 +++++++++
.../src/components/PluginActions/PluginActions.tsx | 90 ++
.../PluginActions/PluginActionsContext.tsx | 45 +
.../components/PluginActions/PluginLinkAction.tsx | 96 ++
.../components/PluginActions/PluginReactAction.tsx | 98 ++
.../{Breadcrumb => PluginActions}/index.ts | 7 +-
.../PluginActions/pluginActionContext.test.ts | 138 +++
.../PluginActions/pluginActionContext.ts | 97 ++
.../ui/src/components/PluginActions/types.ts | 82 ++
.../ui/src/components/RenderedJsonField.test.tsx | 19 +
.../ui/src/components/RenderedJsonField.tsx | 36 +-
.../components/TriggerDag/TriggerDAGForm.test.tsx | 46 +
.../src/components/TriggerDag/TriggerDAGForm.tsx | 43 +-
.../ui/src/components/renderStructuredLog.test.tsx | 30 +
.../ui/src/components/renderStructuredLog.tsx | 10 +-
.../src/airflow/ui/src/constants/filterConfigs.tsx | 1 +
.../airflow/ui/src/hooks/usePluginActions.test.ts | 142 +++
.../src/airflow/ui/src/hooks/usePluginActions.ts | 50 ++
.../src/airflow/ui/src/hooks/usePluginTabs.tsx | 13 +-
.../airflow/ui/src/hooks/useScopedPluginViews.ts | 14 +-
.../airflow/ui/src/i18n/dayjsArabicPlurals.test.ts | 126 +++
.../src/airflow/ui/src/i18n/dayjsArabicPlurals.ts | 82 ++
.../src/airflow/ui/src/i18n/dayjsLocale.test.ts | 5 +-
.../src/airflow/ui/src/i18n/dayjsLocale.ts | 4 +
.../ui/src/layouts/Details/Gantt/Gantt.test.tsx | 133 +++
.../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx | 9 +-
.../layouts/Details/Gantt/GanttTimeline.test.tsx | 2 +-
.../ui/src/layouts/Details/GridFilters.test.tsx | 79 ++
.../airflow/ui/src/layouts/Details/GridFilters.tsx | 24 +-
.../ui/src/layouts/Details/PanelButtons.tsx | 2 +-
.../src/airflow/ui/src/pages/Dag/Header.tsx | 8 +
.../Versions/DiffUnavailableAlert.tsx} | 43 +-
.../ui/src/pages/Dag/Versions/DiffValue.tsx | 60 ++
.../pages/Dag/Versions/MaxChangesField.test.tsx | 71 ++
.../ui/src/pages/Dag/Versions/MaxChangesField.tsx | 119 +++
.../Dag/Versions/MonoText.tsx} | 24 +-
.../airflow/ui/src/pages/Dag/Versions/PathText.tsx | 49 +
.../pages/Dag/Versions/SelectedVersionsDiff.tsx | 81 ++
.../ui/src/pages/Dag/Versions/VersionDiff.test.tsx | 71 +-
.../ui/src/pages/Dag/Versions/VersionDiff.tsx | 116 +--
.../airflow/ui/src/pages/Dag/Versions/Versions.tsx | 98 +-
.../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx | 58 +-
.../ui/src/pages/DagsList/DagCardActions.tsx | 2 +
.../DagsList/DagFolderTree/DagFolderTree.test.tsx | 29 +
.../pages/DagsList/DagFolderTree/DagFolderTree.tsx | 2 +-
.../ui/src/pages/DagsList/DagsList.test.tsx | 80 +-
.../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 185 ++--
.../ui/src/pages/DagsList/DagsListColumns.tsx | 9 +-
airflow-core/src/airflow/ui/src/pages/Iframe.tsx | 28 +-
.../src/airflow/ui/src/pages/Run/Header.tsx | 8 +
.../ui/src/pages/TaskInstance/ExtraLinks.tsx | 14 +-
.../airflow/ui/src/pages/TaskInstance/Header.tsx | 8 +
.../ui/src/pages/TaskInstances/TaskInstances.tsx | 36 +-
.../Variables/ManageVariable/VariableForm.test.tsx | 7 +-
.../airflow/ui/src/queries/useDagTagsInfinite.ts | 15 +-
.../ui/src/queries/useLoopFilterOptions.test.ts | 10 +-
.../src/airflow/ui/src/utils/links.test.ts | 218 ++++-
airflow-core/src/airflow/ui/src/utils/links.ts | 168 +++-
.../airflow/ui/src/utils/pluginAppliesTo.test.ts | 41 +
.../src/airflow/ui/src/utils/pluginAppliesTo.ts | 54 +-
.../src/airflow/ui/src/utils/pluginIcon.test.ts | 59 ++
.../DurationCell.tsx => utils/pluginIcon.ts} | 25 +-
.../airflow/ui/src/utils/pluginTemplate.test.ts | 72 ++
.../src/airflow/ui/src/utils/pluginTemplate.ts | 54 ++
airflow-core/src/airflow/utils/db.py | 2 +-
.../src/airflow/utils/log/file_task_handler.py | 17 +-
.../src/airflow/utils/log/task_log_address.py | 10 +-
.../tests/unit/always/test_project_structure.py | 57 +-
.../auth/managers/test_base_auth_manager.py | 10 +
.../auth/middlewares/test_refresh_token.py | 81 +-
.../core_api/routes/public/test_auth.py | 4 +-
.../core_api/routes/public/test_backfills.py | 28 +
.../core_api/routes/public/test_dag_run.py | 4 +-
.../core_api/routes/public/test_event_logs.py | 8 +-
.../core_api/routes/public/test_execution.py | 4 +-
.../core_api/routes/public/test_extra_links.py | 2 +-
.../core_api/routes/public/test_plugins.py | 64 ++
.../core_api/routes/public/test_pools.py | 48 +
.../core_api/routes/public/test_task_instances.py | 168 ++--
.../core_api/routes/public/test_variables.py | 44 +-
.../api_fastapi/core_api/routes/ui/test_gantt.py | 123 ++-
.../api_fastapi/core_api/routes/ui/test_grid.py | 58 +-
.../tests/unit/api_fastapi/core_api/test_app.py | 97 +-
.../versions/head/test_task_instances.py | 148 ++-
.../execution_api/versions/head/test_xcoms.py | 111 ++-
.../versions/v2026_10_30/test_task_instances.py | 34 +
airflow-core/tests/unit/api_fastapi/test_app.py | 16 +
airflow-core/tests/unit/assets/test_manager.py | 283 +++++-
.../unit/cli/commands/test_plugins_command.py | 33 +
.../tests/unit/cli/commands/test_task_command.py | 23 +
.../tests/unit/dag_processing/bundles/test_base.py | 4 +
.../unit/dag_processing/bundles/test_local.py | 3 +
.../tests/unit/dag_processing/test_manager.py | 658 ++++++++++++--
.../tests/unit/dag_processing/test_processor.py | 2 +-
.../tests/unit/executors/test_executor_loader.py | 48 +-
.../tests/unit/executors/test_workloads.py | 2 +
airflow-core/tests/unit/jobs/test_scheduler_job.py | 262 +++++-
airflow-core/tests/unit/jobs/test_triggerer_job.py | 2 +-
.../test_0148_add_pending_partition_key_to_apdr.py | 187 ++++
airflow-core/tests/unit/models/conftest.py | 7 +-
airflow-core/tests/unit/models/test_cleartasks.py | 42 +-
airflow-core/tests/unit/models/test_dag_version.py | 8 +-
airflow-core/tests/unit/models/test_dagrun.py | 107 ++-
.../tests/unit/models/test_dynamic_region.py | 69 +-
.../tests/unit/models/test_task_coordinates.py | 82 ++
.../tests/unit/models/test_taskinstance.py | 21 +-
airflow-core/tests/unit/models/test_trigger.py | 63 +-
.../tests/unit/plugins/test_plugins_manager.py | 317 +++++++
.../unit/serialization/test_dag_serialization.py | 18 +
.../unit/ti_deps/deps/test_trigger_rule_dep.py | 2 +-
airflow-core/tests/unit/utils/test_log_handlers.py | 30 +
airflow-ctl-tests/.pre-commit-config.yaml | 4 +
airflow-ctl/.pre-commit-config.yaml | 8 +
airflow-ctl/pyproject.toml | 2 +-
.../src/airflowctl/api/datamodels/generated.py | 65 +-
airflow-e2e-tests/.pre-commit-config.yaml | 2 +
.../apache/airflow/e2e/NativeBundleBuilder.java | 36 +-
.../airflow/e2e/nativedag/AnnotationDag.java | 25 +-
.../apache/airflow/e2e/nativedag/DynamicDags.java | 5 +-
.../apache/airflow/e2e/nativedag/TargetDag.java | 5 +-
.../org/apache/airflow/e2e/TestBundleBuilder.java | 33 +-
.../src/resources/dags/java_test_dags.py | 12 +
.../airflow_e2e_tests/e2e_test_utils/clients.py | 8 +
.../java_sdk_tests/test_java_sdk_dag.py | 56 ++
.../java_sdk_tests/test_java_sdk_native_dag.py | 17 +-
chart/.pre-commit-config.yaml | 28 +
chart/docs/customizing-workers.rst | 46 +
.../20_debugging_airflow_components.rst | 14 +-
.../26_migration_round_trip_check.rst | 4 +-
contributing-docs/testing/unit_tests.rst | 2 +-
dev/.pre-commit-config.yaml | 2 +
dev/breeze/doc/09_release_management_tasks.rst | 10 +-
dev/breeze/doc/ci/02_images.md | 2 +-
dev/breeze/doc/images/output_ci_upgrade.svg | 92 +-
dev/breeze/doc/images/output_ci_upgrade.txt | 2 +-
.../doc/images/output_release-management.svg | 2 +-
.../doc/images/output_release-management.txt | 2 +-
...ut_release-management_publish-schemas-to-s3.svg | 34 +-
...ut_release-management_publish-schemas-to-s3.txt | 2 +-
dev/breeze/pyproject.toml | 11 +
.../src/airflow_breeze/commands/ci_commands.py | 11 +
.../airflow_breeze/commands/ci_commands_config.py | 1 +
.../commands/release_management_commands.py | 17 +-
.../commands/release_management_commands_config.py | 1 +
dev/breeze/src/airflow_breeze/global_constants.py | 2 +-
.../airflow_breeze/utils/check_release_files.py | 2 +-
dev/breeze/src/airflow_breeze/utils/ci_group.py | 22 +-
dev/breeze/src/airflow_breeze/utils/path_utils.py | 6 +
.../src/airflow_breeze/utils/publish_docs_to_s3.py | 6 +-
.../breeze/tests/test_ci_group.py | 19 +-
dev/breeze/tests/test_ci_upgrade.py | 5 +
dev/breeze/tests/test_environment_check.py | 2 +-
dev/breeze/tests/test_path_utils.py | 51 ++
dev/breeze/uv.lock | 94 +-
dev/mypy/.pre-commit-config.yaml | 4 +
dev/mypy/pyproject.toml | 2 +-
.../react_plugin_template/package.json | 16 +-
.../react_plugin_template/pnpm-lock.yaml | 406 ++++-----
docker-tests/.pre-commit-config.yaml | 2 +
docs/spelling_wordlist.txt | 1 +
go-sdk/.pre-commit-config.yaml | 14 +
go-sdk/DEVELOPMENT.md | 215 +++++
go-sdk/README.md | 507 ++---------
go-sdk/adr/0008-native-dag-interface.md | 20 +-
go-sdk/airflow/conformance_test.go | 2 +-
go-sdk/airflow/dag.go | 6 +-
go-sdk/airflow/if_test.go | 2 +-
go-sdk/airflow/node.go | 240 +++--
go-sdk/airflow/node_test.go | 241 ++++-
go-sdk/airflow/serialize_test.go | 8 +-
go-sdk/airflow/task_group_test.go | 33 +-
go-sdk/example/README.md | 129 +++
go-sdk/example/native/main.go | 2 +-
go-sdk/internal/genspec/authoring.go | 2 +-
go-sdk/pkg/execution/client.go | 4 -
.../pkg/execution/genmodels/discriminators.gen.go | 8 +-
go-sdk/pkg/execution/genmodels/models.gen.go | 175 ++--
go-sdk/schema/supervisor-schema.json | 143 +--
.../example/nativedag/AnnotationExample.java | 1 +
.../example/nativedag/InterfaceExample.java | 1 +
.../airflow/example/nativedag/TargetExample.java | 1 +
.../org/apache/airflow/sdk/AirflowProcessor.kt | 6 +-
.../org/apache/airflow/sdk/AirflowProcessorTest.kt | 53 +-
java-sdk/sdk/build.gradle.kts | 28 +-
.../main/kotlin/org/apache/airflow/sdk/Client.kt | 2 -
.../main/kotlin/org/apache/airflow/sdk/Context.kt | 50 ++
.../main/kotlin/org/apache/airflow/sdk/DagDef.kt | 17 +-
.../main/kotlin/org/apache/airflow/sdk/Server.kt | 29 +-
.../kotlin/org/apache/airflow/sdk/TriggerDagRun.kt | 1 +
.../apache/airflow/sdk/execution/Cancellation.kt | 134 +++
.../org/apache/airflow/sdk/execution/Logger.kt | 4 +
.../org/apache/airflow/sdk/execution/Serde.kt | 10 +-
.../org/apache/airflow/sdk/internal/Fields.kt | 22 +-
.../kotlin/org/apache/airflow/sdk/ContextTest.kt | 14 +
.../kotlin/org/apache/airflow/sdk/DagDefTest.kt | 28 +
.../kotlin/org/apache/airflow/sdk/ServerTest.kt | 292 ++++++
.../airflow/sdk/execution/CancellationTest.kt | 205 +++++
.../apache/airflow/sdk/execution/LogSenderTest.kt | 94 ++
.../org/apache/airflow/sdk/execution/SerdeTest.kt | 64 ++
kubernetes-tests/.pre-commit-config.yaml | 2 +
kubernetes-tests/lang_sdk/ts_example/package.json | 2 +-
providers/.last_release_date.txt | 2 +-
providers/.pre-commit-config.yaml | 60 ++
providers/alibaba/README.rst | 6 +-
providers/alibaba/docs/changelog.rst | 11 +
providers/alibaba/docs/index.rst | 6 +-
providers/alibaba/provider.yaml | 3 +-
providers/alibaba/pyproject.toml | 6 +-
.../src/airflow/providers/alibaba/__init__.py | 2 +-
providers/amazon/.pre-commit-config.yaml | 2 +
providers/amazon/README.rst | 15 +-
providers/amazon/docs/changelog.rst | 42 +
providers/amazon/docs/index.rst | 8 +-
providers/amazon/docs/operators/bedrock.rst | 3 +
providers/amazon/docs/operators/eks.rst | 30 +
providers/amazon/provider.yaml | 3 +-
providers/amazon/pyproject.toml | 8 +-
.../src/airflow/providers/amazon/__init__.py | 2 +-
.../src/airflow/providers/amazon/aws/hooks/dms.py | 24 +-
.../src/airflow/providers/amazon/aws/hooks/s3.py | 52 ++
.../providers/amazon/aws/operators/bedrock.py | 27 +-
.../providers/amazon/aws/operators/comprehend.py | 13 +-
.../airflow/providers/amazon/aws/operators/eks.py | 121 ++-
.../providers/amazon/aws/sensors/bedrock.py | 9 +-
.../airflow/providers/amazon/aws/sensors/dms.py | 11 +-
.../airflow/providers/amazon/aws/utils/deferral.py | 41 +
.../providers/amazon/aws/waiters/bedrock.json | 2 +-
.../amazon/aws/example_eks_with_nodegroups.py | 89 +-
.../tests/system/amazon/aws/example_emr_eks.py | 28 +-
.../system/amazon/aws/example_mwaa_serverless.py | 13 +
.../amazon/tests/unit/amazon/aws/hooks/test_dms.py | 6 +
.../amazon/tests/unit/amazon/aws/hooks/test_s3.py | 77 ++
.../unit/amazon/aws/operators/test_bedrock.py | 48 +-
.../unit/amazon/aws/operators/test_comprehend.py | 17 +-
.../tests/unit/amazon/aws/operators/test_eks.py | 222 ++++-
.../tests/unit/amazon/aws/sensors/test_bedrock.py | 9 +
.../tests/unit/amazon/aws/sensors/test_dms.py | 37 +-
.../tests/unit/amazon/aws/utils/test_deferral.py | 53 ++
.../tests/unit/amazon/aws/waiters/test_bedrock.py | 11 +-
.../anthropic/docs/.latest-doc-only-change.txt | 2 +-
providers/apache/hdfs/README.rst | 6 +-
providers/apache/hdfs/docs/changelog.rst | 11 +
providers/apache/hdfs/docs/index.rst | 6 +-
providers/apache/hdfs/provider.yaml | 3 +-
providers/apache/hdfs/pyproject.toml | 6 +-
.../src/airflow/providers/apache/hdfs/__init__.py | 2 +-
providers/apache/livy/README.rst | 8 +-
providers/apache/livy/docs/changelog.rst | 11 +
providers/apache/livy/docs/index.rst | 8 +-
providers/apache/livy/provider.yaml | 3 +-
providers/apache/livy/pyproject.toml | 8 +-
.../src/airflow/providers/apache/livy/__init__.py | 2 +-
providers/apache/spark/README.rst | 8 +-
providers/apache/spark/docs/changelog.rst | 16 +
providers/apache/spark/docs/index.rst | 8 +-
providers/apache/spark/provider.yaml | 3 +-
providers/apache/spark/pyproject.toml | 8 +-
.../src/airflow/providers/apache/spark/__init__.py | 2 +-
providers/apache/tinkerpop/README.rst | 6 +-
providers/apache/tinkerpop/docs/changelog.rst | 17 +
providers/apache/tinkerpop/docs/index.rst | 6 +-
providers/apache/tinkerpop/provider.yaml | 3 +-
providers/apache/tinkerpop/pyproject.toml | 6 +-
.../airflow/providers/apache/tinkerpop/__init__.py | 2 +-
providers/celery/README.rst | 6 +-
providers/celery/docs/changelog.rst | 16 +
providers/celery/docs/index.rst | 6 +-
providers/celery/provider.yaml | 3 +-
providers/celery/pyproject.toml | 6 +-
.../src/airflow/providers/celery/__init__.py | 2 +-
providers/cncf/kubernetes/README.rst | 8 +-
providers/cncf/kubernetes/docs/changelog.rst | 23 +
providers/cncf/kubernetes/docs/index.rst | 8 +-
providers/cncf/kubernetes/provider.yaml | 3 +-
providers/cncf/kubernetes/pyproject.toml | 15 +-
.../airflow/providers/cncf/kubernetes/__init__.py | 2 +-
.../providers/cncf/kubernetes/hooks/kubernetes.py | 19 +-
.../providers/cncf/kubernetes/kube_client.py | 86 +-
.../unit/cncf/kubernetes/hooks/test_kubernetes.py | 38 +-
.../tests/unit/cncf/kubernetes/test_client.py | 124 ++-
providers/common/ai/.pre-commit-config.yaml | 6 +
providers/common/ai/README.rst | 8 +-
providers/common/ai/docs/changelog.rst | 26 +
providers/common/ai/docs/index.rst | 8 +-
providers/common/ai/provider.yaml | 3 +-
providers/common/ai/pyproject.toml | 8 +-
.../ai/src/airflow/providers/common/ai/__init__.py | 2 +-
.../airflow/providers/common/ai/durable/strands.py | 4 +-
.../ai/example_dags/example_agent_capabilities.py | 2 +-
.../ai/example_dags/example_sandbox_toolset.py | 2 +-
.../src/airflow/providers/common/ai/hooks/mcp.py | 12 +-
.../airflow/providers/common/ai/operators/agent.py | 2 +-
.../providers/common/ai/plugins/www/package.json | 2 +-
.../providers/common/ai/plugins/www/pnpm-lock.yaml | 355 ++++----
.../airflow/providers/common/ai/tools/strands.py | 2 +-
.../airflow/providers/common/ai/utils/decision.py | 2 +-
.../unit/common/ai/durable/test_fingerprint.py | 6 +-
.../tests/unit/common/ai/hooks/test_pydantic_ai.py | 2 +-
.../tests/unit/common/ai/mixins/test_approval.py | 2 +-
.../ai/operators/test_llamaindex_embedding.py | 2 +-
.../ai/operators/test_llamaindex_retrieval.py | 2 +-
.../ai/tests/unit/common/ai/operators/test_llm.py | 2 +-
.../unit/common/ai/operators/test_llm_branch.py | 2 +-
.../common/ai/operators/test_llm_schema_compare.py | 2 +-
.../unit/common/ai/plugins/test_hitl_review.py | 16 +-
.../tests/unit/common/ai/policies/test_decision.py | 2 +-
.../ai/tests/unit/common/ai/policies/test_retry.py | 14 +-
.../ai/tests/unit/common/ai/sandbox/test_base.py | 4 +-
.../ai/tests/unit/common/ai/sandbox/test_modal.py | 2 +-
.../ai/tests/unit/common/ai/sandbox/test_sbx.py | 2 +-
.../ai/tests/unit/common/ai/tools/test_strands.py | 2 +-
.../unit/common/ai/toolsets/test_managed_agent.py | 2 +-
providers/common/compat/.pre-commit-config.yaml | 2 +
providers/common/compat/README.rst | 6 +-
providers/common/compat/docs/changelog.rst | 19 +
providers/common/compat/docs/index.rst | 6 +-
providers/common/compat/provider.yaml | 3 +-
providers/common/compat/pyproject.toml | 6 +-
.../airflow/providers/common/compat/__init__.py | 2 +-
.../tests/unit/common/compat/test__retry_policy.py | 4 +-
providers/common/io/README.rst | 8 +-
providers/common/io/docs/changelog.rst | 18 +
providers/common/io/docs/index.rst | 8 +-
providers/common/io/provider.yaml | 3 +-
providers/common/io/pyproject.toml | 8 +-
.../io/src/airflow/providers/common/io/__init__.py | 2 +-
.../common/io/example_file_transfer_local_to_s3.py | 2 +-
providers/common/sql/README.rst | 8 +-
providers/common/sql/docs/changelog.rst | 12 +
providers/common/sql/docs/index.rst | 8 +-
providers/common/sql/provider.yaml | 3 +-
providers/common/sql/pyproject.toml | 8 +-
.../src/airflow/providers/common/sql/__init__.py | 2 +-
.../src/airflow/providers/common/sql/hooks/sql.py | 7 +-
.../sql/tests/unit/common/sql/hooks/test_sql.py | 33 +
.../unit/common/sql/operators/test_analytics.py | 2 +-
providers/databricks/README.rst | 10 +-
providers/databricks/docs/changelog.rst | 32 +
providers/databricks/docs/index.rst | 8 +-
providers/databricks/provider.yaml | 3 +-
providers/databricks/pyproject.toml | 8 +-
.../src/airflow/providers/databricks/__init__.py | 2 +-
providers/dbt/cloud/README.rst | 14 +-
providers/dbt/cloud/docs/changelog.rst | 11 +
providers/dbt/cloud/docs/index.rst | 6 +-
providers/dbt/cloud/provider.yaml | 3 +-
providers/dbt/cloud/pyproject.toml | 6 +-
.../src/airflow/providers/dbt/cloud/__init__.py | 2 +-
providers/discord/README.rst | 6 +-
providers/discord/docs/changelog.rst | 11 +
providers/discord/docs/index.rst | 6 +-
providers/discord/provider.yaml | 3 +-
providers/discord/pyproject.toml | 6 +-
.../src/airflow/providers/discord/__init__.py | 2 +-
providers/edge3/.pre-commit-config.yaml | 12 +
providers/edge3/README.rst | 6 +-
providers/edge3/docs/changelog.rst | 20 +
providers/edge3/docs/index.rst | 6 +-
providers/edge3/provider.yaml | 3 +-
providers/edge3/pyproject.toml | 6 +-
.../edge3/src/airflow/providers/edge3/__init__.py | 2 +-
.../src/airflow/providers/edge3/cli/worker.py | 25 +-
.../providers/edge3/plugins/www/package.json | 22 +-
.../providers/edge3/plugins/www/pnpm-lock.yaml | 676 +++++++-------
.../providers/edge3/worker_api/routes/logs.py | 35 +-
.../edge3/worker_api/v2-edge-generated.yaml | 12 +
.../edge3/tests/unit/edge3/cli/test_worker.py | 54 ++
.../unit/edge3/worker_api/routes/test_logs.py | 95 +-
providers/elasticsearch/README.rst | 6 +-
providers/elasticsearch/docs/changelog.rst | 16 +
providers/elasticsearch/docs/index.rst | 6 +-
providers/elasticsearch/provider.yaml | 3 +-
providers/elasticsearch/pyproject.toml | 6 +-
.../airflow/providers/elasticsearch/__init__.py | 2 +-
providers/fab/.pre-commit-config.yaml | 12 +
providers/fab/README.rst | 6 +-
providers/fab/docs/changelog.rst | 33 +
providers/fab/docs/index.rst | 6 +-
providers/fab/provider.yaml | 3 +-
providers/fab/pyproject.toml | 6 +-
.../fab/src/airflow/providers/fab/__init__.py | 2 +-
.../fab/src/airflow/providers/fab/www/package.json | 4 +-
.../src/airflow/providers/fab/www/pnpm-lock.yaml | 243 +++--
providers/git/docs/changelog.rst | 1 +
.../git/src/airflow/providers/git/bundles/git.py | 20 +-
.../src/airflow/providers/git/version_compat.py | 3 +-
providers/git/tests/unit/git/bundles/test_git.py | 69 +-
providers/google/README.rst | 10 +-
providers/google/docs/changelog.rst | 55 ++
providers/google/docs/index.rst | 10 +-
providers/google/provider.yaml | 3 +-
providers/google/pyproject.toml | 10 +-
.../src/airflow/providers/google/__init__.py | 2 +-
.../google/cloud/hooks/kubernetes_engine.py | 4 +-
.../google/cloud/log/cloud_logging_task_handler.py | 71 +-
.../google/cloud/hooks/test_kubernetes_engine.py | 2 +-
.../tests/unit/google/cloud/links/test_alloy_db.py | 62 --
.../unit/google/cloud/links/test_managed_kafka.py | 79 --
.../cloud/log/test_cloud_logging_task_handler.py | 260 +++++-
providers/hashicorp/README.rst | 8 +-
providers/hashicorp/docs/changelog.rst | 11 +
providers/hashicorp/docs/index.rst | 6 +-
providers/hashicorp/provider.yaml | 3 +-
providers/hashicorp/pyproject.toml | 6 +-
.../src/airflow/providers/hashicorp/__init__.py | 2 +-
.../dev/informatica_simulator/requirements.txt | 2 +-
providers/keycloak/.pre-commit-config.yaml | 4 +
providers/keycloak/README.rst | 6 +-
providers/keycloak/docs/changelog.rst | 12 +
providers/keycloak/docs/index.rst | 6 +-
providers/keycloak/provider.yaml | 3 +-
providers/keycloak/pyproject.toml | 6 +-
.../src/airflow/providers/keycloak/__init__.py | 2 +-
providers/microsoft/azure/README.rst | 8 +-
providers/microsoft/azure/docs/changelog.rst | 26 +
providers/microsoft/azure/docs/index.rst | 8 +-
providers/microsoft/azure/provider.yaml | 3 +-
providers/microsoft/azure/pyproject.toml | 8 +-
.../airflow/providers/microsoft/azure/__init__.py | 2 +-
providers/openai/README.rst | 6 +-
providers/openai/docs/changelog.rst | 16 +
providers/openai/docs/index.rst | 6 +-
providers/openai/provider.yaml | 3 +-
providers/openai/pyproject.toml | 6 +-
.../src/airflow/providers/openai/__init__.py | 2 +-
providers/openlineage/README.rst | 6 +-
providers/openlineage/docs/changelog.rst | 32 +
providers/openlineage/docs/index.rst | 6 +-
providers/openlineage/provider.yaml | 3 +-
providers/openlineage/pyproject.toml | 6 +-
.../src/airflow/providers/openlineage/__init__.py | 2 +-
providers/opensearch/README.rst | 6 +-
providers/opensearch/docs/changelog.rst | 16 +
providers/opensearch/docs/index.rst | 6 +-
providers/opensearch/provider.yaml | 3 +-
providers/opensearch/pyproject.toml | 6 +-
.../src/airflow/providers/opensearch/__init__.py | 2 +-
providers/smtp/README.rst | 6 +-
providers/smtp/docs/changelog.rst | 16 +
.../docs/{utils/emailer.rst => email-backend.rst} | 0
providers/smtp/docs/index.rst | 8 +-
providers/smtp/docs/redirects.txt | 4 +
providers/smtp/provider.yaml | 3 +-
providers/smtp/pyproject.toml | 6 +-
.../smtp/src/airflow/providers/smtp/__init__.py | 2 +-
providers/snowflake/README.rst | 10 +-
providers/snowflake/docs/changelog.rst | 47 +
providers/snowflake/docs/connections/snowflake.rst | 6 +
providers/snowflake/docs/index.rst | 8 +-
providers/snowflake/provider.yaml | 11 +-
providers/snowflake/pyproject.toml | 8 +-
.../src/airflow/providers/snowflake/__init__.py | 2 +-
.../providers/snowflake/get_provider_info.py | 5 +
.../airflow/providers/snowflake/hooks/snowflake.py | 67 +-
.../tests/unit/snowflake/hooks/test_snowflake.py | 175 +++-
providers/ssh/README.rst | 6 +-
providers/ssh/docs/changelog.rst | 11 +
providers/ssh/docs/index.rst | 6 +-
providers/ssh/provider.yaml | 3 +-
providers/ssh/pyproject.toml | 6 +-
.../ssh/src/airflow/providers/ssh/__init__.py | 2 +-
providers/standard/README.rst | 6 +-
providers/standard/docs/changelog.rst | 23 +
providers/standard/docs/index.rst | 6 +-
providers/standard/provider.yaml | 3 +-
providers/standard/pyproject.toml | 6 +-
.../src/airflow/providers/standard/__init__.py | 2 +-
providers/vespa/README.rst | 6 +-
providers/vespa/docs/changelog.rst | 17 +-
providers/vespa/docs/index.rst | 6 +-
providers/vespa/provider.yaml | 3 +-
providers/vespa/pyproject.toml | 6 +-
.../vespa/src/airflow/providers/vespa/__init__.py | 2 +-
pyproject.toml | 19 +-
registry/package.json | 4 +-
registry/pnpm-lock.yaml | 168 ++--
registry/src/stats.njk | 6 +
scripts/.pre-commit-config.yaml | 2 +
scripts/ci/install_breeze.sh | 2 +-
scripts/ci/prek/AGENTS.md | 4 +
scripts/ci/prek/check_prek_hooks_pycache_prefix.py | 76 ++
scripts/ci/prek/check_shared_mypy_hooks.py | 2 +
scripts/ci/prek/generate_yaml_importer_schema.py | 1 +
scripts/ci/prek/upgrade_important_versions.py | 7 +-
.../prek/test_check_prek_hooks_pycache_prefix.py | 40 +-
.../ci/prek/test_upgrade_important_versions.py | 50 ++
scripts/tools/setup_breeze | 2 +-
shared/configuration/.pre-commit-config.yaml | 2 +
shared/dagnode/.pre-commit-config.yaml | 2 +
shared/listeners/.pre-commit-config.yaml | 2 +
shared/logging/.pre-commit-config.yaml | 2 +
.../src/airflow_shared/logging/structlog.py | 15 +-
shared/logging/tests/logging/test_structlog.py | 1 +
shared/module_loading/.pre-commit-config.yaml | 2 +
shared/observability/.pre-commit-config.yaml | 2 +
.../observability/metrics/metrics_template.yaml | 24 +-
shared/plugins_manager/.pre-commit-config.yaml | 2 +
.../src/airflow_shared/plugins_manager/__init__.py | 2 +
.../plugins_manager/plugins_manager.py | 31 +
shared/providers_discovery/.pre-commit-config.yaml | 2 +
shared/secrets_backend/.pre-commit-config.yaml | 2 +
shared/secrets_masker/.pre-commit-config.yaml | 2 +
shared/serialization/.pre-commit-config.yaml | 2 +
shared/state/.pre-commit-config.yaml | 2 +
shared/template_rendering/.pre-commit-config.yaml | 2 +
shared/timezones/.pre-commit-config.yaml | 2 +
task-sdk-integration-tests/.pre-commit-config.yaml | 2 +
task-sdk/.pre-commit-config.yaml | 6 +
task-sdk/docs/ts-bundle-spec.rst | 2 +-
.../src/airflow/sdk/api/datamodels/_generated.py | 8 +-
.../src/airflow/sdk/coordinators/_subprocess.py | 35 +
task-sdk/src/airflow/sdk/execution_time/comms.py | 9 +-
task-sdk/src/airflow/sdk/execution_time/loop.py | 25 +-
.../airflow/sdk/execution_time/schema/schema.json | 143 +--
.../sdk/execution_time/schema/versions/__init__.py | 4 +
.../execution_time/schema/versions/v2026_10_30.py | 29 +
.../src/airflow/sdk/execution_time/supervisor.py | 33 +-
.../src/airflow/sdk/execution_time/task_runner.py | 30 +-
.../sdk/importers/yaml_importer/importer.py | 20 +-
.../sdk/importers/yaml_importer/schema.json | 3 +-
task-sdk/src/airflow/sdk/types.py | 11 +
.../tests/task_sdk/coordinators/test_subprocess.py | 86 ++
.../execution_time/schema/test_migrator.py | 15 +
.../tests/task_sdk/execution_time/test_loop.py | 100 ++-
.../task_sdk/execution_time/test_supervisor.py | 84 +-
.../task_sdk/execution_time/test_task_runner.py | 4 +-
.../importers/yaml_importer/test_importer.py | 55 +-
ts-sdk/.pre-commit-config.yaml | 14 +
ts-sdk/DEVELOPMENT.md | 14 +-
ts-sdk/README.md | 268 +-----
ts-sdk/api-docs/dag-authoring-api.ts | 2 +-
ts-sdk/docs/index.md | 43 +-
ts-sdk/docs/package-lock.json | 4 +-
ts-sdk/docs/package.json | 2 +-
ts-sdk/docs/tests/deployment-checks.test.mjs | 4 +-
ts-sdk/example/README.md | 80 +-
ts-sdk/example/package.json | 2 +-
ts-sdk/package.json | 2 +-
ts-sdk/pnpm-lock.yaml | 96 +-
ts-sdk/schema/supervisor-schema.json | 143 +--
.../ci/prek/check_serialization_conformance.py | 2 +-
ts-sdk/src/coordinator/client.ts | 3 -
ts-sdk/src/coordinator/serde.ts | 36 +-
ts-sdk/src/generated/supervisor.ts | 56 +-
ts-sdk/src/index.ts | 2 +-
ts-sdk/src/sdk/dag-graph.ts | 19 +-
ts-sdk/src/sdk/dag.ts | 209 ++++-
ts-sdk/tests/conformance/serialize_typescript.ts | 7 +-
ts-sdk/tests/coordinator/serde.test.ts | 220 ++++-
ts-sdk/tests/public-api.test.ts | 10 +-
ts-sdk/tests/sdk/branching.test.ts | 8 +-
ts-sdk/tests/sdk/conditional.test.ts | 10 +-
ts-sdk/tests/sdk/dag.test.ts | 133 ++-
uv.lock | 142 +--
670 files changed, 19430 insertions(+), 5653 deletions(-)
create mode 100644 airflow-core/docs/howto/custom-action-plugin.rst
create mode 100644 airflow-core/newsfragments/74896.bugfix.rst
create mode 100644
airflow-core/src/airflow/migrations/versions/0148_3_4_0_add_pending_partition_key_to_apdr.py
rename
airflow-core/src/airflow/migrations/versions/{0148_3_5_0_add_session_id_to_job.py
=> 0149_3_5_0_add_session_id_to_job.py} (97%)
copy airflow-core/src/airflow/ui/src/{pages/Dag/Code/FileLocation.test.tsx =>
components/AssetExpression/AssetNode.test.tsx} (52%)
create mode 100644
airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceConfirmationDialog.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/FilterBar/filters/TagsFilter.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginActionBoundary.tsx
copy dev/react-plugin-tools/react_plugin_template/src/pages/HomePage.tsx =>
airflow-core/src/airflow/ui/src/components/PluginActions/PluginActionIcon.tsx
(54%)
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginActions.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginActions.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginActionsContext.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginLinkAction.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/PluginReactAction.tsx
copy airflow-core/src/airflow/ui/src/components/{Breadcrumb =>
PluginActions}/index.ts (79%)
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/pluginActionContext.test.ts
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/pluginActionContext.ts
create mode 100644
airflow-core/src/airflow/ui/src/components/PluginActions/types.ts
create mode 100644
airflow-core/src/airflow/ui/src/hooks/usePluginActions.test.ts
create mode 100644 airflow-core/src/airflow/ui/src/hooks/usePluginActions.ts
create mode 100644
airflow-core/src/airflow/ui/src/i18n/dayjsArabicPlurals.test.ts
create mode 100644 airflow-core/src/airflow/ui/src/i18n/dayjsArabicPlurals.ts
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Gantt/Gantt.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/GridFilters.test.tsx
copy
airflow-core/src/airflow/ui/src/pages/{TaskStateStore/AddTaskStateStoreButton.tsx
=> Dag/Versions/DiffUnavailableAlert.tsx} (55%)
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Versions/DiffValue.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Versions/MaxChangesField.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Versions/MaxChangesField.tsx
copy airflow-core/src/airflow/ui/src/{components/TruncatedText.tsx =>
pages/Dag/Versions/MonoText.tsx} (69%)
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Versions/PathText.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Versions/SelectedVersionsDiff.tsx
create mode 100644 airflow-core/src/airflow/ui/src/utils/pluginIcon.test.ts
copy airflow-core/src/airflow/ui/src/{components/DurationCell.tsx =>
utils/pluginIcon.ts} (54%)
create mode 100644 airflow-core/src/airflow/ui/src/utils/pluginTemplate.test.ts
create mode 100644 airflow-core/src/airflow/ui/src/utils/pluginTemplate.ts
create mode 100644
airflow-core/tests/unit/migrations/test_0148_add_pending_partition_key_to_apdr.py
copy providers/slack/tests/unit/slack/transfers/conftest.py =>
dev/breeze/tests/test_ci_group.py (58%)
create mode 100644 dev/breeze/tests/test_path_utils.py
create mode 100644 go-sdk/DEVELOPMENT.md
create mode 100644 go-sdk/example/README.md
create mode 100644
java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/execution/Cancellation.kt
create mode 100644
java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/execution/CancellationTest.kt
create mode 100644
java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/execution/LogSenderTest.kt
create mode 100644
providers/amazon/src/airflow/providers/amazon/aws/utils/deferral.py
create mode 100644
providers/amazon/tests/unit/amazon/aws/utils/test_deferral.py
delete mode 100644
providers/google/tests/unit/google/cloud/links/test_alloy_db.py
delete mode 100644
providers/google/tests/unit/google/cloud/links/test_managed_kafka.py
rename providers/smtp/docs/{utils/emailer.rst => email-backend.rst} (100%)
create mode 100644 providers/smtp/docs/redirects.txt
create mode 100755 scripts/ci/prek/check_prek_hooks_pycache_prefix.py
copy
airflow-core/src/airflow/api_fastapi/execution_api/versions/v2026_10_30_xcom_params.py
=> scripts/tests/ci/prek/test_check_prek_hooks_pycache_prefix.py (51%)