This is an automated email from the ASF dual-hosted git repository.
ashb pushed a change to branch store-historic-ti-ownership-data
in repository https://gitbox.apache.org/repos/asf/airflow.git
omit f04f885da72 fixup! Reduced diffs now we added with_loader_options
omit 3ef0a2126b6 Reduced diffs now we added with_loader_options
omit abbe85531c3 fixup! Keep retired task attempts and their data under the
attempt UUID
omit fe63e95cc25 fixup! Keep retired task attempts and their data under the
attempt UUID
omit d7343f3ed18 fixup! Keep retired task attempts and their data under the
attempt UUID
omit edc3eaf7e2f fixup! Keep retired task attempts and their data under the
attempt UUID
omit cfe31e0be85 fixup! Keep retired task attempts and their data under the
attempt UUID
omit bdcbb616fc6 Keep retired task attempts and their data under the
attempt UUID
add 5487c080bea Add Azure Blob Storage support to the DataFusion object
storage layer (#73374)
add b191cc4767b Fail instead of silently falling behind when a Lang-SDK
vendored Dag schema drifts from airflow-core (#74091)
add e0202f40c78 Let a Dag importer find the coordinator that parses its
files (#74042)
add 94a677e8f87 Keep callback triggers assigned to healthy triggerers
(#72848)
add 4e1f2aca67f Keep the Dag trigger button one-click when a run has
config (#74039)
add bfe84598a52 Fix destination path validation in GCS-to-SFTP transfers
(#74186)
add 8239997bf20 Scope UI next_run_assets endpoint to assets the caller may
read (#72862)
add 7df6f0e69cc Parse native Lang-SDK Dags in the Dag processor with their
runtime (#74035)
add cffc14d173b Parse native Lang-SDK Dags in a Dag bag (#74043)
add e08216d0081 Go SDK: delete the XComs of earlier tries before a task
runs (#74178)
add ae082ab651f Go SDK: add dag.TaskGroup with nesting and group-level
edges (#74214)
add fa65343163d Remove FAB-related exclusion in SQLA tests (#74180)
add dbee3c6c11b Fix concurrent SFTP directory transfers dropping parent
hook's connection overrides (#73647)
add b79acc8a8d6 Fix google provider BQ openlineage checks (#71777)
add d6ab1aad3c6 Register TypeScript, Java and Go grammars for the Dag Code
tab (#74231)
add 747f69b1a8c Warn when db clean skips only some rows of a batch (#73568)
add 9b2cc1352c3 Handle plain Step Functions execution errors (#73881)
add d339bb2767a Fix Dataproc triggers swallowing task cancellation (#74192)
add e0e3454998f Add v3-4-test to CI, dependabot, backport, and fork-sync
configuration (#74219)
add 98e753847a3 Distinguish credential failures from AWS waiter exhaustion
(#73870)
add 71f98d3ac00 UI: Group digits of counters according to the selected
locale (#73713)
add 2d734dc9842 UI: Deflake backfill e2e tests on WebKit (#74200)
add 20f90a6e105 UI: Keep Dags list table rows on a single line (#74002)
add dafa0555a0e Bump stylelint (#74252)
add 08fae625769 Add datafusion handler for google cleanup script (#74234)
add 11bf87404c2 Restrict the second render pass in
SqlToSlackWebhookOperator (#71402)
add a048842a72a Fix google provider system tests dag version increase
issues (#72194)
add 48f6b517397 Require moto 5.2.2 or newer for the Amazon provider tests
(#74224)
add eb89b4092b9 Fix SSH commands failing when the task holds over 1024
file descriptors (#74211)
add 86aef85e35c Keep S3 Dag bundle downloads within the configured
directory (#73756)
add 1ab53cd8e38 Keep the Dag asset schedule the same shape for every
caller (#73805)
add fbdec9503c7 Support Table objects in BigQueryHook.create_table
table_resource (#73099)
add 67853607ab2 Add async Variable methods (aget, aset, adelete, akeys)
(#72329)
add 353d856281c Stop Kafka hook tests from leaving live clients behind
(#74285)
add b2786de47b7 Close German Translation Gaps 2026-10-05 (#74264)
add 2b33f02539a UI: Open provider connection fields by default and title
them by connection type (#74273)
add d4a47caaf09 Notify downstream Dags when COPY INTO writes a Unity
(Databricks) table (#74191)
add 51184d53a52 Clarify Dag processor scoping and team config in
Multi-Team docs (#73958)
add c9abbdbdb87 Bump the auth-ui-package-updates group across 1 directory
with 5 updates (#74254)
add 2793a170be5 Fix connection screenshots missing from the msgraph and
IBM MQ docs (#74287)
add f5774789ea0 Pr/split storage tab (#73989)
add 3a7e6031c6f corrected label for filter (#74189)
add 758ebbd35f4 Document decision models served over the System One API in
common.ai (#74266)
add 37df9a5a4ac Wait for the Lang-SDK runtime's descriptors to settle
before checking them (#74288)
add fd7ac131553 Clarify how the providers vote result lists voters (#73883)
add ed1435c2b57 UI: Surface Dag run conf in the header (#73987)
add 9c1bb68c41f Increase worker startup timeout in LocalExecutor process
death test (#74292)
add 5ec2045d474 Fix PostgresToGCSOperator fetching one row at a time with
psycopg3 (#73324)
add 00bc44480c7 Apply impersonation_chain to deferred BigQuery existence
checks (#71648)
add 69f98974344 Look up task logs by task try UUID (#74204)
add 65596fb5ae6 Bump the eslint group across 1 directory with 5 updates
(#73488)
add 9081eda445e Support Pydantic structured outputs in
`OpenAIResponseOperator` (#69812)
add 31b774803ce Correct usage_limits=None docstring on AgentOperator and
LLMOperator (#74307)
add ab4da0b5636 Java SDK: Declare a Dag's task graph with @Builder.Deps
(#71189)
add 0bffacc8740 Update providers metadata 2026-10-05 (#74315)
add eda8563d983 Keep polling in the BigQuery check triggers while a job is
running (#74305)
add af61379fc14 Include prompt cache token counts in AgentOperator's usage
XCom (#74277)
add 77b21f34c05 Fix Common AI durable retries and tool-approval resumes on
pydantic-ai 2.50+ (#74313)
add dcc9ce6246f Fix Common AI durable retries not replaying tools from a
capability without an id (#74314)
add e25f413ff61 Let the Modal sandbox backend read credentials from a
modal connection (#74302)
add ac147d07ffe Remove `code_mode` from `AgentOperator` in favor of the
`CodeMode` capability (#74312)
add 246e3b231c9 Add `include_traceback` to model-backed retry policies
(#74308)
add d18b831afc2 Show staging-only commits before resetting staging to main
(#74116)
add 84f5e0990a0 TS SDK: Step over an empty nested task group to the group
holding it (#74323)
add 342157f5aed Go SDK: run unit tests with the race detector in CI
(#74215)
add 4329cd68465 Pause v3-4-test automation while it is fast-forwarded for
3.4.0 betas (#74327)
add 8d37613cba5 Guard the Dag Code tab's Monaco grammar exports against
drift (#74246)
add 6038d1156dd Scope audit log rows to a Dag only from the request path
or body (#74232)
add 14960cf4624 Add AIP-85 to the AIP progress tracker registry (#74304)
add 6b6b1fa2d92 Discover executable bundles by footer, not by execute bit
(#74227)
new 7374386f623 Keep retired task attempts and their data under the
attempt UUID
new c42c95c1594 fixup! Keep retired task attempts and their data under the
attempt UUID
new 09ad0e53fd1 fixup! Keep retired task attempts and their data under the
attempt UUID
new 781b212c3c5 fixup! Keep retired task attempts and their data under the
attempt UUID
new 24d5836dc4c fixup! Keep retired task attempts and their data under the
attempt UUID
new de76043cf9c fixup! Keep retired task attempts and their data under the
attempt UUID
new 9bd17a790f6 Reduced diffs now we added with_loader_options
new 4652e57b0df fixup! Reduced diffs now we added with_loader_options
new 08bd03ad9d7 fixup! Keep retired task attempts and their data under the
attempt UUID
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 (f04f885da72)
\
N -- N -- N refs/heads/store-historic-ti-ownership-data
(08bd03ad9d7)
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.
The 9 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.apache-magpie-overrides/release-vote-tally.md | 63 +
.github/boring-cyborg.yml | 33 +-
.github/dependabot.yml | 55 +-
.github/workflows/automatic-backport.yml | 14 +-
.github/workflows/ci-amd.yml | 5 +
.github/workflows/ci-arm.yml | 5 +
.github/workflows/ci-notification.yml | 2 +-
.github/workflows/milestone-tag-assistant.yml | 1 +
...t.yml => scheduled-upgrade-check-v3-4-test.yml} | 17 +-
.pre-commit-config.yaml | 42 +-
Dockerfile.ci | 7 +-
.../adr/lang-sdk/0010-native-dag-processing.md | 118 +-
.../authoring-and-scheduling/language-sdks/go.rst | 7 +-
.../language-sdks/java.rst | 77 ++
.../language-sdks/typescript.rst | 4 +
airflow-core/docs/core-concepts/multi-team.rst | 69 +-
airflow-core/docs/howto/usage-cli.rst | 2 +-
.../auth/managers/simple/ui/package.json | 10 +-
.../auth/managers/simple/ui/pnpm-lock.yaml | 332 ++---
.../api_fastapi/core_api/datamodels/ui/assets.py | 6 +
.../api_fastapi/core_api/openapi/_private_ui.yaml | 4 +
.../api_fastapi/core_api/routes/ui/assets.py | 19 +-
.../api_fastapi/core_api/routes/ui/gantt.py | 2 +-
.../execution_api/routes/task_instances.py | 6 +-
.../execution_api/routes/task_state_store.py | 2 +-
.../api_fastapi/execution_api/routes/xcoms.py | 8 +-
.../airflow/api_fastapi/execution_api/security.py | 10 +-
.../api_fastapi/execution_api/versions/__init__.py | 4 +-
.../execution_api/versions/v2026_10_30.py | 2 +-
.../src/airflow/api_fastapi/logging/decorators.py | 22 +-
.../src/airflow/cli/commands/dag_command.py | 9 +-
.../src/airflow/cli/commands/task_command.py | 5 +-
.../src/airflow/config_templates/config.yml | 14 +
airflow-core/src/airflow/dag_processing/dagbag.py | 157 ++-
.../src/airflow/dag_processing/importer_routing.py | 52 +
.../airflow/dag_processing/lang_sdk_processor.py | 579 +++++++++
airflow-core/src/airflow/dag_processing/manager.py | 48 +-
.../src/airflow/dag_processing/processor.py | 71 +-
.../0142_3_4_0_unify_task_attempt_ownership.py | 4 -
airflow-core/src/airflow/models/taskinstance.py | 26 +-
airflow-core/src/airflow/models/trigger.py | 1 +
airflow-core/src/airflow/models/xcom.py | 2 +-
.../src/airflow/serialization/definitions/dag.py | 2 +
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 5 +
.../airflow/ui/openapi-gen/requests/types.gen.ts | 1 +
airflow-core/src/airflow/ui/package.json | 10 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 490 ++++----
.../airflow/ui/public/i18n/locales/ar/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/ar/dag.json | 1 -
.../airflow/ui/public/i18n/locales/ca/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/ca/dag.json | 1 -
.../airflow/ui/public/i18n/locales/de/admin.json | 1 -
.../airflow/ui/public/i18n/locales/de/common.json | 7 +
.../ui/public/i18n/locales/de/components.json | 12 +
.../src/airflow/ui/public/i18n/locales/de/dag.json | 64 +-
.../airflow/ui/public/i18n/locales/de/dags.json | 7 +
.../airflow/ui/public/i18n/locales/el/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/el/dag.json | 1 -
.../airflow/ui/public/i18n/locales/en/admin.json | 2 +-
.../ui/public/i18n/locales/en/components.json | 4 +-
.../src/airflow/ui/public/i18n/locales/en/dag.json | 1 -
.../airflow/ui/public/i18n/locales/es/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/es/dag.json | 1 -
.../airflow/ui/public/i18n/locales/fr/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/fr/dag.json | 1 -
.../airflow/ui/public/i18n/locales/he/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/he/dag.json | 1 -
.../airflow/ui/public/i18n/locales/hi/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/hi/dag.json | 1 -
.../airflow/ui/public/i18n/locales/hu/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/hu/dag.json | 1 -
.../airflow/ui/public/i18n/locales/it/admin.json | 1 -
.../airflow/ui/public/i18n/locales/ja/admin.json | 1 -
.../airflow/ui/public/i18n/locales/ko/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/ko/dag.json | 1 -
.../airflow/ui/public/i18n/locales/nl/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/nl/dag.json | 1 -
.../airflow/ui/public/i18n/locales/pl/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/pl/dag.json | 1 -
.../airflow/ui/public/i18n/locales/pt/admin.json | 1 -
.../airflow/ui/public/i18n/locales/ru/admin.json | 1 -
.../src/airflow/ui/public/i18n/locales/ru/dag.json | 1 -
.../airflow/ui/public/i18n/locales/th/admin.json | 1 -
.../airflow/ui/public/i18n/locales/tr/admin.json | 1 -
.../ui/public/i18n/locales/zh-CN/admin.json | 1 -
.../airflow/ui/public/i18n/locales/zh-CN/dag.json | 1 -
.../ui/public/i18n/locales/zh-TW/admin.json | 1 -
.../airflow/ui/public/i18n/locales/zh-TW/dag.json | 1 -
airflow-core/src/airflow/ui/rules/i18n.js | 8 +-
airflow-core/src/airflow/ui/rules/rem.js | 11 +-
.../components/ActionAccordion/ActionAccordion.tsx | 6 +-
.../src/airflow/ui/src/components/AnsiRenderer.tsx | 6 +-
.../src/components/AssetExpression/AssetNode.tsx | 7 +-
.../ui/src/components/AssetProgressCell.tsx | 6 +-
.../ui/src/components/Assets/AssetEvents.tsx | 6 +-
.../ui/src/components/Assets/ListPopover.tsx | 46 +-
.../ui/src/components/Assets/TriggeredRuns.tsx | 6 +-
.../ClearTaskInstanceConfirmationDialog.tsx | 4 +-
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 3 +-
.../DAGWarningsModal.test.tsx} | 25 +-
.../airflow/ui/src/components/DAGWarningsModal.tsx | 4 +
.../components/DagActions/RunBackfillForm.test.tsx | 1 +
.../ui/src/components/DataTable/DataTable.tsx | 4 +-
.../airflow/ui/src/components/DateTimeInput.tsx | 7 +-
.../airflow/ui/src/components/DurationChart.tsx | 2 +-
.../ui/src/components/FilterBar/FilterBar.tsx | 6 +-
.../FilterBar/filters/DateRangeCalendar.tsx | 10 +-
.../FilterBar/filters/DateRangeInputs.tsx | 5 +-
.../airflow/ui/src/components/FilterBar/utils.ts | 6 +-
.../components/FlexibleForm/FieldMultiSelect.tsx | 9 +-
.../src/components/FlexibleForm/FieldSelector.tsx | 14 +-
.../airflow/ui/src/components/Graph/DagNode.tsx | 2 +-
.../ui/src/components/Graph/SegmentedStateBar.tsx | 8 +-
.../airflow/ui/src/components/Graph/TaskLink.tsx | 6 +-
.../ImportErrorCount.test.tsx} | 36 +-
.../airflow/ui/src/components/ImportErrorCount.tsx | 7 +-
.../MonacoEditor/configureMonaco.test.ts | 44 +
.../src/components/MonacoEditor/configureMonaco.ts | 122 +-
.../ui/src/components/MonacoEditor/index.tsx | 12 +-
.../airflow/ui/src/components/NeedsReviewBadge.tsx | 6 +-
.../src/airflow/ui/src/components/PoolBar.test.tsx | 24 +-
.../src/airflow/ui/src/components/PoolBar.tsx | 7 +-
.../ui/src/components/ReactMarkdownBlocks.tsx | 10 +-
.../ui/src/components/RenderedJsonField.tsx | 6 +-
.../ui/src/components/RollupKeyChecklist.tsx | 51 +-
.../ui/src/components/SqlParserProvider.tsx | 6 +-
.../StatsCard.test.tsx} | 23 +-
.../src/airflow/ui/src/components/StatsCard.tsx | 7 +-
.../ui/src/components/TaskInstanceTooltip.test.tsx | 30 +-
.../ui/src/components/TaskInstanceTooltip.tsx | 6 +-
.../src/airflow/ui/src/components/TaskName.tsx | 9 +-
.../airflow/ui/src/components/TrendCountButton.tsx | 12 +-
.../TriggerDag/TriggerDAGButton.test.tsx | 102 +-
.../src/components/TriggerDag/TriggerDAGButton.tsx | 167 +--
.../src/airflow/ui/src/constants/filterConfigs.tsx | 2 +-
.../ui/src/hooks/navigation/useNavigation.ts | 7 +-
.../src/airflow/ui/src/hooks/useAdvancedSearch.ts | 2 +-
.../ui/src/layouts/Details/DagBreadcrumb.tsx | 4 +-
.../ui/src/layouts/Details/DetailsLayout.tsx | 8 +-
.../ui/src/layouts/Details/Gantt/GanttTimeline.tsx | 12 +-
.../Graph/hooks/useFilteredNodesAndEdges.ts | 5 +-
.../layouts/Details/Graph/useGraphFilteredNodes.ts | 6 +-
.../src/airflow/ui/src/layouts/StorageLayout.tsx | 40 -
.../src/airflow/ui/src/mocks/handlers/dags.ts | 5 +-
.../airflow/ui/src/pages/AssetsList/AssetsList.tsx | 6 +-
.../ui/src/pages/AssetsList/DependencyPopover.tsx | 6 +-
.../src/pages/Connections/ConnectionForm.test.tsx | 121 ++
.../ui/src/pages/Connections/ConnectionForm.tsx | 14 +-
.../ui/src/pages/Connections/Connections.tsx | 6 +-
.../pages/Dag/Backfills/BackfillDagRunsModal.tsx | 22 +-
.../ui/src/pages/Dag/Calendar/CalendarCell.tsx | 5 +-
.../ui/src/pages/Dag/Calendar/CalendarTooltip.tsx | 25 +-
airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx | 15 +-
.../src/airflow/ui/src/pages/Dag/Details.tsx | 12 +-
.../src/airflow/ui/src/pages/Dag/Header.test.tsx | 12 +
.../src/airflow/ui/src/pages/Dag/Header.tsx | 7 +-
.../airflow/ui/src/pages/DagBundle/BundleFiles.tsx | 7 +-
.../src/airflow/ui/src/pages/DagBundle/Header.tsx | 5 +-
.../src/pages/DagRuns/BulkDeleteDagRunsButton.tsx | 5 +-
.../src/pages/DagRuns/BulkMarkDagRunsAsButton.tsx | 5 +-
.../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx | 6 +-
.../ui/src/pages/DagsList/AssetSchedule.test.tsx | 125 ++
.../ui/src/pages/DagsList/AssetSchedule.tsx | 12 +-
.../pages/DagsList/BulkPauseDrainDagsButton.tsx | 5 +-
.../src/pages/DagsList/BulkUnpauseDagsButton.tsx | 5 +-
.../src/pages/DagsList/DagRunStateCounts.test.tsx | 13 +-
.../ui/src/pages/DagsList/DagRunStateCounts.tsx | 5 +-
.../ui/src/pages/DagsList/DagsList.test.tsx | 34 +
.../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 45 +-
.../DagsList/Schedule.test.tsx} | 47 +-
.../src/airflow/ui/src/pages/DagsList/Schedule.tsx | 2 +-
.../Dashboard/HistoricalMetrics/MetricSection.tsx | 3 +-
.../Dashboard/PoolSummary/PoolSummary.test.tsx | 9 +-
.../pages/Dashboard/PoolSummary/PoolSummary.tsx | 2 +-
.../src/pages/Dashboard/Stats/DagImportErrors.tsx | 4 +-
.../pages/Dashboard/Stats/DagImportErrorsModal.tsx | 3 +-
.../pages/Dashboard/Stats/PluginImportErrors.tsx | 4 +-
.../ui/src/pages/Dashboard/Stats/Stats.test.tsx | 5 +-
.../src/airflow/ui/src/pages/Deadlines/index.tsx | 3 +-
.../ui/src/pages/GroupTaskInstance/Header.tsx | 6 +-
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 2 +-
.../src/airflow/ui/src/pages/LandingPage.tsx | 6 +-
.../ui/src/pages/MappedTaskInstance/Details.tsx | 6 +-
.../ui/src/pages/MappedTaskInstance/Header.tsx | 8 +-
.../MappedTaskInstance/MappedTaskInstance.tsx | 10 +-
.../src/airflow/ui/src/pages/Pools/PoolBarCard.tsx | 7 +-
.../src/airflow/ui/src/pages/Pools/PoolForm.tsx | 15 +-
.../src/airflow/ui/src/pages/Run/AssetEvents.tsx | 4 +-
.../src/airflow/ui/src/pages/Run/Details.tsx | 14 +-
.../src/airflow/ui/src/pages/Run/Header.tsx | 19 +-
airflow-core/src/airflow/ui/src/pages/Run/Run.tsx | 2 +-
.../ui/src/pages/TaskInstance/AssetEvents.tsx | 2 +-
.../airflow/ui/src/pages/TaskInstance/Details.tsx | 14 +-
.../ui/src/pages/TaskInstance/HITLResponse.tsx | 2 +-
.../ui/src/pages/TaskInstance/Logs/logSelection.ts | 16 +-
.../src/pages/TaskInstance/Logs/useLogGroups.tsx | 14 +-
.../ui/src/pages/TaskInstance/Logs/utils.ts | 24 +-
.../src/pages/TaskInstance/TaskInstance.test.tsx | 3 +-
.../ui/src/pages/TaskInstance/TaskInstance.tsx | 23 +-
.../BulkDeleteTaskInstancesButton.tsx | 5 +-
.../BulkMarkTaskInstancesAsButton.tsx | 5 +-
.../ui/src/pages/TaskInstances/TaskInstances.tsx | 6 +-
.../ui/src/pages/TaskStateStore/TaskStateStore.tsx | 2 +-
.../pages/TaskStateStore/TaskStateStoreModal.tsx | 5 +-
.../airflow/ui/src/pages/Variables/Variables.tsx | 6 +-
.../ui/src/queries/useDagBundleRefetchInterval.ts | 8 +-
.../ui/src/queries/useDagRunStateCounts.tsx | 3 +-
.../src/airflow/ui/src/queries/useDags.tsx | 17 +-
.../src/airflow/ui/src/queries/useDeadlines.ts | 2 +-
.../src/airflow/ui/src/queries/useLogs.tsx | 7 +-
.../src/airflow/ui/src/queries/useParamStore.ts | 8 +-
.../ui/src/queries/useRefreshOnNewDagRuns.ts | 2 +-
airflow-core/src/airflow/ui/src/queryClient.ts | 8 +-
airflow-core/src/airflow/ui/src/router.tsx | 10 +-
.../ui/src/system-components/Menu/MenuTrigger.tsx | 2 +-
.../ui/src/system-components/Pagination/Item.tsx | 6 +-
.../src/system-components/Pagination/PageText.tsx | 10 +-
.../ui/src/system-components/Select/ValueText.tsx | 11 +-
.../src/airflow/ui/src/utils/datetimeUtils.ts | 65 +-
.../context.ts => utils/formatNumber.test.ts} | 24 +-
.../ui/selectors.ts => src/utils/formatNumber.ts} | 14 +-
airflow-core/src/airflow/ui/src/utils/index.ts | 1 +
airflow-core/src/airflow/ui/src/utils/intlCache.ts | 48 +
.../src/airflow/ui/src/utils/jsonPreview.ts | 16 +-
airflow-core/src/airflow/ui/src/utils/links.ts | 21 +-
airflow-core/src/airflow/ui/src/utils/logs.ts | 8 +-
.../src/airflow/ui/src/utils/pluginAppliesTo.ts | 15 +-
airflow-core/src/airflow/ui/src/utils/query.ts | 6 +-
airflow-core/src/airflow/ui/src/utils/tab.ts | 6 +-
airflow-core/src/airflow/ui/src/vite-env.d.ts | 23 +-
.../src/airflow/ui/tests/e2e/pages/BackfillPage.ts | 26 +-
.../airflow/ui/tests/e2e/pages/ConnectionsPage.ts | 26 +-
.../src/airflow/ui/tests/e2e/pages/DagsPage.ts | 8 +-
.../src/airflow/ui/tests/e2e/pages/EventsPage.ts | 6 +-
.../airflow/ui/tests/e2e/specs/dag-tasks.spec.ts | 8 +-
.../src/airflow/ui/tests/e2e/utils/shared.ts | 6 +-
airflow-core/src/airflow/utils/cli.py | 48 +-
airflow-core/src/airflow/utils/db_cleanup.py | 30 +-
.../core_api/routes/public/test_hitl.py | 9 +-
.../core_api/routes/public/test_task_instances.py | 2 +-
.../api_fastapi/core_api/routes/ui/test_assets.py | 113 +-
.../core_api/routes/ui/test_dashboard.py | 2 +-
.../api_fastapi/execution_api/test_security.py | 52 +-
.../versions/head/test_task_instances.py | 2 +-
.../versions/head/test_task_state_store.py | 18 +
.../execution_api/versions/head/test_xcoms.py | 2 +-
.../versions/v2026_10_30/test_task_instances.py | 6 +-
.../unit/api_fastapi/logging/test_decorators.py | 52 +
.../tests/unit/cli/commands/test_dag_command.py | 3 +
.../tests/unit/cli/commands/test_task_command.py | 26 +
.../tests/unit/dag_processing/fake_lang_sdk.py | 144 +++
.../lang_sdk_fixtures/java_native.json | 151 +++
.../lang_sdk_fixtures/ts_conformance.json | 661 ++++++++++
.../tests/unit/dag_processing/test_dagbag.py | 304 +++++
.../unit/dag_processing/test_importer_routing.py | 63 +
.../unit/dag_processing/test_lang_sdk_processor.py | 855 +++++++++++++
.../tests/unit/dag_processing/test_manager.py | 241 +++-
.../tests/unit/dag_processing/test_processor.py | 69 +-
.../tests/unit/executors/test_local_executor.py | 15 +-
.../test_0142_unify_task_attempt_ownership.py | 4 +-
airflow-core/tests/unit/models/test_cleartasks.py | 8 +-
airflow-core/tests/unit/models/test_dagrun.py | 6 +-
.../tests/unit/models/test_mappedoperator.py | 4 +-
.../tests/unit/models/test_taskinstance.py | 88 +-
airflow-core/tests/unit/models/test_trigger.py | 49 +-
airflow-core/tests/unit/utils/test_cli_util.py | 79 ++
airflow-core/tests/unit/utils/test_db_cleanup.py | 63 +-
dev/README_RELEASE_AIRFLOW.md | 50 +
dev/README_RELEASE_PROVIDERS.md | 30 +-
dev/breeze/doc/09_release_management_tasks.rst | 4 +-
.../airflow_breeze/commands/workflow_commands.py | 23 +-
.../src/airflow_breeze/utils/gh_workflow_utils.py | 16 +
.../src/airflow_breeze/utils/verification_plan.py | 5 +-
dev/breeze/tests/test_gh_workflow_utils.py | 31 +
dev/breeze/tests/test_workflow_commands.py | 57 +-
dev/sync_fork.sh | 2 +-
.../tests_common/test_utils/attempt_ownership.py | 2 +-
docker-tests/tests/docker_tests/test_prod_image.py | 3 -
docs/spelling_wordlist.txt | 1 +
generated/known_sdk_imports_in_core.txt | 2 +
generated/provider_metadata.json | 10 +
go-sdk/Justfile | 2 +-
go-sdk/README.md | 17 +-
go-sdk/adr/0008-native-dag-interface.md | 21 +-
go-sdk/airflow/bundle.go | 11 +-
go-sdk/airflow/dag.go | 179 ++-
go-sdk/airflow/if.go | 30 +-
go-sdk/airflow/if_test.go | 47 +-
go-sdk/airflow/inputs.go | 14 +-
go-sdk/airflow/inputs_test.go | 4 +-
go-sdk/airflow/node.go | 172 ++-
go-sdk/airflow/node_test.go | 11 +-
go-sdk/airflow/spec.gen.go | 31 +-
go-sdk/airflow/spec.go | 6 +-
go-sdk/airflow/task_group.go | 553 +++++++++
go-sdk/airflow/task_group_test.go | 1274 ++++++++++++++++++++
go-sdk/airflow/task_option.go | 10 +-
go-sdk/airflow/trigger_dag_run.go | 4 +-
go-sdk/internal/bundle/task.go | 22 +-
go-sdk/internal/bundle/task_test.go | 35 +-
go-sdk/internal/genspec/authoring.go | 35 +-
go-sdk/internal/genspec/authoring_test.go | 22 +-
go-sdk/internal/genspec/main.go | 4 +-
go-sdk/internal/genspec/normalize.go | 14 +-
go-sdk/internal/genspec/normalize_test.go | 33 +-
go-sdk/pkg/execution/client.go | 32 +-
go-sdk/pkg/execution/client_test.go | 59 +
go-sdk/pkg/execution/integration_test.go | 326 ++++-
go-sdk/pkg/execution/task_runner.go | 64 +-
java-sdk/README.md | 6 +-
java-sdk/adr/0002-native-dag-interface.md | 7 +-
.../airflow/example/ExampleBundleBuilder.java | 3 +
.../example/nativedag/AnnotationExample.java | 73 ++
.../org/apache/airflow/sdk/BuilderProcessor.kt | 335 ++++-
.../kotlin/org/apache/airflow/sdk/BuilderTest.kt | 761 +++++++++++-
java-sdk/sdk/build.gradle.kts | 61 +-
.../src/main/kotlin/org/apache/airflow/sdk/Arg.kt | 22 +-
.../main/kotlin/org/apache/airflow/sdk/Bundle.kt | 68 +-
.../src/main/kotlin/org/apache/airflow/sdk/Deps.kt | 17 +-
.../kotlin/org/apache/airflow/sdk/internal/Refs.kt | 122 ++
.../org/apache/airflow/sdk/internal/Registrar.kt | 23 +
.../org/apache/airflow/sdk/ArgTestSupport.kt | 5 +-
.../kotlin/org/apache/airflow/sdk/BundleTest.kt | 118 +-
.../kotlin/org/apache/airflow/sdk/InputTaskTest.kt | 6 +-
.../apache/airflow/sdk/internal/ArgValuesTest.kt | 5 +-
.../org/apache/airflow/sdk/internal/RefsTest.kt | 158 +++
.../apache/airflow/sdk/internal/RegistrarTest.kt | 22 +-
.../apache/airflow/k8sexample/CombinedExample.java | 15 +-
.../airflow/k8sexample/K8sBundleBuilder.java | 17 +-
providers/amazon/docs/bundles/index.rst | 5 +
providers/amazon/docs/changelog.rst | 6 +
providers/amazon/docs/operators/step_functions.rst | 11 +
providers/amazon/pyproject.toml | 2 +-
.../src/airflow/providers/amazon/aws/bundles/s3.py | 6 +-
.../src/airflow/providers/amazon/aws/exceptions.py | 4 +
.../amazon/aws/operators/step_function.py | 5 +-
.../amazon/aws/utils/waiter_with_logging.py | 24 +-
.../tests/unit/amazon/aws/bundles/test_s3.py | 33 +
.../amazon/aws/operators/test_step_function.py | 51 +
.../amazon/aws/utils/test_waiter_with_logging.py | 135 ++-
.../tests/unit/apache/kafka/hooks/test_consume.py | 9 +-
.../tests/unit/apache/kafka/hooks/test_produce.py | 9 +-
.../kubernetes/executors/kubernetes_executor.py | 3 +
.../executors/kubernetes_executor_types.py | 1 +
.../executors/kubernetes_executor_utils.py | 2 +
.../executors/test_kubernetes_executor.py | 29 +
providers/common/ai/docs/approval_gates.rst | 4 +-
providers/common/ai/docs/capabilities.rst | 6 +-
providers/common/ai/docs/changelog.rst | 10 +
providers/common/ai/docs/code_mode.rst | 32 +-
.../{classifier_models.rst => decision_models.rst} | 158 ++-
providers/common/ai/docs/examples.rst | 6 +-
providers/common/ai/docs/features.rst | 4 +-
providers/common/ai/docs/index.rst | 5 +-
providers/common/ai/docs/installation.rst | 10 +-
providers/common/ai/docs/model_providers.rst | 12 +-
providers/common/ai/docs/operators/agent.rst | 10 +-
providers/common/ai/docs/operators/llm_branch.rst | 14 +-
.../ai/docs/operators/llm_schema_compare.rst | 2 +-
providers/common/ai/docs/operators/llm_sql.rst | 2 +-
providers/common/ai/docs/redirects.txt | 1 +
providers/common/ai/docs/retry_policies.rst | 114 +-
providers/common/ai/docs/sandbox/backends.rst | 12 +-
providers/common/ai/docs/sandbox/configuration.rst | 8 +-
providers/common/ai/docs/sandbox/index.rst | 35 +-
providers/common/ai/docs/self_hosted_models.rst | 3 +
providers/common/ai/docs/stability.rst | 6 +-
providers/common/ai/docs/tool_approval.rst | 8 +-
providers/common/ai/docs/toolsets/datafusion.rst | 2 +-
providers/common/ai/docs/troubleshooting.rst | 10 +-
providers/common/ai/docs/use_cases/index.rst | 3 +-
.../ai/docs/use_cases/route_pipeline_failures.rst | 25 +-
providers/common/ai/pyproject.toml | 15 +-
.../providers/common/ai/durable/fingerprint.py | 36 +-
.../common/ai/example_dags/example_agent.py | 9 +-
.../example_dags/example_aip_progress_tracker.py | 64 +-
...assifier_model.py => example_decision_model.py} | 79 +-
.../common/ai/example_dags/example_llm_branch.py | 5 +-
.../ai/example_dags/example_llm_retry_policy.py | 22 +-
.../airflow/providers/common/ai/operators/agent.py | 78 +-
.../airflow/providers/common/ai/operators/llm.py | 25 +-
.../providers/common/ai/operators/llm_branch.py | 14 +-
.../providers/common/ai/policies/decision.py | 4 +-
.../airflow/providers/common/ai/policies/retry.py | 75 +-
.../airflow/providers/common/ai/sandbox/modal.py | 80 +-
.../airflow/providers/common/ai/utils/decision.py | 12 +-
.../airflow/providers/common/ai/utils/logging.py | 2 +
.../providers/common/ai/utils/usage_budget.py | 12 +-
.../unit/common/ai/durable/test_fingerprint.py | 87 ++
.../tests/unit/common/ai/operators/test_agent.py | 150 +--
.../ai/operators/test_agent_tool_approval.py | 1 -
.../unit/common/ai/operators/test_llm_branch.py | 2 +-
.../unit/common/ai/plugins/test_hitl_review.py | 10 +-
.../ai/tests/unit/common/ai/policies/test_retry.py | 118 +-
.../ai/tests/unit/common/ai/sandbox/fake_modal.py | 47 +-
.../ai/tests/unit/common/ai/sandbox/test_modal.py | 148 ++-
.../ai/tests/unit/common/ai/utils/test_logging.py | 12 +-
.../unit/common/ai/utils/test_usage_budget.py | 42 +
providers/common/sql/docs/operators.rst | 60 +-
.../sql/src/airflow/providers/common/sql/config.py | 3 +
.../providers/common/sql/datafusion/engine.py | 185 +++
.../sql/datafusion/object_storage_provider.py | 36 +-
.../common/sql/example_dags/example_analytics.py | 13 +
.../unit/common/sql/datafusion/test_engine.py | 447 +++++++
.../sql/datafusion/test_object_storage_provider.py | 48 +
.../sql/tests/unit/common/sql/test_config.py | 1 +
providers/databricks/docs/operators/copy_into.rst | 81 ++
.../providers/databricks/assets/databricks.py | 37 +
.../databricks/operators/databricks_sql.py | 82 +-
.../unit/databricks/assets/test_databricks.py | 55 +
.../databricks/operators/test_databricks_copy.py | 215 +++-
providers/elasticsearch/docs/logging/index.rst | 5 +
.../providers/elasticsearch/log/es_task_handler.py | 43 +-
.../providers/elasticsearch/version_compat.py | 2 +
.../elasticsearch/log/test_es_remote_log_io.py | 32 +
.../unit/elasticsearch/log/test_es_task_handler.py | 44 +-
.../fab/src/airflow/providers/fab/www/package.json | 2 +-
.../src/airflow/providers/fab/www/pnpm-lock.yaml | 165 +--
.../providers/google/cloud/hooks/bigquery.py | 13 +-
.../google/cloud/log/cloud_logging_task_handler.py | 26 +-
.../providers/google/cloud/sensors/bigquery.py | 2 +
.../google/cloud/transfers/gcs_to_sftp.py | 29 +-
.../google/cloud/transfers/postgres_to_gcs.py | 14 +-
.../providers/google/cloud/triggers/bigquery.py | 34 +-
.../providers/google/cloud/triggers/dataproc.py | 3 +
.../src/airflow/providers/google/version_compat.py | 9 +-
.../google/cloud/bigquery/example_bigquery_dts.py | 3 +-
.../cloud/bigquery/example_bigquery_sensors.py | 3 -
.../cloud/bigquery/example_bigquery_tables.py | 21 +-
.../cloud/bigquery/example_bigquery_value_check.py | 2 +-
.../resources/openlineage/bigquery_dts.json | 18 +-
.../resources/openlineage/bigquery_operations.json | 8 +-
.../resources/openlineage/bigquery_tables.json | 12 +-
.../resources/openlineage/bigquery_transfer.json | 8 +-
.../cloud/composer/example_cloud_composer.py | 4 +-
.../google/cloud/dataplex/example_dataplex_dp.py | 2 +-
.../example_cloud_storage_transfer_service_aws.py | 64 +-
.../example_cloud_storage_transfer_service_gcp.py | 55 +-
.../system/google/cloud/tasks/example_tasks.py | 15 +-
.../marketing_platform/example_campaign_manager.py | 6 +-
.../system/google/resources_cleanup/README.md | 8 +
.../handlers/__init__.py | 2 +
.../handlers/{sqladmin.py => datafusion.py} | 42 +-
.../tests/unit/google/cloud/hooks/test_bigquery.py | 55 +-
.../cloud/log/test_cloud_logging_task_handler.py | 112 +-
.../unit/google/cloud/sensors/test_bigquery.py | 37 +
.../google/cloud/transfers/test_gcs_to_sftp.py | 50 +-
.../google/cloud/transfers/test_postgres_to_gcs.py | 61 +-
.../unit/google/cloud/triggers/test_bigquery.py | 121 ++
.../unit/google/cloud/triggers/test_dataproc.py | 63 +-
.../google/resources_cleanup/test_cmd_delete.py | 1 +
.../resources_cleanup/test_datafusion_handler.py | 67 +
providers/ibm/mq/docs/connections/ibmmq.rst | 9 +-
.../microsoft/azure/docs/connections/msgraph.rst | 9 +-
providers/openai/docs/operators/openai.rst | 42 +-
.../src/airflow/providers/openai/hooks/openai.py | 35 +-
.../airflow/providers/openai/operators/openai.py | 150 ++-
.../openai/tests/system/openai/example_openai.py | 14 +
.../openai/tests/unit/openai/hooks/test_openai.py | 34 +
.../tests/unit/openai/operators/test_openai.py | 307 ++++-
.../providers/opensearch/log/os_task_handler.py | 43 +-
.../airflow/providers/opensearch/version_compat.py | 2 +
.../opensearch/log/test_os_remote_log_io.py | 32 +
.../unit/opensearch/log/test_os_task_handler.py | 48 +-
.../sftp/src/airflow/providers/sftp/hooks/sftp.py | 44 +-
providers/sftp/tests/unit/sftp/hooks/test_sftp.py | 92 ++
.../slack/transfers/sql_to_slack_webhook.py | 28 +-
.../slack/transfers/test_sql_to_slack_webhook.py | 61 +
.../ssh/src/airflow/providers/ssh/hooks/ssh.py | 68 +-
providers/ssh/tests/unit/ssh/hooks/test_ssh.py | 106 +-
.../unit/standard/sensors/test_external_task.py | 2 +-
scripts/ci/lang_sdk_serialization/test_dags.yaml | 25 +
scripts/ci/prek/check_go_sdk_generated_drift.py | 5 +-
scripts/ci/prek/sync_go_sdk_schemas.py | 21 +-
scripts/ci/testing/run_unit_tests.sh | 2 +-
scripts/docker/entrypoint_ci.sh | 7 +-
task-sdk/docs/executable-bundle-spec.rst | 19 +-
.../src/airflow/sdk/coordinators/_dag_importer.py | 162 +++
.../src/airflow/sdk/coordinators/_subprocess.py | 127 +-
.../sdk/coordinators/executable/coordinator.py | 48 +-
task-sdk/src/airflow/sdk/definitions/variable.py | 55 +-
task-sdk/src/airflow/sdk/execution_time/context.py | 155 +++
.../src/airflow/sdk/execution_time/coordinator.py | 169 ++-
.../src/airflow/sdk/execution_time/task_runner.py | 38 +-
task-sdk/src/airflow/sdk/importers/base.py | 51 +-
.../coordinators/executable/test_coordinator.py | 80 +-
.../task_sdk/coordinators/test_dag_importer.py | 214 ++++
.../tests/task_sdk/coordinators/test_subprocess.py | 115 +-
.../tests/task_sdk/definitions/test_variables.py | 139 ++-
.../tests/task_sdk/execution_time/test_context.py | 350 +++++-
.../task_sdk/execution_time/test_coordinator.py | 327 ++++-
.../task_sdk/execution_time/test_supervisor.py | 2 +-
.../task_sdk/execution_time/test_task_runner.py | 130 ++
task-sdk/tests/task_sdk/importers/test_registry.py | 138 +++
ts-sdk/src/coordinator/serde.ts | 17 +-
ts-sdk/tests/coordinator/serde.test.ts | 42 +
uv.lock | 8 +-
497 files changed, 18044 insertions(+), 3124 deletions(-)
create mode 100644 .apache-magpie-overrides/release-vote-tally.md
rename .github/workflows/{scheduled-upgrade-check-v3-3-test.yml =>
scheduled-upgrade-check-v3-4-test.yml} (66%)
create mode 100644 airflow-core/src/airflow/dag_processing/importer_routing.py
create mode 100644
airflow-core/src/airflow/dag_processing/lang_sdk_processor.py
copy airflow-core/src/airflow/ui/src/{system-components/Pagination/context.ts
=> components/DAGWarningsModal.test.tsx} (64%)
copy airflow-core/src/airflow/ui/src/{pages/Dag/Code/FileLocation.test.tsx =>
components/ImportErrorCount.test.tsx} (54%)
create mode 100644
airflow-core/src/airflow/ui/src/components/MonacoEditor/configureMonaco.test.ts
copy
airflow-core/src/airflow/ui/src/{pages/Connections/NothingFoundInfo.test.tsx =>
components/StatsCard.test.tsx} (63%)
delete mode 100644 airflow-core/src/airflow/ui/src/layouts/StorageLayout.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/DagsList/AssetSchedule.test.tsx
copy airflow-core/src/airflow/ui/src/{layouts/Details/Grid/GridButton.test.tsx
=> pages/DagsList/Schedule.test.tsx} (52%)
copy airflow-core/src/airflow/ui/src/{system-components/Pagination/context.ts
=> utils/formatNumber.test.ts} (64%)
copy airflow-core/src/airflow/ui/{tests/e2e/utils/ui/selectors.ts =>
src/utils/formatNumber.ts} (54%)
create mode 100644 airflow-core/src/airflow/ui/src/utils/intlCache.ts
create mode 100644 airflow-core/tests/unit/dag_processing/fake_lang_sdk.py
create mode 100644
airflow-core/tests/unit/dag_processing/lang_sdk_fixtures/java_native.json
create mode 100644
airflow-core/tests/unit/dag_processing/lang_sdk_fixtures/ts_conformance.json
create mode 100644
airflow-core/tests/unit/dag_processing/test_importer_routing.py
create mode 100644
airflow-core/tests/unit/dag_processing/test_lang_sdk_processor.py
create mode 100644 go-sdk/airflow/task_group.go
create mode 100644 go-sdk/airflow/task_group_test.go
create mode 100644
java-sdk/example/src/java/org/apache/airflow/example/nativedag/AnnotationExample.java
create mode 100644
java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/Refs.kt
create mode 100644
java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/internal/RefsTest.kt
copy registry/src/_data/utils.js =>
java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/internal/RegistrarTest.kt
(66%)
rename providers/common/ai/docs/{classifier_models.rst => decision_models.rst}
(52%)
rename
providers/common/ai/src/airflow/providers/common/ai/example_dags/{example_classifier_model.py
=> example_decision_model.py} (60%)
copy
providers/google/tests/system/google/resources_cleanup/airflow_google_provider_resource_cleanup/handlers/{sqladmin.py
=> datafusion.py} (56%)
create mode 100644
providers/google/tests/unit/google/resources_cleanup/test_datafusion_handler.py
create mode 100644 task-sdk/src/airflow/sdk/coordinators/_dag_importer.py
create mode 100644 task-sdk/tests/task_sdk/coordinators/test_dag_importer.py