diff --git a/plugins/platforms/matrix/adapter.py b/plugins/platforms/matrix/adapter.py index 30cdc1822a..e5e6766659 100644 --- a/plugins/platforms/matrix/adapter.py +++ b/plugins/platforms/matrix/adapter.py @@ -209,7 +209,7 @@ def _is_permanent_matrix_auth_error(exc: BaseException) -> bool: A transient homeserver outage surfaces as a 5xx whose body may be an HTML error page (Umbrel's app-proxy returns one). Naive substring checks like ``"403" in str(exc)`` false-positive on digits embedded in that HTML (an SVG - coordinate such as ``40.4302`` contains ``403``) or in the ``since`` token + path coordinate such as ``1403.2`` contains ``403``) or in the ``since`` token echoed by a timeout message, which stopped the sync loop permanently on a passing blip. mautrix raises ``MatrixRequestError`` with ``errcode`` and ``http_status`` for every non-2xx, so classify on those alone; anything diff --git a/tests/gateway/test_matrix.py b/tests/gateway/test_matrix.py index aba2eca206..ec5b392f3a 100644 --- a/tests/gateway/test_matrix.py +++ b/tests/gateway/test_matrix.py @@ -1375,9 +1375,9 @@ class TestMatrixSyncLoop: @pytest.mark.parametrize( "exc", [ - # Umbrel app-proxy 502: the SVG coordinate 40.4302 embeds "403". + # Umbrel app-proxy 502: an SVG path coordinate embeds "403". _sync_error.__func__( - '502: ', + '502: ', http_status=502, ), # Plain timeout echoing the pagination token, which embeds "401".