test(core): make sure recovery flow is not restarted on `GetFeatures`
What changed, and why it matters
This commit only adds a new automated test. It checks that asking a Trezor device for its features during a recovery process does not accidentally restart the recovery flow. No actual device code is changed, so this is a test-only addition and does not by itself fix or introduce a security issue.
No action required; treat as a regression test. If investigating a potential bug, review the existing AVOID_RESTARTING_FOR logic in the firmware source separately from this commit.
Security signals we found
Test-only commit with no firmware code changes
New regression test for recovery flow restart behavior on GetFeatures
References AVOID_RESTARTING_FOR behavior in comment
Evidence from the diff
The commit introduces tests/device_tests/reset_recovery/test_recovery_restart.py and updates UI test fixture hashes in tests/ui_tests/fixtures.json. The new test enters recovery mode, cancels the active workflow, advances past the recovery homescreen, then calls GetFeatures (via session.refresh_features()) and asserts that recovery_status stays Recovery and the current layout does not change. The comment references AVOID_RESTARTING_FOR, suggesting the test guards against a known behavior where GetFeatures could restart a workflow. The diff contains no firmware code changes.
Changed components
tests/device_tests/reset_recovery/test_recovery_restart.pytests/ui_tests/fixtures.jsonInspect captured patch +113 / −0
diff --git a/tests/device_tests/reset_recovery/test_recovery_restart.py b/tests/device_tests/reset_recovery/test_recovery_restart.py
new file mode 100644
index 00000000..b0e7dc9a
--- /dev/null
+++ b/tests/device_tests/reset_recovery/test_recovery_restart.py
@@ -0,0 +1,89 @@
+# This file is part of the Trezor project.
+#
+# Copyright (C) SatoshiLabs and contributors
+#
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the License along with this library.
+# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
+
+import pytest
+
+from tests import translations as TR
+from trezorlib import device
+from trezorlib.debuglink import DebugSession as Session
+from trezorlib.debuglink import LayoutType
+from trezorlib.exceptions import Cancelled
+from trezorlib.messages import BackupMethod, Capability, RecoveryStatus
+
+from ...input_flows import RecoveryFlow
+
+
+@pytest.mark.models("core")
+@pytest.mark.setup_client(uninitialized=True)
+def test_recovery_avoid_restart(session: Session, backup_method: BackupMethod):
+
+ debug = session.debug
+
+ def flow():
+ yield from recovery.confirm_recovery()
+ # the device is now in recovery mode
+ expected_br_names = {
+ BackupMethod.Display: ("recovery_word_count", "recovery"),
+ BackupMethod.N4W1: ("backup_read",),
+ }[backup_method]
+ assert (yield).name in expected_br_names
+ # abort current workflow, but remain in recovery
+ session.cancel()
+
+ assert session.refresh_features().recovery_status == RecoveryStatus.Nothing
+
+ with session.test_ctx as client:
+ recovery = RecoveryFlow(client)
+ client.set_input_flow(flow)
+ with pytest.raises(Cancelled):
+ # Recovery flow will be cancelled
+ device.recover(
+ session,
+ backup_method=backup_method,
+ pin_protection=False,
+ )
+
+ # Device shows recovery homescreen
+ assert session.refresh_features().recovery_status == RecoveryStatus.Recovery
+
+ # Interact only via DebugLink
+ homescreen_content = debug.read_layout().text_content()
+ if Capability.N4W1 in session.features.capabilities:
+ # Recovery homescreen = choose backup method:
+ assert TR.backup__type_have in homescreen_content
+ assert TR.backup__type_n4w1 in homescreen_content
+ assert TR.backup__type_wordlist in homescreen_content
+ # Move to the next layout from recovery homescreen
+ buttons = debug.screen_buttons.word_check_words()
+ coords = {
+ BackupMethod.N4W1: buttons[0],
+ BackupMethod.Display: buttons[1],
+ }[backup_method]
+ debug.click(coords)
+ else:
+ # Recovery homescreen = choose # of words
+ assert homescreen_content == TR.recovery__num_of_words
+ # Move to the next layout from recovery homescreen
+ if session.layout_type is LayoutType.Caesar:
+ debug.press_right()
+ debug.input("20")
+
+ new_content = debug.read_layout().text_content()
+ assert new_content != homescreen_content
+
+ # send GetFeatures - current layout should stay (due to AVOID_RESTARTING_FOR)
+ assert session.refresh_features().recovery_status == RecoveryStatus.Recovery
+ assert new_content == debug.read_layout().text_content()
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 5c1f9960..3bfd83ab 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2566,6 +2566,7 @@
"T2T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
"T2T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "da8c4272fe8b1dda4cc0a3be192b4b03d6dcce9a6452a812819ea0e1b79d29b7",
"T2T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "3eec6c1210e22f3c74cc696e3dc509fd5aa6681ff68708911f4475dca9e3aeef",
+"T2T1_cs_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "831a7a9b55bb23dee89049c7d21aa7c63e1621e821d55d29368e051c898eb721",
"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "8a02dab39144a2a23e6e3ca51ae929e021cbf8f3b72fd15f9fa3b7de3a5fa385",
"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "69857139444c9970f3ec98279d42c22e2c4583cd99570d9ea6f5f3b1be3041c9",
"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "e126d47873d87aa2378592295e4a9d862fc66d250329e3ccdf3f46d666361de5",
@@ -4378,6 +4379,7 @@
"T2T1_de_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
"T2T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "77602d7bb1dfb4e7bfdd606f449bb6bfef48079f1c63c42a7397ecc59b4220b9",
"T2T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "058c01e019a8b753a6c9cf94ad90dde3bcd1bb4658f3675a530e43dcff364847",
+"T2T1_de_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "b6e19501929c3456dd05542fe98c3c6acb974fc06778bc8c8457a9fdde43c639",
"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "b1ffb392c473a1936f2fcf670cbda978229907e061d56c38065de414e6e6cffc",
"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "231d3f134af7b6da3edcd4c2551c257aaf06c69a6f75129151f523b88519dc40",
"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "c82137585c23d3314dc467406c82b79e8146fb8a12bfbb6509f7408daa6fde4c",
@@ -6190,6 +6192,7 @@
"T2T1_en_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
"T2T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "53b50dd4e1e29b08197eb819ba5397eceed32582c49fe0c664b92567d4b5fce1",
"T2T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "b0408eb65c4e7522d340106f3981666d11f8cd3eb71399f006ad1d9fae8de6aa",
+"T2T1_en_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "fba1531a2bb00d9e5e9fff140f7d4badec25827608c6283aaa4e7d8b03463274",
"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "ed772776c132da5f790ad61855e81c50be61e33050e138114bd555b69f69c48f",
"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "839fd1ea0efbf4a176595cc2136985100ae0f0d96f132e4e3368150886b9e8c4",
"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "30232858914f61131980eed9adc155dce8a1c9012914fe13d60a313b0060828d",
@@ -8020,6 +8023,7 @@
"T2T1_es_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
"T2T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "91b0304655ed4f2da74c2b85cedf2ad78301ee4ad4e1c664a6e49c5a679f2817",
"T2T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "2fc2dd899c5ea583a3cb9ef86b2b5fed4911776dd8220bb8664c159732797b8a",
+"T2T1_es_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "96ef06e42be298f500b739c991699d238588ac787d804f76b8fe02c34cf6a2dc",
"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "d32b3804f48cd1dfaa069e43760d3537560fa435034330e0fba25b99982f68c5",
"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "d1df4611d0fc9460fe607fa43329ce62190fd7a73892379d2f590601d9f5dd67",
"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "ba1a1e7a6e3c0ba282ae82d6cf1a7e0c85489d33eda83cd2e5e798c849852c41",
@@ -9832,6 +9836,7 @@
"T2T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
"T2T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "b073bc5b9b656092e75a8e414a17f42396e5b6b4c749105222e51c9c017a17d0",
"T2T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "907a0a744ed898ad162a0cbbf0bf3e2423ab9db39e819f70217f80a7144ae0b5",
+"T2T1_fr_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "f1429547197973921b17ce26c324e821d6f0d78036569408a6bfa2ed729d2093",
"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "1054644c3a1e3ccb6099c74940a9f6fd7cb208aa31cd6f0508c21df430225bf8",
"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "7e705109a07aaf8bfbedd3f3d6856ca2c6ba64830d073e18054524e3a021b8b4",
"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "106ed04e1495d27af1cb74ec7bd11e9e4a56ab75c984965cd29f3f8d337e943b",
@@ -11644,6 +11649,7 @@
"T2T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
"T2T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "4a06bd399d8cf85312b86f7e4263fc0e5e605461700e1b14c9d3a1b6f9c8f58e",
"T2T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "01e504fb494845d90330fa332f78ccbe9d75798ee4173258965bc5747d0fbfc3",
+"T2T1_pt_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "f651f374c4b83f3a409938dc7b48d8890654710425f3281193a975f33aeabd64",
"T2T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "e1d8c9e49718dfe6dda190e841c8377f0f5eff2df9d6765fec6046ccbaadb004",
"T2T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "8f7a61c6a47f4a01eb31ef4032875e64052d72f143d137afa4dc8e1f65d9e12f",
"T2T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "2f6b5cfa1c791e095afd7e475bc5ac5db68aaa166680f4f6cce3e7dc37000050",
@@ -13699,6 +13705,7 @@
"T3B1_cs_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
"T3B1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "0bd59eda802cc30caaa393e1a2523d07c0ef4411e6c3763b4907fd528d80eff6",
"T3B1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "084240d0818247183354aab1590840d4615202d54daa64a668c63210013aa941",
+"T3B1_cs_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "056f31a271e20f3ce290a9d8512f046fb79b21bcde91715989ebe5c267a83f9f",
"T3B1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "871d6412651e565eecfbf0557c8c5a83376a87a17c19796225260b25bbdb82d0",
"T3B1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "237730d93717ad1d4e0486a9ef9347ce80cda0f19dca59ee77bb51c6780b4319",
"T3B1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "11e72cbda506cb4c5a910ee397edd10b0cddce3a358842bb5690eec56be2103d",
@@ -15449,6 +15456,7 @@
"T3B1_de_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
"T3B1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "536a68021c50cb29763cee336a5dfb7eeec7ca94c9f7db53171161fa70622892",
"T3B1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "dcdbd862ef78c3321827c3604e5b278d4bca6ffb94a4e2a607e85e32cb8925cd",
+"T3B1_de_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "61520ee502e53958f8ded49aa5e2fb0dd47ef4691f2e59b0be2ccf552737767f",
"T3B1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "aca4ccc8da0681165439e066ff485f27629c7929d0b4c6b31ffb07040ce1f80f",
"T3B1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "c1e5c605a8ebdba0f14f80f5e363ad632b814bf1fa88dddaed61d55841bcdf3f",
"T3B1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "d985e3828488a9f5517a8a8610731ec17e528ca137d4fc59f9e96426eab462ab",
@@ -17199,6 +17207,7 @@
"T3B1_en_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
"T3B1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "5da472531de722e4d0ba563233f5b8c547ab264f2d285c8fb74ac13beadc7347",
"T3B1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "4a16c626455b50143cab852bb243e4a84046dfe87163253587be84a7d4f9b333",
+"T3B1_en_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "d7bf79798d8353e413b664e66b08deee090cedbc43216a5eaf19bffac7d291cf",
"T3B1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "b8929544cfcca872fb691bbdce50e79338dbf791cd74345a5d9ffbc4ac6c1239",
"T3B1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "090d2d59560e0c4b64cae1cbe19bc74b019e5eba595eb6f94c6c854522e76bee",
"T3B1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "8642b696809736941998f81aac12230c6cf50df22d93db1137f8dc7d03857565",
@@ -18949,6 +18958,7 @@
"T3B1_es_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
"T3B1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "fd022d66107f81e460143fc025892e0d36e6518dba65bdf62aab087f1d2c84e4",
"T3B1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "4253dbeb257dd9c3ac2d1aae42cbe8ab10bfd75ecf5a800a490e92f09dea279d",
+"T3B1_es_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "2f1d8d216cea8fefa31d0794b4bf6aef46a26330f05e47aff2db9e022923d97f",
"T3B1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "ac3528af8f6ad6d7294888458b30d8f1d8cb58daaa0f4d4ae074926cbc055eaa",
"T3B1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "ec49561cab83a5acbfe2d124ebd4367481da2b74dbaa96f6390a39141d91c4d3",
"T3B1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "be5a7c96a82dda21147cd1ed32f0bedf05abc592e39b263fe514455fe5dedef3",
@@ -20699,6 +20709,7 @@
"T3B1_fr_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
"T3B1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "22c78f44160d84fc052be26928ee1f01ddbebfbf5eec07b88058e4bbc060bfa6",
"T3B1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "011eccf180824329e852fd1f37807723eeb17a9127518d63ce337ac08e8a33e9",
+"T3B1_fr_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "62e2a9c58b880bae0b354be4314532c21c2eb2f392a8692d41a4bd94700557ce",
"T3B1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "def901a2e2e6a50da85aa01330dd4cf37e53c164a825403edc7699ad7eacdcb7",
"T3B1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "9e6b207a03b24e7c545ae853ccbb21584588b4f1f1560bf25c29b37ff7aeca71",
"T3B1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "adccd9553733200a4efba17a8d233478203e1240839bd7f9fa47d27b7dd1c569",
@@ -22449,6 +22460,7 @@
"T3B1_pt_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
"T3B1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "a264edd5bb08ff51d8e3608e7ea3a398290c2fd0e651cf2373ea73c5b75d6f75",
"T3B1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "5ea681e51336b86d1fd0a0990efbf9a441995880354bea23ac5610b0d1e66b99",
+"T3B1_pt_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "b5865d2cc95b87d3c3a2735f4d75f58ca392d2edc3a465883718def2200990d6",
"T3B1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "c854f3757e898120ca5ae35b1f80904aca1cf6790a9046a8e88d94f7590cd6aa",
"T3B1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "c61bfffd6ec47b05aea4db2ed91689b4d5df4e61dc6a779450c1be183e5cd40a",
"T3B1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "cc383e0607390b62d8ad35f21e31d3a40733486d885ccc5a007b6b87c5170bd9",
@@ -24593,6 +24605,7 @@
"T3T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
"T3T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "838eced22423634af8a0fd444f60e5eb878a87fe4c8529adc879f3e9e7129381",
"T3T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "c424d9e8407013b2e421df16a3901fa4fe9f223450393b5f9b835308bc660d47",
+"T3T1_cs_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "2e74c28167dce220647ea88aad1bdbeda1615181f32f36a8c0abc40b687212b9",
"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "c614746cd3b4520cb30182930370c3a804ffec300803a1b391a756a48aabd187",
"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "a962450b77a3bf2805d1bdb170ba511c916664fb226cea1efcc32fe004b78b56",
"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "3b7024bbdcfce0d19d12cc7f5fff1cd750fc7b1314385b3d4bfc9bece054d0db",
@@ -26379,6 +26392,7 @@
"T3T1_de_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
"T3T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "d388841a9c068f35448adee55540adaa1102f6a887d794ea18306d064031593c",
"T3T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "dd6b37c1d46d30c9fee199ae73c5cdd0d7784e8236cd98dd89fa34cd9265dd11",
+"T3T1_de_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "7863540f3b2dc5bea14a47a0def3f835ce8e82f200ad95d7266e140730f1651b",
"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "0f11e4ebc9fe6ff915df6f2ac4156eeb54c0653ce4cbb492294d19931c8f34f6",
"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "2b85d055a4b589a7dd3c3a18f1e699ac8ba1eb2be1acc03bef4ccc7467d8c43a",
"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "51b55a57fa6097fa5181cfadd0420a3470160dddaf056022b8802cad398baf57",
@@ -28165,6 +28179,7 @@
"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "6bd59450cf3f1569331591134fca78dd3abd8b0e7c6b9ebd5ca398ec2fe45028",
"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "124e46cde641520d4b1e595e683009b9ded1f4869f95bfb655075d5cc710c04b",
+"T3T1_en_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "a7074c55362088290a80e69b52573d9173024f4131e685cbdfceb69053a7cd70",
"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "0d253ab09047895c9bdb9a7158a411e5126105ebf98d229bb1acb6005285d2d4",
"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "08020e6a8d7a12ab977e79f1ef5041e03e9ad05d5763fa8476bc7b4f3fc4cd78",
"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "1ad8a603a0efc13c177f0fc17ea4b432772e3acf731cb6c491fb7a75fe1387c6",
@@ -29951,6 +29966,7 @@
"T3T1_es_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
"T3T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "7a4e3adc680d3efd0c7a31c9bd1cea48045c3c15df3ada5f6f79bb5d1b994e5e",
"T3T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "a0decd03a70be7910a6fc05c7dd2cc6f09860e55609191c2d91435d586553e7e",
+"T3T1_es_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "593aba0d37fcceec513df6445bb815abd76b67c40f2bcb3df41e955540c32e4b",
"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "9d75739e87b406cefcfd030f23298579c8f06fe5c00edac401bb44d4dbcc1af5",
"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "1484a1f37d163e70a4a3011eb4a7f7296e9ffcb15a91123c9ce6a27220f32bc2",
"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "26574d6dab19b8083135dab42612137d7ec76739e410360cd6731cee49a2f552",
@@ -31737,6 +31753,7 @@
"T3T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
"T3T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "1e8ef6c6f53182557cf8a89e796778292f90ffbf3fbc1b69a2f3048ea3e763f9",
"T3T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "80d33b646f3cca82f8ac36b6d1b4ccec059f7ccfd5384a23d03fe4502a6931b9",
+"T3T1_fr_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "71daf52cabb2df4a2d7bc9ee341b78d22db40a8bea5e8d3b0564e0f9d2a40ab5",
"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "1ed271eb245f9ee0cb012a84a1b7ebaa99f4f27a676ffb8d89b0060247ebc5ab",
"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "2ba1401b4595758fbe2c9654b13c1304497afca0612e3446531d70ee40ffeab0",
"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "2815a06cac1a820eaa47b02268460593d207163da00244f5282fb05969b05866",
@@ -33523,6 +33540,7 @@
"T3T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
"T3T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "716f6ac8a0e13d284d5fdd40fb07094b0c34b58ac2a997955cf93d6849909546",
"T3T1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "0df20432472ee4538dc4fb45142705896003f0dc3553beb7f457909cf08e465d",
+"T3T1_pt_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "f0629f8fa73a16ea0a00424cd30b398062947416aab25a4d9fa1690a3e6acdb7",
"T3T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "70281946717164b2ee56f27e7ccf61baa5291438c8b4c3ab9383fe86a1957d40",
"T3T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "da15f1ea5d8505e775b28d21cbeeb09e4e8b89aef6532c404d167c35d9b56856",
"T3T1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "a1c0c2649b13754b4c247cbf7f884cd522ad27b9daaad224e9bbafb4ad3afc23",
@@ -35961,6 +35979,7 @@
"T3W1_cs_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "25675032fe6b1628161f0cd2398edae2feace6873ae31c44ce545c91f7ced796",
"T3W1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "ba9d51275970e506a49700762fa57d5dbac01aeb7ddf6ff0451ced1901ab49ee",
"T3W1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "ad1935a889f437eadb6f6f6ae06dc18756d4797999af96d9ce24e02e8e819d62",
+"T3W1_cs_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "9398b8505d91e8d02e192f025d83f6a920efc264ba5a7f78684f61bf0492c38a",
"T3W1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "6caa45f64412090ec73ed764b6a17d6192b0a27415fd48b1b7183aba5b03686f",
"T3W1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "4ca22386e4018dd55903c83277638b8ed5e17d39051c765aec019cc1fadab1f2",
"T3W1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "4221d7e83d07c7bcf2755909ccec688cf4e4d474f42372eb03b55c1b94a303fa",
@@ -37760,6 +37779,7 @@
"T3W1_de_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "aaafdc361a1d1494db1b142427ede204b978fbde090811b1ff02e54df49414f9",
"T3W1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "e46ced9e92fc49715d2b0f3646f4e88e200b60f2897dd318ccca24b2c439c52c",
"T3W1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "9750889b02dcb88254c4355744500e2ae2b21d55e8bb4ffc153a93dfcb400e24",
+"T3W1_de_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "fcf1539c7becc8cefd151a8d3b4bd88ea378d37b3956ec23bf4b0b8a9384b40d",
"T3W1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "c235f2bd13aca3abdb98148f29e22a685b47da97d59ae3fee0c5727e4babd1f8",
"T3W1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "69c01586b94c772879543d4189bc81f348f2dc3f1275ae2d9b7c19dd829fd651",
"T3W1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "40b1f0710105d505196f0a4832de8009828948120b155ea614e407e4d864148e",
@@ -39559,6 +39579,7 @@
"T3W1_en_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "778dbcfb96e575c652b06902ef2842f6cc261dd3d457cc66b8b6c9338e82e1fb",
"T3W1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "355908aca4476362f6025d1f097319b785f9a124ecfffcfe182697ce3a953b18",
"T3W1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "0747de2d3e2544a9833b31be4a4101a84ce35952c1358aa574afffddf466ad98",
+"T3W1_en_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "8a3ee02648c1e4ddef752271ee6fd00f4096fe2f15c41ef88d4f4863af2a7975",
"T3W1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "1dacf8889d35935c1b46874117fe5ec7d6cdb57745453a084cf7834de4c7a078",
"T3W1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "1cf99c4966faee0474e3f4d96f27baa417e02df846d006be16a0a5e1add78a3f",
"T3W1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "8cf1ff60dffebf591c33d1b0489fd038c9f19ca679a24b70da51e9f96ea42acc",
@@ -41358,6 +41379,7 @@
"T3W1_es_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "ea59c9d24216e9bad1b1fdd99068e34dbc5beeea54b06c34219d37720f17a470",
"T3W1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "d9e842f9fe48f5bd0f473728042cd320c8f6d45553ffa7f30e3a26311711d780",
"T3W1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "07e8c4d6271e17f0dc11600c8af6a23938b539cdb922f6f358cfca58514773f2",
+"T3W1_es_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "1acdb749dc64e131fa470cef6692ba18180f1c9facf3fa3782bda5c22e1f653e",
"T3W1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "0b0761c93142f5457333f93cbfbc174fa70545858524fba95970826173d5a9f1",
"T3W1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "2fdd6c6d8500515af7b12c852a1d51709e0a1285ec90b6614c327704b3847c39",
"T3W1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "7e91e21f55592e4a714dd74b14059b724604f09aa416c0855cb52a07e91e8ea9",
@@ -43157,6 +43179,7 @@
"T3W1_fr_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "1cceb37657549d7798a606fb01cffd95cdd3ab59cda2e25228d11f1bb906cd31",
"T3W1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "14ad957ca02131ae925f9cc0e693db40ab4a0b786689a0ae2e98099e25a48225",
"T3W1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "3a75dc8ea0cec8fe09d47a822d7b4dbe740a03526c7be473cd2be069f7cea0f9",
+"T3W1_fr_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "4e6093208ff8762b8521cefaa47184596487a4a37e72fdf23e61578eb8bd9be9",
"T3W1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "92b64d3a3a23806e48dd8516f83dcf5eef357e36be10792bec5b870b4df70d64",
"T3W1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "bb3fa2baf0ef539ba176816d6df05d7d747dec632c8a87a6fe8afb0360792cfd",
"T3W1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "84e5dd15e592b5828adbc54a6b27462f164cdbcbf9ab0a6e4453ad2d26796038",
@@ -44961,6 +44984,7 @@
"T3W1_pt_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "67695a9de4ea2860aa20568a42ba0dd34e1fdf983ff4cf32347e6dd81e79c6e3",
"T3W1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "1d41f7d25469a05d322cfb2a5f0d4bf4c14dc7defc5dd6f6c97513b295145cee",
"T3W1_pt_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "d081f8e962655f32bc805a979bea22cb1229b43a62aaf99e7fad3c2363a9275f",
+"T3W1_pt_reset_recovery-test_recovery_restart.py::test_recovery_avoid_restart[Display]": "6a2c1c674ea4b9c56f6c76b67b07867bfe733fa4f3289a385933e45577142ce7",
"T3W1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "bf05dceca4c1e84b2a936c6306bbdf1da7cd0901a8483d1d7c0029234eaaf3a7",
"T3W1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "6b0c39c357402c3d202415d5b5598a6467cee6379741bf8a3e47df12eae8f2b1",
"T3W1_pt_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "baf7e679e59aa8f914902c63e67a489cee2e17020055179ee78fef87e6d2efd2",
Why this scored 11/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.