From 853afd71063d62c15d64176a24e8bee32d624fe2 Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Wed, 16 Sep 2026 13:00:16 -0700 Subject: [PATCH 1/7] [Service Bus] Prepare azure-servicebus 7.15.0 for release Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 20 ++++++------------- .../azure/servicebus/_version.py | 2 +- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index 7a98b46f5384..a98f179eaf4a 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -1,11 +1,16 @@ # Release History -## 7.15.0b3 (Unreleased) +## 7.15.0 (2026-10-06) ### Features Added - Added an opt-in `try_timeout` client keyword that bounds a single attempt rather than the whole operation. Applies to sending, management operations, and AMQP link acquisition, where the wait for the link to become ready was previously unbounded. Each attempt gets a fresh `try_timeout`, still capped by the caller's remaining time; exceeding it raises a retryable `OperationTimeoutError` and retries. Must be greater than 0 if specified, and defaults to `None` (off), preserving existing behavior. It also caps the link acquisition performed by `receive_messages()` and by receiver iteration, but does not bound the `receive_messages()` long poll, the iterator's own wait, or message settlement. Opening, closing and error-path cleanup of the AMQP handler are bounded on the async client, where a slow call is cancelled once the budget is spent and a cleanup failure never replaces the error that triggered it; the sync client cannot interrupt a blocking call and so detects the overrun only once it returns. Mirrors `TryTimeout` in the .NET, Java and Go SDKs. +- Added `ServiceBusReceivedMessage.from_bytes()` classmethod to construct a `ServiceBusReceivedMessage` from raw AMQP payload bytes without requiring the deprecated `uamqp` library. ([#43979](https://github.com/Azure/azure-sdk-for-python/issues/43979)) +- Added `ServiceBusClient.list_queue_sessions()` and `ServiceBusClient.list_subscription_sessions()` (sync and async) to list session IDs for entities with active messages or stored session state, with optional filtering by session-state update timestamp. The methods return an `ItemPaged[str]` (`AsyncItemPaged[str]` on the async client) so callers can iterate every session transparently or page with `by_page()`. Implements the `com.microsoft:get-message-sessions` management operation. ([#46575](https://github.com/Azure/azure-sdk-for-python/pull/46575)) +- Added `sql_filter_count` and `correlation_filter_count` properties to `TopicRuntimeProperties`, exposing the total number of SQL filters and correlation filters across all of a topic's subscriptions. +- Added API version `2024-05` and made it the default for the management client, which is required for the topic filter counts above. + ### Breaking Changes - `receive_messages()` now returns an empty list after 60 seconds when no wait time was given on the call or the receiver; it previously had no deadline and blocked until a message arrived or the connection closed. An explicit `max_wait_time` still wins, and receiver iteration is unchanged. On a receiver that has not been opened yet, this wait now also bounds the initial link acquisition, including connecting to a `NEXT_AVAILABLE_SESSION`; open the receiver first (for example with a context manager) to keep that governed solely by the constructor's `max_wait_time`. @@ -14,19 +19,6 @@ - Management, send and receive operations now bound AMQP link acquisition by the caller's timeout, rather than timing only the operation that follows it. Previously a link that never became ready could block indefinitely even when a timeout was supplied. Management and send deduct the time spent from the operation itself, so one attempt shares a single budget. -### Other Changes - -## 7.15.0b2 (2026-08-21) - -### Features Added - -- Added `ServiceBusReceivedMessage.from_bytes()` classmethod to construct a `ServiceBusReceivedMessage` from raw AMQP payload bytes without requiring the deprecated `uamqp` library. ([#43979](https://github.com/Azure/azure-sdk-for-python/issues/43979)) -- Added `ServiceBusClient.list_queue_sessions()` and `ServiceBusClient.list_subscription_sessions()` (sync and async) to list session IDs for entities with active messages or stored session state, with optional filtering by session-state update timestamp. The methods return an `ItemPaged[str]` (`AsyncItemPaged[str]` on the async client) so callers can iterate every session transparently or page with `by_page()`. Implements the `com.microsoft:get-message-sessions` management operation. ([#46575](https://github.com/Azure/azure-sdk-for-python/pull/46575)) -- Added `sql_filter_count` and `correlation_filter_count` properties to `TopicRuntimeProperties`, exposing the total number of SQL filters and correlation filters across all of a topic's subscriptions. -- Added API version `2024-05` and made it the default for the management client, which is required for the topic filter counts above. - -### Bugs Fixed - - Fixed a bug where messages returned by `receive_deferred_messages` had a `lock_token` of `None`, which prevented settling (completing, abandoning, dead-lettering, deferring) or renewing the lock on a deferred message in `PEEK_LOCK` mode. The lock token is now read from the `lock-token` field of the management-link response for deferred messages. ([#42454](https://github.com/Azure/azure-sdk-for-python/issues/42454)) - Read `com.microsoft:max-message-batch-size` vendor property from the AMQP sender link to correctly limit batch size on Premium large-message entities, where `max-message-size` can be up to 100 MB but the batch limit is 1 MB. - Fixed a bug where sending a batched or multi-message payload with `uamqp_transport=True` raised `TypeError: 'BatchMessage' object is not subscriptable` (and a masked `AttributeError` on the list path) when the first message carried a `message_id`, `session_id`, or `partition_key`. The batch envelope properties are now set through the transport-appropriate code path. (regression from [#42598](https://github.com/Azure/azure-sdk-for-python/pull/42598)) diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py index 7231fb90d443..bbae47a9af60 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py @@ -3,4 +3,4 @@ # Licensed under the MIT License. # ------------------------------------ -VERSION = "7.15.0b3" +VERSION = "7.15.0" From 7f7897694c05208ea0b188d861a93e21ba032793 Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Wed, 16 Sep 2026 13:23:11 -0700 Subject: [PATCH 2/7] config: Mark azure-servicebus 7.15.0 as stable - Use the stable PyPI development classifier - Align APIView package metadata with version 7.15.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/api.metadata.yml | 2 +- sdk/servicebus/azure-servicebus/pyproject.toml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/api.metadata.yml b/sdk/servicebus/azure-servicebus/api.metadata.yml index bab122e95f08..114718312c3a 100644 --- a/sdk/servicebus/azure-servicebus/api.metadata.yml +++ b/sdk/servicebus/azure-servicebus/api.metadata.yml @@ -1,4 +1,4 @@ apiMdSha256: a5f9da8d7980799f054d782f99eabf9b190925718f2bc4bdd86f01752a5c1bf8 -packageVersion: 7.15.0b3 +packageVersion: 7.15.0 parserVersion: 0.3.31 pythonVersion: 3.14.0 diff --git a/sdk/servicebus/azure-servicebus/pyproject.toml b/sdk/servicebus/azure-servicebus/pyproject.toml index 6c8b3024a9d5..4d1d9557b729 100644 --- a/sdk/servicebus/azure-servicebus/pyproject.toml +++ b/sdk/servicebus/azure-servicebus/pyproject.toml @@ -12,8 +12,7 @@ keywords = ["azure", "azure sdk"] requires-python = ">=3.9" license = "MIT" classifiers = [ - # TODO: Flip to "Development Status :: 5 - Production/Stable" when 7.15.0 ships as GA. - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", From 44c27df046f1d44908e0ee367eb1e25b94525359 Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Wed, 16 Sep 2026 15:07:36 -0700 Subject: [PATCH 3/7] config: Release azure-servicebus as 8.0.0 - Use a major version for the documented receive behavior change - Align package, APIView, and changelog release metadata Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 2 +- sdk/servicebus/azure-servicebus/api.metadata.yml | 2 +- sdk/servicebus/azure-servicebus/azure/servicebus/_version.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index a98f179eaf4a..e245459f53c6 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 7.15.0 (2026-10-06) +## 8.0.0 (2026-10-06) ### Features Added diff --git a/sdk/servicebus/azure-servicebus/api.metadata.yml b/sdk/servicebus/azure-servicebus/api.metadata.yml index 114718312c3a..4fb0c46de89b 100644 --- a/sdk/servicebus/azure-servicebus/api.metadata.yml +++ b/sdk/servicebus/azure-servicebus/api.metadata.yml @@ -1,4 +1,4 @@ apiMdSha256: a5f9da8d7980799f054d782f99eabf9b190925718f2bc4bdd86f01752a5c1bf8 -packageVersion: 7.15.0 +packageVersion: 8.0.0 parserVersion: 0.3.31 pythonVersion: 3.14.0 diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py index bbae47a9af60..92feb1248a60 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py @@ -3,4 +3,4 @@ # Licensed under the MIT License. # ------------------------------------ -VERSION = "7.15.0" +VERSION = "8.0.0" From 085466c933a4dc05f90473f31f50f766c7a61bff Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Thu, 17 Sep 2026 08:09:30 -0700 Subject: [PATCH 4/7] config: Release azure-servicebus as 7.15.0 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 2 +- sdk/servicebus/azure-servicebus/api.metadata.yml | 2 +- sdk/servicebus/azure-servicebus/azure/servicebus/_version.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index e245459f53c6..a98f179eaf4a 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 8.0.0 (2026-10-06) +## 7.15.0 (2026-10-06) ### Features Added diff --git a/sdk/servicebus/azure-servicebus/api.metadata.yml b/sdk/servicebus/azure-servicebus/api.metadata.yml index 4fb0c46de89b..114718312c3a 100644 --- a/sdk/servicebus/azure-servicebus/api.metadata.yml +++ b/sdk/servicebus/azure-servicebus/api.metadata.yml @@ -1,4 +1,4 @@ apiMdSha256: a5f9da8d7980799f054d782f99eabf9b190925718f2bc4bdd86f01752a5c1bf8 -packageVersion: 8.0.0 +packageVersion: 7.15.0 parserVersion: 0.3.31 pythonVersion: 3.14.0 diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py index 92feb1248a60..bbae47a9af60 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_version.py @@ -3,4 +3,4 @@ # Licensed under the MIT License. # ------------------------------------ -VERSION = "8.0.0" +VERSION = "7.15.0" From 6763a5a9bc9aff3017990f3e1f2040bd2f7d66b7 Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Thu, 17 Sep 2026 09:40:16 -0700 Subject: [PATCH 5/7] fix: Correct uAMQP deprecation target - Point sync and async warnings to a future major release - Record the warning correction in the 7.15.0 changelog Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 1 + .../azure-servicebus/azure/servicebus/_servicebus_client.py | 2 +- .../azure/servicebus/aio/_servicebus_client_async.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index a98f179eaf4a..65a5448d44cd 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -35,6 +35,7 @@ - Clarified in the `application_properties` documentation (the `ServiceBusMessage` constructor, the `application_properties` property, and the README) that when a message is received, its keys and any string values are returned as `bytes`, not `str`, along with the recommended bytes-key access and decoding pattern. ([#45082](https://github.com/Azure/azure-sdk-for-python/issues/45082)) - When using the async `AmqpOverWebsocket` transport on Python 3.10 or later, `aiohttp>=3.14.0` is now recommended. Earlier `aiohttp` versions have a WebSocket heartbeat bug ([aio-libs/aiohttp#12030](https://github.com/aio-libs/aiohttp/pull/12030)) that can cause the connection to be dropped during long message processing, surfacing as a `SocketError` ("Cannot write to closing transport"). Python 3.9 users must upgrade Python to install an `aiohttp` release containing this fix. ([#44028](https://github.com/Azure/azure-sdk-for-python/issues/44028)) - Management operations (peek, deferred receive, message settlement over the management link, lock renewal, session state, session listing, schedule/cancel) now send `com.microsoft:server-timeout`: the caller's remaining time less one second, or 60 seconds when none was given. Previously no bound was sent, so a stalled service held the call until the AMQP link failed; it now raises a retryable `OperationTimeoutError`, so a persistently stalled service surfaces after roughly four minutes at default retry settings. Matches the .NET, Java and Go SDKs. +- Updated the legacy uAMQP transport deprecation warning to state that support will be removed in a future major release rather than the current 7.15.0 release. ## 7.14.3 (2025-11-11) diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py index 2ad6b3373bd0..ea083a53ad58 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py @@ -138,7 +138,7 @@ def __init__( if uamqp_transport: # Deprecation of uamqp transport warnings.warn( - "uAMQP legacy support will be removed in the 7.15.0 minor release. " + "uAMQP legacy support will be removed in a future major release. " "Please remove the use of `uamqp_transport` keyword argument from the client in order " "to use the pure Python AMQP transport. " "If you rely on this, please comment on [this issue]" diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py index 6d3229fa463a..dc879ebabacc 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py @@ -130,7 +130,7 @@ def __init__( if uamqp_transport: # Deprecation of uamqp transport warnings.warn( - "uAMQP legacy support will be removed in the 7.15.0 minor release. " + "uAMQP legacy support will be removed in a future major release. " "Please remove the use of `uamqp_transport` keyword argument from the client in order " "to use the pure Python AMQP transport. " "If you rely on this, please comment on [this issue]" From 2f1adfb4daa03cbd51aa3284ea08646feb049483 Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Thu, 17 Sep 2026 09:47:56 -0700 Subject: [PATCH 6/7] fix: Keep uAMQP transport available - Remove deprecation warnings from sync and async clients - Remove stale deprecation comments and document 7.15.0 availability Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 2 +- .../azure/servicebus/_servicebus_client.py | 11 ----------- .../azure/servicebus/_transport/_uamqp_transport.py | 2 +- .../azure/servicebus/aio/_servicebus_client_async.py | 11 ----------- .../aio/_transport/_uamqp_transport_async.py | 2 +- 5 files changed, 3 insertions(+), 25 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index 65a5448d44cd..908c8fc4d079 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -35,7 +35,7 @@ - Clarified in the `application_properties` documentation (the `ServiceBusMessage` constructor, the `application_properties` property, and the README) that when a message is received, its keys and any string values are returned as `bytes`, not `str`, along with the recommended bytes-key access and decoding pattern. ([#45082](https://github.com/Azure/azure-sdk-for-python/issues/45082)) - When using the async `AmqpOverWebsocket` transport on Python 3.10 or later, `aiohttp>=3.14.0` is now recommended. Earlier `aiohttp` versions have a WebSocket heartbeat bug ([aio-libs/aiohttp#12030](https://github.com/aio-libs/aiohttp/pull/12030)) that can cause the connection to be dropped during long message processing, surfacing as a `SocketError` ("Cannot write to closing transport"). Python 3.9 users must upgrade Python to install an `aiohttp` release containing this fix. ([#44028](https://github.com/Azure/azure-sdk-for-python/issues/44028)) - Management operations (peek, deferred receive, message settlement over the management link, lock renewal, session state, session listing, schedule/cancel) now send `com.microsoft:server-timeout`: the caller's remaining time less one second, or 60 seconds when none was given. Previously no bound was sent, so a stalled service held the call until the AMQP link failed; it now raises a retryable `OperationTimeoutError`, so a persistently stalled service surfaces after roughly four minutes at default retry settings. Matches the .NET, Java and Go SDKs. -- Updated the legacy uAMQP transport deprecation warning to state that support will be removed in a future major release rather than the current 7.15.0 release. +- Removed the deprecation warning for the legacy uAMQP transport. The `uamqp_transport=True` option remains available in 7.15.0. ## 7.14.3 (2025-11-11) diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py index ea083a53ad58..d404e7524f45 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_servicebus_client.py @@ -6,7 +6,6 @@ from typing import Any, Union, Optional, TYPE_CHECKING, Type from datetime import datetime import logging -import warnings from weakref import WeakSet from typing_extensions import Literal import certifi @@ -136,16 +135,6 @@ def __init__( ) if uamqp_transport: - # Deprecation of uamqp transport - warnings.warn( - "uAMQP legacy support will be removed in a future major release. " - "Please remove the use of `uamqp_transport` keyword argument from the client in order " - "to use the pure Python AMQP transport. " - "If you rely on this, please comment on [this issue]" - "(https://github.com/Azure/azure-sdk-for-python/issues/40347) ", - DeprecationWarning, - stacklevel=2, - ) try: from ._transport._uamqp_transport import UamqpTransport diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_transport/_uamqp_transport.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_transport/_uamqp_transport.py index 8419d0770f07..5f988cf4158f 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_transport/_uamqp_transport.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_transport/_uamqp_transport.py @@ -895,7 +895,7 @@ def reset_link_credit(handler: "ReceiveClient", link_credit: int) -> None: def drain_and_release_messages(handler: "ReceiveClient") -> None: """ No-op for uamqp: drain-on-close is only implemented for the pyamqp - transport (the default). uamqp is deprecated. + transport (the default). :param ~uamqp.ReceiveClient handler: The handler. :rtype: None """ diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py index dc879ebabacc..5e95291699d7 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_servicebus_client_async.py @@ -6,7 +6,6 @@ from typing import Any, Union, Optional, TYPE_CHECKING, Type from datetime import datetime import logging -import warnings from weakref import WeakSet from typing_extensions import Literal import certifi @@ -128,16 +127,6 @@ def __init__( ] = PyamqpTransportAsync if uamqp_transport: - # Deprecation of uamqp transport - warnings.warn( - "uAMQP legacy support will be removed in a future major release. " - "Please remove the use of `uamqp_transport` keyword argument from the client in order " - "to use the pure Python AMQP transport. " - "If you rely on this, please comment on [this issue]" - "(https://github.com/Azure/azure-sdk-for-python/issues/40347) ", - DeprecationWarning, - stacklevel=2, - ) try: from ._transport._uamqp_transport_async import UamqpTransportAsync diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_transport/_uamqp_transport_async.py b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_transport/_uamqp_transport_async.py index 02ba9be7e4fa..bd3b42aaeed6 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_transport/_uamqp_transport_async.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/_transport/_uamqp_transport_async.py @@ -281,7 +281,7 @@ async def reset_link_credit_async(handler: "ReceiveClientAsync", link_credit: in async def drain_and_release_messages_async(handler: "ReceiveClientAsync") -> None: """ No-op for uamqp: drain-on-close is only implemented for the pyamqp - transport (the default). uamqp is deprecated. + transport (the default). :param ReceiveClientAsync handler: The handler. :rtype: None """ From 5d58cbc1ae68093e8e7610d618c8ae32187c932a Mon Sep 17 00:00:00 2001 From: Eldert Grootenboer Date: Thu, 17 Sep 2026 13:20:49 -0700 Subject: [PATCH 7/7] Retry Service Bus release validation Re-run pull request validation after unrelated Cosmos emulator failures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>