feat(core/eckhart): bluetooth switching in device menu
What changed, and why it matters
This commit adds a user-facing Bluetooth on/off toggle in the device menu for the Trezor Safe 7 (T3W1). It stores the user's preference and only starts Bluetooth at boot if it was previously enabled. There is no direct evidence of a security vulnerability in the change, but it touches Bluetooth state management and storage, which are security-relevant areas.
Review as normal feature code. Verify that disabling Bluetooth actually prevents the radio from advertising/connecting and that the storage flag cannot be manipulated to bypass pairing authorization. No immediate security action required based solely on this diff.
Security signals we found
New Bluetooth state persisted to device storage
Bluetooth radio startup made conditional on stored preference
UI flow added to enable Bluetooth on demand before pairing
No input validation, buffer handling, or cryptographic code changed
No vendor disclosure of security relevance in commit or changelog
Evidence from the diff
The patch introduces a new ‘Bluetooth’ toggle in the Eckhart layout device menu, a new DeviceMenuResult::ToggleBluetooth message, storage of the Bluetooth enabled/disabled state in device storage (_DISABLE_BLUETOOTH), and conditional BLE startup at boot based on that stored flag. It also adds a warning when attempting to pair a new device while Bluetooth is disabled, offering to turn it on. The change is feature work rather than a bugfix; no unsafe parsing, memory corruption, or authentication bypass is visible in the diff.
Changed components
core/src/apps/homescreen/device_menu.pycore/src/ble.pycore/src/storage/device.pycore/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rscore/embed/rust/src/ui/layout_eckhart/component_msg_obj.rscore/embed/rust/src/ui/api/firmware_micropython.rsInspect captured patch +236 / −145
diff --git a/core/.changelog.d/5911.added b/core/.changelog.d/5911.added
new file mode 100644
index 00000000..7432e1a5
--- /dev/null
+++ b/core/.changelog.d/5911.added
@@ -0,0 +1 @@
+[T3W1] Added support for Bluetooth toggling in the Device menu.
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index f8a53bd1..c0f5ac09 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -63,6 +63,7 @@ static void _librust_qstrs(void) {
MP_QSTR_TR;
MP_QSTR_TRANSITIONING;
MP_QSTR_TX_PACKET_LEN;
+ MP_QSTR_ToggleBluetooth;
MP_QSTR_ToggleHaptics;
MP_QSTR_ToggleLed;
MP_QSTR_TranslationsHeader;
@@ -195,6 +196,7 @@ static void _librust_qstrs(void) {
MP_QSTR_ble__limit_reached;
MP_QSTR_ble__mac_address;
MP_QSTR_ble__manage_paired;
+ MP_QSTR_ble__must_be_enabled;
MP_QSTR_ble__pair_new;
MP_QSTR_ble__pair_title;
MP_QSTR_ble__pairing_match;
@@ -204,6 +206,7 @@ static void _librust_qstrs(void) {
MP_QSTR_ble__unpair_title;
MP_QSTR_ble__version;
MP_QSTR_ble__waiting_for_host;
+ MP_QSTR_ble_enabled;
MP_QSTR_ble_event;
MP_QSTR_bootscreen;
MP_QSTR_br_code;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index cf665ab4..19652e83 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1554,6 +1554,7 @@ pub enum TranslatedString {
ble__apps_connected = 1164, // "Apps connected"
sn__action = 1165, // {"Bolt": "", "Caesar": "", "Delizia": "", "Eckhart": "Allow connected host to get serial number of your Trezor Safe 7?"}
sn__title = 1166, // {"Bolt": "", "Caesar": "", "Delizia": "", "Eckhart": "Serial number"}
+ ble__must_be_enabled = 1167, // "The Bluetooth must be turned on to pair with a new device."
}
impl TranslatedString {
@@ -3556,6 +3557,7 @@ impl TranslatedString {
(Self::sn__title, ""),
#[cfg(feature = "layout_eckhart")]
(Self::sn__title, "Serial number"),
+ (Self::ble__must_be_enabled, "The Bluetooth must be turned on to pair with a new device."),
];
#[cfg(feature = "micropython")]
@@ -3649,6 +3651,7 @@ impl TranslatedString {
(Qstr::MP_QSTR_ble__limit_reached, Self::ble__limit_reached),
(Qstr::MP_QSTR_ble__mac_address, Self::ble__mac_address),
(Qstr::MP_QSTR_ble__manage_paired, Self::ble__manage_paired),
+ (Qstr::MP_QSTR_ble__must_be_enabled, Self::ble__must_be_enabled),
(Qstr::MP_QSTR_ble__pair_new, Self::ble__pair_new),
(Qstr::MP_QSTR_ble__pair_title, Self::ble__pair_title),
(Qstr::MP_QSTR_ble__pairing_match, Self::ble__pairing_match),
diff --git a/core/embed/rust/src/ui/api/firmware_micropython.rs b/core/embed/rust/src/ui/api/firmware_micropython.rs
index e3b59103..24827a0b 100644
--- a/core/embed/rust/src/ui/api/firmware_micropython.rs
+++ b/core/embed/rust/src/ui/api/firmware_micropython.rs
@@ -942,6 +942,7 @@ extern "C" fn new_show_device_menu(n_args: usize, args: *const Obj, kwargs: *mut
.try_into_option()?;
let backup_failed: bool = kwargs.get(Qstr::MP_QSTR_backup_failed)?.try_into()?;
let backup_needed: bool = kwargs.get(Qstr::MP_QSTR_backup_needed)?.try_into()?;
+ let ble_enabled: bool = kwargs.get(Qstr::MP_QSTR_ble_enabled)?.try_into()?;
let paired_obj: Obj = kwargs.get(Qstr::MP_QSTR_paired_devices)?;
let mut paired_devices: heapless::Vec<
(TString<'static>, Option<[TString; 2]>),
@@ -985,6 +986,7 @@ extern "C" fn new_show_device_menu(n_args: usize, args: *const Obj, kwargs: *mut
init_submenu_idx,
backup_failed,
backup_needed,
+ ble_enabled,
paired_devices,
connected_idx,
pin_enabled,
@@ -1960,6 +1962,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// init_submenu_idx: int | None,
/// backup_failed: bool,
/// backup_needed: bool,
+ /// ble_enabled: bool,
/// paired_devices: Iterable[tuple[str, tuple[str, str] | None]],
/// connected_idx: int | None,
/// pin_enabled: bool | None,
@@ -2188,6 +2191,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// PairDevice: ClassVar[DeviceMenuResult]
/// UnpairDevice: ClassVar[DeviceMenuResult]
/// UnpairAllDevices: ClassVar[DeviceMenuResult]
+ /// ToggleBluetooth: ClassVar[DeviceMenuResult]
/// SetOrChangePin: ClassVar[DeviceMenuResult]
/// RemovePin: ClassVar[DeviceMenuResult]
/// SetAutoLockBattery: ClassVar[DeviceMenuResult]
diff --git a/core/embed/rust/src/ui/layout/device_menu_result.rs b/core/embed/rust/src/ui/layout/device_menu_result.rs
index 29f2df94..bac63b18 100644
--- a/core/embed/rust/src/ui/layout/device_menu_result.rs
+++ b/core/embed/rust/src/ui/layout/device_menu_result.rs
@@ -15,6 +15,9 @@ pub static PAIR_DEVICE: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_B
pub static DISCONNECT_DEVICE: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
pub static UNPAIR_DEVICE: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
pub static UNPAIR_ALL_DEVICES: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
+// Settings
+pub static TOGGLE_BLUETOOTH: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
+
// Security menu
pub static SET_OR_CHANGE_PIN: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
pub static REMOVE_PIN: SimpleTypeObj = SimpleTypeObj::new(&DEVICE_MENU_RESULT_BASE_TYPE);
@@ -46,6 +49,7 @@ static DEVICE_MENU_RESULT_TYPE: Type = obj_type! {
Qstr::MP_QSTR_DisconnectDevice => DISCONNECT_DEVICE.as_obj(),
Qstr::MP_QSTR_UnpairDevice => UNPAIR_DEVICE.as_obj(),
Qstr::MP_QSTR_UnpairAllDevices => UNPAIR_ALL_DEVICES.as_obj(),
+ Qstr::MP_QSTR_ToggleBluetooth => TOGGLE_BLUETOOTH.as_obj(),
Qstr::MP_QSTR_SetOrChangePin => SET_OR_CHANGE_PIN.as_obj(),
Qstr::MP_QSTR_RemovePin => REMOVE_PIN.as_obj(),
Qstr::MP_QSTR_SetAutoLockBattery => SET_AUTO_LOCK_BATTERY.as_obj(),
diff --git a/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs b/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
index 768ca034..34c22bb0 100644
--- a/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
@@ -934,6 +934,7 @@ impl FirmwareUI for UIBolt {
_init_submenu_idx: Option<u8>,
_backup_failed: bool,
_backup_needed: bool,
+ _ble_enabled: bool,
_paired_devices: heapless::Vec<
(TString<'static>, Option<[TString<'static>; 2]>),
MAX_PAIRED_DEVICES,
diff --git a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
index 400382eb..85953296 100644
--- a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
@@ -1131,6 +1131,7 @@ impl FirmwareUI for UICaesar {
_init_submenu_idx: Option<u8>,
_backup_failed: bool,
_backup_needed: bool,
+ _ble_enabled: bool,
_paired_devices: heapless::Vec<
(TString<'static>, Option<[TString<'static>; 2]>),
MAX_PAIRED_DEVICES,
diff --git a/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs b/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
index 169554d9..39c1eb2e 100644
--- a/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
@@ -1016,6 +1016,7 @@ impl FirmwareUI for UIDelizia {
_init_submenu_idx: Option<u8>,
_backup_failed: bool,
_backup_needed: bool,
+ _ble_enabled: bool,
_paired_devices: heapless::Vec<
(TString<'static>, Option<[TString<'static>; 2]>),
MAX_PAIRED_DEVICES,
diff --git a/core/embed/rust/src/ui/layout_eckhart/component_msg_obj.rs b/core/embed/rust/src/ui/layout_eckhart/component_msg_obj.rs
index 29952c4d..715e5609 100644
--- a/core/embed/rust/src/ui/layout_eckhart/component_msg_obj.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/component_msg_obj.rs
@@ -166,6 +166,9 @@ impl ComponentMsgObj for DeviceMenuScreen {
Ok(new_tuple(&[UNPAIR_DEVICE.as_obj(), index.into()])?)
}
DeviceMenuMsg::UnpairAllDevices => Ok(UNPAIR_ALL_DEVICES.as_obj()),
+ // Settings
+ DeviceMenuMsg::ToggleBluetooth => Ok(TOGGLE_BLUETOOTH.as_obj()),
+
// Security menu
DeviceMenuMsg::SetOrChangePin => Ok(SET_OR_CHANGE_PIN.as_obj()),
DeviceMenuMsg::RemovePin => Ok(REMOVE_PIN.as_obj()),
diff --git a/core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs b/core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs
index ab89d13e..65a3874f 100644
--- a/core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs
@@ -120,6 +120,9 @@ pub enum DeviceMenuMsg {
Reboot,
RebootToBootloader,
+ // Settings menu
+ ToggleBluetooth,
+
// Security menu
SetOrChangePin,
RemovePin,
@@ -319,6 +322,7 @@ impl DeviceMenuScreen {
init_submenu_idx: Option<u8>,
backup_failed: bool,
backup_needed: bool,
+ ble_enabled: bool,
paired_devices: Vec<(TString<'static>, Option<[TString<'static>; 2]>), MAX_PAIRED_DEVICES>,
connected_idx: Option<u8>,
pin_enabled: Option<bool>,
@@ -354,7 +358,7 @@ impl DeviceMenuScreen {
);
}
screen.register_device_menu(device_name, brightness, haptics_enabled, led_enabled);
- screen.register_settings_menu();
+ screen.register_settings_menu(ble_enabled);
screen.register_power_menu();
let is_connected = connected_idx.is_some_and(|idx| usize::from(idx) < paired_devices.len());
@@ -477,9 +481,21 @@ impl DeviceMenuScreen {
self.register_submenu(DeviceMenuId::PairAndConnect, Submenu::new(items));
}
- fn register_settings_menu(&mut self) {
+ fn register_settings_menu(&mut self, ble_enabled: bool) {
let mut items: Vec<MenuItem, MEDIUM_MENU_ITEMS> = Vec::new();
+ let ble_subtext = match ble_enabled {
+ true => Some((
+ TString::from_translation(TR::words__on),
+ Some(&theme::TEXT_MENU_ITEM_SUBTITLE_GREEN),
+ )),
+ _ => Some((TString::from_translation(TR::words__off), None)),
+ };
+ items.add(
+ MenuItem::return_msg(TR::words__bluetooth.into(), DeviceMenuMsg::ToggleBluetooth)
+ .with_subtext(ble_subtext),
+ );
+
if self.has_submenu(DeviceMenuId::Security) {
items.add(MenuItem::go_to_submenu(
TR::words__security.into(),
diff --git a/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs b/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
index 07addaaa..0f822bdf 100644
--- a/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
@@ -1204,6 +1204,7 @@ impl FirmwareUI for UIEckhart {
init_submenu_idx: Option<u8>,
backup_failed: bool,
backup_needed: bool,
+ ble_enabled: bool,
paired_devices: heapless::Vec<
(TString<'static>, Option<[TString<'static>; 2]>),
MAX_PAIRED_DEVICES,
@@ -1223,6 +1224,7 @@ impl FirmwareUI for UIEckhart {
init_submenu_idx,
backup_failed,
backup_needed,
+ ble_enabled,
paired_devices,
connected_idx,
pin_enabled,
diff --git a/core/embed/rust/src/ui/ui_firmware.rs b/core/embed/rust/src/ui/ui_firmware.rs
index d27b5d2e..4a88a753 100644
--- a/core/embed/rust/src/ui/ui_firmware.rs
+++ b/core/embed/rust/src/ui/ui_firmware.rs
@@ -361,6 +361,7 @@ pub trait FirmwareUI {
init_submenu_idx: Option<u8>,
backup_failed: bool,
backup_needed: bool,
+ ble_enabled: bool,
paired_devices: heapless::Vec<
(TString<'static>, Option<[TString<'static>; 2]>),
MAX_PAIRED_DEVICES,
diff --git a/core/mocks/generated/trezorui_api.pyi b/core/mocks/generated/trezorui_api.pyi
index 3278769b..82f8aa44 100644
--- a/core/mocks/generated/trezorui_api.pyi
+++ b/core/mocks/generated/trezorui_api.pyi
@@ -627,6 +627,7 @@ def show_device_menu(
init_submenu_idx: int | None,
backup_failed: bool,
backup_needed: bool,
+ ble_enabled: bool,
paired_devices: Iterable[tuple[str, tuple[str, str] | None]],
connected_idx: int | None,
pin_enabled: bool | None,
@@ -877,6 +878,7 @@ class DeviceMenuResult:
PairDevice: ClassVar[DeviceMenuResult]
UnpairDevice: ClassVar[DeviceMenuResult]
UnpairAllDevices: ClassVar[DeviceMenuResult]
+ ToggleBluetooth: ClassVar[DeviceMenuResult]
SetOrChangePin: ClassVar[DeviceMenuResult]
RemovePin: ClassVar[DeviceMenuResult]
SetAutoLockBattery: ClassVar[DeviceMenuResult]
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index 40a2665f..3a1f33d2 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -91,6 +91,7 @@ class TR:
ble__limit_reached: str = "Limit of paired devices reached"
ble__mac_address: str = "MAC address"
ble__manage_paired: str = "Manage paired devices"
+ ble__must_be_enabled: str = "The Bluetooth must be turned on to pair with a new device."
ble__pair_new: str = "Pair new device"
ble__pair_title: str = "Pair & connect"
ble__pairing_match: str = "Pairing code match?"
diff --git a/core/src/apps/homescreen/device_menu.py b/core/src/apps/homescreen/device_menu.py
index 2133a7f2..ea2cbe2b 100644
--- a/core/src/apps/homescreen/device_menu.py
+++ b/core/src/apps/homescreen/device_menu.py
@@ -64,6 +64,11 @@ def get_auto_lock_delay() -> tuple[str, str] | None:
return (autolock_delay_batt_fmg, autolock_delay_usb_fmt)
+def ble_enable(enable: bool) -> None:
+ ble.set_enabled(enable)
+ storage_device.set_ble(enable)
+
+
async def handle_device_menu() -> None:
assert utils.USE_THP and utils.USE_BLE
@@ -90,9 +95,9 @@ async def handle_device_menu() -> None:
bonds = ble.get_bonds()
if __debug__:
log.debug(__name__, "bonds: %s", bonds)
-
+ ble_enabled = ble.get_enabled()
connected_addr = ble.connected_addr()
- connected_idx = _find_device(connected_addr, bonds)
+ connected_idx = _find_device(connected_addr, bonds) if ble_enabled else None
if __debug__:
log.debug(__name__, "connected: %s (%s)", connected_addr, connected_idx)
hostname_map = {e.mac_addr: e for e in paired_cache.load()}
@@ -115,6 +120,7 @@ async def handle_device_menu() -> None:
init_submenu_idx=init_submenu_idx,
backup_failed=backup_failed,
backup_needed=backup_needed,
+ ble_enabled=ble_enabled,
paired_devices=paired_devices,
connected_idx=connected_idx,
pin_enabled=config.has_pin() if is_initialized else None,
@@ -185,6 +191,25 @@ async def handle_device_menu() -> None:
from apps.management.ble.pair_new_device import pair_new_device
+ init_submenu_idx = SubmenuId.PAIR_AND_CONNECT
+ # Show warning if Bluetooth is not enabled
+ if not ble_enabled:
+ try:
+ await interact(
+ trezorui_api.show_warning(
+ title=TR.words__important,
+ description=TR.ble__must_be_enabled,
+ button=TR.buttons__turn_on,
+ allow_cancel=True,
+ danger=False,
+ ),
+ "enable_bluetooth",
+ )
+ except ActionCancelled:
+ continue
+ else:
+ ble_enable(True)
+
try:
if ble.is_connected():
utils.notify_send(utils.NOTIFY_DISCONNECT)
@@ -201,8 +226,6 @@ async def handle_device_menu() -> None:
)
except ActionCancelled:
pass
- finally:
- init_submenu_idx = SubmenuId.PAIR_AND_CONNECT
elif menu_result is DeviceMenuResult.UnpairAllDevices:
from trezor.messages import BleUnpair
@@ -233,6 +256,11 @@ async def handle_device_menu() -> None:
init_submenu_idx = index
else:
raise RuntimeError(f"Unknown menu {result_type}, {index}")
+ # Settings
+ elif menu_result is DeviceMenuResult.ToggleBluetooth:
+ init_submenu_idx = SubmenuId.SETTINGS
+ # Toggle Bluetooth
+ ble_enable(not ble_enabled)
# Security settings
elif menu_result is DeviceMenuResult.SetOrChangePin and is_initialized:
from trezor.messages import ChangePin
diff --git a/core/src/ble.py b/core/src/ble.py
index d9a0c7e2..cd493da1 100644
--- a/core/src/ble.py
+++ b/core/src/ble.py
@@ -8,16 +8,19 @@ import trezorble as ble
from trezor import log, utils
try:
- ble.start_comm()
+ enable = storage.device.get_ble()
+ ble.set_enabled(enable)
+ if enable:
+ ble.start_comm()
- start_ms = utime.ticks_ms()
+ start_ms = utime.ticks_ms()
- while utime.ticks_diff(utime.ticks_ms(), start_ms) < 5000:
- if utils.EMULATOR or ble.is_started():
- break
+ while utime.ticks_diff(utime.ticks_ms(), start_ms) < 5000:
+ if utils.EMULATOR or ble.is_started():
+ break
- # allow connections from bonded peers if any
- if ble.peer_count() > 0:
- ble.start_advertising(True, storage.device.get_label())
+ # allow connections from bonded peers if any
+ if ble.peer_count() > 0:
+ ble.start_advertising(True, storage.device.get_label())
except Exception as e:
log.exception(__name__, e)
diff --git a/core/src/storage/device.py b/core/src/storage/device.py
index 4943c4f0..edeb5ad3 100644
--- a/core/src/storage/device.py
+++ b/core/src/storage/device.py
@@ -48,6 +48,7 @@ if utils.USE_THP:
_THP_PAIRED_CACHE = const(0x22) # bytes
if utils.USE_POWER_MANAGER:
_AUTOLOCK_DELAY_BATT_MS = const(0x23) # int
+_DISABLE_BLUETOOTH = const(0x24) # bool (0x01 or empty)
SAFETY_CHECK_LEVEL_STRICT : Literal[0] = const(0)
@@ -441,6 +442,20 @@ def get_haptic_feedback() -> bool:
return not common.get_bool(_NAMESPACE, _DISABLE_HAPTIC_FEEDBACK, True)
+def set_ble(enable: bool) -> None:
+ """
+ Enable or disable Bluetooth.
+ """
+ common.set_bool(_NAMESPACE, _DISABLE_BLUETOOTH, not enable, True)
+
+
+def get_ble() -> bool:
+ """
+ Get Bluetooth enable, default to true if not set.
+ """
+ return not common.get_bool(_NAMESPACE, _DISABLE_BLUETOOTH, True)
+
+
def set_rgb_led(enable: bool) -> None:
"""
Enable or disable RGB LED.
diff --git a/core/translations/en.json b/core/translations/en.json
index 5dd7811a..fce38c2a 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -123,6 +123,7 @@
"ble__limit_reached": "Limit of paired devices reached",
"ble__mac_address": "MAC address",
"ble__manage_paired": "Manage paired devices",
+ "ble__must_be_enabled": "The Bluetooth must be turned on to pair with a new device.",
"ble__pair_new": "Pair new device",
"ble__pair_title": "Pair & connect",
"ble__pairing_match": "Pairing code match?",
diff --git a/core/translations/order.json b/core/translations/order.json
index d8381bda..716d6171 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1165,5 +1165,6 @@
"1163": "ble__waiting_for_host",
"1164": "ble__apps_connected",
"1165": "sn__action",
- "1166": "sn__title"
+ "1166": "sn__title",
+ "1167": "ble__must_be_enabled"
}
diff --git a/core/translations/signatures.json b/core/translations/signatures.json
index 64ff1a6a..f7c57f2c 100644
--- a/core/translations/signatures.json
+++ b/core/translations/signatures.json
@@ -1,8 +1,8 @@
{
"current": {
- "merkle_root": "50b3a9dfb3ec3cd23ae8168f9cbbc16f89d6158b5cf7bf9a531f8aa701d25ee6",
- "datetime": "2025-10-02T17:43:35.279801+00:00",
- "commit": "e71482d2b4e535701f949b441fbab03439d85743"
+ "merkle_root": "50ba0cc18622c3c5aa8dcc5957ae87089ffb166690d91d6c3d8afdcdfa6f30dc",
+ "datetime": "2025-10-03T18:06:56.227560+00:00",
+ "commit": "625ffadfb87b854043a0422eefd88647c709fc52"
},
"history": [
{
diff --git a/tests/click_tests/device_menu/common.py b/tests/click_tests/device_menu/common.py
index 98a210c5..da77c88d 100644
--- a/tests/click_tests/device_menu/common.py
+++ b/tests/click_tests/device_menu/common.py
@@ -157,7 +157,7 @@ class Menu(Enum):
return [TR.ble__pair_new, TR.ble__forget_all]
def settings_content():
- content = []
+ content = [TR.words__bluetooth]
if initialized:
content.append(TR.words__security)
content.append(TR.words__device)
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 86957f62..78e93669 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -28820,36 +28820,36 @@
},
"T3W1": {
"click_tests": {
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "8c1cd2f0d8e0c30746e1a3147269659de2e35195d058b14f21d494fe8bccec00",
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "c5fe0d7b749f28d64d53f0434deeded48a4281fd8bfffd597300fbb0500441c6",
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "5280d2d66d88ef5e024b50949c8223b99861454ba25e6da31ef3633a43b3daba",
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "d0850296a7ce37200f3439f808c095ae472133010d7c0ce312d8d15d3703fc64",
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "736b7300d54cac1bd8a9d3d330d846774a310f050ac941e9a7026ce5070016b0",
-"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "e72e4d229577a8b88532333890f5f5a1804cb035a9a86f5fb99b9a4c43607446",
-"T3W1_cs_device_menu-test_check_backup.py::test_backup_check_cancel": "c74a8cffe3965c505dc2b8022bc5f33bc5923bbca3d22b308777bd2a0f94a6eb",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "406c39f3e7f349c639915b9723dddb308f125c5ba30da1636a84fb8ce7683cb2",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "8233e7d0b29b9acdfbabdd413967614dab50053acdad5a21d5848aa547af436c",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "2392668fc2526ab6d351a9552cae050bdd7e0f3b3ec08f66695da7aa073dd8d0",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "f1f72385de6e1a7d61854552d8708d89fc3d7c49c61a278d4ed59f830710b258",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "16589ef0e47bafd33f67e215a04d6321b3dffd17befcdda763c8b95497ffb4e8",
+"T3W1_cs_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "4a8b5980f3982efcbdaa9bafb68cc488f59d765c0dd06e7b5959ae0f2c009c0b",
+"T3W1_cs_device_menu-test_check_backup.py::test_backup_check_cancel": "c6d6265d7ee7cdc6998bfde8712b401fb73e4851f312c36f36d04d36a5260294",
"T3W1_cs_device_menu-test_check_backup.py::test_backup_needed_fails": "13c0e7145d4e402b32f8b11c87e885beb26da0604eb0b022bce3b43f3bf5e23e",
"T3W1_cs_device_menu-test_check_backup.py::test_no_backup_fails": "d19e7595c0cf0e67ba02f980571b6a2ac492b16326eac379415774139a24d30b",
"T3W1_cs_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_cs_device_menu-test_device_settings.py::test_brightness": "b78e5a7ba202c71acdb7e2f6d96f75e92c63f673fbf39a0c01c22838266ba011",
-"T3W1_cs_device_menu-test_device_settings.py::test_device_settings_uninitialized": "b9c0fb8e4188e451146f4654ddaf860f92fdf418a188d8e2c7bf121707ddf292",
+"T3W1_cs_device_menu-test_device_settings.py::test_brightness": "3d39446beaa58a7da4d6b18edf8e70fa08396f12be0c123e24ec55270c58f99a",
+"T3W1_cs_device_menu-test_device_settings.py::test_device_settings_uninitialized": "bbfa56211e4a3b78483f6858241c21eba7f5cd1a679dcf11f30ef42f0ef434b6",
"T3W1_cs_device_menu-test_device_settings.py::test_toggle_haptic": "c24521e569c08e3605b164212c876f8ac57c5eef6cca6f2ca53a635a883ebc4b",
-"T3W1_cs_device_menu-test_device_settings.py::test_toggle_led": "b50282ff9649bf62c2618802eb993cf2b3d1ee3b91673cefe539fbff9f426dec",
-"T3W1_cs_device_menu-test_label.py::test_change_label": "d8cc7d9adeef3f90e8773ece084d16dfd253361800ef8ef1f3c452e4065768c7",
-"T3W1_cs_device_menu-test_label.py::test_label_cancel": "671fff7ec8ffeb4e815ca87a0d25f0856731f125c12503ef2c89488cd13fe0c1",
-"T3W1_cs_device_menu-test_label.py::test_label_click_same_button_many_times": "601422dd38201205378b3c46d1fb45293172c1f8ca898f9c55737b94cced8e93",
-"T3W1_cs_device_menu-test_label.py::test_label_cycle_through_last_character": "3ef47f8dffa6d35a397efdb17ef67825b56357384065a18c2c26e7ada48b5fc9",
-"T3W1_cs_device_menu-test_label.py::test_label_empty": "7d23f1e06b26341793f6ea925e6a8d364287251cb1979392f2627e6d96fab564",
-"T3W1_cs_device_menu-test_label.py::test_label_loop_all_categories": "eb2189a7f922b783d1a7363cd136d973689fe15340cc2f4251992fab872282db",
-"T3W1_cs_device_menu-test_label.py::test_label_over_32_chars": "0232d4ac948109aca876429c724014a9da805f700d01b57656e1af251136b72a",
+"T3W1_cs_device_menu-test_device_settings.py::test_toggle_led": "c76333b6790fe10c3c60b047da237ac18282e76579ecfa44839e236f81884348",
+"T3W1_cs_device_menu-test_label.py::test_change_label": "1f5b41d8d2ed13465165279c8906c0981ab0535271c3f076b5153e131a10e9bd",
+"T3W1_cs_device_menu-test_label.py::test_label_cancel": "28dd33adf4e72719d612ff51b913b527cf4063b3338d3f598f86de27092dfb8e",
+"T3W1_cs_device_menu-test_label.py::test_label_click_same_button_many_times": "d990d8699016be4befcb0e7ea4687162677dd3a8b81aeef7a9433c3442433ceb",
+"T3W1_cs_device_menu-test_label.py::test_label_cycle_through_last_character": "7bef52669897ac1d0309a9219915cf26752c6891902e1b40ac2ac5d8c4295182",
+"T3W1_cs_device_menu-test_label.py::test_label_empty": "8b8c28e703b181f184c10ccfa93e66e9d83ebf70f07c3f23ac420d7e15c6f679",
+"T3W1_cs_device_menu-test_label.py::test_label_loop_all_categories": "ab01ad7f1294040038a9c831cf5812bce67c8a555dc3144dc4684ed689affedb",
+"T3W1_cs_device_menu-test_label.py::test_label_over_32_chars": "14bd229902adbbc5a60f2bb6d5e6fb7fc67d1511c7e068adfa68e39c769888d3",
"T3W1_cs_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_cs_device_menu-test_notifications.py::test_backup_failed": "0c3cddc525775de76af0957cd9212d7d411d3b00fafb22cfdf0f12c86f869598",
"T3W1_cs_device_menu-test_notifications.py::test_backup_needed": "3e9219faf28dc045827113d9a0ebec8e42437bc39cb3e437cbdb6b3992e89538",
"T3W1_cs_device_menu-test_notifications.py::test_pin_not_set": "0811c43580023d7c557c214a10b98fbeff9b9825ed8f9aaf02d2f4457c66b0f3",
"T3W1_cs_device_menu-test_notifications.py::test_seedless": "f47325f31b7cff66ad1ed9a2d98659b7161306440ae40e503ceac2407f8ffa92",
-"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_initialized": "4b2d275434eac0db6d563129a5608f713131c556cb092996618be9d9bb0839ad",
-"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "20b549eaa6281bbe3f846ddbe79a814cf28cf0bfb11187410efd7ba41cd66f76",
-"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "044bee0a60815ed431a6df5dff29a16aca8e341600dec7c874f02ef9ca27615d",
-"T3W1_cs_device_menu-test_wipe.py::test_wipe": "24009dc7bfb5e37fef83919ac1ee3180905bf39891c76ac18efe9e95c6b68dfb",
+"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_initialized": "64725060693bcbbe577371f3d36dbe5d3301410dfa08748672777ee95b6629a0",
+"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "bc6c21f398423cb7eb7abc0b5ceba298ce6cf0b75017012f0c47d43098b6e773",
+"T3W1_cs_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "0599789a63673b017399934e68c65dd75c0f986de6aac4a0b946ca498bddfca0",
+"T3W1_cs_device_menu-test_wipe.py::test_wipe": "e02f58a48305214fdf9edf45a38c2cbb3e5bb7b903929bec023903edd0f9cd22",
"T3W1_cs_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "eea8b7f8b5097ea3a9f8a7caa05c838a6794d2de9010df91ec37dcb5efaf2492",
"T3W1_cs_test_autolock.py::test_autolock_does_not_interrupt_signing": "98ccc6cb23c7f29b3fb76977e22aa274e5de8de0ebd3f52c58966520f4ad61de",
"T3W1_cs_test_autolock.py::test_autolock_interrupts_passphrase": "ce2c8c2c95610e4ddd8c6733225b9fb562896179080e58957d430fb4f51a9ee4",
@@ -28910,36 +28910,36 @@
"T3W1_cs_test_tutorial_eckhart.py::test_tutorial_menu_close": "158dcdaf56948d0509ae95b05da867488f806359d2cc9185942dbc8dd05c4d66",
"T3W1_cs_test_tutorial_eckhart.py::test_tutorial_menu_tropic": "ac66810d67dfd0a482bd428a4395795692a37c11d5ded87dba48cbd1adc81cd4",
"T3W1_cs_test_tutorial_eckhart.py::test_tutorial_restart": "42f76200b4b5a7947b7228380011d25fa2fcff5ed0af6659dc527fe05a6dfe6f",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "e65edaa261bb497c4db8f5b0fcfa733c955fc2a913e02ee1d60ef966bdf5a204",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "6b3481c3ba37682b32619d6427990be319d1b2d210afec50c449a4f1e4b9a902",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "3bffcad9d9dda07a25bd3bc6e0d8aee14ae476be71647ee7d5ec5cc8a400bc78",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "a097c88f5646f60c71ef0aeaf30bd9eb11bf76c3a9bed8ff6a7df23e457df10c",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "a5e1ac535b5fd18ac222417f3e67cb404c2975c9a77c906b0f79a650a5d0e85f",
-"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "42898fc84240fe7341bf32ab70bf3f9c3dece40773c4cc2c72b3afb9a4fd66c3",
-"T3W1_de_device_menu-test_check_backup.py::test_backup_check_cancel": "12d8ef3d8968866888f9192fa330a3a69e8c1316805e07885439248264d16044",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "125ed380ba100bc710b5def2c3b30c51869587e54153f14ed048377ba69a019f",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "e16a5727bc524ead2c410cfb63352fd20bf1231ab2cbbf670dfa8e048563f54f",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "918cce11b5a6890cae342a867f28ca48302aa06ab3d8c27e0f58f33fb6b315ba",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "b4c84ad5f4b2afba8c0fdcc5a36a2d3f0ae8dcd300174e3302f054fdef7c2fb1",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "e99dcc61187fb8253af64135d55dc9689a64e9bc0e04c5fe02f73640176eeaa5",
+"T3W1_de_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "afbcc506e8527fc6ef549c600deca755e4ccc35d4fa14a36e37c1708fb982987",
+"T3W1_de_device_menu-test_check_backup.py::test_backup_check_cancel": "cfa8cdb8a1755faf22b17367eb607bd5a50f11a2b471fddcfec8286b38197944",
"T3W1_de_device_menu-test_check_backup.py::test_backup_needed_fails": "c94696a52bb66f5a1c5ec8694749b6c5798319df1807a59fd939d67007e97a1a",
"T3W1_de_device_menu-test_check_backup.py::test_no_backup_fails": "32f7ece1a421303cf214be5af0d36255a4ae85750129df37a4862c1e540b00e5",
"T3W1_de_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_de_device_menu-test_device_settings.py::test_brightness": "9ddf6d03eb92cbac09875f843dabe22b1cc5a54d33117f2f3ee3bae0984401ed",
-"T3W1_de_device_menu-test_device_settings.py::test_device_settings_uninitialized": "dd21f98cf9942fd89a1aaa767561c9b670835b034224fcf7798fd8e9d61fc718",
+"T3W1_de_device_menu-test_device_settings.py::test_brightness": "d8387012e7c08547859b45405bd3a91392c1d2a452724f1af5040857281bfda8",
+"T3W1_de_device_menu-test_device_settings.py::test_device_settings_uninitialized": "87ceb7382279132b6f62597e3a18bddf1397d52417dbd85e0adfa99043db295d",
"T3W1_de_device_menu-test_device_settings.py::test_toggle_haptic": "98735f888f827501b25c78c6a737c1983a800c620f709c65b1d95f6c8c9a2b90",
-"T3W1_de_device_menu-test_device_settings.py::test_toggle_led": "4071c6653dd5c7134ced77db9692de57a95bfef207269c66a10da1cb3ae0170e",
-"T3W1_de_device_menu-test_label.py::test_change_label": "fd54a6768d33e9b5c94b11bd702991ec6efbd9397f707f7d7b84fb55c21ef2a6",
-"T3W1_de_device_menu-test_label.py::test_label_cancel": "d996f3a5b5b2c6cf4cb06e92da579815d76b46d686843d83e365a1041038adac",
-"T3W1_de_device_menu-test_label.py::test_label_click_same_button_many_times": "c2707edea479d0cdf67f8d2a880daa5bffa91145b35584b3be38f6e47734ea64",
-"T3W1_de_device_menu-test_label.py::test_label_cycle_through_last_character": "9037074514813d432155d29438ae6976f4176d93fc5fa9b253f64b134d815e48",
-"T3W1_de_device_menu-test_label.py::test_label_empty": "15ae50b370a5f93a83eab41e368ed2b910882dbf081119f146f6d9416a6269ff",
-"T3W1_de_device_menu-test_label.py::test_label_loop_all_categories": "f63b5e43b2972b4394b9aaa3fb03a8327da9455e8708cc8457152bc29daf4f6e",
-"T3W1_de_device_menu-test_label.py::test_label_over_32_chars": "a15b839fccf0bbfcb6e5042d65bf69d4ce3a8dcadf815e7233359ce5c211125e",
+"T3W1_de_device_menu-test_device_settings.py::test_toggle_led": "274cf63c67d00d404438e39696d477731b6b56d510d0d48810db7a463fb3ce14",
+"T3W1_de_device_menu-test_label.py::test_change_label": "75c783a6b975931587db3eb63a4530a54353a990b913fe87caafa99c4ddd9b55",
+"T3W1_de_device_menu-test_label.py::test_label_cancel": "d83ca63809fbf543a7aa92065c970ed940ae531f4232bbb0c273427d9f03440b",
+"T3W1_de_device_menu-test_label.py::test_label_click_same_button_many_times": "6a3a84fad26df0c1714ff6d2a1189e3411efc341f16d1486c5d6e25c90236b50",
+"T3W1_de_device_menu-test_label.py::test_label_cycle_through_last_character": "43f88bdf586123209ae0c06e1bef6c4fbd2adf3df0b242292c3729e9bfebc721",
+"T3W1_de_device_menu-test_label.py::test_label_empty": "26b39485897d4b073f816e0756273eac67bf3cbfaa14eb0d08d78a9b0dde102a",
+"T3W1_de_device_menu-test_label.py::test_label_loop_all_categories": "e4d99483f4433687ccbf8750d917ec9830d355037fdd79f9b78f95a085fbe5b6",
+"T3W1_de_device_menu-test_label.py::test_label_over_32_chars": "bb6e8a1766c6d23d0913bcc7562179812bf88d1ebd78115e79241da49e012d0b",
"T3W1_de_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_de_device_menu-test_notifications.py::test_backup_failed": "6f6fa8c2ed3c1266af1f94e784f75bcf0af60b22305363f4e1415fd25ff4e694",
"T3W1_de_device_menu-test_notifications.py::test_backup_needed": "ecb0fe08d4aa61ebfb7c91da6eb271744f2d50e9dd3e71552a75703417c17d61",
"T3W1_de_device_menu-test_notifications.py::test_pin_not_set": "3d0075746175052f12ef3b62d9328d9d3fc2a6ba129b7dcecf24c3290490dba1",
"T3W1_de_device_menu-test_notifications.py::test_seedless": "a5f1836c258f20a18e2be5dffc5583f684df48c7688a734f3fca89c01d613996",
-"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_initialized": "0c0b57240a91ce1254cdc328977ad0eea4b7ac1b646ed687fb13c548701cfcd1",
-"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "7535ae36627906d6c562b23daf476adb55b6a705379849e45a43b28386f3eaee",
-"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "8e8087b6db71321d853fe58403f409c131c6276b2bdaec44265039c6d50740ca",
-"T3W1_de_device_menu-test_wipe.py::test_wipe": "a3955a188bda02377236b1b7e083b6e66d92e28e4aef43b153baaf037fdabf30",
+"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_initialized": "0d45c6e2e7c7b1f11dbf17381a39bc1e9d1d04dd162f591b1ada7f6e871cc50d",
+"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "1b23eead0921890a4020371a75632a555177eea8c1ba2343141b75c723e06c25",
+"T3W1_de_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "0839769a66e0c7888a78c263ae2d413652be782d92c8f67f594897fdd3a4569f",
+"T3W1_de_device_menu-test_wipe.py::test_wipe": "68723a320f670b4defb0007f282291171799d0deedd4232bd60ca3cb813886b4",
"T3W1_de_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "4e7039853f8840b953a1003575b84b1b207017df9eff5ec1bf70ebec37f97be5",
"T3W1_de_test_autolock.py::test_autolock_does_not_interrupt_signing": "2b9a53a874d2fbd1632d2147ea690658ac589268d6fbe1e1dbc3168d8f593a7a",
"T3W1_de_test_autolock.py::test_autolock_interrupts_passphrase": "985ae0cb82525e634741bb72815aaf2e06d7684ece8c05942de8ba82f654c0fb",
@@ -29000,36 +29000,36 @@
"T3W1_de_test_tutorial_eckhart.py::test_tutorial_menu_close": "db0e133f55ae1f5a85f85d5788766f1710742e63b352cfc5815de56e284e6976",
"T3W1_de_test_tutorial_eckhart.py::test_tutorial_menu_tropic": "415d3ec828f98d912750b572b8b4970cdfca0f69d5f911bd6d81d862dc953c87",
"T3W1_de_test_tutorial_eckhart.py::test_tutorial_restart": "a09e42527ef61960aed20e7483bd3d8ca99f880060877da54891b219679459c5",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "e57521f8c5f46dd1b586898a7f0e8022c41f4f854d77d00311f3196d0215047d",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "540f7e19a72600ee0214b3660a7622f56307247f400baca33740b4b171f0f7c2",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "6431968f841f5716e9ddf8ff379811058dc466651d833148898e1017e3adcc42",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "00101f34359421370f958189a193d96fa1c7046dc1968ec1e367719418811d37",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "dd8a49a6700fb1c2d683bb78ec57943383968868c738b9420525b287160d709b",
-"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "f3c1d3837bf7d817d6e8c4519b0a79b4fb17406a1aee726dc88ef9b48657a092",
-"T3W1_en_device_menu-test_check_backup.py::test_backup_check_cancel": "f7960ae38f737d57df017337c0e0a684124becd3d9de046aee3990902a997ceb",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "673ba54c8963e6e3d28ee6ba883a3b6af21a7bb952c640e8b64ee1d5d3b48594",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "35e8fec8fc0389b47e11799db1bef5ad2353cf885e4c6f2a4aec8e8990aa549c",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "72c32b907a02a0d9b58c551ff007072b4dd7af78b84c23352b1a10eb3b19d776",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "075382d9736a5ebe5e82424c30ef6fbad463ba7fbcb574e97b2ba61811027cd2",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "6560dee8da5fe2a15e508c6c6308607a6e2dcce57312a245461f19b799657101",
+"T3W1_en_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "e0d86bf564ffaca9533a60149099cecfe769b20e11282339838e220a394ffebd",
+"T3W1_en_device_menu-test_check_backup.py::test_backup_check_cancel": "2b1cada2e778f5c901db01ee226b0a2e74c797f6e16767c75238e2fadd12e58d",
"T3W1_en_device_menu-test_check_backup.py::test_backup_needed_fails": "fb3120f1899ceab19654335ed391516b9030737762120bae07161f497deefcb0",
"T3W1_en_device_menu-test_check_backup.py::test_no_backup_fails": "395556180048c5471d78770521fc625d75062b1774b3a64f0e0bb758faae556a",
"T3W1_en_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_en_device_menu-test_device_settings.py::test_brightness": "9a84b7043406ce654c4f0a0629cb589b9b2b865607fcfe28d734d97f7ffcf5af",
-"T3W1_en_device_menu-test_device_settings.py::test_device_settings_uninitialized": "3d886e672ca3e23fdca97a6d824c2a51fc6bfcf24d87330fb97b1c4a835d6a74",
+"T3W1_en_device_menu-test_device_settings.py::test_brightness": "3b2fb0d46f9aa78303b97f6d210b1703dbc4b2d81997edeb2d344950545e6499",
+"T3W1_en_device_menu-test_device_settings.py::test_device_settings_uninitialized": "b23055ec62303de77a904dc269625e6decf50f72654bf87a6aec443a33e6ccb4",
"T3W1_en_device_menu-test_device_settings.py::test_toggle_haptic": "931d9afceb0ba1e4faae891775819277242d889644d5c0c5863fc8c9fcf859b1",
-"T3W1_en_device_menu-test_device_settings.py::test_toggle_led": "db4c41e6b16224a315a35cb21807d7e371b2eeade2b390e2d9a62c5281ec03d3",
-"T3W1_en_device_menu-test_label.py::test_change_label": "0510f921b16a3284953c36900240033fb8ac4e6792b17ece23131810e621a1c7",
-"T3W1_en_device_menu-test_label.py::test_label_cancel": "8014cab2c4b2ff1c9a4e84edb64a8d1c3f14bb89d8ae800f919de0dc2bed7aa1",
-"T3W1_en_device_menu-test_label.py::test_label_click_same_button_many_times": "0ee97864e333d3c0e256fcc65526453ef46cb934d3671b6a2225bca90b3b0956",
-"T3W1_en_device_menu-test_label.py::test_label_cycle_through_last_character": "2755f64ec6ef7fced8955ed0b6b9bfb0aedf8c9cdb4a6ea04479ad3ef77a5493",
-"T3W1_en_device_menu-test_label.py::test_label_empty": "53a27891f5d331b9804e05b56a811d97c3e860516e143a3289c515a2d8d48af5",
-"T3W1_en_device_menu-test_label.py::test_label_loop_all_categories": "90e8636706a599bea41581a307d5f582c826e3c2791f8711caa6439704ce44c5",
-"T3W1_en_device_menu-test_label.py::test_label_over_32_chars": "4147cc80a6f206022cd4840b591d04c203bd211d1c618e5847d148ff2eaa8470",
+"T3W1_en_device_menu-test_device_settings.py::test_toggle_led": "79a425067d9b5d2adbbe1ce88beaa5e49a725745a2d554e68e59fc7a479f6b01",
+"T3W1_en_device_menu-test_label.py::test_change_label": "1385371c6d09270f143514a71d232a2e59ab9be4ba6c54e55ef196858ee8c987",
+"T3W1_en_device_menu-test_label.py::test_label_cancel": "7a3628b0533fa86df9959c24dae094e2ca635a16c293d7b91ca61637b93e4c72",
+"T3W1_en_device_menu-test_label.py::test_label_click_same_button_many_times": "db7b2c522a559e33619857ba04dee68881708287c26a403a676f7aba496e486c",
+"T3W1_en_device_menu-test_label.py::test_label_cycle_through_last_character": "46a1a39b52379805ce9318ba2df935f413b09a8b910a3ca243057c781a8a2a90",
+"T3W1_en_device_menu-test_label.py::test_label_empty": "2a748ecb9a5c0f49105edd691c3c74ee46e6a1dad0be31c82851cc10c99ab427",
+"T3W1_en_device_menu-test_label.py::test_label_loop_all_categories": "1b906fab78b60c7baca331eb733992de1c9c09c68af8b9223231791f2ad156bd",
+"T3W1_en_device_menu-test_label.py::test_label_over_32_chars": "135d6f02a8727682fd04c048c250e4b642b037de8827c9bd1bc4e78d66d44448",
"T3W1_en_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_en_device_menu-test_notifications.py::test_backup_failed": "a77d0bae8298c3f97342005b19d3eba18dd76d2871fff91d7e096f08189b807e",
"T3W1_en_device_menu-test_notifications.py::test_backup_needed": "f55c9030025edec1c3b08bfd444d2c77c232a7f7c22fda6f340bd602ef853a73",
"T3W1_en_device_menu-test_notifications.py::test_pin_not_set": "a9c8a15dc28878101f85a94333e908006fe2e3184a62dbe911f0d390a4f70182",
"T3W1_en_device_menu-test_notifications.py::test_seedless": "30782c88c129824c038c14d999b63b6c99f486333e1fa1dc4af8e76f9d42c3ec",
-"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_initialized": "f42f29d7c23667386bfe088d5cf77b493056efd1373e3df85e20cd2d4fada08d",
-"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "36e329cb7df28b5d341b9994c80744697bdcb09fb2c255e4a1ec179b701ca39d",
-"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "9707a2a06586e89ce609550b97401f45d59a36c7c8c1b06090edf90969d19208",
-"T3W1_en_device_menu-test_wipe.py::test_wipe": "6d61755d7374c71c7e9e85bb6501dafbf3e297da73cee19d9bf1acfab5873f7b",
+"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_initialized": "9faffde1d600fbfaeec4a050c200abb8fe657be7dc6b6abcb47a3fb181cba8a1",
+"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "8db314448adfce04958bf61d970ece995403c72b410d9c0e651084af8a239837",
+"T3W1_en_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "a7e3d2f7ea4286114dc6f0006f24a05360fdc7bee217e123d67520b02c32e986",
+"T3W1_en_device_menu-test_wipe.py::test_wipe": "9eddb4f194e008e55e1bed4562750411800a93913233352f33f9d5dbc1043579",
"T3W1_en_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "060a9daf0f5d8ceed76e223755059f9fd7728a64818644964cdd0631979d05ee",
"T3W1_en_test_autolock.py::test_autolock_does_not_interrupt_signing": "2ee6ce1fdd78d5869690d1a3b9f1aad441e8d17a69efa6f064f0070f5686aedb",
"T3W1_en_test_autolock.py::test_autolock_interrupts_passphrase": "5f60b98ad8a3919e0dc65dd7415e0c5bdbc5461500ab8070185272a55e15a6d7",
@@ -29090,36 +29090,36 @@
"T3W1_en_test_tutorial_eckhart.py::test_tutorial_menu_close": "99cb0bed4bfdf7b67142b093c9b827a8fbf103c511efab534846f3fafbc0a362",
"T3W1_en_test_tutorial_eckhart.py::test_tutorial_menu_tropic": "a6c907391f99f5517ffe0bad2f4234aef4e3bfc5fedb5152f151ca291d90c1cb",
"T3W1_en_test_tutorial_eckhart.py::test_tutorial_restart": "5b3eff72e15fb7221cb6c6b16a9ebacd53a502c788a941bc38b5f352934aec41",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "233ba1903cce403373be77cc9ac35294126c3f2eb026365c2e18ec0b2158136c",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "1515d45c36c405d6be337892ac9ff9850e881366adcc9668f54cd3c3a84de014",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "bc4e77eb539c6cbba76ed66792d034bae3e3cf60fdfd88bb1bed21a789ffc839",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "fa71bed01d78c01b061840fefdea55f11d1c6b25f024d41120548ef8066fa0b8",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "79206e092ec118258aa55fc05b02006efb98a7956d83016c97ddedc6382017ff",
-"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "47ebb3e84095473ae2e1fec9658185428ed46d9982840a19cb6eb57e9353103c",
-"T3W1_es_device_menu-test_check_backup.py::test_backup_check_cancel": "0b50aad977376053ccdde0a8cfdffe0dc98f70e4450c4e97d9518ebbdaf4d3e6",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "88046963c1c20013c9782526fc353dbead72614dbfe03db9185dfbecbc044b64",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "8535bae767da1490463e7c6883ad23eba6b3f22d366e0a99bf37b9a63468bb89",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "61a51a060aebe45e6b08670001917c67ee22da70843d90b6a2a7a160c52daada",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "57bfeec20e3b76eff5ec3e4c51c625b0121dab5b409287d540dd3287f8f04f93",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "108a5fa245eb5a16792c0455a7918b822405e77bba4cc519574a41727d106e78",
+"T3W1_es_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "13de3a8bf9a4b5d1adb198b2ba878685c86feaf2696db1d0a40dcefdce920220",
+"T3W1_es_device_menu-test_check_backup.py::test_backup_check_cancel": "b3f6ffadaca8f775511561604baf7f20087bda3befd06cb935033312a0d342a1",
"T3W1_es_device_menu-test_check_backup.py::test_backup_needed_fails": "3bfddf8b7921ff08a6a9f36a1ef82bca928dca2948d71ca6506cca0aaf0d5455",
"T3W1_es_device_menu-test_check_backup.py::test_no_backup_fails": "b793498c5928d31ce35348ef10b92121136c03de9ad435c906ee8091b79aa553",
"T3W1_es_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_es_device_menu-test_device_settings.py::test_brightness": "e4229897dcd3c8d426be1d9ff520c949a366af48d370d428d47f9c7f3e0704b6",
-"T3W1_es_device_menu-test_device_settings.py::test_device_settings_uninitialized": "fadd1e8b5e0f9c8fe070e260313ca99e8fe16a97f74a0baa16ae044fdf066fa4",
+"T3W1_es_device_menu-test_device_settings.py::test_brightness": "d2ee667b471fe03dd61298dec9638ecddc35b19cc2608b9afdea1961e64be2a1",
+"T3W1_es_device_menu-test_device_settings.py::test_device_settings_uninitialized": "3f4d8fabff97fec043224b3756d5895119bc51523938f6d3a328efdefe474428",
"T3W1_es_device_menu-test_device_settings.py::test_toggle_haptic": "56536ae9cd7c4ff8022def4ec3350031d3614064d961f53a2850f2be425af201",
-"T3W1_es_device_menu-test_device_settings.py::test_toggle_led": "41eed582e9df59931f2cc1043f11d839ad62181942df87754525b96e9b462850",
-"T3W1_es_device_menu-test_label.py::test_change_label": "9b5a9496aafd0b27fd8bd853463c02715f07eb6650cfbd8bda14f2088c744660",
-"T3W1_es_device_menu-test_label.py::test_label_cancel": "2504bc794d499a8ef42517e3233f1aacec91a766d2f7d567faae4fd8b0e757f8",
-"T3W1_es_device_menu-test_label.py::test_label_click_same_button_many_times": "050824be168d310494b39df72e78bc6e02d543f795188dc242c5ebcbeb8f4385",
-"T3W1_es_device_menu-test_label.py::test_label_cycle_through_last_character": "e93906c17cdc6872278c228097eeb32085815f35b441790bf4ac4a32f4efd878",
-"T3W1_es_device_menu-test_label.py::test_label_empty": "03a3d82cc1306ad52151856e758b7ea4d5558a143e292cd201e1983106051e3b",
-"T3W1_es_device_menu-test_label.py::test_label_loop_all_categories": "6cd2d93dd66cbfb1191a2d56a539f92dcda159802b1f5976103b47b3a7f907c9",
-"T3W1_es_device_menu-test_label.py::test_label_over_32_chars": "47247c002ed5f5e9e16917b7f68acdceaa5b4f1cd44cdbc694312675d1d68f61",
+"T3W1_es_device_menu-test_device_settings.py::test_toggle_led": "3287ab9943eac4ac1fc23d537078d4d688fcb54006bbc428abfd0378ba95f88c",
+"T3W1_es_device_menu-test_label.py::test_change_label": "9d5471464c576da57f679a0520e7c50b56510260efdb48788ba96b3207c27519",
+"T3W1_es_device_menu-test_label.py::test_label_cancel": "f57b8364eefdf75cfc73f2b412e19db08ba1f95b621e740ab37198eb99caf140",
+"T3W1_es_device_menu-test_label.py::test_label_click_same_button_many_times": "a1889d56b782191ccb7df23b92935bfbceda56cd1fdc6ceca23811a93e2f87bf",
+"T3W1_es_device_menu-test_label.py::test_label_cycle_through_last_character": "6bd494c712310ddc92552deff19af53c6f7b19bc064dd675afdfdd829a35d3d4",
+"T3W1_es_device_menu-test_label.py::test_label_empty": "3131405e61436c6beffecd537d14157d4afff8243578ca1832247c6bffd279b5",
+"T3W1_es_device_menu-test_label.py::test_label_loop_all_categories": "5cf3cb644694270a071f0ec2a0b4b48cc26aff1940b5475a71a11494d606c176",
+"T3W1_es_device_menu-test_label.py::test_label_over_32_chars": "d8d5913022d280580939cb0d2e51715c21464493ed86caeb7c94d2390db8d159",
"T3W1_es_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_es_device_menu-test_notifications.py::test_backup_failed": "badb51ff76c502ceb5897776edcb0786260a036f20d911dca7be0c67d0865530",
"T3W1_es_device_menu-test_notifications.py::test_backup_needed": "6aa38827cb41ae91cd198cc32c55daa19850442faf10587b751ef3f7ffb803bb",
"T3W1_es_device_menu-test_notifications.py::test_pin_not_set": "65c8ece078e93712f8cb54a8d687f22548cbbed8cb703dc86833fbaabf001502",
"T3W1_es_device_menu-test_notifications.py::test_seedless": "bbe2a9d5b69d39d082b3c798a613e150a3ba9ce31e4c3dcff38a4d169f699ce3",
-"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_initialized": "a83398fbd7c5c9c7f96a803cc3a791214c163356c81ce7acdd6f728fc5e8dd52",
-"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "1fcde37866302b59bd8205f8fbf52e530ae828033597f7b9934876cdeb4ba976",
-"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "88741980041f2a4533318a2e8b269d046e4f0bff3a5243f9e6d24f8ee990b1e7",
-"T3W1_es_device_menu-test_wipe.py::test_wipe": "c54730002754153a0e1f93ccfc94762abbb05e5d3507a6e3fe9824d1dd85fb29",
+"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_initialized": "8ee0f3968e2808c6a4274f1a5385b672e5e4ceb508803020620b83e82fe8023e",
+"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "bb61cef39e8dc5d93d2edeb55dc8bca68b80459eb990e8d3b8f65afcc125f7b4",
+"T3W1_es_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "d7d31ba029f8a9575cff8aab8caf5504088e5c7e66c098af6d6fa58d43fd6081",
+"T3W1_es_device_menu-test_wipe.py::test_wipe": "c74a6aff186c453b4aa68937ef5ec25aaca1b1151c3fc263a55f802c6df49216",
"T3W1_es_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "09f47a5867ebf5d878a9b1a0ef4fc9ab88ad418ff0e2fe10b1a7c986e6dd377c",
"T3W1_es_test_autolock.py::test_autolock_does_not_interrupt_signing": "2d9ac3411ef9a28225282838562eeeac38885e40dbc820ffd26e8d9303a54b75",
"T3W1_es_test_autolock.py::test_autolock_interrupts_passphrase": "0ab05f9c2618121252cfabffe49b09d3bc8661f51c835d81fb350784f40a9877",
@@ -29180,36 +29180,36 @@
"T3W1_es_test_tutorial_eckhart.py::test_tutorial_menu_close": "9acd8b9d22c0c55912bc6838538a2cbe25b264d5818f626bae54be614a934a19",
"T3W1_es_test_tutorial_eckhart.py::test_tutorial_menu_tropic": "be951798cb7e6beb0f9c6da102d4c30c83bfab5fcb2a7df97f72f2a37d8a9507",
"T3W1_es_test_tutorial_eckhart.py::test_tutorial_restart": "602d1e507e80a3329b283667ad56b91e7dac918171c38a75d1d88931e6ba7908",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "c700a9e955cbb286237023768152d2529fd0fd6382606eab54c69594f48c80d9",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "3485f09f7fc4da99b16aa62383ef5ace6d1d3013e2f1dce39d43a190392d0e7c",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "ae75e0d8bce8fc0f4d3b585532d773eb30e890050b46c676eecee59f3f7afa45",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "3837ee06b8d1ce050aedba6d620e29e4dacfd4b315d4dfd685d00a92ccc5975b",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "50173e061e35fe429f8647c0d5f4244ff8752b4073e6decdb65230bf5e79c7d4",
-"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "f85a1fcfe82af1de882cf7a2762cf3ffbaf7e9de9a38c31891639c92b4bc2333",
-"T3W1_fr_device_menu-test_check_backup.py::test_backup_check_cancel": "336808f7f1215e07ba4dbd46b053d845e5208b3e6bc4991865d61c4562570509",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "eb74399af626b5e43b09a89f11a3e6bc5fc373d23e8ebc160c8ca967e3098de3",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "8a52035cd752aa8cc5fec36b1482809ab7a949ce5fe044c8a835aa225748ee5c",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "b2cd2c3f1fab2ce82dc9827d8c7310abefda2537e0c23642568061e4d7e2388a",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "40718df3fe67f1e8a9570d7c876b9da07a0c440076559779ecac1c92390fbbb9",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "ca3df37f0d883887eb7d99463c113fd03a478877fdd2f77f3830dc491029ac2f",
+"T3W1_fr_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "c9dde5dbc655b5fd3bf80879ab746e5045dbaeaae98be80e03683aa0df7e9d75",
+"T3W1_fr_device_menu-test_check_backup.py::test_backup_check_cancel": "a920f389f05b312f49bfac0dffc4a525a398e66afdb3365b56759250ee1f6981",
"T3W1_fr_device_menu-test_check_backup.py::test_backup_needed_fails": "127e600409c0d92ab7ca95ae516b91d97b34aa4d1b8c38271d70b17810188cdc",
"T3W1_fr_device_menu-test_check_backup.py::test_no_backup_fails": "3ca3d8dcf5e57671e92ae1dca97e7766dfbd9e3ffaf9343731d4f06580235fc9",
"T3W1_fr_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_fr_device_menu-test_device_settings.py::test_brightness": "fb50b25d714f18b50c53ddb66ae87f2435ad11014c84b2c17504e047162a5989",
-"T3W1_fr_device_menu-test_device_settings.py::test_device_settings_uninitialized": "9b133f37ca8c84195d75e463d81989a379d5f213d02f8b7478d0ce805fdd18f4",
+"T3W1_fr_device_menu-test_device_settings.py::test_brightness": "24f034cf6f43659fd20d3d94d28ade07ded3c45b52685f68b08c1f81451873c1",
+"T3W1_fr_device_menu-test_device_settings.py::test_device_settings_uninitialized": "9723a8ec59a7fd1a787913c0f209393fa1b323564be0d284230d5660ee8a42d7",
"T3W1_fr_device_menu-test_device_settings.py::test_toggle_haptic": "e8156cf4eda1d29060f05b4a18d50032b0b344230609b7de7cababfe0a86b20b",
-"T3W1_fr_device_menu-test_device_settings.py::test_toggle_led": "b148b19e4f459b294c47384a041ad41ffda9cbbc2d2a3431b5f263861ef3a240",
-"T3W1_fr_device_menu-test_label.py::test_change_label": "a3834dcb86c14af13e9628a0f0dbe137e48454e03eab84da21c5579e2e369e90",
-"T3W1_fr_device_menu-test_label.py::test_label_cancel": "cd6acd055923d55dbe944b7970ea7e953af5a3f455efbf719e7b2b736f049dd7",
-"T3W1_fr_device_menu-test_label.py::test_label_click_same_button_many_times": "924913d879d13b9441b307dec57c9d58afc6383e30569a08aafb49241914a273",
-"T3W1_fr_device_menu-test_label.py::test_label_cycle_through_last_character": "7690d065ed3e71f94a5ef0850b67ac1f144ac3ab363c6a2aa40e00177510fab9",
-"T3W1_fr_device_menu-test_label.py::test_label_empty": "cdc5e2157def5758c0b0f8e827c074dcc30ef8f97fcb93d95a8d6920994653b8",
-"T3W1_fr_device_menu-test_label.py::test_label_loop_all_categories": "7e8a558d8478b519a1bb22ca529036069bf70b16b19b45698c03557276c34e18",
-"T3W1_fr_device_menu-test_label.py::test_label_over_32_chars": "ec10a54c8bd31f908d6a318dffb1c5f567baa418530ea327c323991966366401",
+"T3W1_fr_device_menu-test_device_settings.py::test_toggle_led": "d996488b5e7e338375f8dd573ce3468eb376e0e71ee9b7b72b78d7d0bebe29d7",
+"T3W1_fr_device_menu-test_label.py::test_change_label": "22ee92b8e8e1ac215e94615f726f4dd5e6e47f589b818046dd38e822381ce28f",
+"T3W1_fr_device_menu-test_label.py::test_label_cancel": "75308e0761fd988f1e0714ecb613c89f52c2f4e2b426bc94ece2db0acbbdfe3e",
+"T3W1_fr_device_menu-test_label.py::test_label_click_same_button_many_times": "ef9bc6d40a882fd298f2d0987f07df925f29a0186709127505ce5e8b3a010a7a",
+"T3W1_fr_device_menu-test_label.py::test_label_cycle_through_last_character": "8e56a7c8493384f4dfdd2cd45285a1fd5ed3d235c196032c89ca617d8b8919e2",
+"T3W1_fr_device_menu-test_label.py::test_label_empty": "896dc0078df96eb02bcf04c7cfb2181d6a8b8c88e265b44ee24f1d112048ebbf",
+"T3W1_fr_device_menu-test_label.py::test_label_loop_all_categories": "2ce734077ad08b5a0534c847ca78ccee1745618c23772c3dc2a59151be96a68f",
+"T3W1_fr_device_menu-test_label.py::test_label_over_32_chars": "7610f137e478464e7131451e3a5f289a81f5653c414991f58899f0b1a69e5273",
"T3W1_fr_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_fr_device_menu-test_notifications.py::test_backup_failed": "f813b2ec0782049ecaa8ac58f723cde73f86c084a12269e647b0ecc186e470f7",
"T3W1_fr_device_menu-test_notifications.py::test_backup_needed": "55f2d653365928a4598ac9f4cb769dc4d72558d50011f5e27ecfa11ec1ef763e",
"T3W1_fr_device_menu-test_notifications.py::test_pin_not_set": "94b37b42f3b1cfd33d196e5377eec866f5360e0ef6a08de089506525c7d0b006",
"T3W1_fr_device_menu-test_notifications.py::test_seedless": "e6dd2332fbc9992e5418d109ba6d3b9089712500dc0ba9cb4a33fcf3d91ba552",
-"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_initialized": "840adda9a575f938874a2fa704281f027f2a9bf0e9e0f2f2e9a4dba4723ae309",
-"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "764f3ef5412debada381a5d892b73c0e3596e2eb853e10341d3755bdc473c82d",
-"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "064d7dfe6195fe5d5e1160ace7eac14cbde44819a6c4c3e6023d59894667109c",
-"T3W1_fr_device_menu-test_wipe.py::test_wipe": "1ad96168439572368bfc1b74e9da63f91a6c8c193764886d7ff1ead255ac5380",
+"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_initialized": "cc6274f722472d9285d5f0cf0a4eb4d0eeb7a9f3daf11aab906d0abac0521eb8",
+"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "12079b10041fd70849a86902bfa6babff5a38b8681f590b84012cecf5381b7bc",
+"T3W1_fr_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "ffa7def66488b3d02b9d8bfecd609236e1274c8a206e6be783579131e890a1f7",
+"T3W1_fr_device_menu-test_wipe.py::test_wipe": "6ad8eeb876b58eb447fa694cc3b43d16fe64f0ffa6e9a21207a8b5b6927c08e5",
"T3W1_fr_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "839938053ffdd3a920d70a2bde8427be63e16d0e7555b960ac3e2c52cb4f25c5",
"T3W1_fr_test_autolock.py::test_autolock_does_not_interrupt_signing": "0c370820106050b9b8f45cd449b9249677f2bf28f9d900329ec7b337061c6a90",
"T3W1_fr_test_autolock.py::test_autolock_interrupts_passphrase": "38cf3fe298bc5a265c14eb39431532db87fb08f4a9efe9d890aeae9a578c8af5",
@@ -29270,36 +29270,36 @@
"T3W1_fr_test_tutorial_eckhart.py::test_tutorial_menu_close": "d534691b2a0a9456362f7857a2760309199625ce5f406aa8ff9b4e17864c1d74",
"T3W1_fr_test_tutorial_eckhart.py::test_tutorial_menu_tropic": "2496697ad773bae7cc5c2afb2cd834e3941cceeddb7d100a7fed0290d2d71087",
"T3W1_fr_test_tutorial_eckhart.py::test_tutorial_restart": "ffa0fe533b1463085d1ae36dbdfa2b02c8f46c98f95e5daf76665c875d2fa021",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "a5ebb4f73a7ea034ac87947b56e09c2813d283f8aecd9b835cf5a868cc61ea63",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "c1f12df4744d7f5cbcce657c9b9e7db196332fec2698f5a976ad028dac229a33",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "3b28d66badcaedc76572172aa444da8000fc0ae5eb96d07dafa2939a9a424ccb",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "c2383c53dd4fc7dbb60c6ec9191a16514115d7376260579ce5169842c8d93211",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "0bb74e748fa3515dc52daf47425fe074480fd35c947083a32dcebce7d984caf6",
-"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "62c627d84be24a4a754265d578d0abf0c632dd74191a804eb05843db9c82f0ec",
-"T3W1_pt_device_menu-test_check_backup.py::test_backup_check_cancel": "5444fde532035192eeadabbc38e076eaf19db70b831da18c12ae49f220485ac8",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_battery_cancel": "3797d62c501fc1c5e55f2a46cca34c72e5e73d5648bd39b97022ce6ac94be711",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_battery_change": "51200734dcadce0ca49c90b9fb8ddc56e65ce84ee02b2d2d8f8cebc71805e25a",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_pin_not_set": "d2d314dd3a9eda620e52d260495865a58e419b35e5effdc6902c16acd992d105",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_uninitialized": "832aab8dbd483accdd003a5beb047a67d0fbd3a71cbe99def833f70effee201f",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_usb_cancel": "b06e467f344223e10d86746396010e96aa1cca8fb9975f6a2b3e288b847e99b0",
+"T3W1_pt_device_menu-test_auto_lock.py::test_auto_lock_usb_change": "410c60eb51dc8c986f9436bd3bf7dc12345ae5a980a374a7282976e16b39fe71",
+"T3W1_pt_device_menu-test_check_backup.py::test_backup_check_cancel": "78231bbb1e25a13d6b12e364bdfbd5bbb33f5a4f9c5380032baba4ccffba3e3b",
"T3W1_pt_device_menu-test_check_backup.py::test_backup_needed_fails": "ebf419d5203b62a9a6cb6874dfebce5b4ee78d089b5aa4a40fccf8bfb11c6fc9",
"T3W1_pt_device_menu-test_check_backup.py::test_no_backup_fails": "3ed92e9990189e2e2ca4614e55e9abee6f5373778f3501a53cd4074f3d07d02b",
"T3W1_pt_device_menu-test_check_backup.py::test_uninitialized_fails": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
-"T3W1_pt_device_menu-test_device_settings.py::test_brightness": "ad3653244d8cd6fcb9f66cb080c0640c330eeb0cdb1f23ed618097c867a80f9f",
-"T3W1_pt_device_menu-test_device_settings.py::test_device_settings_uninitialized": "6e1a319cefad2fedfba3b79f448a20d981058b1738f737fac5453a8703aab00f",
+"T3W1_pt_device_menu-test_device_settings.py::test_brightness": "89ae4a6c27ec52260235919aa26061d5df2fb56e7203ccfce6ea1ffcc3fec86c",
+"T3W1_pt_device_menu-test_device_settings.py::test_device_settings_uninitialized": "30424ee2d056184e35c844976b71acf82e17f582330ebbb43f1a2162fea03171",
"T3W1_pt_device_menu-test_device_settings.py::test_toggle_haptic": "1c74667c078e25e7e0d37c7b2aa35f7c8ab02cd88e74695ecb355c82a293b0cc",
-"T3W1_pt_device_menu-test_device_settings.py::test_toggle_led": "9d65067cff7cb69503bf752236b63fed0b83500bca8ca1d09f2a84d0f0c38689",
-"T3W1_pt_device_menu-test_label.py::test_change_label": "3a357fd0ce74595be129a668529cf1fd8ee6938053a3917c88895b5c98452799",
-"T3W1_pt_device_menu-test_label.py::test_label_cancel": "657077f513d7c9f26ef2e20f156ce0adb5233986b411148e70ff8383e906ecd0",
-"T3W1_pt_device_menu-test_label.py::test_label_click_same_button_many_times": "277b78b64d0fdb63e7aa478addda87e8821418b182ca072122cb826640c61a5b",
-"T3W1_pt_device_menu-test_label.py::test_label_cycle_through_last_character": "6ff56acecfcad833886022e1963e01dcd7c32e53210586587c5ad67cb7b407ac",
-"T3W1_pt_device_menu-test_label.py::test_label_empty": "f2e9f0bae92ff32df2665a30b645e4d0b2881d48fa3883cb5b173ac967c1f896",
-"T3W1_pt_device_menu-test_label.py::test_label_loop_all_categories": "775151eff47ab119f33dabe3ac9ec672f8e205a033f448df79b0212bafd9f158",
-"T3W1_pt_device_menu-test_label.py::test_label_over_32_chars": "105e04fba1b007545f62d8a1b2b4ca1953af9e8491073540d5865daec95dad6e",
+"T3W1_pt_device_menu-test_device_settings.py::test_toggle_led": "057fb267dca037c97131293bc56ffcb46020a9a712c2388d763a74a5885c17d0",
+"T3W1_pt_device_menu-test_label.py::test_change_label": "ad6c7252bcd2c1182406fb9a38711a83a2c0752c34ebe1de07850fe17dcf961f",
+"T3W1_pt_device_menu-test_label.py::test_label_cancel": "fef0dd521c457d96c1a52d429d3bfb9886aba8558b5d78f34be017c0222b9585",
+"T3W1_pt_device_menu-test_label.py::test_label_click_same_button_many_times": "a1e7a9dd6bdddbe8f1b0767852209ac6319686a48f62252a9d7c157aca9131de",
+"T3W1_pt_device_menu-test_label.py::test_label_cycle_through_last_character": "b014008eaf5ca8b2c9d47dbeed3596d6c4fee70e20ae0047709a2a6e313e44c1",
+"T3W1_pt_device_menu-test_label.py::test_label_empty": "d70c7e543a57b5e8a54d1dfbb699bc7949b1ca4a0abd21c4d9df42953575b18a",
+"T3W1_pt_device_menu-test_label.py::test_label_loop_all_categories": "551ac62bae4dad82cada8cc5d1c6d40fb8690b70435b7b8284096226d3990cef",
+"T3W1_pt_device_menu-test_label.py::test_label_over_32_chars": "7a44adc93f3b7c9d704d84abf7f6ca76e6f3d5e042bfb4e8f7a61adcf62311ab",
"T3W1_pt_device_menu-test_label.py::test_label_uninitialized": "987d1c62e6576b9cc24373e00df522efdc9736af978d6032f7d319af8daaef5d",
"T3W1_pt_device_menu-test_notifications.py::test_backup_failed": "26039b7e906d8b95908603a2ad4be247b423c876bf384d6fb91cf92cd4e7620d",
"T3W1_pt_device_menu-test_notifications.py::test_backup_needed": "29bc804809d98b87ecb26b473ae96585859e4f85cc9704c346531a312e27ef3b",
"T3W1_pt_device_menu-test_notifications.py::test_pin_not_set": "48b3e5e0640d01defbce47a8f81f34ea3182ec8b24330d8e945211bfb744e26b",
"T3W1_pt_device_menu-test_notifications.py::test_seedless": "27b59acec95fd7a89dbd4b4b85c45f4e21313c568c84c1de0a984eed084506ad",
-"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_initialized": "643cd232705a67a8d9611d1ee3f3bbd30f5feb29ab142982bea475c561700731",
-"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "b307892d26a386e64b94169d22497fea1fb28a50aa9579c3e2ccf6e9cb4020c1",
-"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "2781fc5d6afbfcee175d9f0cb5ac8f7b42e2a9681752c2103ccde325f9b09c07",
-"T3W1_pt_device_menu-test_wipe.py::test_wipe": "9f71bd0b65a6a5517424ee26b322a32de09693570a18411fbbddbaeda82fc52e",
+"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_initialized": "1527244cf2789511ee853e680b250c712d00d46fa1f2b2f034f36972bd5332cc",
+"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_initialized_no_pin": "6a33d0010d199fbb811738ce81e38da3618a5534f994d902cbd6cd4d5697fdf4",
+"T3W1_pt_device_menu-test_traverse_menu.py::test_traverse_uninitialized": "cc52e67c94e6181f8f7bcbcb6c62a459d8671dec477df5cf27b662c6e6e2e49c",
+"T3W1_pt_device_menu-test_wipe.py::test_wipe": "f266e6a0040b480123764ebc5b787db6cfd687b788d58cd9d79ae166c6447767",
"T3W1_pt_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "55a6c9b57d940b275aa38784364015e35b6bbcdcf25dd7525056ce9b31c778e3",
"T3W1_pt_test_autolock.py::test_autolock_does_not_interrupt_signing": "5970508fe5625ab6f3bbc0b3fb84b30d4d31f97f9e9501a02ff4bdd3a6607612",
"T3W1_pt_test_autolock.py::test_autolock_interrupts_passphrase": "c3aeaec58a097cbd25929f482856d37bfd036bac4278f9072a615458a43d2cbe",
Why this scored 20/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.