This is an automated email from the ASF dual-hosted git repository.
ephraimbuddy pushed a change to branch dag-processor-http-manager
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard 86918a24295 Avoid database sessions when collecting API-mode Dag
results
discard 54c63151f9e Back off inventory retries and report results the API
would refuse
discard e3a945eb744 Publish Dag processor results through the Execution API
discard 53dab83c5a8 Adapt legacy Dag upgrade regression to bundle discovery
results
discard 7c94dd2627f Align Dag processor claim migrations with main
discard cf4e425adbc Test legacy Dag deactivation after bundle-name backfill
discard e4e567584f2 Fix Dag processor work retries and metadata cleanup
discard 6e27c03b657 Retain Dag processor work until delivery is acknowledged
discard 0d0ee0554f4 Align API-mode Dag publication with DB-mode cleanup
discard 8032efa690b Allow Dag processors to publish metadata through the
Execution API
discard 9e9ecf2098f Clarify bundle refresh compatibility and simplify its
regression test
discard cd8c3be6bad Keep Git bundles importable on Airflow 3.4
discard a739722f10d Keep Dag parsing responsive during bundle refresh failures
discard d15ccc72bd7 Make the bundle refresh regression test independent of
uptime
discard af280f2063c Avoid parsing stalls while a bundle refresh waits for
imports
discard 8aa6762c697 Keep Dag parsing results aligned with refreshed bundle
sources
add bb213a30692 Honor next when an authenticated user reaches the FAB
login page (#75665)
add 54f645dd303 Check for workflow runs to auto-approve every 15 minutes
(#75655)
add 72628b5c4f4 Stop a stale callback stat from forcing constant Dag file
reparsing (#73433)
add d1491b82c90 Refuse Human-in-the-loop responses once the task stopped
waiting (#75645)
add 6d7e0010cd6 Close German Translation Gaps 2026-10-26 (#75676)
add bfb620d271b Cancel the runs of merged pull requests when they merge
(#75683)
add e4efc876f48 Switch the default async MySQL driver to asyncmy (#75218)
add 9f1348c2013 Keep the spot interruption notice green on transient
GitHub errors (#75681)
add 36038d73b5a Pin the real selective-checks auto-approve test to main
(#75682)
add 33486021776 Check out constraints from apache/airflow when diffing
them in CI (#75675)
add ffd9398e4b4 Always approve workflow runs of PRs from trusted
stakeholder repositories (#75677)
add d22f4e4b470 Retry GitHub server errors in the fork CI monitor (#75692)
add 62e50c50030 List Meta among common.ai's external services and
recognise new pydantic-ai 2.59 providers (#75641)
add dac0a7adc44 Keep common.ai on anthropic 1.x until pydantic-ai supports
anthropic 2 (#75640)
add b19bc48f96f Let the EKS executor run per team and next to
KubernetesExecutor (#75449)
add 3f0cea0e8ba Add task instance state store commands to airflowctl
(#72746)
add 562977d11bf Make the Kubernetes, E2E and Helm release jobs pass on
fork CI (#75699)
add 2ae00f1606a Retry GitHub calls that fail to connect in the fork CI
monitor (#75701)
add ad6ec79c73e Deprecate airflow.utils.email in favor of the SMTP
provider (#75414)
add df03024a9a3 Fix BigQuery durable recovery for regional jobs (#75430)
add b70a439a238 Allow FastAPI 0.137+ by requiring cadwyn 8.1 (#75689)
add 04afd601aee Restart crashed Breeze components under mprocs (#75585)
add ec8737c5417 Handle empty or corrupted JSON in airflowctl credentials
loading (#75279)
add e3f5e6ff3af Skip scheduling tasks when their Dag cannot be
deserialized (#75263)
add 3a37fb1c33e Fix BigQuery cancellation and links with inferred job
locations (#75717)
add bec92bcad02 Let listeners see the end date of a skipped task instance
(#75685)
add 34a955c17dd Remove unused type: ignore comments in airflow-ctl (#75203)
add 750f849cc23 Run a language SDK runtime in its own process group
(#75707)
add 5243901c818 Add dag_id and task_id tags to resumable_job metrics
(#75721)
add c79293ea4b9 Wait for a maintainer when a fork PR changes any
CI-defining file (#75718)
add d340be05a4e Add metrics for task and asset state store access (#75729)
add 91fbcbff93b Fix airflowctl config lint filters matching partial config
names (#75690)
add 8eb5357fb13 Keep cancelled CI runs from showing a failed CI passed
check (#75720)
add 968cca0c7e4 Add a dag_run index on (dag_id, run_after) (#74481)
add fa9c935035d airflowctl: fix datetime.datetime CLI parameters rejecting
all input (#70249)
add 21a8a98ba96 Report language SDK runtime launch failures in the task
log (#75561)
add aee26d49b6b Fix airflowctl ignoring --env for non-auth commands
(#73808)
add ead86184fb5 Emit resumable_job metrics from KubernetesPodOperator
(#75734)
add 6cac8fcddc1 Handle None response from airflowctl connections
create-defaults (#68853)
add a22fcb9a67b Stop importing airflow.utils.email in the Amazon SES hook
(#75711)
add 8b5306690ac Fix 'lineage' export in airflow.sdk (#75744)
add c4ab82253de Report AwsEksExecutor as the caller in its AWS user agent
(#75698)
add 4ace0a1deb7 Run automatic backport PRs on RunsOn runners (#75749)
add 7c7157b124e Stop breeze k8s commands from silently rewriting uv.lock
(#75763)
add cb582009a0b Raise the stale bot operation budget so it reaches older
PRs (#75761)
add 7de5ac36770 UI: Remove unused filter count helper (#75760)
add 455f5125c9a UI: Remove unused clipboard wrappers (#75759)
add 36767cb0073 UI: Remove unused quick filter button (#75758)
add aaba5c37195 UI: Don't fire keyboard shortcuts while typing in a Monaco
editor (#75684)
add d92a4805a92 UI: Fix labels that render as raw translation keys (#75326)
add 91ca0ac42c8 UI: Fix slow pending Dag run checks on large databases
(#75674)
add 8f7a8e4ff58 Hide empty log groups in the task log view (#75686)
add df37268410b Fix UI crash by validating unresolvable Windows PT
timezone (#75723)
add ae50f958ea2 Surface errors from OpenLineage database info lookups
without losing lineage (#74805)
add d583ffe5984 Hide the scheduled run icon in the grid legend (#75775)
add de5798196d2 Make Breeze Kubernetes image tests independent of the
branch (#75724)
add a5ff71dffd3 Keep breeze verify working when dry-run is on (#75713)
add be28f7fe9c2 Tell agents to stop when breeze cannot run, not use a host
venv (#75599)
add efd28053bed Stop Google Cloud Logging handler from starting a thread
on close (#75596)
add 70a78162261 Page SqlToS3Operator like GenericTransfer (#75730)
add 55b3c58dea7 Return None from relative_path_from_logger for logs
outside base_log_folder (#75572)
add 4d9fb9e841f Remove unused airflowctl lowercase argument helper (#75768)
add da767b24133 Bump the fab-ui-package-updates group across 1 directory
with 2 updates (#75807)
add a462d683469 UI: Scope partitioned Dag run asset list to readable
assets (#75213)
add 891e83dce5d Tell contributors when their fork CI workflow stops
running (#75814)
add a9a04a52f5e Clarify which Snowflake connectors need the
session_parameters copy (#75457)
add 8058c889b27 Harden the fork CI reconciler and protect the fork CI gate
(#74909)
add 8442ef02563 Remove unused Dataflow job state checker (#75784)
add ba6750c2fd0 Remove unused Cloud SQL OS bitness helper (#75788)
add eb2e644bec3 Remove unused Dataproc job template helper (#75790)
add 850466814ba Remove unused SDK variable result converter (#75766)
add a6eb4900ed9 Close German Translation Gaps 2026-10-27 (#75813)
add 12489292d1c Remove unused SQLAlchemy dialect keyword wrapper (#75782)
add 0135f75e6c1 Remove unused datetime to nanoseconds converter (#75781)
add 674f39115da Remove unused log filename template renderer (#75780)
add 5f8b01416ea Remove unused CLI Dag file location loader (#75779)
add 2dffae53785 Remove unused active asset query helpers (#75778)
add 9a0ee6f0c66 Remove unused task deferral logging bridge (#75777)
add db06a68a791 Remove unused Dag processor path converter (#75776)
add 347343ca259 Remove unused ExecuteTaskActivity model (#75767)
add e539a1b051c Remove unused shared provider discovery definitions
(#75783)
add 62df1cc8bb3 Remove unused Teradata operation classifier (#75785)
add d2c865ff014 Remove unused Postgres cursor name generator (#75786)
add b785c05164e Remove unused Spark pod try number helper (#75787)
add e401fafafb2 Remove unused Cloud SQL settings version helper (#75789)
add fccfbf8ad2b Skip airflowctl state store tests on servers older than
3.3 (#75753)
add d17f1213630 Widen the Spot pool for RunsOn runners: more families,
capacity-optimized, size ranges (#75822)
add 312cf280191 Complete Arabic translations for the UI 2026-10-27 (#75575)
add b5ce03962cc Convert finished TIs into a lightweight read-only view
during scheduling decisions (#71737)
add 881f3622304 Run the flynt prek hook in parallel batches (#75274)
add 4c1c1af00dd Rewrite the Common AI sandbox configuration page around
what users set up (#75826)
add e31f52e0a05 Stop running OpenLineage e2e compat tests when full tests
are derived (#75262)
add 50065c3ac94 Fix flaky OpenShell background-child wrapper test (#75823)
add 09d0ea1c97a Ignore the runner's OTEL_* variables in the observability
shared tests (#75828)
add ee62251fc26 Show why external contributors' workflow runs wait for
approval (#75832)
add b4320026a31 Stop importing airflow.utils.email in the SendGrid emailer
(#75771)
add c24242eea52 Load the serialized Dag in ti_run only for stub tasks
(#75795)
add 819902bb943 Accept datetime in InletEventsAccessor.after() and
before() (#75773)
add 5df209d1835 Isolate otel config-priority test from ambient OTEL env
vars (#75842)
add 41519146043 Skip spotless and the Java SDK Dag schema sync on
unrelated PRs (#75268)
add 402ab11a4b0 Avoid loading timetables for dags in Execution API
endpoints (#75765)
add 27c7624430a Support multimodal prompts with require_approval in LLM
operators (#74388)
add ce75cee3b44 Use task instance end date as OpenLineage terminal event
time (#75328)
add 62934e405ed Support Python 3.11.0 in prek cache test (#75520)
add ea2aae77d1e Keep extra cookies set by a route in JWTRefreshMiddleware
(#75411)
add ddb02d81b26 Remove unused Breeze snippet helpers (#75854)
add fd9298bf795 Chart: Bump PgBouncer to 1.25.2 and exporter to 0.21.0 to
fix CVEs (#74647)
add 7839f4a2da0 Type the durable default of the common.compat
ResumableJobMixin stand-in as bool | None (#75271)
add ec9d0df48c9 Remove unused selective checks exclusion helper (#75855)
add 60d692ba674 Stop requesting the details of an empty Dag id after a
bulk selection (#75862)
add 2f5c1c4b26b Remove unused UI page-object methods (#75853)
add 320b0c5d03d Let Claude Agent SDK agent loops use common.ai toolsets
through a new AirflowTools adapter (#74026)
add 863440537b7 Keep service logs and OpenLineage e2e noise out of the job
output (#75811)
add 49bdd34d922 Add async aget_conn and acreate_agent to PydanticAIHook
(#74150)
add d60e8d39408 i18n(ko): Add missing translations (Oct 23) (#75415)
add 7c75cd9d036 Make refresh_token optional in Keycloak login and token
services (#75871)
add 54171ff7cc8 Fix MSGraphSensor timeout being reset on every re-defer
(#75774)
add 3293ced6410 [AIP-94] Add airflowctl providers get (#68854)
add 4cc0bfc41ff Keep Dag parsing results aligned with refreshed bundle
sources
add 2a218d1983d Avoid parsing stalls while a bundle refresh waits for
imports
add e59ac582fe0 Make the bundle refresh regression test independent of
uptime
add b0b605f2f39 Keep Dag parsing responsive during bundle refresh failures
add 5f5cbcc4c82 Keep Git bundles importable on Airflow 3.4
add d4a70c2505b Clarify bundle refresh compatibility and simplify its
regression test
add 821762e750a Revise Dag bundle refresh compatibility guidance
add 8e824a66c34 Keep Dag parsing and metrics healthy during bundle outages
add 3a3614205bc Allow Dag processors to publish metadata through the
Execution API
add fd008778841 Align API-mode Dag publication with DB-mode cleanup
add 6651abba6f3 Clean asset references for stale Dags removed from bundles
add fa11b277fce Preserve compact source publications and actionable Dag
diagnostics
add 1ba66079796 Retain Dag processor work until delivery is acknowledged
add 68761fb0f39 Fix Dag processor work retries and metadata cleanup
add 05f111ca978 Test legacy Dag deactivation after bundle-name backfill
add 46e06da0ff5 Align Dag processor claim migrations with main
add 7e856b14e2d Adapt legacy Dag upgrade regression to bundle discovery
results
add 81899d430c6 Fix Dag processor requested-work cleanup and delivery
add 9e55df8b2ff Preserve Dag cleanup and exact priority reparse targets
add 1e44909d9d6 Carry publication receipts through Dag processor
maintenance
add 4ea6bed7994 Publish Dag processor results through the Execution API
add 65278d51030 Back off inventory retries and report results the API
would refuse
add b4e013cedc7 Avoid database sessions when collecting API-mode Dag
results
add e8afa30fefd Introduce a source interface for requested Dag processing
work
add ae49e8bcafe Recover failed Dag parses and bound inventory publication
add 820006c6f5d Filter invalid Dag discovery paths and deduplicate parse
sources
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 (86918a24295)
\
N -- N -- N refs/heads/dag-processor-http-manager (820006c6f5d)
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:
.../setup-isolated-setup-install.md | 5 +
.github/fork-ci-gate.toml | 10 +-
.github/workflows/additional-ci-image-checks.yml | 2 +-
.github/workflows/additional-prod-image-tests.yml | 30 +-
.github/workflows/auto-approve-workflow-runs.yml | 13 +-
.github/workflows/basic-tests.yml | 29 +-
.github/workflows/cancel-merged-pr-runs.yml | 119 +++
.github/workflows/ci-amd.yml | 114 ++-
.github/workflows/ci-arm.yml | 109 +-
.github/workflows/ci-image-build.yml | 2 +-
.github/workflows/ci-image-checks.yml | 19 +-
.github/workflows/finalize-tests.yml | 10 +-
.github/workflows/fork-ci-monitor.yml | 7 +-
.github/workflows/generate-constraints.yml | 2 +-
.github/workflows/helm-tests.yml | 8 +-
.github/workflows/integration-system-tests.yml | 6 +-
.github/workflows/k8s-tests.yml | 4 +-
.github/workflows/kustomize-overlays-tests.yml | 2 +-
.github/workflows/mark-workflow-runs-approved.yml | 85 ++
.github/workflows/prod-image-build.yml | 4 +-
.github/workflows/push-image-cache.yml | 4 +-
.github/workflows/special-tests.yml | 22 +-
.github/workflows/stale.yml | 1 +
.github/workflows/test-providers.yml | 4 +-
.github/workflows/ui-e2e-tests.yml | 2 +-
.pre-commit-config.yaml | 4 +
AGENTS.md | 4 +-
.../administration-and-deployment/dag-bundles.rst | 8 +-
.../administration-and-deployment/listeners.rst | 5 +-
.../docs/authoring-and-scheduling/assets.rst | 7 +-
airflow-core/docs/howto/email-config.rst | 80 +-
airflow-core/docs/howto/set-up-database.rst | 28 +-
airflow-core/docs/migrations-ref.rst | 8 +-
airflow-core/docs/security/api_permissions_ref.rst | 4 +
airflow-core/newsfragments/75218.significant.rst | 13 +
airflow-core/newsfragments/75414.significant.rst | 20 +
airflow-core/pyproject.toml | 11 +-
airflow-core/src/airflow/api_fastapi/app.py | 2 +
.../api_fastapi/auth/middlewares/refresh_token.py | 24 +-
.../src/airflow/api_fastapi/common/http_metrics.py | 25 +-
.../src/airflow/api_fastapi/common/telemetry.py | 21 +-
.../api_fastapi/core_api/datamodels/common.py | 16 +
.../api_fastapi/core_api/datamodels/providers.py | 168 ++++
.../core_api/datamodels/ui/partitioned_dag_runs.py | 12 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 16 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 590 +++++++++++
.../core_api/routes/public/dag_parsing.py | 4 +-
.../api_fastapi/core_api/routes/public/dags.py | 25 +-
.../api_fastapi/core_api/routes/public/hitl.py | 32 +-
.../core_api/routes/public/providers.py | 23 +-
.../airflow/api_fastapi/core_api/routes/ui/dags.py | 8 +-
.../core_api/routes/ui/partitioned_dag_runs.py | 28 +-
.../core_api/services/public/providers.py | 17 +-
.../src/airflow/api_fastapi/execution_api/app.py | 41 +-
.../execution_api/datamodels/dag_parsing.py | 35 +-
.../api_fastapi/execution_api/datamodels/job.py | 4 +-
.../execution_api/datamodels/taskinstance.py | 8 +-
.../execution_api/routes/dag_parsing.py | 179 ++--
.../api_fastapi/execution_api/routes/jobs.py | 20 +-
.../execution_api/routes/task_instances.py | 9 +-
.../airflow/api_fastapi/execution_api/security.py | 10 +-
.../execution_api/versions/v2027_02_28.py | 2 +-
.../src/airflow/config_templates/config.yml | 8 +-
.../src/airflow/dag_processing/api_client.py | 6 +-
.../src/airflow/dag_processing/collection.py | 5 +-
.../src/airflow/dag_processing/maintenance.py | 124 ++-
airflow-core/src/airflow/dag_processing/manager.py | 331 ++++--
.../src/airflow/dag_processing/requested_work.py | 139 +++
.../src/airflow/dag_processing/timeouts.py | 22 +-
.../src/airflow/jobs/scheduler_job_runner.py | 29 +-
.../src/airflow/listeners/spec/importerrors.py | 12 +-
... => 0149_3_4_0_add_is_stub_to_task_instance.py} | 28 +-
..._job.py => 0150_3_5_0_add_session_id_to_job.py} | 4 +-
...51_3_5_0_add_dag_run_dag_id_run_after_index.py} | 28 +-
...2_3_5_0_add_dag_processor_publication_state.py} | 8 +-
....py => 0153_3_5_0_add_processor_work_claims.py} | 0
airflow-core/src/airflow/models/__init__.py | 2 +-
airflow-core/src/airflow/models/asset.py | 22 -
...int.py => dag_processor_publication_receipt.py} | 6 +-
airflow-core/src/airflow/models/dagbag.py | 6 +-
airflow-core/src/airflow/models/dagrun.py | 234 ++++-
airflow-core/src/airflow/models/errors.py | 4 +-
.../src/airflow/models/task_coordinates.py | 59 +-
airflow-core/src/airflow/models/taskinstance.py | 7 +
.../src/airflow/serialization/definitions/dag.py | 29 +-
.../airflow/serialization/serialized_objects.py | 28 +-
airflow-core/src/airflow/settings.py | 7 +-
airflow-core/src/airflow/ti_deps/dep_context.py | 12 +-
.../ti_deps/deps/not_previously_skipped_dep.py | 3 +-
.../src/airflow/ti_deps/deps/trigger_rule_dep.py | 5 +-
.../src/airflow/ui/openapi-gen/queries/common.ts | 6 +
.../ui/openapi-gen/queries/ensureQueryData.ts | 11 +
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 11 +
.../src/airflow/ui/openapi-gen/queries/queries.ts | 11 +
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 11 +
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 1051 ++++++++++++++++++-
.../ui/openapi-gen/requests/services.gen.ts | 26 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 222 +++-
.../airflow/ui/public/i18n/locales/ar/admin.json | 33 +-
.../airflow/ui/public/i18n/locales/ar/assets.json | 24 +-
.../airflow/ui/public/i18n/locales/ar/browse.json | 45 +
.../airflow/ui/public/i18n/locales/ar/common.json | 126 ++-
.../ui/public/i18n/locales/ar/components.json | 50 +-
.../src/airflow/ui/public/i18n/locales/ar/dag.json | 153 ++-
.../airflow/ui/public/i18n/locales/ar/dags.json | 44 +-
.../ui/public/i18n/locales/ar/dashboard.json | 21 +-
.../airflow/ui/public/i18n/locales/ar/hitl.json | 1 +
.../airflow/ui/public/i18n/locales/de/browse.json | 1 +
.../airflow/ui/public/i18n/locales/de/common.json | 1 +
.../ui/public/i18n/locales/de/components.json | 1 +
.../src/airflow/ui/public/i18n/locales/de/dag.json | 4 +
.../airflow/ui/public/i18n/locales/de/hitl.json | 1 +
.../airflow/ui/public/i18n/locales/en/browse.json | 1 +
.../airflow/ui/public/i18n/locales/en/common.json | 1 +
.../ui/public/i18n/locales/en/components.json | 1 +
.../airflow/ui/public/i18n/locales/ko/admin.json | 2 +
.../airflow/ui/public/i18n/locales/ko/common.json | 11 +
.../ui/public/i18n/locales/ko/components.json | 8 +
.../src/airflow/ui/public/i18n/locales/ko/dag.json | 43 +-
.../airflow/ui/public/i18n/locales/ko/dags.json | 1 +
.../ui/src/components/AssetProgressCell.test.tsx | 63 +-
.../ui/src/components/AssetProgressCell.tsx | 54 +-
...learTaskInstanceDialog.emptySelection.test.tsx} | 29 +-
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 9 +-
.../src/airflow/ui/src/components/ConfigForm.tsx | 2 +-
.../ui/src/components/QuickFilterButton.tsx | 40 -
.../src/context/timezone/TimezoneProvider.test.tsx | 59 ++
.../ui/src/context/timezone/TimezoneProvider.tsx | 17 +-
.../src/airflow/ui/src/hooks/useShortcut.test.tsx | 64 +-
.../src/airflow/ui/src/hooks/useShortcut.ts | 16 +-
.../src/airflow/ui/src/i18n/locales.test.ts | 60 +-
.../ui/src/layouts/Details/Grid/RunTypeLegend.tsx | 7 +-
.../ui/src/pages/Connections/ConnectionForm.tsx | 3 +-
.../src/airflow/ui/src/pages/DagsList/Schedule.tsx | 14 +-
.../HITLTaskInstances/HITLResponseForm.test.tsx | 104 +-
.../src/airflow/ui/src/pages/Pools/PoolForm.tsx | 2 +-
.../src/airflow/ui/src/pages/XCom/XCom.tsx | 2 +-
.../src/airflow/ui/src/queries/useLogs.test.ts | 38 +
.../src/airflow/ui/src/queries/useLogs.tsx | 11 +-
.../airflow/ui/src/queries/useUpdateHITLDetail.ts | 16 +-
.../airflow/ui/src/system-components/Clipboard.tsx | 42 +-
.../src/airflow/ui/src/utils/filterUtils.test.ts | 106 --
.../src/airflow/ui/src/utils/filterUtils.ts | 27 -
.../src/airflow/ui/src/utils/query.test.ts | 50 +
airflow-core/src/airflow/ui/src/utils/query.ts | 7 +-
.../airflow/ui/tests/e2e/pages/DagCalendarTab.ts | 11 -
.../src/airflow/ui/tests/e2e/pages/DagsPage.ts | 4 -
.../airflow/ui/tests/e2e/pages/ProvidersPage.ts | 13 -
.../airflow/ui/tests/e2e/pages/TaskInstancePage.ts | 36 +-
airflow-core/src/airflow/utils/cli.py | 17 -
airflow-core/src/airflow/utils/dates.py | 15 -
airflow-core/src/airflow/utils/db.py | 2 +-
airflow-core/src/airflow/utils/email.py | 350 +------
airflow-core/src/airflow/utils/helpers.py | 23 -
.../src/airflow/utils/log/file_task_handler.py | 19 -
.../src/airflow/utils/serve_logs/log_server.py | 3 +-
airflow-core/src/airflow/utils/sqlalchemy.py | 7 -
.../auth/middlewares/test_refresh_token.py | 92 +-
.../unit/api_fastapi/common/test_http_metrics.py | 13 +-
.../core_api/datamodels/test_providers.py | 50 +
.../core_api/routes/public/test_assets.py | 5 +-
.../core_api/routes/public/test_dag_parsing.py | 30 +
.../core_api/routes/public/test_dags.py | 41 +
.../core_api/routes/public/test_hitl.py | 135 ++-
.../core_api/routes/public/test_providers.py | 149 +++
.../api_fastapi/core_api/routes/test_routes.py | 8 +-
.../api_fastapi/core_api/routes/ui/test_dags.py | 36 +
.../routes/ui/test_partitioned_dag_runs.py | 122 ++-
.../unit/api_fastapi/execution_api/test_app.py | 29 +-
.../execution_api/test_token_scope_boundaries.py | 27 +-
.../versions/head/test_dag_parsing.py | 400 +++++++-
.../execution_api/versions/head/test_jobs.py | 76 +-
.../versions/head/test_task_instances.py | 47 +-
.../versions/v2027_02_28/test_jobs.py | 4 +-
.../unit/api_fastapi/logging/test_decorators.py | 18 +-
airflow-core/tests/unit/api_fastapi/test_app.py | 25 +
airflow-core/tests/unit/core/test_settings.py | 26 +-
airflow-core/tests/unit/dag_processing/conftest.py | 67 ++
.../lang_sdk_fixtures/go_native.json | 2 +
.../lang_sdk_fixtures/java_native.json | 3 +
.../tests/unit/dag_processing/test_api_client.py | 177 ++--
.../tests/unit/dag_processing/test_dagbag.py | 9 +
.../tests/unit/dag_processing/test_maintenance.py | 199 +++-
.../tests/unit/dag_processing/test_manager.py | 469 ++++++++-
.../dag_processing/test_manager_api_failures.py | 241 +++++
.../dag_processing/test_manager_api_inventory.py | 316 ++++++
.../dag_processing/test_manager_api_results.py | 17 +-
.../tests/unit/dag_processing/test_processor.py | 24 +-
.../unit/dag_processing/test_requested_work.py | 141 +++
airflow-core/tests/unit/jobs/test_scheduler_job.py | 133 ++-
.../tests/unit/listeners/test_importerrors.py | 85 ++
...s.py => test_0153_add_processor_work_claims.py} | 29 +-
airflow-core/tests/unit/models/test_dag.py | 6 +-
airflow-core/tests/unit/models/test_dagrun.py | 179 +++-
.../tests/unit/models/test_dynamic_region.py | 2 +-
.../tests/unit/models/test_mappedoperator.py | 9 +-
.../tests/unit/models/test_taskinstance.py | 63 +-
.../tests/unit/partition_mappers/test_init.py | 4 +-
.../unit/serialization/test_dag_serialization.py | 25 +-
airflow-core/tests/unit/utils/test_db_cleanup.py | 2 +-
airflow-core/tests/unit/utils/test_email.py | 447 ++-------
.../tests/airflowctl_tests/conftest.py | 8 +
.../airflowctl_tests/test_airflowctl_commands.py | 47 +-
airflow-ctl/docs/images/command_hashes.txt | 4 +-
airflow-ctl/docs/images/output_providers.svg | 70 +-
airflow-ctl/docs/images/output_taskinstances.svg | 82 +-
airflow-ctl/src/airflowctl/api/client.py | 18 +-
.../src/airflowctl/api/datamodels/generated.py | 187 ++++
airflow-ctl/src/airflowctl/api/operations.py | 119 ++-
airflow-ctl/src/airflowctl/ctl/cli_config.py | 150 ++-
airflow-ctl/src/airflowctl/ctl/cli_parser.py | 2 +
.../src/airflowctl/ctl/commands/config_command.py | 16 +-
.../airflowctl/ctl/commands/provider_command.py | 25 +-
.../src/airflowctl/ctl/commands/version_command.py | 3 +-
airflow-ctl/src/airflowctl/ctl/help_texts.yaml | 10 +
airflow-ctl/tests/airflow_ctl/api/test_client.py | 55 +
.../tests/airflow_ctl/api/test_operations.py | 165 +++
.../ctl/commands/test_config_command.py | 96 ++
.../ctl/commands/test_provider_command.py | 107 ++
.../ctl/commands/test_version_command.py | 10 +-
.../tests/airflow_ctl/ctl/test_cli_config.py | 164 ++-
.../tests/airflow_e2e_tests/conftest.py | 36 +-
.../airflow_e2e_tests/openlineage_tests/README.md | 13 +-
.../openlineage_tests/task_logs.py | 59 +-
chart/dockerfiles/pgbouncer-exporter/Dockerfile | 9 +-
.../pgbouncer-exporter/build_and_push.sh | 8 +-
chart/dockerfiles/pgbouncer/Dockerfile | 8 +-
chart/dockerfiles/pgbouncer/build_and_push.sh | 8 +-
chart/newsfragments/74647.significant.rst | 19 +
chart/values.schema.json | 4 +-
chart/values.yaml | 4 +-
contributing-docs/05_pull_requests.rst | 22 +-
contributing-docs/18_contribution_workflow.rst | 15 +-
contributing-docs/25_maintainer_pr_triage.md | 8 +-
contributing-docs/mprocs/mprocs.yaml | 14 +-
contributing-docs/testing/unit_tests.rst | 7 +
dev/README_AIRFLOW3_DEV.md | 5 +-
dev/breeze/doc/08_ci_tasks.rst | 20 +-
dev/breeze/doc/ci/04_selective_checks.md | 70 +-
dev/breeze/doc/ci/05_workflows.md | 78 +-
.../doc/ci/08_fork_ci_for_external_contributors.md | 170 ++--
dev/breeze/doc/images/output_ci.svg | 4 +-
dev/breeze/doc/images/output_ci.txt | 2 +-
.../doc/images/output_ci_approve-workflow-runs.svg | 46 +-
.../doc/images/output_ci_approve-workflow-runs.txt | 2 +-
.../doc/images/output_k8s_build-k8s-image.svg | 48 +-
.../doc/images/output_k8s_build-k8s-image.txt | 2 +-
.../doc/images/output_k8s_deploy-airflow.svg | 46 +-
.../doc/images/output_k8s_deploy-airflow.txt | 2 +-
.../doc/images/output_k8s_deploy-cluster.svg | 30 +-
.../doc/images/output_k8s_deploy-cluster.txt | 2 +-
dev/breeze/doc/images/output_k8s_dev.svg | 22 +-
dev/breeze/doc/images/output_k8s_dev.txt | 2 +-
.../doc/images/output_k8s_run-complete-tests.svg | 84 +-
.../doc/images/output_k8s_run-complete-tests.txt | 2 +-
.../doc/images/output_k8s_setup-lang-sdk-test.svg | 22 +-
.../doc/images/output_k8s_setup-lang-sdk-test.txt | 2 +-
.../doc/images/output_k8s_upload-k8s-image.svg | 46 +-
.../doc/images/output_k8s_upload-k8s-image.txt | 2 +-
.../src/airflow_breeze/commands/ci_commands.py | 8 +-
.../airflow_breeze/commands/kubernetes_commands.py | 76 +-
.../commands/kubernetes_commands_config.py | 11 +-
.../commands/kubernetes_kustomize_commands.py | 2 +-
.../src/airflow_breeze/commands/verify_commands.py | 10 +-
dev/breeze/src/airflow_breeze/global_constants.py | 13 +-
dev/breeze/src/airflow_breeze/utils/ci_audit.py | 12 -
.../src/airflow_breeze/utils/fork_ci_gate.py | 10 +-
.../src/airflow_breeze/utils/fork_ci_github.py | 73 +-
.../src/airflow_breeze/utils/fork_ci_messages.py | 53 +-
.../src/airflow_breeze/utils/fork_ci_reconcile.py | 417 +++++++-
.../src/airflow_breeze/utils/kubernetes_utils.py | 3 +-
.../utils/merged_pull_request_runs.py | 211 ----
.../airflow_breeze/utils/publish_docs_helpers.py | 32 -
.../src/airflow_breeze/utils/selective_checks.py | 54 +-
.../airflow_breeze/utils/workflow_run_approval.py | 160 ++-
dev/breeze/tests/test_ci_audit.py | 4 +-
dev/breeze/tests/test_fork_ci_gate.py | 8 -
dev/breeze/tests/test_fork_ci_github.py | 81 +-
dev/breeze/tests/test_fork_ci_messages.py | 11 +
dev/breeze/tests/test_fork_ci_reconcile.py | 556 +++++++++-
dev/breeze/tests/test_kubernetes_commands.py | 144 +++
.../tests/test_kubernetes_kustomize_commands.py | 20 +
.../tests/test_kubernetes_lang_sdk_commands.py | 18 +-
dev/breeze/tests/test_kubernetes_utils.py | 7 +
dev/breeze/tests/test_merged_pull_request_runs.py | 266 -----
dev/breeze/tests/test_selective_checks.py | 180 +++-
dev/breeze/tests/test_verify_commands.py | 15 +
dev/breeze/tests/test_workflow_run_approval.py | 279 +++++-
dev/skill-evals/last-eval-hash.txt | 2 +-
.../src/tests_common/test_utils/api_fastapi.py | 23 +
generated/known_airflow_exceptions.txt | 6 +-
generated/known_sdk_imports_in_core.txt | 2 +-
go-sdk/airflow/serialize.go | 9 +-
go-sdk/airflow/serialize_test.go | 3 +-
.../org/apache/airflow/sdk/execution/Serde.kt | 11 +-
.../org/apache/airflow/sdk/TriggerDagRunTest.kt | 5 +-
providers/amazon/docs/changelog.rst | 6 +
providers/amazon/docs/executors/eks-executor.rst | 52 +-
providers/amazon/docs/transfer/sql_to_s3.rst | 19 +
providers/amazon/pyproject.toml | 2 +-
.../amazon/aws/executors/eks/_client_factory.py | 38 +-
.../amazon/aws/executors/eks/eks_executor.py | 106 +-
.../providers/amazon/aws/executors/eks/utils.py | 5 +
.../src/airflow/providers/amazon/aws/hooks/ses.py | 80 +-
.../providers/amazon/aws/transfers/sql_to_s3.py | 130 ++-
.../src/airflow/providers/amazon/version_compat.py | 2 -
.../tests/system/amazon/aws/example_sql_to_s3.py | 13 +
.../aws/executors/eks/test__client_factory.py | 61 +-
.../amazon/aws/executors/eks/test_eks_executor.py | 330 +++---
.../amazon/tests/unit/amazon/aws/hooks/test_ses.py | 66 +-
.../unit/amazon/aws/transfers/test_sql_to_s3.py | 188 ++++
.../providers/cncf/kubernetes/operators/pod.py | 16 +-
.../cncf/kubernetes/operators/spark_kubernetes.py | 6 -
.../unit/cncf/kubernetes/operators/test_pod.py | 134 +++
providers/common/ai/docs/features.rst | 8 +-
.../common/ai/docs/frameworks/claude_agent_sdk.rst | 282 ++++++
providers/common/ai/docs/frameworks/index.rst | 27 +-
providers/common/ai/docs/hooks/pydantic_ai.rst | 20 +
providers/common/ai/docs/index.rst | 55 +-
providers/common/ai/docs/observability.rst | 4 +-
providers/common/ai/docs/operators/llm.rst | 6 +-
providers/common/ai/docs/operators/llm_branch.rst | 4 -
.../ai/docs/operators/llm_schema_compare.rst | 4 -
providers/common/ai/docs/sandbox/backends.rst | 9 +-
providers/common/ai/docs/sandbox/configuration.rst | 789 +++++++--------
providers/common/ai/docs/stability.rst | 3 +
providers/common/ai/docs/toolsets/index.rst | 2 +-
providers/common/ai/provider.yaml | 1 +
providers/common/ai/pyproject.toml | 11 +-
.../airflow/providers/common/ai/decorators/llm.py | 11 +-
.../providers/common/ai/decorators/llm_branch.py | 11 +-
.../common/ai/decorators/llm_schema_compare.py | 11 +-
.../providers/common/ai/decorators/llm_sql.py | 11 +-
.../ai/example_dags/example_claude_agent_sdk.py | 90 ++
.../providers/common/ai/get_provider_info.py | 1 +
.../providers/common/ai/hooks/pydantic_ai.py | 135 ++-
.../airflow/providers/common/ai/mixins/approval.py | 20 +-
.../airflow/providers/common/ai/operators/llm.py | 6 +-
.../providers/common/ai/operators/llm_branch.py | 3 +-
.../common/ai/operators/llm_schema_compare.py | 3 +-
.../airflow/providers/common/ai/tools/__init__.py | 5 +-
.../providers/common/ai/tools/claude_agent_sdk.py | 369 +++++++
.../airflow/providers/common/ai/utils/prompt.py | 65 ++
.../providers/common/ai/utils/tool_metrics.py | 4 +-
.../ai/tests/unit/common/ai/decorators/test_llm.py | 93 +-
.../unit/common/ai/decorators/test_llm_branch.py | 22 -
.../ai/decorators/test_llm_schema_compare.py | 24 -
.../unit/common/ai/decorators/test_llm_sql.py | 20 -
.../tests/unit/common/ai/hooks/test_pydantic_ai.py | 336 +++++++
.../tests/unit/common/ai/mixins/test_approval.py | 26 +-
.../ai/tests/unit/common/ai/operators/test_llm.py | 100 +-
.../unit/common/ai/operators/test_llm_branch.py | 16 +-
.../common/ai/operators/test_llm_schema_compare.py | 36 +-
.../tests/unit/common/ai/operators/test_llm_sql.py | 26 -
.../tests/unit/common/ai/sandbox/test_openshell.py | 9 +-
.../tests/unit/common/ai/test_provider_metadata.py | 29 +-
.../unit/common/ai/tools/test_claude_agent_sdk.py | 1060 ++++++++++++++++++++
.../ai/tests/unit/common/ai/utils/test_prompt.py | 92 ++
.../common/compat/_resumable_job_mixin.py | 10 +-
.../common/compat/openlineage/utils/sql.py | 29 +-
.../common/compat/openlineage/utils/test_sql.py | 60 ++
.../common/compat/test__resumable_job_mixin.py | 5 +-
.../airflow/providers/common/sql/operators/sql.py | 55 +-
.../unit/common/sql/operators/test_sql_execute.py | 89 ++
.../edge3/tests/unit/edge3/worker_api/test_app.py | 5 +-
providers/fab/docs/auth-manager/access-control.rst | 4 +
.../fab/auth_manager/security_manager/override.py | 7 +-
.../providers/fab/auth_manager/views/auth_login.py | 67 ++
.../providers/fab/auth_manager/views/auth_oauth.py | 9 +
.../fab/src/airflow/providers/fab/www/package.json | 4 +-
.../src/airflow/providers/fab/www/pnpm-lock.yaml | 850 ++++++++--------
.../unit/fab/auth_manager/views/test_auth_login.py | 146 +++
.../tests/unit/fab/www/views/test_views_login.py | 90 ++
providers/git/docs/changelog.rst | 1 -
.../git/src/airflow/providers/git/bundles/git.py | 66 +-
providers/git/tests/unit/git/bundles/test_git.py | 50 +
.../providers/google/cloud/hooks/cloud_sql.py | 4 -
.../providers/google/cloud/hooks/dataflow.py | 49 -
.../google/cloud/log/cloud_logging_task_handler.py | 8 +-
.../providers/google/cloud/operators/bigquery.py | 41 +-
.../providers/google/cloud/operators/cloud_sql.py | 4 -
.../providers/google/cloud/operators/dataproc.py | 6 -
.../cloud/log/test_cloud_logging_task_handler.py | 14 +
.../unit/google/cloud/operators/test_bigquery.py | 311 +++++-
.../keycloak/auth_manager/routes/login.py | 13 +-
.../keycloak/auth_manager/services/token.py | 2 +-
.../keycloak/auth_manager/routes/test_login.py | 34 +
.../keycloak/auth_manager/services/test_token.py | 25 +
.../providers/microsoft/azure/sensors/msgraph.py | 44 +-
.../unit/microsoft/azure/sensors/test_msgraph.py | 161 ++-
providers/mysql/README.rst | 2 +
providers/mysql/docs/changelog.rst | 11 +
providers/mysql/docs/index.rst | 4 +-
providers/mysql/pyproject.toml | 8 +-
.../openlineage/facets/AirflowRunFacet.json | 10 +
.../providers/openlineage/plugins/listener.py | 28 +-
.../src/airflow/providers/openlineage/sqlparser.py | 45 +-
.../openlineage/utils/sql_hook_lineage.py | 21 +-
.../airflow/providers/openlineage/utils/utils.py | 63 +-
.../providers/openlineage/version_compat.py | 9 +-
.../example_openlineage_defer_simple_dag.py | 2 +
.../system/openlineage/expected_events/__init__.py | 18 +-
.../openlineage_base_complex_dag__af2.json | 63 +-
.../openlineage_base_complex_dag__af3.json | 70 +-
.../openlineage_custom_operator_failure_dag.json | 5 +-
.../openlineage_defer_simple_dag.json | 10 +-
...json => openlineage_defer_simple_dag__af3.json} | 10 +-
...penlineage_defer_simple_dag__af3_2_2_plus.json} | 10 +-
.../expected_events/openlineage_retry_dag.json | 12 +
.../openlineage_retry_dag__af2.json | 20 +-
.../openlineage_retry_dag__af3_0.json | 12 +
.../openlineage_sensor_reschedule_dag.json | 10 +-
.../openlineage_sensor_reschedule_dag__af2.json | 10 +-
.../openlineage_sensor_reschedule_dag__af3_0.json | 10 +-
.../openlineage_task_states_dag.json | 12 +
.../openlineage_task_states_dag__af3_0.json | 6 +
.../tests/system/openlineage/operator.py | 32 +-
.../unit/openlineage/plugins/test_listener.py | 110 +-
.../tests/unit/openlineage/test_sqlparser.py | 53 +-
.../openlineage/utils/test_sql_hook_lineage.py | 84 ++
.../tests/unit/openlineage/utils/test_utils.py | 193 +++-
.../airflow/providers/postgres/hooks/postgres.py | 6 -
.../airflow/providers/sendgrid/utils/emailer.py | 23 +-
.../tests/unit/sendgrid/utils/test_emailer.py | 35 +-
.../airflow/providers/snowflake/hooks/snowflake.py | 5 +-
.../teradata/operators/teradata_compute_cluster.py | 16 -
.../ci/prek/check_airflowctl_command_coverage.py | 24 +-
scripts/ci/prek/check_ci_gate_needs.py | 15 +
scripts/ci/prek/check_ci_workflows_in_sync.py | 21 +-
scripts/ci/spot_interruptions.py | 48 +-
scripts/in_container/bin/generate_mprocs_config.py | 18 +-
scripts/in_container/in_container_utils.py | 18 +-
scripts/tests/ci/prek/test_check_ci_gate_needs.py | 23 +
scripts/tests/ci/test_prek_cache_optimizations.py | 38 +-
scripts/tests/ci/test_spot_interruptions.py | 47 +-
.../in_container/test_generate_mprocs_config.py | 30 +
.../observability/metrics/metrics_template.yaml | 88 +-
shared/observability/tests/conftest.py | 11 +
.../observability/metrics/test_otel_logger.py | 9 +
.../providers_discovery/providers_discovery.py | 72 +-
task-sdk/pyproject.toml | 3 +-
task-sdk/src/airflow/sdk/__init__.py | 227 +++--
.../src/airflow/sdk/api/datamodels/_generated.py | 154 ++-
.../src/airflow/sdk/api/datamodels/activities.py | 31 -
.../src/airflow/sdk/bases/resumablejobmixin.py | 7 +-
.../src/airflow/sdk/coordinators/_subprocess.py | 332 ++++--
task-sdk/src/airflow/sdk/execution_time/context.py | 77 +-
.../src/airflow/sdk/execution_time/coordinator.py | 14 +-
.../src/airflow/sdk/execution_time/supervisor.py | 60 +-
.../src/airflow/sdk/execution_time/task_runner.py | 12 +-
task-sdk/src/airflow/sdk/log.py | 6 +-
.../tests/task_sdk/bases/test_resumablejobmixin.py | 47 +-
.../tests/task_sdk/coordinators/test_subprocess.py | 485 ++++++++-
task-sdk/tests/task_sdk/docs/test_public_api.py | 26 +-
.../tests/task_sdk/execution_time/test_context.py | 165 ++-
.../task_sdk/execution_time/test_task_runner.py | 16 +-
task-sdk/tests/task_sdk/test_log.py | 20 +
ts-sdk/src/coordinator/serde.ts | 8 +-
uv.lock | 117 ++-
459 files changed, 20583 insertions(+), 5714 deletions(-)
create mode 100644 .github/workflows/cancel-merged-pr-runs.yml
create mode 100644 .github/workflows/mark-workflow-runs-approved.yml
create mode 100644 airflow-core/newsfragments/75218.significant.rst
create mode 100644 airflow-core/newsfragments/75414.significant.rst
copy
providers/common/compat/tests/unit/common/compat/openlineage/utils/test_utils.py
=> airflow-core/src/airflow/api_fastapi/common/telemetry.py (58%)
create mode 100644 airflow-core/src/airflow/dag_processing/requested_work.py
copy providers/http/src/airflow/providers/http/exceptions.py =>
airflow-core/src/airflow/dag_processing/timeouts.py (63%)
copy
airflow-core/src/airflow/migrations/versions/{0009_2_9_0_add_rendered_map_index_to_taskinstance.py
=> 0149_3_4_0_add_is_stub_to_task_instance.py} (59%)
rename
airflow-core/src/airflow/migrations/versions/{0149_3_5_0_add_session_id_to_job.py
=> 0150_3_5_0_add_session_id_to_job.py} (97%)
copy
airflow-core/src/airflow/migrations/versions/{0037_3_0_0_add_backfill_to_dag_run_model.py
=> 0151_3_5_0_add_dag_run_dag_id_run_after_index.py} (62%)
rename
airflow-core/src/airflow/migrations/versions/{0150_3_5_0_add_dag_processor_publication_state.py
=> 0152_3_5_0_add_dag_processor_publication_state.py} (95%)
rename
airflow-core/src/airflow/migrations/versions/{0151_3_5_0_add_processor_work_claims.py
=> 0153_3_5_0_add_processor_work_claims.py} (100%)
rename airflow-core/src/airflow/models/{dag_parse_checkpoint.py =>
dag_processor_publication_receipt.py} (89%)
copy airflow-core/src/airflow/ui/src/components/{StatsCard.test.tsx =>
Clear/TaskInstance/ClearTaskInstanceDialog.emptySelection.test.tsx} (57%)
delete mode 100644
airflow-core/src/airflow/ui/src/components/QuickFilterButton.tsx
create mode 100644
airflow-core/src/airflow/ui/src/context/timezone/TimezoneProvider.test.tsx
delete mode 100644 airflow-core/src/airflow/ui/src/utils/filterUtils.test.ts
delete mode 100644 airflow-core/src/airflow/ui/src/utils/filterUtils.ts
create mode 100644 airflow-core/src/airflow/ui/src/utils/query.test.ts
create mode 100644
airflow-core/tests/unit/api_fastapi/core_api/datamodels/test_providers.py
create mode 100644 airflow-core/tests/unit/dag_processing/conftest.py
create mode 100644
airflow-core/tests/unit/dag_processing/test_manager_api_failures.py
create mode 100644
airflow-core/tests/unit/dag_processing/test_manager_api_inventory.py
create mode 100644
airflow-core/tests/unit/dag_processing/test_requested_work.py
create mode 100644 airflow-core/tests/unit/listeners/test_importerrors.py
rename
airflow-core/tests/unit/migrations/{test_0151_add_processor_work_claims.py =>
test_0153_add_processor_work_claims.py} (84%)
copy airflow-core/src/airflow/utils/docs.py =>
airflow-ctl/src/airflowctl/ctl/commands/provider_command.py (53%)
create mode 100644
airflow-ctl/tests/airflow_ctl/ctl/commands/test_provider_command.py
create mode 100644 chart/newsfragments/74647.significant.rst
delete mode 100644
dev/breeze/src/airflow_breeze/utils/merged_pull_request_runs.py
create mode 100644 dev/breeze/tests/test_kubernetes_commands.py
delete mode 100644 dev/breeze/tests/test_merged_pull_request_runs.py
create mode 100644 providers/common/ai/docs/frameworks/claude_agent_sdk.rst
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_claude_agent_sdk.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/claude_agent_sdk.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/prompt.py
create mode 100644
providers/common/ai/tests/unit/common/ai/tools/test_claude_agent_sdk.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_prompt.py
create mode 100644
providers/fab/src/airflow/providers/fab/auth_manager/views/auth_login.py
create mode 100644
providers/fab/tests/unit/fab/auth_manager/views/test_auth_login.py
create mode 100644 providers/fab/tests/unit/fab/www/views/test_views_login.py
copy
providers/openlineage/tests/system/openlineage/expected_events/{openlineage_defer_simple_dag.json
=> openlineage_defer_simple_dag__af3.json} (62%)
copy
providers/openlineage/tests/system/openlineage/expected_events/{openlineage_defer_simple_dag.json
=> openlineage_defer_simple_dag__af3_2_2_plus.json} (58%)
delete mode 100644 task-sdk/src/airflow/sdk/api/datamodels/activities.py