BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

647 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

193security candidates127second-pass queue102AI analyses
28commits · 30 days
47commits · 60 days
312commits · 180 days
647commits · 365 days
Backfill bands
Aug 5 → Feb 6335 seen28 candidatesComplete
Feb 6 → Jun 6265 seen19 candidatesComplete
Jun 6 → Jul 619 seen5 candidatesComplete
Jul 6 → Aug 526 seen3 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

59/100 average clarity
65Strong · 80–100
281Adequate · 60–79
230Thin · 40–59
71Opaque · 0–39
23security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Marko Bencun39011765258
Niklas Dusenlund1112912059
benma's agent892816062
cedwies1253063
Tomas Vrba944074
Cedric Wiese1231049
Jad810062
thisconnect210072
benma210074
Niklas111035
Yasser Aziza110070
Patrick Steiger110045
Analysis record

Published AI watches

Last scanned 44 minutes ago

Low 39 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: initialize C output buffers

This commit fixes a class of low-level memory-safety bugs where Rust code was given buffers containing uninitialized bytes. Rust's rules require every byte of a slice to be initialized, even if the function will overwrite them. Passing uni…

Undefined behavior at C/Rust FFI due to uninitialized buffers being treated as Rust slicesPotential optimizer-dependent behavior from violating Rust slice initialization rulesHardening of cryptographic output paths (SHA-256, HMAC-SHA256, HMAC-SHA512)
511018eaby benma's agent+52−2713 files
Vendor flagged security relevance
Moderate 59 AI analysisMessage 69 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Limit SD erase file size

This commit fixes a bug in how the BitBox02 hardware wallet wipes files from its SD card. Before erasing a file, the device now checks the file's reported size against a safe maximum. Without this check, a tampered SD card could claim a fi…

CVE-2026-6682 referenced in commit messageMalformed FAT directory entry could cause excessive overwrite loopDenial-of-service via SD card tampering
2453f528by Marko Bencun+4−01 file
Vendor flagged security relevance
High 70 AI analysisMessage 66 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Validate mounted FAT geometry

This update adds a safety check when the BitBox02 hardware wallet mounts a microSD card. A malicious or deliberately malformed FAT filesystem could trick the device's file-system library into placing user data inside attacker-controlled bo…

Fixes integer-wrap / geometry confusion in FAT mount logicAdds explicit post-mount validation of filesystem metadataPrevents data area from landing inside attacker-controlled FAT sectors
01c017d6by Marko Bencun+21−01 file
Vendor flagged security relevance
Informational 0 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: update stage1 binaries to v1.2.2

This commit simply swaps in newer pre-built bootloader stage1 binary files (version 1.2.2 replacing 1.2.1) for four BitBox02 hardware variants and updates the corresponding checksum list. The actual code inside the new binary files is not …

5940a800by Marko Bencun+8−86 files
No security note in commit
Moderate 59 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader/stage1: fix erase handling for partially erased blocks

This update fixes the BitBox02 bootloader's firmware-erase routine. Previously, when erasing leftover padding after a firmware update, the bootloader started erasing at the exact page where the firmware ended. Because flash memory can only…

Bootloader firmware erase routine could erase a flash block containing both firmware and paddingFix aligns erase start to erase-block boundary and re-checks erased state before erasingChangelog describes the change as a fix for 'partially erased flash blocks'
b31206a8by Marko Bencun+23−83 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: add stage0/stage1 production binaries

This commit adds production bootloader upgrade files for the BitBox02 hardware wallet and updates build scripts to use them. It is a routine asset-management change: replacing placeholder development hashes with real signed production bina…

8db4b0dcby Marko Bencun+26−1720 files
No security note in commit
Informational 20 AI analysisMessage 83 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: keep dev stage1 unsigned

This commit fixes a build script used only for development/testing versions of the BitBox02 bootloader upgrade. It makes the development-stage1 bootloader images unsigned again, while keeping production images fully signature-verified. The…

Signature verification relaxed only for development buildsProduction payload validation still requires signaturesDevelopment stage0 already skipped stage1 signature verification per commit message
476b90e3by Marko Bencun+9−69 files
No security note in commit
High 76 AI analysisMessage 23 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

security improvements

This BitBox02 firmware update is a broad security patch that fixes several independent bugs: it prevents a maliciously oversized USB report from overflowing memory, stops a corrupted Bluetooth pairing database from being read or written wi…

Bounds check added to USB HID Set Report input lengthBLE bond DB length validation hardened against negative and oversized valuesBootloader firmware image size limit relaxed to intended maximum
cbb40634by Marko Bencun+1117−25021 files
Vendor flagged security relevance
Low 46 AI analysisMessage 60 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: allow full sized images

This commit fixes a bootloader bug where the device rejected firmware updates that used the maximum allowed size. The off-by-one check meant legitimate full-sized firmware images could not be installed, potentially blocking updates. The fi…

Off-by-one input validation in firmware-update pathBootloader change affecting firmware chunk count acceptanceCHANGELOG labels the change as a bugfix for full-sized firmware upgrades
f60b93ccby Marko Bencun+5−33 files
No security note in commit
Moderate 59 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add bootloader update

This is a large firmware commit that adds a new two-stage bootloader update mechanism for the BitBox02 hardware wallet. It replaces the old single bootloader with a small, fixed 'stage0' plus a separately signed 'stage1', and ships a speci…

Bootloader architecture changed from monolithic to two-stage (stage0 + signed stage1).Firmware signature hash now includes a 16-bit product_id, binding firmware to product variant.Root public keys were rotated/replaced with a single set across all products.
3f1f3172by Marko Bencun+5003−52379 files
Vendor flagged security relevance
Informational 17 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Bump Rust toolchain to 1.96

This commit is a routine maintenance update for the BitBox02 hardware wallet firmware. It upgrades the pinned Rust compiler toolchain from an older version to Rust 1.96.0, updates the project's Docker build container and related developer …

Routine toolchain and dependency upgradeVendored libc updated across many platform bindingsNo first-party security-relevant code changes
55e3dd30by Niklas Dusenlund+14839−13798360 files
No security note in commit
Informational 18 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: reduce snprintf

This commit removes the use of the standard snprintf formatting function from the BitBox02 bootloader's developer menu and replaces it with a small, fixed-format helper. The main goal is to reduce the bootloader's binary size and make the …

Removes snprintf/printf usage from bootloader code, reducing binary bloat and eliminating a complex formatting library from a privileged execution contextExtends automated CI check to detect stdio/Rust formatting symbols in regular development and production bootloader outputs, not just production buildsAdds unit test coverage for the new fixed-format helper
2fb9d57fby Marko Bencun+59−106 files
No security note in commit
Low 35 AI analysisMessage 63 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: avoid snprintf formatting

This commit removes the use of standard string-formatting functions (like snprintf and Rust's format!) from the bootloader and related low-level code, replacing them with smaller, fixed-size string builders. The stated goal is to reduce bi…

Removal of stdio formatting (snprintf family) from bootloader codeRemoval of Rust format!/write! formatting from bootloader-linked codeAddition of CI gate rejecting stdio and Rust formatting symbols in production bootloader ELFs
33434fa9by Marko Bencun+298−6314 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: extract formatting helpers

This commit is a simple code cleanup: it moves a handful of string-formatting helpers (for pairing codes, progress percentages, hash display, timers, and unknown-command messages) out of the main bootloader file into a new dedicated file, …

1a1de3b5by Marko Bencun+147−126 files
No security note in commit
Informational 17 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: render messages directly

This commit removes a 100-character stack buffer and passes bootloader messages straight to the screen-drawing function. The old code used snprintf to copy the message into a fixed-size buffer, which could silently truncate very long strin…

Removal of fixed-size stack buffer in bootloader display pathElimination of snprintf with potentially attacker-influenced format string argumentBootloader code touched, which is a security-sensitive component
c0bc7b92by Marko Bencun+1−31 file
No security note in commit
Informational 19 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Use integer progress fractions

This commit replaces floating-point progress calculations with integer math to save firmware space. It removes the use of f32 arithmetic for progress bars in Bitcoin transaction signing and Bluetooth firmware upgrades. There is no direct s…

Removal of floating-point arithmetic reduces attack surface related to soft-float emulation bugsNew integer fraction API introduces denominator-non-zero and numerator-bound assumptionsCall sites use checked arithmetic to prevent overflow in progress computation
17c4947fby Marko Bencun+52−3712 files
No security note in commit
Informational 12 AI analysisMessage 80 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Enable scope C LTO for firmware

This commit changes the build system to enable Link-Time Optimization (LTO), a compiler technique that shrinks the final firmware size. It also adds safeguards to keep the stack protector security feature working under LTO and deliberately…

Build-system change enabling LTO with explicit stack-protector symbol retentionDeliberate exclusion of bootloader, factory-setup, ASF4, samd51a-ds, and embedded-swd from LTO due to audit complexityToolchain switch to LTO-aware archive utilities to avoid invalid tiny images from missing live objects
0b102fb7by Marko Bencun+29−36 files
No security note in commit
Moderate 60 AI analysisMessage 95 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

da14531: restore BLE UART backpressure

This update fixes a crash in the BitBox02 hardware wallet when a user lists many backups over a Bluetooth connection. Previously, the device could run out of temporary buffer space while sending a large response, causing it to panic and st…

Denial-of-service via buffer overflow/panic on Bluetooth pathMissing backpressure leading to unbounded queue growth and crashAtomic all-or-nothing enqueue to preserve serial frame boundaries
3201c5d2by Marko Bencun+87−37 files
Vendor flagged security relevance
Informational 20 AI analysisMessage 35 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

securechip: port attestation sign

This commit is a code refactoring that moves the device attestation signing function from C code into Rust code. It converts the function to be asynchronous (async/await) and rewrites the parsing of the secure chip's DER-encoded signature …

Removal of C synchronous secure chip signing wrapperAddition of async Rust secure chip ECDSA signing operationRelocation of DER signature parsing from C-API Rust crate into securechip crate
2bccdebfby Marko Bencun+180−14525 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Format generated protobufs explicitly

This commit is purely a code-style and build-maintenance change. It makes the Rust code generated from protocol-buffer definitions be formatted by rustfmt automatically and included in style checks. No security-sensitive behavior is change…

f22f12cdby Niklas Dusenlund+36−1603 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityMerge remote-tracking branch 'agent/benma-agent/validate-backup-seed-length'by Marko Bencun · f6d2942c · Aug 4, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/validate-backup-seed-length'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validationmerge-commit duplicate discount
Lower-priorityMerge remote-tracking branch 'agent/benma-agent/reject-oversized-policy-keys'by Marko Bencun · 1e674dfc · Aug 4, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/reject-oversized-policy-keys'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
merge-commit duplicate discount
AI review queuedbackup: validate decoded seed lengthby benma's agent · 80baf1ee · Aug 4, 2026 · 1 fileMessage 90 · StrongTriage 13Details
Commit message · benma's agent

backup: validate decoded seed length

Reject backup data whose declared seed length exceeds the fixed
32-byte seed field. This prevents malformed SD-card backups from
triggering an out-of-bounds panic while listing backups.

Add a regression test with an otherwise valid protobuf and recomputed
checksum.

Tests:
- `cargo test --manifest-path src/rust/Cargo.toml --all-features -- --test-threads 1`
- `./scripts/dev_exec.sh make run-unit-tests`

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
defensive validationfuzzing or regression evidencesecond-pass: broader security terminology
Lower-prioritybtc: reject oversized policy keysby benma's agent · 203bb0aa · Aug 3, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · benma's agent

btc: reject oversized policy keys

Reject policy keys whose rendered confirmation exceeds the UI label limit.
This prevents registration from approving a key that cannot be displayed in full.

Add boundary coverage for a 640-byte key and rejection at 641 bytes.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-prioritybb03 ui: replace long touch with slide to confirmby Jad · cc6ae75d · Aug 3, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Jad

bb03 ui: replace long touch with slide to confirm

replaces hold to confirm (long touch) with
slide to confirm and removed long touch for BB03

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritybb03 UI: slide to confirmby Jad · 30a68c8d · Aug 3, 2026 · 11 filesMessage 68 · AdequateTriage 0Details
Commit message · Jad

bb03 UI: slide to confirm

Implement slide to confirm UI component for
confirming transactions and sensitive operations

Delete render_slide_confirm.rs

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedu2f: fix refresh screenby benma's agent · 890f4ce3 · Aug 1, 2026 · 1 fileMessage 28 · OpaqueTriage 0Details
Commit message · benma's agent

u2f: fix refresh screen

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedu2f: fix nudge screenby benma's agent · 931e75d6 · Jul 31, 2026 · 1 fileMessage 28 · OpaqueTriage 0Details
Commit message · benma's agent

u2f: fix nudge screen

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Lower-priorityFix GroundedCell result lifetimeby benma's agent · dcd408f9 · Jul 31, 2026 · 1 fileMessage 58 · ThinTriage 8Details
Commit message · benma's agent

Fix GroundedCell result lifetime

Read the confirmation result before clearing CONFIRM_STATE.
The result reference points into GroundedCell storage, so clearing the
state first invalidates it before result.is_ok() reads it.

This keeps the poll contract: publish the completed result, clear the task
state, and report completion. It also matches rust_workflow_unlock_poll().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
defensive validation
Security candidaterust: initialize C output buffersby benma's agent · 511018ea · Jul 31, 2026 · 13 filesMessage 73 · AdequateLow 39Details
Commit message · benma's agent

rust: initialize C output buffers

Rust slices require every byte in their backing storage to be initialized,
even when a function only intends to overwrite the bytes. Several C callers
passed uninitialized output buffers through BytesMut, and SHA/HMAC created
mutable slices directly from such pointers. This was formal UB and could
allow optimizer-dependent behavior.

In practice, these paths only wrote their outputs before C consumed them, and
current builds emitted the expected stores. No secret disclosure, corrupted
output, or control-flow impact was observed. This is hardening rather than a
fix for a demonstrated exploit.

Initialize C storage before constructing BytesMut. Keep output-only helpers on
raw pointers so they can legally initialize storage, and document the FFI
invariant. Raw-pointer APIs that already used direct stores remain valid.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagedefensive validationcryptography-sensitive pathboot or update pathparser or protocol path
AI analysis · Low 39/100

This commit fixes a class of low-level memory-safety bugs where Rust code was given buffers containing uninitialized bytes. Rust's rules require every byte of a slice to be initialized, even if the function will overwrite them. Passing uninitialized memory could let the compiler make unsafe assumptions, but the commit message says no actual exploit or data leak was observed. The fix initializes buffers before handing them to Rust and switches some helpers to use raw pointers so they can legally write into uninitialized memory.

Lower-priorityfactorysetup: validate RTT message lengthby benma's agent · bb882fc0 · Jul 31, 2026 · 1 fileMessage 68 · AdequateTriage 8Details
Commit message · benma's agent

factorysetup: validate RTT message length

Reject RTT frames whose declared payload exceeds the bytes returned by the transport.

This prevents copying uninitialized stack data into factory commands when a frame is partial.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validation
Lower-prioritymemory: initialize BLE random bufferby benma's agent · 135bb8ba · Jul 31, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · benma's agent

memory: initialize BLE random buffer

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Lower-prioritybtc: limit Miniscript encoding depthby benma's agent · 82346eeb · Jul 30, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · benma's agent

btc: limit Miniscript encoding depth

Reject WSH policies and Taproot leaves that exceed the firmware-specific recursive encoding limit.

Cover the boundary and known deep-policy shape with tests.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI review queuedeth: limit EIP-712 recursion depthby benma's agent · 4ccadcc0 · Jul 30, 2026 · 1 fileMessage 78 · AdequateTriage 20Details
Commit message · benma's agent

eth: limit EIP-712 recursion depth

Reject schemas and values whose recursive struct or array traversal
exceeds a bounded depth. Validate type roots before callbacks and
cover the boundaries with tests.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
Security candidatepy: extract bootloader connectionby benma's agent · 886113d0 · Jul 28, 2026 · 1 fileMessage 50 · ThinTriage 18Details
Commit message · benma's agent

py: extract bootloader connection

Move the USB bootloader fallback into a nested helper to satisfy
pylint's return-count limit without changing behavior.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
update trust
Lower-priorityprepare v9.26.5by benma's agent · 51ce24e6 · Jul 28, 2026 · 2 filesMessage 43 · ThinTriage 0Details
Commit message · benma's agent

prepare v9.26.5

Set v9.26.5 and move its release fixes into a dedicated changelog section.

Keep BitBoxSync documented as unreleased.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Lower-priorityapi: disable BitBoxSync by defaultby benma's agent · 93d36fc8 · Jul 28, 2026 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · benma's agent

api: disable BitBoxSync by default

Gate the BitBoxSync API behind a disabled-by-default Cargo feature while API changes are pending.

Requests now return the standard disabled error unless the feature is explicitly enabled.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedrust: bound executor queueby benma's agent · b99e200a · Jul 28, 2026 · 5 filesMessage 70 · AdequateTriage 0Details
Commit message · benma's agent

rust: bound executor queue

Replace the unbounded concurrent queue with a fixed-capacity ring buffer
storing 16 Runnable slots inline. Scheduling no longer allocates, including
when wakers run in interrupt context.

Limit active tasks to the queue capacity so exhaustion is reported from
spawn rather than from a waker. Protect queue access with critical sections
because wakers and the main loop may access it concurrently.

The executor currently has three normally serialized root-task sources, so
16 slots leave room for future concurrency and consume 64 bytes on the
32-bit firmware target.

Cover repeated slot reuse and enforcement of the task limit. Remove the
now-unused concurrent-queue dependency.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
Lower-priorityrust: use static no-op wakerby benma's agent · 5be42f61 · Jul 20, 2026 · 3 filesMessage 68 · AdequateTriage 0Details
Commit message · benma's agent

rust: use static no-op waker

The polling executor ignores wake notifications and is polled on every
main-loop iteration. Use core's static no-op waker so ISR callbacks cannot
free an Arc while the heap allocator is active.

Remove the now-unused heap-backed waker helper.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityusb: block HWW during U2F workflowsby benma's agent · 0014300b · Jul 19, 2026 · 5 filesMessage 68 · AdequateTriage 0Details
Commit message · benma's agent

usb: block HWW during U2F workflows

Track detached U2F workflow lifetimes independently of their public
result state. Return HWW_RSP_BUSY before starting an HWW request while a
U2F workflow can still own the shared UI.

This prevents HWW session reset and cancellation paths from invalidating
live U2F UI objects. Add regressions for the lifetime guard and busy
response.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityFix LVGL transition style clearingby Niklas Dusenlund · 5b6092f4 · Jul 15, 2026 · 6 filesMessage 68 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

Fix LVGL transition style clearing

Wrap the transition style setter around LvStyleTransition so callers use
the safe wrapper instead of raw descriptors.

Remove the local transition style property when None is passed, matching
the behavior of other optional style setters.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityui: keep frame during async processingby benma's agent · c6b1ffa3 · Jul 14, 2026 · 9 filesMessage 68 · AdequateTriage 0Details
Commit message · benma's agent

ui: keep frame during async processing

Async operations can leave the screen stack temporarily empty between
two UI calls. This caused the waiting screen to flash, unlike the old
synchronous securechip behavior.

Treat locally processing USB requests as active UI work and keep the last
frame when no component is stacked. Host waits, screensavers, and explicit
components continue to render normally.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedWarn before truncated value displaysby benma's agent · 5b3aee6f · Jul 14, 2026 · 10 filesMessage 78 · AdequateTriage 20Details
Commit message · benma's agent

Warn before truncated value displays

Show the existing large-value warning before value confirmation bodies that exceed the UI label limit.

Apply it to shared message verification, Ethereum transaction and typed-data values, and BTC policy name/policy displays.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
Security candidatereleases: add v9.26.2, v9.26.3 and v9.26.4by Marko Bencun · eed2e68e · Jul 10, 2026 · 16 filesMessage 45 · ThinTriage 12Details
Commit message · Marko Bencun

releases: add v9.26.2, v9.26.3 and v9.26.4

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update path
AI review queuedeth: loosen EIP-712 identifier validationby Marko Bencun · 9703d8d9 · Jul 9, 2026 · 3 filesMessage 68 · AdequateTriage 12Details
Commit message · Marko Bencun

eth: loosen EIP-712 identifier validation

Allow ':' in EIP-712 type names used by some dapps as a namespace
separator

Co-Authored-By: Tomas Vrba <vrba.tomas@pm.me>

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path