This is an automated email from the ASF dual-hosted git repository.
ashb pushed a change to branch provider-executors-keyed-by-uuid
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard ed8c4309d2f fixup! Carry task attempt UUIDs through remote executor
providers
discard 0919615c276 fixup! Carry task attempt UUIDs through remote executor
providers
discard c6b50b3c4da fixup! Carry task attempt UUIDs through remote executor
providers
discard 668671b2c72 Carry task attempt UUIDs through remote executor providers
omit 7ea8db2b1c4 fix tests
omit d99a22c6a88 Address Kaxil's review feedback
omit 4fdd03ab392 Correlate executor task events by attempt UUID
add dbac03d87dd Fix KubernetesExecutor not queuing tasks on Airflow 3.0.x
(#73764)
add b3bcb388742 Recognize grouped PR references in provider changelog
tooling (#73855)
add ae1e8385060 Let the sandbox toolset attach to a sandbox another task
provisioned (#73559)
add c1b878ad22c Exclude SQLAlchemy 2.1.0 (#73865)
add 10221c300eb Read the AWS task logs once more after the fetcher is
stopped (#73211)
add 84f75158120 Require `common.sql` 2.2.0 for common.ai's SQL extras
(#73867)
add 3f60fa9e2c7 Fix Firefox and WebKit UI e2e runs failing at login
(#73872)
add ac88accf4ed Add bundle_name tag to missing dag processor metrics
(#73717)
add 7afece8efb0 Update providers metadata 2026-09-29 (#73884)
add 4b6606543fd Distinguish OpenAI batch timeout and cancellation in
deferrable tasks (#72149)
add 8b3d4d315fa Surface the retry policy decision on task instances page
(#73030)
add bc28bb0804c Go SDK: Fix the mixed language task handler binding
semantic (#73648)
add 9ebc2644741 Revert "Secrets backends order updated (#70681)" (#73891)
add 4e23910701b Go SDK: check Go naming conventions with staticcheck
(#73874)
add 0768924a0cd Automatically isolate `breeze testing` for each git
worktree in a totally isolated project. (#73836)
add 3e8318969e1 Add ADR for Lang SDK Dag and mixed-language Task
processing flow (#71929)
add e8d43932077 Add ADR for supporting Dynamic Dag Generation across
Language SDKs (#73518)
add 8d815efdbc3 Own the BaseAsyncOperator event loop through
asyncio.Runner (#73560)
add 647add72afe Mark experimental `common.ai` features ahead of 1.0
(#73896)
add 5eba7439d76 Make cron timetables hashable (#73859)
add d776f003b71 UI: Add team column and filter to the jobs list (#73295)
add d0b8476825d Set `SameSite` on the fab auth manager session cookie
(#73894)
add 6b90003fe27 Document override semantics for EcsRunTaskOperator (#73860)
add a3555c74cfc TS SDK: default a task id to the handler's name (#73437)
add a65a3ddf8be Fix Postgres data volume path in Breeze (#73862)
add 85321901f10 Add EmrServerlessStartSessionOperator to Amazon provider
(#70763)
add 9198acb15e8 UI: Add team filter to Human-in-the-loop task instances
listing (#73726)
add 836a5565c58 Scope plugin scheduling classes to their team in
multi-team mode (#73569)
add cc19675d24f Add DuckDB support to the Amazon provider (#73301)
add 029cdf8f6cc Return an approved agent answer as `output_type` after
human review (#73904)
add 3c76a47f65c Remove accidentally adopted Magpie contributor-growth
plugin (#73927)
add 73b07c5aedb Name the tools a durable agent retry will run again
(#73873)
add 5799660c4d4 TS SDK: draw order-only edges with before and after
(#73438)
add a8a62573f54 TS SDK: embed one source region per native Dag file
(#73723)
add bfa2fe02fc1 Account for AgentOperator spend on failed runs and across
retries (#73706)
add 023f859e5a6 Mask secrets in tool results before they reach the model
(#73897)
add 2b806f949b0 Rework common.ai Strands support into a plugin and add
Google ADK (#73898)
add e46d1938619 Add `ObjectStorageToolset` for reading files on object
storage (#73899)
add 35507e99a6e Let HookToolset pin arguments the model must not choose
(#73900)
add 40ed903b6d6 Count and trace tool calls made by native agent frameworks
(#73901)
add 2eb11c14b85 Document running your own Pydantic AI agent, and sandboxes
in other frameworks (#73902)
add d4ba567a390 Tell the model how many rows a Parquet or Avro file holds
(#73925)
add 21bbf2f40a2 Java SDK: Generate Dag and task configuration from the
serialization schema (#73595)
add 76bf88a4877 API: Translate domain ValueError in Task State Store route
(#73753)
add 1a67bf46b55 Support DagBundle based deployment for Coordinator (#70805)
add 53ca2a427ba TS SDK: add task groups to the native Dag surface (#73439)
add 5e785acfb3b Discard the task state values for a task instance when it
is cleared (#72100)
add 7938c0dbb65 Make `execute_tool` the public method `AirflowToolset`
subclasses implement (#73938)
add 6cd2f6f36d9 Remove migration tests for migrations that have already
landed. (#73953)
add 5136c6c41bf Use plain ifs to normalize configured artifact roots
(#73944)
add e15b3a66137 Retry S3Hook.delete_bucket when a late write leaves bucket
non-empty (#73930)
add acd42922f3d Filter jobs API is_alive in SQL so pagination stays
correct (#73684)
add 508301ab263 Add ADR for per-Dag source in the Lang-SDK bundle artifact
(#73948)
add 91423baf366 Fix breeze down crashing when a start-airflow container is
running (#73955)
add 8e36d6d6efd Show whether a calendar day's run was a backfill (#72782)
add 6317c63ae16 Go SDK: generate DagSpec and TaskSpec from the
serialization schema (#73936)
add f306f1848f6 Refresh HITL review details on task clear (#73235)
add 4fd2c9aabf2 Mark lineage hashes as non-security (#70999)
add f7a27633741 Fix typo in apache-airflow-providers-fab error message
(#73956)
add 8d4ab8a94db Keep OpenAPI error responses in sync with the statuses
routes raise (#71647)
add 0b6c38502ab Add runtime DagRun note updates (#69403)
add ba89738639c Fix short-circuit not skipping already expanded mapped
tasks (#73960)
add 16f974f6a35 Run the `common.ai` agent framework adapter tests in CI
(#73912)
add e364ee76483 Keep agent framework spans when worker tracing is off
(#73903)
add 2e803e58997 Add key-pair JWT authentication to Snowflake Cortex Agent
hook (#73815)
add e92147c12aa UI: Add a time-window scope to the Dags list run state
filter (#70470)
add 63a5966473b Check PyPI history before a new provider's first release
(#73887)
add ede78e095b6 Add embedding kwargs to common AI hooks and operators
(#72002)
add 64943ba6dbb Fix `run_duration` calculation in airflow dags test by
decoupling start_date (#68837)
add 9e67831f2bb Allow filtering the Dag runs list by Dag tags (#70861)
add e22c9d02b2e Add Has Events filter to Assets search (#72460)
add f31b572df18 Fix airflowctl commands crashing instead of printing their
result (#72675)
add 1559dae90ab UI: Use TeamName component for all team name displays
(#73910)
add 489316fbc72 Migrate execution API reads to async sessions (#73403)
add a8e95debbc6 Fix flaky AgentOperator durable usage budget tests (#73996)
add e33e45fe67a Add `AssetAndTimeSchedule` timetable (#58543)
add a91216d5ea9 TS SDK: serialize a native Dag to Dag JSON (#73441)
add 884e687ea77 Fix short-circuit inside a mapped task group not skipping
downstream (#73959)
add 3f19c146545 Go SDK: declare data edges with airflow.Inputs (#73895)
add 13adb691464 Close German Translation Gaps 2026-09-30 (#73980)
add d886882ac14 Let Common AI toolsets use the agent's tool retry budget
(#73957)
add 35633455ed7 Add first-class `capabilities` to Common AI
`AgentOperator` (#73984)
add adaa16f88af Parse Dag files through the Task SDK importers (#73853)
add 12127b07978 Fix check-conn-id-templated crashing on a vanishing
__pycache__ (#74016)
add 4d304d0876c Export files an agent built in a sandbox to object storage
(#73990)
add e9c552cc827 Add a vendor-neutral managed-agent hook contract to Common
AI (#73532)
add a33fe27cace Add async client to `AnthropicHook` (#73967)
add e6a9de5d832 Go SDK: bring the coordinator-protocol models back to the
supervisor schema (#73963)
add 27cd88ca74c Cache repeated agent prompts by default in AgentOperator
(#73994)
add 529f429400a Go SDK: reject a task handler and a Dag that share a
dag_id (#73876)
add bc9ca5b1227 Correctly shutdown async sessions on exit. (#73838)
add f1b36db6093 Back off between GitDagBundle bare clone attempts so a
fresh GitHub App token can propagate (#73878)
add 6b847411de1 Stop rebuilding the FAB app on every users and roles API
call (#73104)
add 56817294cdd Go SDK: add airflow.TriggerDagRun, a task that triggers a
Dag run (#74003)
add b8475094703 Fix go-sdk generated drift (#74028)
add 8f3e8466c67 Support Airflow 2.11 in the Common AI provider (#73991)
add f0cde671827 Use "Airflow versions" in user-facing docs, not "cores"
(#74045)
add 0bb09cb6ba5 Close the providers testing issue right after announcing
the release (#73890)
add 43377466a06 Release the DuckDB provider as 0.2.0 (#73888)
add 53e43f29130 Speed up CI image restores with zstd-compressed stashes
(#73997)
add e4d397f021e Bound get_schema results for very wide tables in the SQL
toolsets (#74017)
add 7d6244bf191 Clarify `max_db_retries` doc wording to avoid off-by-one
confusion (#73722)
add bb463bf9230 Correlate executor task events by attempt UUID (#73916)
add 2412cec4c15 Carry task attempt UUIDs through remote executor providers
add 6073bbc5f15 fixup! Carry task attempt UUIDs through remote executor
providers
add 831d3b58cbf fixup! Carry task attempt UUIDs through remote executor
providers
add bd051889c81 fixup! Carry task attempt UUIDs through remote executor
providers
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 (ed8c4309d2f)
\
N -- N -- N refs/heads/provider-executors-keyed-by-uuid
(bd051889c81)
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:
.../committer-onboarding-config.md | 272 ---
.apache-magpie-overrides/committer-readiness.md | 169 --
.../contributor-nomination-config.md | 186 --
.../contributor-sentiment-config.md | 66 -
.../good-first-issue-config.md | 93 -
.../onboarding-concierge-config.md | 70 -
.apache-magpie.lock | 43 -
.github/workflows/agent-framework-tests.yml | 89 +
.github/workflows/ci-amd.yml | 19 +
.github/workflows/ci-arm.yml | 19 +
.github/workflows/ci-image-build.yml | 8 +
.pre-commit-config.yaml | 45 +
airflow-core/.pre-commit-config.yaml | 6 +
.../0007-taskflow-across-language-boundary.md | 39 +
.../adr/lang-sdk/0010-native-dag-processing.md | 212 +++
.../lang-sdk/0011-mixed-language-dag-processing.md | 245 +++
.../adr/lang-sdk/0012-lang-sdk-parse-protocol.md | 233 +++
.../0013-persisted-task-handler-bindings.md | 593 +++++++
.../0014-bundle-metadata-and-cache-digest.md | 122 ++
.../0015-per-dag-source-in-bundle-artifact.md | 127 ++
airflow-core/adr/lang-sdk/README.md | 6 +
.../task-and-asset-state-store.rst | 4 +
.../authoring-and-scheduling/asset-scheduling.rst | 31 +-
.../authoring-and-scheduling/language-sdks/go.rst | 22 +-
.../language-sdks/java.rst | 67 +-
.../language-sdks/typescript.rst | 144 +-
.../docs/authoring-and-scheduling/timetable.rst | 25 +-
airflow-core/docs/core-concepts/dag-run.rst | 11 +-
airflow-core/docs/core-concepts/executor/index.rst | 2 +-
.../docs/core-concepts/resumable-tasks.rst | 75 +-
.../docs/core-concepts/task-state-store.rst | 6 +-
airflow-core/docs/migrations-ref.rst | 4 +-
airflow-core/docs/public-airflow-interface.rst | 5 +-
.../security/secrets/secrets-backend/index.rst | 23 +-
airflow-core/newsfragments/58543.feature.rst | 1 +
airflow-core/newsfragments/68496.significant.rst | 4 +-
airflow-core/newsfragments/70681.significant.rst | 7 -
airflow-core/newsfragments/72100.significant.rst | 59 +
airflow-core/pyproject.toml | 2 +-
airflow-core/src/airflow/api_fastapi/app.py | 2 +
.../api_fastapi/common/parameters/__init__.py | 7 +
.../airflow/api_fastapi/common/parameters/asset.py | 23 +
.../airflow/api_fastapi/common/parameters/dag.py | 46 +
.../api_fastapi/common/parameters/dag_run.py | 35 +-
.../airflow/api_fastapi/common/parameters/job.py | 50 +
.../airflow/api_fastapi/common/parameters/misc.py | 43 +
.../core_api/datamodels/task_instance_history.py | 19 +-
.../core_api/datamodels/task_instances.py | 23 +-
.../api_fastapi/core_api/datamodels/ui/calendar.py | 1 +
.../api_fastapi/core_api/openapi/_private_ui.yaml | 153 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 94 +-
.../core_api/routes/public/connections.py | 6 +-
.../api_fastapi/core_api/routes/public/dag_run.py | 6 +-
.../api_fastapi/core_api/routes/public/hitl.py | 21 +-
.../api_fastapi/core_api/routes/public/job.py | 10 +-
.../api_fastapi/core_api/routes/public/log.py | 2 +-
.../core_api/routes/public/task_instances.py | 8 +
.../core_api/routes/public/task_state_store.py | 7 +-
.../core_api/routes/public/variables.py | 2 +-
.../api_fastapi/core_api/routes/ui/assets.py | 5 +
.../api_fastapi/core_api/routes/ui/config.py | 45 +-
.../core_api/routes/ui/partitioned_dag_runs.py | 1 +
.../api_fastapi/core_api/routes/ui/teams.py | 2 +
.../core_api/services/public/dag_run.py | 17 +-
.../core_api/services/public/task_instances.py | 41 +
.../api_fastapi/core_api/services/ui/calendar.py | 10 +-
.../src/airflow/api_fastapi/execution_api/app.py | 2 +
.../execution_api/datamodels/taskinstance.py | 6 +
.../execution_api/routes/asset_events.py | 8 +-
.../api_fastapi/execution_api/routes/assets.py | 14 +-
.../api_fastapi/execution_api/routes/dag_runs.py | 18 +-
.../api_fastapi/execution_api/routes/hitl.py | 74 +-
.../execution_api/routes/task_instances.py | 96 +-
.../execution_api/routes/task_reschedules.py | 6 +-
.../api_fastapi/execution_api/routes/xcoms.py | 12 +
.../api_fastapi/execution_api/versions/__init__.py | 2 +
.../execution_api/versions/v2026_10_30.py | 10 +
.../airflow/cli/commands/dag_processor_command.py | 26 +-
.../src/airflow/config_templates/config.yml | 77 +-
airflow-core/src/airflow/configuration.py | 7 +-
.../src/airflow/dag_processing/bundles/manager.py | 40 +-
.../src/airflow/dag_processing/collection.py | 125 +-
airflow-core/src/airflow/dag_processing/dagbag.py | 232 +--
.../airflow/dag_processing/importers/__init__.py | 39 -
.../src/airflow/dag_processing/importers/base.py | 266 ---
.../dag_processing/importers/python_importer.py | 360 ----
airflow-core/src/airflow/dag_processing/manager.py | 21 +-
.../src/airflow/dag_processing/processor.py | 15 +-
.../src/airflow/jobs/scheduler_job_runner.py | 207 ++-
..._3_4_0_add_timetable_asset_gated_to_dagmodel.py | 55 +
airflow-core/src/airflow/models/dag.py | 32 +-
airflow-core/src/airflow/models/dagcode.py | 45 +-
airflow-core/src/airflow/models/dagrun.py | 2 +-
airflow-core/src/airflow/models/serialized_dag.py | 19 +-
airflow-core/src/airflow/models/taskinstance.py | 2 +-
airflow-core/src/airflow/plugins_manager.py | 42 +
airflow-core/src/airflow/secrets/__init__.py | 4 +-
airflow-core/src/airflow/secrets/base_secrets.py | 5 +-
airflow-core/src/airflow/serialization/encoders.py | 9 +
airflow-core/src/airflow/settings.py | 14 +-
.../ti_deps/deps/not_previously_skipped_dep.py | 6 +-
airflow-core/src/airflow/timetables/_cron.py | 2 +-
airflow-core/src/airflow/timetables/assets.py | 112 +-
airflow-core/src/airflow/timetables/base.py | 16 +
airflow-core/src/airflow/timetables/simple.py | 1 +
.../src/airflow/ui/openapi-gen/queries/common.ts | 32 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 44 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 44 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 44 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 44 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 35 +
.../ui/openapi-gen/requests/services.gen.ts | 48 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 78 +-
.../airflow/ui/public/i18n/locales/ar/dags.json | 2 -
.../airflow/ui/public/i18n/locales/ca/dags.json | 4 -
.../airflow/ui/public/i18n/locales/de/browse.json | 30 +
.../airflow/ui/public/i18n/locales/de/common.json | 26 +
.../ui/public/i18n/locales/de/components.json | 5 +
.../src/airflow/ui/public/i18n/locales/de/dag.json | 5 +
.../airflow/ui/public/i18n/locales/de/dags.json | 24 +-
.../ui/public/i18n/locales/de/dashboard.json | 17 +-
.../airflow/ui/public/i18n/locales/el/dags.json | 2 -
.../airflow/ui/public/i18n/locales/en/admin.json | 2 -
.../airflow/ui/public/i18n/locales/en/assets.json | 1 +
.../airflow/ui/public/i18n/locales/en/common.json | 18 +-
.../src/airflow/ui/public/i18n/locales/en/dag.json | 1 +
.../airflow/ui/public/i18n/locales/en/dags.json | 7 +-
.../airflow/ui/public/i18n/locales/es/dags.json | 4 -
.../airflow/ui/public/i18n/locales/fr/dags.json | 2 -
.../airflow/ui/public/i18n/locales/he/dags.json | 2 -
.../airflow/ui/public/i18n/locales/hi/dags.json | 2 -
.../airflow/ui/public/i18n/locales/ko/dags.json | 4 -
.../airflow/ui/public/i18n/locales/pl/dags.json | 4 -
.../airflow/ui/public/i18n/locales/ru/dags.json | 2 -
.../airflow/ui/public/i18n/locales/zh-CN/dags.json | 4 -
.../airflow/ui/public/i18n/locales/zh-TW/dags.json | 4 -
.../TaskInstance/ClearGroupTaskInstanceDialog.tsx | 40 +-
.../TaskInstance/ClearTaskInstanceDialog.test.tsx | 127 ++
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 23 +-
.../FilterBar/filters/RunStateFilter.tsx | 234 +++
.../FilterBar/filters/runStateParams.test.ts | 95 +
.../components/FilterBar/filters/runStateParams.ts | 76 +
.../airflow/ui/src/components/FilterBar/types.ts | 14 +-
.../src/airflow/ui/src/components/StatsCard.tsx | 2 +-
.../src/airflow/ui/src/constants/filterConfigs.tsx | 38 +-
.../src/airflow/ui/src/constants/localStorage.ts | 1 +
.../src/airflow/ui/src/constants/searchParams.ts | 3 +
.../airflow/ui/src/hooks/useUserSettings.test.tsx | 21 +
.../src/airflow/ui/src/hooks/useUserSettings.ts | 4 +
.../src/airflow/ui/src/mocks/handlers/dag_runs.ts | 49 +-
.../src/airflow/ui/src/mocks/handlers/dags.ts | 10 +
.../ui/src/pages/AssetsList/AssetsList.test.tsx | 28 +
.../airflow/ui/src/pages/AssetsList/AssetsList.tsx | 11 +
.../ui/src/pages/Connections/Connections.tsx | 4 +
.../ui/src/pages/Dag/Calendar/CalendarCell.tsx | 31 +-
.../ui/src/pages/Dag/Calendar/CalendarLegend.tsx | 11 +
.../ui/src/pages/Dag/Calendar/CalendarTooltip.tsx | 14 +-
.../src/pages/Dag/Calendar/HourlyCalendarView.tsx | 10 +-
.../src/pages/Dag/Calendar/calendarUtils.test.ts | 22 +
.../ui/src/pages/Dag/Calendar/calendarUtils.ts | 4 +
.../src/airflow/ui/src/pages/Dag/Calendar/types.ts | 1 +
.../airflow/ui/src/pages/DagRuns/DagRuns.test.tsx | 27 +
.../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx | 6 +
.../ui/src/pages/DagRuns/DagRunsFilters.tsx | 1 +
.../src/pages/DagsList/DagsFilters/DagsFilters.tsx | 3 +-
.../ui/src/pages/DagsList/DagsList.test.tsx | 41 +-
.../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 5 +
.../src/airflow/ui/src/pages/Events/Events.tsx | 4 +
.../ui/src/pages/HITLTaskInstances/HITLFilters.tsx | 6 +
.../HITLTaskInstances/HITLTaskInstances.test.tsx | 62 +-
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 21 +
airflow-core/src/airflow/ui/src/pages/Jobs.tsx | 31 +-
.../src/airflow/ui/src/pages/Pools/PoolBarCard.tsx | 12 +-
.../ui/src/pages/Settings/Settings.test.tsx | 8 +
.../src/airflow/ui/src/pages/Settings/Settings.tsx | 13 +
.../ui/src/pages/TaskInstance/Details.test.tsx | 137 ++
.../airflow/ui/src/pages/TaskInstance/Details.tsx | 16 +
.../ui/src/pages/TaskInstance/Header.test.tsx | 54 +
.../airflow/ui/src/pages/TaskInstance/Header.tsx | 20 +
.../stateReason.ts} | 35 +-
.../TaskInstances/BulkClearTaskInstancesButton.tsx | 34 +-
.../ui/src/pages/Variables/BackendsOrderModal.tsx | 64 -
.../airflow/ui/src/pages/Variables/Variables.tsx | 6 +-
.../ui/src/queries/useBulkClearTaskInstances.ts | 2 +
.../src/airflow/ui/src/queries/useDags.tsx | 3 +
.../ui/src/utils/useFiltersHandler.test.tsx | 63 +
.../src/airflow/ui/src/utils/useFiltersHandler.ts | 22 +-
.../src/airflow/ui/tests/e2e/global-setup.ts | 14 +-
.../src/airflow/ui/tests/e2e/pages/DagsPage.ts | 18 +-
airflow-core/src/airflow/utils/db.py | 4 +-
airflow-core/src/airflow/utils/file.py | 10 +
airflow-core/tests/integration/otel/test_otel.py | 2 +-
airflow-core/tests/unit/always/test_secrets.py | 121 --
.../api_fastapi/auth/managers/simple/conftest.py | 3 +-
airflow-core/tests/unit/api_fastapi/conftest.py | 27 +-
.../core_api/routes/public/test_auth.py | 28 +-
.../core_api/routes/public/test_backfills.py | 20 +-
.../core_api/routes/public/test_connections.py | 9 +-
.../core_api/routes/public/test_dag_bundles.py | 43 +-
.../core_api/routes/public/test_dag_parsing.py | 18 +-
.../core_api/routes/public/test_dag_run.py | 134 +-
.../core_api/routes/public/test_hitl.py | 77 +-
.../api_fastapi/core_api/routes/public/test_job.py | 51 +
.../core_api/routes/public/test_task_instances.py | 321 +++-
.../routes/public/test_task_state_store.py | 14 +
.../api_fastapi/core_api/routes/ui/test_assets.py | 23 +
.../core_api/routes/ui/test_calendar.py | 239 ++-
.../api_fastapi/core_api/routes/ui/test_config.py | 62 -
.../api_fastapi/core_api/routes/ui/test_dags.py | 43 +
.../unit/api_fastapi/execution_api/test_app.py | 84 +-
.../execution_api/versions/head/test_hitl.py | 36 +-
.../versions/head/test_task_instances.py | 162 ++
.../versions/v2026_10_30/test_dag_run_notes.py | 43 +
airflow-core/tests/unit/api_fastapi/test_app.py | 108 +-
.../cli/commands/test_dag_processor_command.py | 58 +
airflow-core/tests/unit/core/test_settings.py | 120 ++
.../bundles/test_dag_bundle_manager.py | 86 +-
.../unit/dag_processing/importers/test_registry.py | 99 --
.../tests/unit/dag_processing/test_collection.py | 433 ++++-
.../tests/unit/dag_processing/test_dagbag.py | 263 +--
.../tests/unit/dag_processing/test_manager.py | 117 +-
.../tests/unit/dag_processing/test_processor.py | 32 +-
airflow-core/tests/unit/jobs/test_scheduler_job.py | 570 +++++-
airflow-core/tests/unit/jobs/test_triggerer_job.py | 1 +
...est_0049_remove_pickled_data_from_xcom_table.py | 237 ---
...t_0055_remove_pickled_data_from_dagrun_table.py | 143 --
.../test_0080_deadline_callback_migration.py | 268 ---
.../test_0094_deadline_callback_migration.py | 178 --
.../test_0117_deadline_interval_json_migration.py | 91 -
...9_add_indexes_on_serialized_dag_and_dag_code.py | 55 -
.../migrations/test_0131_lower_case_team_names.py | 138 --
.../test_0136_fold_task_map_into_xcom.py | 184 --
...t_0138_allocate_pending_task_attempt_numbers.py | 448 -----
airflow-core/tests/unit/models/test_dag.py | 31 +
airflow-core/tests/unit/models/test_dagcode.py | 39 +
.../tests/unit/models/test_taskinstance.py | 12 +
.../tests/unit/plugins/test_plugins_manager.py | 61 +
airflow-core/tests/unit/state/test_metastore.py | 9 +
.../deps/test_not_previously_skipped_dep.py | 44 +
.../tests/unit/timetables/test_assets_timetable.py | 227 ++-
.../unit/timetables/test_trigger_timetable.py | 7 +
airflow-core/tests/unit/utils/test_session.py | 18 +-
.../src/airflowctl/api/datamodels/generated.py | 21 +
airflow-ctl/src/airflowctl/api/operations.py | 2 +-
airflow-ctl/src/airflowctl/ctl/cli_config.py | 12 +-
.../tests/airflow_ctl/api/test_operations.py | 19 +-
.../tests/airflow_ctl/ctl/test_cli_config.py | 34 +-
.../go_sdk_tests/test_go_sdk_taskflow_binding.py | 72 +-
.../airflow_e2e_tests/openlineage_tests/README.md | 2 +-
.../dags_extra/e2e_versioned_bundle.py | 4 +-
contributing-docs/30_new_language_sdk.rst | 6 +
dev/README_RELEASE_PROVIDERS.md | 87 +-
dev/breeze/doc/03_developer_tasks.rst | 44 +-
dev/breeze/doc/04_troubleshooting.rst | 11 +
dev/breeze/doc/05_test_commands.rst | 14 +
dev/breeze/doc/ci/04_selective_checks.md | 1 +
dev/breeze/doc/ci/05_workflows.md | 26 +
dev/breeze/doc/images/output-commands.svg | 165 +-
dev/breeze/doc/images/output_cleanup.svg | 2 +-
dev/breeze/doc/images/output_cleanup.txt | 2 +-
dev/breeze/doc/images/output_down.svg | 48 +-
dev/breeze/doc/images/output_down.txt | 2 +-
dev/breeze/doc/images/output_run.svg | 45 +-
dev/breeze/doc/images/output_run.txt | 2 +-
dev/breeze/doc/images/output_shell.svg | 285 ++-
dev/breeze/doc/images/output_shell.txt | 2 +-
dev/breeze/doc/images/output_start-airflow.svg | 237 ++-
dev/breeze/doc/images/output_start-airflow.txt | 2 +-
.../doc/images/output_testing_core-tests.svg | 145 +-
.../doc/images/output_testing_core-tests.txt | 2 +-
.../doc/images/output_testing_providers-tests.svg | 161 +-
.../doc/images/output_testing_providers-tests.txt | 2 +-
.../src/airflow_breeze/commands/common_options.py | 10 +-
.../airflow_breeze/commands/developer_commands.py | 52 +-
.../commands/developer_commands_config.py | 2 +-
.../src/airflow_breeze/commands/main_command.py | 23 +-
.../airflow_breeze/commands/testing_commands.py | 14 +-
.../commands/testing_commands_config.py | 5 +-
dev/breeze/src/airflow_breeze/global_constants.py | 17 +-
.../src/airflow_breeze/params/shell_params.py | 17 +-
.../prepare_providers/provider_documentation.py | 11 +-
.../airflow_breeze/utils/docker_command_utils.py | 248 ++-
dev/breeze/src/airflow_breeze/utils/path_utils.py | 10 +-
.../src/airflow_breeze/utils/selective_checks.py | 18 +
dev/breeze/tests/test_developer_commands.py | 38 +-
dev/breeze/tests/test_docker_command_utils.py | 487 ++++-
dev/breeze/tests/test_provider_documentation.py | 48 +
dev/breeze/tests/test_selective_checks.py | 58 +-
dev/breeze/tests/test_shell_params.py | 82 +
devel-common/pyproject.toml | 2 +-
devel-common/src/tests_common/pytest_plugin.py | 26 +
devel-common/src/tests_common/test_utils/config.py | 24 +-
.../src/tests_common/test_utils/mock_plugins.py | 42 +-
docs/spelling_wordlist.txt | 3 +
generated/known_airflow_exceptions.txt | 2 +-
generated/known_sdk_imports_in_core.txt | 6 +-
generated/provider_metadata.json | 496 ++++--
go-sdk/.pre-commit-config.yaml | 7 +
go-sdk/Justfile | 4 +
go-sdk/README.md | 46 +-
go-sdk/adr/0006-cross-language-argument-binding.md | 15 +-
.../adr/0007-mixed-lang-task-handler-interface.md | 6 +-
go-sdk/airflow/bundle.go | 66 +-
go-sdk/airflow/bundle_test.go | 111 ++
go-sdk/airflow/dag.go | 108 +-
go-sdk/airflow/dag_test.go | 71 +
go-sdk/airflow/inputs.go | 148 ++
go-sdk/airflow/inputs_test.go | 392 ++++
go-sdk/airflow/spec.gen.go | 170 ++
go-sdk/airflow/spec.go | 115 +-
go-sdk/airflow/spec_test.go | 71 +
go-sdk/airflow/task_handler.go | 22 +-
go-sdk/airflow/task_handler_test.go | 6 +-
go-sdk/airflow/task_option.go | 11 +-
go-sdk/airflow/trigger_dag_run.go | 177 ++
go-sdk/airflow/trigger_dag_run_test.go | 272 +++
.../cmd/airflow-go-pack/pack_integration_test.go | 4 +-
go-sdk/dags/go_examples.py | 28 +-
.../bundle/concurrentxcom/concurrentxcom_test.go | 2 +-
go-sdk/example/bundle/main.go | 14 +-
.../bundle/taskflowbinding/taskflowbinding.go | 61 +-
.../bundle/taskflowbinding/taskflowbinding_test.go | 44 +-
go-sdk/internal/bundle/task.go | 30 +-
go-sdk/internal/genlicense/genlicense.go | 71 +
go-sdk/internal/genlicense/genlicense_test.go | 83 +
go-sdk/internal/genspec/authoring.go | 470 +++++
go-sdk/internal/genspec/authoring_test.go | 329 ++++
go-sdk/internal/genspec/main.go | 110 ++
.../genspec/main_test.go} | 30 +-
go-sdk/internal/genspec/normalize.go | 176 ++
go-sdk/internal/genspec/normalize_test.go | 256 +++
go-sdk/pkg/binding/binding.go | 112 +-
go-sdk/pkg/binding/binding_test.go | 133 +-
go-sdk/pkg/execution/client.go | 22 +-
go-sdk/pkg/execution/client_test.go | 6 +-
go-sdk/pkg/execution/comms.go | 13 +-
go-sdk/pkg/execution/comms_test.go | 10 +-
.../pkg/execution/genmodels/discriminators.gen.go | 4 +
go-sdk/pkg/execution/genmodels/gen/main.go | 49 +-
go-sdk/pkg/execution/genmodels/models.gen.go | 171 +-
go-sdk/pkg/execution/integration_test.go | 14 +-
go-sdk/pkg/execution/messages.go | 6 +-
go-sdk/pkg/execution/messages_test.go | 4 +-
go-sdk/sdk/sdk.go | 4 +-
java-sdk/README.md | 19 +-
.../example/nativedag/InterfaceExample.java | 18 +-
.../org/apache/airflow/sdk/BuilderProcessor.kt | 118 +-
.../kotlin/org/apache/airflow/sdk/BuilderTest.kt | 172 +-
java-sdk/sdk/build.gradle.kts | 443 ++++-
{ts-sdk => java-sdk/sdk}/schema/dag-schema.json | 0
.../src/main/kotlin/org/apache/airflow/sdk/Arg.kt | 18 +
.../main/kotlin/org/apache/airflow/sdk/Builder.kt | 109 --
.../main/kotlin/org/apache/airflow/sdk/DagDef.kt | 69 +-
.../src/main/kotlin/org/apache/airflow/sdk/Deps.kt | 18 +-
.../org/apache/airflow/sdk/internal/Fields.kt | 107 ++
.../kotlin/org/apache/airflow/sdk/DagDefTest.kt | 179 ++
providers/amazon/docs/index.rst | 6 +-
providers/amazon/docs/operators/bedrock.rst | 40 +
providers/amazon/docs/operators/duckdb.rst | 180 ++
providers/amazon/docs/operators/ecs.rst | 35 +
.../amazon/docs/operators/emr/emr_serverless.rst | 23 +
providers/amazon/provider.yaml | 31 +
providers/amazon/pyproject.toml | 15 +-
.../airflow/providers/amazon/aws/hooks/bedrock.py | 229 ++-
.../airflow/providers/amazon/aws/hooks/duckdb.py | 277 +++
.../src/airflow/providers/amazon/aws/hooks/emr.py | 51 +
.../src/airflow/providers/amazon/aws/hooks/s3.py | 8 +-
.../airflow/providers/amazon/aws/operators/ecs.py | 3 +
.../airflow/providers/amazon/aws/operators/emr.py | 112 ++
.../airflow/providers/amazon/aws/triggers/emr.py | 48 +
.../providers/amazon/aws/utils/task_log_fetcher.py | 38 +-
.../amazon/aws/waiters/emr-serverless.json | 37 +
.../airflow/providers/amazon/get_provider_info.py | 23 +
.../tests/system/amazon/aws/example_duckdb.py | 158 ++
.../amazon/aws/example_emr_serverless_session.py | 103 ++
.../tests/unit/amazon/aws/hooks/test_bedrock.py | 280 +++
.../tests/unit/amazon/aws/hooks/test_duckdb.py | 307 ++++
.../unit/amazon/aws/hooks/test_emr_serverless.py | 57 +
.../amazon/tests/unit/amazon/aws/hooks/test_s3.py | 19 +
.../aws/operators/test_emr_serverless_session.py | 137 ++
.../tests/unit/amazon/aws/triggers/test_emr.py | 60 +
.../unit/amazon/aws/utils/test_task_log_fetcher.py | 36 +-
providers/anthropic/pyproject.toml | 2 +-
.../airflow/providers/anthropic/hooks/anthropic.py | 99 +-
.../tests/unit/anthropic/hooks/test_anthropic.py | 141 +-
providers/apache/hive/docs/index.rst | 2 +-
providers/apache/hive/pyproject.toml | 2 +-
providers/apache/impala/docs/index.rst | 8 +-
providers/apache/impala/pyproject.toml | 2 +-
.../kubernetes/executors/kubernetes_executor.py | 12 +-
.../executors/test_kubernetes_executor.py | 32 +
providers/common/ai/README.rst | 7 +-
providers/common/ai/docs/agent_security.rst | 32 +-
providers/common/ai/docs/approval_gates.rst | 7 +-
providers/common/ai/docs/capabilities.rst | 137 ++
providers/common/ai/docs/changelog.rst | 26 +
providers/common/ai/docs/classifier_models.rst | 5 +
providers/common/ai/docs/code_mode.rst | 12 +-
providers/common/ai/docs/connections/langchain.rst | 5 +
.../common/ai/docs/connections/llamaindex.rst | 5 +
providers/common/ai/docs/durable_execution.rst | 19 +-
providers/common/ai/docs/features.rst | 6 +-
providers/common/ai/docs/frameworks/adk.rst | 109 ++
providers/common/ai/docs/frameworks/index.rst | 87 +-
.../common/ai/docs/frameworks/pydantic_ai.rst | 78 +
providers/common/ai/docs/frameworks/strands.rst | 96 +-
providers/common/ai/docs/guardrails.rst | 60 -
providers/common/ai/docs/hooks/langchain.rst | 25 +-
providers/common/ai/docs/hooks/llamaindex.rst | 17 +
providers/common/ai/docs/index.rst | 12 +-
providers/common/ai/docs/installation.rst | 33 +-
providers/common/ai/docs/observability.rst | 122 +-
providers/common/ai/docs/operators/agent.rst | 166 +-
.../common/ai/docs/operators/document_loader.rst | 5 +
.../ai/docs/operators/llamaindex_embedding.rst | 31 +-
.../ai/docs/operators/llamaindex_retrieval.rst | 23 +-
providers/common/ai/docs/operators/llm.rst | 35 +-
providers/common/ai/docs/operators/llm_batch.rst | 9 +-
providers/common/ai/docs/operators/llm_branch.rst | 7 +-
.../common/ai/docs/operators/llm_file_analysis.rst | 5 +
.../ai/docs/operators/llm_schema_compare.rst | 5 +
providers/common/ai/docs/operators/llm_sql.rst | 5 +
providers/common/ai/docs/quickstart.rst | 3 +-
providers/common/ai/docs/rag_pipelines.rst | 5 +
providers/common/ai/docs/redirects.txt | 1 +
providers/common/ai/docs/retry_policies.rst | 60 +-
providers/common/ai/docs/sandbox/backends.rst | 53 +-
providers/common/ai/docs/sandbox/configuration.rst | 251 ++-
providers/common/ai/docs/sandbox/index.rst | 84 +-
providers/common/ai/docs/self_hosted_models.rst | 3 +-
providers/common/ai/docs/stability.rst | 188 ++
providers/common/ai/docs/tool_approval.rst | 17 +-
providers/common/ai/docs/toolsets/datafusion.rst | 18 +-
providers/common/ai/docs/toolsets/hook.rst | 63 +-
providers/common/ai/docs/toolsets/index.rst | 86 +-
providers/common/ai/docs/toolsets/langchain.rst | 39 +-
providers/common/ai/docs/toolsets/logging.rst | 5 +
.../common/ai/docs/toolsets/managed_agent.rst | 342 ++--
.../common/ai/docs/toolsets/object_storage.rst | 127 ++
providers/common/ai/docs/toolsets/skills.rst | 5 +
providers/common/ai/docs/toolsets/sql.rst | 45 +-
providers/common/ai/docs/troubleshooting.rst | 8 +-
providers/common/ai/provider.yaml | 1 +
providers/common/ai/pyproject.toml | 13 +-
.../ai/src/airflow/providers/common/ai/__init__.py | 4 +-
.../airflow/providers/common/ai/batch/__init__.py | 2 +-
.../airflow/providers/common/ai/batch/anthropic.py | 10 +-
.../src/airflow/providers/common/ai/batch/base.py | 10 +
.../airflow/providers/common/ai/batch/dispatch.py | 5 +
.../airflow/providers/common/ai/batch/openai.py | 10 +-
.../airflow/providers/common/ai/batch/results.py | 5 +-
.../providers/common/ai/decorators/agent.py | 2 +-
.../airflow/providers/common/ai/decorators/llm.py | 2 +-
.../providers/common/ai/decorators/llm_batch.py | 7 +-
.../providers/common/ai/decorators/llm_branch.py | 2 +-
.../common/ai/decorators/llm_file_analysis.py | 7 +-
.../common/ai/decorators/llm_schema_compare.py | 7 +-
.../providers/common/ai/decorators/llm_sql.py | 7 +-
.../airflow/providers/common/ai/durable/base.py | 19 +-
.../providers/common/ai/durable/caching_model.py | 126 +-
.../providers/common/ai/durable/caching_toolset.py | 64 +-
.../providers/common/ai/durable/fingerprint.py | 12 +-
.../providers/common/ai/durable/replay_usage.py | 240 +++
.../providers/common/ai/durable/step_counter.py | 4 +
.../airflow/providers/common/ai/durable/storage.py | 23 +-
.../common/ai/durable/task_state_store.py | 20 +-
.../common/ai/example_dags/example_adk_agent.py | 105 ++
.../ai/example_dags/example_agent_capabilities.py | 27 +-
.../ai/example_dags/example_classifier_model.py | 8 +-
.../example_dags/example_object_storage_toolset.py | 48 +
.../ai/example_dags/example_pydantic_ai_agent.py | 72 +
.../ai/example_dags/example_sandbox_toolset.py | 170 +-
.../ai/example_dags/example_strands_agent.py | 38 +-
.../src/airflow/providers/common/ai/exceptions.py | 17 +-
.../airflow/providers/common/ai/hooks/langchain.py | 35 +-
.../providers/common/ai/hooks/llamaindex.py | 30 +-
.../providers/common/ai/hooks/pydantic_ai.py | 10 +
.../providers/common/ai/managed_agents/__init__.py | 49 +
.../providers/common/ai/managed_agents/base.py | 251 +++
.../providers/common/ai/managed_agents/failover.py | 145 ++
.../airflow/providers/common/ai/mixins/approval.py | 6 +-
.../airflow/providers/common/ai/observability.py | 19 +-
.../airflow/providers/common/ai/operators/agent.py | 706 ++++++--
.../common/ai/operators/document_loader.py | 5 +
.../common/ai/operators/llamaindex_embedding.py | 20 +-
.../common/ai/operators/llamaindex_retrieval.py | 21 +-
.../airflow/providers/common/ai/operators/llm.py | 20 +-
.../providers/common/ai/operators/llm_batch.py | 5 +
.../providers/common/ai/operators/llm_branch.py | 6 +-
.../common/ai/operators/llm_file_analysis.py | 5 +
.../common/ai/operators/llm_schema_compare.py | 5 +
.../providers/common/ai/operators/llm_sql.py | 5 +
.../providers/common/ai/policies/decision.py | 11 +
.../airflow/providers/common/ai/policies/retry.py | 17 +-
.../providers/common/ai/sandbox/__init__.py | 4 +
.../airflow/providers/common/ai/sandbox/base.py | 425 ++++-
.../airflow/providers/common/ai/sandbox/modal.py | 235 ++-
.../providers/common/ai/sandbox/opensandbox.py | 86 +-
.../airflow/providers/common/ai/sandbox/output.py | 6 +-
.../src/airflow/providers/common/ai/sandbox/sbx.py | 103 +-
.../ai/src/airflow/providers/common/ai/skills.py | 5 +
.../airflow/providers/common/ai/tools/__init__.py | 121 +-
.../providers/common/ai/tools/_from_toolset.py | 221 ++-
.../src/airflow/providers/common/ai/tools/adk.py | 112 ++
.../airflow/providers/common/ai/tools/strands.py | 107 +-
.../airflow/providers/common/ai/tools/tracing.py | 192 ++
.../providers/common/ai/toolsets/__init__.py | 6 +-
.../providers/common/ai/toolsets/datafusion.py | 70 +-
.../airflow/providers/common/ai/toolsets/hook.py | 93 +-
.../common/ai/toolsets/langchain_bridge.py | 168 +-
.../providers/common/ai/toolsets/logging.py | 9 +-
.../providers/common/ai/toolsets/managed_agent.py | 393 ++---
.../airflow/providers/common/ai/toolsets/mcp.py | 35 +-
.../providers/common/ai/toolsets/object_storage.py | 391 ++++
.../providers/common/ai/toolsets/sandbox.py | 597 ++++++-
.../airflow/providers/common/ai/toolsets/skills.py | 5 +
.../airflow/providers/common/ai/toolsets/sql.py | 96 +-
.../providers/common/ai/triggers/llm_batch.py | 5 +
.../providers/common/ai/utils/file_analysis.py | 123 +-
.../airflow/providers/common/ai/utils/logging.py | 60 +-
.../airflow/providers/common/ai/utils/masking.py | 120 ++
.../providers/common/ai/utils/prompt_cache.py | 140 ++
.../providers/common/ai/utils/query_results.py | 209 ++-
.../providers/common/ai/utils/task_logger.py | 67 +
.../providers/common/ai/utils/tool_definition.py | 13 +-
.../providers/common/ai/utils/tool_metrics.py | 63 +
.../providers/common/ai/utils/toolset_base.py | 269 +++
.../providers/common/ai/utils/usage_budget.py | 215 +++
.../common/ai/example_sandbox_toolset_modal.py | 138 +-
.../ai/tests/unit/common/ai/batch/test_dispatch.py | 2 +-
.../ai/tests/unit/common/ai/batch/test_results.py | 2 +-
.../ai/tests/unit/common/ai/batch/test_state.py | 2 +-
.../common/ai/tests/unit/common/ai/conftest.py | 11 +-
.../tests/unit/common/ai/decorators/test_agent.py | 31 +-
.../unit/common/ai/decorators/test_llm_batch.py | 3 +-
.../common/ai/decorators/test_llm_file_analysis.py | 5 +-
.../ai/tests/unit/common/ai/durable/test_base.py | 2 +-
.../unit/common/ai/durable/test_caching_model.py | 252 ++-
.../unit/common/ai/durable/test_caching_toolset.py | 91 +-
.../unit/common/ai/durable/test_fingerprint.py | 20 +
.../unit/common/ai/durable/test_replay_cost.py | 173 +-
.../unit/common/ai/durable/test_replay_usage.py | 114 ++
.../common/ai/durable/test_replay_verification.py | 2 +-
.../tests/unit/common/ai/durable/test_storage.py | 11 +-
.../common/ai/durable/test_task_state_store.py | 24 +-
.../tests/unit/common/ai/hooks/test_langchain.py | 66 +
.../tests/unit/common/ai/hooks/test_llamaindex.py | 72 +
.../tests/unit/common/ai/hooks/test_pydantic_ai.py | 15 +
.../unit/common/ai/managed_agents}/__init__.py | 0
.../unit/common/ai/managed_agents/test_base.py | 137 ++
.../unit/common/ai/managed_agents/test_failover.py | 205 +++
.../tests/unit/common/ai/mixins/test_approval.py | 6 +-
.../tests/unit/common/ai/operators/test_agent.py | 1864 +++++++++++++++++++-
.../ai/operators/test_agent_tool_approval.py | 45 +-
.../common/ai/operators/test_document_loader.py | 12 +-
.../ai/operators/test_llamaindex_embedding.py | 17 +-
.../ai/operators/test_llamaindex_retrieval.py | 19 +-
.../ai/tests/unit/common/ai/operators/test_llm.py | 24 +-
.../unit/common/ai/operators/test_llm_batch.py | 3 +-
.../unit/common/ai/operators/test_llm_branch.py | 4 +-
.../common/ai/operators/test_llm_file_analysis.py | 11 +-
.../tests/unit/common/ai/operators/test_llm_sql.py | 4 +-
.../ai/tests/unit/common/ai/sandbox/fake_modal.py | 17 +
.../ai/tests/unit/common/ai/sandbox/fake_tags.py | 63 +
.../ai/tests/unit/common/ai/sandbox/test_base.py | 336 +++-
.../ai/tests/unit/common/ai/sandbox/test_modal.py | 207 ++-
.../unit/common/ai/sandbox/test_opensandbox.py | 146 ++
.../ai/tests/unit/common/ai/sandbox/test_sbx.py | 112 ++
.../ai/tests/unit/common/ai/test_observability.py | 19 +
.../unit/common/ai/tools/test__from_toolset.py | 260 ++-
.../ai/tests/unit/common/ai/tools/test_adk.py | 157 ++
.../ai/tests/unit/common/ai/tools/test_strands.py | 170 +-
.../ai/tests/unit/common/ai/tools/test_tools.py | 94 +-
.../ai/tests/unit/common/ai/tools/test_tracing.py | 230 +++
.../unit/common/ai/toolsets/test_datafusion.py | 71 +-
.../ai/tests/unit/common/ai/toolsets/test_hook.py | 167 +-
.../common/ai/toolsets/test_langchain_bridge.py | 58 +-
.../unit/common/ai/toolsets/test_managed_agent.py | 403 ++---
.../ai/tests/unit/common/ai/toolsets/test_mcp.py | 8 +
.../unit/common/ai/toolsets/test_object_storage.py | 422 +++++
.../unit/common/ai/toolsets/test_retry_budget.py | 98 +
.../tests/unit/common/ai/toolsets/test_sandbox.py | 889 +++++++++-
.../ai/tests/unit/common/ai/toolsets/test_sql.py | 116 +-
.../unit/common/ai/utils/test_file_analysis.py | 27 +-
.../ai/tests/unit/common/ai/utils/test_logging.py | 132 +-
.../ai/tests/unit/common/ai/utils/test_masking.py | 117 ++
.../unit/common/ai/utils/test_prompt_cache.py | 209 +++
.../unit/common/ai/utils/test_query_results.py | 176 +-
.../tests/unit/common/ai/utils/test_task_logger.py | 82 +
.../unit/common/ai/utils/test_tool_definition.py | 21 +-
.../unit/common/ai/utils/test_tool_metrics.py | 179 ++
.../unit/common/ai/utils/test_toolset_base.py | 281 +++
.../unit/common/ai/utils/test_usage_budget.py | 242 +++
.../common/compat/_set_during_execution.py | 40 +
.../src/airflow/providers/common/compat/sdk.py | 14 +-
.../common/compat/security/test_access_view.py | 8 +-
.../common/compat/test__set_during_execution.py | 43 +
.../compat/tests/unit/common/compat/test_sdk.py | 18 +-
providers/common/sql/docs/index.rst | 2 +-
providers/common/sql/pyproject.toml | 2 +-
providers/duckdb/README.rst | 6 +-
providers/duckdb/docs/changelog.rst | 9 +-
providers/duckdb/docs/index.rst | 6 +-
providers/duckdb/docs/operators.rst | 6 +
providers/duckdb/provider.yaml | 2 +-
providers/duckdb/pyproject.toml | 6 +-
.../src/airflow/providers/duckdb/__init__.py | 2 +-
.../src/airflow/providers/duckdb/hooks/duckdb.py | 6 +-
.../airflow/providers/duckdb/operators/duckdb.py | 48 +-
.../tests/unit/duckdb/operators/test_duckdb.py | 33 +-
providers/exasol/docs/index.rst | 8 +-
providers/exasol/pyproject.toml | 2 +-
providers/fab/pyproject.toml | 2 +-
.../fab/auth_manager/api_fastapi/routes/roles.py | 14 +-
.../fab/auth_manager/api_fastapi/routes/users.py | 12 +-
.../providers/fab/auth_manager/fab_auth_manager.py | 4 +-
.../fab/src/airflow/providers/fab/www/views.py | 6 +-
.../unit/fab/auth_manager/api_fastapi/conftest.py | 21 +
.../auth_manager/api_fastapi/routes/test_roles.py | 161 +-
.../auth_manager/api_fastapi/routes/test_users.py | 128 +-
providers/fab/tests/unit/fab/www/test_views.py | 21 +-
.../git/src/airflow/providers/git/bundles/git.py | 31 +-
.../git/src/airflow/providers/git/hooks/git.py | 7 +-
providers/git/tests/unit/git/bundles/test_git.py | 44 +
providers/git/tests/unit/git/hooks/test_git.py | 10 +
providers/google/docs/index.rst | 2 +
.../google/docs/operators/cloud/vertex_ai.rst | 24 +
providers/google/pyproject.toml | 4 +
.../google/cloud/hooks/vertex_ai/agent_engine.py | 159 +-
.../cloud/hooks/vertex_ai/test_agent_engine.py | 145 ++
providers/jdbc/docs/index.rst | 2 +-
providers/jdbc/pyproject.toml | 2 +-
providers/openai/docs/changelog.rst | 19 +
.../src/airflow/providers/openai/exceptions.py | 11 +
.../src/airflow/providers/openai/hooks/openai.py | 50 +-
.../airflow/providers/openai/operators/openai.py | 63 +-
.../airflow/providers/openai/triggers/openai.py | 19 +-
.../openai/tests/unit/openai/hooks/test_openai.py | 36 +
.../tests/unit/openai/operators/test_openai.py | 114 +-
.../openai/tests/unit/openai/test_exceptions.py | 15 +-
.../tests/unit/openai/triggers/test_openai.py | 47 +-
providers/openlineage/docs/index.rst | 8 +-
providers/openlineage/pyproject.toml | 2 +-
providers/postgres/docs/index.rst | 2 +-
providers/postgres/pyproject.toml | 2 +-
providers/presto/docs/index.rst | 2 +-
providers/presto/pyproject.toml | 2 +-
.../smtp/src/airflow/providers/smtp/hooks/smtp.py | 2 +-
.../snowflake/hooks/snowflake_cortex_agent.py | 42 +-
.../snowflake/hooks/test_snowflake_cortex_agent.py | 106 +-
.../airflow/providers/standard/operators/hitl.py | 6 +-
.../tests/unit/standard/operators/test_hitl.py | 4 +-
providers/teradata/docs/index.rst | 2 +-
providers/teradata/pyproject.toml | 2 +-
providers/vertica/docs/index.rst | 8 +-
providers/vertica/pyproject.toml | 2 +-
providers/ydb/docs/index.rst | 8 +-
providers/ydb/pyproject.toml | 2 +-
pyproject.toml | 4 +-
scripts/ci/docker-compose/backend-mysql.yml | 6 +
scripts/ci/docker-compose/backend-postgres.yml | 10 +-
scripts/ci/docker-compose/base.yml | 9 +
.../ci/docker-compose/integration-cassandra.yml | 5 +
scripts/ci/docker-compose/integration-celery.yml | 8 +
scripts/ci/docker-compose/integration-drill.yml | 5 +
.../docker-compose/integration-elasticsearch.yml | 5 +
scripts/ci/docker-compose/integration-kafka.yml | 2 +
scripts/ci/docker-compose/integration-kerberos.yml | 7 +
scripts/ci/docker-compose/integration-keycloak.yml | 2 +
.../ci/docker-compose/integration-localstack.yml | 2 +
scripts/ci/docker-compose/integration-mongo.yml | 5 +
scripts/ci/docker-compose/integration-mssql.yml | 5 +
.../ci/docker-compose/integration-openlineage.yml | 5 +
.../ci/docker-compose/integration-opensearch.yml | 5 +
scripts/ci/docker-compose/integration-otel.yml | 11 +
scripts/ci/docker-compose/integration-pinot.yml | 2 +
scripts/ci/docker-compose/integration-qdrant.yml | 2 +
scripts/ci/docker-compose/integration-redis.yml | 7 +
scripts/ci/docker-compose/integration-statsd.yml | 8 +
.../ci/docker-compose/integration-tinkerpop.yml | 5 +
scripts/ci/docker-compose/integration-trino.yml | 5 +
scripts/ci/docker-compose/integration-ydb.yml | 2 +
scripts/ci/docker-compose/local-all-sources.yml | 6 +
scripts/ci/docker-compose/local.yml | 6 +
.../ci/lang_sdk_serialization}/__init__.py | 0
scripts/ci/lang_sdk_serialization/compare.py | 233 +++
.../ci/lang_sdk_serialization/serialize_python.py | 140 ++
scripts/ci/lang_sdk_serialization/test_dags.yaml | 166 ++
scripts/ci/prek/changelog_duplicates.py | 11 +-
scripts/ci/prek/check_conn_id_templated.py | 18 +-
scripts/ci/prek/check_go_sdk_generated_drift.py | 187 ++
.../ci/prek/check_openapi_exception_doc_in_sync.py | 239 +++
scripts/in_container/run_agent_framework_tests.sh | 90 +
.../in_container/run_provider_yaml_files_check.py | 2 +
.../tests/ci/lang_sdk_serialization}/__init__.py | 0
.../ci/lang_sdk_serialization/test_compare.py | 245 +++
scripts/tests/ci/prek/test_changelog_duplicates.py | 36 +-
.../tests/ci/prek/test_check_conn_id_templated.py | 26 +-
.../ci/prek/test_check_go_sdk_generated_drift.py | 172 ++
.../test_check_openapi_exception_doc_in_sync.py | 335 ++++
.../configuration/secrets_backends.py | 88 -
.../observability/metrics/metrics_template.yaml | 33 +-
task-sdk/docs/api.rst | 2 +
task-sdk/src/airflow/sdk/__init__.py | 3 +
task-sdk/src/airflow/sdk/__init__.pyi | 2 +
task-sdk/src/airflow/sdk/api/client.py | 12 +
.../src/airflow/sdk/api/datamodels/_generated.py | 15 +
task-sdk/src/airflow/sdk/bases/operator.py | 69 +-
task-sdk/src/airflow/sdk/bases/timetable.py | 7 +
task-sdk/src/airflow/sdk/configuration.py | 10 +-
.../airflow/sdk/coordinators/_bundle_metadata.py | 33 +-
.../src/airflow/sdk/coordinators/_subprocess.py | 211 ++-
.../sdk/coordinators/executable/coordinator.py | 17 +-
.../airflow/sdk/coordinators/java/coordinator.py | 24 +-
.../sdk/coordinators/node/_bundle_reader.py | 210 ++-
.../airflow/sdk/coordinators/node/coordinator.py | 21 +-
task-sdk/src/airflow/sdk/definitions/dag.py | 4 +-
.../airflow/sdk/definitions/timetables/assets.py | 25 +
task-sdk/src/airflow/sdk/execution_time/bundles.py | 90 +
task-sdk/src/airflow/sdk/execution_time/comms.py | 7 +
.../airflow/sdk/execution_time/request_handlers.py | 9 +
.../airflow/sdk/execution_time/schema/schema.json | 65 +
.../sdk/execution_time/schema/versions/__init__.py | 8 +-
.../execution_time/schema/versions/v2026_10_30.py | 21 +
.../airflow/sdk/execution_time/secrets/__init__.py | 9 +-
.../src/airflow/sdk/execution_time/supervisor.py | 11 +-
.../src/airflow/sdk/execution_time/task_runner.py | 115 +-
task-sdk/src/airflow/sdk/execution_time/tracing.py | 60 +
task-sdk/src/airflow/sdk/importers/base.py | 2 +
task-sdk/src/airflow/sdk/lineage.py | 2 +-
task-sdk/src/airflow/sdk/serde/__init__.py | 7 +-
task-sdk/src/airflow/sdk/types.py | 2 +
task-sdk/tests/task_sdk/api/test_client.py | 15 +
task-sdk/tests/task_sdk/bases/test_operator.py | 171 ++
.../coordinators/executable/test_coordinator.py | 60 +-
.../task_sdk/coordinators/java/test_coordinator.py | 39 +
.../coordinators/node/_bundle_test_utils.py | 55 +-
.../coordinators/node/test_bundle_reader.py | 125 +-
.../task_sdk/coordinators/node/test_coordinator.py | 51 +-
.../tests/task_sdk/coordinators/test_subprocess.py | 264 ++-
task-sdk/tests/task_sdk/definitions/test_dag.py | 16 +-
.../tests/task_sdk/execution_time/test_bundles.py | 86 +
.../tests/task_sdk/execution_time/test_context.py | 13 +-
.../tests/task_sdk/execution_time/test_secrets.py | 3 +-
.../task_sdk/execution_time/test_supervisor.py | 15 +
.../task_sdk/execution_time/test_task_runner.py | 279 ++-
.../tests/task_sdk/execution_time/test_tracing.py | 144 ++
ts-sdk/.pre-commit-config.yaml | 14 +
ts-sdk/adr/0002-native-dag-interface.md | 58 +-
ts-sdk/package.json | 3 +-
ts-sdk/pnpm-lock.yaml | 27 +-
.../ci/prek/check_serialization_conformance.py | 44 +
ts-sdk/src/cli/bundle-encoder.ts | 181 +-
ts-sdk/src/cli/pack.ts | 144 +-
ts-sdk/src/coordinator/manifest.ts | 24 +-
ts-sdk/src/coordinator/serde.ts | 751 ++++++++
ts-sdk/src/generated/supervisor.ts | 68 +-
ts-sdk/src/index.ts | 4 +-
ts-sdk/src/sdk/bundle.ts | 7 +
ts-sdk/src/sdk/dag.ts | 708 ++++++--
ts-sdk/src/sdk/module-source.ts | 74 +
ts-sdk/tests/cli/fixtures/bundle-v1.min.mjs | 6 +-
ts-sdk/tests/cli/pack.test.ts | 391 +++-
ts-sdk/tests/conformance/serialize_typescript.ts | 163 ++
ts-sdk/tests/coordinator/arg-binding.test.ts | 19 +
ts-sdk/tests/coordinator/runtime-manifest.test.ts | 26 +
ts-sdk/tests/coordinator/serde.test.ts | 846 +++++++++
ts-sdk/tests/public-api.test.ts | 120 +-
ts-sdk/tests/sdk/dag.test.ts | 723 +++++++-
uv.lock | 62 +-
770 files changed, 44338 insertions(+), 9852 deletions(-)
delete mode 100644 .apache-magpie-overrides/committer-onboarding-config.md
delete mode 100644 .apache-magpie-overrides/committer-readiness.md
delete mode 100644 .apache-magpie-overrides/contributor-nomination-config.md
delete mode 100644 .apache-magpie-overrides/contributor-sentiment-config.md
delete mode 100644 .apache-magpie-overrides/good-first-issue-config.md
delete mode 100644 .apache-magpie-overrides/onboarding-concierge-config.md
create mode 100644 .github/workflows/agent-framework-tests.yml
create mode 100644 airflow-core/adr/lang-sdk/0010-native-dag-processing.md
create mode 100644
airflow-core/adr/lang-sdk/0011-mixed-language-dag-processing.md
create mode 100644 airflow-core/adr/lang-sdk/0012-lang-sdk-parse-protocol.md
create mode 100644
airflow-core/adr/lang-sdk/0013-persisted-task-handler-bindings.md
create mode 100644
airflow-core/adr/lang-sdk/0014-bundle-metadata-and-cache-digest.md
create mode 100644
airflow-core/adr/lang-sdk/0015-per-dag-source-in-bundle-artifact.md
create mode 100644 airflow-core/newsfragments/58543.feature.rst
delete mode 100644 airflow-core/newsfragments/70681.significant.rst
create mode 100644 airflow-core/newsfragments/72100.significant.rst
create mode 100644
airflow-core/src/airflow/api_fastapi/common/parameters/job.py
delete mode 100644
airflow-core/src/airflow/dag_processing/importers/__init__.py
delete mode 100644 airflow-core/src/airflow/dag_processing/importers/base.py
delete mode 100644
airflow-core/src/airflow/dag_processing/importers/python_importer.py
create mode 100644
airflow-core/src/airflow/migrations/versions/0141_3_4_0_add_timetable_asset_gated_to_dagmodel.py
create mode 100644
airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/FilterBar/filters/RunStateFilter.tsx
create mode 100644
airflow-core/src/airflow/ui/src/components/FilterBar/filters/runStateParams.test.ts
create mode 100644
airflow-core/src/airflow/ui/src/components/FilterBar/filters/runStateParams.ts
create mode 100644
airflow-core/src/airflow/ui/src/pages/TaskInstance/Details.test.tsx
rename airflow-core/src/airflow/ui/src/pages/{Variables/BackendsOrderCard.tsx
=> TaskInstance/stateReason.ts} (50%)
delete mode 100644
airflow-core/src/airflow/ui/src/pages/Variables/BackendsOrderModal.tsx
create mode 100644
airflow-core/tests/unit/api_fastapi/execution_api/versions/v2026_10_30/test_dag_run_notes.py
delete mode 100644
airflow-core/tests/unit/dag_processing/importers/test_registry.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0049_remove_pickled_data_from_xcom_table.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0055_remove_pickled_data_from_dagrun_table.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0080_deadline_callback_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0094_deadline_callback_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0117_deadline_interval_json_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0129_add_indexes_on_serialized_dag_and_dag_code.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0131_lower_case_team_names.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0136_fold_task_map_into_xcom.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0138_allocate_pending_task_attempt_numbers.py
create mode 100644 go-sdk/airflow/inputs.go
create mode 100644 go-sdk/airflow/inputs_test.go
create mode 100644 go-sdk/airflow/spec.gen.go
create mode 100644 go-sdk/airflow/spec_test.go
create mode 100644 go-sdk/airflow/trigger_dag_run.go
create mode 100644 go-sdk/airflow/trigger_dag_run_test.go
create mode 100644 go-sdk/internal/genlicense/genlicense.go
create mode 100644 go-sdk/internal/genlicense/genlicense_test.go
create mode 100644 go-sdk/internal/genspec/authoring.go
create mode 100644 go-sdk/internal/genspec/authoring_test.go
create mode 100644 go-sdk/internal/genspec/main.go
copy go-sdk/{airflow/task_option.go => internal/genspec/main_test.go} (57%)
create mode 100644 go-sdk/internal/genspec/normalize.go
create mode 100644 go-sdk/internal/genspec/normalize_test.go
copy {ts-sdk => java-sdk/sdk}/schema/dag-schema.json (100%)
delete mode 100644
java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Builder.kt
create mode 100644
java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/Fields.kt
create mode 100644 providers/amazon/docs/operators/duckdb.rst
create mode 100644
providers/amazon/src/airflow/providers/amazon/aws/hooks/duckdb.py
create mode 100644 providers/amazon/tests/system/amazon/aws/example_duckdb.py
create mode 100644
providers/amazon/tests/system/amazon/aws/example_emr_serverless_session.py
create mode 100644 providers/amazon/tests/unit/amazon/aws/hooks/test_duckdb.py
create mode 100644
providers/amazon/tests/unit/amazon/aws/operators/test_emr_serverless_session.py
create mode 100644 providers/common/ai/docs/capabilities.rst
create mode 100644 providers/common/ai/docs/frameworks/adk.rst
create mode 100644 providers/common/ai/docs/frameworks/pydantic_ai.rst
delete mode 100644 providers/common/ai/docs/guardrails.rst
create mode 100644 providers/common/ai/docs/stability.rst
create mode 100644 providers/common/ai/docs/toolsets/object_storage.rst
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/durable/replay_usage.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_adk_agent.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_object_storage_toolset.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_pydantic_ai_agent.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/managed_agents/__init__.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/managed_agents/base.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/managed_agents/failover.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/adk.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/tracing.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/toolsets/object_storage.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/masking.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/prompt_cache.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/task_logger.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/tool_metrics.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/toolset_base.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/usage_budget.py
create mode 100644
providers/common/ai/tests/unit/common/ai/durable/test_replay_usage.py
rename {airflow-core/tests/unit/dag_processing/importers =>
providers/common/ai/tests/unit/common/ai/managed_agents}/__init__.py (100%)
create mode 100644
providers/common/ai/tests/unit/common/ai/managed_agents/test_base.py
create mode 100644
providers/common/ai/tests/unit/common/ai/managed_agents/test_failover.py
create mode 100644
providers/common/ai/tests/unit/common/ai/sandbox/fake_tags.py
create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_adk.py
create mode 100644
providers/common/ai/tests/unit/common/ai/tools/test_tracing.py
create mode 100644
providers/common/ai/tests/unit/common/ai/toolsets/test_object_storage.py
create mode 100644
providers/common/ai/tests/unit/common/ai/toolsets/test_retry_budget.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_masking.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_prompt_cache.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_task_logger.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_tool_metrics.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_toolset_base.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_usage_budget.py
create mode 100644
providers/common/compat/src/airflow/providers/common/compat/_set_during_execution.py
create mode 100644
providers/common/compat/tests/unit/common/compat/test__set_during_execution.py
copy {airflow-core/src/airflow/_shared =>
scripts/ci/lang_sdk_serialization}/__init__.py (100%)
create mode 100644 scripts/ci/lang_sdk_serialization/compare.py
create mode 100644 scripts/ci/lang_sdk_serialization/serialize_python.py
create mode 100644 scripts/ci/lang_sdk_serialization/test_dags.yaml
create mode 100755 scripts/ci/prek/check_go_sdk_generated_drift.py
create mode 100755 scripts/ci/prek/check_openapi_exception_doc_in_sync.py
create mode 100755 scripts/in_container/run_agent_framework_tests.sh
copy {airflow-core/src/airflow/_shared =>
scripts/tests/ci/lang_sdk_serialization}/__init__.py (100%)
create mode 100644 scripts/tests/ci/lang_sdk_serialization/test_compare.py
create mode 100644 scripts/tests/ci/prek/test_check_go_sdk_generated_drift.py
create mode 100644
scripts/tests/ci/prek/test_check_openapi_exception_doc_in_sync.py
delete mode 100644
shared/configuration/src/airflow_shared/configuration/secrets_backends.py
create mode 100644 task-sdk/src/airflow/sdk/execution_time/bundles.py
create mode 100644 task-sdk/src/airflow/sdk/execution_time/tracing.py
create mode 100644 task-sdk/tests/task_sdk/execution_time/test_bundles.py
create mode 100644 task-sdk/tests/task_sdk/execution_time/test_tracing.py
create mode 100755 ts-sdk/scripts/ci/prek/check_serialization_conformance.py
create mode 100644 ts-sdk/src/coordinator/serde.ts
create mode 100644 ts-sdk/src/sdk/module-source.ts
create mode 100644 ts-sdk/tests/conformance/serialize_typescript.ts
create mode 100644 ts-sdk/tests/coordinator/serde.test.ts