This is an automated email from the ASF dual-hosted git repository.
ephraimbuddy pushed a change to branch dag-processor-activation
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard d072d7711a2 Stop repeating Dag callbacks after an Execution API
request fails
discard cc007a040af Keep Dag processor callbacks and reparses through
transient failures
discard 14733808ce7 Correct the Dag processor API-mode docs and Compose example
discard 13a55ee735c Fix Dag processor API-mode shutdown, completion and claim
capacity
discard 769055ac2d8 Release Dag processor claims for unpublishable sources
discard 49ff7222679 Separate trusted Dag bundle catalog provisioning from
processing
discard 3e4d3d977f1 Restore isolated Dag processor regression coverage
discard 952c049c87f Keep API Dag processors recoverable through delivery
failures
discard f82ba4a70e7 Move API work delivery state out of the Dag processor
manager
discard 47d634b8a2d Allow independent priority parses to finish in either
order in recovery tests
discard 466ad79d60e Preserve requested Dag processing work during bundle
failures
discard c4229fde8f2 Wait for fresh inventories before running priority parses
discard 0e4887a4513 Preserve Dag processor work across retries and reparses
discard 01b3a1c4eeb Run Dag processors without metadata database access
discard ad4414438cc Resume Dag parsing soon after a transient bundle listing
failure
discard d31d0514fd4 Show a failed parse's import error at once without
deactivating Dags
discard cf8fbe2ecd9 Keep publishing a Dag archive that has an unrepresentable
member
discard d2ed6dd08fb Close gaps in the Dag processor's API-mode tests
discard 67485f6eaca Handle Execution API failures in the API-mode Dag processor
discard e03b2930c97 Filter invalid Dag discovery paths and deduplicate parse
sources
discard f2ebf323258 Recover failed Dag parses and bound inventory publication
discard c498960f987 Introduce a source interface for requested Dag processing
work
discard 464cac8bc7c Avoid database sessions when collecting API-mode Dag
results
discard be5625fda9e Back off inventory retries and report results the API
would refuse
discard 33e3225adb9 Publish Dag processor results through the Execution API
discard 2d075fed107 Clarify which Dag processors parsing cleanup expires
discard 6612de200f2 Tighten test coverage of Dag processor requested-work
delivery
discard 5cfa450324d Fix Dag processor maintenance logs and stale Dag warning
cleanup
discard 13d95093d10 Carry publication receipts through Dag processor
maintenance
discard d0e1b327917 Preserve Dag cleanup and exact priority reparse targets
discard 6efd4f05f1d Fix Dag processor requested-work cleanup and delivery
discard e0d8f2ee77e Adapt legacy Dag upgrade regression to bundle discovery
results
discard c3793a1468e Align Dag processor claim migrations with main
discard 1015ea22005 Test legacy Dag deactivation after bundle-name backfill
discard 269c6e5d2bb Fix Dag processor work retries and metadata cleanup
discard d57ee098679 Retain Dag processor work until delivery is acknowledged
discard e153354ded8 Keep a file's Dags schedulable after a failed parse is
reported
discard bc088968b9d Fix which Dags a Dag processor publication marks stale
discard 2f5a9a94ea2 Reject only the invalid Dags in a Dag processor publication
discard 76b7e8ae7f8 Cover publication API rejections and clarify its docs and
names
discard b127580ce34 Reject Dags without a timetable or with incomplete
deadline alerts
discard 25d3fff0abd Preserve compact source publications and actionable Dag
diagnostics
discard 39e93220fbd Clean asset references for stale Dags removed from bundles
discard 5cfccd0731f Align API-mode Dag publication with DB-mode cleanup
discard 884ad9b4774 Allow Dag processors to publish metadata through the
Execution API
discard 9bc77b1f662 Describe the git provider's refresh-error probe accurately
discard 9170d76ac5d Stop repeated bundle drains and keep cleanup overrides
working
discard 0bd18f5b169 Keep Dag parsing and metrics healthy during bundle outages
discard 1f2332be9ac Revise Dag bundle refresh compatibility guidance
discard d299f5ee105 Clarify bundle refresh compatibility and simplify its
regression test
discard 97c1d4bed76 Keep Git bundles importable on Airflow 3.4
discard bda0ed0fdba Keep Dag parsing responsive during bundle refresh failures
discard 4f98ef56570 Make the bundle refresh regression test independent of
uptime
discard 3a6f378d2cf Avoid parsing stalls while a bundle refresh waits for
imports
discard 7b60a8b86a5 Keep Dag parsing results aligned with refreshed bundle
sources
add 750617c3867 Fix entry-point plugins reported as duplicates on
RHEL/Fedora venvs (#74531)
add f14247a5938 Add a general debugging guide to the troubleshooting doc
(#71457)
add ebe49645e34 Move XCom filter param models into execution API
datamodels (#76536)
add 437f6be3cec Run the durable OpenAI Agents tests in the agent framework
CI job (#76500)
add 7625b59a85e Key LLM batch and durable Strands state on the task loop
iteration (#76201)
add d46d97fa8d5 Note the unparseable-output case in OpenAIResponseOperator
XCom docs (#74519)
add b7ceab0372b Support Workload Identity Federation in Snowflake REST API
authentication (#75810)
add f82542a453a Name the caller's own MCP client and durable setup in
Common AI errors (#76495)
add 8e922e329ab Refactor isinstance dispatching with polymorphism (#74634)
add e3c21b77c97 Update French (fr) UI translations to 100% coverage
(#76460)
add dcbf21690e8 Pass AssetStateStoreAccessors into response_check_path
Callable in HttpEventTrigger (#72287)
add 6cf8ed6c63a UI: Translate the Spanish strings added since the last
pass (#76466)
add b5ab0a15174 UI: Defer React plugin compatibility runtime (#75083)
add b0581660e45 Support fail_on_reject on every LLM approval operator
(#74493)
add 24464f6d728 Keep Dag and deadline list serialization off the API
server event loop (#76525)
add 020259387b9 Support multimodal prompts with enable_hitl_review in
AgentOperator (#74389)
add c4eaf4b8399 Prepare providers release 2026-11-03 (#76490)
add 3eacdb97dfd Sanitize error message in DatabricksExecutionTrigger
(#70385)
add 8529c41db15 Add environment_variables to MWAA Serverless create/update
workflow operators (#76496)
add c8d8df3353d Add `@task.modal` to run Python functions on Modal without
Airflow in the image (#76502)
add bca1e144da1 Add raphaelauv to fork-ci-gate (#76538)
add 71a19df58c5 Write container logs to the task log in deferrable
AzureContainerInstancesOperator (#76330)
add 6bacb63888f Complete Dutch translations (2026-10-05) (#74286)
add 77762c256df Add `partition_key` to the `DagRun Finished` log line
(#76557)
add 1f4bc05aa0a Allow Human-in-the-loop tasks to be answered while still
running (#75413)
add c7fcba0106a Stop holding openai below 3 in Airflow's CI image and
constraints (#76503)
add 322c178e05b Fix duplicated asset events when name_prefix_pattern
matches all (#74816)
add 1fe65f5f13a Keep parallel tool results replayable across retries in
OpenAI Agents durable runs (#76015)
add 3204b6ebebb Fix enum names and non-ISO dates in airflowctl dags output
(#76354)
add cc1dfb94296 Remove deprecated project_id from BigQueryGetDataOperator
(#76115)
add 57be3ff441d Keep Dag parsing results aligned with refreshed bundle
sources
add f15d358847a Avoid parsing stalls while a bundle refresh waits for
imports
add b14c938945f Make the bundle refresh regression test independent of
uptime
add 120dd5c728b Keep Dag parsing responsive during bundle refresh failures
add 2485e4ebc66 Keep Git bundles importable on Airflow 3.4
add 0ae0d380721 Clarify bundle refresh compatibility and simplify its
regression test
add abe254a9828 Revise Dag bundle refresh compatibility guidance
add 62870a2972e Keep Dag parsing and metrics healthy during bundle outages
add a0c3b301e94 Stop repeated bundle drains and keep cleanup overrides
working
add 57427115ce0 Describe the git provider's refresh-error probe accurately
add 4552a6bc204 Clarify refresh retry timing and note the bundle parsing
pause
add 0292f97fbde Allow Dag processors to publish metadata through the
Execution API
add 4e27e96ff86 Align API-mode Dag publication with DB-mode cleanup
add 0c6b8d27c67 Clean asset references for stale Dags removed from bundles
add 8582245856a Preserve compact source publications and actionable Dag
diagnostics
add 7530cd2bc33 Reject Dags without a timetable or with incomplete
deadline alerts
add 64ab92d37ab Cover publication API rejections and clarify its docs and
names
add 5f67d7c7b72 Reject only the invalid Dags in a Dag processor publication
add e07f820e05f Fix which Dags a Dag processor publication marks stale
add 83ef0e5e7df Keep a file's Dags schedulable after a failed parse is
reported
add 8d65973f4e8 Renumber the publication-state migration after main's 0154
add 0d44ea0001f Retain Dag processor work until delivery is acknowledged
add 28abbe58224 Fix Dag processor work retries and metadata cleanup
add a062f90d249 Test legacy Dag deactivation after bundle-name backfill
add c353fc45499 Align Dag processor claim migrations with main
add 01c1f41ae3f Adapt legacy Dag upgrade regression to bundle discovery
results
add cec37e0f1c4 Fix Dag processor requested-work cleanup and delivery
add 3e38e05d8c2 Preserve Dag cleanup and exact priority reparse targets
add 591cdcebe1d Carry publication receipts through Dag processor
maintenance
add 8da4d47d02d Fix Dag processor maintenance logs and stale Dag warning
cleanup
add bd39b80cc35 Tighten test coverage of Dag processor requested-work
delivery
add 9b520d5822b Clarify which Dag processors parsing cleanup expires
add 99e077af0e2 Renumber the work-claims migration after main's 0154
add 06a87bfc1c7 Publish Dag processor results through the Execution API
add 23f75dcc343 Back off inventory retries and report results the API
would refuse
add 1467bb4654f Avoid database sessions when collecting API-mode Dag
results
add 737a89d36af Introduce a source interface for requested Dag processing
work
add 024fe7bc497 Recover failed Dag parses and bound inventory publication
add 8eb5e83a914 Filter invalid Dag discovery paths and deduplicate parse
sources
add 64d121fd1c1 Handle Execution API failures in the API-mode Dag processor
add b42516028e5 Close gaps in the Dag processor's API-mode tests
add 12b0663309f Keep publishing a Dag archive that has an unrepresentable
member
add 13d719bc624 Show a failed parse's import error at once without
deactivating Dags
add 97ba211d4ea Resume Dag parsing soon after a transient bundle listing
failure
add 5c9861c736d Retry a failed Dag bundle listing at the next refresh check
add 3617837e2c3 Run Dag processors without metadata database access
add 3cec5281325 Preserve Dag processor work across retries and reparses
add b25432f3ee9 Wait for fresh inventories before running priority parses
add e063a02b16d Preserve requested Dag processing work during bundle
failures
add 1e1316f0175 Allow independent priority parses to finish in either
order in recovery tests
add 8f74bdc89b2 Move API work delivery state out of the Dag processor
manager
add 26ac29ac547 Keep API Dag processors recoverable through delivery
failures
add bc8897f64c2 Restore isolated Dag processor regression coverage
add 239bbc3efb1 Separate trusted Dag bundle catalog provisioning from
processing
add f346e0e0147 Release Dag processor claims for unpublishable sources
add 48aff535f0f Fix Dag processor API-mode shutdown, completion and claim
capacity
add e9be405741f Correct the Dag processor API-mode docs and Compose example
add 0af634798bc Keep Dag processor callbacks and reparses through
transient failures
add 89ef4eada33 Stop repeating Dag callbacks after an Execution API
request fails
add a725ab9fe6f Stop logging callback processes for removed Dags as
abnormal exits
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 (d072d7711a2)
\
N -- N -- N refs/heads/dag-processor-activation (a725ab9fe6f)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/fork-ci-gate.toml | 1 +
.github/workflows/agent-framework-tests.yml | 2 +-
Dockerfile.ci | 17 +-
.../administration-and-deployment/dag-bundles.rst | 12 +-
airflow-core/docs/migrations-ref.rst | 4 +-
.../docs/security/jwt_token_authentication.rst | 5 +-
airflow-core/docs/troubleshooting.rst | 129 ++++++
airflow-core/newsfragments/74789.significant.rst | 12 +
.../airflow/api_fastapi/common/parameters/misc.py | 10 +-
.../api_fastapi/core_api/datamodels/dags.py | 4 +-
.../api_fastapi/core_api/datamodels/ui/deadline.py | 2 +-
.../api_fastapi/core_api/routes/public/assets.py | 2 +-
.../api_fastapi/core_api/routes/public/dags.py | 7 +-
.../api_fastapi/core_api/routes/public/hitl.py | 6 +-
.../airflow/api_fastapi/core_api/routes/ui/dags.py | 9 +-
.../api_fastapi/core_api/routes/ui/deadlines.py | 2 +-
.../api_fastapi/execution_api/datamodels/xcom.py | 19 +
.../api_fastapi/execution_api/routes/hitl.py | 16 +-
.../api_fastapi/execution_api/routes/xcoms.py | 22 +-
.../api_fastapi/execution_api/versions/__init__.py | 4 +-
.../execution_api/versions/v2025_08_10.py | 2 +-
.../execution_api/versions/v2026_10_30.py | 12 +
.../versions/v2026_10_30_xcom_params.py | 35 --
.../src/airflow/config_templates/config.yml | 8 +-
.../src/airflow/dag_processing/api_client.py | 14 +-
.../airflow/dag_processing/api_requested_work.py | 23 +-
airflow-core/src/airflow/dag_processing/manager.py | 36 +-
.../src/airflow/dag_processing/processor.py | 41 +-
.../src/airflow/jobs/dag_processor_job_runner.py | 8 +-
.../src/airflow/jobs/triggerer_job_runner.py | 23 +-
...54_3_5_0_add_idempotency_key_to_hitl_detail.py} | 28 +-
...5_3_5_0_add_dag_processor_publication_state.py} | 4 +-
....py => 0156_3_5_0_add_processor_work_claims.py} | 0
airflow-core/src/airflow/models/dagrun.py | 4 +-
airflow-core/src/airflow/models/hitl.py | 43 ++
.../airflow/ui/public/i18n/locales/es/browse.json | 1 +
.../airflow/ui/public/i18n/locales/es/common.json | 8 +-
.../ui/public/i18n/locales/es/components.json | 4 +
.../src/airflow/ui/public/i18n/locales/es/dag.json | 4 +-
.../airflow/ui/public/i18n/locales/es/dags.json | 1 +
.../airflow/ui/public/i18n/locales/fr/admin.json | 3 +
.../airflow/ui/public/i18n/locales/fr/browse.json | 2 +
.../airflow/ui/public/i18n/locales/fr/common.json | 34 +-
.../ui/public/i18n/locales/fr/components.json | 13 +
.../src/airflow/ui/public/i18n/locales/fr/dag.json | 68 ++-
.../airflow/ui/public/i18n/locales/fr/dags.json | 14 +-
.../ui/public/i18n/locales/fr/dashboard.json | 1 +
.../airflow/ui/public/i18n/locales/fr/hitl.json | 1 +
.../airflow/ui/public/i18n/locales/nl/admin.json | 26 +-
.../airflow/ui/public/i18n/locales/nl/assets.json | 18 +-
.../airflow/ui/public/i18n/locales/nl/browse.json | 34 ++
.../airflow/ui/public/i18n/locales/nl/common.json | 227 +++++++++-
.../ui/public/i18n/locales/nl/components.json | 57 ++-
.../src/airflow/ui/public/i18n/locales/nl/dag.json | 139 +++++-
.../airflow/ui/public/i18n/locales/nl/dags.json | 60 ++-
.../ui/public/i18n/locales/nl/dashboard.json | 24 +-
.../airflow/ui/public/i18n/locales/nl/hitl.json | 1 +
.../ui/src/components/NeedsReviewButton.tsx | 3 +-
.../airflow/ui/src/hooks/useRequiredActionTabs.ts | 6 +-
airflow-core/src/airflow/ui/src/main.tsx | 19 +-
.../HITLTaskInstances/HITLTaskInstances.test.tsx | 11 +-
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 4 +-
.../src/airflow/ui/src/pages/ReactPlugin.test.tsx | 25 +-
.../src/airflow/ui/src/pages/ReactPlugin.tsx | 14 +-
airflow-core/src/airflow/ui/src/utils/hitl.test.ts | 48 +-
airflow-core/src/airflow/ui/src/utils/hitl.ts | 12 +-
.../src/utils/registerPluginDependencies.test.ts | 59 +++
.../utils/registerPluginDependencies.ts} | 39 +-
.../core_api/routes/public/test_assets.py | 2 +
.../core_api/routes/public/test_dags.py | 18 +
.../core_api/routes/public/test_hitl.py | 46 ++
.../api_fastapi/core_api/routes/ui/test_dags.py | 30 ++
.../core_api/routes/ui/test_deadlines.py | 12 +
.../execution_api/versions/head/test_hitl.py | 45 ++
.../tests/unit/dag_processing/test_api_client.py | 33 ++
.../dag_processing/test_manager_api_failures.py | 32 +-
.../dag_processing/test_manager_api_inventory.py | 6 +
.../dag_processing/test_manager_api_results.py | 43 +-
.../tests/unit/dag_processing/test_processor.py | 125 +++---
.../dag_processing/test_requested_work_recovery.py | 116 ++---
...s.py => test_0156_add_processor_work_claims.py} | 2 +-
airflow-core/tests/unit/models/test_dagrun.py | 33 ++
.../src/airflowctl/ctl/commands/dag_command.py | 5 +-
.../airflow_ctl/ctl/commands/test_dag_command.py | 27 +-
contributing-docs/12_provider_distributions.rst | 6 +-
.../13_airflow_dependencies_and_extras.rst | 5 +
.../src/airflow_breeze/utils/verification_plan.py | 5 +
docs/spelling_wordlist.txt | 2 +
generated/known_sdk_imports_in_core.txt | 4 +-
.../pkg/execution/genmodels/discriminators.gen.go | 4 +
go-sdk/pkg/execution/genmodels/models.gen.go | 83 ++--
go-sdk/schema/supervisor-schema.json | 72 +++
providers/.last_release_date.txt | 2 +-
providers/alibaba/README.rst | 6 +-
providers/alibaba/docs/changelog.rst | 12 +
providers/alibaba/docs/index.rst | 6 +-
providers/alibaba/provider.yaml | 3 +-
providers/alibaba/pyproject.toml | 6 +-
.../src/airflow/providers/alibaba/__init__.py | 2 +-
providers/amazon/README.rst | 10 +-
providers/amazon/docs/changelog.rst | 55 +++
providers/amazon/docs/index.rst | 8 +-
providers/amazon/provider.yaml | 3 +-
providers/amazon/pyproject.toml | 8 +-
.../src/airflow/providers/amazon/__init__.py | 2 +-
.../amazon/aws/operators/mwaa_serverless.py | 21 +
.../amazon/aws/operators/test_mwaa_serverless.py | 52 +++
providers/apache/arrow/README.rst | 6 +-
providers/apache/arrow/docs/changelog.rst | 19 +
providers/apache/arrow/docs/index.rst | 6 +-
providers/apache/arrow/provider.yaml | 3 +-
providers/apache/arrow/pyproject.toml | 6 +-
.../src/airflow/providers/apache/arrow/__init__.py | 2 +-
providers/apache/hive/README.rst | 6 +-
providers/apache/hive/docs/changelog.rst | 13 +
providers/apache/hive/docs/index.rst | 6 +-
providers/apache/hive/provider.yaml | 3 +-
providers/apache/hive/pyproject.toml | 6 +-
.../src/airflow/providers/apache/hive/__init__.py | 2 +-
providers/apache/kafka/README.rst | 6 +-
providers/apache/kafka/docs/changelog.rst | 12 +
providers/apache/kafka/docs/index.rst | 6 +-
providers/apache/kafka/provider.yaml | 3 +-
providers/apache/kafka/pyproject.toml | 6 +-
.../src/airflow/providers/apache/kafka/__init__.py | 2 +-
providers/celery/README.rst | 6 +-
providers/celery/docs/changelog.rst | 17 +
providers/celery/docs/index.rst | 6 +-
providers/celery/provider.yaml | 3 +-
providers/celery/pyproject.toml | 6 +-
.../src/airflow/providers/celery/__init__.py | 2 +-
providers/cncf/kubernetes/README.rst | 6 +-
providers/cncf/kubernetes/docs/changelog.rst | 34 ++
providers/cncf/kubernetes/docs/index.rst | 6 +-
providers/cncf/kubernetes/provider.yaml | 3 +-
providers/cncf/kubernetes/pyproject.toml | 6 +-
.../airflow/providers/cncf/kubernetes/__init__.py | 2 +-
providers/common/ai/docs/approval_gates.rst | 12 +-
providers/common/ai/docs/durable_execution.rst | 2 +-
providers/common/ai/docs/frameworks/anthropic.rst | 4 +-
.../common/ai/docs/frameworks/claude_agent_sdk.rst | 4 +-
providers/common/ai/docs/frameworks/index.rst | 28 +-
.../common/ai/docs/frameworks/openai_agents.rst | 7 +-
providers/common/ai/docs/frameworks/strands.rst | 7 +-
providers/common/ai/docs/hooks/llamaindex.rst | 6 +
providers/common/ai/docs/operators/agent.rst | 7 +-
providers/common/ai/docs/operators/llm.rst | 8 +-
providers/common/ai/docs/operators/llm_batch.rst | 5 +-
providers/common/ai/docs/operators/llm_branch.rst | 4 +-
providers/common/ai/docs/stability.rst | 6 +-
providers/common/ai/docs/troubleshooting.rst | 2 +-
providers/common/ai/provider.yaml | 7 +-
providers/common/ai/pyproject.toml | 10 +-
.../src/airflow/providers/common/ai/batch/state.py | 43 +-
.../providers/common/ai/decorators/agent.py | 7 -
.../airflow/providers/common/ai/durable/journal.py | 70 ++-
.../providers/common/ai/durable/openai_agents.py | 64 ++-
.../airflow/providers/common/ai/durable/storage.py | 3 +-
.../airflow/providers/common/ai/durable/strands.py | 20 +-
.../src/airflow/providers/common/ai/exceptions.py | 10 +
.../providers/common/ai/get_provider_info.py | 2 +-
.../providers/common/ai/mixins/hitl_review.py | 15 +-
.../airflow/providers/common/ai/operators/agent.py | 8 -
.../airflow/providers/common/ai/operators/llm.py | 46 +-
.../providers/common/ai/operators/llm_batch.py | 8 +-
.../providers/common/ai/operators/llm_branch.py | 29 +-
.../common/ai/operators/llm_file_analysis.py | 3 +-
.../common/ai/operators/llm_schema_compare.py | 3 +-
.../providers/common/ai/operators/llm_sql.py | 7 +-
.../airflow/providers/common/ai/tools/__init__.py | 28 +-
.../src/airflow/providers/common/ai/tools/adk.py | 8 +-
.../airflow/providers/common/ai/tools/anthropic.py | 14 +-
.../providers/common/ai/tools/claude_agent_sdk.py | 9 +-
.../providers/common/ai/tools/openai_agents.py | 9 +-
.../airflow/providers/common/ai/tools/strands.py | 6 +-
.../airflow/providers/common/ai/toolsets/mcp.py | 14 +-
.../providers/common/ai/utils/validation.py | 24 -
.../ai/tests/unit/common/ai/batch/test_state.py | 52 +++
.../tests/unit/common/ai/decorators/test_agent.py | 16 +-
.../tests/unit/common/ai/durable/test_journal.py | 76 ++++
.../unit/common/ai/durable/test_openai_agents.py | 486 ++++++++++++++++++++-
.../tests/unit/common/ai/durable/test_storage.py | 9 +-
.../tests/unit/common/ai/durable/test_strands.py | 18 +
.../tests/unit/common/ai/hooks/test_llamaindex.py | 11 +
.../unit/common/ai/mixins/test_hitl_review.py | 39 +-
.../tests/unit/common/ai/operators/test_agent.py | 30 +-
.../ai/operators/test_llamaindex_embedding.py | 8 +-
.../ai/operators/test_llamaindex_retrieval.py | 11 +-
.../ai/tests/unit/common/ai/operators/test_llm.py | 87 ++++
.../unit/common/ai/operators/test_llm_batch.py | 28 +-
.../unit/common/ai/operators/test_llm_branch.py | 9 +-
.../ai/tests/unit/common/ai/tools/test_adk.py | 6 +
.../tests/unit/common/ai/tools/test_anthropic.py | 13 +-
.../unit/common/ai/tools/test_claude_agent_sdk.py | 10 +
.../unit/common/ai/tools/test_openai_agents.py | 6 +
.../ai/tests/unit/common/ai/tools/test_strands.py | 6 +
.../ai/tests/unit/common/ai/tools/test_tools.py | 43 +-
.../ai/tests/unit/common/ai/toolsets/test_mcp.py | 8 +-
.../tests/unit/common/ai/utils/test_validation.py | 32 +-
providers/common/compat/README.rst | 6 +-
providers/common/compat/docs/changelog.rst | 17 +
providers/common/compat/docs/index.rst | 6 +-
providers/common/compat/provider.yaml | 3 +-
providers/common/compat/pyproject.toml | 6 +-
.../airflow/providers/common/compat/__init__.py | 2 +-
providers/common/io/README.rst | 6 +-
providers/common/io/docs/changelog.rst | 12 +
providers/common/io/docs/index.rst | 6 +-
providers/common/io/provider.yaml | 3 +-
providers/common/io/pyproject.toml | 6 +-
.../io/src/airflow/providers/common/io/__init__.py | 2 +-
providers/common/sql/README.rst | 6 +-
providers/common/sql/docs/changelog.rst | 24 +
providers/common/sql/docs/index.rst | 6 +-
providers/common/sql/provider.yaml | 3 +-
providers/common/sql/pyproject.toml | 6 +-
.../src/airflow/providers/common/sql/__init__.py | 2 +-
providers/databricks/README.rst | 8 +-
providers/databricks/docs/changelog.rst | 15 +
providers/databricks/docs/index.rst | 8 +-
providers/databricks/provider.yaml | 3 +-
providers/databricks/pyproject.toml | 8 +-
.../src/airflow/providers/databricks/__init__.py | 2 +-
.../providers/databricks/utils/databricks.py | 20 +-
.../tests/unit/databricks/utils/test_databricks.py | 76 ++++
providers/dbt/cloud/README.rst | 6 +-
providers/dbt/cloud/docs/changelog.rst | 13 +
providers/dbt/cloud/docs/index.rst | 6 +-
providers/dbt/cloud/provider.yaml | 3 +-
providers/dbt/cloud/pyproject.toml | 6 +-
.../src/airflow/providers/dbt/cloud/__init__.py | 2 +-
providers/edge3/README.rst | 6 +-
providers/edge3/docs/changelog.rst | 19 +
providers/edge3/docs/index.rst | 6 +-
providers/edge3/provider.yaml | 3 +-
providers/edge3/pyproject.toml | 6 +-
.../edge3/src/airflow/providers/edge3/__init__.py | 2 +-
providers/exasol/README.rst | 6 +-
providers/exasol/docs/changelog.rst | 12 +
providers/exasol/docs/index.rst | 6 +-
providers/exasol/provider.yaml | 3 +-
providers/exasol/pyproject.toml | 6 +-
.../src/airflow/providers/exasol/__init__.py | 2 +-
providers/fab/README.rst | 6 +-
providers/fab/docs/changelog.rst | 52 ++-
providers/fab/docs/index.rst | 6 +-
providers/fab/provider.yaml | 3 +-
providers/fab/pyproject.toml | 6 +-
.../fab/src/airflow/providers/fab/__init__.py | 2 +-
providers/ftp/README.rst | 6 +-
providers/ftp/docs/changelog.rst | 12 +
providers/ftp/docs/index.rst | 6 +-
providers/ftp/provider.yaml | 3 +-
providers/ftp/pyproject.toml | 6 +-
.../ftp/src/airflow/providers/ftp/__init__.py | 2 +-
providers/google/README.rst | 15 +-
providers/google/docs/changelog.rst | 68 +++
providers/google/docs/index.rst | 15 +-
providers/google/docs/operators/cloud/bigquery.rst | 4 -
providers/google/provider.yaml | 3 +-
providers/google/pyproject.toml | 26 +-
.../src/airflow/providers/google/__init__.py | 2 +-
.../providers/google/cloud/operators/bigquery.py | 20 -
providers/http/README.rst | 6 +-
providers/http/docs/changelog.rst | 13 +
providers/http/docs/index.rst | 6 +-
providers/http/docs/triggers.rst | 65 +--
providers/http/provider.yaml | 3 +-
providers/http/pyproject.toml | 6 +-
.../http/src/airflow/providers/http/__init__.py | 2 +-
.../src/airflow/providers/http/triggers/http.py | 14 +-
.../http/tests/unit/http/triggers/test_http.py | 79 ++++
providers/keycloak/README.rst | 6 +-
providers/keycloak/docs/changelog.rst | 20 +
providers/keycloak/docs/index.rst | 6 +-
providers/keycloak/provider.yaml | 3 +-
providers/keycloak/pyproject.toml | 6 +-
.../src/airflow/providers/keycloak/__init__.py | 2 +-
providers/microsoft/azure/README.rst | 6 +-
providers/microsoft/azure/docs/changelog.rst | 18 +
providers/microsoft/azure/docs/index.rst | 6 +-
providers/microsoft/azure/provider.yaml | 3 +-
providers/microsoft/azure/pyproject.toml | 6 +-
.../airflow/providers/microsoft/azure/__init__.py | 2 +-
.../azure/operators/container_instances.py | 26 +-
.../azure/operators/test_container_instances.py | 143 ++++++
providers/microsoft/mssql/README.rst | 6 +-
providers/microsoft/mssql/docs/changelog.rst | 12 +
providers/microsoft/mssql/docs/index.rst | 6 +-
providers/microsoft/mssql/provider.yaml | 3 +-
providers/microsoft/mssql/pyproject.toml | 6 +-
.../airflow/providers/microsoft/mssql/__init__.py | 2 +-
providers/modal/docs/index.rst | 13 +-
providers/modal/docs/task_decorator.rst | 179 ++++++++
providers/modal/docs/usage.rst | 13 +-
providers/modal/provider.yaml | 12 +-
providers/modal/pyproject.toml | 2 +-
.../providers/modal/decorators}/__init__.py | 0
.../airflow/providers/modal/decorators/modal.py | 308 +++++++++++++
.../src/airflow/providers/modal/exceptions.py | 9 +
.../airflow/providers/modal/get_provider_info.py | 8 +-
.../src/airflow/providers/modal/hooks/modal.py | 80 +++-
.../airflow/providers/modal/triggers}/__init__.py | 0
.../src/airflow/providers/modal/triggers/modal.py | 100 +++++
.../src/airflow/providers/modal/utils}/__init__.py | 0
.../providers/modal/utils/python_sandbox.py | 156 +++++++
.../modal/tests/system}/__init__.py | 0
.../modal/tests/system/modal}/__init__.py | 0
.../modal/tests/system/modal/example_modal_task.py | 80 ++++
.../modal/tests/unit/modal/decorators}/__init__.py | 0
.../tests/unit/modal/decorators/test_modal.py | 428 ++++++++++++++++++
.../modal/tests/unit/modal/hooks/test_modal.py | 152 +++++++
providers/modal/tests/unit/modal/local_sandbox.py | 132 ++++++
.../modal/tests/unit/modal/test_exceptions.py | 4 +-
.../modal/tests/unit/modal/triggers}/__init__.py | 0
.../modal/tests/unit/modal/triggers/test_modal.py | 171 ++++++++
.../modal/tests/unit/modal/utils}/__init__.py | 0
.../tests/unit/modal/utils/test_python_sandbox.py | 163 +++++++
providers/mysql/README.rst | 6 +-
providers/mysql/docs/changelog.rst | 12 +
providers/mysql/docs/index.rst | 6 +-
providers/mysql/provider.yaml | 3 +-
providers/mysql/pyproject.toml | 6 +-
.../mysql/src/airflow/providers/mysql/__init__.py | 2 +-
providers/openai/docs/.latest-doc-only-change.txt | 2 +-
.../airflow/providers/openai/operators/openai.py | 4 +-
.../tests/unit/openai/operators/test_openai.py | 29 +-
providers/postgres/README.rst | 6 +-
providers/postgres/docs/changelog.rst | 17 +
providers/postgres/docs/index.rst | 6 +-
providers/postgres/provider.yaml | 3 +-
providers/postgres/pyproject.toml | 6 +-
.../src/airflow/providers/postgres/__init__.py | 2 +-
providers/presto/README.rst | 6 +-
providers/presto/docs/changelog.rst | 12 +
providers/presto/docs/index.rst | 6 +-
providers/presto/provider.yaml | 3 +-
providers/presto/pyproject.toml | 6 +-
.../src/airflow/providers/presto/__init__.py | 2 +-
providers/sendgrid/README.rst | 6 +-
providers/sendgrid/docs/changelog.rst | 12 +
providers/sendgrid/docs/index.rst | 6 +-
providers/sendgrid/provider.yaml | 3 +-
providers/sendgrid/pyproject.toml | 6 +-
.../src/airflow/providers/sendgrid/__init__.py | 2 +-
providers/smtp/README.rst | 6 +-
providers/smtp/docs/changelog.rst | 12 +
providers/smtp/docs/index.rst | 6 +-
providers/smtp/provider.yaml | 3 +-
providers/smtp/pyproject.toml | 6 +-
.../smtp/src/airflow/providers/smtp/__init__.py | 2 +-
providers/snowflake/README.rst | 14 +-
providers/snowflake/docs/changelog.rst | 23 +
.../docs/connections/pydantic_ai_snowflake.rst | 7 +-
providers/snowflake/docs/connections/snowflake.rst | 27 ++
providers/snowflake/docs/index.rst | 14 +-
.../snowflake/docs/operators/cortex_agent.rst | 7 +-
providers/snowflake/provider.yaml | 3 +-
providers/snowflake/pyproject.toml | 8 +-
.../src/airflow/providers/snowflake/__init__.py | 2 +-
.../providers/snowflake/hooks/cortex_agent.py | 11 +-
.../airflow/providers/snowflake/hooks/sql_api.py | 5 +-
.../providers/snowflake/utils/_rest_auth.py | 213 ++++++++-
.../unit/snowflake/hooks/test_cortex_agent.py | 23 +-
.../tests/unit/snowflake/hooks/test_sql_api.py | 24 +-
.../tests/unit/snowflake/utils/test__rest_auth.py | 422 +++++++++++++++++-
providers/ssh/README.rst | 6 +-
providers/ssh/docs/changelog.rst | 12 +
providers/ssh/docs/index.rst | 6 +-
providers/ssh/provider.yaml | 3 +-
providers/ssh/pyproject.toml | 6 +-
.../ssh/src/airflow/providers/ssh/__init__.py | 2 +-
providers/standard/README.rst | 6 +-
providers/standard/docs/changelog.rst | 27 ++
providers/standard/docs/index.rst | 6 +-
providers/standard/provider.yaml | 3 +-
providers/standard/pyproject.toml | 6 +-
.../src/airflow/providers/standard/__init__.py | 2 +-
providers/teradata/README.rst | 6 +-
providers/teradata/docs/changelog.rst | 13 +
providers/teradata/docs/index.rst | 6 +-
providers/teradata/provider.yaml | 3 +-
providers/teradata/pyproject.toml | 6 +-
.../src/airflow/providers/teradata/__init__.py | 2 +-
providers/trino/README.rst | 6 +-
providers/trino/docs/changelog.rst | 12 +
providers/trino/docs/index.rst | 6 +-
providers/trino/provider.yaml | 3 +-
providers/trino/pyproject.toml | 6 +-
.../trino/src/airflow/providers/trino/__init__.py | 2 +-
providers/yandex/README.rst | 6 +-
providers/yandex/docs/changelog.rst | 12 +
providers/yandex/docs/index.rst | 6 +-
providers/yandex/provider.yaml | 3 +-
providers/yandex/pyproject.toml | 6 +-
.../src/airflow/providers/yandex/__init__.py | 2 +-
pyproject.toml | 35 +-
scripts/docker/entrypoint_ci.sh | 20 +-
scripts/in_container/run_agent_framework_tests.sh | 65 +--
.../src/airflow_shared/module_loading/__init__.py | 23 +-
.../tests/module_loading/test_entry_points.py | 83 +++-
task-sdk/src/airflow/sdk/api/client.py | 3 +
task-sdk/src/airflow/sdk/execution_time/comms.py | 13 +
.../airflow/sdk/execution_time/request_handlers.py | 10 +
.../airflow/sdk/execution_time/schema/schema.json | 72 +++
.../execution_time/schema/versions/v2027_02_28.py | 9 +-
.../src/airflow/sdk/execution_time/supervisor.py | 4 +
.../airflow/sdk/importers/yaml_importer/builder.py | 158 ++-----
.../airflow/sdk/importers/yaml_importer/models.py | 159 ++++++-
task-sdk/tests/task_sdk/api/test_client.py | 21 +
.../task_sdk/execution_time/test_supervisor.py | 40 +-
.../importers/yaml_importer/test_parser.py | 13 +
ts-sdk/schema/supervisor-schema.json | 72 +++
ts-sdk/src/generated/supervisor.ts | 177 ++++----
uv.lock | 368 +++++++---------
415 files changed, 8155 insertions(+), 1810 deletions(-)
create mode 100644 airflow-core/newsfragments/74789.significant.rst
delete mode 100644
airflow-core/src/airflow/api_fastapi/execution_api/versions/v2026_10_30_xcom_params.py
copy
airflow-core/src/airflow/migrations/versions/{0141_3_4_0_add_timetable_asset_gated_to_dagmodel.py
=> 0154_3_5_0_add_idempotency_key_to_hitl_detail.py} (61%)
rename
airflow-core/src/airflow/migrations/versions/{0154_3_5_0_add_dag_processor_publication_state.py
=> 0155_3_5_0_add_dag_processor_publication_state.py} (98%)
rename
airflow-core/src/airflow/migrations/versions/{0155_3_5_0_add_processor_work_claims.py
=> 0156_3_5_0_add_processor_work_claims.py} (100%)
create mode 100644
airflow-core/src/airflow/ui/src/utils/registerPluginDependencies.test.ts
copy airflow-core/src/airflow/ui/{rules/jsonc.js =>
src/utils/registerPluginDependencies.ts} (51%)
rename
airflow-core/tests/unit/migrations/{test_0155_add_processor_work_claims.py =>
test_0156_add_processor_work_claims.py} (98%)
create mode 100644 providers/modal/docs/task_decorator.rst
copy {airflow-core/src/airflow/_shared =>
providers/modal/src/airflow/providers/modal/decorators}/__init__.py (100%)
create mode 100644
providers/modal/src/airflow/providers/modal/decorators/modal.py
copy {airflow-core/src/airflow/_shared =>
providers/modal/src/airflow/providers/modal/triggers}/__init__.py (100%)
create mode 100644
providers/modal/src/airflow/providers/modal/triggers/modal.py
copy {airflow-core/src/airflow/_shared =>
providers/modal/src/airflow/providers/modal/utils}/__init__.py (100%)
create mode 100644
providers/modal/src/airflow/providers/modal/utils/python_sandbox.py
copy {airflow-core/tests/integration =>
providers/modal/tests/system}/__init__.py (100%)
copy {airflow-core/src/airflow/_shared =>
providers/modal/tests/system/modal}/__init__.py (100%)
create mode 100644 providers/modal/tests/system/modal/example_modal_task.py
copy {airflow-core/src/airflow/_shared =>
providers/modal/tests/unit/modal/decorators}/__init__.py (100%)
create mode 100644 providers/modal/tests/unit/modal/decorators/test_modal.py
create mode 100644 providers/modal/tests/unit/modal/local_sandbox.py
copy {airflow-core/src/airflow/_shared =>
providers/modal/tests/unit/modal/triggers}/__init__.py (100%)
create mode 100644 providers/modal/tests/unit/modal/triggers/test_modal.py
copy {airflow-core/src/airflow/_shared =>
providers/modal/tests/unit/modal/utils}/__init__.py (100%)
create mode 100644
providers/modal/tests/unit/modal/utils/test_python_sandbox.py