fix(python): skip stale protocol v1 responses
What changed, and why it matters
This update fixes a bug in the Trezor Python library where reconnecting to a Trezor device could fail if an old, unread response was still waiting in the communication channel. The fix makes the library clear out up to 10 stale responses before it checks whether the device speaks the older protocol v1. A new test simulates a host disconnect mid-operation and verifies that a new client can reconnect successfully.
Treat as a reliability/robustness fix rather than a critical security vulnerability. Users of the `trezorlib` Python package should upgrade to the version containing this commit to avoid reconnect failures after interrupted sessions. No immediate device firmware update is indicated by this change.
Security signals we found
Communication desynchronization between host and device
Stale message buffer not cleared on reconnect
Protocol probing failure could block or confuse client initialization
Regression test added for host-disconnect/reconnect scenario
Evidence from the diff
The patch modifies python/src/trezorlib/protocol_v1.py::probe() to drain stale protocol v1 messages from the transport before probing. It loops up to retries (default 10), calling read(transport, _ignore_bad_magic=True, timeout=0.1) and stopping on Timeout. This prevents a leftover response (e.g., from a previous session that ended without reading the final message) from being misinterpreted during protocol detection or blocking the subsequent Cancel probe. A regression test test_desync_v1 was added to tests/device_tests/test_basic.py and UI fixtures were regenerated for all device/language variants.
Changed components
python/src/trezorlib/protocol_v1.pytests/device_tests/test_basic.pytests/ui_tests/fixtures.jsonInspect captured patch +47 / −1
diff --git a/python/.changelog.d/6859.fixed b/python/.changelog.d/6859.fixed
new file mode 100644
index 00000000..28e48139
--- /dev/null
+++ b/python/.changelog.d/6859.fixed
@@ -0,0 +1 @@
+Skip stale protocol v1 responses on probing.
diff --git a/python/src/trezorlib/protocol_v1.py b/python/src/trezorlib/protocol_v1.py
index b733f2d4..dbf541e0 100644
--- a/python/src/trezorlib/protocol_v1.py
+++ b/python/src/trezorlib/protocol_v1.py
@@ -29,6 +29,7 @@ from . import client, exceptions, mapping, messages
from .log import DUMP_BYTES
from .thp import pairing
from .tools import enter_context
+from .transport import Timeout
if t.TYPE_CHECKING:
from .mapping import ProtobufMapping
@@ -347,9 +348,19 @@ class TrezorClientV1(client.TrezorClient[SessionV1]):
@enter_context
def probe(
- transport: Transport, *, mapping: ProtobufMapping = mapping.DEFAULT_MAPPING
+ transport: Transport,
+ *,
+ mapping: ProtobufMapping = mapping.DEFAULT_MAPPING,
+ retries: int = 10,
) -> bool:
"""Probe the transport to see if it supports protocol v1."""
+ for _ in range(retries):
+ try:
+ # skip stale responses (to prevent the device from blocking during sending)
+ resp = read(transport, _ignore_bad_magic=True, timeout=0.1)
+ LOG.debug("stale response: %s", resp)
+ except Timeout:
+ break
cancel_msg = messages.Cancel()
cancel_msg_type, cancel_msg_bytes = mapping.encode(cancel_msg)
write(transport, cancel_msg_type, cancel_msg_bytes)
diff --git a/tests/device_tests/test_basic.py b/tests/device_tests/test_basic.py
index 9980ad8a..a53bd715 100644
--- a/tests/device_tests/test_basic.py
+++ b/tests/device_tests/test_basic.py
@@ -17,6 +17,7 @@
import pytest
from trezorlib import messages, models
+from trezorlib.client import get_client
from trezorlib.debuglink import DebugSession as Session
from trezorlib.debuglink import TrezorTestContext as Client
@@ -72,3 +73,17 @@ def test_not_initialized(session: Session):
messages.FailureType.InvalidSession,
)
assert resp.code == expected[session.test_ctx.is_thp()]
+
+
+@pytest.mark.protocol("v1")
+def test_desync_v1(client: Client):
+ with client.get_session(passphrase=None) as session:
+ resp = session.call_raw(messages.Ping(message="test", button_protection=True))
+ messages.ButtonRequest.ensure_isinstance(resp)
+ session.write(messages.ButtonAck())
+ session.debug.press_no()
+ # don't read the response - simulating host disconnection
+
+ # Creating a new client fails without skipping stale responses
+ # (see https://github.com/trezor/trezor-firmware/issues/6859)
+ get_client(client.app, client.transport).ping("reconnect")
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 9aedee94..bfa02a68 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -778,6 +778,7 @@
"T1B1_en_test_autolock.py::test_autolock_ignores_getaddress": "c3b9058d19b5267282d06fcf67d9728bc17332c875d25758ff3ef1c23f10eb92",
"T1B1_en_test_autolock.py::test_autolock_ignores_initialize": "c3b9058d19b5267282d06fcf67d9728bc17332c875d25758ff3ef1c23f10eb92",
"T1B1_en_test_basic.py::test_capabilities": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+"T1B1_en_test_basic.py::test_desync_v1": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_test_basic.py::test_device_id_different": "9f7416570bbc983e5c3e78026731599b59f86dfab09e88d922948c3cd2b0715b",
"T1B1_en_test_basic.py::test_device_id_same": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_test_basic.py::test_not_initialized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
@@ -2761,6 +2762,7 @@
"T2T1_cs_test_autolock.py::test_autolock_ignores_getaddress": "107b1a0eb93aa9fd80046e6760898e43c6610840004f280d35ff976684510841",
"T2T1_cs_test_autolock.py::test_autolock_ignores_initialize": "107b1a0eb93aa9fd80046e6760898e43c6610840004f280d35ff976684510841",
"T2T1_cs_test_basic.py::test_capabilities": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
+"T2T1_cs_test_basic.py::test_desync_v1": "32aa340ac8713ba41f9fa83fa682f5db3a0017a3688bdd60862cced92aee5bb0",
"T2T1_cs_test_basic.py::test_device_id_different": "4deac7bf4da5b298a09f166c71506b3a8e82fb9d37ce2ef8e4218d765132c511",
"T2T1_cs_test_basic.py::test_device_id_same": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
"T2T1_cs_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -4542,6 +4544,7 @@
"T2T1_de_test_autolock.py::test_autolock_ignores_getaddress": "b0095da5511f046af9ba81e22436cc7b749da2307dd594ae39beb8e3c1c517b2",
"T2T1_de_test_autolock.py::test_autolock_ignores_initialize": "b0095da5511f046af9ba81e22436cc7b749da2307dd594ae39beb8e3c1c517b2",
"T2T1_de_test_basic.py::test_capabilities": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
+"T2T1_de_test_basic.py::test_desync_v1": "2ddd34bac50378c810b4b7e125fa04bb619fc55525378005611e7f4c48806a15",
"T2T1_de_test_basic.py::test_device_id_different": "c2346f3c6fa8c74d9a0b4965f56495c4fad41f9bf2c1fe72b806155d6725ae07",
"T2T1_de_test_basic.py::test_device_id_same": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
"T2T1_de_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -6323,6 +6326,7 @@
"T2T1_en_test_autolock.py::test_autolock_ignores_getaddress": "fad121eefa1b63197e886358fecbbf2ec05232a00fd0ed5025210710b60ba91a",
"T2T1_en_test_autolock.py::test_autolock_ignores_initialize": "fad121eefa1b63197e886358fecbbf2ec05232a00fd0ed5025210710b60ba91a",
"T2T1_en_test_basic.py::test_capabilities": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
+"T2T1_en_test_basic.py::test_desync_v1": "cc5a955408e7cb2f54361215a0a64c3fd1abe8fc295fa5cc5849c8dd99cd02d7",
"T2T1_en_test_basic.py::test_device_id_different": "fc0f865ca461cee420e4a3772159e662d38711582d67b4a2180e9b378b0ef794",
"T2T1_en_test_basic.py::test_device_id_same": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
"T2T1_en_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -8122,6 +8126,7 @@
"T2T1_es_test_autolock.py::test_autolock_ignores_getaddress": "9d3764b6cc0b7fed21a1893f5dbad87cb75690aded17b3f1491f289ab8501283",
"T2T1_es_test_autolock.py::test_autolock_ignores_initialize": "9d3764b6cc0b7fed21a1893f5dbad87cb75690aded17b3f1491f289ab8501283",
"T2T1_es_test_basic.py::test_capabilities": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
+"T2T1_es_test_basic.py::test_desync_v1": "8ccb59eb4e29e294aa161f501b180ee8726ca4b415db9c74ae621f08525d36de",
"T2T1_es_test_basic.py::test_device_id_different": "632f03df29ec617ced116c51138d25df97c36dc12445e96690c87991f0c3d8b6",
"T2T1_es_test_basic.py::test_device_id_same": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
"T2T1_es_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -9903,6 +9908,7 @@
"T2T1_fr_test_autolock.py::test_autolock_ignores_getaddress": "6721fddfd9b39ba80793a8f8466bfcce76c71cae357e3a111b6f37b8db35eeaa",
"T2T1_fr_test_autolock.py::test_autolock_ignores_initialize": "6721fddfd9b39ba80793a8f8466bfcce76c71cae357e3a111b6f37b8db35eeaa",
"T2T1_fr_test_basic.py::test_capabilities": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
+"T2T1_fr_test_basic.py::test_desync_v1": "d111ba5740029a6b91e3f67a7a51f4ffefb846b035b29a5192440258e7359c04",
"T2T1_fr_test_basic.py::test_device_id_different": "a3d9587c740f993ccbe0fd10743837b177aa5c269c85700457af41dc0010a54b",
"T2T1_fr_test_basic.py::test_device_id_same": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
"T2T1_fr_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -11684,6 +11690,7 @@
"T2T1_pt_test_autolock.py::test_autolock_ignores_getaddress": "3545f0259c47be8f7088c1abe726516fc692ea331523405788c4ad8100c82b8f",
"T2T1_pt_test_autolock.py::test_autolock_ignores_initialize": "3545f0259c47be8f7088c1abe726516fc692ea331523405788c4ad8100c82b8f",
"T2T1_pt_test_basic.py::test_capabilities": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
+"T2T1_pt_test_basic.py::test_desync_v1": "00be979067b824dc99168df50c69151f4e5e8fabaf27ba42b9290c2007c7aa55",
"T2T1_pt_test_basic.py::test_device_id_different": "40d7ed6da4212e7405fb3ada52e4851593841e8a5b4dc3688861ff44a597896d",
"T2T1_pt_test_basic.py::test_device_id_same": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
"T2T1_pt_test_basic.py::test_not_initialized": "15a782d367c2eee82cacfcafdc198225cb8e3297487003f5ab71b79fe9b436c1",
@@ -13722,6 +13729,7 @@
"T3B1_cs_test_autolock.py::test_autolock_ignores_getaddress": "64bd03111572bfcc4abb516d8042e0d0bcd0ddda79a32903e4a087f072212d77",
"T3B1_cs_test_autolock.py::test_autolock_ignores_initialize": "64bd03111572bfcc4abb516d8042e0d0bcd0ddda79a32903e4a087f072212d77",
"T3B1_cs_test_basic.py::test_capabilities": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
+"T3B1_cs_test_basic.py::test_desync_v1": "d13f0f2741bec86a3f9b9d54a3b48dc08f6426878a47028f55f6f1533e03f90e",
"T3B1_cs_test_basic.py::test_device_id_different": "0d7bd0747ba855306466a8f23c0bd326d196c5a92fe7f256a65e80a307ce2f6e",
"T3B1_cs_test_basic.py::test_device_id_same": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
"T3B1_cs_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -15444,6 +15452,7 @@
"T3B1_de_test_autolock.py::test_autolock_ignores_getaddress": "f33fa7eddb1bbfe8f146f2b28ef0458371dcb3b09a1a83a506a29b6ad964b7b2",
"T3B1_de_test_autolock.py::test_autolock_ignores_initialize": "f33fa7eddb1bbfe8f146f2b28ef0458371dcb3b09a1a83a506a29b6ad964b7b2",
"T3B1_de_test_basic.py::test_capabilities": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
+"T3B1_de_test_basic.py::test_desync_v1": "5c1f21814dbaebc391a193a8de1b329bd25100af536686525ac16ca57c5d7604",
"T3B1_de_test_basic.py::test_device_id_different": "3e1dd6e8660b6391217b1f7068273df9d425313c2f8dd341c2003e31a254a4b5",
"T3B1_de_test_basic.py::test_device_id_same": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
"T3B1_de_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -17166,6 +17175,7 @@
"T3B1_en_test_autolock.py::test_autolock_ignores_getaddress": "1ef137328001ef23bb7d59811bda83d17c7cebf10446a725d30a324880bc71bb",
"T3B1_en_test_autolock.py::test_autolock_ignores_initialize": "1ef137328001ef23bb7d59811bda83d17c7cebf10446a725d30a324880bc71bb",
"T3B1_en_test_basic.py::test_capabilities": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
+"T3B1_en_test_basic.py::test_desync_v1": "a8b79a56e9a3f16c94e5048222c4cb3aca1c82c4ec6900919b11148e8334312c",
"T3B1_en_test_basic.py::test_device_id_different": "c03e5e82d3154fccddc947abc709da8f67cf55b2da4ae3e8b066f915a6756f1e",
"T3B1_en_test_basic.py::test_device_id_same": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
"T3B1_en_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -18888,6 +18898,7 @@
"T3B1_es_test_autolock.py::test_autolock_ignores_getaddress": "82b4dec6590924697c489660cff1c9e7642b9ba2964be9ff53fbaa5d13a3374a",
"T3B1_es_test_autolock.py::test_autolock_ignores_initialize": "82b4dec6590924697c489660cff1c9e7642b9ba2964be9ff53fbaa5d13a3374a",
"T3B1_es_test_basic.py::test_capabilities": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
+"T3B1_es_test_basic.py::test_desync_v1": "4a716dded7dc2e69d8e4dc19c0449ba0e0801796054d6be1ea920663ef8d5ee4",
"T3B1_es_test_basic.py::test_device_id_different": "148240900c1720b77495b447e55dab512f2d1b6e21592cab725abea71983cbc8",
"T3B1_es_test_basic.py::test_device_id_same": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
"T3B1_es_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -20610,6 +20621,7 @@
"T3B1_fr_test_autolock.py::test_autolock_ignores_getaddress": "5a72f6d653fba8b2a702df3f33cf5c54c9a7fb9418199da4ade98e0340d6773f",
"T3B1_fr_test_autolock.py::test_autolock_ignores_initialize": "5a72f6d653fba8b2a702df3f33cf5c54c9a7fb9418199da4ade98e0340d6773f",
"T3B1_fr_test_basic.py::test_capabilities": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
+"T3B1_fr_test_basic.py::test_desync_v1": "32bb40a9f1da9ea304c5f45e2296466bc1a167f7e01b417f1fe72ce0252d21ff",
"T3B1_fr_test_basic.py::test_device_id_different": "97d18cab2fcb4c3cf4d18be19ee1d56c546f6ca64866f849ead428d573bab745",
"T3B1_fr_test_basic.py::test_device_id_same": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
"T3B1_fr_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -22332,6 +22344,7 @@
"T3B1_pt_test_autolock.py::test_autolock_ignores_getaddress": "e6e4b5c54a9a53f1bbdc1e99f39befc03b92c2bfccffc09141bf9c8152313954",
"T3B1_pt_test_autolock.py::test_autolock_ignores_initialize": "e6e4b5c54a9a53f1bbdc1e99f39befc03b92c2bfccffc09141bf9c8152313954",
"T3B1_pt_test_basic.py::test_capabilities": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
+"T3B1_pt_test_basic.py::test_desync_v1": "b4294b00e4820c4881ac1a28dd0100fe3fb8e7d4bcfa1c0a19bb1222265b78e1",
"T3B1_pt_test_basic.py::test_device_id_different": "1982fd7656e42167812661ad0e14149a924992b3a43465bd2344c1c03f39d51f",
"T3B1_pt_test_basic.py::test_device_id_same": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
"T3B1_pt_test_basic.py::test_not_initialized": "f4521a6e1979e44a1050c326098f98ae88a3a255461919644cb74f6f28369971",
@@ -24451,6 +24464,7 @@
"T3T1_cs_test_autolock.py::test_autolock_ignores_getaddress": "35b620f09556547e15f4e97ac397298aecac150ff0e9f4d6ba2cd631346280a9",
"T3T1_cs_test_autolock.py::test_autolock_ignores_initialize": "35b620f09556547e15f4e97ac397298aecac150ff0e9f4d6ba2cd631346280a9",
"T3T1_cs_test_basic.py::test_capabilities": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
+"T3T1_cs_test_basic.py::test_desync_v1": "5f146c293a662d3399e67543e2d23e4f3e44d51c224dfec7618492a8f353eb8d",
"T3T1_cs_test_basic.py::test_device_id_different": "aea11540ee9775b3c33686125f9f7895942144d5af8dcc18ab14124626f506d2",
"T3T1_cs_test_basic.py::test_device_id_same": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
"T3T1_cs_test_basic.py::test_not_initialized": "13fa002861e42e18dbb21ae2376a25cb3738fb4d596814f0dede8a2eb0d36556",
@@ -26206,6 +26220,7 @@
"T3T1_de_test_autolock.py::test_autolock_ignores_getaddress": "15fe089dbee01dd6ee299ab8acd40a489c8f150d0596f61712c5167825f59f5e",
"T3T1_de_test_autolock.py::test_autolock_ignores_initialize": "15fe089dbee01dd6ee299ab8acd40a489c8f150d0596f61712c5167825f59f5e",
"T3T1_de_test_basic.py::test_capabilities": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
+"T3T1_de_test_basic.py::test_desync_v1": "27efd552f24818bcc602dc66afbfa672e5e13dfb40f978b07f08864ca05e2e09",
"T3T1_de_test_basic.py::test_device_id_different": "014feb216b9bf67c9adb34102b3c5f0d4eb7a860abd987926ed0be11c32434c4",
"T3T1_de_test_basic.py::test_device_id_same": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
"T3T1_de_test_basic.py::test_not_initialized": "53e954ddaaebca92f068e0e13fe87d09798cbd59e85714d25f8f5886956ae58e",
@@ -27961,6 +27976,7 @@
"T3T1_en_test_autolock.py::test_autolock_ignores_getaddress": "57037567472e8b5ee33d054c8be4ccf426880e0901087a1e3559f61b2f32c404",
"T3T1_en_test_autolock.py::test_autolock_ignores_initialize": "57037567472e8b5ee33d054c8be4ccf426880e0901087a1e3559f61b2f32c404",
"T3T1_en_test_basic.py::test_capabilities": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
+"T3T1_en_test_basic.py::test_desync_v1": "c41bf25278786dfbfde53afdec14c62e05b5af91f89f27b1fe960c54659f4d1a",
"T3T1_en_test_basic.py::test_device_id_different": "1783c5833422138acd30cfdc0912b3a601d020ce30c4506150a78047f84a9cbc",
"T3T1_en_test_basic.py::test_device_id_same": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
"T3T1_en_test_basic.py::test_not_initialized": "4bc037c13dd19f23a176243dfd29921cd51ce9e4155faa6346540a4663233318",
@@ -29716,6 +29732,7 @@
"T3T1_es_test_autolock.py::test_autolock_ignores_getaddress": "78f008fc4c0cb2026647132dcbb3a98e1acafad464b9d4835a4ded2cf2a85774",
"T3T1_es_test_autolock.py::test_autolock_ignores_initialize": "78f008fc4c0cb2026647132dcbb3a98e1acafad464b9d4835a4ded2cf2a85774",
"T3T1_es_test_basic.py::test_capabilities": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
+"T3T1_es_test_basic.py::test_desync_v1": "b0ced8e318c942a9e6316c3c688ebf310c37bdb9e656c06a00e5a00a7868aa55",
"T3T1_es_test_basic.py::test_device_id_different": "8c270b4d360635c98dad9a3f94cee69d0f46104bb72085bf24fbb133c861a3e4",
"T3T1_es_test_basic.py::test_device_id_same": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
"T3T1_es_test_basic.py::test_not_initialized": "9bb7023f656f4fcd819bd648e96b4a0ea97bb2f04233ce48c72184f363f68c26",
@@ -31471,6 +31488,7 @@
"T3T1_fr_test_autolock.py::test_autolock_ignores_getaddress": "527a66a4aac242c1f4d8bf037f95e301d1a52790b1358abc974aaa1b134fcc86",
"T3T1_fr_test_autolock.py::test_autolock_ignores_initialize": "527a66a4aac242c1f4d8bf037f95e301d1a52790b1358abc974aaa1b134fcc86",
"T3T1_fr_test_basic.py::test_capabilities": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
+"T3T1_fr_test_basic.py::test_desync_v1": "b3c7298179a3338d7fcc5b84d8454a9717c0c83cd5e5698d8d325a03ee32dded",
"T3T1_fr_test_basic.py::test_device_id_different": "50df84d863bb5233d39ae1f995adbcc9773cbe621974f2a42f079d01205e440e",
"T3T1_fr_test_basic.py::test_device_id_same": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
"T3T1_fr_test_basic.py::test_not_initialized": "67f8a621b6a0468bcc683c0da4278fd8fb644bb29af5b9cee84816691a07e541",
@@ -33226,6 +33244,7 @@
"T3T1_pt_test_autolock.py::test_autolock_ignores_getaddress": "9a1af241f42b79f35eb7aa43590b51114c0f3289e7cab42dda80476e7b9571f7",
"T3T1_pt_test_autolock.py::test_autolock_ignores_initialize": "9a1af241f42b79f35eb7aa43590b51114c0f3289e7cab42dda80476e7b9571f7",
"T3T1_pt_test_basic.py::test_capabilities": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
+"T3T1_pt_test_basic.py::test_desync_v1": "b3552721cc7b6c669223a4390779692dee4efe10f548bc2c578befbe37690849",
"T3T1_pt_test_basic.py::test_device_id_different": "ca1ce10d7c0da45019edf021e5984291a3c0b60487cb4011ac6319ec090077b1",
"T3T1_pt_test_basic.py::test_device_id_same": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
"T3T1_pt_test_basic.py::test_not_initialized": "0931386d561e5a7edb7f28b4933de40d5474de7078ce741efdbd52da7cbb9128",
Why this scored 47/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.