You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by sh...@apache.org on 2026/10/14 09:49:31 UTC

(airflow) branch test-runs-on-github-actions-runner updated (7ceab7a76a0 -> 6c0e912113d)

This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a change to branch test-runs-on-github-actions-runner
in repository https://gitbox.apache.org/repos/asf/airflow.git


    omit 7ceab7a76a0 Keep the AWS no-credentials tests hermetic on EC2 and developer hosts
    omit 1af0a4144e4 Give the TypeScript SDK docs job a RunsOn size class
    omit 8058d46a50e Run the CI on RunsOn runners for the fork test
     add c1e98dc0c96 Add dedicated InfluxDB 3 sensor (#73522)
     add 50c9249623e Add troubleshooting guidance for task state mismatches (#72492)
     add 8dff03038ae Add http_conn_id to HttpOperator and HttpSensor template_fields (#72582)
     add 4b0cbb1c944 Keep the AWS no-credentials tests hermetic on EC2 and developer hosts (#73707)
     add 3a5fe2f521a Honor string passive extra in FTPHook and FTPSHook (#73694)
     add 847183dc9f9 Fix HttpAsyncHook crash on stream/cert/trust_env connection extras (#71524)
     add 122e24cb57a Mark the IBM MQ and IBM Db2 providers as ready for release (#73708)
     add 0cf78267ad9 Raise DeadlockImminentError for sync comms calls from a paused event loop thread (#73521)
     add 07197c29a2f Fix Elasticsearch and OpenSearch response wrapper bugs (#73725)
     add f0ec1837416 Bump eslint-plugin-unicorn (#73733)
     add a3449527205 Bump the core-ui-package-updates group across 1 directory with 16 updates (#73497)
     add 9746f41be1d Bump the ui-plugin-template-package-updates group across 1 directory with 15 updates (#73493)
     add 28cab90ccbb Bump json-schema-to-typescript from 15.0.4 to 16.0.0 in /ts-sdk (#73484)
     add 298756f22c3 Cap open pull requests from non-committers at 5 (#73469)
     add dd2c7fd26e7 Keep the table sort in the URL when it matches the saved sort (#73622)
     add c4a0a88a8b3 Fix boolean value of start date used in url start_date_gte filter. (#73676)
     add 1a51ed1b1f5 Account for the open pull request limit in the PR triage process (#73742)
     add a11da87a119 Speed up zip Dag discovery and keep member file names (#73727)
     add 7e5c580cd68 Temporarily remove the open pull request creation cap (#73754)
     add 77a1953cd41 Java SDK: Draw a Java-authored Dag's edges with before and after (#73594)
     add f863982c07c Restore the open pull request creation cap (#73758)
     add 1219b1a8541 Eager-load DagCode in the Dag source API (#73752)
     add 005fd649bdf Add dedicated tests for cncf.kubernetes secret and k8s_model modules (#73751)
     add 909ca179bcc Update Magpie floor to 0.9.0 and adopt contributor-growth skills (#73755)
     add 05519cd774c Keep task attempt UUIDs and try numbers aligned (#73554)
     add 18fe1c60986 UI: Add bulk pause, drain and unpause actions to the Dags list (#73055)
     add 38ea385ce71 i18n(ko): Add missing translations (Sep25) (#73757)
     add 3e47fc39968 Catch stale entries in the Java SDK dependency trust list (#71869)
     add 7c597e2830b Speed up the event logs API by loading only display names (#73021)
     add 1d916545b2b Update Magpie floor to 0.9.0.dev202609262258 (#73765)
     add e1cd364286c Update README quickstart and stable version table to Airflow 3.3.2 (#73770)
     add a72b73576fb Drop stale entries from the Java SDK dependency trust list (#73792)
     add a3abc237355 Check admin-only views against a dedicated Keycloak resource in multi-team mode (#73696)
     add 22f6bb06664 Stop Keycloak middleware from reissuing a JWT revoked during the request (#73695)
     add 22ebb0943f7 [main] Upgrade important CI environment (#73629)
     add 3107af07cd1 Use POSIX-compliant tail to extract token line in EKS command (#73690)
     add 23c6e77067f Fix provider.yaml doc URL check with several suspended providers (#73782)
     add f2fae8c737a Fix flaky test_trigger_log in triggerer job tests (#72919)
     add a55f0a1af04 Add GitSync sidecar upgrade warning to Helm chart docs (#73814)
     add 5bc738efafe Add tests for the Google Cloud Tasks links (#72846)
     add ebe3bddae79 Keep README stable Airflow version pins in sync with releases (#73786)
     add 46823e47aee Correct the meaning of _arg_bindings in the serialization schema (#73644)
     add f49bce025a8 Optimize UI and Playwright dependency caching (#73183)
     add acaa1cba930 Republish repaired prek caches and keep unrelated host caches (#73182)
     add dff97f0908a Added Louisa AI to the list of companies using Apache Airflow (#73665)
     add 28e7c89c363 fix k8s download_schemas_for_version for hpa (#73821)
     add 23bcbe6c99a Regenerate provider requirement tables in breeze ci upgrade (#73802)
     add 2827a13dc4f Check ui-field-behaviour drift between hooks and provider.yaml (#73801)
     add 30d0d7bac4a Adjust warnings, import errors, and Dag source models for sdk/importers (#72474)
     add f242c8e0513 Skip CI duration alerts when the newest run is stale (#73831)
     add 3634bc89d04 Discover a bundle's Dag definitions through the importer registry (#73728)
     add 7eac9ac7c1b Add connections and agent-security entries to the common.ai sidebar (#73837)
     add 58af2f521bb Close the ssh askpass helper in GitHook before ssh executes it (#73427)
     add b86fa49a15d Optimize CI disk cleanup (#73184)
     add 5fbe8dbb433 Clarify DateTimeSensorAsync changelog entry (#73833)
     add 873bd644b51 Let a person approve an agent's tool calls before they run (#73586)
     add 66607ac5483 AIP-82: Add KinesisMessageQueueProvider (#73509)
     add b357ae24709 Bump the auth-ui-package-updates group across 1 directory with 8 updates (#73740)
     add 455d9581367 UI: Complete Polish translations and unify slot/deferred wording (#72623)
     add 5428b3b995b Secrets backends order updated (#70681)
     add 232255e7fa7 Go SDK: add airflow.Dag and dag.Task, the native Dag constructors (#73767)
     add 0566d6cd5ef Add OpenSandbox backend for sandbox tools (#71676)
     add 93978958ae1 Fix example_neptune_analytics by pinning an explicit region (#73851)
     add d6c4c71979e Bump prettier (#73857)
     add c8ca02e4158 Update changelog to clarify new LLMBranchOperator "branches" feature (#73850)
     add ad3e67fccd2 Add Modal provider with `ModalHook` and connection type (#73418)
     add ce614baf9b0 Add Strands Agents support for `common.ai` toolsets (#73587)
     add dbac03d87dd Fix KubernetesExecutor not queuing tasks on Airflow 3.0.x (#73764)
     add b3bcb388742 Recognize grouped PR references in provider changelog tooling (#73855)
     add ae1e8385060 Let the sandbox toolset attach to a sandbox another task provisioned (#73559)
     add c1b878ad22c Exclude SQLAlchemy 2.1.0 (#73865)
     add 10221c300eb Read the AWS task logs once more after the fetcher is stopped (#73211)
     add 84f75158120 Require `common.sql` 2.2.0 for common.ai's SQL extras (#73867)
     add 3f60fa9e2c7 Fix Firefox and WebKit UI e2e runs failing at login (#73872)
     add ac88accf4ed Add bundle_name tag to missing dag processor metrics (#73717)
     add 7afece8efb0 Update providers metadata 2026-09-29 (#73884)
     add 4b6606543fd Distinguish OpenAI batch timeout and cancellation in deferrable tasks (#72149)
     add 8b3d4d315fa Surface the retry policy decision on task instances page (#73030)
     add bc28bb0804c Go SDK: Fix the mixed language task handler binding semantic (#73648)
     add 9ebc2644741 Revert "Secrets backends order updated (#70681)" (#73891)
     add 4e23910701b Go SDK: check Go naming conventions with staticcheck (#73874)
     add 0768924a0cd Automatically isolate `breeze testing` for each git worktree in a totally isolated project. (#73836)
     add 3e8318969e1 Add ADR for Lang SDK Dag and mixed-language Task processing flow (#71929)
     add e8d43932077 Add ADR for supporting Dynamic Dag Generation across Language SDKs (#73518)
     add 8d815efdbc3 Own the BaseAsyncOperator event loop through asyncio.Runner (#73560)
     add 647add72afe Mark experimental `common.ai` features ahead of 1.0 (#73896)
     add 5eba7439d76 Make cron timetables hashable (#73859)
     add d776f003b71 UI: Add team column and filter to the jobs list (#73295)
     add d0b8476825d Set `SameSite` on the fab auth manager session cookie (#73894)
     add 6b90003fe27 Document override semantics for EcsRunTaskOperator (#73860)
     add a3555c74cfc TS SDK: default a task id to the handler's name (#73437)
     add a65a3ddf8be Fix Postgres data volume path in Breeze (#73862)
     add 85321901f10 Add EmrServerlessStartSessionOperator to Amazon provider (#70763)
     add 9198acb15e8 UI: Add team filter to Human-in-the-loop task instances listing (#73726)
     add 836a5565c58 Scope plugin scheduling classes to their team in multi-team mode (#73569)
     add cc19675d24f Add DuckDB support to the Amazon provider (#73301)
     add 029cdf8f6cc Return an approved agent answer as `output_type` after human review (#73904)
     add 3c76a47f65c Remove accidentally adopted Magpie contributor-growth plugin (#73927)
     add 73b07c5aedb Name the tools a durable agent retry will run again (#73873)
     add 5799660c4d4 TS SDK: draw order-only edges with before and after (#73438)
     add a8a62573f54 TS SDK: embed one source region per native Dag file (#73723)
     add bfa2fe02fc1 Account for AgentOperator spend on failed runs and across retries (#73706)
     add 023f859e5a6 Mask secrets in tool results before they reach the model (#73897)
     add 2b806f949b0 Rework common.ai Strands support into a plugin and add Google ADK (#73898)
     add e46d1938619 Add `ObjectStorageToolset` for reading files on object storage (#73899)
     add 35507e99a6e Let HookToolset pin arguments the model must not choose (#73900)
     add 40ed903b6d6 Count and trace tool calls made by native agent frameworks (#73901)
     add 2eb11c14b85 Document running your own Pydantic AI agent, and sandboxes in other frameworks (#73902)
     add d4ba567a390 Tell the model how many rows a Parquet or Avro file holds (#73925)
     add 21bbf2f40a2 Java SDK: Generate Dag and task configuration from the serialization schema (#73595)
     add 76bf88a4877 API: Translate domain ValueError in Task State Store route (#73753)
     add 1a67bf46b55 Support DagBundle based deployment for Coordinator (#70805)
     add 53ca2a427ba TS SDK: add task groups to the native Dag surface (#73439)
     add 5e785acfb3b Discard the task state values for a task instance when it is cleared (#72100)
     add 7938c0dbb65 Make `execute_tool` the public method `AirflowToolset` subclasses implement (#73938)
     add 6cd2f6f36d9 Remove migration tests for migrations that have already landed. (#73953)
     add 5136c6c41bf Use plain ifs to normalize configured artifact roots (#73944)
     add e15b3a66137 Retry S3Hook.delete_bucket when a late write leaves bucket non-empty (#73930)
     add acd42922f3d Filter jobs API is_alive in SQL so pagination stays correct (#73684)
     add 508301ab263 Add ADR for per-Dag source in the Lang-SDK bundle artifact (#73948)
     add 91423baf366 Fix breeze down crashing when a start-airflow container is running (#73955)
     add 8e36d6d6efd Show whether a calendar day's run was a backfill (#72782)
     add 6317c63ae16 Go SDK: generate DagSpec and TaskSpec from the serialization schema (#73936)
     add f306f1848f6 Refresh HITL review details on task clear (#73235)
     add 4fd2c9aabf2 Mark lineage hashes as non-security (#70999)
     add f7a27633741 Fix typo in apache-airflow-providers-fab error message (#73956)
     add 8d4ab8a94db Keep OpenAPI error responses in sync with the statuses routes raise (#71647)
     add 0b6c38502ab Add runtime DagRun note updates (#69403)
     add ba89738639c Fix short-circuit not skipping already expanded mapped tasks (#73960)
     add 16f974f6a35 Run the `common.ai` agent framework adapter tests in CI (#73912)
     add e364ee76483 Keep agent framework spans when worker tracing is off (#73903)
     add 2e803e58997 Add key-pair JWT authentication to Snowflake Cortex Agent hook (#73815)
     add e92147c12aa UI: Add a time-window scope to the Dags list run state filter (#70470)
     add 63a5966473b Check PyPI history before a new provider's first release (#73887)
     add ede78e095b6 Add embedding kwargs to common AI hooks and operators (#72002)
     add 64943ba6dbb Fix `run_duration` calculation in airflow dags test by decoupling start_date (#68837)
     add 9e67831f2bb Allow filtering the Dag runs list by Dag tags (#70861)
     add e22c9d02b2e Add Has Events filter to Assets search (#72460)
     add f31b572df18 Fix airflowctl commands crashing instead of printing their result (#72675)
     add 1559dae90ab UI: Use TeamName component for all team name displays (#73910)
     add 489316fbc72 Migrate execution API reads to async sessions (#73403)
     add a8e95debbc6 Fix flaky AgentOperator durable usage budget tests (#73996)
     add e33e45fe67a Add `AssetAndTimeSchedule` timetable (#58543)
     add a91216d5ea9 TS SDK: serialize a native Dag to Dag JSON (#73441)
     add 884e687ea77 Fix short-circuit inside a mapped task group not skipping downstream (#73959)
     add 3f19c146545 Go SDK: declare data edges with airflow.Inputs (#73895)
     add 13adb691464 Close German Translation Gaps 2026-09-30 (#73980)
     add d886882ac14 Let Common AI toolsets use the agent's tool retry budget (#73957)
     add 35633455ed7 Add first-class `capabilities` to Common AI `AgentOperator` (#73984)
     add adaa16f88af Parse Dag files through the Task SDK importers (#73853)
     add 12127b07978 Fix check-conn-id-templated crashing on a vanishing __pycache__ (#74016)
     add 4d304d0876c Export files an agent built in a sandbox to object storage (#73990)
     add e9c552cc827 Add a vendor-neutral managed-agent hook contract to Common AI (#73532)
     add a33fe27cace Add async client to `AnthropicHook` (#73967)
     add e6a9de5d832 Go SDK: bring the coordinator-protocol models back to the supervisor schema (#73963)
     add 27cd88ca74c Cache repeated agent prompts by default in AgentOperator (#73994)
     add 529f429400a Go SDK: reject a task handler and a Dag that share a dag_id (#73876)
     add bc9ca5b1227 Correctly shutdown async sessions on exit. (#73838)
     add f1b36db6093 Back off between GitDagBundle bare clone attempts so a fresh GitHub App token can propagate (#73878)
     add 6b847411de1 Stop rebuilding the FAB app on every users and roles API call (#73104)
     add 56817294cdd Go SDK: add airflow.TriggerDagRun, a task that triggers a Dag run (#74003)
     add b8475094703 Fix go-sdk generated drift (#74028)
     add 8f3e8466c67 Support Airflow 2.11 in the Common AI provider (#73991)
     add f0cde671827 Use "Airflow versions" in user-facing docs, not "cores" (#74045)
     add 0bb09cb6ba5 Close the providers testing issue right after announcing the release (#73890)
     add 43377466a06 Release the DuckDB provider as 0.2.0 (#73888)
     add 53e43f29130 Speed up CI image restores with zstd-compressed stashes (#73997)
     add e4d397f021e Bound get_schema results for very wide tables in the SQL toolsets (#74017)
     add 7d6244bf191 Clarify `max_db_retries` doc wording to avoid off-by-one confusion (#73722)
     add bb463bf9230 Correlate executor task events by attempt UUID (#73916)
     add c19faf0c5ae Render the HITL review workflow as a Mermaid diagram (#74024)
     add 2aa31ae7bff Use airflow.sdk imports in Airflow 3 upgrade guide example (#74015)
     add f3532c60eda Use Task SDK TaskInstanceState in OpenSearch log handler (#72444)
     add 0ec26723858 Add GKEPodExecOperator for existing Pods (#72577)
     add 740986adfce Add missing cycle assertion to test_semi_complex (#71973)
     add fca1c01c73e Fix Windows UnicodeDecodeError during pytest collection (#73536)
     add 1787ef7cbba Run the deferred AWS hook configuration check as a prek hook (#73681)
     add 413ae46a045 Align timetable docs with Airflow 3 data interval and catchup behaviour (#70658)
     add 64f9f3ac784 Update issue templates now that Airflow 2 has reached end of life (#74056)
     add 6330b4de9c5 Go SDK: reject a second TaskSpec or Inputs when dag.Task applies it (#74057)
     add 383a9a87a98 Stop wiping the uv cache before every CI image build (#74052)
     add 58e987defec Fix Non-DB test collection failure in Google Stackdriver hook test (#74066)
     add 498724fc13a Go SDK: enumerate every user-facing enum in the airflow package (#74064)
     add 5e476d7cf89 TS SDK: answer the Dag-parsing request from bundle.serve (#73442)
     add dd271599939 Go SDK: vendor the schemas it generates from (#74047)
     add 77927390c17 Move Dag cycle detection from the Task SDK to shared (#74034)
     add a3e07159a0b Add Dag ID filtering to Assets search (#70971)
     add d3b9a0dd2b3 Add KafkaSharedStreamProducer and KafkaSharedStreamTrigger (#68625)
     add ae6139d58a8 Fix DecreasingPriorityStrategy example by initializing try_number before weight evaluation (#62148)
     add 402d7885194 Java SDK: Resolve a task's arguments from the Dag's own wiring (#73596)
     add e14854221ad Group and filter Dags by folder on the Dags page (#68544)
     add 18af65032e3 Render the Language SDK Spec diagrams as Mermaid (#74065)
     add be53013349e Support azure-datalake-store 1.x in AzureDataLakeHook (#73819)
     add bc15e1093b5 Close German Translation Gaps 2026-10-02 (#74088)
     add 3045451b8b0 Treat an empty Dag run config as no config in the UI (#74083)
     add c31888641b1 Persist the match-anywhere search toggle in the URL (#74019)
     add 4803c0b3f79 Discover Dag definitions through the Task SDK importers (#74020)
     add f5283f3da9b Move the Dag file processor's shared plumbing into a base class (#74040)
     add e3dd28607b9 Document team-scoped plugins in multi-team mode (#73995)
     add b62299ced8a Cap microsoft-kiota-http below 1.13 in the Microsoft Azure provider (#74090)
     add d7b672f44e0 Update docs and diagrams for the Airflow 3 Dag processor (#74073)
     add ec5b621a9cc Prepare ad-hoc providers release 2026-10-02 (#74097)
     add 7800fc44c07 Fix scheduler crash on restart with queued or running Edge tasks (#73832)
     add 49a52987956 Stop version-check hooks from clobbering the committing worktree's index (#74115)
     add d7b88f36197 UI: Fix external plugin nav links not navigating on click (#73913)
     add 66d751bfd22 Skip already-released providers in update-providers-next-version (#74098)
     add 04194b1de1f Fix flaky Kafka trigger tests by awaiting the event instead of a fixed sleep (#74124)
     add 4c0ba9e41da Make Edge executor adoption test immune to executor_loader reloads (#74122)
     add 7a8ce83f385 Go SDK: reject a task function whose last result type is not error (#74077)
     add 9c14681a4a0 Add create and update support to Snowflake Cortex Agent hook (#70703)
     add e029fcef2bb Bump the registry-security-updates group across 1 directory with 3 updates (#74099)
     add da28f1fcac4 Bump the auth-ui-package-updates group across 1 directory with 5 updates (#74101)
     add 971e8db54ea Bump the edge-ui-package-updates group across 1 directory with 12 updates (#74107)
     add 536f535d9dd Bump the core-ui-package-updates group across 1 directory with 12 updates (#74105)
     add 95826e38547 Bump the uv-dependency-updates group in /dev/breeze with 3 updates (#74100)
     add df76e2e0d5e Bump the ui-plugin-template-package-updates group across 1 directory with 7 updates (#74102)
     add 954d21df92d Bump vitest from 4.1.7 to 5.0.1 in /ts-sdk (#73483)
     add 0adf1378017 Bump swagger-ui-dist from 5.32.15 to 5.33.0 in /registry (#73480)
     add e37a39aa34e Bump pyjwt from 2.14.0 to 2.15.0 in /dev/breeze (#73969)
     add da53196d812 Time-box and retry pre-extras SDK downloads (#71544)
     add 232c264968f Deprecate Dataproc ClusterGenerator helper class (#71427)
     add b9c52951378 Create GCS folder markers as directories in GCSToSFTPOperator (#73880)
     add 91353550246 Honor download_num_attempts and upload_num_attempts in GCSTimeSpanFileTransformOperator (#72953)
     add 02f2c852c80 Shrink the CI image by skipping unused Rust docs and the Go archive (#74076)
     add 5523443d98c Set end date and duration on tasks skipped by a Dag run timeout (#74128)
     add 0f3a356e768 Add a user setting for the default search match mode (#74021)
     add 12ee0862774 Carry task attempt UUIDs through remote executor providers (#73917)
     add 867327c48dd Run only the tests that import a changed test helper (#74055)
     add da5af33fd02 Create the Athena Spark work group and results bucket in the system test (#73929)
     add c011b5960ac Install ibmmq from a wheel in IBM MQ lowest-dependency tests (#74132)
     add 855a2ce92f9 Isolate Edge job state by task attempt UUID (#73918)
     add 79de1d48039 Fix `refresh_from_task` not applied on retries (#65932)
     add bf558f6f29a Go SDK: add dag.If with Then and Else so native Dags can branch (#74075)
     add d21496f7581 Fetch existing task instances in instead of rebuilding them in tests (#74146)
     add 11d25a587ac Run leaking provider tests with providers changed after them in CI (#74123)
     add a89208e5405 Bump the github-actions-updates group across 1 directory with 5 updates (#74110)
     add 4ae133cd807 Bump @chakra-ui/react from 3.36.1 to 3.37.0 in /airflow-core/src/airflow/ui (#72524)
     add 484a87b54bc Add get_async_extra_dejson to the common.compat connection helpers (#74147)
     add e4736b46968 Pass ClientTimeout to aiohttp in Cloud Composer async hook (#74164)
     add f070997ba63 Go SDK: order tasks with Before, After and Label (#74119)
     add 803cc82370d Update supported Kubernetes versions (#73798)
     add 4a73cb7d5fa Keep builtin annotations from resolving to project attributes in Sphinx 9 (#74168)
     add 79bc6439a9c Always clear the session cookie on logout (#73788)
     add a1b02e26f3d Support Python patch exclusions in provider metadata (#73598)
     add bdfc5555305 Add configurable request timeout for the Airbyte API (#71092)
     add b2c215cc037 Fix Beam async hook launching pipelines through a shell (#72510)
     add d2883eead5c Fix Cloud SQL 409 operationInProgress on import/export operations (#68361)
     add c688a6f0abc Add breeze verify to list local checks for changed files (#73241)
     add 07c9ceba527 Fail provider DB test jobs when their tests fail (#74172)
     add 043f97c2b00 Test get_async_extra_dejson against the real supervisor comms (#74166)
     add 592cf3ffdd2 Use the current user in the HITL detail tests instead of hardcoding (#74184)
     add 8331bb485c5 Read the msgraph connection extra with get_async_extra_dejson (#74161)
     add b156582855c Fix OpenSearch provider log pagination (#73947)
     add c8b136358ce Allow OpensearchTaskHandler and OpensearchRemoteLogIO to take empty username and password (#71692)
     add cc94831e213 Fix docstring cross-references that Sphinx 9 cannot resolve (#74169)
     add b58cfa912a9 Add an API endpoint and UI tab comparing two stored Dag versions (#73322)
     add d1d5b1af26e Adapt GCP BigtableHook to run in private cloud (#73181)
     add b3674d43be0 `SparkSubmitHook`: Mask `_mask_cmd` secrets in linear time (#71711)
     add 8d5814c09d5 Bump the react group across 1 directory with 4 updates (#73334)
     add 7e448f70af5 Use async database access for Variable key listing (#73407)
     add 523567e47d0 Add tests for Google Go module subprocess utility (#73268)
     add 4a766db2b03 Bump the typescript group across 1 directory with 4 updates (#72994)
     add 7fad35d9c99 Add deadline alert coverage to Dag endpoint tests (#72296)
     add 6f5d5d06b17 Align standard provider tests with source paths (#73267)
     add c2f600f6ec6 Add airflowctl tasks state command (#71206)
     add 86b8a521837 Bind the AWS auth manager SAML response to the browser that started the login (#73698)
     add cefc0c3239d Bump the java-sdk-dependency-updates group across 1 directory with 3 updates (#74108)
     add 2a274ab3c93 Refuse nested secret ids looked up with no team in multi-team mode (#73789)
     add 8055f6a8717 Skip creating an empty hook lineage collector for OpenLineage events (#74190)
     add 38fefc1ca95 Fix invalid cron expression in OpenLineage system test Dag (#74187)
     add 27f827fcdce Honor the polling interval for deferred Kubernetes jobs (#74143)
     add 3bd4df6b2da Fix Snowflake SQL API wait_for_query timing out on finished queries (#73761)
     add f74a685978c Use configured default queue for Celery executor callbacks (#73552)
     add ad3bb1f676c Replace coordinator artifact roots with task_handler_bundle_name (#73970)
     add 1c3f78e1d57 Validate a serialized Dag and fill its unset settings from the Airflow config (#74041)
     add a44fd6d1f31 Allow explicit runs to drain a paused Dag (#73763)
     add 40832901c59 Improve LocalExecutor bookkeeping: correctly add tasks to the `running` list (#74142)
     add 5487c080bea Add Azure Blob Storage support to the DataFusion object storage layer (#73374)
     add b191cc4767b Fail instead of silently falling behind when a Lang-SDK vendored Dag schema drifts from airflow-core (#74091)
     add e0202f40c78 Let a Dag importer find the coordinator that parses its files (#74042)
     add 94a677e8f87 Keep callback triggers assigned to healthy triggerers (#72848)
     add 4e1f2aca67f Keep the Dag trigger button one-click when a run has config (#74039)
     add bfe84598a52 Fix destination path validation in GCS-to-SFTP transfers (#74186)
     add 8239997bf20 Scope UI next_run_assets endpoint to assets the caller may read (#72862)
     add 7df6f0e69cc Parse native Lang-SDK Dags in the Dag processor with their runtime (#74035)
     add cffc14d173b Parse native Lang-SDK Dags in a Dag bag (#74043)
     add e08216d0081 Go SDK: delete the XComs of earlier tries before a task runs (#74178)
     add ae082ab651f Go SDK: add dag.TaskGroup with nesting and group-level edges (#74214)
     add fa65343163d Remove FAB-related exclusion in SQLA tests (#74180)
     add dbee3c6c11b Fix concurrent SFTP directory transfers dropping parent hook's connection overrides (#73647)
     add b79acc8a8d6 Fix google provider BQ openlineage checks (#71777)
     add d6ab1aad3c6 Register TypeScript, Java and Go grammars for the Dag Code tab (#74231)
     add 747f69b1a8c Warn when db clean skips only some rows of a batch (#73568)
     add 9b2cc1352c3 Handle plain Step Functions execution errors (#73881)
     add d339bb2767a Fix Dataproc triggers swallowing task cancellation (#74192)
     add e0e3454998f Add v3-4-test to CI, dependabot, backport, and fork-sync configuration (#74219)
     add 98e753847a3 Distinguish credential failures from AWS waiter exhaustion (#73870)
     add 71f98d3ac00 UI: Group digits of counters according to the selected locale (#73713)
     add 2d734dc9842 UI: Deflake backfill e2e tests on WebKit (#74200)
     add 20f90a6e105 UI: Keep Dags list table rows on a single line (#74002)
     add dafa0555a0e Bump stylelint (#74252)
     add 08fae625769 Add datafusion handler for google cleanup script (#74234)
     add 11bf87404c2 Restrict the second render pass in SqlToSlackWebhookOperator (#71402)
     add a048842a72a Fix google provider system tests dag version increase issues (#72194)
     add 48f6b517397 Require moto 5.2.2 or newer for the Amazon provider tests (#74224)
     add eb89b4092b9 Fix SSH commands failing when the task holds over 1024 file descriptors (#74211)
     add 86aef85e35c Keep S3 Dag bundle downloads within the configured directory (#73756)
     add 1ab53cd8e38 Keep the Dag asset schedule the same shape for every caller (#73805)
     add fbdec9503c7 Support Table objects in BigQueryHook.create_table table_resource (#73099)
     add 67853607ab2 Add async Variable methods (aget, aset, adelete, akeys) (#72329)
     add 353d856281c Stop Kafka hook tests from leaving live clients behind (#74285)
     add b2786de47b7 Close German Translation Gaps 2026-10-05 (#74264)
     add 2b33f02539a UI: Open provider connection fields by default and title them by connection type (#74273)
     add d4a47caaf09 Notify downstream Dags when COPY INTO writes a Unity (Databricks) table (#74191)
     add 51184d53a52 Clarify Dag processor scoping and team config in Multi-Team docs (#73958)
     add c9abbdbdb87 Bump the auth-ui-package-updates group across 1 directory with 5 updates (#74254)
     add 2793a170be5 Fix connection screenshots missing from the msgraph and IBM MQ docs (#74287)
     add f5774789ea0 Pr/split storage tab (#73989)
     add 3a7e6031c6f corrected label for filter (#74189)
     add 758ebbd35f4 Document decision models served over the System One API in common.ai (#74266)
     add 37df9a5a4ac Wait for the Lang-SDK runtime's descriptors to settle before checking them (#74288)
     add fd7ac131553 Clarify how the providers vote result lists voters (#73883)
     add ed1435c2b57 UI: Surface Dag run conf in the header (#73987)
     add 9c1bb68c41f Increase worker startup timeout in LocalExecutor process death test (#74292)
     add 5ec2045d474 Fix PostgresToGCSOperator fetching one row at a time with psycopg3 (#73324)
     add 00bc44480c7 Apply impersonation_chain to deferred BigQuery existence checks (#71648)
     add 69f98974344 Look up task logs by task try UUID (#74204)
     add 65596fb5ae6 Bump the eslint group across 1 directory with 5 updates (#73488)
     add 9081eda445e Support Pydantic structured outputs in `OpenAIResponseOperator` (#69812)
     add 31b774803ce Correct usage_limits=None docstring on AgentOperator and LLMOperator (#74307)
     add ab4da0b5636 Java SDK: Declare a Dag's task graph with @Builder.Deps (#71189)
     add 0bffacc8740 Update providers metadata 2026-10-05 (#74315)
     add eda8563d983 Keep polling in the BigQuery check triggers while a job is running (#74305)
     add af61379fc14 Include prompt cache token counts in AgentOperator's usage XCom (#74277)
     add 77b21f34c05 Fix Common AI durable retries and tool-approval resumes on pydantic-ai 2.50+ (#74313)
     add dcc9ce6246f Fix Common AI durable retries not replaying tools from a capability without an id (#74314)
     add e25f413ff61 Let the Modal sandbox backend read credentials from a modal connection (#74302)
     add ac147d07ffe Remove `code_mode` from `AgentOperator` in favor of the `CodeMode` capability (#74312)
     add 246e3b231c9 Add `include_traceback` to model-backed retry policies (#74308)
     add d18b831afc2 Show staging-only commits before resetting staging to main (#74116)
     add 84f5e0990a0 TS SDK: Step over an empty nested task group to the group holding it (#74323)
     add 342157f5aed Go SDK: run unit tests with the race detector in CI (#74215)
     add 4329cd68465 Pause v3-4-test automation while it is fast-forwarded for 3.4.0 betas (#74327)
     add 8d37613cba5 Guard the Dag Code tab's Monaco grammar exports against drift (#74246)
     add 6038d1156dd Scope audit log rows to a Dag only from the request path or body (#74232)
     add 14960cf4624 Add AIP-85 to the AIP progress tracker registry (#74304)
     add 6b6b1fa2d92 Discover executable bundles by footer, not by execute bit (#74227)
     add 4cae02cbee1 Update French (fr) UI translations to 100% coverage (#74235)
     add 6e5f3136b9b Fix dateless dag.test and tasks test destroying unrelated Dag runs (#73813)
     add a13edb47aef Go SDK: add dag.Switch with Case for multi-way branching (#74321)
     add 16813192320 Show provider URI schemes in the Provider Registry (#74284)
     add 370606c1065 Fix Dags staying blocked by `max_active_runs` until the next parse (#73032)
     add 0609550c022 Lead the `common.ai` sandbox docs with when to use it and where each piece runs (#74297)
     add 87be0026872 Keep retried task attempts and their data under the attempt UUID (#74222)
     add a6d4ef08dc6 Apply hook_params to deferred dbt Cloud job runs (#74199)
     add 5aa12d3765f Parse native Java Dags and show their source (#74036)
     add 74698a57c68 Parse native TypeScript Dags with the Node coordinator (#74037)
     add 64ac6e12011 Go SDK: serialize a native Dag to Dag JSON (#74319)
     add 8bb642be2d5 Add task state store support to the Go SDK task client (#73420)
     add 620838dd876 add missing logical date column. (#74340)
     add c5ad609d35d Upgrade UI npm dependencies and resolve pnpm audit advisories (#74303)
     add cd947e3680a Remove provider tests that restate `template_fields` and other class constants (#74359)
     add de420be1d68 Fix mapped-task retry policy example in tasks docs (#74343)
     add 0ca87cb8312 Fix short-circuit in a mapped task group not skipping later tasks (#74283)
     add 092444019b5 Remove Google hook tests duplicated across default-project test classes (#74362)
     add 75d9ebf60cb Add task state store API to the Java SDK (#73464)
     add 95b5d83eaaa Document that DuckDB extension installs need a HOME directory (#74301)
     add 520d5dd3997 UI: Apply default visibility to newly added table columns (#74320)
     add 421a6da25bc UI: Add a Dag Run ID column to the Task Instances list (#74316)
     add dc2ee911151 UI: Add duration filter to DAG Backfills tab (#74202)
     add 4699c48b6d8 Show recent task states on the Dags list page (#69619)
     add a25667d2fbd Remember the Dag runs limit across tab switches and visits (#74289)
     add f92281e1d03 Drop Python 3.10 from CI, Breeze and the container images (#74151)
     add e853537c04b Bump inline script metadata to Python 3.11 (#74152)
     add 199b0a85527 Remove Python 3.10 compatibility shims (#74153)
     add 30826e6de20 Apply ruff Python 3.11 fixes to core, Task SDK, shared and airflowctl (#74154)
     add 0b7c7f2e198 Apply ruff Python 3.11 fixes to providers (#74155)
     add dafc96e67c7 Apply ruff Python 3.11 fixes to dev tooling, scripts and test suites (#74156)
     add 3e0ed979c1c Require Python 3.11 in all distributions (#74157)
     add f3a4f59520c Update provider READMEs for the Python 3.11 baseline (#74158)
     add 9cc55f2ad3e Update docs for the Python 3.11 baseline (#74159)
     add b1e4ad03219 UI: Fix XCom list crash when a value request fails (#74131)
     add 3e302fd257a Add UBM to the list of companies (#74375)
     add 62917eab648 TS SDK: Add conditional branching with dag.if (#74069)
     add 874bc6c215b TS SDK: Add multi-way branching with dag.switch (#74070)
     add cdcbf12a3f1 Support PAT and key-pair auth in the Snowflake Cortex Agent hook (#73932)
     add 72d612c357d Add restricted-agent examples to common.ai toolset guides (#74379)
     add 07bed4fde80 Link registry modules to the guide section that documents them (#71477)
     add 202fe706955 TS SDK: Add triggerDagRun to native Dags (#74071)
     add 2288ea4537a Fix XCom query in not_previously_skipped_dep to use xcom_entity (#74377)
     add 508267cda9b Fix Snowflake UTC usage in TestSnowflakeRestTokenProvider (#74393)
     add 2a62e03fc03 Add missing Taiwanese Mandarin UI translations (#74223)
     add a2cf3289367 Go SDK: answer the Dag-parsing request from Serve (#74391)
     add 7f653e67153 Fix UI lint erros failing static checks (#74402)
     add 4cab3cf055c [AIP-94] Mark dags clear as migrated to airflowctl (#74384)
     add 634d6bd7242 Enforce execution_timeout from the task supervisor side (#73806)
     add 9af3db03639 Keep get_dag_details and get_pools database queries off the API server event loop (#74247)
     add 104a8691b93 Add a test that a mapped task group skip decision stays within its Dag run (#74390)
     add ef495f35a30 Add `max_retries` to `AgentSkillsToolset` (#74381)
     add 9f241d42332 Add toolset overview and MCP tool filtering example to `common.ai` docs (#74378)
     add 4ef67b4e0c6 Tell the model a pinned hook argument is fixed for every allowed method (#74380)
     add 73a4ffa3a53 Avoid a full asset table scan per request in simple auth manager (#72934)
     add 96582adf66f Respect run on latest version when clearing a running Dag run (#71425)
     add ccd96d21597 Regenerate the stale TS SDK supervisor types (#74412)
     add 11cbf4da098 Allow a custom Kubernetes client factory for KubernetesExecutor (#73014)
     add 57183056ca7 Fix AsyncToSync error in Databricks deferrable operators on Airflow 3.0 (#74406)
     add 0b4039e250c Upgrade UI major dependencies: msw, vitest, react-table and mermaid (#74369)
     add 8b115c0be65 Verify SSH host keys by default in SSH and SFTP hooks (#73419)
     add 77e0906dc31 Scope plugin views on any entity field, not a fixed criteria set (#74278)
     add 4da2ad1e2b3 Document HTTP statuses that route helpers raise (#74027)
     add 05dec276c72 Let the task endpoint describe a task at a given Dag version (#74365)
     add 19d20a091dc UI: Add 'Mark as Skipped' option to Task Instance actions (#72425)
     add d38e9ceb749 Fix date range filter inputs committing on every keystroke (#74011)
     add 37032a47d49 Bump the fab-ui-package-updates group across 1 directory with 2 updates (#74418)
     add 37dad4c1df2 Fix codespell failure on main in DateRangeFilter test (#74430)
     add fe4481cc8e5 Fix Databricks async connection test on Airflow before 3.1 (#74427)
     add 8043c703de1 Java SDK: Group a native Dag's tasks with task groups (#74230)
     add 1921597eeff Go SDK: embed each native Dag's source file in the bundle (#74342)
     add 01b977568e2 Java SDK: Serialize native Dags to DagSerialization v3 (#71190)
     add 46d3c59dfec Parse native Go Dags and show each Dag's own source (#74341)
     add ddb905f0ee0 Fix airflowctl dags get-tags crashing whenever a Dag has tags (#73743)
     add 9c9346c8065 Reconnect SMTP hooks after leaving a context manager (#74416)
     add 08205150190 i18n(ko): Align particles after Dag with the agreed pronunciation (#73799)
     add 22afa85809d Remove most accordions from forms (#74422)
     add 950fc37bf6c Fix Data Fusion polling after transient 404 responses (#74237)
     add 9068fba9cb7 Fix remote processor injection happening before dictConfig runs in configure_logging (#66633)
     add 599fcb41ac0 Run the XCom column prek hook on Python 3.11 or newer (#74405)
     add a0e9d68b98a Fix common.ai managed agent failover when an identity cannot resolve (#72786)
     add bf3d4022db3 Remove slow-on-MySQL and now needless CHECK CONSTRAINT (#74409)
     add 57ad5d30539 Prepare providers release 2026-10-06 (#74429)
     add 3f552272f9f Sync the TS SDK supervisor schema from its Task SDK source (#74415)
     add ef9feefd83f Fix Grid and Graph 500 errors for cyclic TaskGroup dependencies (#73724)
     add 3fa1eb5a27a Add URL param support to calendar view (#73237) (#73762)
     add d7c60857bc0 Expose the resolved LLM model name on a dedicated XCom key (#74272)
     add c8de3793a25 Make provider signing resumable after interruption (#74465)
     add 88b83d1f0d4 Fix Spark submit standalone status polling to use correct REST endpoint (#71949)
     add 7c014e1b61a Fix plugin applies_to scoping defects found in review (#74425)
     add fb235e6926a Preserve newlines in XCom tab string values (#74112)
     add 42b25f5df74 Add documentation and sample DAG for `ExasolToS3Operator` (#73940)
     add 150be723896 Close Catalan gap (#74361)
     add bc96a14f776 UI: Move UI-only e2e checks to unit tests (#74367)
     add e82b196c065 Dag run breadcrumb switcher (#74471)
     add 23cd2c89304 Fix missing end-of-file newline in XComEntry.test.tsx (#74476)
     add bf2de26c7b7 Fix Quick Start installing Airflow 3.1.1 instead of the documented version (#74474)
     add 42dfb20b812 Assert on structured log events in common.ai tests (#74443)
     add 386c0ba69eb Export `DataFusionToolset`, `AgentSkillsToolset` and `LoggingToolset`… (#74449)
     add 00967b20550 Bump the ui-plugin-template-package-updates group across 1 directory with 7 updates (#74331)
     add 6eae11fb7dc Bump the registry-security-updates group across 1 directory with 2 updates (#74326)
     add 30aad96a041 Bump the uv-dependency-updates group across 1 directory with 6 updates (#74259)
     add 23b3e7b4147 Bump the ts-sdk-package-updates group across 1 directory with 2 updates (#74253)
     add f5c535bbae0 Bump swagger-ui-dist (#74251)
     add d3899db5079 Bump oauthlib (#74325)
     add 7811cbacf5a Reject unsupported output_type and bound HITL XCom pull retries (#74450)
     add 6e5d9ddc185 Update the TypeScript SDK docs for Dags declared in TypeScript (#73875)
     add 2bda1928703 Java SDK: Pack each native Dag's source file into the bundle JAR (#74096)
     add d4013cc2b5b Java SDK: Pick one of two tasks with a condition (#74438)
     add c3043c266c6 Java SDK: Choose one of several tasks with a branch (#74439)
     add c5f504366d5 Java SDK: Trigger another Dag's run from a native Java Dag (#74440)
     add 7f945b45d07 Make `SQLToolset` `check_query` follow `allow_writes` like `query` (#74448)
     add 30a3a6d7434 Go SDK: run TriggerDagRun tasks in the Go runtime (#74417)
     add e060e6c0b46 Document how bundles can discover the dag_id/task_id being requested (#69697)
     add 8533cc40b0a TS SDK: add the task state store to the task client (#73618)
     add 86ebf1c8a2d Add missing Taiwanese Mandarin translations for task states and Dag list settings (#74486)
     add 785d82da5c0 Cover native Go Dags in the go_sdk e2e test (#74411)
     add dc38f84ff46 Consolidate in-process Execution API hosting (#73327)
     add b8ef78f53ad Fix misleading timetable Variable example in best practices (#73945)
     add 1e404fac4ac Stop the scheduler crashing when a queued run's Dag fails to deserialize (#74499)
     add ea955744e4d Make airflow standalone discover new Dag files within seconds (#74479)
     add 0a913f21aa8 Use the configured API port in the default execution API URL (#74478)
     add 802f398731f Start a real login in the AWS auth manager system test (#74431)
     add aef881370ea Sync Dag permissions for CustomAuthManager (#74022)
     add bdfc02b8ffb Fix GKE operator imports with older Kubernetes providers (#74505)
     add ad2ef0634ec Dedent task docstrings used as doc_md (#74436)
     add 919765f3cf7 Rename the max_active_runs recompute test and drop a no-op mock (#74483)
     add 1f5331de1fa Document the experimental Dag importer interface (#74333)
     add 8e14de67e3f Fix `KubernetesExecutor` leaving invalid-config tasks stuck in queued (#74512)
     add 07a0c4da099 Fix TypeError clearing a DAG run when a queued-at deadline interval is stored as JSON (#70370)
     add df7b8a7d4ca Bump the auth-ui-package-updates group across 1 directory with 2 updates (#74507)
     add 466e847d3de Add routable to docs spelling wordlist (#74526)
     add bb721616ad0 Fix AWS auth manager login when the IdP is on another site (#74529)
     add 65a83820fef Let SandboxToolset be deep-copied again (#74525)
     add 7675d8d2f39 Add missing UI translations for Greek(el) (#74460)
     add 6255513a3b6 Add missing Polish UI translations (#74533)
     add 9bf8cc0a6fb Add Snowflake Cortex Agent management operators (#70930)
     add 0bae39f4884 Document that `SQLToolset` does not check functions without `allowed_tables` (#74444)
     add 1a6ea8899c3 UI: Group digits of counters in translated strings (#74296)
     add 051d5d85d2f TS SDK: Add human-in-the-loop tasks to native Dags (#74484)
     add 0c3853692bc Add user-facing docs for the new Task Loops feature. (#74274)
     add 78572f6efc7 Introduce the (internal/db level) concept of "dynamic regions" for TIs (#74275)
     add 2f7d9662623 Resolve live producers by region and read their XCom by attempt (#74344)
     add 9bc8cad3f84 Pin loop definitions and carry region coordinates through task execution (#74345)
     add 93f857f40da Give every mapped expansion a region and store its index as region_index (#74346)
     add 6b20a69691e Attribute log, asset-event and asset-state writes to the task attempt (#74347)
     add 551d54bdaee Run loop gates and advance iterations atomically (#74348)
     add ea4519b9f56 Clear selected loop work and regenerate only what was replaced (#74349)
     add 0226554076f Read current task executions by exact region and try (#74350)
     add feafb6c5ee1 Let the HITL review plugin address one loop pass or mapped slot (#74351)
     add d0f83bb4a3a Show current task executions in the UI (#74352)
     add fe589528ee4 Show loop iterations and outcomes throughout the UI (#74354)
     add ed572aff106 Bound LLM operator usage_limits across task retries (#74396)
     add 12bb6d9b953 Cover native TypeScript and Java Dags, including control flow, in the e2e suites (#73847)
     add 7749ecdb977 Bump eslint-plugin-unicorn (#74508)
     add 4ca1f6693bb Deprecate cyclic TaskGroup dependencies (#73746)
     add 72ac4fb4f1c Stop loading the task runner on every Airflow process startup (#74496)
     add 78d31882a08 Test that deferred capability ids stay out of Common AI durable fingerprints (#74423)
     add 06e7e284e32 Log capability tool calls in AgentOperator (#72202)
     add 3ac1e4f7f2e Make asset event batching opt-in (#68517)
     add 92340cf4171 i18n(ko): Add missing translations (Oct 1) (#74006)
     add c96984baf44 Add sqlglot drift tripwires for common.ai read-only SQL validation (#74487)
     add 1530df852ba Rename `HookToolset` `tool_name_prefix` to `tool_prefix` (#74447)
     add 0f06fca0fcc Exclude the Apache Tinkerpop and Vespa providers from 3.14 (#74559)
     add 823381c1dcc Add the Python 3.15 release manager to the sigstore check (#74572)
     add 337642574a6 YAML Dag file parser (#74084)
     add c1d17df7b48 Warn on suspicious Dag and task IDs at Java SDK build time (#69937)
     add 270b2abfc25 Run TypeScript SDK unit tests on pull requests (#74513)
     add b7f7fa3439b Fix prek setup order in contributor quickstart (#74585)
     add 1806c28c36f Fix agent HITL review for list, marker and function output types (#74537)
     add ff6974f45e7 Record Jarek Potiuk's voting address in the PMC roster (#74582)
     add 3af85e214f4 Avoid a supervisor round trip before poke for rescheduled sensors (#68012)
     add fac3157a735 Add start-beta-process command to cut beta pre-releases (#74464)
     add 194e0ea4c98 Add a generated supported services page for the common.ai provider (#72939)
     add 46e20a1a095 Halve the time to build docs locally by inlining spell checking (#74549)
     add 4912ed22043 Fix Breeze --mount-sources tests not mounting local core tests (#74553)
     add 21c522c515e Fix leaking state in task-sdk test_task_runner.py's tests (#74606)
     add f6761c5cb80 Update waiting tasks to the latest Dag version (#74592)
     add 7f0d50cffc6 Add task log message when the Execution API is unreachable (#70290)
     add 9fc4143efc5 Disable psycopg3 auto-prepare by default behind connection poolers (#74581)
     add 72568207e57 Implement AIP-85 YAML importer based on the parser (#74586)
     add e87c35e344e Fix 400 and 500s on POST /connections/defaults in multi-team mode (#74615)
     add 03f33a2da22 Make breeze verify tests pass on release branches (#74624)
     add f47046fa239 Fix FAB Website permissions rows for the Grid and Graph views (#74599)
     add 2816cb01ab8 Keep the /auth mount path when ProxyFix applies X-Forwarded-Prefix (#74603)
     add c1e3b2fe770 Add missing Taiwanese Mandarin translations (#74545)
     add fd4969bd3c7 Add an e2e test for the Java SDK task state store (#74403)
     add 64ff9e40a40 Add REST API metrics (#64523)
     add a52e9f96ecd Simplify the Quick Start for first-time local installs (#72754)
     add f6f267d84ce Highlight YAML Dag source in the Code tab (#74633)
     add 7a1ba1f8aee Update FAB Website permissions rows for Airflow 3 views (#74630)
     add d267fbd5cae Bootstrap constraints generation for a Python without a baseline file (#74596)
     add 9bcb6fd3ca5 Respect `waiter_delay` & `waiter_max_attempts` in EKS delete operators (#74000)
     add 43129ecb633 Fix clearing with upstream and downstream selecting unrelated tasks (#74548)
     add 304607f94bb Require dns+nft egress mode for `OpenSandbox` network policies (#74504)
     add f511c0d1246 Add a document_classifier_deletable waiter with unit tests (#74125)
     add e043a279628 Go SDK: pack a bundle that registers no Dags at pack time (#74637)
     add a3c8ee41d04 Cover YAML-generated Go Dags in the go_sdk e2e test (#74636)
     add d479721a4a4 Java SDK: Rename annotation namespace from Builder to Airflow (#74604)
     add 62c4384e598 Add a Registry page listing durable and deferrable operators across providers (#74420)
     add 73fed8ab2ee Point the TaskFlow tutorial's retries section to resumable tasks (#74608)
     add 96988232c27 Fix dag list renders (#74426)
     add 230cd8adc33 Let plugin views be scoped to specific Assets (#74609)
     add fdf4adce2a3 UI: Use RadioCardRoot's typed onValueChange instead of DOM casts (#73985)
     add 2f3e60cb949 Support priority_weight in EdgeExecutor (#72057)
     add 47d929c702b Fix `map_index_template` failing for numeric-looking labels with `render_template_as_native_obj` (#71592)
     add f792bd60a98 Do not abort Dag run creation when a deadline alert fails (#68917)
     add 6fc06c60011 UI: Add Select Recent Configurations dropdown to Trigger Dag form (#70413)
     add 518f8d2e7be Lazy-load the Code tab grammar from the Dag's stored language (#74643)
     add 417a33b5432 UI: Fold draining into the Dags Paused state filter (#74668)
     add d8efc66ea76 Add a Model tab to the task-instance page for `common.ai` (#74334)
     add cd9f233f6d4 Add support for forwarding CeleryExecutor task logs to stdout (#69597)
     add dac956c667c Document hosted OpenAI-compatible services for common.ai (#74620)
     add 3a08e9b11e3 Document Managed Agents as a first-party feature (#72306)
     add 21c858eb67b Fix missing task.queued_duration metric in Airflow 3 (#67592)
     add eee6e2a4a50 Resume Strands agents from their last checkpoint when a task retries (#74404)
     add 06c7f338f95 Decode base64 for bytes-typed `HookToolset` parameters (#70433)
     add f46a370a95b Stop the secrets backend lookup from importing the task runner outside tasks (#74641)
     add c5c2f194b57 Add Boat backend for sandbox tools (#71725)
     add c192bdad5fd Show serializer schema in Dag version diff only when it differs (#74683)
     add 51f1b5b16d8 TS SDK: Reject triggerDagRun tasks in dag.if and dag.switch (#74492)
     add 09b4b6307fc Document agent memory across Dag runs for `common.ai` (#74681)
     add 75455fda1ba Explain why common.ai is built on Pydantic AI (#74680)
     add 945b7949328 Fix deprecated provider lookup in Amazon AWS hooks (#74480)
     add 861ca7ffc18 Bump the fab-ui-package-updates group across 1 directory with 3 updates (#74670)
     add 96da58058ef Add Islo backend for sandbox tools (#71672)
     add 68a4c3177f9 Add AirflowDurability capability for durable agent replay across task retries (#74385)
     add 3cf3f4b2a9d Refuse a HITL response for a request the task has since replaced (#74688)
     add 1461ddfdf8a Grant Keycloak SuperAdmin access to teamless resources (#74640)
     add 142f12bd2b9 Update remaining FAB Website permissions rows for Airflow 3 (#74653)
     add 2212818399e Graduate Common AI features to stable ahead of 1.0 (#74679)
     add a73ffaedbf1 Add scoped Execution API access for Dag processors (#74370)
     add 275aa6959f3 Support `abfs://` and `abfss://` URIs in DataFusion Azure Blob Storage (#74228)
     add 0652ebe94e0 Fix deferred dbt Cloud tasks failing with tenacity retry_args (#74489)
     add 3a23d4429e5 Clarify what common.ai message_history does and does not cover (#74625)
     add d6bb744aea1 Validate the connection type in PydanticAIHook.get_hook (#74626)
     add 2f62550383a Add a Why Common AI page comparing the provider with a plain task (#74685)
     add 2bf8c2e6053 Let an agent ask for tool approval in more than one step (#74686)
     add c245439c5aa Add an example of a decision model approving an agent's tool calls (#74697)
     add bbcf4d58dea Move Common AI provider from incubation to production lifecycle (#74705)
     add 2002ba522e6 Graduate durable agent execution to stable in Common AI (#74704)
     add 4c39202d20e DateTimeSensorAsync support start_from_trigger and templated target_time (#73928)
     add a1c3755a23d Graduate ClassifierRetryPolicy to stable in Common AI (#74707)
     add 63f5845dd20 Migrate Task SDK to `httpx2` (#73116)
     new 6e8d39f7db9 Run the CI on RunsOn runners for the fork test
     new d2522eb7599 Give the TypeScript SDK docs job a RunsOn size class
     new 6c0e912113d Give the jobs added on main a RunsOn size class

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   (7ceab7a76a0)
            \
             N -- N -- N   refs/heads/test-runs-on-github-actions-runner (6c0e912113d)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .agents/skills/airflow-java-sdk/SKILL.md           |   15 +-
 .agents/skills/airflow-publish-changes/SKILL.md    |    2 +-
 .agents/skills/airflow-translations/SKILL.md       |    4 +
 .agents/skills/airflow-translations/locales/ar.md  |   10 +-
 .agents/skills/airflow-translations/locales/ca.md  |    2 +-
 .agents/skills/airflow-translations/locales/de.md  |    2 +-
 .agents/skills/airflow-translations/locales/el.md  |    2 +-
 .agents/skills/airflow-translations/locales/es.md  |    2 +-
 .agents/skills/airflow-translations/locales/fr.md  |    2 +-
 .agents/skills/airflow-translations/locales/he.md  |    4 +-
 .agents/skills/airflow-translations/locales/hu.md  |    4 +-
 .agents/skills/airflow-translations/locales/ja.md  |    2 +-
 .agents/skills/airflow-translations/locales/ko.md  |   44 +-
 .agents/skills/airflow-translations/locales/nl.md  |    2 +-
 .agents/skills/airflow-translations/locales/pl.md  |    6 +-
 .agents/skills/airflow-translations/locales/pt.md  |    2 +-
 .agents/skills/airflow-translations/locales/tr.md  |    2 +-
 .../skills/airflow-translations/locales/zh-CN.md   |   12 +-
 .../skills/airflow-translations/locales/zh-TW.md   |    8 +-
 .../prepare-providers-documentation/SKILL.md       |    6 +-
 .apache-magpie-overrides/issue-tracker-config.md   |  166 +
 .apache-magpie-overrides/pmc-roster.md             |  129 +
 .../pr-management-code-review-criteria.md          |   82 +
 .apache-magpie-overrides/pr-management-config.md   |   25 +
 .../pr-management-quick-merge-config.md            |  166 +
 .../pr-management-triage-comment-templates.md      |    4 +-
 .apache-magpie-overrides/reassess-pool-defaults.md |  201 +
 .apache-magpie-overrides/release-trains.md         |  273 +
 .apache-magpie-overrides/release-verify-rc.md      |    2 +-
 .apache-magpie-overrides/release-vote-tally.md     |   63 +
 .apache-magpie-overrides/reproducer-conventions.md |  166 +
 .apache-magpie-overrides/runtime-invocation.md     |  183 +
 .apache-magpie.lock                                |    2 +-
 .asf.yaml                                          |    5 +
 .codespellignorelines                              |    1 +
 .github/ISSUE_TEMPLATE/1-airflow_bug_report.yml    |    8 +-
 .github/ISSUE_TEMPLATE/2-feature_request.yml       |    3 +-
 .github/actions/breeze/action.yml                  |    2 +-
 .github/actions/install-prek/action.yml            |  159 +-
 .github/actions/prepare_all_ci_images/action.yml   |    4 +-
 .github/boring-cyborg.yml                          |   36 +-
 .github/dependabot.yml                             |   55 +-
 .github/workflows/additional-ci-image-checks.yml   |    8 +-
 .github/workflows/agent-framework-tests.yml        |   89 +
 .github/workflows/airflow-e2e-tests.yml            |    2 +-
 .github/workflows/automatic-backport.yml           |   14 +-
 .github/workflows/basic-tests.yml                  |   45 +-
 .github/workflows/ci-amd.yml                       |   60 +
 .github/workflows/ci-arm.yml                       |   60 +
 .github/workflows/ci-image-build.yml               |    8 +
 .github/workflows/ci-image-checks.yml              |   27 +-
 .github/workflows/ci-notification.yml              |    4 +-
 .github/workflows/codeql-analysis.yml              |    6 +-
 .github/workflows/finalize-tests.yml               |    6 +-
 .github/workflows/java-sdk-dependency-security.yml |    6 +-
 .github/workflows/k8s-tests.yml                    |   36 +-
 .github/workflows/milestone-tag-assistant.yml      |    1 +
 .github/workflows/notify-uv-lock-conflicts.yml     |    2 +-
 .github/workflows/publish-docs-to-s3.yml           |    9 +-
 .github/workflows/registry-tests.yml               |    2 +-
 .github/workflows/release-constraints.yml          |   21 +-
 .github/workflows/release_dockerhub_image.yml      |    2 +-
 .../workflows/release_single_dockerhub_image.yml   |    2 +-
 .../scheduled-upgrade-check-v3-3-test.yml          |   35 -
 .../scheduled-upgrade-check-v3-4-test.yml          |   38 +
 .../scheduled-verify-release-calendar.yml          |    2 +-
 .github/workflows/ui-e2e-tests.yml                 |   25 +-
 .pre-commit-config.yaml                            |  192 +-
 .rat-excludes                                      |    1 +
 .readthedocs.yml                                   |    2 +-
 AGENTS.md                                          |    1 +
 Dockerfile                                         |   89 +-
 Dockerfile.ci                                      |  102 +-
 INSTALL                                            |    6 +-
 INTHEWILD.md                                       |    2 +
 README.md                                          |   24 +-
 airflow-core/.pre-commit-config.yaml               |   16 +-
 airflow-core/adr/lang-sdk/0004-dag-parsing.md      |   12 +-
 .../0007-taskflow-across-language-boundary.md      |   47 +
 .../adr/lang-sdk/0008-control-flow-constructs.md   |   12 +-
 .../0009-provider-operators-as-generated-dsl.md    |    4 +-
 .../adr/lang-sdk/0010-native-dag-processing.md     |  224 +
 .../lang-sdk/0011-mixed-language-dag-processing.md |  245 +
 .../adr/lang-sdk/0012-lang-sdk-parse-protocol.md   |  233 +
 .../0013-persisted-task-handler-bindings.md        |  593 ++
 .../0014-bundle-metadata-and-cache-digest.md       |  122 +
 .../0015-per-dag-source-in-bundle-artifact.md      |  132 +
 airflow-core/adr/lang-sdk/README.md                |    6 +
 .../cluster-policies.rst                           |   11 +-
 .../administration-and-deployment/dag-bundles.rst  |   24 +
 .../dag-importers.rst                              |  169 +
 .../dag-serialization.rst                          |    2 +-
 .../dagfile-processing.rst                         |   10 +-
 .../docs/administration-and-deployment/index.rst   |    1 +
 .../modules_management.rst                         |    2 +-
 .../docs/administration-and-deployment/plugins.rst |  376 +-
 .../task-and-asset-state-store.rst                 |    8 +-
 .../administration-and-deployment/web-stack.rst    |   13 +-
 .../authoring-and-scheduling/asset-scheduling.rst  |   95 +-
 .../docs/authoring-and-scheduling/deferring.rst    |    2 +-
 .../dynamic-task-mapping.rst                       |   18 +-
 .../docs/authoring-and-scheduling/index.rst        |    2 +
 .../authoring-and-scheduling/language-sdks/go.rst  |  245 +-
 .../language-sdks/index.rst                        |   87 +-
 .../language-sdks/java.rst                         |  486 +-
 .../language-sdks/typescript.rst                   |  768 ++-
 .../loops-and-mapped-tasks.rst                     |   61 +
 .../docs/authoring-and-scheduling/loops.rst        |  392 ++
 .../docs/authoring-and-scheduling/timetable.rst    |  179 +-
 airflow-core/docs/best-practices.rst               |   66 +-
 airflow-core/docs/core-concepts/backfill.rst       |    7 +-
 airflow-core/docs/core-concepts/dag-run.rst        |   11 +-
 airflow-core/docs/core-concepts/dags.rst           |   95 +-
 airflow-core/docs/core-concepts/debug.rst          |    2 +-
 airflow-core/docs/core-concepts/executor/index.rst |   23 +-
 airflow-core/docs/core-concepts/multi-team.rst     |   85 +-
 airflow-core/docs/core-concepts/overview.rst       |    4 +-
 .../docs/core-concepts/resumable-tasks.rst         |   75 +-
 .../core-concepts/task-and-asset-state-store.rst   |    2 +-
 .../docs/core-concepts/task-state-store.rst        |   10 +-
 airflow-core/docs/core-concepts/tasks.rst          |   55 +-
 airflow-core/docs/extra-packages-ref.rst           |    4 +-
 airflow-core/docs/howto/set-up-database.rst        |   12 +-
 airflow-core/docs/howto/usage-cli.rst              |   10 +-
 ...iagram_auth_manager_airflow_architecture.md5sum |    2 +-
 .../diagram_auth_manager_airflow_architecture.py   |    2 +-
 .../img/diagram_basic_airflow_architecture.md5sum  |    2 +-
 .../img/diagram_basic_airflow_architecture.png     |  Bin 116194 -> 127853 bytes
 .../docs/img/diagram_basic_airflow_architecture.py |   11 +-
 ...agram_dag_processor_airflow_architecture.md5sum |    2 +-
 .../diagram_dag_processor_airflow_architecture.png |  Bin 237657 -> 237572 bytes
 .../diagram_dag_processor_airflow_architecture.py  |   25 +-
 ...diagram_distributed_airflow_architecture.md5sum |    2 +-
 .../diagram_distributed_airflow_architecture.png   |  Bin 192497 -> 215541 bytes
 .../diagram_distributed_airflow_architecture.py    |   22 +-
 .../diagram_multi_team_airflow_architecture.md5sum |    2 +-
 .../diagram_multi_team_airflow_architecture.png    |  Bin 574248 -> 555098 bytes
 .../img/diagram_multi_team_airflow_architecture.py |    2 +-
 .../img/diagram_task_execution_architecture.md5sum |    2 +-
 .../img/diagram_task_execution_architecture.py     |    2 +-
 .../docs/img/diagram_task_lifecycle.md5sum         |    2 +-
 airflow-core/docs/img/diagram_task_lifecycle.py    |    2 +-
 airflow-core/docs/installation/index.rst           |   39 +-
 .../docs/installation/installing-from-pypi.rst     |   24 +-
 airflow-core/docs/installation/prerequisites.rst   |    4 +-
 .../docs/installation/upgrading_to_airflow3.rst    |    2 +-
 airflow-core/docs/migrations-ref.rst               |   25 +-
 airflow-core/docs/public-airflow-interface.rst     |   21 +-
 airflow-core/docs/security/api_permissions_ref.rst |    8 +
 .../docs/security/jwt_token_authentication.rst     |  131 +-
 airflow-core/docs/security/security_model.rst      |   18 +-
 .../vulnerabilities-in-3rd-party-dependencies.rst  |    2 +-
 airflow-core/docs/start.rst                        |  232 +-
 airflow-core/docs/troubleshooting.rst              |   82 +-
 airflow-core/docs/tutorial/hitl.rst                |    6 +-
 airflow-core/docs/tutorial/taskflow.rst            |    5 +
 airflow-core/newsfragments/58543.feature.rst       |    1 +
 airflow-core/newsfragments/66633.bugfix.rst        |    1 +
 airflow-core/newsfragments/67592.bugfix.rst        |    1 +
 airflow-core/newsfragments/68496.significant.rst   |    4 +-
 airflow-core/newsfragments/68517.significant.rst   |   14 +
 airflow-core/newsfragments/68917.bugfix.rst        |    1 +
 airflow-core/newsfragments/69148.feature.rst       |    1 -
 airflow-core/newsfragments/69469.improvement.rst   |    1 -
 airflow-core/newsfragments/69469.significant.rst   |   26 +
 airflow-core/newsfragments/69597.feature.rst       |    1 +
 airflow-core/newsfragments/72100.significant.rst   |   59 +
 airflow-core/newsfragments/72407.significant.rst   |   13 +-
 airflow-core/newsfragments/73116.significant.rst   |   11 +
 airflow-core/newsfragments/73554.significant.rst   |   24 +
 airflow-core/newsfragments/73746.significant.rst   |   22 +
 airflow-core/newsfragments/73806.improvement.rst   |    1 +
 airflow-core/newsfragments/73970.significant.rst   |    5 +
 airflow-core/newsfragments/74151.significant.rst   |   17 +
 airflow-core/newsfragments/74278.feature.rst       |    1 +
 airflow-core/newsfragments/74499.bugfix.rst        |    1 +
 airflow-core/newsfragments/task-loops.feature.rst  |    1 +
 airflow-core/pyproject.toml                        |   13 +-
 .../src/airflow/api/common/airflow_health.py       |    4 +-
 airflow-core/src/airflow/api/common/delete_dag.py  |   11 +-
 airflow-core/src/airflow/api_fastapi/app.py        |   15 +-
 .../api_fastapi/auth/managers/base_auth_manager.py |    3 +-
 .../auth/managers/simple/simple_auth_manager.py    |   30 +
 .../auth/managers/simple/ui/package.json           |   24 +-
 .../auth/managers/simple/ui/pnpm-lock.yaml         |  651 +-
 .../src/airflow/api_fastapi/auth/tokens.py         |   24 +-
 .../src/airflow/api_fastapi/common/db/dag_runs.py  |   33 +-
 .../api_fastapi/common/db/task_instances.py        |   35 +-
 .../src/airflow/api_fastapi/common/http_metrics.py |  137 +
 .../api_fastapi/common/parameters/__init__.py      |    8 +
 .../airflow/api_fastapi/common/parameters/asset.py |   23 +
 .../airflow/api_fastapi/common/parameters/dag.py   |   87 +
 .../api_fastapi/common/parameters/dag_run.py       |   35 +-
 .../airflow/api_fastapi/common/parameters/job.py   |   50 +
 .../airflow/api_fastapi/common/parameters/misc.py  |   46 +-
 .../airflow/api_fastapi/common/parameters/sort.py  |    9 +-
 .../api_fastapi/common/parameters/task_instance.py |    7 +-
 .../src/airflow/api_fastapi/common/region.py       |   54 +
 .../src/airflow/api_fastapi/core_api/app.py        |    7 +-
 .../core_api/datamodels/asset_state_store.py       |    8 +-
 .../api_fastapi/core_api/datamodels/assets.py      |    2 +
 .../api_fastapi/core_api/datamodels/backfills.py   |    8 +
 .../api_fastapi/core_api/datamodels/dag_run.py     |    7 +
 .../api_fastapi/core_api/datamodels/dag_sources.py |    1 +
 .../core_api/datamodels/dag_versions.py            |  158 +
 .../api_fastapi/core_api/datamodels/dag_warning.py |    4 +-
 .../api_fastapi/core_api/datamodels/dags.py        |   20 +-
 .../api_fastapi/core_api/datamodels/event_logs.py  |    2 +
 .../api_fastapi/core_api/datamodels/hitl.py        |   11 +-
 .../core_api/datamodels/import_error.py            |    1 +
 .../api_fastapi/core_api/datamodels/plugins.py     |   31 +-
 .../api_fastapi/core_api/datamodels/pools.py       |    6 +-
 .../core_api/datamodels/task_instance_history.py   |   29 +-
 .../core_api/datamodels/task_instances.py          |   65 +-
 .../api_fastapi/core_api/datamodels/ui/assets.py   |    6 +
 .../api_fastapi/core_api/datamodels/ui/calendar.py |    1 +
 .../api_fastapi/core_api/datamodels/ui/common.py   |    4 +
 .../api_fastapi/core_api/datamodels/ui/dags.py     |   34 +
 .../core_api/datamodels/ui/execution.py            |   66 +
 .../api_fastapi/core_api/datamodels/ui/gantt.py    |   10 +-
 .../api_fastapi/core_api/datamodels/ui/grid.py     |   58 +
 .../core_api/datamodels/ui/structure.py            |    4 +
 .../api_fastapi/core_api/datamodels/xcom.py        |   10 +-
 .../api_fastapi/core_api/openapi/_private_ui.yaml  | 1005 ++-
 .../core_api/openapi/v2-rest-api-generated.yaml    | 1848 +++++-
 .../core_api/routes/public/asset_state_store.py    |   16 +
 .../api_fastapi/core_api/routes/public/assets.py   |   19 +-
 .../api_fastapi/core_api/routes/public/auth.py     |    9 +-
 .../core_api/routes/public/backfills.py            |   17 +-
 .../core_api/routes/public/connections.py          |    6 +-
 .../api_fastapi/core_api/routes/public/dag_run.py  |   24 +-
 .../core_api/routes/public/dag_sources.py          |    3 +-
 .../core_api/routes/public/dag_stats.py            |    3 +-
 .../core_api/routes/public/dag_versions.py         |   98 +-
 .../core_api/routes/public/dag_warning.py          |    6 +-
 .../api_fastapi/core_api/routes/public/dags.py     |   34 +-
 .../core_api/routes/public/event_logs.py           |   64 +-
 .../core_api/routes/public/extra_links.py          |   79 +-
 .../api_fastapi/core_api/routes/public/hitl.py     |  183 +-
 .../core_api/routes/public/import_error.py         |    2 +
 .../api_fastapi/core_api/routes/public/job.py      |   10 +-
 .../api_fastapi/core_api/routes/public/log.py      |   44 +-
 .../api_fastapi/core_api/routes/public/pools.py    |    2 +-
 .../core_api/routes/public/task_instances.py       |  658 +-
 .../core_api/routes/public/task_state_store.py     |  116 +-
 .../api_fastapi/core_api/routes/public/tasks.py    |   29 +-
 .../core_api/routes/public/variables.py            |    2 +-
 .../api_fastapi/core_api/routes/public/xcom.py     |  269 +-
 .../api_fastapi/core_api/routes/ui/__init__.py     |    2 +
 .../api_fastapi/core_api/routes/ui/assets.py       |   24 +-
 .../api_fastapi/core_api/routes/ui/backfills.py    |    3 +
 .../api_fastapi/core_api/routes/ui/calendar.py     |    4 +-
 .../airflow/api_fastapi/core_api/routes/ui/dags.py |  175 +-
 .../api_fastapi/core_api/routes/ui/execution.py    |  112 +
 .../api_fastapi/core_api/routes/ui/gantt.py        |   47 +-
 .../airflow/api_fastapi/core_api/routes/ui/grid.py |  123 +-
 .../core_api/routes/ui/partitioned_dag_runs.py     |   12 +-
 .../api_fastapi/core_api/routes/ui/teams.py        |    2 +
 .../src/airflow/api_fastapi/core_api/security.py   |   66 +-
 .../core_api/services/public/dag_run.py            |  142 +-
 .../api_fastapi/core_api/services/public/dags.py   |   96 +
 .../core_api/services/public/event_logs.py         |   10 +-
 .../core_api/services/public/task_coordinates.py   |  249 +
 .../core_api/services/public/task_instances.py     |  457 +-
 .../api_fastapi/core_api/services/ui/calendar.py   |   10 +-
 .../api_fastapi/core_api/services/ui/execution.py  |   74 +
 .../api_fastapi/core_api/services/ui/grid.py       |  278 +-
 .../api_fastapi/core_api/services/ui/task_group.py |   15 +
 .../airflow/api_fastapi/execution_api/AGENTS.md    |    2 +-
 .../src/airflow/api_fastapi/execution_api/app.py   |  160 +-
 .../execution_api/dag_processor_tokens.py          |  116 +
 .../api_fastapi/execution_api/datamodels/job.py    |   94 +
 .../execution_api/datamodels/taskinstance.py       |   55 +-
 .../api_fastapi/execution_api/datamodels/token.py  |   90 +-
 .../api_fastapi/execution_api/in_process.py        |  149 +
 .../api_fastapi/execution_api/routes/__init__.py   |    2 +
 .../execution_api/routes/asset_events.py           |    8 +-
 .../execution_api/routes/asset_state_store.py      |   40 +-
 .../api_fastapi/execution_api/routes/assets.py     |   14 +-
 .../execution_api/routes/connections.py            |   14 +-
 .../api_fastapi/execution_api/routes/dag_runs.py   |   33 +-
 .../api_fastapi/execution_api/routes/hitl.py       |   78 +-
 .../api_fastapi/execution_api/routes/jobs.py       |  317 +
 .../execution_api/routes/task_instances.py         |  766 ++-
 .../execution_api/routes/task_reschedules.py       |   15 +-
 .../execution_api/routes/task_state_store.py       |   10 +-
 .../api_fastapi/execution_api/routes/variables.py  |   36 +-
 .../api_fastapi/execution_api/routes/xcoms.py      |  469 +-
 .../airflow/api_fastapi/execution_api/security.py  |  296 +-
 .../api_fastapi/execution_api/versions/__init__.py |   18 +
 .../execution_api/versions/v2026_10_30.py          |   70 +-
 .../versions/v2026_10_30_xcom_params.py            |   35 +
 .../execution_api/versions/v2027_02_28.py          |   33 +
 .../src/airflow/api_fastapi/logging/decorators.py  |   61 +-
 airflow-core/src/airflow/assets/manager.py         |   33 +-
 airflow-core/src/airflow/cli/cli_config.py         |   34 +
 .../src/airflow/cli/commands/dag_command.py        |   19 +-
 .../airflow/cli/commands/dag_processor_command.py  |   26 +-
 .../cli/commands/dag_processor_token_command.py    |  109 +
 .../src/airflow/cli/commands/standalone_command.py |   31 +
 .../airflow/cli/commands/state_store_command.py    |    6 +-
 .../src/airflow/cli/commands/task_command.py       |  108 +-
 .../src/airflow/config_templates/config.yml        |  130 +-
 airflow-core/src/airflow/configuration.py          |    4 +-
 .../src/airflow/dag_processing/api_client.py       |  413 ++
 .../src/airflow/dag_processing/bundles/manager.py  |   47 +-
 .../src/airflow/dag_processing/collection.py       |  150 +-
 airflow-core/src/airflow/dag_processing/dagbag.py  |  412 +-
 .../src/airflow/dag_processing/importer_routing.py |   52 +
 .../airflow/dag_processing/importers/__init__.py   |   39 -
 .../src/airflow/dag_processing/importers/base.py   |  266 -
 .../dag_processing/importers/python_importer.py    |  360 --
 .../airflow/dag_processing/lang_sdk_processor.py   |  593 ++
 airflow-core/src/airflow/dag_processing/manager.py |  214 +-
 .../src/airflow/dag_processing/processor.py        |  242 +-
 .../example_dags/example_asset_state_store.py      |    4 +-
 .../example_dags/example_inlet_event_extra.py      |    4 +-
 .../example_dags/example_outlet_event_extra.py     |    6 +-
 .../src/airflow/example_dags/example_task_loops.py |  114 +
 .../example_dags/example_task_state_store.py       |    4 +-
 .../example_task_state_store_mapped.py             |    4 +-
 .../src/airflow/executors/base_executor.py         |  147 +-
 .../src/airflow/executors/local_executor.py        |   80 +-
 .../src/airflow/executors/workloads/task.py        |   26 +-
 .../src/airflow/executors/workloads/types.py       |   17 +-
 airflow-core/src/airflow/jobs/job.py               |    7 +-
 .../src/airflow/jobs/scheduler_job_runner.py       |  705 +-
 .../src/airflow/jobs/triggerer_job_runner.py       |   48 +-
 airflow-core/src/airflow/migrations/utils.py       |   72 +
 .../versions/0000_2_6_2_squashed_migrations.py     |    6 +-
 ...0_replace_deadline_inline_callback_with_fkey.py |    6 +-
 .../0128_3_4_0_add_asset_event_id_to_adrq.py       |    6 +-
 ..._3_4_0_fold_task_map_into_xcom_mapped_length.py |    2 -
 ..._3_4_0_allocate_pending_task_attempt_numbers.py |  200 +
 ...9_3_4_0_add_source_reference_to_import_error.py |   50 +
 .../0140_3_4_0_add_language_to_dag_code.py         |   52 +
 ..._3_4_0_add_timetable_asset_gated_to_dagmodel.py |   55 +
 .../0142_3_4_0_unify_task_attempt_ownership.py     |  464 ++
 .../0143_3_4_0_add_dynamic_region_storage.py       |  211 +
 .../versions/0144_3_4_0_rename_stored_map_index.py |   76 +
 .../0145_3_4_0_add_task_identity_to_events.py      |   49 +
 .../0146_3_4_0_add_asset_state_writer_identity.py  |   55 +
 .../versions/0147_3_5_0_add_session_id_to_job.py   |   59 +
 airflow-core/src/airflow/models/__init__.py        |    4 +-
 airflow-core/src/airflow/models/asset.py           |   20 +-
 .../src/airflow/models/asset_state_store.py        |    9 +-
 airflow-core/src/airflow/models/backfill.py        |   46 +-
 airflow-core/src/airflow/models/dag.py             |   48 +-
 airflow-core/src/airflow/models/dag_version.py     |    5 +
 airflow-core/src/airflow/models/dagcode.py         |   48 +-
 airflow-core/src/airflow/models/dagrun.py          |  752 ++-
 airflow-core/src/airflow/models/dagwarning.py      |   32 +-
 airflow-core/src/airflow/models/dynamic_region.py  |  885 +++
 airflow-core/src/airflow/models/errors.py          |   12 +-
 airflow-core/src/airflow/models/expandinput.py     |   31 +-
 airflow-core/src/airflow/models/hitl_history.py    |   91 -
 airflow-core/src/airflow/models/log.py             |   77 +-
 airflow-core/src/airflow/models/pool.py            |    3 +-
 .../src/airflow/models/renderedtifields.py         |  306 +-
 airflow-core/src/airflow/models/revoked_token.py   |    4 +-
 airflow-core/src/airflow/models/serialized_dag.py  |   23 +-
 .../src/airflow/models/task_coordinates.py         |  838 +++
 .../src/airflow/models/task_state_store.py         |   20 +-
 airflow-core/src/airflow/models/taskinstance.py    | 1286 +++-
 .../src/airflow/models/taskinstancehistory.py      |  225 -
 airflow-core/src/airflow/models/trigger.py         |   24 +-
 airflow-core/src/airflow/models/xcom.py            |  544 +-
 .../airflow/observability/metrics/stats_utils.py   |   10 +
 airflow-core/src/airflow/plugins_manager.py        |  341 +-
 airflow-core/src/airflow/provider.yaml.schema.json |    5 +-
 airflow-core/src/airflow/providers_manager.py      |   36 +-
 .../src/airflow/serialization/dag_version_diff.py  |    5 +-
 airflow-core/src/airflow/serialization/decoders.py |   44 +-
 .../airflow/serialization/definitions/assets.py    |   16 +-
 .../serialization/definitions/baseoperator.py      |    6 +-
 .../src/airflow/serialization/definitions/dag.py   |  296 +-
 .../airflow/serialization/definitions/deadline.py  |    9 +-
 .../serialization/definitions/mappedoperator.py    |   55 +-
 .../serialization/definitions/operatorlink.py      |   31 +-
 .../airflow/serialization/definitions/taskgroup.py |   52 +-
 .../airflow/serialization/definitions/xcom_arg.py  |  123 +-
 airflow-core/src/airflow/serialization/encoders.py |   16 +-
 airflow-core/src/airflow/serialization/enums.py    |    9 +-
 airflow-core/src/airflow/serialization/schema.json |   27 +-
 .../airflow/serialization/serialized_objects.py    |  118 +-
 .../src/airflow/serialization/stub_arg_bindings.py |    3 -
 airflow-core/src/airflow/settings.py               |   79 +-
 airflow-core/src/airflow/state/metastore.py        |   94 +-
 airflow-core/src/airflow/ti_deps/dep_context.py    |   81 +-
 .../airflow/ti_deps/deps/mapped_task_expanded.py   |    2 +-
 .../ti_deps/deps/mapped_task_upstream_dep.py       |   37 +-
 .../ti_deps/deps/not_previously_skipped_dep.py     |  169 +-
 .../src/airflow/ti_deps/deps/prev_dagrun_dep.py    |    4 +
 .../airflow/ti_deps/deps/ready_to_reschedule.py    |    9 +-
 .../src/airflow/ti_deps/deps/trigger_rule_dep.py   |   98 +-
 airflow-core/src/airflow/timetables/_cron.py       |    2 +-
 airflow-core/src/airflow/timetables/assets.py      |  145 +-
 airflow-core/src/airflow/timetables/base.py        |   36 +-
 airflow-core/src/airflow/timetables/simple.py      |   92 +-
 airflow-core/src/airflow/typing_compat.py          |   10 +-
 .../src/airflow/ui/openapi-gen/queries/common.ts   |  244 +-
 .../ui/openapi-gen/queries/ensureQueryData.ts      |  399 +-
 .../src/airflow/ui/openapi-gen/queries/prefetch.ts |  399 +-
 .../src/airflow/ui/openapi-gen/queries/queries.ts  |  518 +-
 .../src/airflow/ui/openapi-gen/queries/suspense.ts |  399 +-
 .../airflow/ui/openapi-gen/requests/schemas.gen.ts | 1938 +++++-
 .../ui/openapi-gen/requests/services.gen.ts        |  562 +-
 .../airflow/ui/openapi-gen/requests/types.gen.ts   |  940 ++-
 airflow-core/src/airflow/ui/package.json           |   85 +-
 airflow-core/src/airflow/ui/pnpm-lock.yaml         | 3610 +++++------
 .../airflow/ui/public/i18n/locales/ar/admin.json   |   13 +-
 .../airflow/ui/public/i18n/locales/ar/common.json  |   14 +-
 .../ui/public/i18n/locales/ar/components.json      |   61 +-
 .../src/airflow/ui/public/i18n/locales/ar/dag.json |   31 +-
 .../airflow/ui/public/i18n/locales/ar/dags.json    |    6 +-
 .../ui/public/i18n/locales/ar/dashboard.json       |   18 +-
 .../airflow/ui/public/i18n/locales/ar/hitl.json    |   12 +-
 .../airflow/ui/public/i18n/locales/ca/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/ca/assets.json  |    3 +-
 .../airflow/ui/public/i18n/locales/ca/browse.json  |   30 +
 .../airflow/ui/public/i18n/locales/ca/common.json  |   54 +-
 .../ui/public/i18n/locales/ca/components.json      |   56 +-
 .../src/airflow/ui/public/i18n/locales/ca/dag.json |   89 +-
 .../airflow/ui/public/i18n/locales/ca/dags.json    |   33 +-
 .../ui/public/i18n/locales/ca/dashboard.json       |   27 +-
 .../airflow/ui/public/i18n/locales/ca/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/de/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/de/assets.json  |    1 +
 .../airflow/ui/public/i18n/locales/de/browse.json  |   30 +
 .../airflow/ui/public/i18n/locales/de/common.json  |   58 +-
 .../ui/public/i18n/locales/de/components.json      |   54 +-
 .../src/airflow/ui/public/i18n/locales/de/dag.json |   89 +-
 .../airflow/ui/public/i18n/locales/de/dags.json    |   33 +-
 .../ui/public/i18n/locales/de/dashboard.json       |   25 +-
 .../airflow/ui/public/i18n/locales/de/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/el/admin.json   |   20 +-
 .../airflow/ui/public/i18n/locales/el/assets.json  |   16 +-
 .../airflow/ui/public/i18n/locales/el/browse.json  |   32 +
 .../airflow/ui/public/i18n/locales/el/common.json  |  143 +-
 .../ui/public/i18n/locales/el/components.json      |   71 +-
 .../src/airflow/ui/public/i18n/locales/el/dag.json |  102 +-
 .../airflow/ui/public/i18n/locales/el/dags.json    |   51 +-
 .../ui/public/i18n/locales/el/dashboard.json       |   27 +-
 .../airflow/ui/public/i18n/locales/el/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/en/admin.json   |    6 +-
 .../airflow/ui/public/i18n/locales/en/assets.json  |    1 +
 .../airflow/ui/public/i18n/locales/en/browse.json  |    2 +-
 .../airflow/ui/public/i18n/locales/en/common.json  |   52 +-
 .../ui/public/i18n/locales/en/components.json      |   47 +-
 .../src/airflow/ui/public/i18n/locales/en/dag.json |  137 +-
 .../airflow/ui/public/i18n/locales/en/dags.json    |   47 +-
 .../ui/public/i18n/locales/en/dashboard.json       |   14 +-
 .../airflow/ui/public/i18n/locales/en/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/es/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/es/common.json  |   16 +-
 .../ui/public/i18n/locales/es/components.json      |   33 +-
 .../src/airflow/ui/public/i18n/locales/es/dag.json |   21 +-
 .../airflow/ui/public/i18n/locales/es/dags.json    |    8 +-
 .../ui/public/i18n/locales/es/dashboard.json       |   10 +-
 .../airflow/ui/public/i18n/locales/es/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/fr/admin.json   |   27 +-
 .../airflow/ui/public/i18n/locales/fr/assets.json  |   14 +-
 .../airflow/ui/public/i18n/locales/fr/browse.json  |   35 +
 .../airflow/ui/public/i18n/locales/fr/common.json  |  137 +-
 .../ui/public/i18n/locales/fr/components.json      |   75 +-
 .../src/airflow/ui/public/i18n/locales/fr/dag.json |  102 +-
 .../airflow/ui/public/i18n/locales/fr/dags.json    |   37 +-
 .../ui/public/i18n/locales/fr/dashboard.json       |   32 +-
 .../airflow/ui/public/i18n/locales/fr/hitl.json    |   10 +-
 .../airflow/ui/public/i18n/locales/he/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/he/common.json  |   14 +-
 .../ui/public/i18n/locales/he/components.json      |   27 +-
 .../src/airflow/ui/public/i18n/locales/he/dag.json |   23 +-
 .../airflow/ui/public/i18n/locales/he/dags.json    |    6 +-
 .../ui/public/i18n/locales/he/dashboard.json       |   10 +-
 .../airflow/ui/public/i18n/locales/he/hitl.json    |   10 +-
 .../airflow/ui/public/i18n/locales/hi/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/hi/common.json  |   12 +-
 .../ui/public/i18n/locales/hi/components.json      |   31 +-
 .../src/airflow/ui/public/i18n/locales/hi/dag.json |   21 +-
 .../airflow/ui/public/i18n/locales/hi/dags.json    |    6 +-
 .../ui/public/i18n/locales/hi/dashboard.json       |   10 +-
 .../airflow/ui/public/i18n/locales/hi/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/hu/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/hu/common.json  |   12 +-
 .../ui/public/i18n/locales/hu/components.json      |   33 +-
 .../src/airflow/ui/public/i18n/locales/hu/dag.json |   21 +-
 .../airflow/ui/public/i18n/locales/hu/dags.json    |    4 +-
 .../ui/public/i18n/locales/hu/dashboard.json       |    6 +-
 .../airflow/ui/public/i18n/locales/hu/hitl.json    |    4 +-
 .../airflow/ui/public/i18n/locales/it/admin.json   |    9 +-
 .../airflow/ui/public/i18n/locales/it/common.json  |    4 +-
 .../ui/public/i18n/locales/it/components.json      |   49 +-
 .../src/airflow/ui/public/i18n/locales/it/dag.json |    6 +-
 .../airflow/ui/public/i18n/locales/it/dags.json    |    4 +-
 .../ui/public/i18n/locales/it/dashboard.json       |    6 +-
 .../airflow/ui/public/i18n/locales/it/hitl.json    |    6 +-
 .../airflow/ui/public/i18n/locales/ja/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/ja/common.json  |    4 +-
 .../ui/public/i18n/locales/ja/components.json      |   29 +-
 .../src/airflow/ui/public/i18n/locales/ja/dag.json |    4 +-
 .../airflow/ui/public/i18n/locales/ja/dags.json    |    4 +-
 .../ui/public/i18n/locales/ja/dashboard.json       |    4 +-
 .../airflow/ui/public/i18n/locales/ja/hitl.json    |    4 +-
 .../airflow/ui/public/i18n/locales/ko/admin.json   |    6 +-
 .../airflow/ui/public/i18n/locales/ko/assets.json  |    5 +-
 .../airflow/ui/public/i18n/locales/ko/browse.json  |   18 +-
 .../airflow/ui/public/i18n/locales/ko/common.json  |   70 +-
 .../ui/public/i18n/locales/ko/components.json      |   50 +-
 .../src/airflow/ui/public/i18n/locales/ko/dag.json |  138 +-
 .../airflow/ui/public/i18n/locales/ko/dags.json    |   55 +-
 .../ui/public/i18n/locales/ko/dashboard.json       |   27 +-
 .../airflow/ui/public/i18n/locales/ko/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/nl/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/nl/common.json  |   12 +-
 .../ui/public/i18n/locales/nl/components.json      |   31 +-
 .../src/airflow/ui/public/i18n/locales/nl/dag.json |   21 +-
 .../airflow/ui/public/i18n/locales/nl/dags.json    |    4 +-
 .../ui/public/i18n/locales/nl/dashboard.json       |    6 +-
 .../airflow/ui/public/i18n/locales/nl/hitl.json    |    8 +-
 .../airflow/ui/public/i18n/locales/pl/admin.json   |   44 +-
 .../airflow/ui/public/i18n/locales/pl/assets.json  |   22 +-
 .../airflow/ui/public/i18n/locales/pl/browse.json  |   38 +
 .../airflow/ui/public/i18n/locales/pl/common.json  |  163 +-
 .../ui/public/i18n/locales/pl/components.json      |  107 +-
 .../src/airflow/ui/public/i18n/locales/pl/dag.json |  122 +-
 .../airflow/ui/public/i18n/locales/pl/dags.json    |   49 +-
 .../ui/public/i18n/locales/pl/dashboard.json       |   39 +-
 .../airflow/ui/public/i18n/locales/pl/hitl.json    |   14 +-
 .../airflow/ui/public/i18n/locales/pt/admin.json   |    9 +-
 .../airflow/ui/public/i18n/locales/pt/common.json  |   10 +-
 .../ui/public/i18n/locales/pt/components.json      |   49 +-
 .../src/airflow/ui/public/i18n/locales/pt/dag.json |    6 +-
 .../airflow/ui/public/i18n/locales/pt/dags.json    |    4 +-
 .../ui/public/i18n/locales/pt/dashboard.json       |    6 +-
 .../airflow/ui/public/i18n/locales/pt/hitl.json    |    6 +-
 .../airflow/ui/public/i18n/locales/ru/admin.json   |   13 +-
 .../airflow/ui/public/i18n/locales/ru/common.json  |   16 +-
 .../ui/public/i18n/locales/ru/components.json      |   63 +-
 .../src/airflow/ui/public/i18n/locales/ru/dag.json |   37 +-
 .../airflow/ui/public/i18n/locales/ru/dags.json    |    6 +-
 .../ui/public/i18n/locales/ru/dashboard.json       |   18 +-
 .../airflow/ui/public/i18n/locales/ru/hitl.json    |   12 +-
 .../airflow/ui/public/i18n/locales/th/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/th/common.json  |    4 +-
 .../ui/public/i18n/locales/th/components.json      |   21 +-
 .../src/airflow/ui/public/i18n/locales/th/dag.json |    4 +-
 .../airflow/ui/public/i18n/locales/th/dags.json    |    4 +-
 .../ui/public/i18n/locales/th/dashboard.json       |    4 +-
 .../airflow/ui/public/i18n/locales/th/hitl.json    |    4 +-
 .../airflow/ui/public/i18n/locales/tr/admin.json   |    5 +-
 .../airflow/ui/public/i18n/locales/tr/common.json  |   12 +-
 .../ui/public/i18n/locales/tr/components.json      |   31 +-
 .../src/airflow/ui/public/i18n/locales/tr/dag.json |   20 +-
 .../airflow/ui/public/i18n/locales/tr/dags.json    |    4 +-
 .../ui/public/i18n/locales/tr/dashboard.json       |    6 +-
 .../airflow/ui/public/i18n/locales/tr/hitl.json    |    4 +-
 .../ui/public/i18n/locales/zh-CN/admin.json        |    5 +-
 .../ui/public/i18n/locales/zh-CN/common.json       |   12 +-
 .../ui/public/i18n/locales/zh-CN/components.json   |   31 +-
 .../airflow/ui/public/i18n/locales/zh-CN/dag.json  |   15 +-
 .../airflow/ui/public/i18n/locales/zh-CN/dags.json |   22 +-
 .../ui/public/i18n/locales/zh-CN/dashboard.json    |    6 +-
 .../airflow/ui/public/i18n/locales/zh-CN/hitl.json |    8 +-
 .../ui/public/i18n/locales/zh-TW/admin.json        |    6 +-
 .../ui/public/i18n/locales/zh-TW/assets.json       |    1 +
 .../ui/public/i18n/locales/zh-TW/browse.json       |   30 +
 .../ui/public/i18n/locales/zh-TW/common.json       |   65 +-
 .../ui/public/i18n/locales/zh-TW/components.json   |   46 +-
 .../airflow/ui/public/i18n/locales/zh-TW/dag.json  |  136 +-
 .../airflow/ui/public/i18n/locales/zh-TW/dags.json |   47 +-
 .../ui/public/i18n/locales/zh-TW/dashboard.json    |   27 +-
 .../airflow/ui/public/i18n/locales/zh-TW/hitl.json |    8 +-
 airflow-core/src/airflow/ui/rules/i18n.js          |    8 +-
 airflow-core/src/airflow/ui/rules/rem.js           |   11 +-
 .../components/ActionAccordion/ActionAccordion.tsx |  150 +-
 .../ui/src/components/ActionAccordion/columns.tsx  |   25 +-
 .../src/airflow/ui/src/components/AnsiRenderer.tsx |    6 +-
 .../src/components/AssetExpression/AssetNode.tsx   |    7 +-
 .../ui/src/components/AssetProgressCell.test.tsx   |   70 +
 .../ui/src/components/AssetProgressCell.tsx        |   21 +-
 .../ui/src/components/Assets/AssetEvent.test.tsx   |    2 +-
 .../ui/src/components/Assets/AssetEvents.tsx       |    6 +-
 .../ui/src/components/Assets/ListPopover.tsx       |   46 +-
 .../src/components/Assets/TriggeredRuns.test.tsx   |    2 +-
 .../ui/src/components/Assets/TriggeredRuns.tsx     |    6 +-
 .../src/components/Banner/BackfillBanner.test.tsx  |    2 +-
 .../src/components/Banner/DrainingBanner.test.tsx  |    2 +-
 .../ui/src/components/Breadcrumb/CrumbSwitcher.tsx |   85 +
 .../airflow/ui/src/components/Breadcrumb/index.ts  |    1 +
 .../TaskInstance/ClearGroupTaskInstanceDialog.tsx  |   39 +-
 .../ClearTaskInstanceConfirmationDialog.tsx        |   33 +-
 .../TaskInstance/ClearTaskInstanceDialog.test.tsx  |  480 ++
 .../Clear/TaskInstance/ClearTaskInstanceDialog.tsx |  405 +-
 .../src/airflow/ui/src/components/ConfigForm.tsx   |   71 +-
 .../ui/src/components/DAGWarningsModal.test.tsx    |   33 +
 .../airflow/ui/src/components/DAGWarningsModal.tsx |    4 +
 .../DagActions/PartitionPreviewTable.tsx           |    3 +-
 .../DagActions/RunBackfillForm.dateRange.test.tsx  |  118 +
 .../components/DagActions/RunBackfillForm.test.tsx |   99 +-
 .../src/components/DagActions/RunBackfillForm.tsx  |   35 +-
 .../components/DagActions/inlineMessage.test.tsx   |    2 +-
 .../src/components/DagDeactivatedBanner.test.tsx   |    2 +-
 .../ui/src/components/DagImportErrorModal.test.tsx |   50 +
 .../ui/src/components/DagImportErrorModal.tsx      |   25 +-
 .../ui/src/components/DataTable/CardList.tsx       |   14 +-
 .../DataTable/DataTable.columnVisibility.test.tsx  |   57 +
 .../DataTable/DataTable.stateChange.test.tsx       |  101 +
 .../ui/src/components/DataTable/DataTable.test.tsx |   63 +-
 .../ui/src/components/DataTable/DataTable.tsx      |   88 +-
 .../src/components/DataTable/FilterMenuButton.tsx  |   12 +-
 .../ui/src/components/DataTable/TableList.test.tsx |   11 +-
 .../ui/src/components/DataTable/TableList.tsx      |   18 +-
 .../ui/src/components/DataTable/features.ts        |   34 +
 .../src/components/DataTable/searchParams.test.ts  |   21 +-
 .../ui/src/components/DataTable/searchParams.ts    |   16 +-
 .../ui/src/components/DataTable/skeleton.tsx       |    3 +-
 .../airflow/ui/src/components/DataTable/types.ts   |   18 +-
 .../airflow/ui/src/components/DateTimeInput.tsx    |    7 +-
 .../airflow/ui/src/components/DrainingBadge.tsx    |    4 +-
 .../ui/src/components/DurationChart.test.tsx       |   36 +-
 .../airflow/ui/src/components/DurationChart.tsx    |   12 +-
 .../airflow/ui/src/components/ErrorModal.test.tsx  |   55 +
 .../src/airflow/ui/src/components/ErrorModal.tsx   |   55 +
 .../ui/src/components/FilterBar/FilterBar.test.tsx |   23 +-
 .../ui/src/components/FilterBar/FilterBar.tsx      |   33 +-
 .../src/components/FilterBar/filters/DateInput.tsx |   10 +-
 .../FilterBar/filters/DateRangeCalendar.tsx        |   10 +-
 .../FilterBar/filters/DateRangeFilter.test.tsx     |  164 +-
 .../FilterBar/filters/DateRangeFilter.tsx          |    4 +
 .../FilterBar/filters/DateRangeInputs.tsx          |   13 +-
 .../FilterBar/filters/RunStateFilter.tsx           |  234 +
 .../FilterBar/filters/pausedStateParams.ts         |   82 +
 .../FilterBar/filters/runStateParams.test.ts       |   95 +
 .../components/FilterBar/filters/runStateParams.ts |   76 +
 .../airflow/ui/src/components/FilterBar/types.ts   |   14 +-
 .../airflow/ui/src/components/FilterBar/utils.ts   |    6 +-
 .../components/FlexibleForm/FieldMultiSelect.tsx   |    9 +-
 .../components/FlexibleForm/FieldObject.test.tsx   |    2 +-
 .../src/components/FlexibleForm/FieldSelector.tsx  |   14 +-
 .../src/components/FlexibleForm/FlexibleForm.tsx   |  163 +-
 .../airflow/ui/src/components/Graph/DagNode.tsx    |    2 +-
 .../ui/src/components/Graph/SegmentedStateBar.tsx  |    8 +-
 .../ui/src/components/Graph/TaskLink.test.tsx      |    8 +-
 .../airflow/ui/src/components/Graph/TaskLink.tsx   |   17 +-
 .../airflow/ui/src/components/Graph/TaskNode.tsx   |    4 +
 .../ui/src/components/Graph/elkGraphUtils.ts       |    6 +
 .../ui/src/components/Graph/reactflowUtils.ts      |    2 +
 .../src/components/HITLReview/HITLReviewDetail.tsx |    8 +-
 .../ui/src/components/ImportErrorCount.test.tsx    |   45 +
 .../airflow/ui/src/components/ImportErrorCount.tsx |    7 +-
 .../airflow/ui/src/components/JsonEditor.test.tsx  |    2 +-
 .../TaskInstance/MarkTaskInstanceAsButton.tsx      |   17 +-
 .../TaskInstance/MarkTaskInstanceAsDialog.test.tsx |  132 +-
 .../TaskInstance/MarkTaskInstanceAsDialog.tsx      |   32 +-
 .../airflow/ui/src/components/MarkAs/utils.test.ts |   47 +
 .../src/airflow/ui/src/components/MarkAs/utils.ts  |   12 +-
 .../ui/src/components/MarkdownModal.test.tsx       |    2 +-
 .../MonacoEditor/configureMonaco.test.ts           |   50 +
 .../src/components/MonacoEditor/configureMonaco.ts |   54 +-
 .../ui/src/components/MonacoEditor/index.tsx       |   12 +-
 .../airflow/ui/src/components/NeedsReviewBadge.tsx |    6 +-
 .../airflow/ui/src/components/NotePreview.test.tsx |    2 +-
 .../ui/src/components/PauseOrDrainChoiceModal.tsx  |   66 +
 .../src/airflow/ui/src/components/PoolBar.test.tsx |   26 +-
 .../src/airflow/ui/src/components/PoolBar.tsx      |    7 +-
 .../ui/src/components/PresetFiltersMenu.test.tsx   |    2 +-
 .../ui/src/components/ReactMarkdownBlocks.tsx      |   10 +-
 .../ui/src/components/RenderedJsonField.test.tsx   |    2 +-
 .../ui/src/components/RenderedJsonField.tsx        |    6 +-
 .../ui/src/components/RollupKeyChecklist.tsx       |   51 +-
 .../src/components/SearchDags/SearchDags.test.tsx  |  272 -
 .../ui/src/components/SearchDags/SearchDags.tsx    |  128 -
 .../components/SearchDags/SearchDagsControl.tsx    |   37 -
 .../airflow/ui/src/components/SearchDags/index.ts  |   20 -
 .../src/airflow/ui/src/components/SearchSelect.tsx |  117 +
 .../ui/src/components/SqlParserProvider.tsx        |    6 +-
 .../airflow/ui/src/components/StatsCard.test.tsx   |   43 +
 .../src/airflow/ui/src/components/StatsCard.tsx    |    7 +-
 .../ui/src/components/TaskInstanceTooltip.test.tsx |   33 +-
 .../ui/src/components/TaskInstanceTooltip.tsx      |   37 +-
 .../src/airflow/ui/src/components/TaskName.tsx     |   26 +-
 .../ui/src/components/TaskTrySelect.test.tsx       |   24 +-
 .../airflow/ui/src/components/TaskTrySelect.tsx    |   36 +-
 .../airflow/ui/src/components/TeamName.test.tsx    |    2 +-
 .../airflow/ui/src/components/TogglePause.test.tsx |    2 +-
 .../src/airflow/ui/src/components/TogglePause.tsx  |   46 +-
 .../airflow/ui/src/components/TrendCountButton.tsx |   12 +-
 .../TriggerDag/PausedDagOptions.test.tsx           |  250 +
 .../src/components/TriggerDag/PausedDagOptions.tsx |  123 +
 .../TriggerDag/RecentConfigSelect.test.tsx         |  152 +
 .../components/TriggerDag/RecentConfigSelect.tsx   |  113 +
 .../TriggerDag/TriggerDAGAdvancedOptions.tsx       |   12 +-
 .../TriggerDag/TriggerDAGButton.test.tsx           |  190 +
 .../src/components/TriggerDag/TriggerDAGButton.tsx |  172 +-
 .../components/TriggerDag/TriggerDAGForm.test.tsx  |  211 +-
 .../src/components/TriggerDag/TriggerDAGForm.tsx   |   94 +-
 .../components/TriggerDag/TriggerDAGModal.test.tsx |  238 +
 .../src/components/TriggerDag/TriggerDAGModal.tsx  |   30 +-
 .../airflow/ui/src/components/TriggerDag/types.ts  |    3 +
 .../src/components/VersionCompareSelect.test.tsx   |   82 +
 .../ui/src/components/VersionCompareSelect.tsx     |  105 +
 .../ui/src/components/renderStructuredLog.test.tsx |    2 +-
 .../src/airflow/ui/src/constants/filterConfigs.tsx |   62 +-
 .../src/airflow/ui/src/constants/localStorage.ts   |    6 +-
 .../src/airflow/ui/src/constants/searchParams.ts   |   17 +
 airflow-core/src/airflow/ui/src/constants/tab.ts   |    1 +
 .../ui/src/hooks/navigation/useNavigation.ts       |    7 +-
 .../ui/src/hooks/useAdvancedSearch.test.tsx        |  175 +
 .../src/airflow/ui/src/hooks/useAdvancedSearch.ts  |   38 +-
 .../airflow/ui/src/hooks/useDagRunsLimit.test.tsx  |   76 +
 .../src/airflow/ui/src/hooks/useDagRunsLimit.ts    |   44 +
 .../src/airflow/ui/src/hooks/useDateRangeFilter.ts |  117 +-
 .../ui/src/hooks/useHITLReviewTabs.test.tsx        |   58 +
 .../src/airflow/ui/src/hooks/useHITLReviewTabs.ts  |   26 +-
 .../src/airflow/ui/src/hooks/useLoopRuleStats.tsx  |   61 +
 .../src/airflow/ui/src/hooks/useNearViewport.ts    |   25 +-
 .../ui/src/hooks/usePluginAppliesToContext.test.ts |   95 +-
 .../ui/src/hooks/usePluginAppliesToContext.ts      |   75 +-
 .../airflow/ui/src/hooks/usePluginTabs.test.tsx    |   10 +-
 .../airflow/ui/src/hooks/useRequiredActionTabs.ts  |   55 +-
 .../ui/src/hooks/useSelectedVersion.test.tsx       |   73 +
 .../src/airflow/ui/src/hooks/useSelectedVersion.ts |    3 +
 .../ui/src/hooks/useTaskInstanceCoordinates.ts     |   31 +
 .../ui/src/hooks/useTaskInstanceView.test.ts       |   97 +
 .../airflow/ui/src/hooks/useTaskInstanceView.ts    |   68 +
 .../airflow/ui/src/hooks/useUrlOrStoredState.ts    |   62 +
 .../airflow/ui/src/hooks/useUserSettings.test.tsx  |   42 +
 .../src/airflow/ui/src/hooks/useUserSettings.ts    |   16 +
 airflow-core/src/airflow/ui/src/i18n/config.ts     |   10 +
 .../src/airflow/ui/src/i18n/locales.test.ts        |  101 +
 .../ui/src/layouts/Details/DagBreadcrumb.test.tsx  |   91 +-
 .../ui/src/layouts/Details/DagBreadcrumb.tsx       |   54 +-
 .../src/layouts/Details/DagRunSwitcherButton.tsx   |   89 +
 .../ui/src/layouts/Details/DagSwitcherButton.tsx   |   75 +-
 .../ui/src/layouts/Details/DetailsLayout.tsx       |   27 +-
 .../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx |    1 -
 .../layouts/Details/Gantt/GanttTimeline.test.tsx   |  120 +-
 .../ui/src/layouts/Details/Gantt/GanttTimeline.tsx |   28 +-
 .../ui/src/layouts/Details/Gantt/utils.test.ts     |  122 +-
 .../airflow/ui/src/layouts/Details/Gantt/utils.ts  |   50 +-
 .../Graph/hooks/useFilteredNodesAndEdges.ts        |    5 +-
 .../layouts/Details/Graph/useGraphFilteredNodes.ts |    6 +-
 .../airflow/ui/src/layouts/Details/Grid/Bar.tsx    |    3 +-
 .../ui/src/layouts/Details/Grid/Grid.test.tsx      |    2 +-
 .../src/layouts/Details/Grid/GridButton.test.tsx   |    2 +-
 .../ui/src/layouts/Details/Grid/GridButton.tsx     |    4 +-
 .../ui/src/layouts/Details/Grid/GridTI.test.tsx    |   15 +-
 .../airflow/ui/src/layouts/Details/Grid/GridTI.tsx |   10 +-
 .../layouts/Details/Grid/TaskInstancesColumn.tsx   |    1 +
 .../ui/src/layouts/Details/Grid/TaskNames.tsx      |    5 +-
 .../src/airflow/ui/src/layouts/Details/NavTabs.tsx |    4 +-
 .../ui/src/layouts/Details/PanelButtons.test.tsx   |   70 +
 .../ui/src/layouts/Details/PanelButtons.tsx        |   52 +-
 .../ui/src/layouts/Details/SearchDagRuns.test.tsx  |  215 +
 .../ui/src/layouts/Details/SearchDagRuns.tsx       |  129 +
 .../ui/src/layouts/Details/SearchDags.test.tsx     |  272 +
 .../airflow/ui/src/layouts/Details/SearchDags.tsx  |  107 +
 .../ui/src/layouts/Details/runLimitConfig.test.ts  |   36 +
 .../ui/src/layouts/Details/runLimitConfig.ts       |   43 +
 .../ui/src/layouts/Details/searchOptions.test.ts   |   50 +
 .../ui/src/layouts/Details/searchOptions.ts        |   66 +
 .../airflow/ui/src/layouts/Nav/DocsButton.test.tsx |    2 +-
 .../ui/src/layouts/Nav/LanguageSelector.test.tsx   |    2 +-
 .../src/airflow/ui/src/layouts/Nav/Nav.test.tsx    |    2 +-
 .../airflow/ui/src/layouts/Nav/NavButton.test.tsx  |   16 +-
 .../src/airflow/ui/src/layouts/Nav/NavButton.tsx   |    8 +-
 .../ui/src/layouts/Nav/PluginMenus.test.tsx        |    2 +-
 .../ui/src/layouts/Nav/UserSettingsButton.test.tsx |    2 +-
 .../src/airflow/ui/src/layouts/StorageLayout.tsx   |   40 -
 .../src/airflow/ui/src/mocks/handlers/dag_runs.ts  |   49 +-
 .../src/airflow/ui/src/mocks/handlers/dags.ts      |  111 +-
 .../Asset/AssetStateStore/AssetStateStore.test.tsx |  123 +
 .../Asset/AssetStateStore/AssetStateStore.tsx      |   23 +-
 .../src/pages/Asset/CreateAssetEventModal.test.tsx |  171 +-
 .../ui/src/pages/Asset/CreateAssetEventModal.tsx   |   32 +-
 .../src/airflow/ui/src/pages/Asset/Header.test.tsx |    2 +-
 .../ui/src/pages/AssetsList/AssetsList.test.tsx    |  122 +-
 .../airflow/ui/src/pages/AssetsList/AssetsList.tsx |   33 +-
 .../pages/AssetsList/DependencyPopover.test.tsx    |    2 +-
 .../ui/src/pages/AssetsList/DependencyPopover.tsx  |    6 +-
 .../src/airflow/ui/src/pages/Configs/Configs.tsx   |    3 +-
 .../src/pages/Connections/ConnectionForm.test.tsx  |  115 +
 .../ui/src/pages/Connections/ConnectionForm.tsx    |   94 +-
 .../pages/Connections/ConnectionStandardFields.tsx |    2 +-
 .../ui/src/pages/Connections/Connections.tsx       |   18 +-
 .../pages/Connections/NothingFoundInfo.test.tsx    |    2 +-
 .../pages/Dag/Backfills/BackfillDagRunsModal.tsx   |   28 +-
 .../ui/src/pages/Dag/Backfills/Backfills.test.tsx  |    2 +-
 .../ui/src/pages/Dag/Backfills/Backfills.tsx       |   21 +-
 .../Dag/Backfills/BackfillsDateFilter.test.tsx     |    2 +-
 .../src/pages/Dag/Backfills/BackfillsFilters.tsx   |    2 +
 .../Dag/Calendar/Calendar.failedView.test.tsx      |  140 +
 .../ui/src/pages/Dag/Calendar/Calendar.test.tsx    |  153 +
 .../airflow/ui/src/pages/Dag/Calendar/Calendar.tsx |   53 +-
 .../ui/src/pages/Dag/Calendar/CalendarCell.tsx     |   33 +-
 .../ui/src/pages/Dag/Calendar/CalendarLegend.tsx   |   11 +
 .../ui/src/pages/Dag/Calendar/CalendarTooltip.tsx  |   35 +-
 .../src/pages/Dag/Calendar/HourlyCalendarView.tsx  |   10 +-
 .../src/pages/Dag/Calendar/calendarUtils.test.ts   |   22 +
 .../ui/src/pages/Dag/Calendar/calendarUtils.ts     |    4 +
 .../src/airflow/ui/src/pages/Dag/Calendar/types.ts |    1 +
 .../airflow/ui/src/pages/Dag/Code/Code.test.tsx    |   72 +
 .../src/airflow/ui/src/pages/Dag/Code/Code.tsx     |   12 +-
 .../ui/src/pages/Dag/Code/FileLocation.test.tsx    |    2 +-
 .../ui/src/pages/Dag/Code/VersionCompareSelect.tsx |  105 -
 airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx  |   18 +-
 .../airflow/ui/src/pages/Dag/DagHeader.test.tsx    |    4 +-
 .../ui/src/pages/Dag/DeadlineAlertsBadge.test.tsx  |    2 +-
 .../src/airflow/ui/src/pages/Dag/Details.tsx       |   12 +-
 .../src/airflow/ui/src/pages/Dag/Header.test.tsx   |   14 +-
 .../src/airflow/ui/src/pages/Dag/Header.tsx        |    7 +-
 .../ui/src/pages/Dag/Overview/Overview.test.tsx    |    4 +-
 .../ui/src/pages/Dag/RequiredActionsRoute.test.tsx |   54 +
 .../airflow/ui/src/pages/Dag/Tasks/Tasks.test.tsx  |  114 +
 .../src/airflow/ui/src/pages/Dag/Tasks/Tasks.tsx   |    5 +-
 .../pages/Dag/Versions/VersionDiff.i18n.test.tsx   |  107 +
 .../ui/src/pages/Dag/Versions/VersionDiff.test.tsx |  275 +
 .../ui/src/pages/Dag/Versions/VersionDiff.tsx      |  201 +
 .../ui/src/pages/Dag/Versions/Versions.test.tsx    |  227 +
 .../airflow/ui/src/pages/Dag/Versions/Versions.tsx |  182 +
 .../src/airflow/ui/src/pages/Dag/Versions/index.ts |   19 +
 .../airflow/ui/src/pages/DagBundle/BundleFiles.tsx |   13 +-
 .../src/airflow/ui/src/pages/DagBundle/Header.tsx  |    5 +-
 .../ui/src/pages/DagBundles/DagBundles.test.tsx    |    4 +-
 .../airflow/ui/src/pages/DagBundles/DagBundles.tsx |    6 +-
 .../src/pages/DagRuns/BulkDeleteDagRunsButton.tsx  |    8 +-
 .../src/pages/DagRuns/BulkMarkDagRunsAsButton.tsx  |    5 +-
 .../airflow/ui/src/pages/DagRuns/DagRuns.test.tsx  |   60 +-
 .../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx   |   28 +-
 .../ui/src/pages/DagRuns/DagRunsFilters.tsx        |    1 +
 .../ui/src/pages/DagsList/AssetSchedule.test.tsx   |  125 +
 .../ui/src/pages/DagsList/AssetSchedule.tsx        |   12 +-
 .../pages/DagsList/BulkPauseDrainDagsButton.tsx    |  106 +
 .../src/pages/DagsList/BulkUnpauseDagsButton.tsx   |   86 +
 .../airflow/ui/src/pages/DagsList/DagCard.test.tsx |   26 +-
 .../src/airflow/ui/src/pages/DagsList/DagCard.tsx  |   31 +-
 .../ui/src/pages/DagsList/DagCardActions.tsx       |    1 -
 .../DagsList/DagFolderTree/DagFolderTree.test.tsx  |  323 +
 .../pages/DagsList/DagFolderTree/DagFolderTree.tsx |  216 +
 .../DagsList/DagFolderTree/buildFolderTree.test.ts |  119 +
 .../DagsList/DagFolderTree/buildFolderTree.ts      |  152 +
 .../ui/src/pages/DagsList/DagFolderTree/index.ts   |   19 +
 .../src/pages/DagsList/DagRunStateCounts.test.tsx  |   13 +-
 .../ui/src/pages/DagsList/DagRunStateCounts.tsx    |    5 +-
 .../DagsList/DagsFilters/DagsFilters.test.tsx      |   82 +-
 .../src/pages/DagsList/DagsFilters/DagsFilters.tsx |    4 +-
 .../ui/src/pages/DagsList/DagsList.test.tsx        |  303 +-
 .../src/airflow/ui/src/pages/DagsList/DagsList.tsx |  437 +-
 .../ui/src/pages/DagsList/DagsListColumns.tsx      |  262 +
 .../src/pages/DagsList/DagsListCountsContext.tsx   |   73 +
 .../src/pages/DagsList/PartitionScheduleModal.tsx  |    7 +-
 .../pages/DagsList/RecentTaskStateCounts.test.tsx  |  110 +
 .../src/pages/DagsList/RecentTaskStateCounts.tsx   |  128 +
 .../pages/DagsList/RecentTaskStateCountsColumn.tsx |   59 +
 .../DagsList/RecentTaskStateCountsHeader.test.tsx  |   50 +
 .../pages/DagsList/RecentTaskStateCountsHeader.tsx |   39 +
 .../ui/src/pages/DagsList/Schedule.test.tsx        |   58 +
 .../src/airflow/ui/src/pages/DagsList/Schedule.tsx |    2 +-
 .../ui/src/pages/Dashboard/AlertContent.test.tsx   |    2 +-
 .../ui/src/pages/Dashboard/Dashboard.test.tsx      |    2 +-
 .../ui/src/pages/Dashboard/Health/Health.test.tsx  |    2 +-
 .../Dashboard/HistoricalMetrics/MetricSection.tsx  |    3 +-
 .../Dashboard/PoolSummary/PoolSummary.test.tsx     |   11 +-
 .../pages/Dashboard/PoolSummary/PoolSummary.tsx    |    2 +-
 .../src/pages/Dashboard/Stats/DagImportErrors.tsx  |    4 +-
 .../pages/Dashboard/Stats/DagImportErrorsModal.tsx |    3 +-
 .../pages/Dashboard/Stats/PluginImportErrors.tsx   |    4 +-
 .../ui/src/pages/Dashboard/Stats/Stats.test.tsx    |    7 +-
 .../src/airflow/ui/src/pages/Deadlines/index.tsx   |   12 +-
 .../airflow/ui/src/pages/Events/Events.test.tsx    |   61 +
 .../src/airflow/ui/src/pages/Events/Events.tsx     |   18 +-
 .../pages/GroupTaskInstance/GroupTaskInstance.tsx  |    1 +
 .../GroupTaskInstance/GroupTaskInstances.test.tsx  |   93 +
 .../pages/GroupTaskInstance/GroupTaskInstances.tsx |   47 +
 .../ui/src/pages/GroupTaskInstance/Header.tsx      |   25 +-
 .../LoopIterations/IterationSelect.test.tsx        |  107 +
 .../LoopIterations/IterationSelect.tsx             |  155 +
 .../GroupTaskInstance/LoopIterations/index.ts      |   19 +
 .../LoopIterations/loopUtils.test.ts               |  110 +
 .../GroupTaskInstance/LoopIterations/loopUtils.ts  |   58 +
 .../ui/src/pages/GroupTaskInstance/index.ts        |    2 +-
 .../GroupTaskInstance/useLoopOutcomeStats.tsx      |   74 +
 .../ui/src/pages/HITLTaskInstances/HITLFilters.tsx |    6 +
 .../HITLTaskInstances/HITLResponseForm.test.tsx    |   36 +-
 .../pages/HITLTaskInstances/HITLResponseForm.tsx   |    9 +-
 .../HITLTaskInstances/HITLTaskInstances.test.tsx   |   62 +-
 .../pages/HITLTaskInstances/HITLTaskInstances.tsx  |   26 +-
 airflow-core/src/airflow/ui/src/pages/Jobs.tsx     |   38 +-
 .../src/airflow/ui/src/pages/LandingPage.test.tsx  |    2 +-
 .../src/airflow/ui/src/pages/LandingPage.tsx       |    6 +-
 .../ui/src/pages/MappedTaskInstance/Details.tsx    |    6 +-
 .../ui/src/pages/MappedTaskInstance/Header.tsx     |    8 +-
 .../MappedTaskInstance/MappedTaskInstance.tsx      |   10 +-
 .../src/airflow/ui/src/pages/Pools/PoolBarCard.tsx |   17 +-
 .../src/airflow/ui/src/pages/Pools/PoolForm.tsx    |   15 +-
 .../src/airflow/ui/src/pages/Providers.tsx         |    3 +-
 .../src/airflow/ui/src/pages/ReactPlugin.test.tsx  |   30 +-
 .../src/airflow/ui/src/pages/ReactPlugin.tsx       |    4 +
 .../src/airflow/ui/src/pages/Run/AssetEvents.tsx   |    4 +-
 .../src/airflow/ui/src/pages/Run/Details.tsx       |   16 +-
 .../airflow/ui/src/pages/Run/Execution.test.tsx    |  512 ++
 .../src/airflow/ui/src/pages/Run/Execution.tsx     |  325 +
 .../src/airflow/ui/src/pages/Run/Header.test.tsx   |    2 +-
 .../src/airflow/ui/src/pages/Run/Header.tsx        |   19 +-
 airflow-core/src/airflow/ui/src/pages/Run/Run.tsx  |    3 +-
 .../ui/src/pages/Settings/Settings.test.tsx        |   44 +
 .../src/airflow/ui/src/pages/Settings/Settings.tsx |   45 +
 .../airflow/ui/src/pages/Task/GroupTaskHeader.tsx  |    7 +-
 .../pages/Task/Overview/LoopHistoryChart.test.tsx  |  129 +
 .../src/pages/Task/Overview/LoopHistoryChart.tsx   |  137 +
 .../ui/src/pages/Task/Overview/Overview.test.tsx   |   47 +-
 .../ui/src/pages/Task/Overview/Overview.tsx        |    9 +-
 .../ui/src/pages/TaskInstance/AssetEvents.test.tsx |   61 +
 .../ui/src/pages/TaskInstance/AssetEvents.tsx      |   10 +-
 .../ui/src/pages/TaskInstance/BlockingDeps.tsx     |    2 +
 .../ui/src/pages/TaskInstance/DefaultTab.test.tsx  |    2 +-
 .../ui/src/pages/TaskInstance/Details.test.tsx     |  154 +
 .../airflow/ui/src/pages/TaskInstance/Details.tsx  |   92 +-
 .../ui/src/pages/TaskInstance/ExtraLinks.test.tsx  |   22 +-
 .../ui/src/pages/TaskInstance/ExtraLinks.tsx       |    3 +
 .../ui/src/pages/TaskInstance/HITLResponse.tsx     |    8 +-
 .../ui/src/pages/TaskInstance/Header.test.tsx      |   88 +-
 .../airflow/ui/src/pages/TaskInstance/Header.tsx   |   44 +-
 .../pages/TaskInstance/Logs/ExternalLogLink.tsx    |    6 +-
 .../TaskInstance/Logs/LogSearchInput.test.tsx      |    2 +-
 .../ui/src/pages/TaskInstance/Logs/Logs.test.tsx   |   64 +-
 .../ui/src/pages/TaskInstance/Logs/Logs.tsx        |  102 +-
 .../pages/TaskInstance/Logs/LogsSelection.test.tsx |    2 +-
 .../pages/TaskInstance/Logs/LogsTryNumber.test.tsx |  199 +
 .../src/pages/TaskInstance/Logs/TaskLogHeader.tsx  |    6 +-
 .../ui/src/pages/TaskInstance/Logs/logSelection.ts |   16 +-
 .../src/pages/TaskInstance/Logs/useLogGroups.tsx   |   14 +-
 .../ui/src/pages/TaskInstance/Logs/utils.ts        |   24 +-
 .../pages/TaskInstance/RenderedTemplates.test.tsx  |    2 +-
 .../src/pages/TaskInstance/RenderedTemplates.tsx   |    3 +
 .../src/pages/TaskInstance/TaskInstance.test.tsx   |  350 +-
 .../ui/src/pages/TaskInstance/TaskInstance.tsx     |  151 +-
 .../ui/src/pages/TaskInstance/stateReason.ts       |   32 +
 .../TaskInstances/BulkClearTaskInstancesButton.tsx |  112 +-
 .../BulkDeleteTaskInstancesButton.tsx              |    8 +-
 .../BulkMarkTaskInstancesAsButton.tsx              |   18 +-
 .../DeleteTaskInstanceButton.test.tsx              |   58 +
 .../TaskInstances/DeleteTaskInstanceButton.tsx     |    3 +
 .../src/pages/TaskInstances/TaskInstances.test.tsx |  111 +-
 .../ui/src/pages/TaskInstances/TaskInstances.tsx   |   70 +-
 .../ClearAllTaskStateStoreButton.tsx               |    4 +-
 .../TaskStateStore/DeleteTaskStateStoreButton.tsx  |    4 +-
 .../pages/TaskStateStore/TaskStateStore.test.tsx   |  114 +
 .../ui/src/pages/TaskStateStore/TaskStateStore.tsx |   12 +-
 .../TaskStateStore/TaskStateStoreModal.test.tsx    |   81 +
 .../pages/TaskStateStore/TaskStateStoreModal.tsx   |   10 +-
 .../ui/src/pages/Variables/ImportVariablesForm.tsx |   21 +-
 .../airflow/ui/src/pages/Variables/Variables.tsx   |   20 +-
 .../airflow/ui/src/pages/XCom/AddXComButton.tsx    |    4 +
 .../airflow/ui/src/pages/XCom/DeleteXComButton.tsx |    2 +
 .../airflow/ui/src/pages/XCom/EditXComButton.tsx   |    2 +
 .../src/airflow/ui/src/pages/XCom/XCom.test.tsx    |   80 +
 .../src/airflow/ui/src/pages/XCom/XCom.tsx         |   30 +-
 .../airflow/ui/src/pages/XCom/XComEntry.test.tsx   |  286 +
 .../src/airflow/ui/src/pages/XCom/XComEntry.tsx    |   84 +-
 .../airflow/ui/src/pages/XCom/XComModal.test.tsx   |   82 +
 .../src/airflow/ui/src/pages/XCom/XComModal.tsx    |   21 +-
 .../airflow/ui/src/queries/gridViewQueryKeys.ts    |    4 +
 .../airflow/ui/src/queries/useBulkClearDryRun.ts   |  114 -
 .../ui/src/queries/useBulkClearTaskInstances.ts    |  131 -
 .../ui/src/queries/useBulkMarkAsDryRun.test.tsx    |   76 +
 .../airflow/ui/src/queries/useBulkMarkAsDryRun.ts  |    4 +-
 .../ui/src/queries/useBulkSetDagSchedulingState.ts |   89 +
 .../ui/src/queries/useClearTaskInstances.test.tsx  |   82 +
 .../ui/src/queries/useClearTaskInstances.ts        |   38 +-
 .../queries/useClearTaskInstancesDryRun.test.tsx   |   88 +
 .../ui/src/queries/useClearTaskInstancesDryRun.ts  |   57 +-
 .../ui/src/queries/useCreateBackfill.test.tsx      |   99 +
 .../airflow/ui/src/queries/useCreateBackfill.ts    |   39 +-
 .../ui/src/queries/useDagBundleRefetchInterval.ts  |    8 +-
 .../src/airflow/ui/src/queries/useDagFolders.ts    |   35 +
 .../ui/src/queries/useDagRunStateCounts.tsx        |    3 +-
 .../src/airflow/ui/src/queries/useDags.tsx         |   29 +-
 .../src/airflow/ui/src/queries/useDeadlines.ts     |    2 +-
 .../src/airflow/ui/src/queries/useIsLoopGroup.ts   |   32 +
 .../src/airflow/ui/src/queries/useLogs.test.ts     |   44 +-
 .../src/airflow/ui/src/queries/useLogs.tsx         |   29 +-
 .../src/airflow/ui/src/queries/useLoopHistory.ts   |   25 +
 .../airflow/ui/src/queries/useLoopSummary.test.tsx |   93 +
 .../src/airflow/ui/src/queries/useLoopSummary.ts   |   77 +
 .../src/airflow/ui/src/queries/useParamStore.ts    |    8 +-
 .../ui/src/queries/usePatchTaskInstance.test.tsx   |   60 +
 .../airflow/ui/src/queries/usePatchTaskInstance.ts |    6 +-
 .../ui/src/queries/usePatchTaskInstanceDryRun.ts   |    2 +
 .../src/queries/useRecentTaskStateCounts.test.tsx  |   64 +
 .../ui/src/queries/useRecentTaskStateCounts.tsx    |   62 +
 .../ui/src/queries/useRefreshOnNewDagRuns.ts       |    2 +-
 .../ui/src/queries/useTaskInstanceNote.test.tsx    |   54 +
 .../airflow/ui/src/queries/useTaskInstanceNote.ts  |    2 +-
 .../airflow/ui/src/queries/useTogglePause.test.tsx |    2 +-
 .../src/airflow/ui/src/queries/useTrigger.test.tsx |   98 +
 .../src/airflow/ui/src/queries/useTrigger.ts       |   31 +-
 .../airflow/ui/src/queries/useUpdateHITLDetail.ts  |   18 +-
 airflow-core/src/airflow/ui/src/queryClient.ts     |    8 +-
 airflow-core/src/airflow/ui/src/router.tsx         |   22 +-
 .../ui/src/system-components/Menu/MenuTrigger.tsx  |    2 +-
 .../ui/src/system-components/Pagination/Item.tsx   |    6 +-
 .../src/system-components/Pagination/PageText.tsx  |   10 +-
 .../ui/src/system-components/Select/ValueText.tsx  |   11 +-
 .../src/airflow/ui/src/utils/datetimeUtils.ts      |   65 +-
 .../airflow/ui/src/utils/executionParams.test.ts   |   34 +
 .../src/airflow/ui/src/utils/executionParams.ts    |   38 +
 .../src/airflow/ui/src/utils/formatNumber.test.ts  |   34 +
 .../src/airflow/ui/src/utils/formatNumber.ts       |   31 +
 .../airflow/ui/src/utils/hasDagRunConfig.test.ts   |   33 +
 .../src/airflow/ui/src/utils/hasDagRunConfig.ts    |   24 +
 airflow-core/src/airflow/ui/src/utils/hitl.ts      |    2 +
 airflow-core/src/airflow/ui/src/utils/index.ts     |    3 +
 airflow-core/src/airflow/ui/src/utils/intlCache.ts |   48 +
 .../src/airflow/ui/src/utils/isOneOf.test.ts       |   33 +
 airflow-core/src/airflow/ui/src/utils/isOneOf.ts   |   28 +
 .../src/airflow/ui/src/utils/jsonPreview.ts        |   16 +-
 .../src/airflow/ui/src/utils/links.test.ts         |   15 +
 airflow-core/src/airflow/ui/src/utils/links.ts     |   39 +-
 airflow-core/src/airflow/ui/src/utils/logs.ts      |    8 +-
 .../src/airflow/ui/src/utils/loopTaskInstance.ts   |   22 +
 airflow-core/src/airflow/ui/src/utils/option.ts    |    4 +
 .../airflow/ui/src/utils/pluginAppliesTo.test.ts   |  325 +-
 .../src/airflow/ui/src/utils/pluginAppliesTo.ts    |  207 +-
 airflow-core/src/airflow/ui/src/utils/query.ts     |    6 +-
 .../src/airflow/ui/src/utils/renderMermaid.test.ts |   40 +
 .../src/airflow/ui/src/utils/renderMermaid.ts      |   10 +-
 airflow-core/src/airflow/ui/src/utils/tab.ts       |    6 +-
 .../ui/src/utils/useFiltersHandler.test.tsx        |   63 +
 .../src/airflow/ui/src/utils/useFiltersHandler.ts  |   23 +-
 .../src/airflow/ui/tests/e2e/fixtures/pom.ts       |    5 -
 .../ui/tests/e2e/fixtures/task-tries-data.ts       |   46 +
 .../src/airflow/ui/tests/e2e/global-setup.ts       |   14 +-
 .../src/airflow/ui/tests/e2e/global-teardown.ts    |    2 +
 .../src/airflow/ui/tests/e2e/pages/BackfillPage.ts |   38 +-
 .../airflow/ui/tests/e2e/pages/ConnectionsPage.ts  |   26 +-
 .../airflow/ui/tests/e2e/pages/DagCalendarTab.ts   |   47 +-
 .../src/airflow/ui/tests/e2e/pages/DagCodePage.ts  |   20 -
 .../airflow/ui/tests/e2e/pages/DagDetailPage.ts    |   49 -
 .../src/airflow/ui/tests/e2e/pages/DagRunPage.ts   |    8 +-
 .../src/airflow/ui/tests/e2e/pages/DagRunsPage.ts  |   32 -
 .../airflow/ui/tests/e2e/pages/DagRunsTabPage.ts   |   33 -
 .../src/airflow/ui/tests/e2e/pages/DagsPage.ts     |  141 +-
 .../src/airflow/ui/tests/e2e/pages/EventsPage.ts   |    6 +-
 .../src/airflow/ui/tests/e2e/pages/XComsPage.ts    |   14 -
 .../src/airflow/ui/tests/e2e/specs/asset.spec.ts   |   17 +-
 .../airflow/ui/tests/e2e/specs/backfill.spec.ts    |   64 -
 .../airflow/ui/tests/e2e/specs/dag-bundles.spec.ts |   37 +-
 .../ui/tests/e2e/specs/dag-calendar-tab.spec.ts    |   75 +-
 .../ui/tests/e2e/specs/dag-code-tab.spec.ts        |    8 -
 .../airflow/ui/tests/e2e/specs/dag-detail.spec.ts  |   43 -
 .../src/airflow/ui/tests/e2e/specs/dag-run.spec.ts |   13 +-
 .../ui/tests/e2e/specs/dag-runs-tab.spec.ts        |   30 +-
 .../airflow/ui/tests/e2e/specs/dag-runs.spec.ts    |   10 -
 .../airflow/ui/tests/e2e/specs/dag-tasks.spec.ts   |  106 -
 .../airflow/ui/tests/e2e/specs/dags-list.spec.ts   |   67 +-
 .../src/airflow/ui/tests/e2e/specs/plugins.spec.ts |   35 +-
 .../airflow/ui/tests/e2e/specs/providers.spec.ts   |   19 +-
 .../ui/tests/e2e/specs/task-instances.spec.ts      |    5 -
 .../airflow/ui/tests/e2e/specs/task-logs.spec.ts   |   66 +-
 .../airflow/ui/tests/e2e/specs/task-tries.spec.ts  |  111 +
 .../src/airflow/ui/tests/e2e/specs/xcoms.spec.ts   |   20 +-
 .../src/airflow/ui/tests/e2e/utils/shared.ts       |    6 +-
 airflow-core/src/airflow/ui/testsSetup.ts          |    2 +-
 airflow-core/src/airflow/utils/cli.py              |   48 +-
 airflow-core/src/airflow/utils/db.py               |   10 +-
 airflow-core/src/airflow/utils/db_cleanup.py       |  211 +-
 airflow-core/src/airflow/utils/file.py             |   50 +-
 .../src/airflow/utils/log/file_task_handler.py     |   66 +-
 airflow-core/src/airflow/utils/log/log_reader.py   |   11 +-
 .../src/airflow/utils/log/task_log_address.py      |  268 +
 airflow-core/src/airflow/utils/sqlalchemy.py       |   62 +-
 airflow-core/tests/integration/otel/test_otel.py   |    2 +-
 .../tests/unit/always/test_example_dags.py         |    2 +
 .../tests/unit/always/test_project_structure.py    |   12 +-
 .../tests/unit/always/test_provider_yaml_schema.py |   10 +
 .../tests/unit/always/test_providers_manager.py    |   68 +-
 .../tests/unit/api/common/test_delete_dag.py       |   96 +-
 .../tests/unit/api/common/test_trigger_dag.py      |    4 +-
 .../api_fastapi/auth/managers/simple/conftest.py   |    3 +-
 .../managers/simple/test_simple_auth_manager.py    |   74 +
 .../tests/unit/api_fastapi/auth/test_tokens.py     |   43 +
 .../tests/unit/api_fastapi/common/db/test_dags.py  |   10 +-
 .../tests/unit/api_fastapi/common/test_cursors.py  |    6 +-
 .../unit/api_fastapi/common/test_http_metrics.py   |  297 +
 .../unit/api_fastapi/common/test_parameters.py     |   31 +-
 airflow-core/tests/unit/api_fastapi/conftest.py    |   70 +-
 .../core_api/datamodels/test_dag_run.py            |    6 +-
 .../api_fastapi/core_api/datamodels/test_dags.py   |    4 +-
 .../routes/public/test_asset_state_store.py        |   55 +
 .../core_api/routes/public/test_assets.py          |  117 +-
 .../core_api/routes/public/test_auth.py            |   73 +-
 .../core_api/routes/public/test_backfills.py       |   92 +-
 .../core_api/routes/public/test_connections.py     |   17 +-
 .../core_api/routes/public/test_dag_bundles.py     |   51 +-
 .../core_api/routes/public/test_dag_parsing.py     |   18 +-
 .../core_api/routes/public/test_dag_run.py         |  418 +-
 .../core_api/routes/public/test_dag_sources.py     |    4 +
 .../core_api/routes/public/test_dag_tags.py        |   16 +-
 .../core_api/routes/public/test_dag_versions.py    |  296 +
 .../core_api/routes/public/test_dag_warning.py     |   25 +-
 .../core_api/routes/public/test_dags.py            |  428 +-
 .../core_api/routes/public/test_event_logs.py      |  236 +-
 .../core_api/routes/public/test_execution.py       |  177 +
 .../core_api/routes/public/test_extra_links.py     |  145 +-
 .../core_api/routes/public/test_hitl.py            |  385 +-
 .../core_api/routes/public/test_import_error.py    |   84 +-
 .../api_fastapi/core_api/routes/public/test_job.py |   51 +
 .../api_fastapi/core_api/routes/public/test_log.py |  143 +-
 .../core_api/routes/public/test_plugins.py         |   41 +-
 .../core_api/routes/public/test_pools.py           |    8 +
 .../core_api/routes/public/test_task_instances.py  | 2467 ++++++-
 .../routes/public/test_task_state_store.py         |  157 +-
 .../core_api/routes/public/test_tasks.py           |   35 +
 .../core_api/routes/public/test_xcom.py            |  245 +-
 .../api_fastapi/core_api/routes/test_routes.py     |   22 +
 .../api_fastapi/core_api/routes/ui/test_assets.py  |  142 +-
 .../core_api/routes/ui/test_calendar.py            |  239 +-
 .../api_fastapi/core_api/routes/ui/test_dags.py    |  440 +-
 .../core_api/routes/ui/test_dashboard.py           |   20 +
 .../core_api/routes/ui/test_execution.py           |   82 +
 .../api_fastapi/core_api/routes/ui/test_gantt.py   |   47 +
 .../api_fastapi/core_api/routes/ui/test_grid.py    |  461 +-
 .../routes/ui/test_partitioned_dag_runs.py         |   48 +-
 .../core_api/routes/ui/test_structure.py           |   50 +
 .../core_api/services/ui/test_execution.py         |   72 +
 .../unit/api_fastapi/core_api/test_security.py     |   75 +
 .../unit/api_fastapi/execution_api/conftest.py     |   18 +-
 .../unit/api_fastapi/execution_api/test_app.py     |  151 +-
 .../execution_api/test_dag_processor_client.py     |  373 ++
 .../execution_api/test_dag_processor_tokens.py     |   93 +
 .../api_fastapi/execution_api/test_in_process.py   |   60 +
 .../api_fastapi/execution_api/test_security.py     | 1120 +++-
 .../execution_api/test_token_scope_boundaries.py   |  127 +-
 .../versions/head/test_asset_state_store.py        |   52 +
 .../execution_api/versions/head/test_dags.py       |    4 +-
 .../execution_api/versions/head/test_hitl.py       |   36 +-
 .../execution_api/versions/head/test_jobs.py       |  470 ++
 .../execution_api/versions/head/test_router.py     |   19 +
 .../versions/head/test_task_instances.py           | 2575 +++++++-
 .../versions/head/test_task_state_store.py         |   45 +-
 .../execution_api/versions/head/test_xcoms.py      | 1027 ++-
 .../versions/v2025_04_28/test_xcom.py              |   10 +-
 .../versions/v2026_10_30/test_dag_run_notes.py     |   43 +
 .../versions/v2026_10_30/test_task_instances.py    |  276 +-
 .../versions/v2027_02_28}/__init__.py              |    0
 .../versions/v2027_02_28/test_jobs.py              |   76 +
 .../unit/api_fastapi/logging/test_decorators.py    |  119 +
 airflow-core/tests/unit/api_fastapi/test_app.py    |  133 +-
 airflow-core/tests/unit/assets/test_manager.py     |   43 +-
 .../tests/unit/callbacks/test_callback_requests.py |   13 +-
 .../unit/cli/commands/test_command_deprecations.py |    1 +
 .../tests/unit/cli/commands/test_dag_command.py    |   43 +-
 .../cli/commands/test_dag_processor_command.py     |   58 +
 .../commands/test_dag_processor_token_command.py   |  237 +
 .../unit/cli/commands/test_partition_command.py    |   53 +-
 .../unit/cli/commands/test_plugins_command.py      |    4 +-
 .../unit/cli/commands/test_standalone_command.py   |   51 +
 .../unit/cli/commands/test_state_store_command.py  |   10 +-
 .../tests/unit/cli/commands/test_task_command.py   |  307 +-
 airflow-core/tests/unit/core/test_settings.py      |  220 +-
 .../tests/unit/core/test_sqlalchemy_config.py      |   12 +-
 .../bundles/test_dag_bundle_manager.py             |  107 +-
 .../tests/unit/dag_processing/fake_lang_sdk.py     |  144 +
 .../unit/dag_processing/importers/test_registry.py |   99 -
 .../lang_sdk_fixtures/go_native.json               | 1680 +++++
 .../lang_sdk_fixtures/java_native.json             |  151 +
 .../lang_sdk_fixtures/ts_conformance.json          |  661 ++
 .../tests/unit/dag_processing/test_api_client.py   |  952 +++
 .../tests/unit/dag_processing/test_collection.py   |  521 +-
 .../tests/unit/dag_processing/test_dagbag.py       |  675 +-
 .../unit/dag_processing/test_importer_routing.py   |   63 +
 .../unit/dag_processing/test_lang_sdk_processor.py |  874 +++
 .../tests/unit/dag_processing/test_manager.py      |  657 +-
 .../tests/unit/dag_processing/test_processor.py    |  137 +-
 .../tests/unit/executors/test_base_executor.py     |  335 +-
 .../tests/unit/executors/test_local_executor.py    |  502 +-
 .../executors/test_local_executor_check_workers.py |    5 +-
 .../tests/unit/executors/test_workloads.py         |  175 +-
 airflow-core/tests/unit/jobs/test_scheduler_job.py | 2095 +++++-
 airflow-core/tests/unit/jobs/test_triggerer_job.py |   73 +-
 ...est_0049_remove_pickled_data_from_xcom_table.py |  237 -
 ...t_0055_remove_pickled_data_from_dagrun_table.py |  143 -
 .../test_0080_deadline_callback_migration.py       |  268 -
 .../test_0094_deadline_callback_migration.py       |  178 -
 .../test_0117_deadline_interval_json_migration.py  |   91 -
 ...9_add_indexes_on_serialized_dag_and_dag_code.py |   55 -
 .../migrations/test_0131_lower_case_team_names.py  |  138 -
 .../test_0136_fold_task_map_into_xcom.py           |  184 -
 .../test_0142_unify_task_attempt_ownership.py      |  691 ++
 .../test_0143_add_dynamic_region_storage.py        |  231 +
 .../test_0144_rename_stored_map_index.py           |  324 +
 airflow-core/tests/unit/models/conftest.py         |  113 +
 airflow-core/tests/unit/models/test_asset.py       |  105 +
 airflow-core/tests/unit/models/test_backfill.py    |  133 +-
 airflow-core/tests/unit/models/test_cleartasks.py  | 1560 ++++-
 airflow-core/tests/unit/models/test_dag.py         |  211 +-
 airflow-core/tests/unit/models/test_dag_version.py |   28 +-
 airflow-core/tests/unit/models/test_dagcode.py     |   47 +
 airflow-core/tests/unit/models/test_dagrun.py      | 1329 +++-
 airflow-core/tests/unit/models/test_dagwarning.py  |   38 +-
 .../tests/unit/models/test_dynamic_region.py       |  885 +++
 airflow-core/tests/unit/models/test_errors.py      |   86 +
 airflow-core/tests/unit/models/test_log.py         |  122 +
 .../tests/unit/models/test_mappedoperator.py       |  578 +-
 airflow-core/tests/unit/models/test_pool.py        |   19 +-
 .../tests/unit/models/test_renderedtifields.py     |  114 +-
 .../tests/unit/models/test_revoked_token.py        |    4 +-
 .../tests/unit/models/test_serialized_dag.py       |    4 +-
 .../tests/unit/models/test_task_coordinates.py     |  635 ++
 airflow-core/tests/unit/models/test_task_data.py   |  602 ++
 .../tests/unit/models/test_task_state_store.py     |   18 +-
 .../tests/unit/models/test_taskinstance.py         | 1256 +++-
 airflow-core/tests/unit/models/test_trigger.py     |   95 +-
 airflow-core/tests/unit/models/test_xcom.py        |   97 +-
 airflow-core/tests/unit/models/test_xcom_arg.py    |  242 +
 .../tests/unit/observability/metrics/test_stats.py |   13 +
 .../tests/unit/partition_mappers/test_base.py      |    4 +-
 .../tests/unit/partition_mappers/test_chain.py     |    4 +-
 .../tests/unit/partition_mappers/test_identity.py  |    4 +-
 .../tests/unit/partition_mappers/test_product.py   |    6 +-
 .../tests/unit/partition_mappers/test_temporal.py  |   12 +-
 airflow-core/tests/unit/plugins/test_plugin.py     |    4 +-
 .../tests/unit/plugins/test_plugins_manager.py     |  549 +-
 .../unit/serialization/definitions/test_assets.py  |   19 +
 .../serialization/definitions/test_deadline.py     |    1 +
 .../unit/serialization/test_dag_serialization.py   |  321 +-
 .../unit/serialization/test_dag_version_diff.py    |   50 +-
 .../tests/unit/serialization/test_decoders.py      |   84 +
 .../tests/unit/serialization/test_encoders.py      |    2 +-
 airflow-core/tests/unit/state/test_metastore.py    |  145 +
 .../ti_deps/deps/test_mapped_task_upstream_dep.py  |   33 +-
 .../deps/test_not_previously_skipped_dep.py        |  374 ++
 .../ti_deps/deps/test_ready_to_reschedule_dep.py   |   28 +
 .../unit/ti_deps/deps/test_trigger_rule_dep.py     |  295 +-
 .../tests/unit/timetables/test_assets_timetable.py |  369 +-
 .../unit/timetables/test_partitioned_timetable.py  |   54 +-
 .../unit/timetables/test_trigger_timetable.py      |    7 +
 .../tests/unit/utils/log/test_task_log_address.py  |  362 ++
 airflow-core/tests/unit/utils/test_cli_util.py     |   79 +
 airflow-core/tests/unit/utils/test_db.py           |   20 +
 airflow-core/tests/unit/utils/test_db_cleanup.py   |  426 +-
 airflow-core/tests/unit/utils/test_file.py         |   37 +-
 airflow-core/tests/unit/utils/test_log_handlers.py |   37 +-
 airflow-core/tests/unit/utils/test_session.py      |   18 +-
 airflow-core/tests/unit/utils/test_sqlalchemy.py   |   62 +-
 airflow-core/tests/unit/utils/test_task_group.py   |  134 +
 airflow-ctl-tests/pyproject.toml                   |    7 +-
 .../tests/airflowctl_tests/constants.py            |    2 +-
 .../airflowctl_tests/test_airflowctl_commands.py   |    3 +
 airflow-ctl/README.md                              |    2 +-
 airflow-ctl/docs/images/command_hashes.txt         |    2 +-
 airflow-ctl/docs/images/output_tasks.svg           |   78 +-
 airflow-ctl/docs/installation/prerequisites.rst    |    4 +-
 airflow-ctl/pyproject.toml                         |   10 +-
 .../airflowctl/api/datamodels/auth_generated.py    |    2 +-
 .../src/airflowctl/api/datamodels/generated.py     |  387 +-
 airflow-ctl/src/airflowctl/api/operations.py       |    9 +-
 airflow-ctl/src/airflowctl/ctl/cli_config.py       |   75 +-
 .../src/airflowctl/ctl/commands/task_command.py    |   53 +-
 .../tests/airflow_ctl/api/test_operations.py       |   86 +-
 .../airflow_ctl/ctl/commands/test_dag_command.py   |    2 +-
 .../airflow_ctl/ctl/commands/test_task_command.py  |  286 +-
 .../tests/airflow_ctl/ctl/test_cli_config.py       |  205 +-
 airflow-e2e-tests/docker/go.yml                    |   12 +
 airflow-e2e-tests/docker/java.yml                  |   10 +-
 airflow-e2e-tests/docker/ts.yml                    |   12 +
 .../.gitignore                                     |    0
 airflow-e2e-tests/java-native-bundle/build.gradle  |   50 +
 .../gradle.properties                              |    0
 .../java-native-bundle/settings.gradle             |   33 +
 .../apache/airflow/e2e/NativeBundleBuilder.java    |  150 +
 .../airflow/e2e/nativedag/AnnotationDag.java       |  106 +
 .../apache/airflow/e2e/nativedag/TargetDag.java    |   46 +
 .../org/apache/airflow/e2e/TestBundleBuilder.java  |   36 +-
 .../src/resources/dags/java_test_dags.py           |   12 +
 airflow-e2e-tests/pyproject.toml                   |    9 +-
 .../basic_tests/test_basic_dag_operations.py       |    4 +-
 .../tests/airflow_e2e_tests/conftest.py            |  297 +-
 .../tests/airflow_e2e_tests/constants.py           |   17 +-
 .../e2e_test_utils/base_remote_log_search_test.py  |    6 +-
 .../airflow_e2e_tests/e2e_test_utils/clients.py    |  111 +-
 .../go_sdk_tests/test_go_sdk_concurrent_xcom.py    |    4 +-
 .../go_sdk_tests/test_go_sdk_dag.py                |    4 +-
 .../go_sdk_tests/test_go_sdk_dynamic_dag.py        |  110 +
 .../go_sdk_tests/test_go_sdk_native_dag.py         |  220 +
 .../go_sdk_tests/test_go_sdk_task_state.py         |  114 +
 .../go_sdk_tests/test_go_sdk_taskflow_binding.py   |   76 +-
 .../go_sdk_tests/test_go_sdk_variable_write.py     |    4 +-
 .../java_sdk_tests/test_java_sdk_dag.py            |   74 +-
 .../java_sdk_tests/test_java_sdk_native_dag.py     |  215 +
 .../airflow_e2e_tests/openlineage_tests/README.md  |    2 +-
 .../dags_extra/e2e_versioned_bundle.py             |    4 +-
 .../airflow_e2e_tests/openlineage_tests/harness.py |    4 +-
 .../remote_log_tests/test_remote_logging.py        |    4 +-
 .../ts_sdk_tests/test_ts_sdk_dag.py                |   69 +-
 .../ts_sdk_tests/test_ts_sdk_hitl.py               |  200 +
 .../ts_sdk_tests/test_ts_sdk_native_dag.py         |  253 +
 .../test_xcom_object_storage_backend.py            |    4 +-
 chart/README.md                                    |    2 +-
 chart/docs/manage-dag-files.rst                    |    4 +
 chart/pyproject.toml                               |   14 +-
 clients/python/pyproject.toml                      |   10 +-
 clients/python/test_python_client.py               |    2 +-
 constraints/README.md                              |    6 +-
 contributing-docs/03_contributors_quick_start.rst  |   40 +-
 .../03a_contributors_quick_start_beginners.rst     |   31 +-
 contributing-docs/05_pull_requests.rst             |   13 +-
 contributing-docs/07_local_virtualenv.rst          |    8 +-
 contributing-docs/08_static_code_checks.rst        |    3 +-
 contributing-docs/11_documentation_building.rst    |   10 +-
 contributing-docs/12_provider_distributions.rst    |   14 +-
 .../13_airflow_dependencies_and_extras.rst         |    8 +-
 contributing-docs/25_maintainer_pr_triage.md       |    4 +
 contributing-docs/30_new_language_sdk.rst          |    6 +
 contributing-docs/32_open_pull_request_limit.rst   |  169 +
 contributing-docs/README.rst                       |    3 +
 ...agram_coordinator_execution_architecture.md5sum |    2 +-
 .../diagram_coordinator_execution_architecture.py  |    2 +-
 .../diagram_coordinator_execution_sequence.md5sum  |    2 +-
 .../diagram_coordinator_execution_sequence.png     |  Bin 219883 -> 200865 bytes
 .../diagram_coordinator_execution_sequence.py      |    2 +-
 .../diagram_task_sdk_execution_architecture.md5sum |    2 +-
 .../diagram_task_sdk_execution_architecture.py     |    2 +-
 .../diagram_task_sdk_execution_sequence.md5sum     |    2 +-
 .../images/diagram_task_sdk_execution_sequence.py  |    2 +-
 contributing-docs/testing/docker_compose_tests.rst |    8 +-
 contributing-docs/testing/k8s_tests.rst            |   86 +-
 .../testing/task_sdk_integration_tests.rst         |    4 +-
 contributing-docs/testing/unit_tests.rst           |   14 +-
 dev/README_RELEASE_AIRFLOW.md                      |   88 +-
 dev/README_RELEASE_PROVIDERS.md                    |  124 +-
 dev/README_RELEASE_PYTHON_CLIENT.md                |    8 +-
 dev/airflow-github                                 |    2 +-
 dev/breeze/doc/01_installation.rst                 |    8 +-
 dev/breeze/doc/03_developer_tasks.rst              |  129 +-
 dev/breeze/doc/04_troubleshooting.rst              |   19 +-
 dev/breeze/doc/05_test_commands.rst                |   36 +-
 dev/breeze/doc/06_managing_docker_images.rst       |    8 +-
 dev/breeze/doc/08_ci_tasks.rst                     |    4 +-
 dev/breeze/doc/09_release_management_tasks.rst     |   20 +-
 dev/breeze/doc/14_advanced_breeze_topics.rst       |    2 +-
 dev/breeze/doc/ci/02_images.md                     |   62 +-
 dev/breeze/doc/ci/03_github_variables.md           |    4 +-
 dev/breeze/doc/ci/04_selective_checks.md           |   93 +-
 dev/breeze/doc/ci/05_workflows.md                  |   26 +
 dev/breeze/doc/ci/07_running_ci_locally.md         |    4 +-
 dev/breeze/doc/images/output-commands.svg          |  197 +-
 dev/breeze/doc/images/output_build-docs.svg        |  104 +-
 dev/breeze/doc/images/output_build-docs.txt        |    2 +-
 dev/breeze/doc/images/output_ci-image_build.svg    |    4 +-
 dev/breeze/doc/images/output_ci-image_build.txt    |    2 +-
 dev/breeze/doc/images/output_ci-image_load.svg     |    4 +-
 dev/breeze/doc/images/output_ci-image_load.txt     |    2 +-
 dev/breeze/doc/images/output_ci-image_pull.svg     |    6 +-
 dev/breeze/doc/images/output_ci-image_pull.txt     |    2 +-
 dev/breeze/doc/images/output_ci-image_save.svg     |    4 +-
 dev/breeze/doc/images/output_ci-image_save.txt     |    2 +-
 dev/breeze/doc/images/output_ci-image_verify.svg   |    6 +-
 dev/breeze/doc/images/output_ci-image_verify.txt   |    2 +-
 dev/breeze/doc/images/output_cleanup.svg           |    2 +-
 dev/breeze/doc/images/output_cleanup.txt           |    2 +-
 dev/breeze/doc/images/output_down.svg              |   48 +-
 dev/breeze/doc/images/output_down.txt              |    2 +-
 dev/breeze/doc/images/output_k8s.svg               |   26 +-
 dev/breeze/doc/images/output_k8s.txt               |    2 +-
 .../doc/images/output_k8s_build-k8s-image.svg      |    4 +-
 .../doc/images/output_k8s_build-k8s-image.txt      |    2 +-
 .../doc/images/output_k8s_configure-cluster.svg    |   14 +-
 .../doc/images/output_k8s_configure-cluster.txt    |    2 +-
 .../doc/images/output_k8s_create-cluster.svg       |   14 +-
 .../doc/images/output_k8s_create-cluster.txt       |    2 +-
 .../doc/images/output_k8s_delete-cluster.svg       |    8 +-
 .../doc/images/output_k8s_delete-cluster.txt       |    2 +-
 .../doc/images/output_k8s_deploy-airflow.svg       |   14 +-
 .../doc/images/output_k8s_deploy-airflow.txt       |    2 +-
 .../doc/images/output_k8s_deploy-cluster.svg       |    8 +-
 .../doc/images/output_k8s_deploy-cluster.txt       |    2 +-
 dev/breeze/doc/images/output_k8s_dev.svg           |    8 +-
 dev/breeze/doc/images/output_k8s_dev.txt           |    2 +-
 dev/breeze/doc/images/output_k8s_k9s.svg           |    8 +-
 dev/breeze/doc/images/output_k8s_k9s.txt           |    2 +-
 dev/breeze/doc/images/output_k8s_logs.svg          |    8 +-
 dev/breeze/doc/images/output_k8s_logs.txt          |    2 +-
 .../doc/images/output_k8s_run-complete-tests.svg   |   20 +-
 .../doc/images/output_k8s_run-complete-tests.txt   |    2 +-
 .../doc/images/output_k8s_setup-lang-sdk-test.svg  |   28 +-
 .../doc/images/output_k8s_setup-lang-sdk-test.txt  |    2 +-
 dev/breeze/doc/images/output_k8s_shell.svg         |    8 +-
 dev/breeze/doc/images/output_k8s_shell.txt         |    2 +-
 .../doc/images/output_k8s_smoke-test-overlay.svg   |    8 +-
 .../doc/images/output_k8s_smoke-test-overlay.txt   |    2 +-
 dev/breeze/doc/images/output_k8s_status.svg        |    8 +-
 dev/breeze/doc/images/output_k8s_status.txt        |    2 +-
 dev/breeze/doc/images/output_k8s_tests.svg         |   14 +-
 dev/breeze/doc/images/output_k8s_tests.txt         |    2 +-
 .../doc/images/output_k8s_upload-k8s-image.svg     |   14 +-
 .../doc/images/output_k8s_upload-k8s-image.txt     |    2 +-
 dev/breeze/doc/images/output_prod-image_build.svg  |    6 +-
 dev/breeze/doc/images/output_prod-image_build.txt  |    2 +-
 dev/breeze/doc/images/output_prod-image_load.svg   |    4 +-
 dev/breeze/doc/images/output_prod-image_load.txt   |    2 +-
 dev/breeze/doc/images/output_prod-image_pull.svg   |    6 +-
 dev/breeze/doc/images/output_prod-image_pull.txt   |    2 +-
 dev/breeze/doc/images/output_prod-image_save.svg   |    4 +-
 dev/breeze/doc/images/output_prod-image_save.txt   |    2 +-
 dev/breeze/doc/images/output_prod-image_verify.svg |    6 +-
 dev/breeze/doc/images/output_prod-image_verify.txt |    2 +-
 dev/breeze/doc/images/output_registry_backfill.svg |    4 +-
 dev/breeze/doc/images/output_registry_backfill.txt |    2 +-
 .../doc/images/output_registry_extract-data.svg    |    4 +-
 .../doc/images/output_registry_extract-data.txt    |    2 +-
 .../doc/images/output_release-management.svg       |  120 +-
 .../doc/images/output_release-management.txt       |    2 +-
 ...tput_release-management_add-back-references.svg |    4 +-
 ...tput_release-management_add-back-references.txt |    2 +-
 ...elease-management_classify-provider-changes.svg |   12 +-
 ...elease-management_classify-provider-changes.txt |    2 +-
 ...elease-management_constraints-version-check.svg |    4 +-
 ...elease-management_constraints-version-check.txt |    2 +-
 ...put_release-management_generate-constraints.svg |    8 +-
 ...put_release-management_generate-constraints.txt |    2 +-
 ...management_generate-issue-content-providers.svg |   12 +-
 ...management_generate-issue-content-providers.txt |    2 +-
 ...ease-management_generate-providers-metadata.svg |   12 +-
 ...ease-management_generate-providers-metadata.txt |    2 +-
 ...e-management_install-provider-distributions.svg |    4 +-
 ...e-management_install-provider-distributions.txt |    2 +-
 ...output_release-management_merge-prod-images.svg |    2 +-
 ...output_release-management_merge-prod-images.txt |    2 +-
 ...e-management_prepare-provider-distributions.svg |   12 +-
 ...e-management_prepare-provider-distributions.txt |    2 +-
 ...e-management_prepare-provider-documentation.svg |   12 +-
 ...e-management_prepare-provider-documentation.txt |    2 +-
 .../output_release-management_publish-docs.svg     |    4 +-
 .../output_release-management_publish-docs.txt     |    2 +-
 ...tput_release-management_release-prod-images.svg |    2 +-
 ...tput_release-management_release-prod-images.txt |    2 +-
 ...utput_release-management_start-beta-process.svg |  138 +
 ...utput_release-management_start-beta-process.txt |    1 +
 ...se-management_verify-provider-distributions.svg |    4 +-
 ...se-management_verify-provider-distributions.txt |    2 +-
 dev/breeze/doc/images/output_run.svg               |   49 +-
 dev/breeze/doc/images/output_run.txt               |    2 +-
 .../output_sbom_export-dependency-information.svg  |    4 +-
 .../output_sbom_export-dependency-information.txt  |    2 +-
 ...output_sbom_generate-providers-requirements.svg |    2 +-
 ...output_sbom_generate-providers-requirements.txt |    2 +-
 .../output_setup_check-all-params-in-groups.svg    |   48 +-
 .../output_setup_check-all-params-in-groups.txt    |    2 +-
 dev/breeze/doc/images/output_setup_config.svg      |    4 +-
 dev/breeze/doc/images/output_setup_config.txt      |    2 +-
 .../output_setup_regenerate-command-images.svg     |   56 +-
 .../output_setup_regenerate-command-images.txt     |    2 +-
 dev/breeze/doc/images/output_shell.svg             |  331 +-
 dev/breeze/doc/images/output_shell.txt             |    2 +-
 dev/breeze/doc/images/output_start-airflow.svg     |  287 +-
 dev/breeze/doc/images/output_start-airflow.txt     |    2 +-
 ...utput_testing_airflow-ctl-integration-tests.svg |    4 +-
 ...utput_testing_airflow-ctl-integration-tests.txt |    2 +-
 .../images/output_testing_airflow-ctl-tests.svg    |    4 +-
 .../images/output_testing_airflow-ctl-tests.txt    |    2 +-
 .../images/output_testing_airflow-e2e-tests.svg    |    4 +-
 .../images/output_testing_airflow-e2e-tests.txt    |    2 +-
 .../output_testing_core-integration-tests.svg      |    2 +-
 .../output_testing_core-integration-tests.txt      |    2 +-
 .../doc/images/output_testing_core-tests.svg       |  147 +-
 .../doc/images/output_testing_core-tests.txt       |    2 +-
 .../images/output_testing_docker-compose-tests.svg |    4 +-
 .../images/output_testing_docker-compose-tests.txt |    2 +-
 .../doc/images/output_testing_helm-tests.svg       |    4 +-
 .../doc/images/output_testing_helm-tests.txt       |    2 +-
 .../output_testing_providers-integration-tests.svg |    2 +-
 .../output_testing_providers-integration-tests.txt |    2 +-
 .../doc/images/output_testing_providers-tests.svg  |  163 +-
 .../doc/images/output_testing_providers-tests.txt  |    2 +-
 .../output_testing_python-api-client-tests.svg     |    2 +-
 .../output_testing_python-api-client-tests.txt     |    2 +-
 .../doc/images/output_testing_system-tests.svg     |    2 +-
 .../doc/images/output_testing_system-tests.txt     |    2 +-
 .../output_testing_task-sdk-integration-tests.svg  |    4 +-
 .../output_testing_task-sdk-integration-tests.txt  |    2 +-
 .../doc/images/output_testing_task-sdk-tests.svg   |    2 +-
 .../doc/images/output_testing_task-sdk-tests.txt   |    2 +-
 .../doc/images/output_testing_ui-e2e-tests.svg     |    4 +-
 .../doc/images/output_testing_ui-e2e-tests.txt     |    2 +-
 dev/breeze/doc/images/output_verify.svg            |  128 +
 dev/breeze/doc/images/output_verify.txt            |    1 +
 .../images/output_workflow-run_publish-docs.svg    |    4 +-
 .../images/output_workflow-run_publish-docs.txt    |    2 +-
 dev/breeze/pyproject.toml                          |   16 +-
 dev/breeze/src/airflow_breeze/breeze.py            |    1 +
 .../src/airflow_breeze/commands/ci_commands.py     |    9 +
 .../airflow_breeze/commands/ci_image_commands.py   |    6 +-
 .../src/airflow_breeze/commands/common_options.py  |   10 +-
 .../airflow_breeze/commands/developer_commands.py  |   62 +-
 .../commands/developer_commands_config.py          |   17 +-
 .../airflow_breeze/commands/kubernetes_commands.py |  535 +-
 .../commands/kubernetes_commands_config.py         |    3 +-
 .../src/airflow_breeze/commands/main_command.py    |   23 +-
 .../commands/minor_release_command.py              |    2 +-
 .../airflow_breeze/commands/registry_commands.py   |    6 +-
 .../commands/release_candidate_command.py          |  140 +-
 .../commands/release_management_commands.py        |    6 +-
 .../commands/release_management_commands_config.py |   11 +
 .../airflow_breeze/commands/testing_commands.py    |   24 +-
 .../commands/testing_commands_config.py            |    5 +-
 .../src/airflow_breeze/commands/ui_commands.py     |    8 +-
 .../src/airflow_breeze/commands/verify_commands.py |  180 +
 .../airflow_breeze/commands/workflow_commands.py   |   23 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |   66 +-
 .../airflow_breeze/params/common_build_params.py   |    2 +-
 .../src/airflow_breeze/params/doc_build_params.py  |    6 -
 .../src/airflow_breeze/params/shell_params.py      |   17 +-
 .../prepare_providers/provider_documentation.py    |   11 +-
 .../templates/pyproject_TEMPLATE.toml.jinja2       |    2 +-
 .../airflow_breeze/utils/check_release_files.py    |   14 +-
 .../airflow_breeze/utils/docker_command_utils.py   |  248 +-
 .../src/airflow_breeze/utils/gh_workflow_utils.py  |   16 +
 dev/breeze/src/airflow_breeze/utils/github.py      |    6 +-
 .../src/airflow_breeze/utils/kubernetes_utils.py   |    6 +-
 dev/breeze/src/airflow_breeze/utils/packages.py    |   33 +-
 dev/breeze/src/airflow_breeze/utils/parallel.py    |    4 +-
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |   10 +-
 .../airflow_breeze/utils/provider_dependencies.py  |   10 -
 .../airflow_breeze/utils/release_constraints.py    |   10 +-
 .../src/airflow_breeze/utils/reproduce_ci.py       |   10 +-
 .../src/airflow_breeze/utils/selective_checks.py   |  316 +-
 .../src/airflow_breeze/utils/verification_plan.py  |  174 +
 .../src/airflow_breeze/utils/workflow_status.py    |    2 +-
 dev/breeze/tests/test_cache.py                     |    2 +-
 dev/breeze/tests/test_ci_image_commands.py         |   22 +-
 dev/breeze/tests/test_ci_upgrade.py                |   16 +-
 dev/breeze/tests/test_developer_commands.py        |   44 +-
 dev/breeze/tests/test_docker_command_utils.py      |  489 +-
 dev/breeze/tests/test_gh_workflow_utils.py         |   31 +
 .../tests/test_kubernetes_lang_sdk_commands.py     |  200 +-
 dev/breeze/tests/test_packages.py                  |   72 +-
 dev/breeze/tests/test_provider_documentation.py    |   48 +
 dev/breeze/tests/test_release_candidate_command.py |   88 +-
 dev/breeze/tests/test_release_constraints.py       |    1 +
 .../tests/test_release_management_commands.py      |    2 +-
 dev/breeze/tests/test_reproduce_ci.py              |   20 +-
 dev/breeze/tests/test_run_test_args.py             |   35 +-
 dev/breeze/tests/test_sbom_commands.py             |    6 +-
 dev/breeze/tests/test_selective_checks.py          |  659 +-
 dev/breeze/tests/test_set_milestone.py             |   40 +-
 dev/breeze/tests/test_shell_params.py              |   98 +-
 dev/breeze/tests/test_ui_commands.py               |    9 +
 dev/breeze/tests/test_verification_plan.py         |  244 +
 dev/breeze/tests/test_verify_commands.py           |  344 +
 dev/breeze/tests/test_workflow_commands.py         |   57 +-
 dev/breeze/uv.lock                                 |  518 +-
 dev/close_prs_over_open_pr_limit.py                |  353 +
 dev/ide_setup/setup_idea.py                        |    2 +-
 dev/ide_setup/setup_vscode.py                      |    2 +-
 dev/mypy/docs/conf.py                              |    2 +-
 dev/mypy/pyproject.toml                            |    8 +-
 dev/provider_db_inventory.py                       |    2 +-
 dev/prune_old_dirs.py                              |    2 +-
 dev/pyproject.toml                                 |    7 +-
 .../react_plugin_template/package.json             |   30 +-
 .../react_plugin_template/pnpm-lock.yaml           |  609 +-
 dev/refresh_images.sh                              |    4 +-
 dev/registry/extract_connections.py                |    4 +-
 dev/registry/extract_metadata.py                   |   28 +-
 dev/registry/extract_parameters.py                 |   50 +-
 dev/registry/extract_versions.py                   |  100 +-
 dev/registry/pyproject.toml                        |   10 +-
 dev/registry/registry_contract_models.py           |   37 +
 dev/registry/registry_tools/docs_guides.py         |  186 +
 dev/registry/registry_tools/uri_schemes.py         |   98 +
 dev/registry/tests/test_docs_guides.py             |  369 ++
 dev/registry/tests/test_extract_metadata.py        |  122 +-
 dev/registry/tests/test_extract_parameters.py      |  107 +-
 dev/registry/tests/test_extract_versions.py        |  251 +-
 dev/registry/tests/test_merge_registry_data.py     |    2 +-
 .../tests/test_registry_contract_models.py         |   11 +-
 dev/registry/tests/test_uri_schemes.py             |  128 +
 dev/retag_docker_images.py                         |    2 +-
 dev/sign.sh                                        |    9 +
 dev/skill-evals/last-eval-hash.txt                 |    2 +-
 dev/sync_fork.sh                                   |    2 +-
 devel-common/pyproject.toml                        |    6 +-
 devel-common/src/docs/README.rst                   |   22 +-
 devel-common/src/docs/build_docs.py                |  273 +-
 devel-common/src/docs/utils/conf_constants.py      |    3 +-
 .../src/sphinx_exts/airflow_intersphinx.py         |   50 +-
 devel-common/src/sphinx_exts/airflow_spelling.py   |  217 +
 .../src/sphinx_exts/docs_build/docs_builder.py     |  114 +-
 .../src/sphinx_exts/docs_build/package_filter.py   |    5 +-
 .../src/sphinx_exts/docs_build/spelling_checks.py  |  115 +-
 .../src/sphinx_exts/providers_extensions.py        |   34 +-
 .../src/sphinx_exts/python_builtin_xrefs.py        |   66 +
 .../provider_connection_services.rst.jinja2        |   28 +
 devel-common/src/tests_common/pytest_plugin.py     |   91 +-
 .../src/tests_common/test_utils/asserts.py         |   89 +-
 .../tests_common/test_utils/attempt_ownership.py   |  165 +
 devel-common/src/tests_common/test_utils/config.py |   24 +-
 devel-common/src/tests_common/test_utils/db.py     |   12 +-
 .../tests_common/test_utils/in_process_taskrun.py  |   40 +-
 .../src/tests_common/test_utils/mapping.py         |   20 +-
 .../src/tests_common/test_utils/mock_executor.py   |    5 +-
 .../src/tests_common/test_utils/mock_plugins.py    |   42 +-
 .../src/tests_common/test_utils/providers.py       |    2 +-
 .../src/tests_common/test_utils/taskinstance.py    |   22 +-
 devel-common/tests/conftest.py                     |   20 +
 .../sphinx_exts/docs_build/test_docs_builder.py    |   52 +
 .../sphinx_exts/docs_build/test_spelling_checks.py |  134 +
 .../unit/sphinx_exts/test_airflow_intersphinx.py   |   51 -
 .../unit/sphinx_exts/test_airflow_spelling.py      |  213 +
 .../unit/sphinx_exts/test_providers_extensions.py  |   57 +
 .../unit/sphinx_exts/test_python_builtin_xrefs.py  |   92 +
 .../tests/unit/tests_common/test_dag_maker.py      |  100 +
 docker-stack-docs/build.rst                        |   14 +-
 docker-stack-docs/changelog.rst                    |    3 +
 .../restricted/restricted_environments.sh          |   12 +-
 docker-stack-docs/entrypoint.rst                   |   14 +-
 docker-stack-docs/pyproject.toml                   |   14 +-
 docker-tests/pyproject.toml                        |    7 +-
 docker-tests/tests/docker_tests/constants.py       |    2 +-
 docker-tests/tests/docker_tests/docker_utils.py    |    4 +-
 docker-tests/tests/docker_tests/test_prod_image.py |    9 +-
 docs/README.md                                     |    4 +-
 docs/spelling_wordlist.txt                         |   28 +
 generated/PYPI_README.md                           |   24 +-
 generated/known_airflow_exceptions.txt             |    8 +-
 generated/known_sdk_imports_in_core.txt            |   11 +-
 generated/provider_metadata.json                   |  506 +-
 go-sdk/.pre-commit-config.yaml                     |    7 +
 go-sdk/Justfile                                    |    4 +
 go-sdk/README.md                                   |  184 +-
 go-sdk/adr/0006-cross-language-argument-binding.md |   15 +-
 .../adr/0007-mixed-lang-task-handler-interface.md  |    6 +-
 go-sdk/adr/0008-native-dag-interface.md            |   51 +-
 go-sdk/airflow/bundle.go                           |  211 +-
 go-sdk/airflow/bundle_test.go                      |  334 +-
 go-sdk/airflow/conformance_test.go                 |  356 ++
 go-sdk/airflow/dag.go                              |  575 ++
 go-sdk/airflow/dag_factory_test.go                 |   24 +
 go-sdk/airflow/dag_source_test.go                  |   65 +
 go-sdk/airflow/dag_test.go                         |  550 ++
 go-sdk/airflow/enums.go                            |  163 +
 go-sdk/airflow/enums_test.go                       |  221 +
 go-sdk/airflow/export_test.go                      |   42 +
 go-sdk/airflow/if.go                               |  236 +
 go-sdk/airflow/if_test.go                          |  684 ++
 go-sdk/airflow/inputs.go                           |  315 +
 go-sdk/airflow/inputs_test.go                      |  703 ++
 go-sdk/airflow/node.go                             |  471 ++
 go-sdk/airflow/node_test.go                        |  541 ++
 go-sdk/airflow/serialize.go                        |  760 +++
 go-sdk/airflow/serialize_test.go                   | 1177 ++++
 go-sdk/airflow/serve.go                            |   15 +-
 go-sdk/airflow/serve_test.go                       |  102 +-
 go-sdk/airflow/spec.gen.go                         |  211 +
 go-sdk/airflow/spec.go                             |   98 +
 go-sdk/airflow/spec_fields.gen.go                  |   82 +
 go-sdk/airflow/switch.go                           |  253 +
 go-sdk/airflow/switch_test.go                      |  583 ++
 go-sdk/airflow/task_group.go                       |  589 ++
 go-sdk/airflow/task_group_test.go                  | 1377 ++++
 go-sdk/airflow/task_handler.go                     |   29 +-
 go-sdk/airflow/task_handler_test.go                |   15 +-
 go-sdk/airflow/task_option.go                      |   49 +
 go-sdk/airflow/testdata/foreignnode/main.go        |   39 +
 go-sdk/airflow/testdata/foreigntaskoption/main.go  |   34 +
 go-sdk/airflow/trigger_dag_run.go                  |  286 +
 go-sdk/airflow/trigger_dag_run_test.go             |  382 ++
 go-sdk/capabilities.yaml                           |   19 +-
 go-sdk/cmd/airflow-go-pack/inspect.go              |   59 +-
 go-sdk/cmd/airflow-go-pack/inspect_test.go         |   89 +-
 go-sdk/cmd/airflow-go-pack/main.go                 |    9 +-
 go-sdk/cmd/airflow-go-pack/pack.go                 |  127 +-
 .../cmd/airflow-go-pack/pack_integration_test.go   |   26 +-
 go-sdk/cmd/airflow-go-pack/pack_test.go            |  138 +-
 go-sdk/cmd/airflow-go-pack/sources.go              |  256 +
 go-sdk/cmd/airflow-go-pack/sources_test.go         |  430 ++
 .../airflow-go-pack/testdata/handlersonly/main.go  |   36 +
 .../testdata/multidag/factory/factory.go           |   29 +
 .../cmd/airflow-go-pack/testdata/multidag/main.go  |   49 +
 .../testdata/multidag/reports/reports.go           |   29 +
 go-sdk/dags/go_examples.py                         |   47 +-
 go-sdk/example/bundle/Justfile                     |    9 +-
 .../bundle/concurrentxcom/concurrentxcom_test.go   |    6 +-
 go-sdk/example/bundle/main.go                      |   17 +-
 .../bundle/taskflowbinding/taskflowbinding.go      |   61 +-
 .../bundle/taskflowbinding/taskflowbinding_test.go |   44 +-
 go-sdk/example/bundle/taskstate/taskstate.go       |   99 +
 go-sdk/example/dynamic/dags.go                     |   67 +
 go-sdk/example/dynamic/dags.yaml                   |   24 +
 go-sdk/example/dynamic/main.go                     |   60 +
 go-sdk/example/native/main.go                      |  177 +
 go-sdk/example/native/report.go                    |   35 +
 go-sdk/internal/airflowmetadata/airflowmetadata.go |    3 +
 go-sdk/internal/bundle/doc.go                      |    9 +-
 go-sdk/internal/bundle/task.go                     |  175 +-
 go-sdk/internal/bundle/task_test.go                |  245 +
 go-sdk/internal/bundle/trigger.go                  |   64 +
 go-sdk/internal/genlicense/genlicense.go           |   71 +
 go-sdk/internal/genlicense/genlicense_test.go      |   83 +
 go-sdk/internal/genspec/authoring.go               |  522 ++
 go-sdk/internal/genspec/authoring_test.go          |  374 ++
 go-sdk/internal/genspec/fields.go                  |  169 +
 go-sdk/internal/genspec/fields_test.go             |  126 +
 go-sdk/internal/genspec/main.go                    |  147 +
 go-sdk/internal/genspec/main_test.go               |   37 +
 go-sdk/internal/genspec/normalize.go               |  178 +
 go-sdk/internal/genspec/normalize_test.go          |  272 +
 go-sdk/pkg/binding/binding.go                      |  119 +-
 go-sdk/pkg/binding/binding_test.go                 |  153 +-
 go-sdk/pkg/execution/client.go                     |  385 +-
 go-sdk/pkg/execution/client_test.go                |  827 ++-
 go-sdk/pkg/execution/comms.go                      |   13 +-
 go-sdk/pkg/execution/comms_test.go                 |   10 +-
 go-sdk/pkg/execution/dag_parse.go                  |   79 +
 go-sdk/pkg/execution/dag_parse_test.go             |  202 +
 go-sdk/pkg/execution/frames.go                     |   14 +-
 .../pkg/execution/genmodels/discriminators.gen.go  |    8 +
 go-sdk/pkg/execution/genmodels/gen.go              |   13 +-
 go-sdk/pkg/execution/genmodels/gen/main.go         |   49 +-
 go-sdk/pkg/execution/genmodels/models.gen.go       |  112 +-
 go-sdk/pkg/execution/integration_test.go           |  570 +-
 go-sdk/pkg/execution/messages.go                   |    6 +-
 go-sdk/pkg/execution/messages_test.go              |   27 +-
 go-sdk/pkg/execution/metadata.go                   |    5 +
 go-sdk/pkg/execution/metadata_test.go              |   36 +
 go-sdk/pkg/execution/server.go                     |   22 +-
 go-sdk/pkg/execution/task_runner.go                |   89 +-
 go-sdk/pkg/execution/trigger_runner.go             |  418 ++
 go-sdk/pkg/execution/trigger_runner_test.go        |  648 ++
 go-sdk/schema/dag-schema.json                      |  497 ++
 go-sdk/schema/supervisor-schema.json               | 5427 ++++++++++++++++
 go-sdk/sdk/doc.go                                  |    8 +-
 go-sdk/sdk/errors.go                               |    6 +
 go-sdk/sdk/sdk.go                                  |   93 +-
 java-sdk/README.md                                 |  101 +-
 java-sdk/adr/0002-native-dag-interface.md          |    7 +-
 java-sdk/buildSrc/build.gradle.kts                 |    2 +-
 java-sdk/capabilities.yaml                         |   40 +-
 .../apache/airflow/example/AnnotationExample.java  |   10 +-
 .../airflow/example/ExampleBundleBuilder.java      |    7 +-
 .../apache/airflow/example/XComCastingExample.java |   16 +-
 .../example/nativedag/AnnotationExample.java       |  122 +
 .../example/nativedag/InterfaceExample.java        |  131 +
 .../airflow/example/nativedag/TargetExample.java   |   49 +
 java-sdk/gradle/verification-metadata.xml          |  478 +-
 java-sdk/plugin/build.gradle.kts                   |    6 +
 .../apache/airflow/sdk/plugin/AirflowSdkPlugin.kt  |   82 +-
 .../org/apache/airflow/sdk/plugin/ClassFiles.kt    |   85 +
 .../apache/airflow/sdk/plugin/PackDagSources.kt    |  256 +
 .../airflow/sdk/plugin/AirflowSdkPluginTest.kt     |  415 ++
 .../apache/airflow/sdk/plugin/ClassFilesTest.kt    |   80 +
 .../airflow/sdk/plugin/PackDagSourcesTest.kt       |   89 +
 .../org/apache/airflow/sdk/plugin/TestSupport.kt   |   45 +
 java-sdk/processor/build.gradle.kts                |    2 +-
 .../org/apache/airflow/sdk/AirflowProcessor.kt     | 1140 ++++
 .../org/apache/airflow/sdk/BuilderProcessor.kt     |  436 --
 .../services/javax.annotation.processing.Processor |    2 +-
 .../org/apache/airflow/sdk/AirflowProcessorTest.kt | 2822 ++++++++
 .../kotlin/org/apache/airflow/sdk/BuilderTest.kt   |  868 ---
 java-sdk/scala_spark_example/README.md             |    6 +-
 .../ci/prek/check_serialization_conformance.py     |   63 +
 java-sdk/sdk/build.gradle.kts                      |  613 +-
 java-sdk/sdk/module.md                             |   28 +-
 java-sdk/sdk/schema/dag-schema.json                |  497 ++
 .../src/main/kotlin/org/apache/airflow/sdk/Arg.kt  |   94 +
 .../main/kotlin/org/apache/airflow/sdk/Builder.kt  |  109 -
 .../main/kotlin/org/apache/airflow/sdk/Bundle.kt   |  140 +-
 .../org/apache/airflow/sdk/BundleInspector.kt      |  113 +
 .../main/kotlin/org/apache/airflow/sdk/Client.kt   |  128 +
 .../kotlin/org/apache/airflow/sdk/Condition.kt     |  224 +
 .../main/kotlin/org/apache/airflow/sdk/Context.kt  |   10 +-
 .../main/kotlin/org/apache/airflow/sdk/DagDef.kt   |  416 +-
 .../main/kotlin/org/apache/airflow/sdk/Decider.kt  |   90 +
 .../src/main/kotlin/org/apache/airflow/sdk/Deps.kt |  187 +
 .../main/kotlin/org/apache/airflow/sdk/Endpoint.kt |   29 +
 .../kotlin/org/apache/airflow/sdk/IdValidation.kt  |   86 +
 .../kotlin/org/apache/airflow/sdk/InputTask.kt     |    2 +-
 .../main/kotlin/org/apache/airflow/sdk/Server.kt   |  120 +-
 .../main/kotlin/org/apache/airflow/sdk/Switch.kt   |  240 +
 .../kotlin/org/apache/airflow/sdk/TaskGroupRef.kt  |  192 +
 .../kotlin/org/apache/airflow/sdk/TaskInput.kt     |    4 +-
 .../kotlin/org/apache/airflow/sdk/TriggerDagRun.kt |  189 +
 .../org/apache/airflow/sdk/execution/Client.kt     |  162 +
 .../org/apache/airflow/sdk/execution/Comm.kt       |   16 +
 .../org/apache/airflow/sdk/execution/Frame.kt      |    3 +-
 .../org/apache/airflow/sdk/execution/Logger.kt     |    5 +
 .../org/apache/airflow/sdk/execution/Serde.kt      |  585 ++
 .../org/apache/airflow/sdk/execution/Task.kt       |   47 +-
 .../apache/airflow/sdk/execution/TriggerRunner.kt  |  324 +
 .../org/apache/airflow/sdk/internal/ArgValues.kt   |  126 +-
 .../org/apache/airflow/sdk/internal/DagSource.kt   |   66 +
 .../org/apache/airflow/sdk/internal/Fields.kt      |  140 +
 .../kotlin/org/apache/airflow/sdk/internal/Ids.kt  |   39 +
 .../org/apache/airflow/sdk/internal/InputTypes.kt  |    2 +-
 .../kotlin/org/apache/airflow/sdk/internal/Refs.kt |  181 +
 .../org/apache/airflow/sdk/internal/Registrar.kt   |   25 +-
 .../org/apache/airflow/sdk/internal/TaskArgs.kt    |   42 +-
 .../apache/airflow/example/DagSourceFixtures.kt    |   51 +
 .../org/apache/airflow/sdk/ArgTestSupport.kt       |   57 +
 .../kotlin/org/apache/airflow/sdk/ArgValuesTest.kt |   13 +-
 .../org/apache/airflow/sdk/BundleInspectorTest.kt  |  164 +
 .../kotlin/org/apache/airflow/sdk/BundleTest.kt    |  197 +-
 .../kotlin/org/apache/airflow/sdk/ClientTest.kt    |  203 +-
 .../kotlin/org/apache/airflow/sdk/ConditionTest.kt |  208 +
 .../kotlin/org/apache/airflow/sdk/DagDefTest.kt    |  254 +
 .../kotlin/org/apache/airflow/sdk/DagSourceTest.kt |  132 +
 .../org/apache/airflow/sdk/IdValidationTest.kt     |  105 +
 .../kotlin/org/apache/airflow/sdk/InputTaskTest.kt |   90 +
 .../kotlin/org/apache/airflow/sdk/ServerTest.kt    |   67 +-
 .../kotlin/org/apache/airflow/sdk/SwitchTest.kt    |  224 +
 .../kotlin/org/apache/airflow/sdk/TaskGroupTest.kt |  286 +
 .../org/apache/airflow/sdk/TriggerDagRunTest.kt    |  275 +
 .../airflow/sdk/conformance/SerializeJava.kt       |  317 +
 .../org/apache/airflow/sdk/execution/CommTest.kt   |  295 +-
 .../org/apache/airflow/sdk/execution/SerdeTest.kt  |  428 ++
 .../org/apache/airflow/sdk/execution/TaskTest.kt   |  362 ++
 .../airflow/sdk/execution/TriggerRunnerTest.kt     |  473 ++
 .../apache/airflow/sdk/internal/ArgValuesTest.kt   |  306 +
 .../org/apache/airflow/sdk/internal/RefsTest.kt    |  271 +
 .../apache/airflow/sdk/internal/RegistrarTest.kt   |   32 +
 kubernetes-tests/lang_sdk/Dockerfile.java          |   31 -
 kubernetes-tests/lang_sdk/Dockerfile.runtimes      |   49 +
 kubernetes-tests/lang_sdk/README.md                |  145 +-
 .../lang_sdk/airflowignore_all                     |    0
 kubernetes-tests/lang_sdk/config/values.yaml       |   65 +-
 .../lang_sdk/dags/lang_sdk_combined.py             |   80 -
 .../lang_sdk/dags/lang_sdk_mixed_language.py       |   94 +
 kubernetes-tests/lang_sdk/go_example/main.go       |   21 +-
 .../apache/airflow/k8sexample/CombinedExample.java |   47 -
 .../airflow/k8sexample/K8sBundleBuilder.java       |   17 +-
 .../airflow/k8sexample/MixedLanguageExample.java   |   46 +
 .../lang_sdk/pod_templates/lang_sdk_golang.yaml    |  117 -
 .../lang_sdk/pod_templates/lang_sdk_java.yaml      |  115 -
 .../lang_sdk/pod_templates/lang_sdk_worker.yaml    |   84 +
 kubernetes-tests/lang_sdk/stage_artifacts.py       |   92 -
 kubernetes-tests/lang_sdk/ts_example/.gitignore    |    3 +
 kubernetes-tests/lang_sdk/ts_example/package.json  |   20 +
 .../lang_sdk/ts_example/pnpm-lock.yaml             |  336 +
 kubernetes-tests/lang_sdk/ts_example/src/main.ts   |   47 +
 kubernetes-tests/lang_sdk/ts_example/tsconfig.json |   25 +
 kubernetes-tests/pyproject.toml                    |    7 +-
 .../tests/kubernetes_tests/test_base.py            |    6 +-
 .../kubernetes_tests/test_kubernetes_executor.py   |   89 +-
 .../test_kubernetes_pod_operator.py                |    2 +-
 .../test_lang_sdk_coordinator_executor.py          |   88 -
 .../test_lang_sdk_mixed_language.py                |   90 +
 .../kubernetes_tests/test_lang_sdk_native_dag.py   |  206 +
 performance/pyproject.toml                         |    4 +-
 providers-summary-docs/installing-from-pypi.rst    |    2 +-
 providers-summary-docs/pyproject.toml              |   14 +-
 providers/.last_release_date.txt                   |    2 +-
 providers/.pre-commit-config.yaml                  |    7 +
 providers/MANAGING_PROVIDERS_LIFECYCLE.rst         |   22 +-
 providers/airbyte/README.rst                       |    8 +-
 providers/airbyte/docs/changelog.rst               |   22 +
 providers/airbyte/docs/connections.rst             |   10 +-
 providers/airbyte/docs/index.rst                   |    6 +-
 providers/airbyte/provider.yaml                    |    3 +-
 providers/airbyte/pyproject.toml                   |   11 +-
 .../src/airflow/providers/airbyte/__init__.py      |    2 +-
 .../src/airflow/providers/airbyte/hooks/airbyte.py |   37 +-
 .../tests/unit/airbyte/hooks/test_airbyte.py       |   61 +
 providers/akeyless/README.rst                      |    8 +-
 providers/akeyless/docs/changelog.rst              |   27 +
 providers/akeyless/docs/index.rst                  |    6 +-
 providers/akeyless/provider.yaml                   |    3 +-
 providers/akeyless/pyproject.toml                  |   11 +-
 .../src/airflow/providers/akeyless/__init__.py     |    2 +-
 .../airflow/providers/akeyless/secrets/akeyless.py |   28 +-
 .../tests/unit/akeyless/secrets/test_akeyless.py   |   27 +-
 providers/alibaba/README.rst                       |    8 +-
 providers/alibaba/docs/changelog.rst               |   17 +
 providers/alibaba/docs/index.rst                   |    6 +-
 providers/alibaba/provider.yaml                    |    3 +-
 providers/alibaba/pyproject.toml                   |   11 +-
 .../src/airflow/providers/alibaba/__init__.py      |    2 +-
 providers/amazon/README.rst                        |   18 +-
 .../docs/auth-manager/setup/identity-center.rst    |   46 +
 providers/amazon/docs/bundles/index.rst            |    5 +
 providers/amazon/docs/changelog.rst                |   61 +
 providers/amazon/docs/executors/batch-executor.rst |    4 +
 providers/amazon/docs/executors/ecs-executor.rst   |    4 +
 providers/amazon/docs/executors/general.rst        |   19 +-
 .../amazon/docs/executors/lambda-executor.rst      |   25 +
 providers/amazon/docs/index.rst                    |   16 +-
 providers/amazon/docs/message-queues/index.rst     |   55 +
 providers/amazon/docs/operators/bedrock.rst        |   40 +
 providers/amazon/docs/operators/duckdb.rst         |  192 +
 providers/amazon/docs/operators/ecs.rst            |   35 +
 .../amazon/docs/operators/emr/emr_serverless.rst   |   23 +
 providers/amazon/docs/operators/step_functions.rst |   11 +
 providers/amazon/docs/transfer/exasol_to_s3.rst    |   63 +
 providers/amazon/provider.yaml                     |   51 +-
 providers/amazon/pyproject.toml                    |   32 +-
 .../src/airflow/providers/amazon/__init__.py       |    2 +-
 .../providers/amazon/aws/auth_manager/constants.py |    1 +
 .../amazon/aws/auth_manager/routes/login.py        |  205 +-
 .../src/airflow/providers/amazon/aws/bundles/s3.py |    6 +-
 .../src/airflow/providers/amazon/aws/exceptions.py |    4 +
 .../aws/executors/aws_lambda/docker/Dockerfile     |    4 +
 .../amazon/aws/executors/aws_lambda/docker/app.py  |    7 +
 .../aws/executors/aws_lambda/lambda_executor.py    |   67 +-
 .../amazon/aws/executors/batch/batch_executor.py   |   15 +-
 .../providers/amazon/aws/executors/batch/utils.py  |    6 +-
 .../amazon/aws/executors/ecs/ecs_executor.py       |    5 +-
 .../airflow/providers/amazon/aws/hooks/base_aws.py |    7 +-
 .../airflow/providers/amazon/aws/hooks/bedrock.py  |  229 +-
 .../airflow/providers/amazon/aws/hooks/duckdb.py   |  277 +
 .../src/airflow/providers/amazon/aws/hooks/eks.py  |    6 +-
 .../src/airflow/providers/amazon/aws/hooks/emr.py  |   51 +
 .../src/airflow/providers/amazon/aws/hooks/s3.py   |    8 +-
 .../amazon/aws/log/cloudwatch_task_handler.py      |    8 +-
 .../airflow/providers/amazon/aws/operators/ecs.py  |    3 +
 .../airflow/providers/amazon/aws/operators/eks.py  |   20 +-
 .../airflow/providers/amazon/aws/operators/emr.py  |  112 +
 .../amazon/aws/operators/step_function.py          |    5 +-
 .../airflow/providers/amazon/aws/queues/kinesis.py |   48 +
 .../providers/amazon/aws/transfers/exasol_to_s3.py |    5 +-
 .../airflow/providers/amazon/aws/triggers/emr.py   |   48 +
 .../airflow/providers/amazon/aws/utils/__init__.py |    4 +-
 .../providers/amazon/aws/utils/eks_get_token.py    |    4 +-
 .../airflow/providers/amazon/aws/utils/mixins.py   |    4 +-
 .../providers/amazon/aws/utils/task_log_fetcher.py |   42 +-
 .../amazon/aws/utils/waiter_with_logging.py        |   24 +-
 .../providers/amazon/aws/waiters/comprehend.json   |   55 +
 .../amazon/aws/waiters/emr-serverless.json         |   37 +
 .../airflow/providers/amazon/get_provider_info.py  |   36 +-
 .../system/amazon/aws/example_athena_spark.py      |   52 +-
 .../aws/example_comprehend_document_classifier.py  |   21 +-
 .../tests/system/amazon/aws/example_duckdb.py      |  158 +
 .../amazon/aws/example_emr_serverless_session.py   |  103 +
 .../system/amazon/aws/example_exasol_to_s3.py      |   92 +
 .../amazon/aws/example_kinesis_message_queue.py    |   98 +
 .../system/amazon/aws/example_neptune_analytics.py |   20 +-
 .../amazon/aws/tests/test_aws_auth_manager.py      |   65 +-
 .../amazon/aws/tests/test_lambda_executor_dlq.py   |    4 +-
 .../amazon/aws/auth_manager/routes/test_login.py   |  374 +-
 .../tests/unit/amazon/aws/bundles/test_s3.py       |   33 +
 .../executors/aws_lambda/test_lambda_executor.py   |  150 +-
 .../aws/executors/batch/test_batch_executor.py     |  145 +-
 .../tests/unit/amazon/aws/executors/conftest.py    |   45 +
 .../amazon/aws/executors/ecs/test_ecs_executor.py  |  173 +-
 .../utils/test_exponential_backoff_retry.py        |   20 +-
 .../tests/unit/amazon/aws/hooks/test_base_aws.py   |   11 +-
 .../tests/unit/amazon/aws/hooks/test_bedrock.py    |  280 +
 .../tests/unit/amazon/aws/hooks/test_duckdb.py     |  307 +
 .../amazon/tests/unit/amazon/aws/hooks/test_eks.py |   40 +-
 .../unit/amazon/aws/hooks/test_emr_serverless.py   |   57 +
 .../amazon/tests/unit/amazon/aws/hooks/test_s3.py  |   25 +-
 .../tests/unit/amazon/aws/hooks/test_sagemaker.py  |    4 +-
 .../amazon/aws/log/test_cloudwatch_task_handler.py |    4 +-
 .../tests/unit/amazon/aws/operators/test_ecs.py    |   26 -
 .../tests/unit/amazon/aws/operators/test_eks.py    |  103 +-
 .../aws/operators/test_emr_serverless_session.py   |  137 +
 .../amazon/aws/operators/test_neptune_analytics.py |    6 -
 .../amazon/aws/operators/test_step_function.py     |   51 +
 .../tests/unit/amazon/aws/queues/test_kinesis.py   |  185 +
 .../amazon/aws/test_deferred_hook_configuration.py |  242 +-
 .../unit/amazon/aws/transfers/test_mongo_to_s3.py  |   10 -
 .../unit/amazon/aws/transfers/test_s3_to_sftp.py   |   12 +
 .../unit/amazon/aws/transfers/test_sftp_to_s3.py   |   12 +
 .../tests/unit/amazon/aws/triggers/test_eks.py     |    2 +-
 .../tests/unit/amazon/aws/triggers/test_emr.py     |   60 +
 .../tests/unit/amazon/aws/triggers/test_kinesis.py |    4 +-
 .../unit/amazon/aws/utils/test_task_log_fetcher.py |   36 +-
 .../tests/unit/amazon/aws/utils/test_utils.py      |    2 +-
 .../amazon/aws/utils/test_waiter_with_logging.py   |  135 +-
 .../unit/amazon/aws/waiters/test_comprehend.py     |   54 +
 providers/anthropic/README.rst                     |   10 +-
 providers/anthropic/docs/changelog.rst             |   22 +
 providers/anthropic/docs/commits.rst               |    5 +-
 providers/anthropic/docs/index.rst                 |    8 +-
 providers/anthropic/provider.yaml                  |    3 +-
 providers/anthropic/pyproject.toml                 |   13 +-
 .../src/airflow/providers/anthropic/__init__.py    |    2 +-
 .../airflow/providers/anthropic/hooks/anthropic.py |  107 +-
 .../tests/unit/anthropic/hooks/test_anthropic.py   |  141 +-
 providers/apache/arrow/README.rst                  |    8 +-
 providers/apache/arrow/docs/changelog.rst          |   19 +
 providers/apache/arrow/docs/commits.rst            |    8 +-
 providers/apache/arrow/docs/index.rst              |    6 +-
 providers/apache/arrow/provider.yaml               |    3 +-
 providers/apache/arrow/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/arrow/__init__.py |    2 +-
 providers/apache/beam/README.rst                   |   11 +-
 providers/apache/beam/docs/changelog.rst           |   17 +
 providers/apache/beam/docs/index.rst               |    9 +-
 providers/apache/beam/provider.yaml                |    3 +-
 providers/apache/beam/pyproject.toml               |   14 +-
 .../src/airflow/providers/apache/beam/__init__.py  |    2 +-
 .../airflow/providers/apache/beam/hooks/beam.py    |   45 +-
 .../beam/tests/unit/apache/beam/hooks/test_beam.py |   42 +
 providers/apache/cassandra/README.rst              |    8 +-
 providers/apache/cassandra/docs/changelog.rst      |   17 +
 providers/apache/cassandra/docs/index.rst          |    6 +-
 providers/apache/cassandra/provider.yaml           |    3 +-
 providers/apache/cassandra/pyproject.toml          |   11 +-
 .../airflow/providers/apache/cassandra/__init__.py |    2 +-
 providers/apache/drill/README.rst                  |    8 +-
 providers/apache/drill/docs/changelog.rst          |   21 +
 providers/apache/drill/docs/index.rst              |    6 +-
 providers/apache/drill/provider.yaml               |    3 +-
 providers/apache/drill/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/drill/__init__.py |    2 +-
 providers/apache/druid/README.rst                  |    8 +-
 providers/apache/druid/docs/changelog.rst          |   17 +
 providers/apache/druid/docs/index.rst              |    6 +-
 providers/apache/druid/provider.yaml               |    3 +-
 providers/apache/druid/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/druid/__init__.py |    2 +-
 providers/apache/flink/README.rst                  |    8 +-
 providers/apache/flink/docs/changelog.rst          |   17 +
 providers/apache/flink/docs/index.rst              |    6 +-
 providers/apache/flink/provider.yaml               |    3 +-
 providers/apache/flink/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/flink/__init__.py |    2 +-
 providers/apache/hdfs/README.rst                   |    8 +-
 providers/apache/hdfs/docs/changelog.rst           |   17 +
 providers/apache/hdfs/docs/index.rst               |    6 +-
 providers/apache/hdfs/provider.yaml                |    3 +-
 providers/apache/hdfs/pyproject.toml               |   11 +-
 .../src/airflow/providers/apache/hdfs/__init__.py  |    2 +-
 providers/apache/hive/README.rst                   |   10 +-
 providers/apache/hive/docs/changelog.rst           |   19 +
 providers/apache/hive/docs/index.rst               |    8 +-
 providers/apache/hive/provider.yaml                |    3 +-
 providers/apache/hive/pyproject.toml               |   13 +-
 .../src/airflow/providers/apache/hive/__init__.py  |    2 +-
 .../airflow/providers/apache/hive/hooks/hive.py    |    3 +-
 providers/apache/iceberg/README.rst                |    8 +-
 providers/apache/iceberg/docs/changelog.rst        |   20 +
 providers/apache/iceberg/docs/index.rst            |    6 +-
 providers/apache/iceberg/provider.yaml             |    3 +-
 providers/apache/iceberg/pyproject.toml            |   11 +-
 .../airflow/providers/apache/iceberg/__init__.py   |    2 +-
 providers/apache/impala/README.rst                 |   16 +-
 providers/apache/impala/docs/changelog.rst         |   24 +
 providers/apache/impala/docs/index.rst             |   14 +-
 providers/apache/impala/provider.yaml              |    3 +-
 providers/apache/impala/pyproject.toml             |   13 +-
 .../airflow/providers/apache/impala/__init__.py    |    2 +-
 providers/apache/kafka/README.rst                  |    8 +-
 providers/apache/kafka/docs/changelog.rst          |   29 +
 providers/apache/kafka/docs/index.rst              |    6 +-
 providers/apache/kafka/docs/triggers.rst           |   33 +
 providers/apache/kafka/provider.yaml               |    4 +-
 providers/apache/kafka/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/kafka/__init__.py |    2 +-
 .../providers/apache/kafka/get_provider_info.py    |    1 +
 .../apache/kafka/plugins/event_producer.py         |    4 +-
 .../apache/kafka/triggers/shared_stream.py         |  407 ++
 .../providers/apache/kafka/version_compat.py       |    2 +
 .../apache/kafka/triggers/test_shared_stream.py    |  259 +
 .../tests/unit/apache/kafka/hooks/test_consume.py  |    9 +-
 .../tests/unit/apache/kafka/hooks/test_produce.py  |    9 +-
 .../apache/kafka/triggers/test_await_message.py    |   49 +-
 .../unit/apache/kafka/triggers/test_msg_queue.py   |    5 +-
 .../apache/kafka/triggers/test_shared_stream.py    |  481 ++
 providers/apache/kylin/README.rst                  |    8 +-
 providers/apache/kylin/docs/changelog.rst          |   17 +
 providers/apache/kylin/docs/index.rst              |    6 +-
 providers/apache/kylin/provider.yaml               |    3 +-
 providers/apache/kylin/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/kylin/__init__.py |    2 +-
 providers/apache/livy/README.rst                   |    8 +-
 providers/apache/livy/docs/changelog.rst           |   19 +
 providers/apache/livy/docs/index.rst               |    6 +-
 providers/apache/livy/provider.yaml                |    3 +-
 providers/apache/livy/pyproject.toml               |   11 +-
 .../src/airflow/providers/apache/livy/__init__.py  |    2 +-
 .../airflow/providers/apache/livy/triggers/livy.py |    8 +-
 .../livy/tests/unit/apache/livy/hooks/test_livy.py |    5 -
 providers/apache/pig/README.rst                    |    8 +-
 providers/apache/pig/docs/changelog.rst            |   17 +
 providers/apache/pig/docs/index.rst                |    6 +-
 providers/apache/pig/provider.yaml                 |    3 +-
 providers/apache/pig/pyproject.toml                |   11 +-
 .../src/airflow/providers/apache/pig/__init__.py   |    2 +-
 providers/apache/pinot/README.rst                  |    8 +-
 providers/apache/pinot/docs/changelog.rst          |   21 +
 providers/apache/pinot/docs/index.rst              |    6 +-
 providers/apache/pinot/provider.yaml               |    3 +-
 providers/apache/pinot/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/pinot/__init__.py |    2 +-
 providers/apache/spark/README.rst                  |    8 +-
 providers/apache/spark/docs/changelog.rst          |   27 +
 providers/apache/spark/docs/index.rst              |    6 +-
 providers/apache/spark/provider.yaml               |    3 +-
 providers/apache/spark/pyproject.toml              |   11 +-
 .../src/airflow/providers/apache/spark/__init__.py |    2 +-
 .../providers/apache/spark/hooks/spark_submit.py   |  146 +-
 .../unit/apache/spark/hooks/test_spark_submit.py   |  609 +-
 providers/apache/tinkerpop/README.rst              |    8 +-
 providers/apache/tinkerpop/docs/changelog.rst      |   17 +
 providers/apache/tinkerpop/docs/index.rst          |    6 +-
 providers/apache/tinkerpop/provider.yaml           |    7 +-
 providers/apache/tinkerpop/pyproject.toml          |   12 +-
 .../airflow/providers/apache/tinkerpop/__init__.py |    2 +-
 providers/apprise/README.rst                       |    8 +-
 providers/apprise/docs/changelog.rst               |   17 +
 providers/apprise/docs/index.rst                   |    6 +-
 providers/apprise/provider.yaml                    |    3 +-
 providers/apprise/pyproject.toml                   |   11 +-
 .../src/airflow/providers/apprise/__init__.py      |    2 +-
 providers/arangodb/README.rst                      |    8 +-
 providers/arangodb/docs/changelog.rst              |   17 +
 providers/arangodb/docs/index.rst                  |    6 +-
 providers/arangodb/provider.yaml                   |    3 +-
 providers/arangodb/pyproject.toml                  |   11 +-
 .../src/airflow/providers/arangodb/__init__.py     |    2 +-
 providers/asana/README.rst                         |    8 +-
 providers/asana/docs/changelog.rst                 |   17 +
 providers/asana/docs/index.rst                     |    6 +-
 providers/asana/provider.yaml                      |    3 +-
 providers/asana/pyproject.toml                     |   11 +-
 .../asana/src/airflow/providers/asana/__init__.py  |    2 +-
 providers/atlassian/jira/README.rst                |    8 +-
 providers/atlassian/jira/docs/changelog.rst        |   17 +
 providers/atlassian/jira/docs/index.rst            |    6 +-
 providers/atlassian/jira/provider.yaml             |    3 +-
 providers/atlassian/jira/pyproject.toml            |   11 +-
 .../airflow/providers/atlassian/jira/__init__.py   |    2 +-
 providers/celery/README.rst                        |    8 +-
 providers/celery/docs/celery_executor.rst          |   59 +
 providers/celery/docs/changelog.rst                |   28 +
 providers/celery/docs/index.rst                    |    6 +-
 providers/celery/provider.yaml                     |   17 +-
 providers/celery/pyproject.toml                    |   11 +-
 .../src/airflow/providers/celery/__init__.py       |    2 +-
 .../providers/celery/executors/celery_executor.py  |   34 +-
 .../celery/executors/celery_executor_utils.py      |   27 +-
 .../airflow/providers/celery/get_provider_info.py  |    7 +
 .../integration/celery/test_celery_executor.py     |   30 +-
 .../unit/celery/executors/test_celery_executor.py  |  413 +-
 providers/clickhousedb/README.rst                  |    8 +-
 providers/clickhousedb/docs/changelog.rst          |   28 +
 providers/clickhousedb/docs/index.rst              |    6 +-
 providers/clickhousedb/provider.yaml               |    3 +-
 providers/clickhousedb/pyproject.toml              |   11 +-
 .../src/airflow/providers/clickhousedb/__init__.py |    2 +-
 .../unit/clickhousedb/hooks/test_clickhouse.py     |    3 -
 providers/cloudant/README.rst                      |    8 +-
 providers/cloudant/docs/changelog.rst              |   17 +
 providers/cloudant/docs/index.rst                  |    6 +-
 providers/cloudant/provider.yaml                   |    3 +-
 providers/cloudant/pyproject.toml                  |   11 +-
 .../src/airflow/providers/cloudant/__init__.py     |    2 +-
 providers/cncf/kubernetes/README.rst               |    8 +-
 providers/cncf/kubernetes/docs/changelog.rst       |   35 +
 providers/cncf/kubernetes/docs/index.rst           |    6 +-
 .../cncf/kubernetes/docs/kubernetes_executor.rst   |    9 +
 providers/cncf/kubernetes/provider.yaml            |   27 +-
 providers/cncf/kubernetes/pyproject.toml           |   11 +-
 .../airflow/providers/cncf/kubernetes/__init__.py  |    2 +-
 .../kubernetes/executors/kubernetes_executor.py    |  182 +-
 .../executors/kubernetes_executor_types.py         |   44 +-
 .../executors/kubernetes_executor_utils.py         |   56 +-
 .../providers/cncf/kubernetes/get_provider_info.py |   14 +
 .../providers/cncf/kubernetes/kube_client.py       |   43 +
 .../cncf/kubernetes/kubernetes_helper_functions.py |    6 +-
 .../providers/cncf/kubernetes/operators/pod.py     |    6 +-
 .../cncf/kubernetes/operators/spark_kubernetes.py  |    4 +-
 .../providers/cncf/kubernetes/triggers/job.py      |    4 +-
 .../providers/cncf/kubernetes/triggers/pod.py      |    6 +-
 .../cncf/kubernetes/utils/xcom_sidecar.py          |    2 +-
 .../system/cncf/kubernetes/example_kubernetes.py   |    2 +-
 .../cncf/kubernetes/example_kubernetes_async.py    |    2 +-
 .../executors/test_kubernetes_executor.py          | 1090 +++-
 .../executors/test_kubernetes_executor_types.py    |   89 +
 .../kubernetes/log_handlers/test_log_handlers.py   |    9 +-
 .../tests/unit/cncf/kubernetes/models/__init__.py  |   17 -
 .../unit/cncf/kubernetes/models/test_secret.py     |  125 -
 .../unit/cncf/kubernetes/operators/test_pod.py     |   38 +-
 .../kubernetes/operators/test_spark_kubernetes.py  |    4 +-
 .../tests/unit/cncf/kubernetes/test_k8s_model.py   |   47 +
 .../tests/unit/cncf/kubernetes/test_kube_client.py |   96 +-
 .../tests/unit/cncf/kubernetes/test_secret.py      |  170 +
 .../cncf/kubernetes/test_template_rendering.py     |   11 +-
 .../unit/cncf/kubernetes/triggers/test_job.py      |   13 +-
 .../unit/cncf/kubernetes/triggers/test_pod.py      |    4 +-
 .../unit/cncf/kubernetes/utils/test_pod_manager.py |    4 +-
 providers/cohere/README.rst                        |    8 +-
 providers/cohere/docs/changelog.rst                |   17 +
 providers/cohere/docs/index.rst                    |    6 +-
 providers/cohere/provider.yaml                     |    3 +-
 providers/cohere/pyproject.toml                    |   11 +-
 .../src/airflow/providers/cohere/__init__.py       |    2 +-
 providers/common/ai/.pre-commit-config.yaml        |    2 +-
 providers/common/ai/README.rst                     |   64 +-
 providers/common/ai/docs/agent_security.rst        |   68 +-
 providers/common/ai/docs/approval_gates.rst        |   11 +-
 providers/common/ai/docs/capabilities.rst          |  139 +
 providers/common/ai/docs/changelog.rst             |  139 +-
 providers/common/ai/docs/classifier_models.rst     |  194 -
 providers/common/ai/docs/code_mode.rst             |   38 +-
 providers/common/ai/docs/concepts.rst              |    2 +-
 providers/common/ai/docs/connections/index.rst     |   62 +
 providers/common/ai/docs/connections/langchain.rst |   15 +-
 .../common/ai/docs/connections/llamaindex.rst      |    5 +
 providers/common/ai/docs/decision_models.rst       |  282 +
 providers/common/ai/docs/durable_execution.rst     |  327 +-
 providers/common/ai/docs/examples.rst              |    9 +-
 providers/common/ai/docs/features.rst              |   22 +-
 providers/common/ai/docs/frameworks/adk.rst        |  109 +
 providers/common/ai/docs/frameworks/index.rst      |  201 +
 .../common/ai/docs/frameworks/pydantic_ai.rst      |   78 +
 providers/common/ai/docs/frameworks/strands.rst    |  307 +
 providers/common/ai/docs/guardrails.rst            |   60 -
 providers/common/ai/docs/hitl_review.rst           |   77 +-
 providers/common/ai/docs/hooks/langchain.rst       |   25 +-
 providers/common/ai/docs/hooks/llamaindex.rst      |   17 +
 providers/common/ai/docs/index.rst                 |   83 +-
 providers/common/ai/docs/installation.rst          |   49 +-
 providers/common/ai/docs/memory.rst                |  163 +
 providers/common/ai/docs/message_history.rst       |   62 +-
 providers/common/ai/docs/model_providers.rst       |   47 +-
 providers/common/ai/docs/observability.rst         |  151 +-
 providers/common/ai/docs/operations.rst            |    1 -
 providers/common/ai/docs/operators/agent.rst       |  203 +-
 .../common/ai/docs/operators/document_loader.rst   |    5 +
 providers/common/ai/docs/operators/index.rst       |    4 +-
 .../ai/docs/operators/llamaindex_embedding.rst     |   31 +-
 .../ai/docs/operators/llamaindex_retrieval.rst     |   23 +-
 providers/common/ai/docs/operators/llm.rst         |   46 +-
 providers/common/ai/docs/operators/llm_batch.rst   |   10 +-
 providers/common/ai/docs/operators/llm_branch.rst  |   25 +-
 .../common/ai/docs/operators/llm_file_analysis.rst |    4 +-
 .../ai/docs/operators/llm_schema_compare.rst       |    6 +-
 providers/common/ai/docs/operators/llm_sql.rst     |    6 +-
 providers/common/ai/docs/quickstart.rst            |    3 +-
 providers/common/ai/docs/rag_pipelines.rst         |    5 +
 providers/common/ai/docs/redirects.txt             |    2 +
 providers/common/ai/docs/retry_policies.rst        |  169 +-
 providers/common/ai/docs/sandbox/backends.rst      |  391 +-
 providers/common/ai/docs/sandbox/configuration.rst |  276 +-
 providers/common/ai/docs/sandbox/index.rst         |  481 +-
 providers/common/ai/docs/self_hosted_models.rst    |    6 +-
 providers/common/ai/docs/stability.rst             |  261 +
 providers/common/ai/docs/supported_services.rst    |   82 +
 providers/common/ai/docs/tool_approval.rst         |  233 +
 providers/common/ai/docs/toolsets/datafusion.rst   |   96 +-
 providers/common/ai/docs/toolsets/hook.rst         |  134 +-
 providers/common/ai/docs/toolsets/index.rst        |  293 +-
 providers/common/ai/docs/toolsets/langchain.rst    |   39 +-
 providers/common/ai/docs/toolsets/logging.rst      |   36 +-
 .../common/ai/docs/toolsets/managed_agent.rst      |  350 +-
 providers/common/ai/docs/toolsets/mcp.rst          |   45 +-
 .../common/ai/docs/toolsets/object_storage.rst     |  162 +
 providers/common/ai/docs/toolsets/skills.rst       |   72 +-
 providers/common/ai/docs/toolsets/sql.rst          |  169 +-
 providers/common/ai/docs/troubleshooting.rst       |   52 +-
 providers/common/ai/docs/use_cases/index.rst       |    3 +-
 .../ai/docs/use_cases/route_pipeline_failures.rst  |   25 +-
 providers/common/ai/docs/why_common_ai.rst         |  199 +
 providers/common/ai/provider.yaml                  |   51 +-
 providers/common/ai/pyproject.toml                 |   66 +-
 .../ai/src/airflow/providers/common/ai/__init__.py |    6 +-
 .../airflow/providers/common/ai/batch/__init__.py  |    2 +-
 .../airflow/providers/common/ai/batch/anthropic.py |   10 +-
 .../src/airflow/providers/common/ai/batch/base.py  |   14 +-
 .../airflow/providers/common/ai/batch/dispatch.py  |    5 +
 .../airflow/providers/common/ai/batch/openai.py    |   10 +-
 .../airflow/providers/common/ai/batch/polling.py   |    4 +-
 .../airflow/providers/common/ai/batch/results.py   |    5 +-
 .../providers/common/ai/decorators/agent.py        |    2 +-
 .../airflow/providers/common/ai/decorators/llm.py  |    2 +-
 .../providers/common/ai/decorators/llm_batch.py    |    2 +-
 .../providers/common/ai/decorators/llm_branch.py   |    2 +-
 .../common/ai/decorators/llm_file_analysis.py      |    2 +-
 .../common/ai/decorators/llm_schema_compare.py     |    2 +-
 .../providers/common/ai/decorators/llm_sql.py      |    2 +-
 .../providers/common/ai/durable/__init__.py        |   19 +
 .../airflow/providers/common/ai/durable/base.py    |   54 +-
 .../providers/common/ai/durable/caching_model.py   |  118 -
 .../providers/common/ai/durable/caching_toolset.py |   95 -
 .../providers/common/ai/durable/capability.py      |  532 ++
 .../providers/common/ai/durable/fingerprint.py     |   58 +-
 .../airflow/providers/common/ai/durable/journal.py |  551 ++
 .../providers/common/ai/durable/replay_usage.py    |  345 +
 .../providers/common/ai/durable/step_counter.py    |   48 -
 .../airflow/providers/common/ai/durable/storage.py |  147 +-
 .../airflow/providers/common/ai/durable/strands.py |  209 +
 .../providers/common/ai/durable/strands_storage.py |  137 +
 .../common/ai/durable/task_state_store.py          |  161 +-
 .../common/ai/example_dags/example_adk_agent.py    |  105 +
 .../common/ai/example_dags/example_agent.py        |   13 +-
 .../ai/example_dags/example_agent_capabilities.py  |   27 +-
 .../ai/example_dags/example_agent_durable.py       |   35 +-
 .../common/ai/example_dags/example_agent_memory.py |  135 +
 .../common/ai/example_dags/example_agent_skills.py |   31 +
 .../ai/example_dags/example_agent_tool_approval.py |   58 +
 .../ai/example_dags/example_agent_tool_judge.py    |  188 +
 .../example_dags/example_aip_progress_tracker.py   |   64 +-
 .../ai/example_dags/example_classifier_model.py    |  134 -
 .../ai/example_dags/example_datafusion_toolset.py  |   72 +
 .../ai/example_dags/example_decision_model.py      |  163 +
 .../common/ai/example_dags/example_hook_toolset.py |   57 +
 .../example_dags/example_langchain_tool_agent.py   |    2 +-
 .../common/ai/example_dags/example_llm_branch.py   |    5 +-
 .../ai/example_dags/example_llm_retry_policy.py    |   22 +-
 .../common/ai/example_dags/example_mcp.py          |   35 +-
 .../example_dags/example_object_storage_toolset.py |   83 +
 .../ai/example_dags/example_pydantic_ai_agent.py   |   72 +
 .../ai/example_dags/example_sandbox_toolset.py     |  178 +-
 .../common/ai/example_dags/example_sql_toolset.py  |   65 +
 .../ai/example_dags/example_strands_agent.py       |   91 +
 .../ai/example_dags/example_strands_durable.py     |   93 +
 .../ai/example_dags/example_why_common_ai.py       |   56 +
 .../src/airflow/providers/common/ai/exceptions.py  |   58 +-
 .../providers/common/ai/get_provider_info.py       |   46 +-
 .../airflow/providers/common/ai/hooks/langchain.py |   35 +-
 .../providers/common/ai/hooks/llamaindex.py        |   30 +-
 .../providers/common/ai/hooks/pydantic_ai.py       |   51 +-
 .../providers/common/ai/managed_agents/__init__.py |   49 +
 .../providers/common/ai/managed_agents/base.py     |  251 +
 .../providers/common/ai/managed_agents/failover.py |  145 +
 .../airflow/providers/common/ai/mixins/approval.py |   36 +-
 .../providers/common/ai/mixins/hitl_review.py      |   21 +-
 .../providers/common/ai/mixins/usage_budget.py     |  152 +
 .../airflow/providers/common/ai/observability.py   |   19 +-
 .../airflow/providers/common/ai/operators/agent.py | 1242 +++-
 .../common/ai/operators/document_loader.py         |    5 +
 .../common/ai/operators/llamaindex_embedding.py    |   20 +-
 .../common/ai/operators/llamaindex_retrieval.py    |   21 +-
 .../airflow/providers/common/ai/operators/llm.py   |  143 +-
 .../providers/common/ai/operators/llm_batch.py     |   12 +-
 .../providers/common/ai/operators/llm_branch.py    |   32 +-
 .../common/ai/operators/llm_file_analysis.py       |    5 +-
 .../common/ai/operators/llm_schema_compare.py      |   24 +-
 .../providers/common/ai/operators/llm_sql.py       |   13 +-
 .../providers/common/ai/plugins/_plugin_urls.py    |   50 +
 .../providers/common/ai/plugins/hitl_review.py     |  232 +-
 .../providers/common/ai/plugins/model_panel.py     |   97 +
 .../providers/common/ai/plugins/www/package.json   |    4 +-
 .../providers/common/ai/plugins/www/pnpm-lock.yaml |   12 +
 .../providers/common/ai/plugins/www/src/api.ts     |   13 +-
 .../ai/plugins/www/src/components/ChatPage.tsx     |    9 +-
 .../ai/plugins/www/src/components/ModelPanel.tsx   |  142 +
 .../ai/plugins/www/src/components/NoModelInfo.tsx  |   58 +
 .../ai/plugins/www/src/components/Tooltip.tsx      |   65 +
 .../ai/plugins/www/src/hooks/useModelInfo.ts       |   67 +
 .../common/ai/plugins/www/src/hooks/useSession.ts  |    5 +-
 .../providers/common/ai/plugins/www/src/main.tsx   |   46 +-
 .../common/ai/plugins/www/src/model-api.ts         |   83 +
 .../providers/common/ai/plugins/www/src/model.tsx  |   73 +
 .../common/ai/plugins/www/src/types/model.ts       |   28 +
 .../common/ai/plugins/www/tests/api.test.ts        |   63 +
 .../common/ai/plugins/www/tests/main.test.mjs      |   43 +
 .../providers/common/ai/plugins/www/vite.config.ts |   23 +-
 .../providers/common/ai/policies/decision.py       |   15 +-
 .../airflow/providers/common/ai/policies/retry.py  |   82 +-
 .../providers/common/ai/sandbox/__init__.py        |   14 +
 .../airflow/providers/common/ai/sandbox/base.py    |  427 +-
 .../airflow/providers/common/ai/sandbox/boat.py    |  697 ++
 .../airflow/providers/common/ai/sandbox/islo.py    |  757 +++
 .../airflow/providers/common/ai/sandbox/modal.py   |  329 +-
 .../providers/common/ai/sandbox/opensandbox.py     |  656 ++
 .../airflow/providers/common/ai/sandbox/output.py  |    6 +-
 .../src/airflow/providers/common/ai/sandbox/sbx.py |  113 +-
 .../ai/src/airflow/providers/common/ai/skills.py   |    5 +
 .../airflow/providers/common/ai/tools/__init__.py  |  166 +
 .../providers/common/ai/tools/_from_toolset.py     |  255 +
 .../src/airflow/providers/common/ai/tools/adk.py   |  112 +
 .../airflow/providers/common/ai/tools/strands.py   |  159 +
 .../airflow/providers/common/ai/tools/tracing.py   |  192 +
 .../providers/common/ai/toolsets/__init__.py       |   15 +-
 .../providers/common/ai/toolsets/datafusion.py     |   70 +-
 .../airflow/providers/common/ai/toolsets/hook.py   |  240 +-
 .../common/ai/toolsets/langchain_bridge.py         |  190 +-
 .../providers/common/ai/toolsets/logging.py        |   62 +-
 .../providers/common/ai/toolsets/managed_agent.py  |  393 +-
 .../airflow/providers/common/ai/toolsets/mcp.py    |   37 +-
 .../providers/common/ai/toolsets/object_storage.py |  386 ++
 .../providers/common/ai/toolsets/sandbox.py        |  604 +-
 .../airflow/providers/common/ai/toolsets/skills.py |   20 +-
 .../airflow/providers/common/ai/toolsets/sql.py    |  121 +-
 .../providers/common/ai/utils/coroutines.py        |   42 +
 .../airflow/providers/common/ai/utils/decision.py  |   12 +-
 .../providers/common/ai/utils/file_analysis.py     |  123 +-
 .../providers/common/ai/utils/hitl_review.py       |    4 +-
 .../airflow/providers/common/ai/utils/logging.py   |   79 +-
 .../airflow/providers/common/ai/utils/masking.py   |  120 +
 .../providers/common/ai/utils/prompt_cache.py      |  140 +
 .../providers/common/ai/utils/query_results.py     |  209 +-
 .../providers/common/ai/utils/task_logger.py       |   67 +
 .../providers/common/ai/utils/tool_definition.py   |   25 +-
 .../providers/common/ai/utils/tool_metrics.py      |   63 +
 .../providers/common/ai/utils/toolset_base.py      |  274 +
 .../src/airflow/providers/common/ai/utils/usage.py |    7 +-
 .../providers/common/ai/utils/usage_budget.py      |  230 +
 .../common/ai/tests/system/common/ai/README.md     |   70 +-
 .../common/ai/example_sandbox_toolset_boat.py      |  234 +
 .../common/ai/example_sandbox_toolset_islo.py      |  134 +
 .../common/ai/example_sandbox_toolset_modal.py     |  142 +-
 .../ai/example_sandbox_toolset_opensandbox.py      |  142 +
 .../common/ai/example_sandbox_toolset_sbx.py       |    4 +-
 .../ai/tests/unit/common/ai/batch/test_dispatch.py |    2 +-
 .../unit/common/ai/batch/test_output_schema.py     |    4 +-
 .../ai/tests/unit/common/ai/batch/test_results.py  |    2 +-
 .../ai/tests/unit/common/ai/batch/test_state.py    |    2 +-
 .../common/ai/tests/unit/common/ai/conftest.py     |   93 +-
 .../tests/unit/common/ai/decorators/test_agent.py  |   39 +-
 .../unit/common/ai/decorators/test_llm_batch.py    |    3 +-
 .../common/ai/decorators/test_llm_file_analysis.py |    5 +-
 .../ai/decorators/test_llm_schema_compare.py       |   14 +
 .../unit/common/ai/decorators/test_llm_sql.py      |   12 +
 .../ai/tests/unit/common/ai/durable/conftest.py    |   26 +
 .../tests/unit/common/ai/durable/memory_storage.py |   58 +
 .../ai/tests/unit/common/ai/durable/test_base.py   |   17 +-
 .../unit/common/ai/durable/test_caching_model.py   |  186 -
 .../unit/common/ai/durable/test_caching_toolset.py |  181 -
 .../unit/common/ai/durable/test_capability.py      |  855 +++
 .../unit/common/ai/durable/test_fingerprint.py     |  138 +-
 .../tests/unit/common/ai/durable/test_journal.py   |  427 ++
 .../unit/common/ai/durable/test_replay_cost.py     |  242 +-
 .../unit/common/ai/durable/test_replay_usage.py    |  114 +
 .../common/ai/durable/test_replay_verification.py  |  138 -
 .../unit/common/ai/durable/test_step_counter.py    |   38 -
 .../tests/unit/common/ai/durable/test_storage.py   |  220 +-
 .../tests/unit/common/ai/durable/test_strands.py   |  314 +
 .../unit/common/ai/durable/test_strands_storage.py |  156 +
 .../common/ai/durable/test_task_state_store.py     |  194 +-
 .../tests/unit/common/ai/hooks/test_langchain.py   |   66 +
 .../tests/unit/common/ai/hooks/test_llamaindex.py  |   72 +
 .../tests/unit/common/ai/hooks/test_pydantic_ai.py |  132 +-
 .../unit/common/ai/managed_agents}/__init__.py     |    0
 .../unit/common/ai/managed_agents/test_base.py     |  137 +
 .../unit/common/ai/managed_agents/test_failover.py |  208 +
 .../tests/unit/common/ai/mixins/test_approval.py   |    6 +-
 .../unit/common/ai/mixins/test_hitl_review.py      |   37 +-
 .../unit/common/ai/mixins/test_usage_budget.py     |  190 +
 .../tests/unit/common/ai/operators/test_agent.py   | 2652 ++++++--
 .../ai/operators/test_agent_tool_approval.py       |  787 +++
 .../common/ai/operators/test_agent_tool_judge.py   |  234 +
 .../common/ai/operators/test_document_loader.py    |   12 +-
 .../ai/operators/test_llamaindex_embedding.py      |   17 +-
 .../ai/operators/test_llamaindex_retrieval.py      |   30 +-
 .../ai/tests/unit/common/ai/operators/test_llm.py  |  289 +-
 .../unit/common/ai/operators/test_llm_batch.py     |    3 +-
 .../unit/common/ai/operators/test_llm_branch.py    |  146 +-
 .../common/ai/operators/test_llm_file_analysis.py  |   97 +-
 .../common/ai/operators/test_llm_schema_compare.py |  135 +-
 .../tests/unit/common/ai/operators/test_llm_sql.py |  129 +-
 .../unit/common/ai/plugins/test__plugin_urls.py    |   46 +
 .../unit/common/ai/plugins/test_hitl_review.py     |  537 +-
 .../unit/common/ai/plugins/test_model_panel.py     |   72 +
 .../common/ai/plugins/test_model_panel_compat.py   |   46 +
 .../ai/tests/unit/common/ai/policies/test_retry.py |  136 +-
 .../ai/tests/unit/common/ai/sandbox/fake_modal.py  |   64 +-
 .../ai/tests/unit/common/ai/sandbox/fake_tags.py   |   63 +
 .../ai/tests/unit/common/ai/sandbox/test_base.py   |  336 +-
 .../ai/tests/unit/common/ai/sandbox/test_boat.py   | 1184 ++++
 .../ai/tests/unit/common/ai/sandbox/test_islo.py   | 1276 ++++
 .../ai/tests/unit/common/ai/sandbox/test_modal.py  |  367 +-
 .../unit/common/ai/sandbox/test_opensandbox.py     |  971 +++
 .../ai/tests/unit/common/ai/sandbox/test_sbx.py    |  112 +
 .../ai/tests/unit/common/ai/test_observability.py  |   19 +
 .../tests/unit/common/ai/test_provider_metadata.py |  478 ++
 .../ai/tests/unit/common/ai/tools}/__init__.py     |    0
 .../unit/common/ai/tools/test__from_toolset.py     |  375 ++
 .../ai/tests/unit/common/ai/tools/test_adk.py      |  157 +
 .../ai/tests/unit/common/ai/tools/test_strands.py  |  259 +
 .../ai/tests/unit/common/ai/tools/test_tools.py    |  148 +
 .../ai/tests/unit/common/ai/tools/test_tracing.py  |  230 +
 .../unit/common/ai/toolsets/test_datafusion.py     |   71 +-
 .../ai/tests/unit/common/ai/toolsets/test_hook.py  |  502 +-
 .../common/ai/toolsets/test_langchain_bridge.py    |   58 +-
 .../tests/unit/common/ai/toolsets/test_logging.py  |  151 +-
 .../unit/common/ai/toolsets/test_managed_agent.py  |  408 +-
 .../ai/tests/unit/common/ai/toolsets/test_mcp.py   |    8 +
 .../unit/common/ai/toolsets/test_object_storage.py |  422 ++
 .../unit/common/ai/toolsets/test_retry_budget.py   |   98 +
 .../tests/unit/common/ai/toolsets/test_sandbox.py  |  920 ++-
 .../tests/unit/common/ai/toolsets/test_skills.py   |   47 +-
 .../ai/tests/unit/common/ai/toolsets/test_sql.py   |  178 +-
 .../tests/unit/common/ai/utils/test_coroutines.py  |   37 +
 .../unit/common/ai/utils/test_file_analysis.py     |   27 +-
 .../tests/unit/common/ai/utils/test_hitl_review.py |    6 +-
 .../ai/tests/unit/common/ai/utils/test_logging.py  |  159 +-
 .../ai/tests/unit/common/ai/utils/test_masking.py  |  117 +
 .../unit/common/ai/utils/test_prompt_cache.py      |  209 +
 .../unit/common/ai/utils/test_query_results.py     |  176 +-
 .../unit/common/ai/utils/test_sql_validation.py    |  163 +-
 .../tests/unit/common/ai/utils/test_task_logger.py |   82 +
 .../unit/common/ai/utils/test_tool_definition.py   |   21 +-
 .../unit/common/ai/utils/test_tool_metrics.py      |  164 +
 .../unit/common/ai/utils/test_toolset_base.py      |  279 +
 .../ai/tests/unit/common/ai/utils/test_usage.py    |    6 +-
 .../unit/common/ai/utils/test_usage_budget.py      |  284 +
 providers/common/compat/README.rst                 |    8 +-
 providers/common/compat/docs/changelog.rst         |   27 +
 providers/common/compat/docs/index.rst             |    6 +-
 providers/common/compat/provider.yaml              |    3 +-
 providers/common/compat/pyproject.toml             |   11 +-
 .../airflow/providers/common/compat/__init__.py    |    2 +-
 .../common/compat/_set_during_execution.py         |   40 +
 .../providers/common/compat/connection/__init__.py |   30 +-
 .../src/airflow/providers/common/compat/sdk.py     |   14 +-
 .../providers/common/compat/version_compat.py      |    2 +
 .../common/compat/connection/test_connection.py    |   58 +-
 .../connection/test_connection_supervisor.py       |  214 +
 .../common/compat/security/test_access_view.py     |    8 +-
 .../common/compat/test__set_during_execution.py    |   43 +
 .../compat/tests/unit/common/compat/test_sdk.py    |   18 +-
 providers/common/dataquality/pyproject.toml        |    5 +-
 providers/common/io/README.rst                     |    8 +-
 providers/common/io/docs/changelog.rst             |   14 +
 providers/common/io/docs/index.rst                 |    6 +-
 providers/common/io/docs/state_store_backend.rst   |    4 +-
 providers/common/io/provider.yaml                  |    7 +-
 providers/common/io/pyproject.toml                 |   11 +-
 .../io/src/airflow/providers/common/io/__init__.py |    2 +-
 .../providers/common/io/get_provider_info.py       |    2 +-
 .../providers/common/io/state_store/backend.py     |   32 +-
 .../airflow/providers/common/io/version_compat.py  |    1 +
 .../unit/common/io/state_store/test_backend.py     |   49 +-
 .../io/tests/unit/common/io/xcom/test_backend.py   |   62 +-
 providers/common/messaging/README.rst              |    8 +-
 providers/common/messaging/docs/changelog.rst      |   17 +
 providers/common/messaging/docs/index.rst          |    6 +-
 providers/common/messaging/provider.yaml           |    3 +-
 providers/common/messaging/pyproject.toml          |   11 +-
 .../airflow/providers/common/messaging/__init__.py |    2 +-
 providers/common/sql/README.rst                    |   10 +-
 providers/common/sql/docs/changelog.rst            |   27 +
 providers/common/sql/docs/index.rst                |    8 +-
 providers/common/sql/docs/operators.rst            |   72 +-
 providers/common/sql/provider.yaml                 |    3 +-
 providers/common/sql/pyproject.toml                |   13 +-
 .../src/airflow/providers/common/sql/__init__.py   |    2 +-
 .../sql/src/airflow/providers/common/sql/config.py |   18 +-
 .../providers/common/sql/datafusion/base.py        |    9 +
 .../providers/common/sql/datafusion/engine.py      |  206 +-
 .../sql/datafusion/object_storage_provider.py      |  104 +-
 .../common/sql/example_dags/example_analytics.py   |   13 +
 .../unit/common/sql/datafusion/test_engine.py      |  543 +-
 .../sql/datafusion/test_object_storage_provider.py |  201 +
 .../sql/tests/unit/common/sql/test_config.py       |    3 +
 providers/databricks/README.rst                    |   12 +-
 providers/databricks/docs/changelog.rst            |   25 +
 providers/databricks/docs/index.rst                |   10 +-
 providers/databricks/docs/operators/copy_into.rst  |   81 +
 providers/databricks/provider.yaml                 |    3 +-
 providers/databricks/pyproject.toml                |   15 +-
 .../src/airflow/providers/databricks/__init__.py   |    2 +-
 .../providers/databricks/assets/databricks.py      |   37 +
 .../providers/databricks/hooks/databricks_base.py  |    8 +
 .../databricks/operators/databricks_sql.py         |   82 +-
 .../providers/databricks/utils/openlineage.py      |    2 +-
 .../unit/databricks/assets/test_databricks.py      |   55 +
 .../tests/unit/databricks/hooks/test_databricks.py |   27 +
 .../databricks/operators/test_databricks_copy.py   |  215 +-
 .../unit/databricks/utils/test_openlineage.py      |   28 +-
 .../tests/unit/databricks/utils/test_retry.py      |    2 +-
 providers/datadog/README.rst                       |    8 +-
 providers/datadog/docs/changelog.rst               |   17 +
 providers/datadog/docs/index.rst                   |    6 +-
 providers/datadog/provider.yaml                    |    3 +-
 providers/datadog/pyproject.toml                   |   11 +-
 .../src/airflow/providers/datadog/__init__.py      |    2 +-
 providers/dbt/cloud/README.rst                     |    8 +-
 providers/dbt/cloud/docs/changelog.rst             |   27 +
 providers/dbt/cloud/docs/index.rst                 |    6 +-
 providers/dbt/cloud/provider.yaml                  |    3 +-
 providers/dbt/cloud/pyproject.toml                 |   11 +-
 .../src/airflow/providers/dbt/cloud/__init__.py    |    2 +-
 .../airflow/providers/dbt/cloud/operators/dbt.py   |    1 +
 .../airflow/providers/dbt/cloud/triggers/dbt.py    |   24 +-
 .../tests/unit/dbt/cloud/operators/test_dbt.py     |   36 +
 .../tests/unit/dbt/cloud/triggers/test_dbt.py      |   20 +
 providers/dingding/README.rst                      |    8 +-
 providers/dingding/docs/changelog.rst              |   17 +
 providers/dingding/docs/index.rst                  |    6 +-
 providers/dingding/provider.yaml                   |    3 +-
 providers/dingding/pyproject.toml                  |   11 +-
 .../src/airflow/providers/dingding/__init__.py     |    2 +-
 providers/discord/README.rst                       |    8 +-
 providers/discord/docs/changelog.rst               |   26 +
 providers/discord/docs/index.rst                   |    6 +-
 providers/discord/provider.yaml                    |    3 +-
 providers/discord/pyproject.toml                   |   11 +-
 .../src/airflow/providers/discord/__init__.py      |    2 +-
 .../providers/discord/notifications/embed.py       |    4 +-
 providers/docker/README.rst                        |    8 +-
 providers/docker/docs/changelog.rst                |   17 +
 providers/docker/docs/index.rst                    |    6 +-
 providers/docker/provider.yaml                     |    3 +-
 providers/docker/pyproject.toml                    |   11 +-
 .../src/airflow/providers/docker/__init__.py       |    2 +-
 providers/duckdb/README.rst                        |    8 +-
 providers/duckdb/docs/changelog.rst                |   26 +-
 providers/duckdb/docs/commits.rst                  |    4 +-
 providers/duckdb/docs/connections/duckdb.rst       |   18 +
 providers/duckdb/docs/index.rst                    |    6 +-
 providers/duckdb/docs/operators.rst                |    6 +
 providers/duckdb/provider.yaml                     |    5 +-
 providers/duckdb/pyproject.toml                    |   11 +-
 .../src/airflow/providers/duckdb/__init__.py       |    2 +-
 .../src/airflow/providers/duckdb/hooks/duckdb.py   |    6 +-
 .../airflow/providers/duckdb/operators/duckdb.py   |   48 +-
 .../tests/unit/duckdb/operators/test_duckdb.py     |   33 +-
 providers/edge3/README.rst                         |    2 +-
 providers/edge3/docs/changelog.rst                 |   34 +-
 providers/edge3/docs/edge_executor.rst             |    7 +
 providers/edge3/docs/install_on_windows.rst        |    2 +-
 providers/edge3/docs/migrations-ref.rst            |    6 +-
 providers/edge3/provider.yaml                      |   14 +-
 providers/edge3/pyproject.toml                     |    8 +-
 .../src/airflow/providers/edge3/cli/api_client.py  |   33 +-
 .../src/airflow/providers/edge3/cli/worker.py      |   25 +-
 .../providers/edge3/executors/edge_executor.py     |  221 +-
 .../airflow/providers/edge3/get_provider_info.py   |   12 +-
 .../0006_5_0_0_add_task_instance_id_to_edge_job.py |   71 +
 .../0007_5_1_0_add_priority_weight_to_edge_job.py  |   55 +
 .../edge3/src/airflow/providers/edge3/models/db.py |    2 +
 .../src/airflow/providers/edge3/models/edge_job.py |   15 +-
 .../src/airflow/providers/edge3/models/types.py    |   20 +-
 .../www/openapi-gen/requests/schemas.gen.ts        |   12 +
 .../plugins/www/openapi-gen/requests/types.gen.ts  |   10 +
 .../providers/edge3/plugins/www/package.json       |   24 +-
 .../providers/edge3/plugins/www/pnpm-lock.yaml     |  817 +--
 .../edge3/plugins/www/src/pages/JobsPage.test.tsx  |  105 +
 .../edge3/plugins/www/src/pages/JobsPage.tsx       |   17 +-
 .../providers/edge3/plugins/www/vite.config.ts     |    4 +-
 .../providers/edge3/worker_api/datamodels.py       |   14 +
 .../providers/edge3/worker_api/datamodels_ui.py    |    2 +
 .../providers/edge3/worker_api/routes/jobs.py      |  118 +-
 .../providers/edge3/worker_api/routes/logs.py      |   31 +-
 .../providers/edge3/worker_api/routes/ui.py        |    1 +
 .../edge3/worker_api/v2-edge-generated.yaml        |   67 +
 .../edge3/tests/unit/edge3/cli/test_api_client.py  |  126 +-
 .../edge3/tests/unit/edge3/cli/test_worker.py      |   77 +-
 .../unit/edge3/executors/test_edge_executor.py     |  475 +-
 .../migrations/test_task_instance_identity.py      |  170 +
 providers/edge3/tests/unit/edge3/models/test_db.py |  100 +-
 .../edge3/tests/unit/edge3/models/test_edge_job.py |   14 +-
 .../tests/unit/edge3/models/test_edge_logs.py      |    4 +-
 .../unit/edge3/worker_api/routes/test_jobs.py      |  366 +-
 .../unit/edge3/worker_api/routes/test_logs.py      |  139 +
 .../tests/unit/edge3/worker_api/routes/test_ui.py  |   31 +
 .../tests/unit/edge3/worker_api/test_datamodels.py |    6 +-
 .../unit/edge3/worker_api/test_datamodels_ui.py    |    4 +-
 providers/elasticsearch/README.rst                 |    8 +-
 providers/elasticsearch/docs/changelog.rst         |   25 +
 providers/elasticsearch/docs/index.rst             |    6 +-
 providers/elasticsearch/docs/logging/index.rst     |    5 +
 providers/elasticsearch/provider.yaml              |    3 +-
 providers/elasticsearch/pyproject.toml             |   11 +-
 .../airflow/providers/elasticsearch/__init__.py    |    2 +-
 .../providers/elasticsearch/log/es_response.py     |    6 +-
 .../providers/elasticsearch/log/es_task_handler.py |   46 +-
 .../providers/elasticsearch/version_compat.py      |    2 +
 .../elasticsearch/log/test_es_remote_log_io.py     |   32 +
 .../unit/elasticsearch/log/test_es_response.py     |   13 +
 .../unit/elasticsearch/log/test_es_task_handler.py |   50 +-
 providers/exasol/README.rst                        |   16 +-
 providers/exasol/docs/changelog.rst                |   22 +
 providers/exasol/docs/index.rst                    |   14 +-
 providers/exasol/provider.yaml                     |    3 +-
 providers/exasol/pyproject.toml                    |   13 +-
 .../src/airflow/providers/exasol/__init__.py       |    2 +-
 providers/fab/README.rst                           |    8 +-
 providers/fab/docs/auth-manager/access-control.rst |   99 +-
 providers/fab/docs/changelog.rst                   |   30 +
 providers/fab/docs/index.rst                       |    6 +-
 providers/fab/provider.yaml                        |    3 +-
 providers/fab/pyproject.toml                       |   16 +-
 .../providers/3rd-party-licenses/LICENSES-ui.txt   |    2 +-
 .../fab/src/airflow/providers/fab/__init__.py      |    2 +-
 .../fab/auth_manager/api_fastapi/routes/roles.py   |   14 +-
 .../fab/auth_manager/api_fastapi/routes/users.py   |   12 +-
 .../providers/fab/auth_manager/fab_auth_manager.py |   13 +-
 .../fab/auth_manager/security_manager/override.py  |    2 +-
 .../fab/www/extensions/init_wsgi_middlewares.py    |   68 +-
 .../fab/src/airflow/providers/fab/www/package.json |   14 +-
 .../src/airflow/providers/fab/www/pnpm-lock.yaml   | 1031 +--
 .../fab/src/airflow/providers/fab/www/views.py     |    6 +-
 .../unit/fab/auth_manager/api_fastapi/conftest.py  |   21 +
 .../auth_manager/api_fastapi/routes/test_roles.py  |  161 +-
 .../auth_manager/api_fastapi/routes/test_users.py  |  128 +-
 .../security_manager/test_fab_alignment.py         |    4 +-
 .../unit/fab/auth_manager/test_fab_auth_manager.py |   18 +
 .../unit/fab/www/extensions/test_init_session.py   |    2 +-
 .../www/extensions/test_init_wsgi_middlewares.py   |   89 +
 providers/fab/tests/unit/fab/www/test_views.py     |   21 +-
 providers/facebook/README.rst                      |    8 +-
 providers/facebook/docs/changelog.rst              |   21 +
 providers/facebook/docs/index.rst                  |    6 +-
 providers/facebook/provider.yaml                   |    3 +-
 providers/facebook/pyproject.toml                  |   11 +-
 .../src/airflow/providers/facebook/__init__.py     |    2 +-
 providers/ftp/README.rst                           |    8 +-
 providers/ftp/docs/changelog.rst                   |   22 +
 providers/ftp/docs/index.rst                       |    6 +-
 providers/ftp/provider.yaml                        |    3 +-
 providers/ftp/pyproject.toml                       |   11 +-
 .../ftp/src/airflow/providers/ftp/__init__.py      |    2 +-
 .../ftp/src/airflow/providers/ftp/hooks/ftp.py     |   17 +-
 providers/ftp/tests/unit/ftp/hooks/test_ftp.py     |   32 +
 providers/git/README.rst                           |    8 +-
 providers/git/docs/changelog.rst                   |   24 +
 providers/git/docs/index.rst                       |    6 +-
 providers/git/provider.yaml                        |    3 +-
 providers/git/pyproject.toml                       |   11 +-
 .../git/src/airflow/providers/git/__init__.py      |    2 +-
 .../git/src/airflow/providers/git/bundles/git.py   |   31 +-
 .../git/src/airflow/providers/git/hooks/git.py     |   42 +-
 providers/git/tests/unit/git/bundles/test_git.py   |   44 +
 providers/git/tests/unit/git/hooks/test_git.py     |   56 +-
 providers/github/README.rst                        |    8 +-
 providers/github/docs/changelog.rst                |   17 +
 providers/github/docs/index.rst                    |    6 +-
 providers/github/provider.yaml                     |    3 +-
 providers/github/pyproject.toml                    |   11 +-
 .../src/airflow/providers/github/__init__.py       |    2 +-
 providers/google/README.rst                        |   98 +-
 providers/google/docs/changelog.rst                |   60 +
 providers/google/docs/index.rst                    |   96 +-
 providers/google/docs/operators/cloud/dataproc.rst |   14 +-
 .../docs/operators/cloud/kubernetes_engine.rst     |   20 +
 .../google/docs/operators/cloud/vertex_ai.rst      |   24 +
 providers/google/provider.yaml                     |    3 +-
 providers/google/pyproject.toml                    |   97 +-
 .../src/airflow/providers/google/__init__.py       |    2 +-
 .../providers/google/cloud/hooks/bigquery.py       |   13 +-
 .../providers/google/cloud/hooks/bigtable.py       |   24 +
 .../providers/google/cloud/hooks/cloud_composer.py |    4 +-
 .../providers/google/cloud/hooks/cloud_sql.py      |   57 +-
 .../providers/google/cloud/hooks/compute.py        |    3 -
 .../providers/google/cloud/hooks/datafusion.py     |    7 +-
 .../providers/google/cloud/hooks/managed_kafka.py  |    6 +-
 .../google/cloud/hooks/vertex_ai/agent_engine.py   |  159 +-
 .../google/cloud/hooks/vertex_ai/auto_ml.py        |    2 +-
 .../google/cloud/log/cloud_logging_task_handler.py |   26 +-
 .../providers/google/cloud/openlineage/mixins.py   |    6 +-
 .../providers/google/cloud/operators/dataproc.py   |   19 +-
 .../providers/google/cloud/operators/gcs.py        |   24 +-
 .../google/cloud/operators/kubernetes_engine.py    |  128 +-
 .../providers/google/cloud/operators/workflows.py  |    2 +-
 .../providers/google/cloud/sensors/bigquery.py     |    2 +
 .../providers/google/cloud/sensors/datafusion.py   |   11 +-
 .../google/cloud/transfers/gcs_to_sftp.py          |   84 +-
 .../google/cloud/transfers/postgres_to_gcs.py      |   14 +-
 .../providers/google/cloud/transfers/s3_to_gcs.py  |    4 +-
 .../providers/google/cloud/triggers/bigquery.py    |   34 +-
 .../providers/google/cloud/triggers/dataproc.py    |    3 +
 .../providers/google/common/hooks/base_google.py   |    2 +-
 .../src/airflow/providers/google/version_compat.py |    9 +-
 .../google/cloud/bigquery/example_bigquery_dts.py  |    3 +-
 .../cloud/bigquery/example_bigquery_sensors.py     |    3 -
 .../cloud/bigquery/example_bigquery_tables.py      |   21 +-
 .../cloud/bigquery/example_bigquery_value_check.py |    2 +-
 .../resources/openlineage/bigquery_dts.json        |   18 +-
 .../resources/openlineage/bigquery_operations.json |    8 +-
 .../resources/openlineage/bigquery_tables.json     |   12 +-
 .../resources/openlineage/bigquery_transfer.json   |    8 +-
 .../cloud/composer/example_cloud_composer.py       |    4 +-
 .../google/cloud/dataplex/example_dataplex_dp.py   |    2 +-
 .../dataproc/example_dataproc_batch_persistent.py  |   32 +-
 .../dataproc/example_dataproc_cluster_generator.py |  156 -
 .../kubernetes_engine/example_kubernetes_engine.py |  105 +-
 .../example_cloud_storage_transfer_service_aws.py  |   66 +-
 .../example_cloud_storage_transfer_service_gcp.py  |   57 +-
 .../system/google/cloud/tasks/example_tasks.py     |   15 +-
 .../marketing_platform/example_campaign_manager.py |    6 +-
 .../system/google/resources_cleanup/README.md      |    8 +
 .../commands/cmd_delete.py                         |    6 +-
 .../handlers/__init__.py                           |    2 +
 .../handlers/composer.py                           |    2 +-
 .../handlers/datafusion.py                         |   52 +
 .../tests/unit/google/cloud/hooks/test_bigquery.py |   55 +-
 .../tests/unit/google/cloud/hooks/test_bigtable.py |   26 +
 .../unit/google/cloud/hooks/test_cloud_composer.py |   24 +
 .../unit/google/cloud/hooks/test_cloud_sql.py      |   78 +-
 .../unit/google/cloud/hooks/test_datafusion.py     |   38 +
 .../google/cloud/hooks/test_dataproc_metastore.py  |  268 -
 .../unit/google/cloud/hooks/test_managed_kafka.py  |  331 -
 .../unit/google/cloud/hooks/test_stackdriver.py    |    2 +-
 .../cloud/hooks/vertex_ai/test_agent_engine.py     |  145 +
 .../google/cloud/hooks/vertex_ai/test_auto_ml.py   |   70 -
 .../hooks/vertex_ai/test_batch_prediction_job.py   |   65 -
 .../cloud/hooks/vertex_ai/test_custom_job.py       |  125 -
 .../google/cloud/hooks/vertex_ai/test_dataset.py   |  231 -
 .../cloud/hooks/vertex_ai/test_endpoint_service.py |  172 -
 .../hooks/vertex_ai/test_experiment_service.py     |   87 -
 .../vertex_ai/test_hyperparameter_tuning_job.py    |   74 -
 .../cloud/hooks/vertex_ai/test_model_service.py    |  205 -
 .../cloud/hooks/vertex_ai/test_pipeline_job.py     |   82 -
 .../hooks/vertex_ai/test_prediction_service.py     |   29 -
 .../unit/google/cloud/hooks/vertex_ai/test_ray.py  |  122 -
 .../unit/google/cloud/links/test_cloud_tasks.py    |  155 +
 .../cloud/log/test_cloud_logging_task_handler.py   |  112 +-
 .../unit/google/cloud/openlineage/test_mixins.py   |   10 +-
 .../cloud/operators/test_cloud_logging_sink.py     |   42 -
 .../unit/google/cloud/operators/test_cloud_run.py  |   73 -
 .../unit/google/cloud/operators/test_dataproc.py   |    7 +-
 .../tests/unit/google/cloud/operators/test_gcs.py  |  153 +-
 .../cloud/operators/test_kubernetes_engine.py      |  179 +-
 .../unit/google/cloud/operators/test_workflows.py  |    6 +-
 .../unit/google/cloud/sensors/test_bigquery.py     |   37 +
 .../unit/google/cloud/sensors/test_datafusion.py   |   35 +-
 .../google/cloud/transfers/test_gcs_to_sftp.py     |  122 +-
 .../google/cloud/transfers/test_postgres_to_gcs.py |   63 +-
 .../unit/google/cloud/triggers/test_bigquery.py    |  121 +
 .../unit/google/cloud/triggers/test_dataproc.py    |   63 +-
 .../tests/unit/google/cloud/triggers/test_gcs.py   |    4 +-
 .../cloud/triggers/test_kubernetes_engine.py       |    2 +-
 .../google/resources_cleanup/test_cmd_delete.py    |    5 +-
 .../resources_cleanup/test_datafusion_handler.py   |   67 +
 .../tests/unit/google/test_go_module_utils.py      |   73 +
 providers/grpc/README.rst                          |    8 +-
 providers/grpc/docs/changelog.rst                  |   17 +
 providers/grpc/docs/index.rst                      |    6 +-
 providers/grpc/provider.yaml                       |    3 +-
 providers/grpc/pyproject.toml                      |   11 +-
 .../grpc/src/airflow/providers/grpc/__init__.py    |    2 +-
 providers/hashicorp/README.rst                     |   10 +-
 providers/hashicorp/docs/changelog.rst             |   29 +
 providers/hashicorp/docs/index.rst                 |    8 +-
 providers/hashicorp/provider.yaml                  |    3 +-
 providers/hashicorp/pyproject.toml                 |   13 +-
 .../src/airflow/providers/hashicorp/__init__.py    |    2 +-
 .../airflow/providers/hashicorp/secrets/vault.py   |   31 +-
 .../tests/unit/hashicorp/secrets/test_vault.py     |   55 +
 providers/http/README.rst                          |    8 +-
 providers/http/docs/changelog.rst                  |   28 +
 providers/http/docs/index.rst                      |    6 +-
 providers/http/provider.yaml                       |    3 +-
 providers/http/pyproject.toml                      |   11 +-
 .../http/src/airflow/providers/http/__init__.py    |    2 +-
 .../http/src/airflow/providers/http/hooks/http.py  |   17 +-
 .../src/airflow/providers/http/operators/http.py   |    2 +-
 .../src/airflow/providers/http/sensors/http.py     |    2 +-
 providers/http/tests/unit/http/hooks/test_http.py  |   56 +-
 .../http/tests/unit/http/operators/test_http.py    |   10 +
 .../http/tests/unit/http/sensors/test_http.py      |   10 +
 providers/ibm/db2/README.rst                       |  121 +-
 providers/ibm/db2/provider.yaml                    |    2 +-
 providers/ibm/db2/pyproject.toml                   |    5 +-
 providers/ibm/mq/README.rst                        |   43 +-
 providers/ibm/mq/docs/connections/ibmmq.rst        |    9 +-
 providers/ibm/mq/docs/index.rst                    |    2 +-
 providers/ibm/mq/pre_extras_install.yaml           |   33 -
 providers/ibm/mq/provider.yaml                     |    2 +-
 providers/ibm/mq/pyproject.toml                    |    9 +-
 providers/ibm/mq/tests/conftest.py                 |    8 +-
 providers/imap/README.rst                          |    8 +-
 providers/imap/docs/changelog.rst                  |   17 +
 providers/imap/docs/index.rst                      |    6 +-
 providers/imap/provider.yaml                       |    3 +-
 providers/imap/pyproject.toml                      |   11 +-
 .../imap/src/airflow/providers/imap/__init__.py    |    2 +-
 providers/influxdb/README.rst                      |    8 +-
 providers/influxdb/docs/changelog.rst              |   22 +
 providers/influxdb/docs/index.rst                  |    7 +-
 providers/influxdb/docs/sensors/index.rst          |   40 +
 providers/influxdb/provider.yaml                   |    8 +-
 providers/influxdb/pyproject.toml                  |   11 +-
 .../src/airflow/providers/influxdb/__init__.py     |    2 +-
 .../providers/influxdb/get_provider_info.py        |    6 +
 .../providers/influxdb/sensors}/__init__.py        |    0
 .../providers/influxdb/sensors/influxdb3.py        |  108 +
 .../providers/influxdb/triggers/influxdb3.py       |   52 +-
 .../src/airflow/providers/influxdb/utils.py        |   16 +
 .../tests/system/influxdb/example_influxdb3.py     |   14 +-
 .../tests/unit/influxdb/sensors}/__init__.py       |    0
 .../tests/unit/influxdb/sensors/test_influxdb3.py  |  170 +
 .../influxdb/tests/unit/influxdb/test_utils.py     |   29 +-
 .../tests/unit/influxdb/triggers/test_influxdb3.py |  123 +-
 providers/informatica/README.rst                   |    8 +-
 providers/informatica/docs/changelog.rst           |   19 +
 providers/informatica/docs/index.rst               |    6 +-
 providers/informatica/provider.yaml                |    3 +-
 providers/informatica/pyproject.toml               |   11 +-
 .../src/airflow/providers/informatica/__init__.py  |    2 +-
 providers/jdbc/README.rst                          |   12 +-
 providers/jdbc/docs/changelog.rst                  |   15 +
 providers/jdbc/docs/index.rst                      |   10 +-
 providers/jdbc/provider.yaml                       |    3 +-
 providers/jdbc/pyproject.toml                      |   15 +-
 .../jdbc/src/airflow/providers/jdbc/__init__.py    |    2 +-
 providers/jenkins/README.rst                       |    8 +-
 providers/jenkins/docs/changelog.rst               |   23 +
 providers/jenkins/docs/index.rst                   |    6 +-
 providers/jenkins/provider.yaml                    |    3 +-
 providers/jenkins/pyproject.toml                   |   11 +-
 .../src/airflow/providers/jenkins/__init__.py      |    2 +-
 providers/keycloak/README.rst                      |    8 +-
 .../docs/auth-manager/manage/permissions.rst       |    4 +
 providers/keycloak/docs/changelog.rst              |   33 +
 providers/keycloak/docs/index.rst                  |    6 +-
 providers/keycloak/provider.yaml                   |    3 +-
 providers/keycloak/pyproject.toml                  |   11 +-
 .../src/airflow/providers/keycloak/__init__.py     |    2 +-
 .../keycloak/auth_manager/cli/commands.py          |   23 +-
 .../keycloak/auth_manager/keycloak_auth_manager.py |   18 +-
 .../providers/keycloak/auth_manager/middleware.py  |   35 +-
 .../providers/keycloak/auth_manager/resources.py   |    5 +
 .../keycloak/auth_manager/cli/test_commands.py     |   37 +-
 .../auth_manager/test_keycloak_auth_manager.py     |   48 +
 .../unit/keycloak/auth_manager/test_middleware.py  |   97 +-
 providers/microsoft/azure/README.rst               |   44 +-
 providers/microsoft/azure/docs/changelog.rst       |   27 +
 .../microsoft/azure/docs/connections/msgraph.rst   |    9 +-
 providers/microsoft/azure/docs/index.rst           |   42 +-
 providers/microsoft/azure/provider.yaml            |    3 +-
 providers/microsoft/azure/pyproject.toml           |   52 +-
 .../airflow/providers/microsoft/azure/__init__.py  |    2 +-
 .../providers/microsoft/azure/hooks/data_lake.py   |   13 +-
 .../providers/microsoft/azure/hooks/msgraph.py     |   13 +-
 .../unit/microsoft/azure/hooks/test_data_lake.py   |   61 +-
 .../unit/microsoft/azure/hooks/test_msgraph.py     |   21 +-
 .../azure/operators/test_analysis_services.py      |    8 -
 .../unit/microsoft/azure/operators/test_compute.py |    9 -
 .../azure/sensors/test_analysis_services.py        |    8 -
 .../unit/microsoft/azure/sensors/test_compute.py   |   11 -
 providers/microsoft/mssql/README.rst               |    8 +-
 providers/microsoft/mssql/docs/changelog.rst       |   21 +
 providers/microsoft/mssql/docs/index.rst           |    6 +-
 providers/microsoft/mssql/provider.yaml            |    3 +-
 providers/microsoft/mssql/pyproject.toml           |   11 +-
 .../airflow/providers/microsoft/mssql/__init__.py  |    2 +-
 providers/microsoft/psrp/README.rst                |    8 +-
 providers/microsoft/psrp/docs/changelog.rst        |   17 +
 providers/microsoft/psrp/docs/index.rst            |    6 +-
 providers/microsoft/psrp/provider.yaml             |    3 +-
 providers/microsoft/psrp/pyproject.toml            |   11 +-
 .../airflow/providers/microsoft/psrp/__init__.py   |    2 +-
 providers/microsoft/winrm/README.rst               |    8 +-
 providers/microsoft/winrm/docs/changelog.rst       |   17 +
 providers/microsoft/winrm/docs/index.rst           |    6 +-
 providers/microsoft/winrm/provider.yaml            |    3 +-
 providers/microsoft/winrm/pyproject.toml           |   11 +-
 .../airflow/providers/microsoft/winrm/__init__.py  |    2 +-
 {airflow-core => providers/modal}/.gitignore       |    0
 {chart => providers/modal}/LICENSE                 |    0
 NOTICE => providers/modal/NOTICE                   |    0
 providers/modal/README.rst                         |   64 +
 providers/modal/docs/.latest-doc-only-change.txt   |    1 +
 providers/modal/docs/changelog.rst                 |   33 +
 providers/modal/docs/commits.rst                   |   34 +
 providers/modal/docs/conf.py                       |   27 +
 providers/modal/docs/connections.rst               |   85 +
 providers/modal/docs/index.rst                     |  131 +
 .../docs/installing-providers-from-sources.rst     |    0
 providers/modal/docs/integration-logos/Modal.png   |  Bin 0 -> 10357 bytes
 providers/{anthropic => modal}/docs/security.rst   |    0
 providers/modal/docs/usage.rst                     |  158 +
 providers/modal/provider.yaml                      |   74 +
 providers/modal/pyproject.toml                     |  124 +
 .../modal/src/airflow}/__init__.py                 |    0
 .../modal/src/airflow/providers}/__init__.py       |    0
 .../modal/src/airflow/providers/modal/__init__.py  |   39 +
 .../src/airflow/providers/modal/exceptions.py      |   33 +
 .../airflow/providers/modal/get_provider_info.py   |   61 +
 .../src/airflow/providers/modal/hooks}/__init__.py |    0
 .../src/airflow/providers/modal/hooks/modal.py     |  279 +
 providers/{airbyte => modal}/tests/conftest.py     |    0
 .../modal/tests/unit}/__init__.py                  |    0
 .../modal/tests/unit/modal}/__init__.py            |    0
 .../modal/tests/unit/modal/hooks}/__init__.py      |    0
 .../modal/tests/unit/modal/hooks/test_modal.py     |  372 ++
 .../modal/tests/unit/modal/test_exceptions.py      |   29 +
 providers/mongo/README.rst                         |    8 +-
 providers/mongo/docs/changelog.rst                 |   17 +
 providers/mongo/docs/index.rst                     |    6 +-
 providers/mongo/provider.yaml                      |    3 +-
 providers/mongo/pyproject.toml                     |   11 +-
 .../mongo/src/airflow/providers/mongo/__init__.py  |    2 +-
 providers/mysql/README.rst                         |    8 +-
 providers/mysql/docs/changelog.rst                 |   17 +
 providers/mysql/docs/index.rst                     |    6 +-
 providers/mysql/provider.yaml                      |    3 +-
 providers/mysql/pyproject.toml                     |   11 +-
 .../mysql/src/airflow/providers/mysql/__init__.py  |    2 +-
 providers/neo4j/README.rst                         |    8 +-
 providers/neo4j/docs/changelog.rst                 |   17 +
 providers/neo4j/docs/index.rst                     |    6 +-
 providers/neo4j/provider.yaml                      |    3 +-
 providers/neo4j/pyproject.toml                     |   11 +-
 .../neo4j/src/airflow/providers/neo4j/__init__.py  |    2 +-
 providers/odbc/README.rst                          |    8 +-
 providers/odbc/docs/changelog.rst                  |   19 +
 providers/odbc/docs/index.rst                      |    6 +-
 providers/odbc/provider.yaml                       |    3 +-
 providers/odbc/pyproject.toml                      |   11 +-
 .../odbc/src/airflow/providers/odbc/__init__.py    |    2 +-
 providers/openai/README.rst                        |    8 +-
 providers/openai/docs/changelog.rst                |   46 +
 providers/openai/docs/commits.rst                  |    2 +-
 providers/openai/docs/index.rst                    |    6 +-
 providers/openai/docs/operators/openai.rst         |   42 +-
 providers/openai/provider.yaml                     |    3 +-
 providers/openai/pyproject.toml                    |   11 +-
 .../src/airflow/providers/openai/__init__.py       |    2 +-
 .../src/airflow/providers/openai/exceptions.py     |   11 +
 .../src/airflow/providers/openai/hooks/openai.py   |   85 +-
 .../airflow/providers/openai/operators/openai.py   |  213 +-
 .../airflow/providers/openai/triggers/openai.py    |   19 +-
 .../openai/tests/system/openai/example_openai.py   |   14 +
 .../openai/tests/unit/openai/hooks/test_openai.py  |   70 +
 .../tests/unit/openai/operators/test_openai.py     |  421 +-
 .../openai/tests/unit/openai/test_exceptions.py    |   15 +-
 .../tests/unit/openai/triggers/test_openai.py      |   47 +-
 providers/openfaas/README.rst                      |    8 +-
 providers/openfaas/docs/changelog.rst              |   21 +
 providers/openfaas/docs/index.rst                  |    6 +-
 providers/openfaas/provider.yaml                   |    3 +-
 providers/openfaas/pyproject.toml                  |   11 +-
 .../src/airflow/providers/openfaas/__init__.py     |    2 +-
 providers/openlineage/README.rst                   |   16 +-
 providers/openlineage/docs/changelog.rst           |   25 +
 providers/openlineage/docs/index.rst               |   14 +-
 providers/openlineage/provider.yaml                |    3 +-
 providers/openlineage/pyproject.toml               |   13 +-
 .../src/airflow/providers/openlineage/__init__.py  |    2 +-
 .../airflow/providers/openlineage/api/datasets.py  |    4 +-
 .../providers/openlineage/extractors/manager.py    |   31 +
 .../providers/openlineage/plugins/facets.py        |    7 +-
 .../providers/openlineage/plugins/listener.py      |   37 +-
 .../providers/openlineage/plugins/macros.py        |    6 +-
 .../airflow/providers/openlineage/utils/utils.py   |  163 +-
 .../providers/openlineage/version_compat.py        |    3 +-
 .../example_openlineage_manual_lineage_dag.py      |    4 +-
 ...schedule_multiple_cron_trigger_timetable_dag.py |    2 +-
 ...hedule_multiple_cron_trigger_timetable_dag.json |   12 +-
 .../tests/unit/openlineage/api/test_datasets.py    |   12 +-
 .../tests/unit/openlineage/api/test_sql.py         |   12 +-
 .../unit/openlineage/extractors/test_manager.py    |   71 +-
 .../unit/openlineage/plugins/test_listener.py      |   71 +
 .../tests/unit/openlineage/plugins/test_macros.py  |   52 +-
 .../tests/unit/openlineage/plugins/test_utils.py   |   39 +-
 .../tests/unit/openlineage/utils/test_utils.py     |  341 +-
 providers/opensearch/README.rst                    |    8 +-
 providers/opensearch/docs/changelog.rst            |   30 +
 providers/opensearch/docs/index.rst                |    6 +-
 providers/opensearch/provider.yaml                 |    3 +-
 providers/opensearch/pyproject.toml                |   11 +-
 .../src/airflow/providers/opensearch/__init__.py   |    2 +-
 .../providers/opensearch/log/os_response.py        |    6 +-
 .../providers/opensearch/log/os_task_handler.py    |   81 +-
 .../airflow/providers/opensearch/version_compat.py |    2 +
 .../opensearch/log/test_os_remote_log_io.py        |   50 +
 .../tests/unit/opensearch/log/test_os_response.py  |   15 +
 .../unit/opensearch/log/test_os_task_handler.py    |  156 +-
 providers/opsgenie/README.rst                      |    8 +-
 providers/opsgenie/docs/changelog.rst              |   18 +
 providers/opsgenie/docs/index.rst                  |    6 +-
 providers/opsgenie/provider.yaml                   |    3 +-
 providers/opsgenie/pyproject.toml                  |   11 +-
 .../src/airflow/providers/opsgenie/__init__.py     |    2 +-
 .../airflow/providers/opsgenie/typing/opsgenie.py  |    4 +-
 providers/oracle/README.rst                        |   16 +-
 providers/oracle/docs/changelog.rst                |   17 +
 providers/oracle/docs/index.rst                    |   14 +-
 providers/oracle/provider.yaml                     |    3 +-
 providers/oracle/pyproject.toml                    |   13 +-
 .../src/airflow/providers/oracle/__init__.py       |    2 +-
 providers/pagerduty/README.rst                     |    8 +-
 providers/pagerduty/docs/changelog.rst             |   17 +
 providers/pagerduty/docs/index.rst                 |    6 +-
 providers/pagerduty/provider.yaml                  |    3 +-
 providers/pagerduty/pyproject.toml                 |   11 +-
 .../src/airflow/providers/pagerduty/__init__.py    |    2 +-
 providers/papermill/README.rst                     |    8 +-
 providers/papermill/docs/changelog.rst             |   20 +
 providers/papermill/docs/index.rst                 |    6 +-
 providers/papermill/provider.yaml                  |    3 +-
 providers/papermill/pyproject.toml                 |   11 +-
 .../src/airflow/providers/papermill/__init__.py    |    2 +-
 providers/pgvector/README.rst                      |    8 +-
 providers/pgvector/docs/changelog.rst              |   20 +
 providers/pgvector/docs/index.rst                  |    6 +-
 providers/pgvector/provider.yaml                   |    3 +-
 providers/pgvector/pyproject.toml                  |   11 +-
 .../src/airflow/providers/pgvector/__init__.py     |    2 +-
 providers/pinecone/README.rst                      |    8 +-
 providers/pinecone/docs/changelog.rst              |   17 +
 providers/pinecone/docs/index.rst                  |    6 +-
 providers/pinecone/provider.yaml                   |    3 +-
 providers/pinecone/pyproject.toml                  |   11 +-
 .../src/airflow/providers/pinecone/__init__.py     |    2 +-
 providers/postgres/README.rst                      |   10 +-
 providers/postgres/docs/changelog.rst              |   23 +
 providers/postgres/docs/index.rst                  |    8 +-
 providers/postgres/provider.yaml                   |    3 +-
 providers/postgres/pyproject.toml                  |   13 +-
 .../src/airflow/providers/postgres/__init__.py     |    2 +-
 .../tests/unit/postgres/hooks/test_postgres.py     |    4 -
 providers/presto/README.rst                        |   10 +-
 providers/presto/docs/changelog.rst                |   22 +
 providers/presto/docs/index.rst                    |    8 +-
 providers/presto/provider.yaml                     |    3 +-
 providers/presto/pyproject.toml                    |   13 +-
 .../src/airflow/providers/presto/__init__.py       |    2 +-
 providers/qdrant/README.rst                        |    8 +-
 providers/qdrant/docs/changelog.rst                |   17 +
 providers/qdrant/docs/index.rst                    |    6 +-
 providers/qdrant/provider.yaml                     |    3 +-
 providers/qdrant/pyproject.toml                    |   11 +-
 .../src/airflow/providers/qdrant/__init__.py       |    2 +-
 providers/redis/README.rst                         |    8 +-
 providers/redis/docs/changelog.rst                 |   17 +
 providers/redis/docs/index.rst                     |    6 +-
 providers/redis/provider.yaml                      |    3 +-
 providers/redis/pyproject.toml                     |   11 +-
 .../redis/src/airflow/providers/redis/__init__.py  |    2 +-
 providers/salesforce/README.rst                    |    8 +-
 providers/salesforce/docs/changelog.rst            |   18 +
 providers/salesforce/docs/index.rst                |    6 +-
 providers/salesforce/provider.yaml                 |    3 +-
 providers/salesforce/pyproject.toml                |   11 +-
 .../src/airflow/providers/salesforce/__init__.py   |    2 +-
 .../tests/unit/salesforce/operators/test_bulk.py   |   17 -
 providers/samba/README.rst                         |    8 +-
 providers/samba/docs/changelog.rst                 |   17 +
 providers/samba/docs/index.rst                     |    6 +-
 providers/samba/provider.yaml                      |    3 +-
 providers/samba/pyproject.toml                     |   11 +-
 .../samba/src/airflow/providers/samba/__init__.py  |    2 +-
 providers/segment/README.rst                       |    8 +-
 providers/segment/docs/changelog.rst               |   17 +
 providers/segment/docs/index.rst                   |    6 +-
 providers/segment/provider.yaml                    |    3 +-
 providers/segment/pyproject.toml                   |   11 +-
 .../src/airflow/providers/segment/__init__.py      |    2 +-
 providers/sendgrid/README.rst                      |    8 +-
 providers/sendgrid/docs/changelog.rst              |   23 +
 providers/sendgrid/docs/index.rst                  |    6 +-
 providers/sendgrid/provider.yaml                   |    3 +-
 providers/sendgrid/pyproject.toml                  |   11 +-
 .../src/airflow/providers/sendgrid/__init__.py     |    2 +-
 providers/sftp/README.rst                          |   10 +-
 providers/sftp/docs/changelog.rst                  |   44 +
 providers/sftp/docs/connections/sftp.rst           |    2 +-
 providers/sftp/docs/index.rst                      |    8 +-
 providers/sftp/provider.yaml                       |    3 +-
 providers/sftp/pyproject.toml                      |   13 +-
 .../sftp/src/airflow/providers/sftp/__init__.py    |    2 +-
 .../sftp/src/airflow/providers/sftp/hooks/sftp.py  |   80 +-
 .../src/airflow/providers/sftp/operators/sftp.py   |    1 +
 .../src/airflow/providers/sftp/triggers/sftp.py    |   22 +-
 providers/sftp/tests/unit/sftp/hooks/test_sftp.py  |  297 +-
 .../sftp/tests/unit/sftp/operators/test_sftp.py    |   31 +-
 .../sftp/tests/unit/sftp/sensors/test_sftp.py      |    4 +-
 providers/singularity/README.rst                   |    8 +-
 providers/singularity/docs/changelog.rst           |   21 +
 providers/singularity/docs/index.rst               |    6 +-
 providers/singularity/provider.yaml                |    3 +-
 providers/singularity/pyproject.toml               |   11 +-
 .../src/airflow/providers/singularity/__init__.py  |    2 +-
 providers/slack/README.rst                         |    8 +-
 providers/slack/docs/changelog.rst                 |   23 +
 providers/slack/docs/index.rst                     |    6 +-
 providers/slack/provider.yaml                      |    3 +-
 providers/slack/pyproject.toml                     |   11 +-
 .../slack/src/airflow/providers/slack/__init__.py  |    2 +-
 .../src/airflow/providers/slack/hooks/slack.py     |    3 +-
 .../slack/transfers/sql_to_slack_webhook.py        |   28 +-
 .../slack/transfers/test_sql_to_slack_webhook.py   |   61 +
 providers/smtp/README.rst                          |    8 +-
 providers/smtp/docs/changelog.rst                  |   23 +
 providers/smtp/docs/index.rst                      |    6 +-
 providers/smtp/provider.yaml                       |    3 +-
 providers/smtp/pyproject.toml                      |   11 +-
 .../smtp/src/airflow/providers/smtp/__init__.py    |    2 +-
 .../smtp/src/airflow/providers/smtp/hooks/smtp.py  |   12 +-
 providers/smtp/tests/unit/smtp/hooks/test_smtp.py  |   42 +
 .../tests/unit/smtp/notifications/test_smtp.py     |   27 +
 providers/snowflake/README.rst                     |   18 +-
 providers/snowflake/docs/changelog.rst             |   31 +
 providers/snowflake/docs/connections/index.rst     |   28 +
 .../docs/connections/pydantic_ai_snowflake.rst     |  132 +
 providers/snowflake/docs/connections/snowflake.rst |   10 +-
 providers/snowflake/docs/index.rst                 |   20 +-
 .../docs/operators/snowflake_cortex_agent.rst      |  103 +-
 providers/snowflake/provider.yaml                  |   43 +-
 providers/snowflake/pyproject.toml                 |   15 +-
 .../src/airflow/providers/snowflake/__init__.py    |    2 +-
 .../providers/snowflake/get_provider_info.py       |   33 +-
 .../providers/snowflake/hooks/cortex_model.py      |  210 +
 .../airflow/providers/snowflake/hooks/snowflake.py |   10 +
 .../snowflake/hooks/snowflake_cortex_agent.py      |  222 +-
 .../providers/snowflake/hooks/snowflake_sql_api.py |   75 +-
 .../snowflake/operators/snowflake_cortex_agent.py  |  278 +-
 .../providers/snowflake/utils/_rest_auth.py        |  186 +
 .../snowflake/utils/sql_api_generate_jwt.py        |    8 +-
 .../snowflake/example_snowflake_cortex_agent.py    |   60 +-
 .../unit/snowflake/hooks/test_cortex_model.py      |  397 ++
 .../tests/unit/snowflake/hooks/test_snowflake.py   |   30 +
 .../snowflake/hooks/test_snowflake_cortex_agent.py |  378 +-
 .../unit/snowflake/hooks/test_snowflake_sql_api.py |  167 +-
 .../operators/test_snowflake_cortex_agent.py       |  309 +-
 .../operators/test_snowpark_containers.py          |    4 +-
 .../tests/unit/snowflake/utils/test__rest_auth.py  |  273 +
 .../tests/unit/snowflake/utils/test_openlineage.py |   20 +-
 providers/sqlite/README.rst                        |    8 +-
 providers/sqlite/docs/changelog.rst                |   23 +
 providers/sqlite/docs/index.rst                    |    6 +-
 providers/sqlite/provider.yaml                     |    3 +-
 providers/sqlite/pyproject.toml                    |   11 +-
 .../src/airflow/providers/sqlite/__init__.py       |    2 +-
 providers/ssh/README.rst                           |    8 +-
 providers/ssh/docs/changelog.rst                   |   42 +
 providers/ssh/docs/connections/ssh.rst             |    2 +-
 providers/ssh/docs/index.rst                       |    6 +-
 providers/ssh/provider.yaml                        |    3 +-
 providers/ssh/pyproject.toml                       |   11 +-
 .../ssh/src/airflow/providers/ssh/__init__.py      |    2 +-
 .../ssh/src/airflow/providers/ssh/hooks/ssh.py     |  139 +-
 providers/ssh/tests/unit/ssh/hooks/test_ssh.py     |  173 +-
 .../ssh/tests/unit/ssh/hooks/test_ssh_async.py     |   64 +
 providers/standard/README.rst                      |    8 +-
 providers/standard/docs/changelog.rst              |   27 +-
 providers/standard/docs/index.rst                  |    6 +-
 providers/standard/provider.yaml                   |    3 +-
 providers/standard/pyproject.toml                  |   11 +-
 .../src/airflow/providers/standard/__init__.py     |    2 +-
 .../standard/example_dags/example_sensors.py       |   10 +-
 .../airflow/providers/standard/operators/hitl.py   |    6 +-
 .../providers/standard/sensors/date_time.py        |   54 +-
 .../providers/standard/triggers/temporal.py        |   56 +-
 .../standard/decorators/test_external_python.py    |    2 +-
 .../tests/unit/standard/decorators/test_python.py  |   11 +-
 .../standard/decorators/test_python_virtualenv.py  |    2 +-
 .../tests/unit/standard/operators/test_datetime.py |    4 +-
 .../tests/unit/standard/operators/test_empty.py    |   56 +
 .../tests/unit/standard/operators/test_hitl.py     |    4 +-
 .../tests/unit/standard/operators/test_python.py   |    4 +-
 .../tests/unit/standard/operators/test_weekday.py  |    8 +-
 .../tests/unit/standard/sensors/test_date_time.py  |   86 +-
 .../unit/standard/sensors/test_external_task.py    | 2443 +++++++
 .../standard/sensors/test_external_task_sensor.py  | 2411 -------
 .../tests/unit/standard/triggers/test_temporal.py  |   42 +
 .../tests/unit/standard/utils/test_skipmixin.py    |    2 +-
 providers/tableau/README.rst                       |    8 +-
 providers/tableau/docs/changelog.rst               |   17 +
 providers/tableau/docs/index.rst                   |    6 +-
 providers/tableau/provider.yaml                    |    3 +-
 providers/tableau/pyproject.toml                   |   11 +-
 .../src/airflow/providers/tableau/__init__.py      |    2 +-
 providers/telegram/README.rst                      |    8 +-
 providers/telegram/docs/changelog.rst              |   18 +
 providers/telegram/docs/index.rst                  |    6 +-
 providers/telegram/provider.yaml                   |    3 +-
 providers/telegram/pyproject.toml                  |   11 +-
 .../src/airflow/providers/telegram/__init__.py     |    2 +-
 .../tests/unit/telegram/operators/test_telegram.py |   13 -
 providers/teradata/README.rst                      |   10 +-
 providers/teradata/docs/changelog.rst              |   19 +
 providers/teradata/docs/index.rst                  |    8 +-
 providers/teradata/provider.yaml                   |    3 +-
 providers/teradata/pyproject.toml                  |   13 +-
 .../src/airflow/providers/teradata/__init__.py     |    2 +-
 .../tests/unit/teradata/operators/test_bteq.py     |    4 -
 providers/trino/README.rst                         |    8 +-
 providers/trino/docs/changelog.rst                 |   17 +
 providers/trino/docs/index.rst                     |    6 +-
 providers/trino/provider.yaml                      |    3 +-
 providers/trino/pyproject.toml                     |   11 +-
 .../trino/src/airflow/providers/trino/__init__.py  |    2 +-
 providers/vertica/README.rst                       |   16 +-
 providers/vertica/docs/changelog.rst               |   28 +
 providers/vertica/docs/index.rst                   |   14 +-
 providers/vertica/provider.yaml                    |    3 +-
 providers/vertica/pyproject.toml                   |   13 +-
 .../src/airflow/providers/vertica/__init__.py      |    2 +-
 providers/vespa/README.rst                         |    8 +-
 providers/vespa/docs/changelog.rst                 |   21 +
 providers/vespa/docs/index.rst                     |    6 +-
 providers/vespa/provider.yaml                      |    6 +-
 providers/vespa/pyproject.toml                     |   12 +-
 .../vespa/src/airflow/providers/vespa/__init__.py  |    2 +-
 providers/weaviate/README.rst                      |    8 +-
 providers/weaviate/docs/changelog.rst              |   17 +
 providers/weaviate/docs/index.rst                  |    6 +-
 providers/weaviate/provider.yaml                   |    3 +-
 providers/weaviate/pyproject.toml                  |   11 +-
 .../src/airflow/providers/weaviate/__init__.py     |    2 +-
 providers/yandex/README.rst                        |    8 +-
 providers/yandex/docs/changelog.rst                |   17 +
 providers/yandex/docs/index.rst                    |    6 +-
 providers/yandex/provider.yaml                     |    3 +-
 providers/yandex/pyproject.toml                    |   11 +-
 .../src/airflow/providers/yandex/__init__.py       |    2 +-
 providers/ydb/README.rst                           |   16 +-
 providers/ydb/docs/changelog.rst                   |   16 +
 providers/ydb/docs/index.rst                       |   14 +-
 providers/ydb/provider.yaml                        |    3 +-
 providers/ydb/pyproject.toml                       |   13 +-
 .../ydb/src/airflow/providers/ydb/__init__.py      |    2 +-
 providers/zendesk/README.rst                       |    8 +-
 providers/zendesk/docs/changelog.rst               |   21 +
 providers/zendesk/docs/index.rst                   |    6 +-
 providers/zendesk/provider.yaml                    |    3 +-
 providers/zendesk/pyproject.toml                   |   11 +-
 .../src/airflow/providers/zendesk/__init__.py      |    2 +-
 pyproject.toml                                     |   53 +-
 registry/.eleventy.js                              |   37 +
 registry/AGENTS.md                                 |   33 +
 registry/README.md                                 |    2 +-
 registry/package.json                              |    2 +-
 registry/pnpm-lock.yaml                            |   60 +-
 registry/src/_data/durableModules.js               |   72 +
 registry/src/css/main.css                          |  352 +-
 registry/src/durable.njk                           |  108 +
 registry/src/explore.njk                           |    1 +
 registry/src/js/durable-filters.js                 |  130 +
 registry/src/provider-version.njk                  |   37 +
 registry/src/sitemap.njk                           |    1 +
 scripts/ci/airflow_version_check.py                |    2 +-
 scripts/ci/analyze_ci_job_durations.py             |   26 +-
 scripts/ci/analyze_e2e_flaky_tests.py              |    2 +-
 scripts/ci/docker-compose/backend-mysql.yml        |    6 +
 scripts/ci/docker-compose/backend-postgres.yml     |   10 +-
 scripts/ci/docker-compose/base.yml                 |    9 +
 scripts/ci/docker-compose/devcontainer.env         |    4 +-
 scripts/ci/docker-compose/devcontainer.yml         |    2 +-
 .../ci/docker-compose/integration-cassandra.yml    |    5 +
 scripts/ci/docker-compose/integration-celery.yml   |    8 +
 scripts/ci/docker-compose/integration-drill.yml    |    5 +
 .../docker-compose/integration-elasticsearch.yml   |    5 +
 scripts/ci/docker-compose/integration-kafka.yml    |    2 +
 scripts/ci/docker-compose/integration-kerberos.yml |    7 +
 scripts/ci/docker-compose/integration-keycloak.yml |    2 +
 .../ci/docker-compose/integration-localstack.yml   |    2 +
 scripts/ci/docker-compose/integration-mongo.yml    |    5 +
 scripts/ci/docker-compose/integration-mssql.yml    |    5 +
 .../ci/docker-compose/integration-openlineage.yml  |    5 +
 .../ci/docker-compose/integration-opensearch.yml   |    5 +
 scripts/ci/docker-compose/integration-otel.yml     |   11 +
 scripts/ci/docker-compose/integration-pinot.yml    |    2 +
 scripts/ci/docker-compose/integration-qdrant.yml   |    2 +
 scripts/ci/docker-compose/integration-redis.yml    |    7 +
 scripts/ci/docker-compose/integration-statsd.yml   |    8 +
 .../ci/docker-compose/integration-tinkerpop.yml    |    5 +
 scripts/ci/docker-compose/integration-trino.yml    |    5 +
 scripts/ci/docker-compose/integration-ydb.yml      |    2 +
 scripts/ci/docker-compose/local-all-sources.yml    |    6 +
 scripts/ci/docker-compose/local.yml                |    6 +
 scripts/ci/docker-compose/remove-sources.yml       |    1 +
 scripts/ci/docker-compose/tests-sources.yml        |    3 +-
 scripts/ci/extract_e2e_test_results.py             |    2 +-
 .../ci/lang_sdk_serialization}/__init__.py         |    0
 scripts/ci/lang_sdk_serialization/compare.py       |  322 +
 .../ci/lang_sdk_serialization/serialize_python.py  |  158 +
 scripts/ci/lang_sdk_serialization/test_dags.yaml   |  332 +
 scripts/ci/notify_uv_lock_conflicts.py             |    6 +-
 scripts/ci/prek/boring_cyborg.py                   |    2 +-
 scripts/ci/prek/breeze_cmd_line.py                 |    2 +-
 scripts/ci/prek/build_kustomize_overlays.py        |    2 +-
 scripts/ci/prek/capture_airflowctl_help.py         |    2 +-
 scripts/ci/prek/changelog_duplicates.py            |   11 +-
 scripts/ci/prek/check_aiobotocore_optional.py      |    2 +-
 .../ci/prek/check_airflow_bug_report_template.py   |    2 +-
 scripts/ci/prek/check_airflow_imports.py           |    2 +-
 scripts/ci/prek/check_airflow_imports_in_shared.py |    2 +-
 .../ci/prek/check_airflow_v_imports_in_tests.py    |    2 +-
 .../ci/prek/check_airflowctl_command_coverage.py   |    2 +-
 scripts/ci/prek/check_airflowctl_help_texts.py     |    2 +-
 scripts/ci/prek/check_applies_to_roots_in_sync.py  |  117 +
 .../prek/check_base_operator_partial_arguments.py  |    2 +-
 scripts/ci/prek/check_cli_definition_imports.py    |    2 +-
 scripts/ci/prek/check_common_ai_operators_index.py |    2 +-
 scripts/ci/prek/check_common_sql_dependency.py     |    2 +-
 scripts/ci/prek/check_conf_import_in_providers.py  |    2 +-
 scripts/ci/prek/check_conn_id_templated.py         |   20 +-
 scripts/ci/prek/check_connection_doc_labels.py     |    2 +-
 .../prek/check_contextmanager_class_decorators.py  |    1 +
 scripts/ci/prek/check_core_imports_in_sdk.py       |    2 +-
 scripts/ci/prek/check_default_configuration.py     |    2 +-
 scripts/ci/prek/check_deferrable_default.py        |    2 +-
 .../ci/prek/check_deferred_hook_configuration.py   |  294 +
 scripts/ci/prek/check_dependency_lower_bounds.py   |    9 +-
 scripts/ci/prek/check_deprecations.py              |    2 +-
 scripts/ci/prek/check_distribution_gitignore.py    |    2 +-
 scripts/ci/prek/check_example_dag_tags.py          |    2 +-
 scripts/ci/prek/check_excluded_provider_markers.py |   43 +-
 scripts/ci/prek/check_execution_api_versions.py    |   17 +-
 scripts/ci/prek/check_extra_packages_ref.py        |   10 +-
 scripts/ci/prek/check_first_limit.py               |    2 +-
 scripts/ci/prek/check_go_sdk_generated_drift.py    |  195 +
 .../prek/check_go_sdk_serialization_conformance.py |   63 +
 .../check_http_exception_import_from_fastapi.py    |    2 +-
 scripts/ci/prek/check_i18n_json.py                 |    2 +-
 scripts/ci/prek/check_imports_in_providers.py      |    4 +-
 scripts/ci/prek/check_init_decorator_arguments.py  |    2 +-
 scripts/ci/prek/check_init_in_tests.py             |    2 +-
 scripts/ci/prek/check_integrations_list.py         |    2 +-
 scripts/ci/prek/check_kubeconform.py               |    2 +-
 scripts/ci/prek/check_lazy_logging.py              |    2 +-
 .../check_mapped_column_nullable_annotations.py    |    2 +-
 .../prek/check_metrics_synced_with_the_registry.py |    2 +-
 scripts/ci/prek/check_migration_patterns.py        |    2 +-
 scripts/ci/prek/check_min_python_version.py        |    4 +-
 .../ci/prek/check_new_airflow_exception_usage.py   |    2 +-
 .../check_no_new_airflow_core_utils_modules.py     |    2 +-
 scripts/ci/prek/check_notice_files.py              |    2 +-
 .../ci/prek/check_openapi_exception_doc_in_sync.py |  390 ++
 scripts/ci/prek/check_order_dockerfile_extras.py   |    2 +-
 .../check_partition_mapper_defaults_in_sync.py     |    2 +-
 scripts/ci/prek/check_provide_session_kwargs.py    |    2 +-
 .../check_provider_config_fallback_defaults.py     |    2 +-
 scripts/ci/prek/check_provider_conn_fields.py      |  123 +-
 scripts/ci/prek/check_provider_docs.py             |    2 +-
 scripts/ci/prek/check_provider_yaml_files.py       |    2 +-
 .../check_providers_subpackages_all_have_init.py   |    2 +-
 scripts/ci/prek/check_revision_heads_map.py        |    2 +-
 scripts/ci/prek/check_schema_defaults.py           |    2 +-
 scripts/ci/prek/check_sdk_imports_in_core.py       |    2 +-
 scripts/ci/prek/check_security_doc_constants.py    |    2 +-
 .../prek/check_shared_distributions_structure.py   |    9 +-
 .../ci/prek/check_shared_distributions_usage.py    |    9 +-
 scripts/ci/prek/check_shared_mypy_hooks.py         |    2 +-
 .../ci/prek/check_supervisor_schemas_versions.py   |   13 +-
 scripts/ci/prek/check_system_tests.py              |    2 +-
 .../ci/prek/check_system_tests_hidden_in_index.py  |    2 +-
 .../check_template_context_variable_in_sync.py     |    4 +-
 scripts/ci/prek/check_template_fields.py           |    2 +-
 scripts/ci/prek/check_test_only_imports_in_src.py  |    2 +-
 scripts/ci/prek/check_tests_in_right_folders.py    |    2 +-
 scripts/ci/prek/check_ti_vs_tis_attributes.py      |   77 -
 scripts/ci/prek/check_trigger_serialize_init.py    |    2 +-
 .../check_ts_sdk_docs_package_version_in_sync.py   |    2 +-
 scripts/ci/prek/check_version_consistency.py       |    9 +-
 scripts/ci/prek/check_window_in_sync.py            |    2 +-
 scripts/ci/prek/check_xcom_model_columns.py        |  141 +
 .../ci/prek/check_yaml_importer_schema_versions.py |  137 +
 scripts/ci/prek/checkout_no_credentials.py         |    2 +-
 scripts/ci/prek/common_prek_utils.py               |   57 +-
 scripts/ci/prek/docstring_param_type.py            |    2 +-
 scripts/ci/prek/download_k8s_schemas.py            |    9 +-
 scripts/ci/prek/extract_permissions.py             |    1 +
 scripts/ci/prek/fab_permissions_doc.py             |    8 +
 scripts/ci/prek/generate_airflow_diagrams.py       |    2 +-
 scripts/ci/prek/generate_execution_api_schema.py   |    6 +-
 scripts/ci/prek/generate_openapi_spec.py           |    2 +-
 scripts/ci/prek/generate_openapi_spec_providers.py |    2 +-
 .../prek/generate_supervisor_schemas_snapshot.py   |    2 +-
 scripts/ci/prek/generate_volumes_for_sources.py    |    2 +-
 scripts/ci/prek/generate_yaml_importer_schema.py   |   66 +
 scripts/ci/prek/lint_helm.py                       |    2 +-
 scripts/ci/prek/lint_json_schema.py                |    2 +-
 scripts/ci/prek/migration_reference.py             |    2 +-
 scripts/ci/prek/migration_round_trip.py            |    2 +-
 scripts/ci/prek/mypy.py                            |    4 +-
 scripts/ci/prek/mypy_folder.py                     |    6 +-
 .../ci/prek/prevent_deprecated_sqlalchemy_usage.py |    2 +-
 .../regenerate_java_sdk_verification_metadata.py   |  165 +
 scripts/ci/prek/replace_bad_characters.py          |    2 +-
 scripts/ci/prek/ruff_format.py                     |    4 +-
 ...un_mypy_full_dist_local_venv_or_breeze_in_ci.py |    2 +-
 scripts/ci/prek/sort_in_the_wild.py                |    2 +-
 scripts/ci/prek/supported_versions.py              |   36 +-
 scripts/ci/prek/sync_go_sdk_schemas.py             |  145 +
 scripts/ci/prek/sync_provider_readme.py            |    9 +-
 scripts/ci/prek/sync_ts_sdk_schemas.py             |  127 +
 scripts/ci/prek/sync_uv_min_version_markers.py     |    2 +-
 scripts/ci/prek/ts_compile_lint_common_ai.py       |    1 +
 scripts/ci/prek/update_airflow_pyproject_toml.py   |   57 +-
 scripts/ci/prek/update_chart_dependencies.py       |    2 +-
 scripts/ci/prek/update_docker_gpg_keys.py          |    2 -
 scripts/ci/prek/update_example_dags_paths.py       |    2 +-
 scripts/ci/prek/update_go_sdk_readme_matrix.py     |    2 +-
 scripts/ci/prek/update_java_sdk_readme_matrix.py   |    2 +-
 scripts/ci/prek/update_notice_year.py              |    2 +-
 scripts/ci/prek/update_providers_build_files.py    |    2 +-
 scripts/ci/prek/update_providers_dependencies.py   |   30 +-
 scripts/ci/prek/update_source_date_epoch.py        |    2 +-
 scripts/ci/prek/update_tested_versions.py          |    2 +-
 scripts/ci/prek/update_ts_sdk_readme_matrix.py     |    2 +-
 scripts/ci/prek/update_versions.py                 |    2 +-
 scripts/ci/prek/upgrade_dependency_floors.py       |   13 +-
 scripts/ci/prek/upgrade_important_versions.py      |   19 +-
 scripts/ci/prek/validate_chart_annotations.py      |    2 +-
 scripts/ci/prek/validate_operators_init.py         |    2 +-
 scripts/ci/prek/vendor_k8s_json_schema.py          |    2 +-
 scripts/ci/prek_cache_markers.py                   |   60 +
 scripts/ci/slack_notification_state.py             |    8 +-
 .../testing/get_min_airflow_version_for_python.py  |    2 +-
 scripts/ci/testing/run_unit_tests.sh               |    9 +-
 scripts/ci/verify_helm_chart_package.py            |    2 +-
 scripts/cov/core_coverage.py                       |    1 -
 scripts/docker/entrypoint_ci.sh                    |   11 +-
 scripts/docker/install_os_dependencies.sh          |   87 +-
 scripts/docker/keys/python-3.10.asc                |  109 -
 scripts/in_container/bin/generate_mprocs_config.py |    2 +-
 .../in_container/install_airflow_and_providers.py  |    4 +-
 .../install_development_dependencies.py            |    2 +-
 scripts/in_container/provider_suspension.py        |   38 +
 scripts/in_container/run_agent_framework_tests.sh  |   94 +
 scripts/in_container/run_generate_constraints.py   |   53 +-
 scripts/in_container/run_pre_extras_install.py     |   64 +-
 .../in_container/run_provider_yaml_files_check.py  |   94 +-
 .../in_container/update_quarantined_test_status.py |    4 +-
 scripts/pyproject.toml                             |    7 +-
 .../tests/ci/lang_sdk_serialization}/__init__.py   |    0
 .../ci/lang_sdk_serialization/test_compare.py      |  419 ++
 scripts/tests/ci/prek/test_changelog_duplicates.py |   36 +-
 .../ci/prek/test_check_applies_to_roots_in_sync.py |   84 +
 .../tests/ci/prek/test_check_conn_id_templated.py  |   26 +-
 .../test_check_contextmanager_class_decorators.py  |   80 +
 .../prek/test_check_deferred_hook_configuration.py |  373 ++
 .../prek/test_check_excluded_provider_markers.py   |   56 +
 .../ci/prek/test_check_go_sdk_generated_drift.py   |  179 +
 .../test_check_go_sdk_serialization_conformance.py |   62 +
 .../test_check_openapi_exception_doc_in_sync.py    |  429 ++
 .../test_check_ui_field_behaviour_matches_hook.py  |  130 +
 scripts/tests/ci/prek/test_extract_permissions.py  |    3 +
 ...st_regenerate_java_sdk_verification_metadata.py |  175 +
 scripts/tests/ci/prek/test_supported_versions.py   |   71 +
 scripts/tests/ci/prek/test_sync_go_sdk_schemas.py  |  127 +
 scripts/tests/ci/prek/test_sync_ts_sdk_schemas.py  |  122 +
 .../ci/prek/test_update_airflow_pyproject_toml.py  |   58 +
 .../tests/ci/prek/test_update_tested_versions.py   |    4 +-
 .../ci/prek/test_upgrade_dependency_floors.py      |    4 +-
 .../ci/prek/test_upgrade_important_versions.py     |    5 +-
 scripts/tests/ci/test_analyze_ci_job_durations.py  |   58 +-
 scripts/tests/ci/test_notify_uv_lock_conflicts.py  |   16 +-
 scripts/tests/ci/test_prek_cache_optimizations.py  |  439 ++
 .../testing/test_compute_remaining_test_timeout.py |    4 +-
 .../test_get_min_airflow_version_for_python.py     |    6 +-
 scripts/tests/ci/testing/test_run_unit_tests.py    |   15 +
 .../tests/docker/test_get_distribution_specs.py    |   16 +-
 .../tests/in_container/test_provider_suspension.py |   64 +
 .../in_container/test_run_generate_constraints.py  |   79 +-
 .../in_container/test_run_pre_extras_install.py    |  142 +
 .../_shared => scripts/tests/tools}/__init__.py    |    0
 scripts/tests/tools/test_free_up_disk_space.py     |   98 +
 scripts/tools/check_if_limited_dependencies.py     |    2 +-
 scripts/tools/free_up_disk_space.sh                |   25 +-
 scripts/tools/initialize_virtualenv.py             |    6 +-
 scripts/tools/setup_breeze                         |    2 +-
 shared/configuration/pyproject.toml                |    5 +-
 shared/dagnode/pyproject.toml                      |    5 +-
 shared/dagnode/src/airflow_shared/dagnode/cycle.py |   73 +
 shared/dagnode/src/airflow_shared/dagnode/node.py  |  121 +-
 shared/dagnode/tests/dagnode/test_cycle.py         |   79 +
 shared/dagnode/tests/dagnode/test_node.py          |   36 +-
 shared/listeners/pyproject.toml                    |    5 +-
 shared/logging/pyproject.toml                      |    5 +-
 .../airflow_shared/logging/percent_formatter.py    |    5 +-
 .../src/airflow_shared/logging/structlog.py        |   19 +-
 shared/logging/tests/logging/test_structlog.py     |   53 +-
 shared/module_loading/pyproject.toml               |    5 +-
 shared/observability/pyproject.toml                |    5 +-
 .../src/airflow_shared/observability/__init__.py   |    7 +-
 .../observability/metrics/metrics_template.yaml    |   59 +-
 shared/plugins_manager/pyproject.toml              |    5 +-
 .../plugins_manager/plugins_manager.py             |   25 +-
 shared/providers_discovery/pyproject.toml          |    5 +-
 .../providers_discovery/providers_discovery.py     |    5 +
 shared/secrets_backend/pyproject.toml              |    5 +-
 shared/secrets_masker/pyproject.toml               |    5 +-
 shared/serialization/pyproject.toml                |    5 +-
 shared/state/pyproject.toml                        |    5 +-
 shared/state/src/airflow_shared/state/__init__.py  |   48 +-
 shared/state/tests/state/test_state.py             |   28 +
 shared/template_rendering/pyproject.toml           |    5 +-
 shared/timezones/pyproject.toml                    |    5 +-
 task-sdk-integration-tests/pyproject.toml          |    7 +-
 .../tests/task_sdk_tests/constants.py              |    2 +-
 .../tests/task_sdk_tests/jwt_plugin.py             |    4 +-
 .../task_sdk_tests/test_dag_run_operations.py      |    6 +-
 task-sdk/dev/generate_task_sdk_models.py           |   10 +-
 task-sdk/docs/airflow-metadata.schema.json         |   52 +-
 task-sdk/docs/api.rst                              |   39 +
 task-sdk/docs/concepts.rst                         |    2 +-
 task-sdk/docs/conf.py                              |    3 +-
 task-sdk/docs/deferred-vs-async-operators.rst      |   14 +-
 task-sdk/docs/dynamic-task-mapping.rst             |    8 +-
 task-sdk/docs/examples.rst                         |    4 +-
 task-sdk/docs/executable-bundle-spec.rst           |  125 +-
 task-sdk/docs/lang-sdk-spec.rst                    |   89 +-
 task-sdk/docs/ts-bundle-spec.rst                   |   26 +-
 task-sdk/pyproject.toml                            |   23 +-
 task-sdk/src/airflow/sdk/__init__.py               |    6 +
 task-sdk/src/airflow/sdk/__init__.pyi              |    4 +
 task-sdk/src/airflow/sdk/api/client.py             |  141 +-
 .../src/airflow/sdk/api/datamodels/_generated.py   |  174 +-
 task-sdk/src/airflow/sdk/bases/decorator.py        |   31 +-
 task-sdk/src/airflow/sdk/bases/operator.py         |   40 +-
 task-sdk/src/airflow/sdk/bases/timetable.py        |    7 +
 task-sdk/src/airflow/sdk/bases/xcom.py             |    4 +-
 .../airflow/sdk/coordinators/_bundle_metadata.py   |   28 +-
 .../src/airflow/sdk/coordinators/_dag_importer.py  |  166 +
 .../src/airflow/sdk/coordinators/_subprocess.py    |  404 +-
 .../sdk/coordinators/executable/_bundle_reader.py  |  195 +
 .../sdk/coordinators/executable/_dag_importer.py   |  105 +
 .../sdk/coordinators/executable/coordinator.py     |  179 +-
 .../airflow/sdk/coordinators/java/_dag_importer.py |  122 +
 .../airflow/sdk/coordinators/java/_jar_manifest.py |   71 +
 .../airflow/sdk/coordinators/java/coordinator.py   |  179 +-
 .../sdk/coordinators/node/_bundle_reader.py        |  225 +-
 .../airflow/sdk/coordinators/node/_dag_importer.py |   72 +
 .../airflow/sdk/coordinators/node/coordinator.py   |   53 +-
 .../src/airflow/sdk/definitions/_internal/loop.py  |  218 +
 .../src/airflow/sdk/definitions/_internal/node.py  |   15 +-
 .../src/airflow/sdk/definitions/asset/__init__.py  |   15 +-
 .../airflow/sdk/definitions/asset/decorators.py    |    2 +-
 task-sdk/src/airflow/sdk/definitions/context.py    |    8 +-
 task-sdk/src/airflow/sdk/definitions/dag.py        |  131 +-
 .../sdk/definitions/decorators/task_group.py       |   39 +-
 .../src/airflow/sdk/definitions/mappedoperator.py  |    1 -
 task-sdk/src/airflow/sdk/definitions/taskgroup.py  |   90 +-
 .../airflow/sdk/definitions/timetables/assets.py   |   76 +-
 task-sdk/src/airflow/sdk/definitions/variable.py   |   55 +-
 task-sdk/src/airflow/sdk/definitions/xcom_arg.py   |    3 +-
 task-sdk/src/airflow/sdk/exceptions.py             |    4 +
 task-sdk/src/airflow/sdk/execution_time/bundles.py |   90 +
 .../sdk/execution_time/callback_supervisor.py      |    5 +-
 task-sdk/src/airflow/sdk/execution_time/comms.py   |   63 +-
 task-sdk/src/airflow/sdk/execution_time/context.py |  162 +-
 .../src/airflow/sdk/execution_time/coordinator.py  |  211 +-
 .../airflow/sdk/execution_time/lazy_sequence.py    |    4 +
 task-sdk/src/airflow/sdk/execution_time/loop.py    |  104 +
 .../airflow/sdk/execution_time/request_handlers.py |   43 +-
 .../airflow/sdk/execution_time/schema/schema.json  |  200 +
 .../sdk/execution_time/schema/versions/__init__.py |   14 +-
 .../execution_time/schema/versions/v2026_10_30.py  |   72 +-
 .../src/airflow/sdk/execution_time/supervisor.py   |  327 +-
 .../src/airflow/sdk/execution_time/task_runner.py  |  247 +-
 task-sdk/src/airflow/sdk/execution_time/tracing.py |   60 +
 task-sdk/src/airflow/sdk/importers/base.py         |  229 +-
 .../src/airflow/sdk/importers/python_importer.py   |   30 +-
 .../sdk/importers/yaml_importer/__init__.py        |   33 +
 .../airflow/sdk/importers/yaml_importer/builder.py |  455 ++
 .../sdk/importers/yaml_importer/importer.py        |  169 +
 .../sdk/importers/yaml_importer/migrator.py        |  169 +
 .../airflow/sdk/importers/yaml_importer/models.py  |  527 ++
 .../airflow/sdk/importers/yaml_importer/parser.py  |  102 +
 .../sdk/importers/yaml_importer/schema.json        |  417 ++
 .../importers/yaml_importer/versions/__init__.py   |   38 +
 task-sdk/src/airflow/sdk/importers/zip_importer.py |   66 +-
 task-sdk/src/airflow/sdk/io/path.py                |    3 +-
 task-sdk/src/airflow/sdk/lineage.py                |    2 +-
 task-sdk/src/airflow/sdk/log.py                    |   48 +-
 task-sdk/src/airflow/sdk/serde/__init__.py         |   10 +-
 .../src/airflow/sdk/serde/serializers/datetime.py  |    2 +-
 task-sdk/src/airflow/sdk/types.py                  |   11 +-
 task-sdk/tests/conftest.py                         |    6 +
 task-sdk/tests/task_sdk/__init__.py                |   10 +-
 task-sdk/tests/task_sdk/api/test_client.py         |  848 +--
 task-sdk/tests/task_sdk/bases/test_decorator.py    |   12 +
 task-sdk/tests/task_sdk/bases/test_operator.py     |  158 +-
 task-sdk/tests/task_sdk/bases/test_xcom.py         |   16 +
 .../coordinators/executable/_bundle_test_utils.py  |   98 +
 .../coordinators/executable/test_bundle_reader.py  |  217 +
 .../coordinators/executable/test_coordinator.py    |  313 +-
 .../coordinators/executable/test_dag_importer.py   |  283 +
 .../task_sdk/coordinators/java/_jar_test_utils.py  |   53 +
 .../task_sdk/coordinators/java/test_coordinator.py |  389 +-
 .../coordinators/java/test_dag_importer.py         |  327 +
 .../coordinators/java/test_jar_manifest.py         |   94 +
 .../coordinators/node/_bundle_test_utils.py        |   60 +-
 .../coordinators/node/test_bundle_reader.py        |  133 +-
 .../task_sdk/coordinators/node/test_coordinator.py |  152 +-
 .../coordinators/node/test_dag_importer.py         |  275 +
 .../task_sdk/coordinators/test_dag_importer.py     |  214 +
 .../tests/task_sdk/coordinators/test_subprocess.py |  685 +-
 .../task_sdk/definitions/_internal/test_loop.py    |  431 ++
 .../definitions/_internal/test_templater.py        |    4 +-
 .../task_sdk/definitions/decorators/test_result.py |   39 +-
 .../definitions/decorators/test_task_group.py      |  120 +-
 task-sdk/tests/task_sdk/definitions/test_asset.py  |   16 +
 task-sdk/tests/task_sdk/definitions/test_dag.py    |  366 +-
 .../tests/task_sdk/definitions/test_variables.py   |  139 +-
 .../tests/task_sdk/definitions/test_xcom_arg.py    |   51 +-
 .../task_sdk/definitions/timetables/test_assets.py |  166 +
 .../execution_time/schema/test_migrator.py         |  155 +-
 .../tests/task_sdk/execution_time/test_bundles.py  |   86 +
 .../execution_time/test_callback_supervisor.py     |   14 +
 .../tests/task_sdk/execution_time/test_comms.py    |   76 +-
 .../tests/task_sdk/execution_time/test_context.py  |  370 +-
 .../task_sdk/execution_time/test_coordinator.py    |  412 +-
 .../tests/task_sdk/execution_time/test_loop.py     |  245 +
 .../execution_time/test_request_handlers.py        |   51 +
 .../tests/task_sdk/execution_time/test_secrets.py  |   20 +
 .../task_sdk/execution_time/test_supervisor.py     |  953 ++-
 .../task_sdk/execution_time/test_task_runner.py    |  655 +-
 .../tests/task_sdk/execution_time/test_tracing.py  |  144 +
 .../task_sdk/importers/test_python_importer.py     |   20 +
 task-sdk/tests/task_sdk/importers/test_registry.py |  291 +
 .../tests/task_sdk/importers/test_zip_importer.py  |   27 +
 .../task_sdk/importers/yaml_importer}/__init__.py  |    0
 .../importers/yaml_importer/example_dag.yaml       |   69 +
 .../importers/yaml_importer/test_importer.py       |  605 ++
 .../importers/yaml_importer/test_migrator.py       |  188 +
 .../importers/yaml_importer/test_parser.py         |  586 ++
 task-sdk/tests/task_sdk/serde/test_serializers.py  |    2 +-
 task-sdk/tests/task_sdk/test_log.py                |  121 +
 ts-sdk/.pre-commit-config.yaml                     |   15 +
 ts-sdk/README.md                                   |  361 +-
 ts-sdk/adr/0002-native-dag-interface.md            |  149 +-
 ts-sdk/api-docs/dag-authoring-api.ts               |   12 +-
 ts-sdk/api-docs/hitl-api.ts                        |   32 +
 ts-sdk/api-docs/supporting-types.ts                |    8 +-
 ts-sdk/capabilities.yaml                           |   14 +-
 ts-sdk/docs/index.md                               |   68 +-
 ts-sdk/example/README.md                           |   38 +-
 ts-sdk/example/dags/typescript_example.py          |   10 +
 ts-sdk/example/package.json                        |    4 +-
 ts-sdk/example/src/ai-approval.ts                  |  198 +
 ts-sdk/example/src/hitl.ts                         |  137 +
 ts-sdk/example/src/main.ts                         |   48 +-
 ts-sdk/example/src/native.ts                       |  167 +
 ts-sdk/example/tsconfig.json                       |    4 +-
 ts-sdk/package.json                                |    9 +-
 ts-sdk/pnpm-lock.yaml                              |  725 +--
 ts-sdk/schema/dag-schema.json                      |   27 +-
 ts-sdk/schema/supervisor-schema.json               | 5427 ++++++++++++++++
 .../ci/prek/check_serialization_conformance.py     |   57 +
 ts-sdk/scripts/ci/prek/check_supervisor_schema.py  |    4 +-
 ts-sdk/scripts/ci/prek/sync_dag_schema.py          |   65 -
 ts-sdk/scripts/generate-dag-schema.mjs             |    4 +-
 ts-sdk/scripts/generate-supervisor.mjs             |    7 +-
 ts-sdk/src/cli/bundle-encoder.ts                   |  181 +-
 ts-sdk/src/cli/pack.ts                             |  144 +-
 ts-sdk/src/coordinator/client.ts                   |  286 +-
 ts-sdk/src/coordinator/manifest.ts                 |   24 +-
 ts-sdk/src/coordinator/operator-runner.ts          |  140 +
 ts-sdk/src/coordinator/protocol.ts                 |   18 +
 ts-sdk/src/coordinator/runtime.ts                  |  118 +-
 ts-sdk/src/coordinator/serde.ts                    |  557 ++
 ts-sdk/src/generated/supervisor.ts                 |  173 +-
 ts-sdk/src/hitl/index.ts                           |   30 +
 ts-sdk/src/hitl/operator.ts                        |  281 +
 ts-sdk/src/hitl/spec.ts                            |  447 ++
 ts-sdk/src/index.ts                                |   21 +-
 ts-sdk/src/sdk/bundle.ts                           |   37 +
 ts-sdk/src/sdk/client-types.ts                     |   23 +
 ts-sdk/src/sdk/client.ts                           |   74 +-
 ts-sdk/src/sdk/dag-graph.ts                        |  236 +
 ts-sdk/src/sdk/dag.ts                              | 1062 +++-
 ts-sdk/src/sdk/env.ts                              |   28 +
 ts-sdk/src/sdk/module-source.ts                    |   74 +
 ts-sdk/src/sdk/operator.ts                         |  150 +
 ts-sdk/src/sdk/plain-json.ts                       |   60 +
 ts-sdk/src/sdk/trigger-dag-run-execute.ts          |  180 +
 ts-sdk/src/sdk/trigger-dag-run.ts                  |  195 +
 ts-sdk/tests/cli/fixtures/bundle-v1.min.mjs        |    6 +-
 ts-sdk/tests/cli/pack.test.ts                      |  391 +-
 ts-sdk/tests/conformance/serialize_typescript.ts   |  163 +
 ts-sdk/tests/coordinator/arg-binding.test.ts       |   19 +
 ts-sdk/tests/coordinator/client.test.ts            |  256 +-
 ts-sdk/tests/coordinator/integration.test.ts       | 1026 ++-
 ts-sdk/tests/coordinator/operator-runner.test.ts   |  207 +
 ts-sdk/tests/coordinator/runtime-manifest.test.ts  |   26 +
 ts-sdk/tests/coordinator/serde.test.ts             |  888 +++
 ts-sdk/tests/hitl/operator.test.ts                 |  180 +
 ts-sdk/tests/hitl/spec.test.ts                     |  353 +
 ts-sdk/tests/public-api.test.ts                    |  148 +-
 ts-sdk/tests/sdk/branching.test.ts                 |  242 +
 ts-sdk/tests/sdk/conditional.test.ts               |  308 +
 ts-sdk/tests/sdk/dag.test.ts                       |  756 ++-
 ts-sdk/tests/sdk/hitl-inference.test.ts            |  117 +
 ts-sdk/tests/sdk/native-dag-example.test.ts        |  213 +
 ts-sdk/tests/sdk/trigger-dag-run.test.ts           |  326 +
 ts-sdk/tsconfig.json                               |   12 +-
 ts-sdk/vitest.config.ts                            |   15 +
 uv.lock                                            | 6708 ++++++++------------
 3764 files changed, 266174 insertions(+), 48093 deletions(-)
 create mode 100644 .apache-magpie-overrides/issue-tracker-config.md
 create mode 100644 .apache-magpie-overrides/pmc-roster.md
 create mode 100644 .apache-magpie-overrides/pr-management-code-review-criteria.md
 create mode 100644 .apache-magpie-overrides/pr-management-quick-merge-config.md
 create mode 100644 .apache-magpie-overrides/reassess-pool-defaults.md
 create mode 100644 .apache-magpie-overrides/release-trains.md
 create mode 100644 .apache-magpie-overrides/release-vote-tally.md
 create mode 100644 .apache-magpie-overrides/reproducer-conventions.md
 create mode 100644 .apache-magpie-overrides/runtime-invocation.md
 create mode 100644 .github/workflows/agent-framework-tests.yml
 delete mode 100644 .github/workflows/scheduled-upgrade-check-v3-3-test.yml
 create mode 100644 .github/workflows/scheduled-upgrade-check-v3-4-test.yml
 create mode 100644 airflow-core/adr/lang-sdk/0010-native-dag-processing.md
 create mode 100644 airflow-core/adr/lang-sdk/0011-mixed-language-dag-processing.md
 create mode 100644 airflow-core/adr/lang-sdk/0012-lang-sdk-parse-protocol.md
 create mode 100644 airflow-core/adr/lang-sdk/0013-persisted-task-handler-bindings.md
 create mode 100644 airflow-core/adr/lang-sdk/0014-bundle-metadata-and-cache-digest.md
 create mode 100644 airflow-core/adr/lang-sdk/0015-per-dag-source-in-bundle-artifact.md
 create mode 100644 airflow-core/docs/administration-and-deployment/dag-importers.rst
 create mode 100644 airflow-core/docs/authoring-and-scheduling/loops-and-mapped-tasks.rst
 create mode 100644 airflow-core/docs/authoring-and-scheduling/loops.rst
 create mode 100644 airflow-core/newsfragments/58543.feature.rst
 create mode 100644 airflow-core/newsfragments/66633.bugfix.rst
 create mode 100644 airflow-core/newsfragments/67592.bugfix.rst
 create mode 100644 airflow-core/newsfragments/68517.significant.rst
 create mode 100644 airflow-core/newsfragments/68917.bugfix.rst
 delete mode 100644 airflow-core/newsfragments/69148.feature.rst
 delete mode 100644 airflow-core/newsfragments/69469.improvement.rst
 create mode 100644 airflow-core/newsfragments/69469.significant.rst
 create mode 100644 airflow-core/newsfragments/69597.feature.rst
 create mode 100644 airflow-core/newsfragments/72100.significant.rst
 create mode 100644 airflow-core/newsfragments/73116.significant.rst
 create mode 100644 airflow-core/newsfragments/73554.significant.rst
 create mode 100644 airflow-core/newsfragments/73746.significant.rst
 create mode 100644 airflow-core/newsfragments/73806.improvement.rst
 create mode 100644 airflow-core/newsfragments/73970.significant.rst
 create mode 100644 airflow-core/newsfragments/74151.significant.rst
 create mode 100644 airflow-core/newsfragments/74278.feature.rst
 create mode 100644 airflow-core/newsfragments/74499.bugfix.rst
 create mode 100644 airflow-core/newsfragments/task-loops.feature.rst
 create mode 100644 airflow-core/src/airflow/api_fastapi/common/http_metrics.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/common/parameters/job.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/common/region.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/execution.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/core_api/routes/ui/execution.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/core_api/services/public/dags.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/core_api/services/public/task_coordinates.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/core_api/services/ui/execution.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/dag_processor_tokens.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/datamodels/job.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/in_process.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/routes/jobs.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/versions/v2026_10_30_xcom_params.py
 create mode 100644 airflow-core/src/airflow/api_fastapi/execution_api/versions/v2027_02_28.py
 create mode 100644 airflow-core/src/airflow/cli/commands/dag_processor_token_command.py
 create mode 100644 airflow-core/src/airflow/dag_processing/api_client.py
 create mode 100644 airflow-core/src/airflow/dag_processing/importer_routing.py
 delete mode 100644 airflow-core/src/airflow/dag_processing/importers/__init__.py
 delete mode 100644 airflow-core/src/airflow/dag_processing/importers/base.py
 delete mode 100644 airflow-core/src/airflow/dag_processing/importers/python_importer.py
 create mode 100644 airflow-core/src/airflow/dag_processing/lang_sdk_processor.py
 create mode 100644 airflow-core/src/airflow/example_dags/example_task_loops.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0138_3_4_0_allocate_pending_task_attempt_numbers.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0139_3_4_0_add_source_reference_to_import_error.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0140_3_4_0_add_language_to_dag_code.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0141_3_4_0_add_timetable_asset_gated_to_dagmodel.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0142_3_4_0_unify_task_attempt_ownership.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0143_3_4_0_add_dynamic_region_storage.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0144_3_4_0_rename_stored_map_index.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0145_3_4_0_add_task_identity_to_events.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0146_3_4_0_add_asset_state_writer_identity.py
 create mode 100644 airflow-core/src/airflow/migrations/versions/0147_3_5_0_add_session_id_to_job.py
 create mode 100644 airflow-core/src/airflow/models/dynamic_region.py
 delete mode 100644 airflow-core/src/airflow/models/hitl_history.py
 create mode 100644 airflow-core/src/airflow/models/task_coordinates.py
 delete mode 100644 airflow-core/src/airflow/models/taskinstancehistory.py
 create mode 100644 airflow-core/src/airflow/ui/src/components/AssetProgressCell.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/Breadcrumb/CrumbSwitcher.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DAGWarningsModal.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DagActions/RunBackfillForm.dateRange.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DagImportErrorModal.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DataTable/DataTable.columnVisibility.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DataTable/DataTable.stateChange.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/DataTable/features.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/ErrorModal.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/ErrorModal.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/FilterBar/filters/RunStateFilter.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/FilterBar/filters/pausedStateParams.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/FilterBar/filters/runStateParams.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/FilterBar/filters/runStateParams.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/ImportErrorCount.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/MarkAs/utils.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/MonacoEditor/configureMonaco.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/PauseOrDrainChoiceModal.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.test.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/components/SearchDags/SearchDagsControl.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/components/SearchDags/index.ts
 create mode 100644 airflow-core/src/airflow/ui/src/components/SearchSelect.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/StatsCard.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/PausedDagOptions.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/PausedDagOptions.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/RecentConfigSelect.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/RecentConfigSelect.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGButton.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGModal.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/VersionCompareSelect.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/components/VersionCompareSelect.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useAdvancedSearch.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useDagRunsLimit.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useDagRunsLimit.ts
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useHITLReviewTabs.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useLoopRuleStats.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useSelectedVersion.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useTaskInstanceCoordinates.ts
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useTaskInstanceView.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useTaskInstanceView.ts
 create mode 100644 airflow-core/src/airflow/ui/src/hooks/useUrlOrStoredState.ts
 create mode 100644 airflow-core/src/airflow/ui/src/i18n/locales.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/DagRunSwitcherButton.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/PanelButtons.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/SearchDagRuns.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/SearchDagRuns.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/SearchDags.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/SearchDags.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/runLimitConfig.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/runLimitConfig.ts
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/searchOptions.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Details/searchOptions.ts
 delete mode 100644 airflow-core/src/airflow/ui/src/layouts/StorageLayout.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Asset/AssetStateStore/AssetStateStore.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Calendar/Calendar.failedView.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Calendar/Calendar.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Code/Code.test.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Code/VersionCompareSelect.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/RequiredActionsRoute.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Tasks/Tasks.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.i18n.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/Versions.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/Versions.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Dag/Versions/index.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/AssetSchedule.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/BulkPauseDrainDagsButton.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/BulkUnpauseDagsButton.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagFolderTree/DagFolderTree.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagFolderTree/DagFolderTree.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagFolderTree/buildFolderTree.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagFolderTree/buildFolderTree.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagFolderTree/index.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagsListColumns.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/DagsListCountsContext.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/RecentTaskStateCounts.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/RecentTaskStateCounts.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/RecentTaskStateCountsColumn.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/RecentTaskStateCountsHeader.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/RecentTaskStateCountsHeader.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/DagsList/Schedule.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Events/Events.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstances.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstances.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/LoopIterations/IterationSelect.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/LoopIterations/IterationSelect.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/LoopIterations/index.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/LoopIterations/loopUtils.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/LoopIterations/loopUtils.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/useLoopOutcomeStats.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/Execution.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/Execution.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Task/Overview/LoopHistoryChart.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Task/Overview/LoopHistoryChart.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskInstance/AssetEvents.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskInstance/Details.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/LogsTryNumber.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskInstance/stateReason.ts
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskInstances/DeleteTaskInstanceButton.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskStateStore/TaskStateStore.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/TaskStateStore/TaskStateStoreModal.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/XCom/XCom.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/XCom/XComEntry.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/pages/XCom/XComModal.test.tsx
 delete mode 100644 airflow-core/src/airflow/ui/src/queries/useBulkClearDryRun.ts
 delete mode 100644 airflow-core/src/airflow/ui/src/queries/useBulkClearTaskInstances.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useBulkMarkAsDryRun.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useBulkSetDagSchedulingState.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useClearTaskInstances.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useClearTaskInstancesDryRun.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useCreateBackfill.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useDagFolders.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useIsLoopGroup.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useLoopHistory.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useLoopSummary.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useLoopSummary.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/usePatchTaskInstance.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useRecentTaskStateCounts.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useRecentTaskStateCounts.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useTaskInstanceNote.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useTrigger.test.tsx
 create mode 100644 airflow-core/src/airflow/ui/src/utils/executionParams.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/executionParams.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/formatNumber.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/formatNumber.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/hasDagRunConfig.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/hasDagRunConfig.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/intlCache.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/isOneOf.test.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/isOneOf.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/loopTaskInstance.ts
 create mode 100644 airflow-core/src/airflow/ui/src/utils/renderMermaid.test.ts
 create mode 100644 airflow-core/src/airflow/ui/tests/e2e/fixtures/task-tries-data.ts
 delete mode 100644 airflow-core/src/airflow/ui/tests/e2e/pages/DagDetailPage.ts
 delete mode 100644 airflow-core/src/airflow/ui/tests/e2e/specs/dag-detail.spec.ts
 create mode 100644 airflow-core/src/airflow/ui/tests/e2e/specs/task-tries.spec.ts
 create mode 100644 airflow-core/src/airflow/utils/log/task_log_address.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/common/test_http_metrics.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_execution.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_execution.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/core_api/services/ui/test_execution.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/test_dag_processor_client.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/test_dag_processor_tokens.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/test_in_process.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_jobs.py
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/versions/v2026_10_30/test_dag_run_notes.py
 rename airflow-core/tests/unit/{dag_processing/importers => api_fastapi/execution_api/versions/v2027_02_28}/__init__.py (100%)
 create mode 100644 airflow-core/tests/unit/api_fastapi/execution_api/versions/v2027_02_28/test_jobs.py
 create mode 100644 airflow-core/tests/unit/cli/commands/test_dag_processor_token_command.py
 create mode 100644 airflow-core/tests/unit/dag_processing/fake_lang_sdk.py
 delete mode 100644 airflow-core/tests/unit/dag_processing/importers/test_registry.py
 create mode 100644 airflow-core/tests/unit/dag_processing/lang_sdk_fixtures/go_native.json
 create mode 100644 airflow-core/tests/unit/dag_processing/lang_sdk_fixtures/java_native.json
 create mode 100644 airflow-core/tests/unit/dag_processing/lang_sdk_fixtures/ts_conformance.json
 create mode 100644 airflow-core/tests/unit/dag_processing/test_api_client.py
 create mode 100644 airflow-core/tests/unit/dag_processing/test_importer_routing.py
 create mode 100644 airflow-core/tests/unit/dag_processing/test_lang_sdk_processor.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0049_remove_pickled_data_from_xcom_table.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0055_remove_pickled_data_from_dagrun_table.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0080_deadline_callback_migration.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0094_deadline_callback_migration.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0117_deadline_interval_json_migration.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0129_add_indexes_on_serialized_dag_and_dag_code.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0131_lower_case_team_names.py
 delete mode 100644 airflow-core/tests/unit/migrations/test_0136_fold_task_map_into_xcom.py
 create mode 100644 airflow-core/tests/unit/migrations/test_0142_unify_task_attempt_ownership.py
 create mode 100644 airflow-core/tests/unit/migrations/test_0143_add_dynamic_region_storage.py
 create mode 100644 airflow-core/tests/unit/migrations/test_0144_rename_stored_map_index.py
 create mode 100644 airflow-core/tests/unit/models/conftest.py
 create mode 100644 airflow-core/tests/unit/models/test_dynamic_region.py
 create mode 100644 airflow-core/tests/unit/models/test_errors.py
 create mode 100644 airflow-core/tests/unit/models/test_task_coordinates.py
 create mode 100644 airflow-core/tests/unit/models/test_task_data.py
 create mode 100644 airflow-core/tests/unit/serialization/test_decoders.py
 create mode 100644 airflow-core/tests/unit/utils/log/test_task_log_address.py
 copy airflow-e2e-tests/{java-test-bundle => java-native-bundle}/.gitignore (100%)
 create mode 100644 airflow-e2e-tests/java-native-bundle/build.gradle
 copy airflow-e2e-tests/{java-test-bundle => java-native-bundle}/gradle.properties (100%)
 create mode 100644 airflow-e2e-tests/java-native-bundle/settings.gradle
 create mode 100644 airflow-e2e-tests/java-native-bundle/src/java/org/apache/airflow/e2e/NativeBundleBuilder.java
 create mode 100644 airflow-e2e-tests/java-native-bundle/src/java/org/apache/airflow/e2e/nativedag/AnnotationDag.java
 create mode 100644 airflow-e2e-tests/java-native-bundle/src/java/org/apache/airflow/e2e/nativedag/TargetDag.java
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/go_sdk_tests/test_go_sdk_dynamic_dag.py
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/go_sdk_tests/test_go_sdk_native_dag.py
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/go_sdk_tests/test_go_sdk_task_state.py
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/java_sdk_tests/test_java_sdk_native_dag.py
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/ts_sdk_tests/test_ts_sdk_hitl.py
 create mode 100644 airflow-e2e-tests/tests/airflow_e2e_tests/ts_sdk_tests/test_ts_sdk_native_dag.py
 create mode 100644 contributing-docs/32_open_pull_request_limit.rst
 create mode 100644 dev/breeze/doc/images/output_release-management_start-beta-process.svg
 create mode 100644 dev/breeze/doc/images/output_release-management_start-beta-process.txt
 create mode 100644 dev/breeze/doc/images/output_verify.svg
 create mode 100644 dev/breeze/doc/images/output_verify.txt
 create mode 100644 dev/breeze/src/airflow_breeze/commands/verify_commands.py
 create mode 100644 dev/breeze/src/airflow_breeze/utils/verification_plan.py
 create mode 100644 dev/breeze/tests/test_verification_plan.py
 create mode 100644 dev/breeze/tests/test_verify_commands.py
 create mode 100644 dev/close_prs_over_open_pr_limit.py
 create mode 100644 dev/registry/registry_tools/docs_guides.py
 create mode 100644 dev/registry/registry_tools/uri_schemes.py
 create mode 100644 dev/registry/tests/test_docs_guides.py
 create mode 100644 dev/registry/tests/test_uri_schemes.py
 create mode 100644 devel-common/src/sphinx_exts/airflow_spelling.py
 create mode 100644 devel-common/src/sphinx_exts/python_builtin_xrefs.py
 create mode 100644 devel-common/src/sphinx_exts/templates/provider_connection_services.rst.jinja2
 create mode 100644 devel-common/src/tests_common/test_utils/attempt_ownership.py
 create mode 100644 devel-common/tests/conftest.py
 create mode 100644 devel-common/tests/unit/sphinx_exts/docs_build/test_spelling_checks.py
 create mode 100644 devel-common/tests/unit/sphinx_exts/test_airflow_spelling.py
 create mode 100644 devel-common/tests/unit/sphinx_exts/test_providers_extensions.py
 create mode 100644 devel-common/tests/unit/sphinx_exts/test_python_builtin_xrefs.py
 create mode 100644 devel-common/tests/unit/tests_common/test_dag_maker.py
 create mode 100644 go-sdk/airflow/conformance_test.go
 create mode 100644 go-sdk/airflow/dag.go
 create mode 100644 go-sdk/airflow/dag_factory_test.go
 create mode 100644 go-sdk/airflow/dag_source_test.go
 create mode 100644 go-sdk/airflow/dag_test.go
 create mode 100644 go-sdk/airflow/enums.go
 create mode 100644 go-sdk/airflow/enums_test.go
 create mode 100644 go-sdk/airflow/export_test.go
 create mode 100644 go-sdk/airflow/if.go
 create mode 100644 go-sdk/airflow/if_test.go
 create mode 100644 go-sdk/airflow/inputs.go
 create mode 100644 go-sdk/airflow/inputs_test.go
 create mode 100644 go-sdk/airflow/node.go
 create mode 100644 go-sdk/airflow/node_test.go
 create mode 100644 go-sdk/airflow/serialize.go
 create mode 100644 go-sdk/airflow/serialize_test.go
 create mode 100644 go-sdk/airflow/spec.gen.go
 create mode 100644 go-sdk/airflow/spec.go
 create mode 100644 go-sdk/airflow/spec_fields.gen.go
 create mode 100644 go-sdk/airflow/switch.go
 create mode 100644 go-sdk/airflow/switch_test.go
 create mode 100644 go-sdk/airflow/task_group.go
 create mode 100644 go-sdk/airflow/task_group_test.go
 create mode 100644 go-sdk/airflow/task_option.go
 create mode 100644 go-sdk/airflow/testdata/foreignnode/main.go
 create mode 100644 go-sdk/airflow/testdata/foreigntaskoption/main.go
 create mode 100644 go-sdk/airflow/trigger_dag_run.go
 create mode 100644 go-sdk/airflow/trigger_dag_run_test.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/sources.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/sources_test.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/testdata/handlersonly/main.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/testdata/multidag/factory/factory.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/testdata/multidag/main.go
 create mode 100644 go-sdk/cmd/airflow-go-pack/testdata/multidag/reports/reports.go
 create mode 100644 go-sdk/example/bundle/taskstate/taskstate.go
 create mode 100644 go-sdk/example/dynamic/dags.go
 create mode 100644 go-sdk/example/dynamic/dags.yaml
 create mode 100644 go-sdk/example/dynamic/main.go
 create mode 100644 go-sdk/example/native/main.go
 create mode 100644 go-sdk/example/native/report.go
 create mode 100644 go-sdk/internal/bundle/trigger.go
 create mode 100644 go-sdk/internal/genlicense/genlicense.go
 create mode 100644 go-sdk/internal/genlicense/genlicense_test.go
 create mode 100644 go-sdk/internal/genspec/authoring.go
 create mode 100644 go-sdk/internal/genspec/authoring_test.go
 create mode 100644 go-sdk/internal/genspec/fields.go
 create mode 100644 go-sdk/internal/genspec/fields_test.go
 create mode 100644 go-sdk/internal/genspec/main.go
 create mode 100644 go-sdk/internal/genspec/main_test.go
 create mode 100644 go-sdk/internal/genspec/normalize.go
 create mode 100644 go-sdk/internal/genspec/normalize_test.go
 create mode 100644 go-sdk/pkg/execution/dag_parse.go
 create mode 100644 go-sdk/pkg/execution/dag_parse_test.go
 create mode 100644 go-sdk/pkg/execution/trigger_runner.go
 create mode 100644 go-sdk/pkg/execution/trigger_runner_test.go
 create mode 100644 go-sdk/schema/dag-schema.json
 create mode 100644 go-sdk/schema/supervisor-schema.json
 create mode 100644 java-sdk/example/src/java/org/apache/airflow/example/nativedag/AnnotationExample.java
 create mode 100644 java-sdk/example/src/java/org/apache/airflow/example/nativedag/InterfaceExample.java
 create mode 100644 java-sdk/example/src/java/org/apache/airflow/example/nativedag/TargetExample.java
 create mode 100644 java-sdk/plugin/src/main/kotlin/org/apache/airflow/sdk/plugin/ClassFiles.kt
 create mode 100644 java-sdk/plugin/src/main/kotlin/org/apache/airflow/sdk/plugin/PackDagSources.kt
 create mode 100644 java-sdk/plugin/src/test/kotlin/org/apache/airflow/sdk/plugin/AirflowSdkPluginTest.kt
 create mode 100644 java-sdk/plugin/src/test/kotlin/org/apache/airflow/sdk/plugin/ClassFilesTest.kt
 create mode 100644 java-sdk/plugin/src/test/kotlin/org/apache/airflow/sdk/plugin/PackDagSourcesTest.kt
 create mode 100644 java-sdk/plugin/src/test/kotlin/org/apache/airflow/sdk/plugin/TestSupport.kt
 create mode 100644 java-sdk/processor/src/main/kotlin/org/apache/airflow/sdk/AirflowProcessor.kt
 delete mode 100644 java-sdk/processor/src/main/kotlin/org/apache/airflow/sdk/BuilderProcessor.kt
 create mode 100644 java-sdk/processor/src/test/kotlin/org/apache/airflow/sdk/AirflowProcessorTest.kt
 delete mode 100644 java-sdk/processor/src/test/kotlin/org/apache/airflow/sdk/BuilderTest.kt
 create mode 100755 java-sdk/scripts/ci/prek/check_serialization_conformance.py
 create mode 100644 java-sdk/sdk/schema/dag-schema.json
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Arg.kt
 delete mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Builder.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/BundleInspector.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Condition.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Decider.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Deps.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Endpoint.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/IdValidation.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/Switch.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/TaskGroupRef.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/TriggerDagRun.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/execution/Serde.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/execution/TriggerRunner.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/DagSource.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/Fields.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/Ids.kt
 create mode 100644 java-sdk/sdk/src/main/kotlin/org/apache/airflow/sdk/internal/Refs.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/example/DagSourceFixtures.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/BundleInspectorTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/ConditionTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/DagSourceTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/IdValidationTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/SwitchTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/TaskGroupTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/TriggerDagRunTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/conformance/SerializeJava.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/execution/SerdeTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/execution/TriggerRunnerTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/internal/ArgValuesTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/internal/RefsTest.kt
 create mode 100644 java-sdk/sdk/src/test/kotlin/org/apache/airflow/sdk/internal/RegistrarTest.kt
 delete mode 100644 kubernetes-tests/lang_sdk/Dockerfile.java
 create mode 100644 kubernetes-tests/lang_sdk/Dockerfile.runtimes
 copy manifests/.gitignore => kubernetes-tests/lang_sdk/airflowignore_all (100%)
 delete mode 100644 kubernetes-tests/lang_sdk/dags/lang_sdk_combined.py
 create mode 100644 kubernetes-tests/lang_sdk/dags/lang_sdk_mixed_language.py
 delete mode 100644 kubernetes-tests/lang_sdk/java_example/src/java/org/apache/airflow/k8sexample/CombinedExample.java
 create mode 100644 kubernetes-tests/lang_sdk/java_example/src/java/org/apache/airflow/k8sexample/MixedLanguageExample.java
 delete mode 100644 kubernetes-tests/lang_sdk/pod_templates/lang_sdk_golang.yaml
 delete mode 100644 kubernetes-tests/lang_sdk/pod_templates/lang_sdk_java.yaml
 create mode 100644 kubernetes-tests/lang_sdk/pod_templates/lang_sdk_worker.yaml
 delete mode 100644 kubernetes-tests/lang_sdk/stage_artifacts.py
 create mode 100644 kubernetes-tests/lang_sdk/ts_example/.gitignore
 create mode 100644 kubernetes-tests/lang_sdk/ts_example/package.json
 create mode 100644 kubernetes-tests/lang_sdk/ts_example/pnpm-lock.yaml
 create mode 100644 kubernetes-tests/lang_sdk/ts_example/src/main.ts
 create mode 100644 kubernetes-tests/lang_sdk/ts_example/tsconfig.json
 delete mode 100644 kubernetes-tests/tests/kubernetes_tests/test_lang_sdk_coordinator_executor.py
 create mode 100644 kubernetes-tests/tests/kubernetes_tests/test_lang_sdk_mixed_language.py
 create mode 100644 kubernetes-tests/tests/kubernetes_tests/test_lang_sdk_native_dag.py
 create mode 100644 providers/amazon/docs/operators/duckdb.rst
 create mode 100644 providers/amazon/docs/transfer/exasol_to_s3.rst
 create mode 100644 providers/amazon/src/airflow/providers/amazon/aws/hooks/duckdb.py
 create mode 100644 providers/amazon/src/airflow/providers/amazon/aws/queues/kinesis.py
 create mode 100644 providers/amazon/tests/system/amazon/aws/example_duckdb.py
 create mode 100644 providers/amazon/tests/system/amazon/aws/example_emr_serverless_session.py
 create mode 100644 providers/amazon/tests/system/amazon/aws/example_exasol_to_s3.py
 create mode 100644 providers/amazon/tests/system/amazon/aws/example_kinesis_message_queue.py
 create mode 100644 providers/amazon/tests/unit/amazon/aws/executors/conftest.py
 create mode 100644 providers/amazon/tests/unit/amazon/aws/hooks/test_duckdb.py
 create mode 100644 providers/amazon/tests/unit/amazon/aws/operators/test_emr_serverless_session.py
 create mode 100644 providers/amazon/tests/unit/amazon/aws/queues/test_kinesis.py
 create mode 100644 providers/apache/kafka/src/airflow/providers/apache/kafka/triggers/shared_stream.py
 create mode 100644 providers/apache/kafka/tests/integration/apache/kafka/triggers/test_shared_stream.py
 create mode 100644 providers/apache/kafka/tests/unit/apache/kafka/triggers/test_shared_stream.py
 create mode 100644 providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor_types.py
 delete mode 100644 providers/cncf/kubernetes/tests/unit/cncf/kubernetes/models/__init__.py
 delete mode 100644 providers/cncf/kubernetes/tests/unit/cncf/kubernetes/models/test_secret.py
 create mode 100644 providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_k8s_model.py
 create mode 100644 providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_secret.py
 create mode 100644 providers/common/ai/docs/capabilities.rst
 delete mode 100644 providers/common/ai/docs/classifier_models.rst
 create mode 100644 providers/common/ai/docs/connections/index.rst
 create mode 100644 providers/common/ai/docs/decision_models.rst
 create mode 100644 providers/common/ai/docs/frameworks/adk.rst
 create mode 100644 providers/common/ai/docs/frameworks/index.rst
 create mode 100644 providers/common/ai/docs/frameworks/pydantic_ai.rst
 create mode 100644 providers/common/ai/docs/frameworks/strands.rst
 delete mode 100644 providers/common/ai/docs/guardrails.rst
 create mode 100644 providers/common/ai/docs/memory.rst
 create mode 100644 providers/common/ai/docs/stability.rst
 create mode 100644 providers/common/ai/docs/supported_services.rst
 create mode 100644 providers/common/ai/docs/tool_approval.rst
 create mode 100644 providers/common/ai/docs/toolsets/object_storage.rst
 create mode 100644 providers/common/ai/docs/why_common_ai.rst
 delete mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/caching_model.py
 delete mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/caching_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/capability.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/journal.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/replay_usage.py
 delete mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/step_counter.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/strands.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/durable/strands_storage.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_adk_agent.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_agent_memory.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_agent_tool_approval.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_agent_tool_judge.py
 delete mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_classifier_model.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_datafusion_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_decision_model.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_hook_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_object_storage_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_pydantic_ai_agent.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_sql_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_strands_agent.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_strands_durable.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/example_dags/example_why_common_ai.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/managed_agents/__init__.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/managed_agents/base.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/managed_agents/failover.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/mixins/usage_budget.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/_plugin_urls.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/model_panel.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/components/ModelPanel.tsx
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/components/NoModelInfo.tsx
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/components/Tooltip.tsx
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/hooks/useModelInfo.ts
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/model-api.ts
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/model.tsx
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/src/types/model.ts
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/tests/api.test.ts
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/plugins/www/tests/main.test.mjs
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/sandbox/boat.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/sandbox/islo.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/sandbox/opensandbox.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/tools/__init__.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/tools/_from_toolset.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/tools/adk.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/tools/strands.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/tools/tracing.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/toolsets/object_storage.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/coroutines.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/masking.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/prompt_cache.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/task_logger.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/tool_metrics.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/toolset_base.py
 create mode 100644 providers/common/ai/src/airflow/providers/common/ai/utils/usage_budget.py
 create mode 100644 providers/common/ai/tests/system/common/ai/example_sandbox_toolset_boat.py
 create mode 100644 providers/common/ai/tests/system/common/ai/example_sandbox_toolset_islo.py
 create mode 100644 providers/common/ai/tests/system/common/ai/example_sandbox_toolset_opensandbox.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/conftest.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/memory_storage.py
 delete mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_caching_model.py
 delete mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_caching_toolset.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_capability.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_journal.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_replay_usage.py
 delete mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_replay_verification.py
 delete mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_step_counter.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_strands.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/durable/test_strands_storage.py
 copy {airflow-core/src/airflow/_shared => providers/common/ai/tests/unit/common/ai/managed_agents}/__init__.py (100%)
 create mode 100644 providers/common/ai/tests/unit/common/ai/managed_agents/test_base.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/managed_agents/test_failover.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/mixins/test_usage_budget.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/operators/test_agent_tool_approval.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/operators/test_agent_tool_judge.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/plugins/test__plugin_urls.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/plugins/test_model_panel.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/plugins/test_model_panel_compat.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/sandbox/fake_tags.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/sandbox/test_boat.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/sandbox/test_islo.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/sandbox/test_opensandbox.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/test_provider_metadata.py
 copy {airflow-core/src/airflow/_shared => providers/common/ai/tests/unit/common/ai/tools}/__init__.py (100%)
 create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test__from_toolset.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_adk.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_strands.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_tools.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_tracing.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/toolsets/test_object_storage.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/toolsets/test_retry_budget.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_coroutines.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_masking.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_prompt_cache.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_task_logger.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_tool_metrics.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_toolset_base.py
 create mode 100644 providers/common/ai/tests/unit/common/ai/utils/test_usage_budget.py
 create mode 100644 providers/common/compat/src/airflow/providers/common/compat/_set_during_execution.py
 create mode 100644 providers/common/compat/tests/unit/common/compat/connection/test_connection_supervisor.py
 create mode 100644 providers/common/compat/tests/unit/common/compat/test__set_during_execution.py
 create mode 100644 providers/edge3/src/airflow/providers/edge3/migrations/versions/0006_5_0_0_add_task_instance_id_to_edge_job.py
 create mode 100644 providers/edge3/src/airflow/providers/edge3/migrations/versions/0007_5_1_0_add_priority_weight_to_edge_job.py
 create mode 100644 providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.test.tsx
 create mode 100644 providers/edge3/tests/unit/edge3/migrations/test_task_instance_identity.py
 create mode 100644 providers/fab/tests/unit/fab/www/extensions/test_init_wsgi_middlewares.py
 delete mode 100644 providers/google/tests/system/google/cloud/dataproc/example_dataproc_cluster_generator.py
 create mode 100644 providers/google/tests/system/google/resources_cleanup/airflow_google_provider_resource_cleanup/handlers/datafusion.py
 create mode 100644 providers/google/tests/unit/google/cloud/links/test_cloud_tasks.py
 create mode 100644 providers/google/tests/unit/google/resources_cleanup/test_datafusion_handler.py
 create mode 100644 providers/google/tests/unit/google/test_go_module_utils.py
 delete mode 100644 providers/ibm/mq/pre_extras_install.yaml
 create mode 100644 providers/influxdb/docs/sensors/index.rst
 copy {airflow-core/src/airflow/_shared => providers/influxdb/src/airflow/providers/influxdb/sensors}/__init__.py (100%)
 create mode 100644 providers/influxdb/src/airflow/providers/influxdb/sensors/influxdb3.py
 copy {airflow-core/src/airflow/_shared => providers/influxdb/tests/unit/influxdb/sensors}/__init__.py (100%)
 create mode 100644 providers/influxdb/tests/unit/influxdb/sensors/test_influxdb3.py
 copy {airflow-core => providers/modal}/.gitignore (100%)
 copy {chart => providers/modal}/LICENSE (100%)
 copy NOTICE => providers/modal/NOTICE (100%)
 create mode 100644 providers/modal/README.rst
 create mode 100644 providers/modal/docs/.latest-doc-only-change.txt
 create mode 100644 providers/modal/docs/changelog.rst
 create mode 100644 providers/modal/docs/commits.rst
 create mode 100644 providers/modal/docs/conf.py
 create mode 100644 providers/modal/docs/connections.rst
 create mode 100644 providers/modal/docs/index.rst
 copy providers/{airbyte => modal}/docs/installing-providers-from-sources.rst (100%)
 create mode 100644 providers/modal/docs/integration-logos/Modal.png
 copy providers/{anthropic => modal}/docs/security.rst (100%)
 create mode 100644 providers/modal/docs/usage.rst
 create mode 100644 providers/modal/provider.yaml
 create mode 100644 providers/modal/pyproject.toml
 copy {airflow-core/tests/integration => providers/modal/src/airflow}/__init__.py (100%)
 copy {airflow-core/tests/integration => providers/modal/src/airflow/providers}/__init__.py (100%)
 create mode 100644 providers/modal/src/airflow/providers/modal/__init__.py
 create mode 100644 providers/modal/src/airflow/providers/modal/exceptions.py
 create mode 100644 providers/modal/src/airflow/providers/modal/get_provider_info.py
 copy {airflow-core/src/airflow/_shared => providers/modal/src/airflow/providers/modal/hooks}/__init__.py (100%)
 create mode 100644 providers/modal/src/airflow/providers/modal/hooks/modal.py
 copy providers/{airbyte => modal}/tests/conftest.py (100%)
 copy {airflow-core/tests/integration => providers/modal/tests/unit}/__init__.py (100%)
 copy {airflow-core/src/airflow/_shared => providers/modal/tests/unit/modal}/__init__.py (100%)
 copy {airflow-core/src/airflow/_shared => providers/modal/tests/unit/modal/hooks}/__init__.py (100%)
 create mode 100644 providers/modal/tests/unit/modal/hooks/test_modal.py
 create mode 100644 providers/modal/tests/unit/modal/test_exceptions.py
 create mode 100644 providers/snowflake/docs/connections/index.rst
 create mode 100644 providers/snowflake/docs/connections/pydantic_ai_snowflake.rst
 create mode 100644 providers/snowflake/src/airflow/providers/snowflake/hooks/cortex_model.py
 create mode 100644 providers/snowflake/src/airflow/providers/snowflake/utils/_rest_auth.py
 create mode 100644 providers/snowflake/tests/unit/snowflake/hooks/test_cortex_model.py
 create mode 100644 providers/snowflake/tests/unit/snowflake/utils/test__rest_auth.py
 create mode 100644 providers/standard/tests/unit/standard/operators/test_empty.py
 create mode 100644 providers/standard/tests/unit/standard/sensors/test_external_task.py
 delete mode 100644 providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
 create mode 100644 registry/src/_data/durableModules.js
 create mode 100644 registry/src/durable.njk
 create mode 100644 registry/src/js/durable-filters.js
 copy {airflow-core/src/airflow/_shared => scripts/ci/lang_sdk_serialization}/__init__.py (100%)
 create mode 100644 scripts/ci/lang_sdk_serialization/compare.py
 create mode 100644 scripts/ci/lang_sdk_serialization/serialize_python.py
 create mode 100644 scripts/ci/lang_sdk_serialization/test_dags.yaml
 create mode 100755 scripts/ci/prek/check_applies_to_roots_in_sync.py
 create mode 100755 scripts/ci/prek/check_deferred_hook_configuration.py
 create mode 100755 scripts/ci/prek/check_go_sdk_generated_drift.py
 create mode 100755 scripts/ci/prek/check_go_sdk_serialization_conformance.py
 create mode 100755 scripts/ci/prek/check_openapi_exception_doc_in_sync.py
 delete mode 100755 scripts/ci/prek/check_ti_vs_tis_attributes.py
 create mode 100644 scripts/ci/prek/check_xcom_model_columns.py
 create mode 100755 scripts/ci/prek/check_yaml_importer_schema_versions.py
 create mode 100755 scripts/ci/prek/generate_yaml_importer_schema.py
 create mode 100755 scripts/ci/prek/regenerate_java_sdk_verification_metadata.py
 create mode 100755 scripts/ci/prek/sync_go_sdk_schemas.py
 create mode 100755 scripts/ci/prek/sync_ts_sdk_schemas.py
 create mode 100644 scripts/ci/prek_cache_markers.py
 delete mode 100644 scripts/docker/keys/python-3.10.asc
 create mode 100644 scripts/in_container/provider_suspension.py
 create mode 100755 scripts/in_container/run_agent_framework_tests.sh
 copy {airflow-core/src/airflow/_shared => scripts/tests/ci/lang_sdk_serialization}/__init__.py (100%)
 create mode 100644 scripts/tests/ci/lang_sdk_serialization/test_compare.py
 create mode 100644 scripts/tests/ci/prek/test_check_applies_to_roots_in_sync.py
 create mode 100644 scripts/tests/ci/prek/test_check_contextmanager_class_decorators.py
 create mode 100644 scripts/tests/ci/prek/test_check_deferred_hook_configuration.py
 create mode 100644 scripts/tests/ci/prek/test_check_go_sdk_generated_drift.py
 create mode 100644 scripts/tests/ci/prek/test_check_go_sdk_serialization_conformance.py
 create mode 100644 scripts/tests/ci/prek/test_check_openapi_exception_doc_in_sync.py
 create mode 100644 scripts/tests/ci/prek/test_check_ui_field_behaviour_matches_hook.py
 create mode 100644 scripts/tests/ci/prek/test_regenerate_java_sdk_verification_metadata.py
 create mode 100644 scripts/tests/ci/prek/test_supported_versions.py
 create mode 100644 scripts/tests/ci/prek/test_sync_go_sdk_schemas.py
 create mode 100644 scripts/tests/ci/prek/test_sync_ts_sdk_schemas.py
 create mode 100644 scripts/tests/ci/prek/test_update_airflow_pyproject_toml.py
 create mode 100644 scripts/tests/ci/test_prek_cache_optimizations.py
 create mode 100644 scripts/tests/in_container/test_provider_suspension.py
 create mode 100644 scripts/tests/in_container/test_run_pre_extras_install.py
 copy {airflow-core/src/airflow/_shared => scripts/tests/tools}/__init__.py (100%)
 create mode 100644 scripts/tests/tools/test_free_up_disk_space.py
 create mode 100644 shared/dagnode/src/airflow_shared/dagnode/cycle.py
 create mode 100644 shared/dagnode/tests/dagnode/test_cycle.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/_dag_importer.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/executable/_bundle_reader.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/executable/_dag_importer.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/java/_dag_importer.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/java/_jar_manifest.py
 create mode 100644 task-sdk/src/airflow/sdk/coordinators/node/_dag_importer.py
 create mode 100644 task-sdk/src/airflow/sdk/definitions/_internal/loop.py
 create mode 100644 task-sdk/src/airflow/sdk/execution_time/bundles.py
 create mode 100644 task-sdk/src/airflow/sdk/execution_time/loop.py
 create mode 100644 task-sdk/src/airflow/sdk/execution_time/tracing.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/__init__.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/builder.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/importer.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/migrator.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/models.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/parser.py
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/schema.json
 create mode 100644 task-sdk/src/airflow/sdk/importers/yaml_importer/versions/__init__.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/executable/_bundle_test_utils.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/executable/test_bundle_reader.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/executable/test_dag_importer.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/java/_jar_test_utils.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/java/test_dag_importer.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/java/test_jar_manifest.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/node/test_dag_importer.py
 create mode 100644 task-sdk/tests/task_sdk/coordinators/test_dag_importer.py
 create mode 100644 task-sdk/tests/task_sdk/definitions/_internal/test_loop.py
 create mode 100644 task-sdk/tests/task_sdk/definitions/timetables/test_assets.py
 create mode 100644 task-sdk/tests/task_sdk/execution_time/test_bundles.py
 create mode 100644 task-sdk/tests/task_sdk/execution_time/test_loop.py
 create mode 100644 task-sdk/tests/task_sdk/execution_time/test_tracing.py
 copy {airflow-core/src/airflow/_shared => task-sdk/tests/task_sdk/importers/yaml_importer}/__init__.py (100%)
 create mode 100644 task-sdk/tests/task_sdk/importers/yaml_importer/example_dag.yaml
 create mode 100644 task-sdk/tests/task_sdk/importers/yaml_importer/test_importer.py
 create mode 100644 task-sdk/tests/task_sdk/importers/yaml_importer/test_migrator.py
 create mode 100644 task-sdk/tests/task_sdk/importers/yaml_importer/test_parser.py
 create mode 100644 task-sdk/tests/task_sdk/test_log.py
 create mode 100644 ts-sdk/api-docs/hitl-api.ts
 create mode 100644 ts-sdk/example/src/ai-approval.ts
 create mode 100644 ts-sdk/example/src/hitl.ts
 create mode 100644 ts-sdk/example/src/native.ts
 create mode 100644 ts-sdk/schema/supervisor-schema.json
 create mode 100755 ts-sdk/scripts/ci/prek/check_serialization_conformance.py
 delete mode 100755 ts-sdk/scripts/ci/prek/sync_dag_schema.py
 create mode 100644 ts-sdk/src/coordinator/operator-runner.ts
 create mode 100644 ts-sdk/src/coordinator/serde.ts
 create mode 100644 ts-sdk/src/hitl/index.ts
 create mode 100644 ts-sdk/src/hitl/operator.ts
 create mode 100644 ts-sdk/src/hitl/spec.ts
 create mode 100644 ts-sdk/src/sdk/dag-graph.ts
 create mode 100644 ts-sdk/src/sdk/env.ts
 create mode 100644 ts-sdk/src/sdk/module-source.ts
 create mode 100644 ts-sdk/src/sdk/operator.ts
 create mode 100644 ts-sdk/src/sdk/plain-json.ts
 create mode 100644 ts-sdk/src/sdk/trigger-dag-run-execute.ts
 create mode 100644 ts-sdk/src/sdk/trigger-dag-run.ts
 create mode 100644 ts-sdk/tests/conformance/serialize_typescript.ts
 create mode 100644 ts-sdk/tests/coordinator/operator-runner.test.ts
 create mode 100644 ts-sdk/tests/coordinator/serde.test.ts
 create mode 100644 ts-sdk/tests/hitl/operator.test.ts
 create mode 100644 ts-sdk/tests/hitl/spec.test.ts
 create mode 100644 ts-sdk/tests/sdk/branching.test.ts
 create mode 100644 ts-sdk/tests/sdk/conditional.test.ts
 create mode 100644 ts-sdk/tests/sdk/hitl-inference.test.ts
 create mode 100644 ts-sdk/tests/sdk/native-dag-example.test.ts
 create mode 100644 ts-sdk/tests/sdk/trigger-dag-run.test.ts


(airflow) 03/03: Give the jobs added on main a RunsOn size class

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch test-runs-on-github-actions-runner
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 6c0e912113dae486f6abeddcf72a0e74d84d884b
Author: Shahar Epstein <60...@users.noreply.github.com>
AuthorDate: Wed Oct 14 12:45:05 2026 +0300

    Give the jobs added on main a RunsOn size class
    
    The TypeScript SDK tests job and the agent framework tests landed on main
    after this branch was cut, so they still passed the raw `runner-type`
    output through. On this branch that output is the RunsOn label template,
    which RunsOn rejects without a cpu/ram fill-in.
---
 .github/workflows/ci-amd.yml | 4 ++--
 .github/workflows/ci-arm.yml | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 2f4a3b73d3b..b1d7c416d77 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -1036,7 +1036,7 @@ jobs:
   tests-ts-sdk:
     name: "TypeScript SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1190,7 +1190,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       use-uv: ${{ needs.build-info.outputs.use-uv }}
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index de63c27f15d..4174ad3e6ed 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -1025,7 +1025,7 @@ jobs:
   tests-ts-sdk:
     name: "TypeScript SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1179,7 +1179,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       use-uv: ${{ needs.build-info.outputs.use-uv }}


(airflow) 01/03: Run the CI on RunsOn runners for the fork test

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch test-runs-on-github-actions-runner
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 6e8d39f7db91c21d9665427d2b04597956a74f65
Author: Shahar Epstein <60...@users.noreply.github.com>
AuthorDate: Fri Sep 25 09:21:46 2026 +0300

    Run the CI on RunsOn runners for the fork test
    
    Fork-only experiment: route every Tests (AMD) / Tests (ARM) job to
    RunsOn (runs-on.com) EC2 runners instead of GitHub-hosted ones, so the
    per-run cost and duration can be compared with the EKS runner experiment.
    
    Each wrapper's `runner-type` output carries the architecture-specific
    RunsOn label template (families, image, volume); jobs fill in the size
    class they need with `format(<template>, cpu, ram)`. The classes are the
    EC2 equivalents of the ones measured for EKS: small 4 vCPU / 16 GB,
    medium 8 / 32, xl 32 / 128. xl gets 128 GB rather than 64 because xdist
    parallelism follows the host's 32 vCPUs (EKS capped it at 16), and the
    non-DB providers suite already peaked at 35 GB with 16 workers.
    `build-info`, `print-platform`, `notify-slack` and the Windows smoke test
    stay on GitHub-hosted runners as upstream.
    
    The stash actions are S3-backed drop-ins for the ASF stash action that
    write to the RunsOn stack's cache bucket (the only S3 prefix the instance
    role can reach), so image tars and caches never leave the region. The
    RunsOn action is added to the breeze composite action to put the EC2 cost
    of every job next to the GitHub-hosted price in the job summary.
    
    Fork prerequisites carried over from the EKS branch: breeze k8s commands
    honour `--github-repository` so the K8s tests find the fork's prod image,
    the apache remote always points at apache/airflow, helm-chart tags are
    fetched from apache/airflow, e2e tests skip pulling fork ghcr images, and
    the SFTP concurrency test caps its workers instead of using the host CPU
    count. Static checks pin PYTHONWARNINGS because prek runs 32 concurrent
    breeze-backed hooks on the xl class and they clobber the shared docker
    env file otherwise.
---
 .github/actions/breeze/action.yml                  |   6 ++
 .../actions/build_ci_image_with_cache/action.yml   |  15 ++-
 .github/actions/install-prek/action.yml            |   5 +-
 .../actions/prepare_breeze_and_image/action.yml    |   3 +-
 .github/actions/prepare_single_ci_image/action.yml |   3 +-
 .github/actions/stash-s3-restore/action.yml        | 105 +++++++++++++++++++++
 .github/actions/stash-s3-save/action.yml           |  83 ++++++++++++++++
 .github/workflows/additional-ci-image-checks.yml   |   2 +-
 .github/workflows/additional-prod-image-tests.yml  |  30 +++---
 .github/workflows/basic-tests.yml                  |  18 ++--
 .github/workflows/ci-amd.yml                       |  43 +++++----
 .github/workflows/ci-arm.yml                       |  43 +++++----
 .github/workflows/ci-image-build.yml               |  22 ++---
 .github/workflows/ci-image-checks.yml              |  19 ++--
 .github/workflows/finalize-tests.yml               |   4 +-
 .github/workflows/generate-constraints.yml         |   2 +-
 .github/workflows/helm-tests.yml                   |  12 ++-
 .github/workflows/integration-system-tests.yml     |   6 +-
 .github/workflows/k8s-tests.yml                    |   4 +-
 .github/workflows/kustomize-overlays-tests.yml     |   2 +-
 .github/workflows/openlineage-e2e-compat-tests.yml |   2 +-
 .github/workflows/prod-image-build.yml             |   6 +-
 .github/workflows/publish-docs-to-s3.yml           |   5 +-
 .github/workflows/push-image-cache.yml             |   4 +-
 .github/workflows/special-tests.yml                |  22 ++---
 .github/workflows/test-providers.yml               |   4 +-
 .github/workflows/ui-e2e-tests.yml                 |   2 +-
 .../tests/airflow_e2e_tests/conftest.py            |  26 ++++-
 .../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   |  50 +++++-----
 .../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 +-
 .../airflow_breeze/commands/kubernetes_commands.py |  82 +++++++++++++---
 .../commands/kubernetes_commands_config.py         |  16 +++-
 dev/breeze/src/airflow_breeze/utils/packages.py    |   6 +-
 .../tests/test_kubernetes_lang_sdk_commands.py     |   4 +-
 providers/sftp/tests/unit/sftp/hooks/test_sftp.py  |   5 +
 scripts/ci/prek/check_ci_workflows_in_sync.py      |   8 +-
 48 files changed, 621 insertions(+), 276 deletions(-)

diff --git a/.github/actions/breeze/action.yml b/.github/actions/breeze/action.yml
index cb49d1d6d57..78985ca4ae4 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -29,6 +29,12 @@ outputs:
 runs:
   using: "composite"
   steps:
+    # Fork / RunsOn test: prints the job's EC2 cost next to the GitHub-hosted price in the
+    # job summary. No-op on GitHub-hosted runners (build-info, the Windows smoke test).
+    - name: "RunsOn cost summary"
+      uses: runs-on/action@efac073ea2507ec18797de3a81704201ade11d9d  # v2.3.1
+      with:
+        show_costs: summary
     - name: "Setup python"
       uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
       with:
diff --git a/.github/actions/build_ci_image_with_cache/action.yml b/.github/actions/build_ci_image_with_cache/action.yml
index b7a6d0bbce4..6350e81ce83 100644
--- a/.github/actions/build_ci_image_with_cache/action.yml
+++ b/.github/actions/build_ci_image_with_cache/action.yml
@@ -48,8 +48,7 @@ runs:
     # cache. The commit it was built from tells the two apart and is stashed on its own, so
     # deciding costs a few bytes rather than the image the decision may make unnecessary.
     - name: "Restore the commit the stashed CI image was built from"
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: "ci-image-commit-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
@@ -74,8 +73,7 @@ runs:
       if: steps.restore-commit.outputs.stash-hit == 'true'
     # Restored ahead of the caches that feed the build, so a build made unnecessary skips them too.
     - name: "Restore the CI image stashed for this ref"
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: "ci-image-save-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
@@ -110,8 +108,7 @@ runs:
     # Scoped to the ref for the same reason the image is: the mount cache holds the dependency set
     # the sources resolve to, and a ref's and the branch tip's are exactly what differ.
     - name: "Restore the mount cache stashed for this ref"
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: "ci-cache-mount-save-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
@@ -185,7 +182,7 @@ runs:
         git rev-parse HEAD > "${COMMIT_FILE}"
       if: steps.stashed-image.outputs.reusable != 'true'
     - name: "Stash the CI image"
-      uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+      uses: ./.github/actions/stash-s3-save
       with:
         key: "ci-image-save-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
@@ -197,7 +194,7 @@ runs:
     # Saved last and with the image's retention, so that finding this commit is enough to know the
     # image it describes is there to be restored.
     - name: "Stash the commit the CI image was built from"
-      uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+      uses: ./.github/actions/stash-s3-save
       with:
         key: "ci-image-commit-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
@@ -214,7 +211,7 @@ runs:
         --cache-file /tmp/ci-cache-mount-save-v3-${PYTHON_MAJOR_MINOR_VERSION}.tar.gz
       if: steps.stashed-image.outputs.reusable != 'true'
     - name: "Stash the mount cache"
-      uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+      uses: ./.github/actions/stash-s3-save
       with:
         key: "ci-cache-mount-save-v3-${{ inputs.platform }}-${{ inputs.python }}\
           -${{ inputs.image-stash-ref }}"
diff --git a/.github/actions/install-prek/action.yml b/.github/actions/install-prek/action.yml
index 6ce8776d179..23c199c349a 100644
--- a/.github/actions/install-prek/action.yml
+++ b/.github/actions/install-prek/action.yml
@@ -81,8 +81,7 @@ runs:
         rm -f /tmp/cache-prek.tar.gz
       shell: bash
     - name: "Restore prek cache"
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: ${{ steps.cache-key.outputs.key }}
         path: /tmp/
@@ -215,7 +214,7 @@ runs:
       shell: bash
       if: steps.cache-policy.outputs.save == 'true'
     - name: "Save prek cache"
-      uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+      uses: ./.github/actions/stash-s3-save
       with:
         key: ${{ steps.cache-key.outputs.key }}
         path: /tmp/cache-prek.tar.gz
diff --git a/.github/actions/prepare_breeze_and_image/action.yml b/.github/actions/prepare_breeze_and_image/action.yml
index 6c91e28bff8..559be365089 100644
--- a/.github/actions/prepare_breeze_and_image/action.yml
+++ b/.github/actions/prepare_breeze_and_image/action.yml
@@ -82,8 +82,7 @@ runs:
     - name: >
         Restore ${{ inputs.image-type }} docker image ${{ inputs.platform }}:${{ inputs.python }}
         ${{ inputs.image-stash-ref != '' && format('built for ref {0}', inputs.image-stash-ref) || '' }}
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: "${{ inputs.image-type }}-image-save-v3-${{ inputs.platform }}-${{ inputs.python }}\
           ${{ inputs.image-stash-ref != '' && format('-{0}', inputs.image-stash-ref) || '' }}"
diff --git a/.github/actions/prepare_single_ci_image/action.yml b/.github/actions/prepare_single_ci_image/action.yml
index d70012c80f7..25a95e0c965 100644
--- a/.github/actions/prepare_single_ci_image/action.yml
+++ b/.github/actions/prepare_single_ci_image/action.yml
@@ -36,8 +36,7 @@ runs:
   using: "composite"
   steps:
     - name: "Restore CI docker images ${{ inputs.platform }}:${{ inputs.python }}"
-      # yamllint disable-line rule:line-length
-      uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+      uses: ./.github/actions/stash-s3-restore
       with:
         key: ci-image-save-v3-${{ inputs.platform }}-${{ inputs.python }}
         path: "/mnt/"
diff --git a/.github/actions/stash-s3-restore/action.yml b/.github/actions/stash-s3-restore/action.yml
new file mode 100644
index 00000000000..de091fbfc7f
--- /dev/null
+++ b/.github/actions/stash-s3-restore/action.yml
@@ -0,0 +1,105 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+---
+# FORK / RunsOn test only.
+#
+# Self-owned, S3-backed drop-in for apache/infrastructure-actions/stash/restore.
+# RunsOn runners read/write the stack's in-region S3 cache bucket for essentially
+# free (no GitHub 10 GB cache cap, no cross-cloud egress), so we stash CI caches
+# there instead of GitHub artifacts. Uses only bash + the AWS CLI (present in
+# the runner image, authenticated through the RunsOn EC2 instance role, which
+# only grants the `cache/` prefix) — no third-party actions.
+#
+# Contract matches the original stash/restore: inputs `key` + `path`, output
+# `stash-hit`, and `fail-on-download`. `path` is accepted for compatibility;
+# the tarball is created with `tar -P` so entries restore to their original
+# (absolute or workspace-relative) locations regardless of `path`.
+name: 'Restore stash from S3'
+description: 'S3-backed drop-in for stash/restore (RunsOn fork test).'
+inputs:
+  key:
+    description: 'Stash key; used as the S3 object name (slashes allowed).'
+    required: true
+  path:
+    description: 'Compatibility only — restore location is encoded in the archive.'
+    required: false
+    default: ''
+  bucket:
+    description: 'S3 bucket holding the stashes (the RunsOn stack cache bucket).'
+    required: false
+    default: 'runs-on-shahar1-s3bucketcache-bnadailbcwed'
+  only-current-branch:
+    description: 'Compatibility only — ignored (exact-key match).'
+    required: false
+    default: 'false'
+  fail-on-download:
+    description: 'Fail the step when the stash is not found.'
+    required: false
+    default: 'false'
+outputs:
+  stash-hit:
+    description: 'true if a stash was found and restored, false otherwise.'
+    value: ${{ steps.restore.outputs.stash-hit }}
+runs:
+  using: 'composite'
+  steps:
+    - id: restore
+      shell: bash
+      env:
+        STASH_KEY: ${{ inputs.key }}
+        STASH_BUCKET: ${{ inputs.bucket }}
+        FAIL_ON_DOWNLOAD: ${{ inputs.fail-on-download }}
+        AWS_DEFAULT_REGION: us-east-2
+      run: |
+        set -uo pipefail
+        payload="${RUNNER_TEMP:-/tmp}/stash-restore-$$.tar.gz"
+        object="cache/airflow-stash/${STASH_KEY}.tar.gz"
+        # Probe existence first so a normal cold-cache miss doesn't dump an
+        # alarming `aws s3 cp` "fatal error: ... 404 ... HeadObject" into the log.
+        found=false
+        if aws s3api head-object --bucket "${STASH_BUCKET}" --key "${object}" >/dev/null 2>&1; then
+          found=true
+        elif [ "${FAIL_ON_DOWNLOAD}" = "true" ]; then
+          # A required stash may still be seconds away: GitHub's re-run
+          # scheduling can release nested dependent jobs before the re-running
+          # producer job has saved its stash (upstream hardened the original
+          # stash action for the same race in apache/airflow#65268). Poll
+          # before hard-failing.
+          echo "Required stash '${STASH_KEY}' not there yet — retrying for up to 5 minutes..."
+          for _ in $(seq 1 30); do
+            sleep 10
+            if aws s3api head-object --bucket "${STASH_BUCKET}" --key "${object}" >/dev/null 2>&1; then
+              found=true
+              break
+            fi
+          done
+        fi
+        if [ "${found}" = "true" ]; then
+          aws s3 cp --only-show-errors "s3://${STASH_BUCKET}/${object}" "${payload}"
+          tar -xPzf "${payload}"
+          rm -f "${payload}"
+          echo "stash-hit=true" >> "${GITHUB_OUTPUT}"
+          echo "✅ Restored stash '${STASH_KEY}' from s3://${STASH_BUCKET}"
+        else
+          echo "stash-hit=false" >> "${GITHUB_OUTPUT}"
+          echo "Cache miss for '${STASH_KEY}' (normal until a run completes and saves it)"
+          if [ "${FAIL_ON_DOWNLOAD}" = "true" ]; then
+            echo "::error::fail-on-download is set and no stash was found for '${STASH_KEY}' after retries"
+            exit 1
+          fi
+        fi
diff --git a/.github/actions/stash-s3-save/action.yml b/.github/actions/stash-s3-save/action.yml
new file mode 100644
index 00000000000..25f9da9d7fb
--- /dev/null
+++ b/.github/actions/stash-s3-save/action.yml
@@ -0,0 +1,83 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+---
+# FORK / RunsOn test only. Self-owned, S3-backed drop-in for
+# apache/infrastructure-actions/stash/save. See stash-s3-restore for rationale.
+#
+# `path` may be a file, directory, or glob; matching entries are archived with
+# `tar -P` (absolute and workspace-relative paths preserved) and uploaded to
+# s3://<bucket>/cache/airflow-stash/<key>.tar.gz. `retention-days` is accepted for
+# compatibility but ignored — the RunsOn stack's lifecycle rule
+# (S3CacheExpirationInDays) expires the objects instead.
+name: 'Save stash to S3'
+description: 'S3-backed drop-in for stash/save (RunsOn fork test).'
+inputs:
+  key:
+    description: 'Stash key; used as the S3 object name (slashes allowed).'
+    required: true
+  path:
+    description: 'File, directory, or glob to archive and upload.'
+    required: true
+  bucket:
+    description: 'S3 bucket to store the stash in (the RunsOn stack cache bucket).'
+    required: false
+    default: 'runs-on-shahar1-s3bucketcache-bnadailbcwed'
+  if-no-files-found:
+    description: "'error' to fail when path matches nothing, otherwise 'warn'."
+    required: false
+    default: 'warn'
+  retention-days:
+    description: 'Compatibility only — ignored (use an S3 lifecycle rule).'
+    required: false
+    default: ''
+runs:
+  using: 'composite'
+  steps:
+    - shell: bash
+      env:
+        STASH_KEY: ${{ inputs.key }}
+        STASH_PATH: ${{ inputs.path }}
+        STASH_BUCKET: ${{ inputs.bucket }}
+        IF_NO_FILES_FOUND: ${{ inputs.if-no-files-found }}
+        AWS_DEFAULT_REGION: us-east-2
+      run: |
+        set -euo pipefail
+        shopt -s nullglob
+        # Expand globs in the path, then keep only entries that actually exist.
+        # shellcheck disable=SC2206
+        candidates=( ${STASH_PATH} )
+        existing=()
+        for p in "${candidates[@]}"; do
+          if [ -e "${p}" ]; then
+            existing+=( "${p}" )
+          fi
+        done
+        if [ ${#existing[@]} -eq 0 ]; then
+          if [ "${IF_NO_FILES_FOUND}" = "error" ]; then
+            echo "::error::No files found for path '${STASH_PATH}'"
+            exit 1
+          fi
+          echo "::warning::No files found for path '${STASH_PATH}' — skipping save"
+          exit 0
+        fi
+        payload="${RUNNER_TEMP:-/tmp}/stash-save-$$.tar.gz"
+        tar -cPzf "${payload}" "${existing[@]}"
+        object="cache/airflow-stash/${STASH_KEY}.tar.gz"
+        aws s3 cp --only-show-errors "${payload}" "s3://${STASH_BUCKET}/${object}"
+        rm -f "${payload}"
+        echo "✅ Saved stash '${STASH_KEY}' (${existing[*]}) to s3://${STASH_BUCKET}"
diff --git a/.github/workflows/additional-ci-image-checks.yml b/.github/workflows/additional-ci-image-checks.yml
index de26e37fbfc..7d60cf6ef41 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -62,7 +62,7 @@ jobs:
     # layer that builds Python from source, which takes 11-18 minutes for Python 3.11+ on hosted runners.
     timeout-minutes: 35
     name: Check that image builds quickly
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       UPGRADE_TO_NEWER_DEPENDENCIES: false
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
diff --git a/.github/workflows/additional-prod-image-tests.yml b/.github/workflows/additional-prod-image-tests.yml
index dc5da4b211e..c850b783deb 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -152,7 +152,7 @@ jobs:
   test-examples-of-prod-image-building:
     timeout-minutes: 60
     name: "Test examples of PROD image building"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     env:
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -189,7 +189,7 @@ jobs:
   test-docker-compose-quick-start:
     timeout-minutes: 60
     name: "Docker Compose quick start with PROD image verifying"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
@@ -220,7 +220,7 @@ jobs:
   task-sdk-integration-tests:
     timeout-minutes: 60
     name: "Task SDK integration tests with PROD image"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
@@ -254,7 +254,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Regular e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -264,7 +264,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Remote logging e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 4, 16) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -276,7 +276,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Elasticsearch remote logging e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -288,7 +288,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "OpenSearch remote logging e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -300,7 +300,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "XCom object storage backend e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 4, 16) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -311,7 +311,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Event driven e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 32, 128) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -323,7 +323,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Java SDK e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -335,7 +335,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "Go SDK e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 32, 128) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -347,7 +347,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "TypeScript SDK e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 32, 128) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -359,7 +359,7 @@ jobs:
     uses: ./.github/workflows/airflow-e2e-tests.yml
     with:
       workflow-name: "OpenLineage e2e test"
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -377,7 +377,7 @@ jobs:
         compat: ${{ fromJSON(inputs.providers-compatibility-tests-matrix) }}
     uses: ./.github/workflows/openlineage-e2e-compat-tests.yml
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       default-python-version: "${{ inputs.default-python-version }}"
       use-uv: ${{ inputs.use-uv }}
@@ -423,7 +423,7 @@ jobs:
   airflow-ctl-integration-tests:
     timeout-minutes: 60
     name: "Airflow CTL integration tests with PROD image"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index f8f75cc0132..f274dfa8f68 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -82,7 +82,7 @@ jobs:
   run-breeze-tests:
     timeout-minutes: 10
     name: Breeze unit tests
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     steps:
       - name: "Cleanup repo"
         shell: bash
@@ -100,7 +100,7 @@ jobs:
   run-breeze-integration-tests:
     timeout-minutes: 120
     name: Breeze integration tests
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     if: inputs.run-breeze-integration-tests == 'true'
     steps:
       - name: "Cleanup repo"
@@ -134,7 +134,7 @@ jobs:
       fail-fast: false
       matrix:
         shared-distribution: ${{ fromJSON(inputs.shared-distributions-as-json) }}
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
         uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
@@ -158,7 +158,7 @@ jobs:
   tests-scripts:
     timeout-minutes: 10
     name: Scripts tests
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     if: inputs.run-scripts-tests == 'true'
     env:
       # Without a pin uv picks the runner's system Python, which can be older than Airflow supports.
@@ -187,7 +187,7 @@ jobs:
   tests-ui:
     timeout-minutes: 15
     name: React UI tests
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     if: inputs.run-ui-tests == 'true'
     steps:
       - name: "Cleanup repo"
@@ -224,7 +224,7 @@ jobs:
   check-translation-completness:
     timeout-minutes: 15
     name: "Check translation completeness"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
         uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
@@ -241,7 +241,7 @@ jobs:
   static-checks-basic-checks-only:
     timeout-minutes: 30
     name: "Static checks: basic checks only"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     if: inputs.basic-checks-only == 'true'
     steps:
       - name: "Cleanup repo"
@@ -290,7 +290,7 @@ jobs:
   test-airflow-release-commands:
     timeout-minutes: 80
     name: "Test Airflow release commands"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
@@ -344,7 +344,7 @@ jobs:
   test-airflow-standalone:
     timeout-minutes: 30
     name: "Test Airflow standalone commands"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     env:
       AIRFLOW_HOME: ~/airflow
       FORCE_COLOR: 1
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index bbd4a7bae76..a67b96d2b81 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -158,7 +158,8 @@ jobs:
       run-task-sdk-integration-tests: ${{ steps.selective-checks.outputs.run-task-sdk-integration-tests }}
       run-breeze-integration-tests: ${{ steps.selective-checks.outputs.run-breeze-integration-tests }}
       run-scripts-tests: ${{ steps.selective-checks.outputs.run-scripts-tests }}
-      runner-type: '["ubuntu-22.04"]'
+      # yamllint disable-line rule:line-length
+      runner-type: '["runs-on=${{ github.run_id }}/family=m7a+m7i+m6a+m6i/image=ubuntu22-full-x64/volume=150gb/cpu={0}/ram={1}"]'
       run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }}
       run-ui-e2e-tests: ${{ steps.selective-checks.outputs.run-ui-e2e-tests }}
       run-unit-tests: ${{ steps.selective-checks.outputs.run-unit-tests }}
@@ -279,7 +280,9 @@ jobs:
       platform: ${{ needs.build-info.outputs.platform }}
       push-image: "false"
       upload-image-artifact: "true"
-      upload-mount-cache-artifact: ${{ needs.build-info.outputs.canary-run }}
+      # Fork test: save the mount cache on every run, not only on canary runs, so the
+      # uv cache is warm for the next image build.
+      upload-mount-cache-artifact: "true"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       branch: ${{ needs.build-info.outputs.default-branch }}
       constraints-branch: ${{ needs.build-info.outputs.default-constraints-branch }}
@@ -364,7 +367,7 @@ jobs:
     timeout-minutes: 45
     name: "MyPy providers checks"
     needs: [build-info, build-ci-images]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 4, 16) }}
     if: needs.build-info.outputs.run-mypy-providers == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ needs.build-info.outputs.default-python-version }}"
@@ -405,7 +408,7 @@ jobs:
     timeout-minutes: 20
     name: "Migration round-trip check"
     needs: [build-info, build-ci-images]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     if: needs.build-info.outputs.has-migrations == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ needs.build-info.outputs.default-python-version }}"
@@ -527,7 +530,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "postgres"
       test-name: "Postgres"
@@ -556,7 +559,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "postgres"
       test-name: "Postgres"
@@ -585,7 +588,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "mysql"
       test-name: "MySQL"
@@ -615,7 +618,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "mysql"
       test-name: "MySQL"
@@ -644,7 +647,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: "Sqlite"
@@ -675,7 +678,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: "Sqlite"
@@ -706,7 +709,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: ""
@@ -736,7 +739,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: ""
@@ -822,7 +825,7 @@ jobs:
     if: >
       needs.build-info.outputs.run-unit-tests == 'true'
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
@@ -852,7 +855,7 @@ jobs:
       packages: read
     if: needs.build-info.outputs.run-unit-tests == 'true'
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
@@ -963,7 +966,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
@@ -979,7 +982,7 @@ jobs:
   tests-go-sdk:
     name: "Go SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1067,7 +1070,7 @@ jobs:
   tests-java-sdk:
     name: "Java SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 32, 128) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1097,7 +1100,7 @@ jobs:
   build-java-sdk-docs:
     name: "Java SDK docs"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 30
     permissions:
       contents: read
@@ -1166,7 +1169,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 4, 16) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
@@ -1374,7 +1377,7 @@ jobs:
       - tests-special
       - tests-with-lowest-direct-resolution-core
       - tests-with-lowest-direct-resolution-providers
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     if: needs.build-info.outputs.run-unit-tests == 'true'
     steps:
       - name: "Cleanup repo"
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 86f748b347e..5e6a009637d 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -147,7 +147,8 @@ jobs:
       run-task-sdk-integration-tests: ${{ steps.selective-checks.outputs.run-task-sdk-integration-tests }}
       run-breeze-integration-tests: ${{ steps.selective-checks.outputs.run-breeze-integration-tests }}
       run-scripts-tests: ${{ steps.selective-checks.outputs.run-scripts-tests }}
-      runner-type: '["ubuntu-22.04-arm"]'
+      # yamllint disable-line rule:line-length
+      runner-type: '["runs-on=${{ github.run_id }}/family=m8g+m7g+m6g/image=ubuntu22-full-arm64/volume=150gb/cpu={0}/ram={1}"]'
       run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }}
       run-ui-e2e-tests: ${{ steps.selective-checks.outputs.run-ui-e2e-tests }}
       run-unit-tests: ${{ steps.selective-checks.outputs.run-unit-tests }}
@@ -268,7 +269,9 @@ jobs:
       platform: ${{ needs.build-info.outputs.platform }}
       push-image: "false"
       upload-image-artifact: "true"
-      upload-mount-cache-artifact: ${{ needs.build-info.outputs.canary-run }}
+      # Fork test: save the mount cache on every run, not only on canary runs, so the
+      # uv cache is warm for the next image build.
+      upload-mount-cache-artifact: "true"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       branch: ${{ needs.build-info.outputs.default-branch }}
       constraints-branch: ${{ needs.build-info.outputs.default-constraints-branch }}
@@ -353,7 +356,7 @@ jobs:
     timeout-minutes: 45
     name: "MyPy providers checks"
     needs: [build-info, build-ci-images]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 4, 16) }}
     if: needs.build-info.outputs.run-mypy-providers == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ needs.build-info.outputs.default-python-version }}"
@@ -394,7 +397,7 @@ jobs:
     timeout-minutes: 20
     name: "Migration round-trip check"
     needs: [build-info, build-ci-images]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     if: needs.build-info.outputs.has-migrations == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ needs.build-info.outputs.default-python-version }}"
@@ -516,7 +519,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "postgres"
       test-name: "Postgres"
@@ -545,7 +548,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "postgres"
       test-name: "Postgres"
@@ -574,7 +577,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "mysql"
       test-name: "MySQL"
@@ -604,7 +607,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "mysql"
       test-name: "MySQL"
@@ -633,7 +636,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: "Sqlite"
@@ -664,7 +667,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 8, 32) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: "Sqlite"
@@ -695,7 +698,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: ""
@@ -725,7 +728,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       backend: "sqlite"
       test-name: ""
@@ -811,7 +814,7 @@ jobs:
     if: >
       needs.build-info.outputs.run-unit-tests == 'true'
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
@@ -841,7 +844,7 @@ jobs:
       packages: read
     if: needs.build-info.outputs.run-unit-tests == 'true'
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
@@ -952,7 +955,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 32, 128) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
@@ -968,7 +971,7 @@ jobs:
   tests-go-sdk:
     name: "Go SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1056,7 +1059,7 @@ jobs:
   tests-java-sdk:
     name: "Java SDK tests"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 32, 128) }}
     timeout-minutes: 15
     permissions:
       contents: read
@@ -1086,7 +1089,7 @@ jobs:
   build-java-sdk-docs:
     name: "Java SDK docs"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     timeout-minutes: 30
     permissions:
       contents: read
@@ -1155,7 +1158,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ needs.build-info.outputs.runner-type }}
+      runners: ${{ format(needs.build-info.outputs.runner-type, 4, 16) }}
       platform: ${{ needs.build-info.outputs.platform }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
@@ -1363,7 +1366,7 @@ jobs:
       - tests-special
       - tests-with-lowest-direct-resolution-core
       - tests-with-lowest-direct-resolution-providers
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 8, 32) }}
     if: needs.build-info.outputs.run-unit-tests == 'true'
     steps:
       - name: "Cleanup repo"
diff --git a/.github/workflows/ci-image-build.yml b/.github/workflows/ci-image-build.yml
index 1541337bc5c..48e17487429 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -132,7 +132,7 @@ jobs:
         python-version: ${{ fromJSON(inputs.python-versions) }}
     timeout-minutes: 110
     name: "Build CI ${{ inputs.platform }} image ${{ matrix.python-version }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       BACKEND: sqlite
       PYTHON_MAJOR_MINOR_VERSION: ${{ matrix.python-version }}
@@ -167,8 +167,7 @@ jobs:
       - name: >
           Restore the commit the CI image stashed for ref ${{ inputs.image-stash-ref }}
           was built from
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           key: "ci-image-commit-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             -${{ inputs.image-stash-ref }}"
@@ -201,8 +200,7 @@ jobs:
       - name: >
           Restore CI docker image built for ref ${{ inputs.image-stash-ref }}
           ${{ inputs.platform }}:${{ env.PYTHON_MAJOR_MINOR_VERSION }}
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           key: "ci-image-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             -${{ inputs.image-stash-ref }}"
@@ -217,8 +215,7 @@ jobs:
       - name: >
           Restore ci-cache mount image ${{ inputs.platform }}:${{ env.PYTHON_MAJOR_MINOR_VERSION }}
           ${{ inputs.image-stash-ref != '' && format('for ref {0}', inputs.image-stash-ref) || '' }}
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           key: "ci-cache-mount-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             ${{ inputs.image-stash-ref != '' && format('-{0}', inputs.image-stash-ref) || '' }}"
@@ -245,8 +242,7 @@ jobs:
           --cache-file /tmp/ci-cache-mount-save-v3-${PYTHON_MAJOR_MINOR_VERSION}.tar.gz
         if: steps.restore-cache-mount.outputs.stash-hit == 'true'
       - name: "Restore CI docker image ${{ inputs.platform }}:${{ env.PYTHON_MAJOR_MINOR_VERSION }}"
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           key: "ci-image-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}"
           path: "/mnt/"
@@ -337,7 +333,7 @@ jobs:
         shell: bash
         if: inputs.upload-image-artifact == 'true' && steps.stashed-image.outputs.reusable != 'true'
       - name: "Stash CI docker image ${{ env.PYTHON_MAJOR_MINOR_VERSION }}"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           key: ci-image-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}
           path: "/mnt/ci-image-save-*-${{ env.PYTHON_MAJOR_MINOR_VERSION }}.tar"
@@ -351,7 +347,7 @@ jobs:
       # what a later publish of that same ref reads - hence a retention that outlives the shared
       # one, the same ref being rebuilt three days apart at the very least.
       - name: "Stash CI docker image built for ref ${{ inputs.image-stash-ref }}"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           key: "ci-image-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             -${{ inputs.image-stash-ref }}"
@@ -365,7 +361,7 @@ jobs:
       # Saved last and with the image's retention, so that finding this commit is enough to
       # know the image it describes is there to be restored.
       - name: "Stash the commit the CI image for ref ${{ inputs.image-stash-ref }} was built from"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           key: "ci-image-commit-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             -${{ inputs.image-stash-ref }}"
@@ -387,7 +383,7 @@ jobs:
       - name: >
           Stash cache mount ${{ inputs.platform }}:${{ env.PYTHON_MAJOR_MINOR_VERSION }}
           ${{ inputs.image-stash-ref != '' && format('for ref {0}', inputs.image-stash-ref) || '' }}
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           key: "ci-cache-mount-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}\
             ${{ inputs.image-stash-ref != '' && format('-{0}', inputs.image-stash-ref) || '' }}"
diff --git a/.github/workflows/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index 7de37750488..1f42239de43 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -119,7 +119,7 @@ jobs:
   static-checks:
     timeout-minutes: 45
     name: "Static checks"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       UPGRADE_TO_NEWER_DEPENDENCIES: "${{ inputs.upgrade-to-newer-dependencies }}"
@@ -156,6 +156,12 @@ jobs:
           SKIP_GROUP_OUTPUT: "true"
           DEFAULT_BRANCH: ${{ inputs.branch }}
           RUFF_FORMAT: "github"
+          # prek runs breeze-backed hooks with concurrency == cpu_count (32 on the xl runners).
+          # They share one generated docker env file (scripts/ci/docker-compose/_generated_docker.env);
+          # a concurrent hook regenerates it without PYTHONWARNINGS, so the provider-yaml /
+          # template-fields containers (which assert PYTHONWARNINGS=default) read a clobbered
+          # file and fail. Setting it for every hook keeps the shared file carrying it.
+          PYTHONWARNINGS: "default"
       - name: "Show prek log on failure"
         run: cat ~/.cache/prek/prek.log || true
         if: failure()
@@ -175,7 +181,7 @@ jobs:
   build-docs:
     timeout-minutes: 150
     name: "Build documentation"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     if: inputs.docs-build == 'true'
     env:
       GITHUB_REPOSITORY: ${{ github.repository }}
@@ -201,8 +207,7 @@ jobs:
           use-uv: ${{ inputs.use-uv }}
           make-mnt-writeable-and-cleanup: true
       - name: "Restore docs inventory cache"
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           path: ./generated/_inventory_cache/
           key: cache-docs-inventory-v1
@@ -312,7 +317,7 @@ jobs:
         env:
           SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
       - name: "Save docs inventory cache"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           path: ./generated/_inventory_cache/
           key: cache-docs-inventory-v1
@@ -334,7 +339,7 @@ jobs:
       id-token: write
       contents: read
     needs: build-docs
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -457,7 +462,7 @@ jobs:
   test-python-api-client:
     timeout-minutes: 60
     name: "Test Python API client"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     if: inputs.run-api-codegen == 'true'
     env:
       BACKEND: "postgres"
diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index 8165c981cb8..81727fad9b5 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -80,7 +80,7 @@ permissions:
   contents: read
 jobs:
   update-constraints:
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     timeout-minutes: 80
     name: "Update constraints"
     permissions:
@@ -124,7 +124,7 @@ jobs:
   # Constraint commits are now handled by the dedicated update-constraints-on-push workflow
   # triggered when uv.lock changes are pushed to main/test branches.
   dependency-upgrade-summary:
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     needs: [update-constraints]
     if: inputs.upgrade-to-newer-dependencies == 'true' && inputs.platform == 'linux/amd64'
     name: "Deps ${{ matrix.python-version }}:${{ matrix.constraints-mode }}"
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index 6fe4e5be2ce..d0ff14326a4 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -85,7 +85,7 @@ jobs:
       contents: read
     timeout-minutes: 70
     name: Generate constraints for ${{ matrix.python-version }} on ${{ inputs.platform }}
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     strategy:
       fail-fast: false
       max-parallel: 20
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index 01060f8fbfd..52d4f07dcb8 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -52,7 +52,7 @@ jobs:
     name: >-
       Unit tests Helm: ${{ matrix.helm-test-package }}
       (K8S ${{ matrix.kubernetes-version }})
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     strategy:
       fail-fast: false
       max-parallel: 20
@@ -98,7 +98,7 @@ jobs:
   tests-helm-release:
     timeout-minutes: 80
     name: "Release Helm"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{inputs.default-python-version}}"
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -142,7 +142,13 @@ jobs:
         env:
           SIGN_WITH: dev@airflow.apache.org
       - name: "Fetch Git Tags"
-        run: git fetch --tags
+        # Fork test: the helm-chart release tags
+        # (helm-chart/1.15.0, /1.16.0, ...) that the issue-content step diffs
+        # live in apache/airflow, not the fork, so fetch them explicitly here.
+        run: |
+          git fetch --tags
+          apache_url=https://github.com/apache/airflow.git
+          git fetch "${apache_url}" "refs/tags/helm-chart/*:refs/tags/helm-chart/*" || true
       - name: "Test helm chart issue generation"
         run: >
           breeze release-management generate-issue-content-helm-chart --limit-pr-count 2
diff --git a/.github/workflows/integration-system-tests.yml b/.github/workflows/integration-system-tests.yml
index 202d70cd9ef..efc8d578b5c 100644
--- a/.github/workflows/integration-system-tests.yml
+++ b/.github/workflows/integration-system-tests.yml
@@ -75,7 +75,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.testable-core-integrations != '[]'
     name: "Integration core ${{ matrix.integration }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 32, 128) }}
     strategy:
       fail-fast: false
       max-parallel: 20
@@ -126,7 +126,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.testable-providers-integrations != '[]' && inputs.skip-providers-tests != 'true'
     name: "Integration: providers ${{ matrix.integration }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     strategy:
       fail-fast: false
       max-parallel: 20
@@ -176,7 +176,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.run-system-tests == 'true'
     name: "System Tests"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     env:
       BACKEND: "postgres"
       BACKEND_VERSION: ${{ inputs.default-postgres-version }}
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index e4e3a6147ae..f1bf6b691bd 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -62,7 +62,7 @@ jobs:
   tests-kubernetes:
     timeout-minutes: 60
     name: "K8S System:${{ matrix.executor }}-${{ matrix.kubernetes-combo }}-${{ matrix.use-standard-naming }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     strategy:
       fail-fast: false
       max-parallel: 20
@@ -149,7 +149,7 @@ jobs:
   tests-kubernetes-lang-sdk:
     timeout-minutes: 60
     name: "K8S Lang-SDK:${{ inputs.lang-sdk-kubernetes-combo }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       DEBUG_RESOURCES: ${{ inputs.debug-resources }}
       INCLUDE_SUCCESS_OUTPUTS: ${{ inputs.include-success-outputs }}
diff --git a/.github/workflows/kustomize-overlays-tests.yml b/.github/workflows/kustomize-overlays-tests.yml
index 94637194bfa..e51def2487c 100644
--- a/.github/workflows/kustomize-overlays-tests.yml
+++ b/.github/workflows/kustomize-overlays-tests.yml
@@ -53,7 +53,7 @@ jobs:
   smoke-test-overlay:
     timeout-minutes: 40
     name: "Overlay smoke test: ${{ matrix.overlay }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 4, 16) }}
     strategy:
       fail-fast: false
       max-parallel: 4
diff --git a/.github/workflows/openlineage-e2e-compat-tests.yml b/.github/workflows/openlineage-e2e-compat-tests.yml
index 38795399007..feca7bfef21 100644
--- a/.github/workflows/openlineage-e2e-compat-tests.yml
+++ b/.github/workflows/openlineage-e2e-compat-tests.yml
@@ -49,7 +49,7 @@ jobs:
   test-openlineage-e2e-compat:
     timeout-minutes: 60
     name: "OpenLineage e2e compat ${{ inputs.airflow-version }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/.github/workflows/prod-image-build.yml b/.github/workflows/prod-image-build.yml
index b171215f629..82e4b405a3b 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -115,7 +115,7 @@ jobs:
   build-prod-packages:
     name: "Build Airflow and provider distributions"
     timeout-minutes: 10
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     if: inputs.prod-image-build == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
@@ -195,7 +195,7 @@ jobs:
         python-version: ${{ fromJSON(inputs.python-versions) }}
     timeout-minutes: 80
     name: "Build PROD ${{ inputs.build-type }} image ${{ matrix.python-version }}"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     needs:
       - build-prod-packages
     env:
@@ -284,7 +284,7 @@ jobs:
           breeze prod-image save --platform "${PLATFORM}" --image-file-dir "/mnt"
         if: inputs.upload-image-artifact == 'true'
       - name: "Stash PROD docker image ${{ env.PYTHON_MAJOR_MINOR_VERSION }}"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         with:
           key: prod-image-save-v3-${{ inputs.platform }}-${{ env.PYTHON_MAJOR_MINOR_VERSION }}
           path: "/mnt/prod-image-save-*-${{ env.PYTHON_MAJOR_MINOR_VERSION }}.tar"
diff --git a/.github/workflows/publish-docs-to-s3.yml b/.github/workflows/publish-docs-to-s3.yml
index 3d57c2074f9..69e10a5b06f 100644
--- a/.github/workflows/publish-docs-to-s3.yml
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -346,8 +346,7 @@ jobs:
             ${{ secrets.CONSTRAINTS_GITHUB_REPOSITORY != '' &&
             secrets.CONSTRAINTS_GITHUB_REPOSITORY || 'apache/airflow' }}
       - name: "Restore docs inventory cache"
-        # yamllint disable-line rule:line-length
-        uses: apache/infrastructure-actions/stash/restore@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # restore/v1.0.0
+        uses: ./.github/actions/stash-s3-restore
         with:
           path: ./generated/_inventory_cache/
           key: cache-docs-inventory-v1
@@ -383,7 +382,7 @@ jobs:
             breeze build-docs ${SPHINX_INCLUDE_DOCS} ${DOCS_ONLY} ${FAIL_ON_INVENTORIES}
           fi
       - name: "Save docs inventory cache"
-        uses: apache/infrastructure-actions/stash/save@61dcea11f19e2bbe1263f14d72235e8da17d3ad0  # save/v1.0.0
+        uses: ./.github/actions/stash-s3-save
         if: >-
           steps.restore-docs-inventory-cache.outputs.stash-hit != 'true' &&
           steps.build-sphinx-docs.outputs.sphinx-build-skipped != 'true'
diff --git a/.github/workflows/push-image-cache.yml b/.github/workflows/push-image-cache.yml
index 575eb546aec..4acb61baa73 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -79,7 +79,7 @@ on:  # yamllint disable-line rule:truthy
 jobs:
   push-ci-image-cache:
     name: "Push CI ${{ inputs.cache-type }}:${{ matrix.python }} image cache "
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     permissions:
       contents: read
       packages: write
@@ -149,7 +149,7 @@ jobs:
 
   push-prod-image-cache:
     name: "Push PROD ${{ inputs.cache-type }}:${{ matrix.python }} image cache"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     permissions:
       contents: read
       packages: write
diff --git a/.github/workflows/special-tests.yml b/.github/workflows/special-tests.yml
index 6ac4d60d1ba..ff56fbb9df5 100644
--- a/.github/workflows/special-tests.yml
+++ b/.github/workflows/special-tests.yml
@@ -94,7 +94,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       downgrade-sqlalchemy: "true"
       test-name: "MinSQLAlchemy-Postgres"
@@ -119,7 +119,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       downgrade-sqlalchemy: "true"
       test-name: "MinSQLAlchemy-Postgres"
@@ -144,7 +144,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       upgrade-sqlalchemy: "true"
       test-name: "LatestSQLAlchemy-Postgres"
@@ -169,7 +169,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       upgrade-sqlalchemy: "true"
       test-name: "LatestSQLAlchemy-Postgres"
@@ -194,7 +194,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 32, 128) }}
       platform: ${{ inputs.platform }}
       upgrade-boto: "true"
       test-name: "LatestBoto-Postgres"
@@ -220,7 +220,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       upgrade-boto: "true"
       test-name: "LatestBoto-Postgres"
@@ -246,7 +246,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       downgrade-pendulum: "true"
       test-name: "Pendulum2-Postgres"
@@ -272,7 +272,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 8, 32) }}
       platform: ${{ inputs.platform }}
       downgrade-pendulum: "true"
       test-name: "Pendulum2-Postgres"
@@ -298,7 +298,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 4, 16) }}
       platform: ${{ inputs.platform }}
       test-name: "Postgres"
       test-scope: "Quarantined"
@@ -323,7 +323,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 4, 16) }}
       platform: ${{ inputs.platform }}
       test-name: "Postgres"
       test-scope: "Quarantined"
@@ -348,7 +348,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runners: ${{ inputs.runners }}
+      runners: ${{ format(inputs.runners, 32, 128) }}
       platform: ${{ inputs.platform }}
       test-name: "SystemTest"
       test-scope: "System"
diff --git a/.github/workflows/test-providers.yml b/.github/workflows/test-providers.yml
index e7b3575b3f1..406ebde52fa 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -72,7 +72,7 @@ jobs:
   prepare-install-verify-provider-distributions:
     timeout-minutes: 80
     name: "Providers ${{ matrix.package-format }} tests"
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     strategy:
       fail-fast: false
       matrix:
@@ -178,7 +178,7 @@ jobs:
     timeout-minutes: 80
     # yamllint disable rule:line-length
     name: Compat ${{ matrix.compat.airflow-version }}:P${{ matrix.compat.python-version }}:${{ matrix.test-types.description }}
-    runs-on: ${{ fromJSON(inputs.runners) }}
+    runs-on: ${{ format(fromJSON(inputs.runners)[0], 8, 32) }}
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/ui-e2e-tests.yml b/.github/workflows/ui-e2e-tests.yml
index 519f0f11746..49720403d6d 100644
--- a/.github/workflows/ui-e2e-tests.yml
+++ b/.github/workflows/ui-e2e-tests.yml
@@ -88,7 +88,7 @@ jobs:
   test-ui-e2e-tests:
     timeout-minutes: 90
     name: ${{ inputs.workflow-name || 'UI E2E Tests' }}
-    runs-on: ${{ fromJSON(inputs.runners || '["ubuntu-24.04"]') }}
+    runs-on: ${{ format(fromJSON(inputs.runners || '["ubuntu-24.04"]')[0], 8, 32) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version || '3.11' }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/airflow-e2e-tests/tests/airflow_e2e_tests/conftest.py b/airflow-e2e-tests/tests/airflow_e2e_tests/conftest.py
index e9d65166c6f..a53c6650d9a 100644
--- a/airflow-e2e-tests/tests/airflow_e2e_tests/conftest.py
+++ b/airflow-e2e-tests/tests/airflow_e2e_tests/conftest.py
@@ -87,6 +87,26 @@ from tests_common.test_utils.fernet import generate_fernet_key_string
 console = Console(width=400, color_system="standard")
 
 
+def _is_ghcr_airflow_image(image: str) -> bool:
+    """Return True for ghcr.io/<owner>/airflow[/...] images.
+
+    Parses the image reference properly instead of using substring matching,
+    so that 'airflow' must be the second path component (not anywhere in the string).
+    Handles optional tag (:tag) and digest (@sha256:...) suffixes.
+    """
+    image_no_digest = image.split("@", 1)[0]
+    last_slash = image_no_digest.rfind("/")
+    last_colon = image_no_digest.rfind(":")
+    if last_colon > last_slash:
+        image_no_digest = image_no_digest[:last_colon]
+    parts = image_no_digest.split("/")
+    if len(parts) < 3:
+        return False
+    registry = parts[0]
+    repo_parts = parts[1:]
+    return registry == "ghcr.io" and len(repo_parts) >= 2 and repo_parts[1] == "airflow"
+
+
 class _E2ETestState:
     compose_instance: DockerCompose | None = None
     airflow_logs_path: Path | None = None
@@ -961,9 +981,11 @@ def spin_up_airflow_environment(tmp_path_factory: pytest.TempPathFactory):
     os.environ["FERNET_KEY"] = generate_fernet_key_string()
 
     # Skip pull for images that exist only locally and cannot be fetched from a registry:
-    # - ghcr.io/apache/airflow/: pre-pulled by the prepare_breeze_and_image CI step
+    # - ghcr.io/<owner>/airflow/: pre-pulled by the prepare_breeze_and_image CI step; fork
+    #   ghcr packages are private, so a `docker compose pull` there fails with an
+    #   authentication error even though the image is present locally.
     # - openlineage-e2e/: locally built by _build_openlineage_e2e_compat_image (never pushed)
-    pull = not DOCKER_IMAGE.startswith(("ghcr.io/apache/airflow/", "openlineage-e2e/"))
+    pull = not (_is_ghcr_airflow_image(DOCKER_IMAGE) or DOCKER_IMAGE.startswith("openlineage-e2e/"))
 
     try:
         console.print(f"[blue]Spinning up airflow environment using {DOCKER_IMAGE}")
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
index 9cf52175665..64b820067d7 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 806.4" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-build-k8s-image-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="755.4" />
     </clipPath>
     <clipPath id="breeze-k8s-build-k8s-image-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -129,9 +129,15 @@
 <clipPath id="breeze-k8s-build-k8s-image-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-build-k8s-image-line-28">
+    <rect x="0" y="684.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-k8s-build-k8s-image-line-29">
+    <rect x="0" y="709.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-k8s-build-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;build-k8s-image</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="804.4" rx="8"/><text class="breeze-k8s-build-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;build-k8s-image</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -153,23 +159,25 @@
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">--copy-local-sources</text><text class="breeze-k8s-build-k8s-image-r1" x="268.4" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">/</text><text class="breeze-k8s-build-k8s-image-r4" x= [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">--use-uv</text><text class="breeze-k8s-build-k8s-image-r1" x="122" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">/</text><text class="breeze-k8s-build-k8s-image-r4" x="134.2" y="264"  [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="288.4" textLength="207.4" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">[default:&#160;use-uv]</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">│</text><text class="breeze-k8s-build-k8s-ima [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-12)">
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="244" y="337.2" textLength="1195.6" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">─────────────────────────────────── [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-14)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="361.6" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-14)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="361.6" textLength="854" clip-path="url(#breeze-k8s-build-k8s-image-line-14)">Run&#16 [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-15)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="386" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-15)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="386" textLength="927.2" clip-path="url(#breeze-k8s-build-k8s-image-l [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="353.8" y="410.4" textLength="280.6" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">(INTEGER&#160;RANGE&#160;1&lt;=x&lt;=8)</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">│</text><text class="breeze- [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="434.8" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="434.8" textLength="963.8" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">Space [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="353.8" y="459.2" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-build-k8s-image-r7" x="610" y="459.2" textLength="73.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">(TEXT)</text><text class="breeze-k8s- [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="483.6" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-li [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="508" textLength="768.6" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">Whether&#16 [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">--include-success-outputs</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="532.4" textLength="841.8" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">Whether&#160;to&#160;include&#160;outputs&#16 [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="219.6" y="581.2" textLength="1220" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">───────────────────────────────────── [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">--answer&#160;</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="605.6" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">-a</text><text class="breeze-k8s-build-k8s-image-r1" x= [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">--dry-run</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">-D</text><text class="breeze-k8s-build-k8s-image-r1" x="207.4" y=" [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">--verbose</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">-v</text><text class="breeze-k8s-build-k8s-image-r1" x="207. [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">-h</text><text class="breeze-k8s-build-k8s-im [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-28)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-12)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="312.8" textLength="536.8" clip-path="url(#breeze-k8s-build-k8s-image-line-12)">--github-repository&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-i [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="337.2" textLength="183" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">apache/airflow]</text><text class="breeze-k8s-build-k8s-image-r7" x="829.6" y="337.2" textLength="73.2" clip-path="url(#breeze-k8s-build-k8s-image-line-13)">(TEXT)</text><text class="breeze-k8s-build-k8s-image-r5 [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-14)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-15)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-k8s-build-k8s-image-line-15)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="244" y="386" textLength="1195.6" clip-path="url(#breeze-k8s-build-k8s-image-line-15)">───────────────────────────────────────── [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="410.4" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="410.4" textLength="854" clip-path="url(#breeze-k8s-build-k8s-image-line-16)">Run&#16 [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="434.8" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="434.8" textLength="927.2" clip-path="url(#breeze-k8s-build-k8s-i [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="353.8" y="459.2" textLength="280.6" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">(INTEGER&#160;RANGE&#160;1&lt;=x&lt;=8)</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze- [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="483.6" textLength="963.8" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">Space [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="353.8" y="508" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-build-k8s-image-r7" x="610" y="508" textLength="73.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">(TEXT)</text><text class="breeze-k8s-build- [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="532.4" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-li [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="556.8" textLength="768.6" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">Wheth [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="581.2" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">--include-success-outputs</text><text class="breeze-k8s-build-k8s-image-r1" x="353.8" y="581.2" textLength="841.8" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">Whether&#160;to&#160;include&#160;outputs&#16 [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="219.6" y="630" textLength="1220" clip-path="url(#breeze-k8s-build-k8s-image-line-25)">─────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">--answer&#160;</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-26)">-a</text><text class="breeze-k8s-build-k8s-image-r1" x= [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">--dry-run</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-27)">-D</text><text class="breeze-k8s-build-k8s-image-r1" x="207. [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-28)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-28)">--verbose</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-28)">-v</text><text class="breeze-k8s-build-k8s-image-r1" x="207. [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-29)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-k8s-build-k8s-image-line-29)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-29)">-h</text><text class="breeze-k8s-build-k8s-im [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-k8s-build-k8s-image-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-30)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
index 30e1291ea75..18e5d3877a1 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
@@ -1 +1 @@
-2b09a31d8a0076dc3e0f150270f1955b
+067f35e2c5dff2487abda4801e4628cd
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
index 8dbb0ee0533..1c4184aeb8b 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 904.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-deploy-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="853.0" />
     </clipPath>
     <clipPath id="breeze-k8s-deploy-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -144,9 +144,12 @@
 <clipPath id="breeze-k8s-deploy-airflow-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-deploy-airflow-line-33">
+    <rect x="0" y="806.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="877.6" rx="8"/><text class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="902" rx="8"/><text class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -172,24 +175,25 @@
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="337.2" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">--wait-time-in-seconds</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="337.2" textLength="744.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">Wait&#160;for&#160;Airflow&#160;api-server&#160;for&#1 [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="361.6" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">--use-standard-naming&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="361.6" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">Use&#160;standard&#160;naming.</text><text class="b [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="386" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">--multi-namespace-mode</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="386" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">Use&#160;multi&#160;namespace&#160;mode.</text><text class="br [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="244" y="434.8" textLength="1195.6" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">───────────────────────────────────────── [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="459.2" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="459.2" textLength="854" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">Run&#160;the& [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="483.6" textLength="1085.8" clip-path="url(#breeze-k8s-deploy-airflow- [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="508" textLength="146.4" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">operations.&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="500.2" y="508" textLength="146.4" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">[default:&#160;2]</text><text class="breeze-k8s-deploy-airflow [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="532.4" textLength="963.8" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">Space&#160; [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="353.8" y="556.8" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-deploy-airflow-r7" x="610" y="556.8" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">(TEXT)</text><text class="breeze-k8s-deploy [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="581.2" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="581.2" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">Kubernetes&#160;versions&#160;u [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="353.8" y="605.6" textLength="622.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-deploy-airflow-r7" x="988.2" y="605.6" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24) [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="630" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="630" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">Skip [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="654.4" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="654.4" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">Whether&#16 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="678.8" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">--include-success-outputs</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="678.8" textLength="841.8" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">Whether&#160;to&#160;include&#160;outputs&#160;of&# [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="727.6" textLength="195.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">─────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">--verbose</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">-v</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="752" te [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">--dry-run</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">-D</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="7 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">-h</text><text class="breeze-k8s-deploy-airflow-r1" [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="410.4" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">--github-repository&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r6" x="317.2" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">-g</text><text class="breeze-k8s-deplo [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="244" y="459.2" textLength="1195.6" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">───────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="483.6" textLength="854" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">Run&#160;the& [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="508" textLength="1085.8" clip-path="url(#breeze-k8s-deploy-airflow-line-2 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="532.4" textLength="146.4" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">operations.&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="500.2" y="532.4" textLength="146.4" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">[default:&#160;2]</text><text class="breeze-k8s-deploy-a [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="556.8" textLength="963.8" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">Space&#160; [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="353.8" y="581.2" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-deploy-airflow-r7" x="610" y="581.2" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">(TEXT)</text><text class="breeze-k8s-deploy [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="605.6" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="605.6" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">Kubernetes&#160;versions&#160;u [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="353.8" y="630" textLength="622.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-deploy-airflow-r7" x="988.2" y="630" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">(TEX [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="654.4" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="654.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-26) [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="678.8" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="678.8" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">Whether&#16 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="703.2" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">--include-success-outputs</text><text class="breeze-k8s-deploy-airflow-r1" x="353.8" y="703.2" textLength="841.8" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">Whether&#160;to&#160;include&#160;outputs&#160;of&# [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="219.6" y="752" textLength="1220" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">───────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">--verbose</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">-v</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="7 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">--dry-run</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">-D</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="8 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">-h</text><text class="breeze-k8s-deploy-airflow-r1" [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="849.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
index bb83a4f6f6b..64d71e923a6 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
@@ -1 +1 @@
-a4d92c6c03563d232c2064e52a42bbf6
+75e31d3d69303b74aa4e1e7402785a8d
diff --git a/dev/breeze/doc/images/output_k8s_deploy-cluster.svg b/dev/breeze/doc/images/output_k8s_deploy-cluster.svg
index 645be47d1bc..4bf5d733c2a 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_deploy-cluster.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 660.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-deploy-cluster-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="609.0" />
     </clipPath>
     <clipPath id="breeze-k8s-deploy-cluster-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -114,9 +114,12 @@
 <clipPath id="breeze-k8s-deploy-cluster-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-23">
+    <rect x="0" y="562.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="633.6" rx="8"/><text class="breeze-k8s-deploy-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-cluster</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="658" rx="8"/><text class="breeze-k8s-deploy-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-cluster</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -140,16 +143,17 @@
 </text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="288.4" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">--force-venv-setup&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-cluster-r1" x="390.4" y="288.4" textLength="427" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">Force&#160;recreation& [...]
 </text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-12)">
 </text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-13)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-k8s-deploy-cluster-line-13)">&#160;Build&#160;image&#160;flags&#160;</text><text class="breeze-k8s-deploy-cluster-r5" x="256.2" y="337.2" textLength="1183.4" clip-path="url(#breeze-k8s-deploy-cluster-line-13)">───────────────────────────────── [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="361.6" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">--rebuild-base-image</text><text class="breeze-k8s-deploy-cluster-r1" x="292.8" y="361.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">Rebuilds&#160;base&#160;Airflow&#160;image&#160;before&# [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="386" textLength="97.6" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">--use-uv</text><text class="breeze-k8s-deploy-cluster-r1" x="122" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">/</text><text class="breeze-k8s-deploy-cluster-r4" x="134.2" y="386" textLen [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="410.4" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">--skip-image-build&#160;&#160;</text><text class="breeze-k8s-deploy-cluster-r1" x="292.8" y="410.4" textLength="878.4" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">Skips&#160;execution&#160;of&#160;breeze&#160; [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="459.2" textLength="122" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">&#160;UI&#160;flags&#160;</text><text class="breeze-k8s-deploy-cluster-r5" x="146.4" y="459.2" textLength="1293.2" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">───────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="483.6" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">--skip-compile-ui-assets</text><text class="breeze-k8s-deploy-cluster-r1" x="341.6" y="483.6" textLength="854" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">Skips&#160;execution&#160;of&#160;breeze&#160;ui&#16 [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="532.4" textLength="195.2" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-cluster-r5" x="219.6" y="532.4" textLength="1220" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">─────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="556.8" textLength="73.2" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">--help</text><text class="breeze-k8s-deploy-cluster-r6" x="122" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">-h</text><text class="breeze-k8s-deploy-cluster-r1" x="170.8" y="556.8"  [...]
-</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="361.6" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">--rebuild-base-image</text><text class="breeze-k8s-deploy-cluster-r1" x="341.6" y="361.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">Rebuilds&#160;base&#160;Airflow&#160;image&#160;before&# [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="386" textLength="97.6" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">--use-uv</text><text class="breeze-k8s-deploy-cluster-r1" x="122" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">/</text><text class="breeze-k8s-deploy-cluster-r4" x="134.2" y="386" textLen [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="410.4" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">--skip-image-build&#160;&#160;</text><text class="breeze-k8s-deploy-cluster-r1" x="341.6" y="410.4" textLength="878.4" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">Skips&#160;execution&#160;of&#160;breeze&#160; [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="434.8" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">--github-repository&#160;</text><text class="breeze-k8s-deploy-cluster-r6" x="292.8" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">-g</text><text class="breeze-k8s-deploy-cluster-r1"  [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="483.6" textLength="122" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">&#160;UI&#160;flags&#160;</text><text class="breeze-k8s-deploy-cluster-r5" x="146.4" y="483.6" textLength="1293.2" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">───────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="508" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">--skip-compile-ui-assets</text><text class="breeze-k8s-deploy-cluster-r1" x="341.6" y="508" textLength="854" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">Skips&#160;execution&#160;of&#160;breeze&#160;ui&#160;comp [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="556.8" textLength="195.2" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-cluster-r5" x="219.6" y="556.8" textLength="1220" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">─────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="581.2" textLength="73.2" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">--help</text><text class="breeze-k8s-deploy-cluster-r6" x="122" y="581.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">-h</text><text class="breeze-k8s-deploy-cluster-r1" x="170.8" y="581.2"  [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-24)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_deploy-cluster.txt b/dev/breeze/doc/images/output_k8s_deploy-cluster.txt
index 12c79cee588..65d89b9d72e 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-cluster.txt
@@ -1 +1 @@
-122d38fda6c9afe4f3b436e93e0b4372
+51bd1ca13ec0d90428788e782d8bf628
diff --git a/dev/breeze/doc/images/output_k8s_dev.svg b/dev/breeze/doc/images/output_k8s_dev.svg
index 3b0e37fdce3..986acdbcc4a 100644
--- a/dev/breeze/doc/images/output_k8s_dev.svg
+++ b/dev/breeze/doc/images/output_k8s_dev.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 708.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-dev-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="657.8" />
+      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-dev-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -123,9 +123,12 @@
 <clipPath id="breeze-k8s-dev-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-dev-line-26">
+    <rect x="0" y="635.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="706.8" rx="8"/><text class="breeze-k8s-dev-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;dev</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-k8s-dev-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;dev</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -156,12 +159,13 @@
 </text><text class="breeze-k8s-dev-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-18)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="459.2" textLength="268.4" clip-path="url(#breeze-k8s-dev-line-18)">--dags-dest&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-dev-r1" x="366" y="459.2" textLength="683.2" clip-path="url(#breeze-k8s-dev-line-18)">Destination&#160;path&#160;inside&#160;the&#160;Airflow&#160;cont [...]
 </text><text class="breeze-k8s-dev-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-19)">│</text><text class="breeze-k8s-dev-r7" x="366" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-dev-line-19)">(TEXT)</text><text class="breeze-k8s-dev-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-19)">│</text><text class="breeze-k8s-dev-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-19)">
 </text><text class="breeze-k8s-dev-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-20)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="508" textLength="97.6" clip-path="url(#breeze-k8s-dev-line-20)">--deploy</text><text class="breeze-k8s-dev-r1" x="122" y="508" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-20)">/</text><text class="breeze-k8s-dev-r4" x="134.2" y="508" textLength="134.2" clip-path="url(#breeze-k8s-dev-line-20)">--no-deploy</text><text  [...]
-</text><text class="breeze-k8s-dev-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-k8s-dev-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-dev-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-21)">
-</text><text class="breeze-k8s-dev-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-22)">╭─</text><text class="breeze-k8s-dev-r5" x="24.4" y="556.8" textLength="195.2" clip-path="url(#breeze-k8s-dev-line-22)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-dev-r5" x="219.6" y="556.8" textLength="1220" clip-path="url(#breeze-k8s-dev-line-22)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><t [...]
-</text><text class="breeze-k8s-dev-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-23)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="581.2" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-23)">--verbose</text><text class="breeze-k8s-dev-r6" x="158.6" y="581.2" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-23)">-v</text><text class="breeze-k8s-dev-r1" x="207.4" y="581.2" textLength="585.6" clip-path="url(#breeze-k8s-dev-line-23)">Print&#160; [...]
-</text><text class="breeze-k8s-dev-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-24)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-24)">--dry-run</text><text class="breeze-k8s-dev-r6" x="158.6" y="605.6" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-24)">-D</text><text class="breeze-k8s-dev-r1" x="207.4" y="605.6" textLength="719.8" clip-path="url(#breeze-k8s-dev-line-24)">If&#160;dry [...]
-</text><text class="breeze-k8s-dev-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-25)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-25)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-dev-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-25)">-h</text><text class="breeze-k8s-dev-r1" x="207.4" y="630" textLength="329.4" clip-path="url(#breeze-k8s-dev-line-25)">Show [...]
-</text><text class="breeze-k8s-dev-r5" x="0" y="654.4" textLength="1464" clip-path="url(#breeze-k8s-dev-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-dev-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-26)">
+</text><text class="breeze-k8s-dev-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-21)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="532.4" textLength="268.4" clip-path="url(#breeze-k8s-dev-line-21)">--github-repository&#160;&#160;&#160;</text><text class="breeze-k8s-dev-r6" x="317.2" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-21)">-g</text><text class="breeze-k8s-dev-r1" x="366" y="532.4" textLength="597.8" clip-path="url(#breeze-k8s [...]
+</text><text class="breeze-k8s-dev-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-k8s-dev-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-dev-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-22)">
+</text><text class="breeze-k8s-dev-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-23)">╭─</text><text class="breeze-k8s-dev-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-k8s-dev-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-dev-r5" x="219.6" y="581.2" textLength="1220" clip-path="url(#breeze-k8s-dev-line-23)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><t [...]
+</text><text class="breeze-k8s-dev-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-24)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-24)">--verbose</text><text class="breeze-k8s-dev-r6" x="158.6" y="605.6" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-24)">-v</text><text class="breeze-k8s-dev-r1" x="207.4" y="605.6" textLength="585.6" clip-path="url(#breeze-k8s-dev-line-24)">Print&#160; [...]
+</text><text class="breeze-k8s-dev-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-25)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-25)">--dry-run</text><text class="breeze-k8s-dev-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-25)">-D</text><text class="breeze-k8s-dev-r1" x="207.4" y="630" textLength="719.8" clip-path="url(#breeze-k8s-dev-line-25)">If&#160;dry-run&#16 [...]
+</text><text class="breeze-k8s-dev-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-26)">│</text><text class="breeze-k8s-dev-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-dev-line-26)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-dev-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-dev-line-26)">-h</text><text class="breeze-k8s-dev-r1" x="207.4" y="654.4" textLength="329.4" clip-path="url(#breeze-k8s-dev-line-2 [...]
+</text><text class="breeze-k8s-dev-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-k8s-dev-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-dev-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-dev-line-27)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_dev.txt b/dev/breeze/doc/images/output_k8s_dev.txt
index 6faf3757e7c..f900de183bb 100644
--- a/dev/breeze/doc/images/output_k8s_dev.txt
+++ b/dev/breeze/doc/images/output_k8s_dev.txt
@@ -1 +1 @@
-933e62e4241f00c07b7d8ef01e4889f5
+5009457dc89bf0c37ef9b7507a566d84
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
index 61a6ae242c1..68312d046bf 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1318.8" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-run-complete-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1219.0" />
+      <rect x="0" y="0" width="1463.0" height="1267.8" />
     </clipPath>
     <clipPath id="breeze-k8s-run-complete-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -192,9 +192,15 @@
 <clipPath id="breeze-k8s-run-complete-tests-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-run-complete-tests-line-49">
+    <rect x="0" y="1197.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-k8s-run-complete-tests-line-50">
+    <rect x="0" y="1221.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1268" rx="8"/><text class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;run-complete-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1316.8" rx="8"/><text class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;run-complete-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -236,24 +242,26 @@
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="512.4" y="727.6" textLength="927.2" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">system&#160;tests&#160;as&#160;part&#160;of&#160;the&#160;run&#160;(KubernetesExecutor&#160;only).&#160;Off&#160;by&#160;default&#160;so</text><text class="breeze-k8s-run-complete-tests-r5" x="1451. [...]
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="512.4" y="752" textLength="463.6" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">the&#160;regular&#160;k8s&#160;suites&#160;skip&#160;the&#160;test.&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="976" y="752" textLength="329.4" clip-path="url(#breeze-k8s-run-complete- [...]
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="776.4" textLength="414.8" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">--force-venv-setup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="512.4" y="776.4" textLength= [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="825.2" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="244" y="825.2" textLength="1195.6" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">───────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="849.6" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="849.6" textLength="854" clip-path="url(#breeze-k8s-run-complete-tests [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="874" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="874" textLength="1085.8" clip-path="url(#breeze-k8s-r [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="898.4" textLength="146.4" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">operations.&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="500.2" y="898.4" textLength="146.4" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">[default:&#160;2]</text><text cl [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="922.8" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="922.8" textLength="963.8" clip-path="url(#breeze-k8s-run-complete-tes [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="353.8" y="947.2" textLength="244" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-run-complete-tests-r6" x="610" y="947.2" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">(TEXT)</text><text  [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="971.6" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="971.6" textLength="768.6" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">Kuberne [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="353.8" y="996" textLength="622.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-run-complete-tests-r6" x="988.2" y="996" textLength="73.2" clip-path="url(#breeze-k8s-run-compl [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1020.4" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1020.4" textLength="732" clip-path="url(#breeze-k8s- [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1044.8" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1044.8" textLength="768.6" clip-path="url(#breeze-k8s-run-complete- [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1069.2" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">--include-success-outputs</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1069.2" textLength="841.8" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">Whether&#160;to&#160;inc [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1118" textLength="195.2" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1118" textLength="1220" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">────────────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1142.4" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">--dry-run</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">-D</text><text class="breeze-k8s-run-co [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1166.8" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">--verbose</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">-v</text><text class="breeze-k8s-run-co [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">-h</text><text class="br [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="800.8" textLength="414.8" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">--github-repository&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r7" x="463.6" y="800.8" textLength="24.4 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="512.4" y="825.2" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">(TEXT)</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">│</text><text class="breeze-k8s-run-complete [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="874" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="244" y="874" textLength="1195.6" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">─────────────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="898.4" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="898.4" textLength="854" clip-path="url(#breeze-k8s-run-complete-tests [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="922.8" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="922.8" textLength="1085.8" clip-path="url(#breeze [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="947.2" textLength="146.4" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">operations.&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="500.2" y="947.2" textLength="146.4" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">[default:&#160;2]</text><text cl [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="971.6" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="971.6" textLength="963.8" clip-path="url(#breeze-k8s-run-complete-tes [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="353.8" y="996" textLength="244" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-run-complete-tests-r6" x="610" y="996" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">(TEXT)</text><text class= [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1020.4" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1020.4" textLength="768.6" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">Kube [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="353.8" y="1044.8" textLength="622.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-run-complete-tests-r6" x="988.2" y="1044.8" textLength="73.2" clip-path="url(#breeze-k8s- [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1069.2" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1069.2" textLength="732" clip-path="url(#breeze-k8s- [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1093.6" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1093.6" textLength="768.6" clip-path="url(#breeze-k8s-run-complete- [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1118" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">--include-success-outputs</text><text class="breeze-k8s-run-complete-tests-r1" x="353.8" y="1118" textLength="841.8" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">Whether&#160;to&#160;include&# [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1166.8" textLength="195.2" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1166.8" textLength="1220" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">──────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">--dry-run</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">-D</text><text class="breeze-k8s-run-co [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1215.6" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">--verbose</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">-v</text><text class="breeze-k8s-run-co [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1240" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1240" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">-h</text><text class="breeze-k [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
index c2123bc7d6b..20b855bae50 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
@@ -1 +1 @@
-6dcbadc22bd67eeacc3e8be4fdf8f9bb
+98050ed8eb22062895ec4c40e02458a7
diff --git a/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.svg b/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.svg
index e5325a0b243..6adc80e8954 100644
--- a/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.svg
+++ b/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 611.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-setup-lang-sdk-test-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="560.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-setup-lang-sdk-test-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -111,9 +111,12 @@
 <clipPath id="breeze-k8s-setup-lang-sdk-test-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-setup-lang-sdk-test-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="609.2" rx="8"/><text class="breeze-k8s-setup-lang-sdk-test-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;setup-lang-sdk-test</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="633.6" rx="8"/><text class="breeze-k8s-setup-lang-sdk-test-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;setup-lang-sdk-test</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -140,12 +143,13 @@
 </text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-14)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="361.6" textLength="244" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-14)">--runtime-image&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="341.6" y="361.6" textLength="1098" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-14)">Im [...]
 </text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-15)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="341.6" y="386" textLength="1098" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-15)">Node.&#160;Defaults&#160;to&#160;building&#160;the&#160;prod&#160;image&#160;plus&#160;both&#160;(Dockerfile.runtimes)&#160;and&#160;loading&#160;it&#160;&#160;</text><text class="breeze-k8s-setup-la [...]
 </text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-16)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="341.6" y="410.4" textLength="280.6" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-16)">into&#160;the&#160;kind&#160;cluster.&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r7" x="622.2" y="410.4" textLength="73.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-16)">( [...]
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-17)">
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-18)">╭─</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="24.4" y="459.2" textLength="195.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-18)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="219.6" y="459.2" textLength="1220" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-18)">───────────── [...]
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="483.6" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">--verbose</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="483.6" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">-v</text><text class="breeze-k8s-set [...]
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">--dry-run</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">-D</text><text class="breeze-k8s-setup-lan [...]
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="532.4" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">-h</text><text class= [...]
-</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-22)">
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-17)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="434.8" textLength="244" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-17)">--github-repository&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="292.8" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-17)">-g</text><text class=" [...]
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-18)">
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">╭─</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="24.4" y="483.6" textLength="195.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="219.6" y="483.6" textLength="1220" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-19)">───────────── [...]
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">--verbose</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-20)">-v</text><text class="breeze-k8s-setup-lan [...]
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="532.4" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">--dry-run</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-21)">-D</text><text class="breeze-k8s-set [...]
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-22)">│</text><text class="breeze-k8s-setup-lang-sdk-test-r4" x="24.4" y="556.8" textLength="109.8" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-22)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-setup-lang-sdk-test-r5" x="158.6" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-22)">-h</text><text class= [...]
+</text><text class="breeze-k8s-setup-lang-sdk-test-r6" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-setup-lang-sdk-test-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-setup-lang-sdk-test-line-23)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.txt b/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.txt
index 26d1af42c4a..8ecefaa0869 100644
--- a/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.txt
+++ b/dev/breeze/doc/images/output_k8s_setup-lang-sdk-test.txt
@@ -1 +1 @@
-18e4a478def1a8663014654945f82d7b
+6e6c30b54f07f87a2c787f09b7a7f040
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
index f0102947e4c..504757c545a 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-upload-k8s-image-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-upload-k8s-image-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -126,9 +126,12 @@
 <clipPath id="breeze-k8s-upload-k8s-image-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-upload-k8s-image-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-k8s-upload-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;upload-k8s-image</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-k8s-upload-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;upload-k8s-image</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -148,24 +151,25 @@
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="190.8" textLength="231.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">3.12&#160;|&#160;3.13&#160;|&#160;3.14)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="bree [...]
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">--kubernetes-version</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="215.2" textLength="671" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;cr [...]
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="239.6" textLength="744.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">v1.32.11&#160;|&#160;v1.33.12&#160;|&#160;v1.34.11&#160;|&#160;v1.35.8&#160;|&#160;v1.36.4&#160;|&#160;v1.37.0)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="239.6" textLength="12.2" clip-p [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="288.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="288.4" textLength="219.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="244" y="288.4" textLength="1195.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">───────────────────────────── [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="312.8" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="312.8" textLength="854" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">R [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="337.2" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="337.2" textLength="927.2" clip-path="url(#breeze-k8s-upload [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="353.8" y="361.6" textLength="280.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">(INTEGER&#160;RANGE&#160;1&lt;=x&lt;=8)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">│</text><text class="b [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="386" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="386" textLength="963.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">Space [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="353.8" y="410.4" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-upload-k8s-image-r7" x="610" y="410.4" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">(TEXT)</text><text class="breez [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="434.8" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="434.8" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">Kubernetes&#160;ver [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="353.8" y="459.2" textLength="622.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-upload-k8s-image-r7" x="988.2" y="459.2" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-im [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="483.6" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-im [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="508" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">Wheth [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">--include-success-outputs</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="532.4" textLength="841.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">Whether&#160;to&#160;include&#160;outpu [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="219.6" y="581.2" textLength="1220" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">─────────────────────────────── [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">--verbose</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="605.6" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">-v</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">--dry-run</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">-D</text><text class="breeze-k8s-upload-k8s-image-r1" x="207 [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">-h</text><text class="breeze-k8s-upload [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">--github-repository&#160;</text><text class="breeze-k8s-upload-k8s-image-r6" x="292.8" y="264" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">-g</text><text class="breeze-k8s-upload-k8s-im [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="312.8" textLength="219.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="244" y="312.8" textLength="1195.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">───────────────────────────── [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="337.2" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">--run-in-parallel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="337.2" textLength="854" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">R [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="361.6" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">--parallelism&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="361.6" textLength="927.2" clip-path="url(#breeze-k8s-upload [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="353.8" y="386" textLength="280.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">(INTEGER&#160;RANGE&#160;1&lt;=x&lt;=8)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze- [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="410.4" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">--python-versions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="410.4" textLength="963.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)" [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="353.8" y="434.8" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">3.11&#160;3.12&#160;3.13&#160;3.14]</text><text class="breeze-k8s-upload-k8s-image-r7" x="610" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">(TEXT)</text><text class="breez [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="459.2" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">--kubernetes-versions&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="459.2" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">Kubernetes&#160;ver [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="353.8" y="483.6" textLength="622.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">v1.32.11&#160;v1.33.12&#160;v1.34.11&#160;v1.35.8&#160;v1.36.4&#160;v1.37.0]</text><text class="breeze-k8s-upload-k8s-image-r7" x="988.2" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-im [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">--skip-cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="508" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-li [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">--debug-resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="532.4" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)" [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">--include-success-outputs</text><text class="breeze-k8s-upload-k8s-image-r1" x="353.8" y="556.8" textLength="841.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">Whether&#160;to&#160;include&#160;outpu [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="605.6" textLength="195.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="219.6" y="605.6" textLength="1220" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">─────────────────────────────── [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">--verbose</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">-v</text><text class="breeze-k8s-upload-k8s-image-r1" x="207 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">--dry-run</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">-D</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">--help&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">-h</text><text class="breeze-k8s-upload [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
index 3ddf63a3f50..96a7b724ad8 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
@@ -1 +1 @@
-4dd23c1d79e160e7b2ce01029d7e0b14
+19fcc072688b9248679eb1acd70f93d5
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
index 1b5761f9174..14abf69afcc 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
@@ -36,6 +36,7 @@ from airflow_breeze.commands.common_options import (
     option_answer,
     option_debug_resources,
     option_dry_run,
+    option_github_repository,
     option_include_success_outputs,
     option_parallelism,
     option_python,
@@ -646,8 +647,9 @@ def _rebuild_k8s_image(
     copy_local_sources: bool,
     use_uv: bool,
     output: Output | None,
+    github_repository: str = "apache/airflow",
 ) -> tuple[int, str]:
-    params = BuildProdParams(python=python, use_uv=use_uv)
+    params = BuildProdParams(python=python, use_uv=use_uv, github_repository=github_repository)
     if rebuild_base_image:
         run_build_production_image(
             prod_image_params=params,
@@ -698,8 +700,16 @@ ENV GUNICORN_CMD_ARGS='--preload'
     return docker_build_result.returncode, f"K8S image for Python {python}"
 
 
-def _upload_k8s_image(python: str, kubernetes_version: str, output: Output | None) -> tuple[int, str]:
-    params = BuildProdParams(python=python)
+def _upload_k8s_image(
+    python: str,
+    kubernetes_version: str,
+    output: Output | None,
+    github_repository: str = "apache/airflow",
+) -> tuple[int, str]:
+    # github_repository must match the value used when the image was built (_rebuild_k8s_image),
+    # otherwise airflow_image_kubernetes resolves to the wrong namespace (e.g. ghcr.io/apache/airflow
+    # on a fork) and `kind load` fails with "image ... not present locally".
+    params = BuildProdParams(python=python, github_repository=github_repository)
     cluster_name = get_kind_cluster_name(python=python, kubernetes_version=kubernetes_version)
     get_console(output=output).print(
         f"[info]Uploading Airflow image {params.airflow_image_kubernetes} to cluster {cluster_name}"
@@ -739,6 +749,7 @@ K8S_TEST_IMAGES_TO_PRELOAD: tuple[str, ...] = (
     "bitnamilegacy/postgresql:16.1.0-debian-11-r15",  # chart/values.yaml postgresql subchart
     "busybox:1.38.0",  # busybox-based system tests in kubernetes-tests/
     "ubuntu:24.04",  # ubuntu-based system tests in kubernetes-tests/
+    "redis:7.2-bookworm",  # chart/values.yaml redis broker (CeleryExecutor) — avoids in-cluster DockerHub 429
 )
 
 
@@ -827,6 +838,7 @@ def _preload_test_images_to_kind(
 @option_copy_local_sources
 @option_debug_resources
 @option_dry_run
+@option_github_repository
 @option_include_success_outputs
 @option_parallelism
 @option_python
@@ -839,6 +851,7 @@ def _preload_test_images_to_kind(
 def build_k8s_image(
     copy_local_sources: bool,
     debug_resources: bool,
+    github_repository: str,
     include_success_outputs: bool,
     parallelism: int,
     python: str,
@@ -867,9 +880,10 @@ def build_k8s_image(
                         kwds={
                             "python": _python,
                             "rebuild_base_image": rebuild_base_image,
-                            "copy local sources": copy_local_sources,
+                            "copy_local_sources": copy_local_sources,
                             "use_uv": use_uv,
                             "output": outputs[index],
+                            "github_repository": github_repository,
                         },
                     )
                     for index, _python in enumerate(python_version_array)
@@ -888,6 +902,7 @@ def build_k8s_image(
             copy_local_sources=copy_local_sources,
             use_uv=use_uv,
             output=None,
+            github_repository=github_repository,
         )
         if return_code == 0:
             console_print("\n[warning]NEXT STEP:[/][info] You might now upload your k8s image by:\n")
@@ -908,6 +923,7 @@ def build_k8s_image(
 @option_include_success_outputs
 @option_python_versions
 @option_kubernetes_versions
+@option_github_repository
 @option_verbose
 @option_dry_run
 def upload_k8s_image(
@@ -920,6 +936,7 @@ def upload_k8s_image(
     include_success_outputs: bool,
     python_versions: str,
     kubernetes_versions: str,
+    github_repository: str,
 ):
     result = sync_virtualenv(force_venv_setup=False)
     if result.returncode != 0:
@@ -947,6 +964,7 @@ def upload_k8s_image(
                             "python": combo.python_version,
                             "kubernetes_version": combo.kubernetes_version,
                             "output": outputs[index],
+                            "github_repository": github_repository,
                         },
                     )
                     for index, combo in enumerate(combos)
@@ -963,6 +981,7 @@ def upload_k8s_image(
             python=python,
             kubernetes_version=kubernetes_version,
             output=None,
+            github_repository=github_repository,
         )
         if return_code == 0:
             console_print("\n[warning]NEXT STEP:[/][info] You might now deploy airflow by:\n")
@@ -990,10 +1009,11 @@ def _build_skaffold_config(
     dags_relative_path: str,
     dags_dest: str,
     log_level: str,
+    github_repository: str = "apache/airflow",
 ) -> dict[str, Any]:
     from packaging.version import Version
 
-    params = BuildProdParams(python=python)
+    params = BuildProdParams(python=python, github_repository=github_repository)
     use_flask_appbuilder = Version(python) < Version("3.13")
     auth_manager = (
         "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
@@ -1340,6 +1360,7 @@ def _deploy_helm_chart(
     use_standard_naming: bool,
     extra_options: tuple[str, ...] | None = None,
     multi_namespace_mode: bool = False,
+    github_repository: str = "apache/airflow",
 ) -> RunCommandResult:
     from packaging.version import Version
 
@@ -1352,7 +1373,9 @@ def _deploy_helm_chart(
         shutil.copytree(CHART_PATH, os.fspath(tmp_chart_path), ignore_dangling_symlinks=True)
         get_console(output=output).print(f"[info]Copied chart sources to {tmp_chart_path}")
         kubectl_context = get_kubectl_cluster_name(python=python, kubernetes_version=kubernetes_version)
-        params = BuildProdParams(python=python)
+        # Must match the namespace the image was built+loaded under (see _upload_k8s_image), so the
+        # Helm chart references the image that is actually present in the kind cluster.
+        params = BuildProdParams(python=python, github_repository=github_repository)
         # TODO (potiuk): we can also run on matrix of auth managers if we make SimpleAuthManager prod-ready ?
         use_flask_appbuilder = Version(python) < Version("3.13")
         if use_flask_appbuilder:
@@ -1448,6 +1471,7 @@ def _deploy_airflow(
     extra_options: tuple[str, ...] | None = None,
     multi_namespace_mode: bool = False,
     num_tries: int = 1,
+    github_repository: str = "apache/airflow",
 ) -> tuple[int, str]:
     action = "Deploying" if not upgrade else "Upgrading"
     cluster_name = get_kind_cluster_name(python=python, kubernetes_version=kubernetes_version)
@@ -1463,6 +1487,7 @@ def _deploy_airflow(
             use_standard_naming=use_standard_naming,
             extra_options=extra_options,
             multi_namespace_mode=multi_namespace_mode,
+            github_repository=github_repository,
         )
         if result.returncode == 0:
             break
@@ -1570,6 +1595,7 @@ def _deploy_airflow(
 @option_multi_namespace_mode
 @option_python_versions
 @option_kubernetes_versions
+@option_github_repository
 @option_verbose
 @option_dry_run
 @click.argument("extra_options", nargs=-1, type=click.UNPROCESSED)
@@ -1589,6 +1615,7 @@ def deploy_airflow(
     kubernetes_versions: str,
     extra_options: tuple[str, ...],
     multi_namespace_mode: bool = False,
+    github_repository: str = "apache/airflow",
 ):
     if run_in_parallel:
         python_version_array: list[str] = python_versions.split(" ")
@@ -1618,6 +1645,7 @@ def deploy_airflow(
                             "extra_options": extra_options,
                             "output": outputs[index],
                             "multi_namespace_mode": multi_namespace_mode,
+                            "github_repository": github_repository,
                         },
                     )
                     for index, combo in enumerate(combos)
@@ -1640,6 +1668,7 @@ def deploy_airflow(
             wait_time_in_seconds=wait_time_in_seconds,
             extra_options=extra_options,
             multi_namespace_mode=multi_namespace_mode,
+            github_repository=github_repository,
         )
         if return_code == 0:
             console_print(
@@ -1671,6 +1700,7 @@ def deploy_airflow(
 @option_dags_path
 @option_dags_dest
 @option_skaffold_deploy
+@option_github_repository
 @option_verbose
 @option_dry_run
 @click.argument("skaffold_args", nargs=-1, type=click.UNPROCESSED)
@@ -1685,6 +1715,7 @@ def dev(
     dags_dest: str,
     deploy: bool,
     skaffold_args: tuple[str, ...],
+    github_repository: str = "apache/airflow",
 ):
     result = sync_virtualenv(force_venv_setup=False)
     if result.returncode != 0:
@@ -1738,6 +1769,7 @@ def dev(
         dags_relative_path=dags_relative_path,
         dags_dest=dags_dest,
         log_level=log_level,
+        github_repository=github_repository,
     )
     if not deploy:
         console_print(
@@ -2128,6 +2160,7 @@ def _run_complete_tests(
     extra_options: tuple[str, ...] | None,
     test_args: list[str],
     output: Output | None,
+    github_repository: str = "apache/airflow",
 ) -> tuple[int, str]:
     get_console(output=output).print(f"\n[info]Rebuilding k8s image for Python {python}\n")
     returncode, message = _rebuild_k8s_image(
@@ -2136,6 +2169,7 @@ def _run_complete_tests(
         use_uv=use_uv,
         rebuild_base_image=rebuild_base_image,
         copy_local_sources=copy_local_sources,
+        github_repository=github_repository,
     )
     if returncode != 0:
         return returncode, message
@@ -2168,7 +2202,10 @@ def _run_complete_tests(
             f"\n[info]Uploading k8s images for Python {python}, Kubernetes {kubernetes_version}\n"
         )
         returncode, message = _upload_k8s_image(
-            python=python, kubernetes_version=kubernetes_version, output=output
+            python=python,
+            kubernetes_version=kubernetes_version,
+            output=output,
+            github_repository=github_repository,
         )
         if returncode != 0:
             _logs(python=python, kubernetes_version=kubernetes_version)
@@ -2197,6 +2234,7 @@ def _run_complete_tests(
             extra_options=extra_options,
             multi_namespace_mode=True,
             num_tries=3,
+            github_repository=github_repository,
         )
         if returncode != 0:
             _logs(python=python, kubernetes_version=kubernetes_version)
@@ -2206,7 +2244,12 @@ def _run_complete_tests(
                 f"\n[info]Provisioning lang-SDK test env for Python {python}, "
                 f"Kubernetes {kubernetes_version}\n"
             )
-            _setup_lang_sdk_test(python=python, kubernetes_version=kubernetes_version, output=output)
+            _setup_lang_sdk_test(
+                python=python,
+                kubernetes_version=kubernetes_version,
+                output=output,
+                github_repository=github_repository,
+            )
         get_console(output=output).print(
             f"\n[info]Running tests Python {python}, Kubernetes {kubernetes_version}\n"
         )
@@ -2237,6 +2280,7 @@ def _run_complete_tests(
                 extra_options=extra_options,
                 multi_namespace_mode=True,
                 num_tries=3,
+                github_repository=github_repository,
             )
             if returncode != 0 or include_success_outputs:
                 _logs(python=python, kubernetes_version=kubernetes_version)
@@ -2274,6 +2318,7 @@ def _run_complete_tests(
 @option_executor
 @option_force_recreate_cluster
 @option_force_venv_setup
+@option_github_repository
 @option_include_success_outputs
 @option_kubernetes_version
 @option_kubernetes_versions
@@ -2296,6 +2341,7 @@ def run_complete_tests(
     executor: str,
     force_recreate_cluster: bool,
     force_venv_setup: bool,
+    github_repository: str,
     include_success_outputs: bool,
     kubernetes_version: str,
     kubernetes_versions: str,
@@ -2363,6 +2409,7 @@ def run_complete_tests(
                             "extra_options": None,
                             "test_args": pytest_args,
                             "output": outputs[index],
+                            "github_repository": github_repository,
                         },
                     )
                     for index, combo in enumerate(combos)
@@ -2394,6 +2441,7 @@ def run_complete_tests(
             extra_options=None,
             test_args=pytest_args,
             output=None,
+            github_repository=github_repository,
         )
         if result != 0:
             sys.exit(result)
@@ -2414,6 +2462,7 @@ def run_complete_tests(
 @option_use_uv
 @option_skip_image_build
 @option_skip_compile_ui_assets
+@option_github_repository
 def deploy_cluster(
     force_venv_setup: bool,
     force_recreate_cluster: bool,
@@ -2423,6 +2472,7 @@ def deploy_cluster(
     use_uv: bool,
     skip_image_build: bool,
     skip_compile_ui_assets: bool,
+    github_repository: str,
 ):
     console_print("[info]Syncing Virtual Environment[/]")
     result = sync_virtualenv(force_venv_setup=force_venv_setup)
@@ -2470,6 +2520,7 @@ def deploy_cluster(
             copy_local_sources=True,
             use_uv=use_uv,
             output=None,
+            github_repository=github_repository,
         )
         if return_code != 0:
             sys.exit(return_code)
@@ -2478,6 +2529,7 @@ def deploy_cluster(
         python=python,
         kubernetes_version=kubernetes_version,
         output=None,
+        github_repository=github_repository,
     )
     if return_code != 0:
         sys.exit(return_code)
@@ -3123,8 +3175,10 @@ def _lang_sdk_apply_configmaps_and_secret(
         )
 
 
-def _lang_sdk_deploy_airflow(python: str, kubernetes_version: str, output: Output | None) -> None:
-    params = BuildProdParams(python=python)
+def _lang_sdk_deploy_airflow(
+    python: str, kubernetes_version: str, output: Output | None, github_repository: str = "apache/airflow"
+) -> None:
+    params = BuildProdParams(python=python, github_repository=github_repository)
     base_image = params.airflow_image_kubernetes
     get_console(output=output).print("[info]Upgrading airflow Helm release with lang-SDK values")
     run_command_with_k8s_env(
@@ -3217,6 +3271,7 @@ def _setup_lang_sdk_test(
     kubernetes_version: str,
     runtime_image: str | None = None,
     output: Output | None = None,
+    github_repository: str = "apache/airflow",
 ) -> None:
     """Provision the lang-SDK coordinator env on an already-deployed KubernetesExecutor cluster.
 
@@ -3225,7 +3280,7 @@ def _setup_lang_sdk_test(
     uploads the artifacts, applies the pod template + secret, and helm-upgrades Airflow with the
     lang-SDK values.
     """
-    base_image = f"{BuildProdParams(python=python).airflow_image_kubernetes}:latest"
+    base_image = f"{BuildProdParams(python=python, github_repository=github_repository).airflow_image_kubernetes}:latest"
     build_runtime_image = runtime_image is None
     if runtime_image is None:
         # The runtime-image build below produces this fixed tag; resolve it up-front so the config
@@ -3266,7 +3321,7 @@ def _setup_lang_sdk_test(
         _run_lang_sdk_parallel(steps, output=output)
         _lang_sdk_upload_artifacts(staging, python, kubernetes_version, output)
     _lang_sdk_apply_configmaps_and_secret(python, kubernetes_version, output)
-    _lang_sdk_deploy_airflow(python, kubernetes_version, output)
+    _lang_sdk_deploy_airflow(python, kubernetes_version, output, github_repository=github_repository)
 
 
 @kubernetes_group.command(
@@ -3286,12 +3341,14 @@ def _setup_lang_sdk_test(
     "and Node. Defaults to building the prod image plus both (Dockerfile.runtimes) and loading it "
     "into the kind cluster.",
 )
+@option_github_repository
 @option_verbose
 @option_dry_run
 def setup_lang_sdk_test(
     python: str,
     kubernetes_version: str,
     runtime_image: str | None,
+    github_repository: str,
 ):
     result = sync_virtualenv(force_venv_setup=False)
     if result.returncode != 0:
@@ -3302,6 +3359,7 @@ def setup_lang_sdk_test(
         kubernetes_version=kubernetes_version,
         runtime_image=runtime_image,
         output=None,
+        github_repository=github_repository,
     )
     console_print(
         "\n[success]lang-SDK test environment is ready.[/]\n"
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
index 5c391f2c74c..283daa8c2c5 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
@@ -55,6 +55,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--python",
                 "--kubernetes-version",
                 "--runtime-image",
+                "--github-repository",
             ],
         }
     ],
@@ -94,6 +95,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--rebuild-base-image",
                 "--copy-local-sources",
                 "--use-uv",
+                "--github-repository",
             ],
         },
         {
@@ -135,6 +137,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             "options": [
                 "--python",
                 "--kubernetes-version",
+                "--github-repository",
             ],
         },
         {
@@ -161,6 +164,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--wait-time-in-seconds",
                 "--use-standard-naming",
                 "--multi-namespace-mode",
+                "--github-repository",
             ],
         },
         {
@@ -189,6 +193,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--dags-path",
                 "--dags-dest",
                 "--deploy",
+                "--github-repository",
             ],
         },
     ],
@@ -259,6 +264,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--executor",
                 "--lang-sdk-test",
                 "--force-venv-setup",
+                "--github-repository",
             ],
         },
         {
@@ -315,7 +321,15 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--force-venv-setup",
             ],
         },
-        {"name": "Build image flags", "options": ["--rebuild-base-image", "--use-uv", "--skip-image-build"]},
+        {
+            "name": "Build image flags",
+            "options": [
+                "--rebuild-base-image",
+                "--use-uv",
+                "--skip-image-build",
+                "--github-repository",
+            ],
+        },
         {"name": "UI flags", "options": ["--skip-compile-ui-assets"]},
     ],
 }
diff --git a/dev/breeze/src/airflow_breeze/utils/packages.py b/dev/breeze/src/airflow_breeze/utils/packages.py
index 25454c9cc50..625c41ad0dc 100644
--- a/dev/breeze/src/airflow_breeze/utils/packages.py
+++ b/dev/breeze/src/airflow_breeze/utils/packages.py
@@ -823,6 +823,10 @@ def make_sure_remote_apache_exists_and_fetch(github_repository: str = "apache/ai
       apache-https-for-providers/main are available for git log range queries
 
     """
+    # Always point the apache remote at the canonical apache/airflow repo, regardless of
+    # which fork is running CI. Passing a fork URL here produces a broken remote that
+    # cannot resolve provider changelog tags or commit history.
+    _apache_repo_url = "https://github.com/apache/airflow.git"
     try:
         run_command(["git", "remote", "get-url", HTTPS_REMOTE], text=True, capture_output=True)
     except subprocess.CalledProcessError as ex:
@@ -833,7 +837,7 @@ def make_sure_remote_apache_exists_and_fetch(github_repository: str = "apache/ai
                     "remote",
                     "add",
                     HTTPS_REMOTE,
-                    f"https://github.com/{github_repository}.git",
+                    _apache_repo_url,
                 ],
                 check=True,
             )
diff --git a/dev/breeze/tests/test_kubernetes_lang_sdk_commands.py b/dev/breeze/tests/test_kubernetes_lang_sdk_commands.py
index aa26675b6ac..01be3e85863 100644
--- a/dev/breeze/tests/test_kubernetes_lang_sdk_commands.py
+++ b/dev/breeze/tests/test_kubernetes_lang_sdk_commands.py
@@ -458,7 +458,7 @@ class TestSetupLangSdkTestNativeSelection:
         monkeypatch.setattr(
             kubernetes_commands,
             "BuildProdParams",
-            lambda python: mock.Mock(airflow_image_kubernetes="img"),
+            lambda python, github_repository="apache/airflow": mock.Mock(airflow_image_kubernetes="img"),
         )
 
         kubernetes_commands._setup_lang_sdk_test(python="3.11", kubernetes_version="v1.35.0")
@@ -494,7 +494,7 @@ class TestSetupLangSdkTestSteps:
         monkeypatch.setattr(
             kubernetes_commands,
             "BuildProdParams",
-            lambda python: mock.Mock(airflow_image_kubernetes="img"),
+            lambda python, github_repository="apache/airflow": mock.Mock(airflow_image_kubernetes="img"),
         )
         return recorded
 
diff --git a/providers/sftp/tests/unit/sftp/hooks/test_sftp.py b/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
index 34a7dfdc75d..8238182deb7 100644
--- a/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
+++ b/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
@@ -623,9 +623,13 @@ class TestSFTPHook:
 
     def test_store_and_retrieve_directory_concurrently(self):
         stored_dir_name = "stored_dir"
+        # Explicit workers: the default is os.cpu_count(), which on large
+        # (self-hosted) runners spawns dozens of concurrent SSH sessions and
+        # trips the test sshd's MaxSessions/MaxStartups limits into a hang.
         self.hook.store_directory_concurrently(
             remote_full_path=os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS, stored_dir_name),
             local_full_path=os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS, SUB_DIR),
+            workers=4,
         )
         output = self.hook.list_directory(
             path=os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS, stored_dir_name)
@@ -635,6 +639,7 @@ class TestSFTPHook:
         self.hook.retrieve_directory_concurrently(
             remote_full_path=os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS, stored_dir_name),
             local_full_path=os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS, retrieved_dir_name),
+            workers=4,
         )
         assert retrieved_dir_name in os.listdir(os.path.join(self.temp_dir, TMP_DIR_FOR_TESTS))
 
diff --git a/scripts/ci/prek/check_ci_workflows_in_sync.py b/scripts/ci/prek/check_ci_workflows_in_sync.py
index 14d195f067b..92b1e93de8a 100755
--- a/scripts/ci/prek/check_ci_workflows_in_sync.py
+++ b/scripts/ci/prek/check_ci_workflows_in_sync.py
@@ -86,7 +86,13 @@ LINE_RULES: list[tuple[str, str]] = [
     (r"^name: Tests \((?:ARM|AMD)\)$", "name: Tests (PLACEHOLDER)"),
     (r"^  group: ci-(?:arm|amd)-", "  group: ci-PLACEHOLDER-"),
     (r'^      platform: "linux/(?:arm64|amd64)"$', '      platform: "linux/PLACEHOLDER"'),
-    (r"^      runner-type: '\[\"ubuntu-22\.04(?:-arm)?\"\]'$", "      runner-type: 'PLACEHOLDER'"),
+    # Fork / RunsOn test: the label template carries the architecture-specific EC2
+    # families and image; jobs fill in cpu/ram.
+    (
+        r"^      runner-type: '\[\"runs-on=\$\{\{ github\.run_id \}\}/family=(?:m7a\+m7i\+m6a\+m6i|m8g\+m7g\+m6g)"
+        r"/image=ubuntu22-full-(?:x64|arm64)/volume=150gb/cpu=\{0\}/ram=\{1\}\"\]'$",
+        "      runner-type: 'PLACEHOLDER'",
+    ),
     (r'^          PLATFORM: "linux/(?:arm64|amd64)"$', '          PLATFORM: "linux/PLACEHOLDER"'),
     (
         r"^      # (?:ARM|AMD) copy\)\. The matching (?:AMD|ARM) copy lives in ci-(?:amd|arm)\.yml\.$",


(airflow) 02/03: Give the TypeScript SDK docs job a RunsOn size class

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch test-runs-on-github-actions-runner
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit d2522eb7599a62eeb4d974087d780349a98192a2
Author: Shahar Epstein <60...@users.noreply.github.com>
AuthorDate: Fri Sep 25 09:36:46 2026 +0300

    Give the TypeScript SDK docs job a RunsOn size class
    
    The job still consumed the raw `runner-type` output, which on this branch is
    the RunsOn label template, so it asked EC2 for `cpu={0}/ram={1}` and RunsOn
    fell back to a runner that fails the job by design.
---
 .github/workflows/ci-amd.yml | 2 +-
 .github/workflows/ci-arm.yml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index a67b96d2b81..2f4a3b73d3b 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -1132,7 +1132,7 @@ jobs:
   build-ts-sdk-docs:
     name: "TypeScript SDK docs"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 4, 16) }}
     timeout-minutes: 30
     permissions:
       contents: read
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 5e6a009637d..de63c27f15d 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -1121,7 +1121,7 @@ jobs:
   build-ts-sdk-docs:
     name: "TypeScript SDK docs"
     needs: [build-info]
-    runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
+    runs-on: ${{ format(fromJSON(needs.build-info.outputs.runner-type)[0], 4, 16) }}
     timeout-minutes: 30
     permissions:
       contents: read