This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a change to branch ci-upgrade-main
in repository https://gitbox.apache.org/repos/asf/airflow.git
omit e9f55954197 [main] CI: Upgrade important CI environment
add 3e311d6de76 maintainer-review: ask before opening files view in
browser (#66062)
add f883ef33643 Make error messages consistent in local API client
create_pool (#66039)
add 93173b85df7 feat: Add dynamically emitted asset events to OpenLineage
(#65727)
add 51d0355d1b8 UI: Align Dag capitalization in e2e tests (#66082)
add 001267b1f23 Use Dag instead of DAG (#66090)
add 7f45e0569ab Use Dag instead of DAG in e2e test error messages (#66083)
add c7afee451a6 refactor: DAG to Dag in document (#66088)
add 96ad7f28ca1 Add `S3VectorsDeleteVectorBucketOperator` (#66048)
add f3494eab68b Add `GlueCatalogDeleteDatabaseOperator` (#66021)
add 9354d1dffef Add `S3TablesDeleteTableOperator` (#66019)
add f7cf3c9ed39 Added logging for skipped lookups in SM and SSM backends
(#66059)
add 8a6a79f126f Add stairway test for DB migrations (#64905)
add 8d7735c2b51 use START_DATE_GTE for correct filtering according to
dagRuns API (#66045)
add 1300e566658 Add run_after to TriggerDagRunOperator (#62259)
add c655cdd65a2 Remove parallelism in go test to fix CI (#64650)
add 04929880aef i18n(Ko): add missing translation in components.json (Apr
29) (#66080)
add 39c899301fa i18n(ko): add missing translations in components.json (Apr
29) (#66084)
add 8a3aa3813e2 refactor: DAG to Dag in comment for api_fastapi (#66099)
add 6c549549839 i18n(Ko): add missing translation in dag.json (#66094)
add 7c4aabfe9e1 i18n(Ko): translate no matches message (#66078)
add 32d6ee2f79e Align Dag capitalization from "DAG" to "Dag" (#66085)
add d748835df80 UI: Add per-searchbar 'Match anywhere' toggle for
substring search (#66015)
add f86fdd7e838 UI: Align Dag capitalization in e2e tests (#66081)
add 6f9fc5432d7 refactor: DAG to Dag in .github (#66108)
add ff159832623 Fix pod_override serialization in DAG details and executor
path (#65407)
add d139d3765f8 Show the task ID attributes (ti_id, task_id, etc.) once,
not on every log line (#66036)
add 2a1a9d13ca5 UI: Add Clear All Mapped Tasks button (#65813)
add e65b2384e27 Add `allow_producer_teams` to the serialization layer
(#65980)
add 14fda0279ac CLI: Fix Backfill help text capitalization (#66093)
add b89a16d3e8b i18n(Ko): fix spacing around colon in components.json
(#66096)
add 08f8b74c711 refactor: word changed from DAG to Dag in clients/ (#66115)
add 50ad3b9166e refactor: word changed from DAG to Dag in
contributing-docs/ (#66116)
add 249067e1c1e i18n(Ko): add missing translations in dag.json (#66079)
add d56f8e9b228 i18n(Ko): add missing translations in dag.json (Apr 29)
(#66092)
add b08af1239d8 Feat: Adding task-level filters to DAG view in graph tab
(#64271)
add 9a09bc2ee67 feat: implement patching of task group instances in API
(#62812)
add 0217a7b1048 Add `BedrockCreateGuardrailOperator` (#66035)
add ac59ee01015 Chart: add missing tpl for SA annotations (#66095)
add 4082687dfc5 Add `access_control_list` to `DatabricksWorkflowTaskGroup`
(#64538)
add 56a01b6abb1 refactor: word changed from DAG to Dag in chart/ (#66114)
add 85e661414d3 Lint ClearTaskInstanceDialog.tsx (#66129)
add db454a83ce6 CI: Block new modules under
`airflow-core/src/airflow/utils/` (#66105)
add b5e9bae6dc3 Fix wave-release auto-trigger meta-token expansion (#66100)
add b3197fb05f2 i18n: update zh-CN translation for login label (#65194)
add 0960ad2f6df Add AIP-to-user-stories skill for generating recipe
playbooks from AIPs (#65776)
add ebb01703096 AIP-103: Setting up foundation with ORM and Backend
Abstraction (#65759)
add 2aa33971392 Extract Client factory from TriggerRunnerSupervisor into
overridable method (#65978)
add 67014e1056e Make TriggerRunnerSupervisor.job optional (#66006)
add 6761d3bc373 Decouple session ownership and drop unused bundle_version
from parse-result helpers (#66110)
add 2d1ea165005 chore: Bump Ol client dependency to 1.46 (#66145)
add 44b79fe5398 feat: add public emit_dataset_lineage and
emit_query_lineage API for OpenLineage provider (#65788)
add caac9923379 Dag Run and Overview Tab Display Deadlines (#62195)
add dd155d32c71 UI: Add 'Mark task group as success/failed' action (#66146)
add 36b70fa5cd2 Refactor DbtCloudRunJobOperator.execute() by extracting
job ID (#64393)
add d628ea02ccf Show dag run duration in grid tooltip (#65787)
add 3e5c2c59f11 i18n(Ko): add missing translation in dag.json (Apr 29)
(#66086)
add db0191a421a fix: Align DAG_ID with module name in S3 Tables and S3
Vectors system tests (#66134)
add 2ccc256b534 Add ExecuteCallback support to AwsLambdaExecutor (#63035)
add 16450d2bdfa Add `S3TablesCreateTableBucketOperator` (#66119)
add e1c1db8f36d Rationalize null and max-lines eslint rules (#66124)
add 6c61773caaa Make mongo testcontainer fixture resilient to Docker Hub
flakes (#66154)
add 15180025fae PR triage: shorter contributor comments, link to docs for
fixes (#66055)
add c8e0ec564a7 Document Connection-extras allowlist rule for provider
hooks/operators (#66032)
add fa055dba61e refactor: word changed from DAG to Dag in
providers/amazon/ (#66152)
add 67bab4a285c Remove the DualStatsManager and the Stats interfaces
(#63932)
add c711347b8e4 Add `BedrockDeleteGuardrailOperator` (#66140)
add 1b3bf55027b Add AI-driven prepare-providers-documentation skill
(#65882)
add d4407263c7f Pass try_number to extra links API (#65661)
add 9fd43ee581a E2E: Improve Playwright patterns in XComsPage (#65730)
add 466eb1c0ffb Fix deadlock and add unit test (#66144)
add a6cd84accc6 Bump moment-timezone from 0.6.1 to 0.6.2 in
/providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates
group across 1 directory (#66166)
add 046b490f4e1 Fix ASYNC110 violation in RedshiftDataTrigger (#66157)
add 8d656357b31 Guard registry-build sync against partial extracts (#66137)
add 41caf5ee755 Add static analysis tests for DB migration anti-patterns
(#64972)
add 0abd0efa0a3 fix false-green applyCustomEnv check for database cleanup
(#65495)
add 41750f4deea Bump registry-build job timeout to 45 minutes (#66185)
add c1056986fff Fix missing autoincrement sequence on callback_request
downgrade (#65230)
add ef0ff5cfe2b Preload source_aliases in process_executor_events (#65422)
add e6f5de4f5ed UI: Make DAG detail page scrollable on mobile viewports
(#65899)
add 8c43743d308 Fix DagVersion when clearing tasks with run on latest
version (#65835)
add c37960d5325 Fix ASYNC110 violation in edge3 worker (#66192)
add c377e683131 [main] CI: Upgrade important CI environment
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 (e9f55954197)
\
N -- N -- N refs/heads/ci-upgrade-main (c377e683131)
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:
.claude/skills/aip-user-stories | 1 +
.github/CODEOWNERS | 5 +-
.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml | 2 +-
.github/boring-cyborg.yml | 2 +-
.github/instructions/code-review.instructions.md | 2 +
.github/skills/aip-user-stories/SKILL.md | 209 ++++++
.../references/playbook-template.md | 67 ++
.github/skills/maintainer-review/SKILL.md | 80 +--
.github/skills/maintainer-review/prerequisites.md | 33 +-
.github/skills/maintainer-review/review-flow.md | 41 +-
.github/skills/pr-triage/comment-templates.md | 91 +--
.../prepare-providers-documentation/SKILL.md | 649 ++++++++++++++++++
.github/workflows/publish-docs-to-s3.yml | 39 +-
.github/workflows/registry-build.yml | 48 +-
.gitignore | 1 +
.pre-commit-config.yaml | 26 +-
AGENTS.md | 2 +-
Dockerfile | 2 +-
Dockerfile.ci | 4 +-
airflow-core/docs/migrations-ref.rst | 4 +-
airflow-core/newsfragments/64963.significant.rst | 1 -
airflow-core/newsfragments/65422.bugfix.rst | 1 +
airflow-core/newsfragments/66015.significant.rst | 3 +
airflow-core/pyproject.toml | 4 +-
airflow-core/src/airflow/__init__.py | 1 -
airflow-core/src/airflow/_shared/state | 1 +
.../src/airflow/api/client/local_client.py | 4 +-
.../api_fastapi/auth/managers/base_auth_manager.py | 16 +-
.../auth/managers/models/resource_details.py | 4 +-
.../auth/managers/simple/simple_auth_manager.py | 2 +-
.../src/airflow/api_fastapi/common/dagbag.py | 6 +-
.../src/airflow/api_fastapi/common/db/dags.py | 8 +-
.../src/airflow/api_fastapi/common/parameters.py | 4 +-
.../api_fastapi/core_api/datamodels/dags.py | 37 +
.../core_api/datamodels/task_instances.py | 2 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 10 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 182 ++++-
.../core_api/routes/public/dag_versions.py | 4 +-
.../core_api/routes/public/dag_warning.py | 2 +-
.../core_api/routes/public/extra_links.py | 41 +-
.../core_api/routes/public/task_instances.py | 102 ++-
.../api_fastapi/core_api/routes/ui/calendar.py | 2 +-
.../airflow/api_fastapi/core_api/routes/ui/dags.py | 6 +-
.../api_fastapi/core_api/routes/ui/dashboard.py | 2 +-
.../api_fastapi/core_api/routes/ui/deadlines.py | 6 +-
.../airflow/api_fastapi/core_api/routes/ui/grid.py | 12 +-
.../api_fastapi/core_api/routes/ui/structure.py | 4 +-
.../core_api/services/public/task_instances.py | 180 ++++-
.../airflow/api_fastapi/execution_api/AGENTS.md | 4 +-
.../api_fastapi/execution_api/datamodels/dagrun.py | 1 +
.../api_fastapi/execution_api/routes/dag_runs.py | 1 +
.../api_fastapi/execution_api/versions/__init__.py | 2 +
.../execution_api/versions/v2026_04_06.py | 15 +-
airflow-core/src/airflow/assets/manager.py | 4 +-
airflow-core/src/airflow/cli/cli_config.py | 2 +-
.../src/airflow/cli/commands/backfill_command.py | 2 +-
.../src/airflow/cli/commands/daemon_utils.py | 4 -
.../src/airflow/config_templates/config.yml | 14 +
airflow-core/src/airflow/dag_processing/manager.py | 68 +-
.../src/airflow/dag_processing/processor.py | 4 +-
.../src/airflow/executors/base_executor.py | 20 +-
.../src/airflow/jobs/dag_processor_job_runner.py | 4 +-
airflow-core/src/airflow/jobs/job.py | 8 +-
.../src/airflow/jobs/scheduler_job_runner.py | 94 ++-
.../src/airflow/jobs/triggerer_job_runner.py | 92 ++-
...3_0_0_add_uuid_primary_key_to_task_instance_.py | 6 +-
.../0060_3_0_0_add_try_id_to_ti_and_tih.py | 24 +-
...061_3_0_0_use_ti_id_as_primary_key_to_TINote.py | 36 +-
...0063_3_0_0_use_ti_id_as_fk_to_taskreschedule.py | 36 +-
..._rename_dataset_triggered_to_asset_triggered.py | 4 +-
.../0093_3_2_0_restructure_callback_table.py | 31 +
...0_3_2_0_add_timetable_type_to_dag_table_for_.py | 8 +-
..._3_2_0_add_partition_key_to_backfill_dag_run.py | 9 +-
..._3_3_0_add_task_state_and_asset_state_tables.py | 85 +++
airflow-core/src/airflow/models/__init__.py | 2 +
airflow-core/src/airflow/models/asset.py | 15 +-
airflow-core/src/airflow/models/asset_state.py | 55 ++
airflow-core/src/airflow/models/callback.py | 4 +-
airflow-core/src/airflow/models/dagbag.py | 14 +-
airflow-core/src/airflow/models/dagrun.py | 34 +-
airflow-core/src/airflow/models/deadline.py | 6 +-
airflow-core/src/airflow/models/task_state.py | 62 ++
airflow-core/src/airflow/models/taskinstance.py | 39 +-
.../src/airflow/models/taskinstancehistory.py | 8 +
.../observability/metrics/datadog_logger.py | 3 +-
.../airflow/observability/metrics/stats_utils.py | 5 +-
airflow-core/src/airflow/observability/stats.py | 22 +-
airflow-core/src/airflow/plugins_manager.py | 4 +-
.../airflow/serialization/definitions/assets.py | 1 +
.../src/airflow/serialization/definitions/dag.py | 107 ++-
.../airflow/serialization/serialized_objects.py | 6 +-
.../src/airflow/state/__init__.py | 29 +-
airflow-core/src/airflow/state/metastore.py | 359 ++++++++++
airflow-core/src/airflow/stats.py | 11 +-
.../src/airflow/ui/openapi-gen/queries/common.ts | 12 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 30 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 30 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 77 ++-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 30 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 2 +-
.../ui/openapi-gen/requests/services.gen.ts | 97 ++-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 90 ++-
.../airflow/ui/public/i18n/locales/en/common.json | 8 +
.../src/airflow/ui/public/i18n/locales/en/dag.json | 41 ++
.../airflow/ui/public/i18n/locales/en/dags.json | 5 +
.../src/airflow/ui/public/i18n/locales/he/dag.json | 11 +
.../ui/public/i18n/locales/ko/components.json | 6 +-
.../src/airflow/ui/public/i18n/locales/ko/dag.json | 9 +
.../ui/public/i18n/locales/zh-CN/admin.json | 2 +-
.../airflow/ui/public/i18n/locales/zh-TW/dag.json | 8 +
airflow-core/src/airflow/ui/rules/core.js | 2 +-
airflow-core/src/airflow/ui/rules/rem.js | 1 -
airflow-core/src/airflow/ui/rules/typescript.js | 4 +-
airflow-core/src/airflow/ui/rules/unicorn.js | 4 +-
.../ui/src/components/AdvancedSearchToggle.tsx | 95 +++
.../AttrSelectFilterMulti.tsx | 0
.../src/airflow/ui/src/components/BasicTooltip.tsx | 1 -
.../TaskInstance/ClearGroupTaskInstanceDialog.tsx | 34 +-
.../Clear/TaskInstance/ClearTaskInstanceButton.tsx | 47 +-
.../ClearTaskInstanceConfirmationDialog.tsx | 5 +-
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 111 ++-
.../Clear/TaskInstance/runOnLatestVersion.test.ts | 156 +++++
.../Clear/TaskInstance/runOnLatestVersion.ts | 60 ++
.../src/components/DagActions/RunBackfillForm.tsx | 2 -
.../FilterBar/filters/TextSearchFilter.tsx | 26 +-
.../airflow/ui/src/components/FilterBar/types.ts | 4 +
.../components/FlexibleForm/FieldAdvancedArray.tsx | 1 -
.../src/components/FlexibleForm/FieldDateTime.tsx | 1 -
.../components/FlexibleForm/FieldDropdown.test.tsx | 11 -
.../src/components/FlexibleForm/FieldDropdown.tsx | 4 +-
.../components/FlexibleForm/FieldMultiSelect.tsx | 1 -
.../components/FlexibleForm/FieldMultilineText.tsx | 1 -
.../ui/src/components/FlexibleForm/FieldNumber.tsx | 1 -
.../ui/src/components/FlexibleForm/FieldObject.tsx | 1 -
.../ui/src/components/FlexibleForm/FieldString.tsx | 1 -
.../components/FlexibleForm/FieldStringArray.tsx | 1 -
.../src/airflow/ui/src/components/Graph/Edge.tsx | 5 +-
.../airflow/ui/src/components/Graph/JoinNode.tsx | 2 +
.../airflow/ui/src/components/Graph/TaskNode.tsx | 8 +-
.../airflow/ui/src/components/Graph/graphTypes.ts | 5 +
.../ui/src/components/Graph/reactflowUtils.ts | 2 +
.../airflow/ui/src/components/GraphTaskFilters.tsx | 273 ++++++++
.../MarkTaskGroupAsButton.tsx} | 31 +-
.../MarkTaskGroupAsDialog.tsx} | 46 +-
.../MarkAs/TaskGroup}/index.tsx | 2 +-
.../src/airflow/ui/src/components/MarkAs/index.tsx | 1 +
.../airflow/ui/src/components/SearchBar.test.tsx | 44 ++
.../src/airflow/ui/src/components/SearchBar.tsx | 20 +-
.../ui/src/components/SearchDags/SearchDags.tsx | 1 -
.../ui/src/components/TaskInstanceTooltip.test.tsx | 2 -
.../src/airflow/ui/src/components/TeamSelector.tsx | 1 -
.../ui/src/components/renderStructuredLog.test.tsx | 161 +++++
.../ui/src/components/renderStructuredLog.tsx | 68 +-
.../ui/src/components/ui/InputWithAddon.tsx | 4 +-
.../airflow/ui/src/components/ui/ProgressBar.tsx | 1 -
.../src/airflow/ui/src/constants/filterConfigs.tsx | 18 +-
.../src/airflow/ui/src/constants/localStorage.ts | 3 +
.../src/airflow/ui/src/constants/searchParams.ts | 6 +
.../src/context/{openGroups => groups}/Context.ts | 5 +-
.../GroupsProvider.tsx} | 28 +-
.../ui/src/context/{openGroups => groups}/index.ts | 4 +-
.../useOpenGroups.ts => groups/useGroups.ts} | 8 +-
.../src/airflow/ui/src/hooks/useAdvancedSearch.ts | 56 ++
.../src/airflow/ui/src/layouts/BaseLayout.tsx | 2 +-
.../ui/src/layouts/Details/DetailsLayout.tsx | 381 ++++++-----
.../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx | 4 +-
.../layouts/Details/Gantt/GanttTimeline.test.tsx | 4 -
.../ui/src/layouts/Details/Gantt/GanttTimeline.tsx | 4 -
.../ui/src/layouts/Details/Gantt/utils.test.ts | 4 -
.../airflow/ui/src/layouts/Details/Gantt/utils.ts | 2 -
.../ui/src/layouts/Details/Graph/Graph.test.tsx | 4 +-
.../airflow/ui/src/layouts/Details/Graph/Graph.tsx | 119 +---
.../Details/Graph/components/FitViewOnLayout.tsx | 31 +-
.../Details/Graph/components/GraphControls.tsx} | 33 +-
.../Graph/hooks/useFilteredNodesAndEdges.ts | 109 +++
.../Details/Graph/hooks/useGraphSearchParams.ts | 58 ++
.../Details/Graph/useGraphFilteredNodes.test.ts | 328 +++++++++
.../layouts/Details/Graph/useGraphFilteredNodes.ts | 140 ++++
.../src/layouts/Details/Graph/utils/nodeColor.ts | 53 +-
.../airflow/ui/src/layouts/Details/Grid/Bar.tsx | 1 +
.../airflow/ui/src/layouts/Details/Grid/Grid.tsx | 4 +-
.../src/layouts/Details/Grid/GridButton.test.tsx | 2 +
.../ui/src/layouts/Details/Grid/GridButton.tsx | 5 +
.../ui/src/layouts/Details/Grid/TaskNames.tsx | 4 +-
.../layouts/Details/Grid/useGridPagination.test.ts | 2 -
.../airflow/ui/src/layouts/Details/Grid/utils.ts | 12 +-
.../ui/src/layouts/Details/PanelButtons.tsx | 14 +-
.../ui/src/layouts/Details/TaskStreamFilter.tsx | 6 +-
.../ui/src/layouts/Details/ToggleGroups.tsx | 4 +-
.../src/airflow/ui/src/mocks/handlers/dag.ts | 2 -
.../src/airflow/ui/src/mocks/handlers/dag_runs.ts | 2 -
.../src/airflow/ui/src/mocks/handlers/log.ts | 46 +-
.../src/airflow/ui/src/pages/Asset/AssetLayout.tsx | 6 +-
.../airflow/ui/src/pages/AssetsList/AssetsList.tsx | 5 +-
.../ui/src/pages/Connections/Connections.tsx | 7 +-
.../ui/src/pages/Dag/Calendar/calendarUtils.ts | 2 -
.../src/airflow/ui/src/pages/Dag/Code/Code.tsx | 2 -
.../airflow/ui/src/pages/Dag/DagHeader.test.tsx | 1 -
.../ui/src/pages/Dag/DeadlineAlertsBadge.tsx | 87 +++
.../src/airflow/ui/src/pages/Dag/Header.test.tsx | 1 -
.../src/airflow/ui/src/pages/Dag/Header.tsx | 2 +
.../src/pages/Dag/Overview/AllDeadlinesModal.tsx | 105 +++
.../ui/src/pages/Dag/Overview/DagDeadlines.tsx | 102 +++
.../ui/src/pages/Dag/Overview/DeadlineRow.tsx | 76 +++
.../airflow/ui/src/pages/Dag/Overview/Overview.tsx | 3 +
.../pages/Dag/Tasks/TaskFilters/TaskFilters.tsx | 2 +-
airflow-core/src/airflow/ui/src/pages/DagRuns.tsx | 36 +-
.../airflow/ui/src/pages/DagsList/DagCard.test.tsx | 2 -
.../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 6 +-
.../Dashboard/HistoricalMetrics/MetricSection.tsx | 3 +-
.../src/airflow/ui/src/pages/Events/Events.tsx | 42 +-
.../ui/src/pages/GroupTaskInstance/Header.tsx | 8 +-
.../HITLTaskInstances/HITLResponseForm.test.tsx | 2 -
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 18 +-
.../ui/src/pages/MappedTaskInstance/Header.tsx | 12 +
.../src/airflow/ui/src/pages/Pools/Pools.tsx | 7 +-
.../airflow/ui/src/pages/Run/DeadlineStatus.tsx | 223 ++++++
.../ui/src/pages/Run/DeadlineStatusModal.tsx | 188 +++++
.../src/airflow/ui/src/pages/Run/Header.tsx | 14 +
.../ui/src/pages/TaskInstance/AssetEvents.tsx | 7 +-
.../airflow/ui/src/pages/TaskInstance/Details.tsx | 1 -
.../ui/src/pages/TaskInstance/ExtraLinks.tsx | 7 +-
.../ui/src/pages/TaskInstance/Logs/Logs.test.tsx | 65 +-
.../ui/src/pages/TaskInstance/Logs/utils.test.ts | 82 ++-
.../ui/src/pages/TaskInstance/Logs/utils.ts | 25 +-
.../ui/src/pages/TaskInstances/TaskInstances.tsx | 52 +-
.../airflow/ui/src/pages/Variables/Variables.tsx | 7 +-
.../src/airflow/ui/src/pages/XCom/XCom.tsx | 34 +-
.../src/airflow/ui/src/queries/useDags.tsx | 7 +-
.../src/airflow/ui/src/queries/useDeadlines.ts | 54 ++
.../airflow/ui/src/queries/useEditConnection.tsx | 1 -
.../src/airflow/ui/src/queries/useLogs.tsx | 34 +-
.../src/airflow/ui/src/queries/useParamStore.ts | 3 -
.../{usePatchDagRun.ts => usePatchTaskGroup.ts} | 22 +-
...nstanceDryRun.ts => usePatchTaskGroupDryRun.ts} | 25 +-
.../airflow/ui/src/queries/usePatchTaskInstance.ts | 28 +-
.../src/airflow/ui/src/queries/useTrigger.ts | 3 -
airflow-core/src/airflow/ui/src/theme.ts | 2 -
.../src/airflow/ui/src/utils/datetimeUtils.test.ts | 3 -
airflow-core/src/airflow/ui/src/utils/logs.test.ts | 1 -
airflow-core/src/airflow/ui/tests/e2e/README.md | 2 +-
.../airflow/ui/tests/e2e/fixtures/asset-data.ts | 2 +-
.../ui/tests/e2e/fixtures/audit-log-data.ts | 2 +-
.../airflow/ui/tests/e2e/fixtures/calendar-data.ts | 2 +-
.../airflow/ui/tests/e2e/fixtures/dag-runs-data.ts | 2 +-
.../ui/tests/e2e/fixtures/dashboard-data.ts | 2 +-
.../src/airflow/ui/tests/e2e/fixtures/data.ts | 10 +-
.../src/airflow/ui/tests/e2e/fixtures/xcom-data.ts | 2 +-
.../src/airflow/ui/tests/e2e/global-teardown.ts | 6 +-
.../src/airflow/ui/tests/e2e/pages/DagRunsPage.ts | 6 +-
.../src/airflow/ui/tests/e2e/pages/DagsPage.ts | 9 +-
.../src/airflow/ui/tests/e2e/pages/HomePage.ts | 12 +-
.../ui/tests/e2e/pages/RequiredActionsPage.ts | 4 +-
.../src/airflow/ui/tests/e2e/pages/XComsPage.ts | 21 +-
.../ui/tests/e2e/specs/dag-audit-log.spec.ts | 2 +-
.../ui/tests/e2e/specs/dag-calendar-tab.spec.ts | 4 +-
.../ui/tests/e2e/specs/dag-code-tab.spec.ts | 4 +-
.../ui/tests/e2e/specs/dag-grid-view.spec.ts | 4 +-
.../ui/tests/e2e/specs/dag-runs-tab.spec.ts | 4 +-
.../airflow/ui/tests/e2e/specs/dag-runs.spec.ts | 6 +-
.../airflow/ui/tests/e2e/specs/dags-list.spec.ts | 2 +-
.../airflow/ui/tests/e2e/specs/events-page.spec.ts | 2 +-
.../ui/tests/e2e/specs/home-dashboard.spec.ts | 10 +-
.../src/airflow/ui/tests/e2e/specs/xcoms.spec.ts | 2 +-
.../src/airflow/ui/tests/e2e/utils/test-helpers.ts | 42 +-
airflow-core/src/airflow/utils/db.py | 2 +-
.../api_fastapi/core_api/datamodels/test_dags.py | 79 ++-
.../core_api/routes/public/test_extra_links.py | 76 ++-
.../core_api/routes/public/test_task_instances.py | 567 ++++++++++++++-
.../tests/unit/core/test_dual_stats_manager.py | 287 --------
.../tests/unit/dag_processing/test_manager.py | 43 +-
.../tests/unit/dag_processing/test_processor.py | 3 -
.../tests/unit/executors/test_base_executor.py | 26 +-
.../tests/unit/executors/test_local_executor.py | 14 +-
airflow-core/tests/unit/jobs/test_scheduler_job.py | 114 ++--
airflow-core/tests/unit/jobs/test_triggerer_job.py | 163 ++++-
.../unit/migrations/test_migration_patterns.py | 68 ++
.../tests/unit/migrations/test_migration_utils.py | 298 ++++++++
airflow-core/tests/unit/models/test_asset.py | 63 ++
airflow-core/tests/unit/models/test_asset_state.py | 150 ++++
airflow-core/tests/unit/models/test_cleartasks.py | 48 ++
airflow-core/tests/unit/models/test_dag.py | 6 +-
airflow-core/tests/unit/models/test_dagbag.py | 8 +-
airflow-core/tests/unit/models/test_dagrun.py | 24 +-
airflow-core/tests/unit/models/test_task_state.py | 230 +++++++
.../tests/unit/models/test_taskinstance.py | 15 +-
.../tests/unit/observability/metrics/test_stats.py | 27 +-
.../unit/serialization/test_serialized_objects.py | 23 +
.../tests/unit/state}/__init__.py | 0
airflow-core/tests/unit/state/test_metastore.py | 399 +++++++++++
airflow-ctl-tests/pyproject.toml | 2 +-
airflow-ctl/pyproject.toml | 2 +-
.../src/airflowctl/api/datamodels/generated.py | 2 +-
airflow-e2e-tests/pyproject.toml | 2 +-
chart/Chart.yaml | 4 +-
chart/pyproject.toml | 2 +-
.../templates/cleanup/cleanup-serviceaccount.yaml | 3 +-
chart/templates/dags-persistent-volume-claim.yaml | 2 +-
.../database-cleanup-serviceaccount.yaml | 3 +-
chart/templates/flower/flower-serviceaccount.yaml | 3 +-
.../jobs/create-user-job-serviceaccount.yaml | 3 +-
.../jobs/migrate-database-job-serviceaccount.yaml | 3 +-
chart/templates/redis/redis-serviceaccount.yaml | 3 +-
.../templates/scheduler/scheduler-deployment.yaml | 2 +-
chart/templates/statsd/statsd-serviceaccount.yaml | 3 +-
.../workers/worker-kubernetes-serviceaccount.yaml | 3 +-
chart/values.schema.json | 6 +-
chart/values.yaml | 2 +-
clients/python/README.md | 4 +-
clients/python/pyproject.toml | 2 +-
clients/python/test_python_client.py | 10 +-
.../03a_contributors_quick_start_beginners.rst | 8 +-
contributing-docs/mprocs/MPROCS_QUICK_REFERENCE.md | 4 +-
contributing-docs/testing/airflow_e2e_tests.rst | 6 +-
contributing-docs/testing/k8s_tests.rst | 4 +-
dev/AIRFLOW_ERROR_GUIDE.md | 46 +-
dev/README_RELEASE_PROVIDERS.md | 137 +++-
dev/README_RELEASE_PYTHON_CLIENT.md | 2 +-
dev/breeze/doc/05_test_commands.rst | 4 +-
dev/breeze/doc/ci/02_images.md | 4 +-
dev/breeze/pyproject.toml | 2 +-
.../commands/release_management_commands.py | 4 +-
dev/breeze/src/airflow_breeze/global_constants.py | 2 +-
.../tests/test_pytest_args_for_test_types.py | 1 +
dev/breeze/tests/test_selective_checks.py | 40 +-
dev/breeze/uv.lock | 114 ++--
dev/mypy/pyproject.toml | 2 +-
dev/pyproject.toml | 2 +-
dev/registry/derive_wave_providers.py | 173 +++++
dev/registry/pyproject.toml | 2 +-
dev/registry/tests/test_derive_wave_providers.py | 169 +++++
docker-stack-docs/pyproject.toml | 2 +-
docker-tests/pyproject.toml | 2 +-
go-sdk/pkg/worker/runner_test.go | 11 +-
helm-tests/pyproject.toml | 2 +-
.../helm_tests/airflow_aux/test_annotations.py | 51 +-
.../airflow_aux/test_database_cleanup.py | 15 +-
kubernetes-tests/pyproject.toml | 2 +-
providers-summary-docs/pyproject.toml | 2 +-
providers/AGENTS.md | 74 ++
providers/amazon/docs/operators/bedrock.rst | 29 +
providers/amazon/docs/operators/glue_catalog.rst | 14 +
providers/amazon/docs/operators/index.rst | 1 -
providers/amazon/docs/operators/s3_tables.rst | 67 ++
providers/amazon/docs/operators/s3_vectors.rst | 14 +
.../amazon/docs/operators/s3tables/s3tables.rst | 34 -
providers/amazon/docs/operators/sagemaker.rst | 2 +-
providers/amazon/provider.yaml | 7 +-
.../src/airflow/providers/amazon/aws/bundles/s3.py | 30 +-
.../providers/amazon/aws/executors/Dockerfile | 20 +-
.../aws/executors/aws_lambda/docker/Dockerfile | 10 +-
.../amazon/aws/executors/aws_lambda/docker/app.py | 4 +-
.../aws/executors/aws_lambda/lambda_executor.py | 363 ++++++----
.../amazon/aws/executors/aws_lambda/utils.py | 19 +-
.../amazon/aws/executors/batch/batch_executor.py | 4 +-
.../airflow/providers/amazon/aws/hooks/base_aws.py | 2 +-
.../airflow/providers/amazon/aws/hooks/bedrock.py | 9 +
.../{opensearch_serverless.py => s3_tables.py} | 21 +-
.../providers/amazon/aws/operators/appflow.py | 2 +-
.../providers/amazon/aws/operators/bedrock.py | 143 +++-
.../providers/amazon/aws/operators/comprehend.py | 2 +-
.../airflow/providers/amazon/aws/operators/emr.py | 2 +-
.../providers/amazon/aws/operators/glue_catalog.py | 44 ++
.../airflow/providers/amazon/aws/operators/mwaa.py | 22 +-
.../providers/amazon/aws/operators/s3_tables.py | 225 ++++++
.../providers/amazon/aws/operators/s3_vectors.py | 35 +
.../providers/amazon/aws/operators/s3tables.py | 104 ---
.../providers/amazon/aws/operators/sagemaker.py | 4 +-
.../amazon/aws/secrets/secrets_manager.py | 10 +
.../amazon/aws/secrets/systems_manager.py | 10 +
.../airflow/providers/amazon/aws/sensors/mwaa.py | 28 +-
.../airflow/providers/amazon/aws/triggers/mwaa.py | 24 +-
.../providers/amazon/aws/triggers/redshift_data.py | 4 +-
.../airflow/providers/amazon/get_provider_info.py | 8 +-
.../src/airflow/providers/amazon/version_compat.py | 2 +
...lue_catalog.py => example_bedrock_guardrail.py} | 47 +-
.../system/amazon/aws/example_glue_catalog.py | 23 +-
.../{example_s3tables.py => example_s3_tables.py} | 56 +-
.../tests/system/amazon/aws/example_s3_vectors.py | 25 +-
.../tests/unit/amazon/aws/bundles/test_s3.py | 4 +-
.../executors/aws_lambda/test_lambda_executor.py | 535 +++++++++------
.../tests/unit/amazon/aws/hooks/test_bedrock.py | 26 +
.../tests/unit/amazon/aws/hooks/test_s3_tables.py | 59 ++
.../tests/unit/amazon/aws/links/test_base_aws.py | 4 +-
.../unit/amazon/aws/operators/test_bedrock.py | 148 ++++
.../unit/amazon/aws/operators/test_glue_catalog.py | 42 +-
.../unit/amazon/aws/operators/test_s3_tables.py | 214 ++++++
.../unit/amazon/aws/operators/test_s3_vectors.py | 27 +-
.../unit/amazon/aws/operators/test_s3tables.py | 81 ---
.../tests/unit/amazon/aws/sensors/test_mwaa.py | 4 +-
providers/celery/pyproject.toml | 2 +-
.../unit/celery/executors/test_celery_executor.py | 24 +-
providers/cncf/kubernetes/pyproject.toml | 2 +-
.../executors/test_kubernetes_executor.py | 20 +-
providers/common/ai/pyproject.toml | 2 +-
.../databricks/operators/databricks_workflow.py | 27 +
.../operators/test_databricks_workflow.py | 51 ++
.../airflow/providers/dbt/cloud/operators/dbt.py | 93 ++-
providers/edge3/pyproject.toml | 4 +-
.../src/airflow/providers/edge3/cli/worker.py | 24 +-
.../providers/edge3/executors/edge_executor.py | 4 -
.../airflow/providers/edge3/models/edge_worker.py | 134 +---
.../providers/edge3/worker_api/routes/jobs.py | 28 +-
.../providers/edge3/worker_api/routes/worker.py | 22 +-
.../edge3/worker_api/v2-edge-generated.yaml | 2 -
.../edge3/tests/unit/edge3/cli/test_worker.py | 70 +-
.../unit/edge3/executors/test_edge_executor.py | 2 +-
.../unit/edge3/worker_api/routes/test_jobs.py | 19 +-
providers/fab/pyproject.toml | 2 +-
.../providers/3rd-party-licenses/LICENSES-ui.txt | 2 +-
.../fab/src/airflow/providers/fab/www/package.json | 2 +-
.../src/airflow/providers/fab/www/pnpm-lock.yaml | 8 +-
providers/mongo/tests/conftest.py | 32 +-
providers/openlineage/docs/index.rst | 4 +-
providers/openlineage/pyproject.toml | 6 +-
.../airflow/providers/openlineage/api/__init__.py} | 30 +-
.../src/airflow/providers/openlineage/api/core.py | 57 ++
.../airflow/providers/openlineage/api/datasets.py | 173 +++++
.../src/airflow/providers/openlineage/api/sql.py | 183 +++++
.../providers/openlineage/extractors/manager.py | 30 +-
.../providers/openlineage/plugins/adapter.py | 26 +-
.../providers/openlineage/plugins/listener.py | 71 +-
.../openlineage/utils/sql_hook_lineage.py | 91 ++-
.../airflow/providers/openlineage/utils/utils.py | 360 +++++++++-
.../tests/unit/openlineage/api}/__init__.py | 0
.../tests/unit/openlineage/api/test_core.py | 66 ++
.../tests/unit/openlineage/api/test_datasets.py | 236 +++++++
.../tests/unit/openlineage/api/test_sql.py | 312 +++++++++
.../unit/openlineage/extractors/test_manager.py | 203 ++++++
.../tests/unit/openlineage/plugins/test_adapter.py | 82 +--
.../openlineage/utils/test_sql_hook_lineage.py | 424 ++----------
.../tests/unit/openlineage/utils/test_utils.py | 758 ++++++++++++++++++++-
.../providers/standard/operators/trigger_dagrun.py | 113 ++-
.../airflow/providers/standard/version_compat.py | 13 +-
.../unit/standard/operators/test_trigger_dagrun.py | 61 +-
pyproject.toml | 9 +-
scripts/ci/install_breeze.sh | 2 +-
.../prek/check_metrics_synced_with_the_registry.py | 2 +-
scripts/ci/prek/check_migration_patterns.py | 513 ++++++++++++++
.../ci/prek/check_new_airflow_exception_usage.py | 2 +-
.../check_no_new_airflow_core_utils_modules.py | 182 +++++
scripts/ci/prek/check_tests_in_right_folders.py | 1 +
.../ci/prek/known_airflow_core_utils_modules.txt | 40 ++
scripts/pyproject.toml | 2 +-
.../tests/ci/prek/test_check_migration_patterns.py | 557 +++++++++++++++
shared/configuration/pyproject.toml | 2 +-
shared/dagnode/pyproject.toml | 2 +-
shared/listeners/pyproject.toml | 2 +-
shared/logging/pyproject.toml | 2 +-
shared/module_loading/pyproject.toml | 2 +-
shared/observability/pyproject.toml | 2 +-
.../observability/metrics/base_stats_logger.py | 4 +-
.../observability/metrics/datadog_logger.py | 3 +-
.../observability/metrics/dual_stats_manager.py | 282 --------
.../observability/metrics/metrics_template.yaml | 12 +-
.../observability/metrics/otel_logger.py | 2 +-
.../observability/metrics/protocols.py | 10 +-
.../airflow_shared/observability/metrics/stats.py | 332 +++++++--
.../metrics/test_dual_stats_manager.py | 287 --------
.../observability/metrics/test_otel_logger.py | 1 +
.../tests/observability/metrics/test_stats.py | 344 ++++++++--
shared/plugins_manager/pyproject.toml | 2 +-
shared/providers_discovery/pyproject.toml | 2 +-
shared/secrets_backend/pyproject.toml | 2 +-
shared/secrets_masker/pyproject.toml | 2 +-
shared/serialization/pyproject.toml | 2 +-
{airflow-core => shared/state}/.gitignore | 0
shared/{dagnode => state}/.pre-commit-config.yaml | 6 +-
shared/{serialization => state}/pyproject.toml | 8 +-
shared/state/src/airflow_shared/state/__init__.py | 124 ++++
shared/{module_loading => state}/tests/conftest.py | 0
.../cli => shared/state/tests/state}/__init__.py | 0
shared/state/tests/state/test_state.py | 72 ++
shared/template_rendering/pyproject.toml | 2 +-
shared/timezones/pyproject.toml | 2 +-
task-sdk-integration-tests/pyproject.toml | 2 +-
task-sdk/pyproject.toml | 2 +-
task-sdk/src/airflow/sdk/api/client.py | 7 +-
.../src/airflow/sdk/api/datamodels/_generated.py | 1 +
task-sdk/src/airflow/sdk/exceptions.py | 2 +
.../src/airflow/sdk/execution_time/supervisor.py | 2 +-
.../src/airflow/sdk/execution_time/task_runner.py | 35 +-
task-sdk/src/airflow/sdk/io/fs.py | 4 +-
.../sdk/observability/metrics/datadog_logger.py | 3 +-
.../sdk/observability/metrics/stats_utils.py | 5 +-
task-sdk/src/airflow/sdk/observability/stats.py | 23 +-
task-sdk/src/airflow/sdk/plugins_manager.py | 4 +-
task-sdk/src/airflow/sdk/serde/__init__.py | 10 +-
task-sdk/tests/task_sdk/api/test_client.py | 5 +-
.../task_sdk/execution_time/test_supervisor.py | 41 +-
.../task_sdk/execution_time/test_task_runner.py | 47 +-
uv.lock | 233 ++++---
492 files changed, 17125 insertions(+), 4425 deletions(-)
create mode 120000 .claude/skills/aip-user-stories
create mode 100644 .github/skills/aip-user-stories/SKILL.md
create mode 100644
.github/skills/aip-user-stories/references/playbook-template.md
create mode 100644 .github/skills/prepare-providers-documentation/SKILL.md
delete mode 100644 airflow-core/newsfragments/64963.significant.rst
create mode 100644 airflow-core/newsfragments/65422.bugfix.rst
create mode 100644 airflow-core/newsfragments/66015.significant.rst
create mode 120000 airflow-core/src/airflow/_shared/state
create mode 100644
airflow-core/src/airflow/migrations/versions/0112_3_3_0_add_task_state_and_asset_state_tables.py
create mode 100644 airflow-core/src/airflow/models/asset_state.py
create mode 100644 airflow-core/src/airflow/models/task_state.py
copy task-sdk/src/airflow/sdk/execution_time/xcom.py =>
airflow-core/src/airflow/state/__init__.py (60%)
create mode 100644 airflow-core/src/airflow/state/metastore.py
create mode 100644
airflow-core/src/airflow/ui/src/components/AdvancedSearchToggle.tsx
rename airflow-core/src/airflow/ui/src/{pages/Dag/Tasks/TaskFilters =>
components}/AttrSelectFilterMulti.tsx (100%)
create mode 100644
airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.test.ts
create mode 100644
airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.ts
create mode 100644
airflow-core/src/airflow/ui/src/components/GraphTaskFilters.tsx
copy
airflow-core/src/airflow/ui/src/components/MarkAs/{TaskInstance/MarkTaskInstanceAsButton.tsx
=> TaskGroup/MarkTaskGroupAsButton.tsx} (77%)
copy
airflow-core/src/airflow/ui/src/components/MarkAs/{TaskInstance/MarkTaskInstanceAsDialog.tsx
=> TaskGroup/MarkTaskGroupAsDialog.tsx} (78%)
copy airflow-core/src/airflow/ui/src/{pages/Events =>
components/MarkAs/TaskGroup}/index.tsx (94%)
create mode 100644
airflow-core/src/airflow/ui/src/components/renderStructuredLog.test.tsx
rename airflow-core/src/airflow/ui/src/context/{openGroups =>
groups}/Context.ts (87%)
rename
airflow-core/src/airflow/ui/src/context/{openGroups/OpenGroupsProvider.tsx =>
groups/GroupsProvider.tsx} (76%)
rename airflow-core/src/airflow/ui/src/context/{openGroups => groups}/index.ts
(92%)
rename airflow-core/src/airflow/ui/src/context/{openGroups/useOpenGroups.ts =>
groups/useGroups.ts} (77%)
create mode 100644 airflow-core/src/airflow/ui/src/hooks/useAdvancedSearch.ts
copy
providers/edge3/src/airflow/providers/edge3/plugins/www/src/utils/useContainerWidth.ts
=>
airflow-core/src/airflow/ui/src/layouts/Details/Graph/components/FitViewOnLayout.tsx
(56%)
copy airflow-core/src/airflow/ui/src/{components/DagVersion.tsx =>
layouts/Details/Graph/components/GraphControls.tsx} (57%)
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Graph/hooks/useFilteredNodesAndEdges.ts
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Graph/hooks/useGraphSearchParams.ts
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Graph/useGraphFilteredNodes.test.ts
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Graph/useGraphFilteredNodes.ts
copy providers/fab/src/airflow/providers/fab/www/static/css/loading-dots.css
=> airflow-core/src/airflow/ui/src/layouts/Details/Graph/utils/nodeColor.ts
(55%)
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/DeadlineAlertsBadge.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Overview/AllDeadlinesModal.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Overview/DagDeadlines.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Dag/Overview/DeadlineRow.tsx
create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/DeadlineStatus.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Run/DeadlineStatusModal.tsx
create mode 100644 airflow-core/src/airflow/ui/src/queries/useDeadlines.ts
copy airflow-core/src/airflow/ui/src/queries/{usePatchDagRun.ts =>
usePatchTaskGroup.ts} (77%)
copy airflow-core/src/airflow/ui/src/queries/{usePatchTaskInstanceDryRun.ts =>
usePatchTaskGroupDryRun.ts} (77%)
delete mode 100644 airflow-core/tests/unit/core/test_dual_stats_manager.py
create mode 100644
airflow-core/tests/unit/migrations/test_migration_patterns.py
create mode 100644 airflow-core/tests/unit/migrations/test_migration_utils.py
create mode 100644 airflow-core/tests/unit/models/test_asset_state.py
create mode 100644 airflow-core/tests/unit/models/test_task_state.py
copy {providers/fab/src/airflow/providers/fab/cli =>
airflow-core/tests/unit/state}/__init__.py (100%)
create mode 100644 airflow-core/tests/unit/state/test_metastore.py
create mode 100644 dev/registry/derive_wave_providers.py
create mode 100644 dev/registry/tests/test_derive_wave_providers.py
create mode 100644 providers/amazon/docs/operators/s3_tables.rst
delete mode 100644 providers/amazon/docs/operators/s3tables/s3tables.rst
copy
providers/amazon/src/airflow/providers/amazon/aws/hooks/{opensearch_serverless.py
=> s3_tables.py} (65%)
create mode 100644
providers/amazon/src/airflow/providers/amazon/aws/operators/s3_tables.py
delete mode 100644
providers/amazon/src/airflow/providers/amazon/aws/operators/s3tables.py
copy providers/amazon/tests/system/amazon/aws/{example_glue_catalog.py =>
example_bedrock_guardrail.py} (58%)
rename providers/amazon/tests/system/amazon/aws/{example_s3tables.py =>
example_s3_tables.py} (75%)
create mode 100644
providers/amazon/tests/unit/amazon/aws/hooks/test_s3_tables.py
create mode 100644
providers/amazon/tests/unit/amazon/aws/operators/test_s3_tables.py
delete mode 100644
providers/amazon/tests/unit/amazon/aws/operators/test_s3tables.py
copy
providers/{apache/iceberg/src/airflow/providers/apache/iceberg/version_compat.py
=> openlineage/src/airflow/providers/openlineage/api/__init__.py} (52%)
create mode 100644
providers/openlineage/src/airflow/providers/openlineage/api/core.py
create mode 100644
providers/openlineage/src/airflow/providers/openlineage/api/datasets.py
create mode 100644
providers/openlineage/src/airflow/providers/openlineage/api/sql.py
copy {airflow-core/src/airflow/_shared =>
providers/openlineage/tests/unit/openlineage/api}/__init__.py (100%)
create mode 100644
providers/openlineage/tests/unit/openlineage/api/test_core.py
create mode 100644
providers/openlineage/tests/unit/openlineage/api/test_datasets.py
create mode 100644 providers/openlineage/tests/unit/openlineage/api/test_sql.py
create mode 100644 scripts/ci/prek/check_migration_patterns.py
create mode 100755 scripts/ci/prek/check_no_new_airflow_core_utils_modules.py
create mode 100644 scripts/ci/prek/known_airflow_core_utils_modules.txt
create mode 100644 scripts/tests/ci/prek/test_check_migration_patterns.py
delete mode 100644
shared/observability/src/airflow_shared/observability/metrics/dual_stats_manager.py
delete mode 100644
shared/observability/tests/observability/metrics/test_dual_stats_manager.py
copy {airflow-core => shared/state}/.gitignore (100%)
copy shared/{dagnode => state}/.pre-commit-config.yaml (90%)
copy shared/{serialization => state}/pyproject.toml (87%)
create mode 100644 shared/state/src/airflow_shared/state/__init__.py
copy shared/{module_loading => state}/tests/conftest.py (100%)
copy {providers/keycloak/src/airflow/providers/keycloak/auth_manager/cli =>
shared/state/tests/state}/__init__.py (100%)
create mode 100644 shared/state/tests/state/test_state.py