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.
Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.
36/100 average clarity
10Strong · 80–100
45Adequate · 60–79
195Thin · 40–59
218Opaque · 0–39
42security candidates with opaque commit messaging
This commit tightens how COLDCARD reads PSBTv2 (Partially Signed Bitcoin Transaction version 2) files. It now rejects several malformed or ambiguous encodings that could previously be accepted: extra key data attached to fields that should…
PSBT parser hardeningrejection of non-canonical compact-size encodingsenforcement of singleton key-data emptiness
This commit adds support in the COLDCARD firmware for a newer Bitcoin transaction format feature (PSBTv2) that lets each input specify its own required lock time. Before this change, the device did not correctly compute the final transacti…
PSBTv2 per-input locktime parsing and validation addedBIP-370 required locktime computation implementedIncompatible height/time locktime requirements rejected with assertion
This commit only adds a new automated test to the COLDCARD firmware test suite. The test checks that when a user tries to sign a text file containing valid JSON that is not a JSON object (for example, a plain number, string, null, or list)…
Regression test for input validation of JSON message-signingTest comment explicitly references avoiding a device crash on malformed JSON inputTest requested during review of pull request #808, suggesting prior related code change
This commit is a defensive hygiene fix in the COLDCARD hardware wallet's 'trick PIN' duress-wallet feature. It moves a memory-wipe routine so that it runs before the device looks up the duress wallet slot. The change reduces the window in …
This firmware update fixes a cleanup issue in the COLDCARD wallet's transaction signing code. Before finalizing a new Bitcoin transaction, the device now clears out leftover 'change output' records that may have been captured during a prev…
State not reset between signing attemptsStale change-output metadata reused in transaction finalizationOVC (Output Value Check) validation may be affected by leftover data
This commit removes a human-readable error message from a ValueError exception to reduce the amount of flash storage used by the firmware. It is a minor code cleanup and does not change the security behavior of the code. The function still…
This commit only adds a changelog note saying a previous fix stopped the COLDCARD hardware wallet from crashing when a message-signing request was valid JSON but not a JSON object (for example, a number or string instead of a dictionary). …
Device crash on malformed message-signing inputInput vector includes NFC, QR, and SD card JSON filesValid JSON but wrong type (non-object) bypasses simple format checks
This commit fixes a bug where the COLDCARD firmware's message-signing feature would crash with an uncaught error if a user supplied valid JSON that wasn't a structured object (for example, a plain number, string, list, or null). The fix ch…
uncaught exception in message parsing pathinput validation gap on JSON typepotential denial-of-service via malformed request
This commit only updates the release signature file (signatures.txt) for the COLDCARD firmware. It adds two new file hashes for a v5.6.2-mk release and refreshes the PGP signature covering the file. There are no code changes, no bug fixes,…
This commit only updates a release signature file. It refreshes SHA-256 hashes for changelog files and adds hashes for two new firmware release files, then re-signs the file with a PGP signature. There are no code changes, no bug fixes, an…
This commit simply updates a stored Bitcoin blockchain height number from 965,337 to 965,338. It is a routine, automatically generated data refresh with no code logic changes and no apparent security relevance.
This commit only edits the project's internal release notes file. It replaces a detailed list of upcoming changes with placeholder 'tbd' entries and adds a note asking contributors to leave blank lines between additions. There are no code …
This commit is a release-notes-only update for the COLDCARD hardware wallet firmware. It moves many security-relevant bug fixes and hardening items from the current changelog into the historical release notes for versions 5.6.1 and 1.5.1Q,…
USB protocol encryption upgrade (ncry v3) with direction-separated keys and replay protectionPSBT tampering detection: re-verify staged bytes before signing after Virtual Disk overwriteFirmware update integrity: abort if staged image overwritten, reject images extending past world-checksum region
This commit simply updates a stored Bitcoin blockchain height number from 963,314 to 965,337, along with its timestamp. It is an automatic, routine data refresh with no code logic changes and no apparent security relevance.
This commit fixes a bug in the COLDCARD firmware upgrade process. Previously, if someone tampered with the staged firmware after the user saw the approval prompt but before they confirmed, the device would crash with a bare internal error …
Tamper-detection failure path hardened: assert replaced with user-facing failure storyDefense-in-depth assertion added to PIN-changing flowTest coverage added for tamper-abort message
This commit only updates a linked external code library (a Git submodule called ckcc-protocol) to a newer version. The actual code changes inside that library are not shown in the commit diff, and no security-related information was provid…
This commit only edits the draft release changelog file. It rewords two upcoming feature descriptions and fixes line wrapping for another entry. No source code, firmware logic, or security behavior was changed.
This update fixes a bug where COLDCARD wallets would accept BIP-39 passphrases containing non-ASCII characters (like accented letters or emojis) or non-printable characters. Because different wallet software normalizes such characters diff…
Behavioral fix that prevents silent derivation of incompatible wallet seedsInput validation added for BIP-39 passphrase across USB, UI, saved-passphrase restore, and note/password lanesRejection of non-printable ASCII and non-ASCII Unicode characters
This commit fixes two related security bugs in the COLDCARD hardware wallet's protection against a known 'BIP-143 amount swap' attack. First, the wallet was recording the claimed amount of a segwit input to its secure cache as soon as a tr…
Fixes deferred persistence of UTXO amount cache until after successful signingFixes missing capture of single-sig segwit change outputs (p2wpkh and p2sh-p2wpkh)Prevents cache poisoning by cancelled/malicious PSBT previews
This update fixes a bug in how the COLDCARD wallet reads PSBT files (the standard format for passing Bitcoin transactions between devices). Previously, if a PSBT contained the same special 'singleton' key twice in the same section, the dev…
PSBT parser now rejects duplicate singleton keysNew test cases for duplicate keys in global/input/output mapsChangelog labels the change as a bugfix
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access controlseed or entropy path
AI analysis · Moderate 60/100
This update fixes a bug in the COLDCARD hardware wallet where a security mode called 'Delta Mode' could still access the Seed Vault through a feature called Seed XOR restore. Delta Mode is meant to restrict what an attacker or unauthorized user can do with the device. The fix blocks that access path. The bug was reported by someone named Rety.
bugfix: restrict PSRAM download (dwld) to leased results
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · High 76/100
This update fixes a bug in the COLDCARD hardware wallet's USB download command. Previously, a connected computer could ask the COLDCARD to read back almost anything it had temporarily stored in its extra memory chip (PSRAM), including uploaded transaction files or multisig setup files, even across different USB sessions and without encryption. Now the device only allows downloading the single most recent result it explicitly produced for the user (such as a signed transaction or backup), only over an encrypted session, and only until a new upload or session resets the permission.
- bind SHA256 of staged bytes at parse; re-verify immediately before signing, fail closed (wipe + "Transaction modified") on mismatch - PSRAM write-generation counter gates the re-check: common path costs one integer compare - usb: reject upld with busy while a non-transaction approval flow owns the staging area - regression tests: mid-approval upld rewrite and direct PSRAM mutation both abort signing; unchanged buffer still signs
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundaryfuzzing or regression evidencesigning or wallet pathauthentication path
AI analysis · High 82/100
This commit fixes a security bug where a malicious or compromised computer connected to a COLDCARD wallet could potentially swap the transaction data after the user reviewed it on the device screen but before the device signed it. The user might approve one transaction while the device signs a different one. The fix locks down the staged transaction data, re-checks it right before signing, and aborts with an error if anything changed.
Security candidatebugfix: dice roll screen counted key-repeat events as dice rollsby Piotr Duszynski · ff6020df · Aug 12, 2026 · 1 fileMessage 73 · AdequateLow 41Details
Commit message · Piotr Duszynski
bugfix: dice roll screen counted key-repeat events as dice rolls
add_dice_rolls() used PressRelease() with no argument, so the digits were not in need_release and a held digit was re-delivered about every 60ms, each delivery counted as a roll. Put the digits in need_release, the way ux_mk4.ux_enter_number already does. A roll now registers on release, so overlapping presses count once rather than several times.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
seed or entropy path
AI analysis · Low 41/100
This fix corrects a user-interface bug in COLDCARD's dice-roll seed-generation feature. Previously, if a user held down a digit key, the device treated the auto-repeating key events as multiple separate dice rolls, rapidly adding many unintended rolls. After the fix, a held key registers exactly one roll when released, matching how number entry already works elsewhere. This reduces the chance a user accidentally skews their random seed by holding a button too long.
test_pincodes: drop obsolete mk3-only test_duress (uses removed fetch param)
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access controlauthentication path
AI analysis · Informational 15/100
This commit only removes an obsolete test from the test suite. The deleted test was for a duress PIN feature on the older Mk3 Coldcard and used a 'fetch' parameter that no longer exists. There is no change to firmware code that users run, so it cannot introduce a security vulnerability or fix one.
Lower-prioritySECURITY.md: add responsible-disclosure link and security contactby @Bibo-dochex · a27b5abb · Aug 11, 2026 · 1 fileMessage 55 · ThinTriage 0Details
Commit message · @Bibo-dochex
SECURITY.md: add responsible-disclosure link and security contact
55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
documentation-only discount
AI review queuedreviewby scgbckbone · 8c07dbe3 · Aug 10, 2026 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · scgbckbone
review
0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body
This commit only updates documentation. It clarifies that a BIP39 passphrase wallet backup stores an extended private key (XPRV) rather than the seed words or passphrase, and adds version numbers for older firmware behavior. There is no code change and no security fix or vulnerability introduced.
Lower-prioritytest: wait for multiproc simulator readinessby scgbckbone · 39409e23 · Aug 10, 2026 · 1 fileMessage 67 · AdequateTriage 0Details
Commit message · scgbckbone
test: wait for multiproc simulator readiness
67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access controldocumentation-only discount
AI analysis · Low 35/100
This commit only adds a single line to the changelog, describing a bugfix that was apparently already made elsewhere. The bug concerned how COLDCARD's 'View Seed Words' and backup features handled BIP-39 passphrase wallets when a passphrase was applied on top of a temporary seed. In that case, the device reportedly treated the master seed as the parent instead of the immediate temporary seed, potentially showing or backing up the wrong secret. Because the actual code change is not in this commit, we cannot directly verify the fix or assess its full security implications from this diff alone.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathauthentication path
AI analysis · Low 47/100
This commit changes how COLDCARD backup, clone, and Key Teleport features handle temporary seeds and BIP-39 passphrases. Previously, users could sometimes back up the main wallet even when a passphrase or temporary seed was active. Now the device always backs up the wallet currently in effect and warns the user first. This is a security-hardening change that reduces the risk of accidentally exposing or archiving the wrong secret, but it is not a fix for an active remote exploit.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 22/100
This commit changes what the COLDCARD wallet displays on its 'View Seed Words' screen when a BIP-39 passphrase is active. Previously it showed the original 24 seed words plus a masked passphrase and the derived extended private key. Now it shows only the effective extended private key (and a note that a passphrase is in effect), hiding the underlying seed words. This is a deliberate UX/security hardening change, not a fix for an exploitable vulnerability.
Security candidatebugfix: wipe in deltamode before listing saved passphrasesby scgbckbone · 0e78b8e1 · Aug 8, 2026 · 2 filesMessage 50 · ThinHigh 71Details
Commit message · scgbckbone
bugfix: wipe in deltamode before listing saved passphrases
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access control
AI analysis · High 71/100
This commit fixes a bug in the COLDCARD hardware wallet where, when the device is in 'Delta Mode' (a special temporary operating mode), opening the list of saved BIP-39 passphrases would reveal the passphrases and wallet fingerprints instead of securely wiping the seed first. The fix adds a call to wipe the seed if Delta Mode is active before displaying the saved passphrase menu. This prevents sensitive secret material from being exposed on screen in a mode meant to limit what an attacker can see.
Security candidatecleanup: drop unused fetch() paramsby scgbckbone · 81685458 · Aug 8, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · scgbckbone
cleanup: drop unused fetch() params
45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 15/100
This commit removes unused parameters from an internal function called fetch() in the COLDCARD firmware. There is no evidence this change fixes or introduces a security issue; it is purely a code cleanup that simplifies the function signature and removes dead code paths.
Lower-priorityexclude schnorr/musig from libngu to save flash space; add adition macro NGU_STM32_EXTERNAL_RNG_GET; disable threads for unix portby scgbckbone · 0af2f5da · Aug 7, 2026 · 5 filesMessage 50 · ThinTriage 0Details
Commit message · scgbckbone
exclude schnorr/musig from libngu to save flash space; add adition macro NGU_STM32_EXTERNAL_RNG_GET; disable threads for unix port
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritymacos: silence benign clang warnings so the build is cleanby Danilo · d9e7fe14 · Aug 6, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Danilo
macos: silence benign clang warnings so the build is clean
The unix build emitted 35 warnings under Apple clang 21, all of them benign-by-design in upstream/third-party code:
25 -Wunused-but-set-variable py/{objfun,vm,objgenerator, showbc,frozenmod}.c -- the MP_BC_PRELUDE_*_DECODE macros declare every prelude field, callers read only some 4 -Warray-bounds py/vm.c -- deliberate negative indexing off the VM stack pointer, eg sp[-N + 1] 3 -Wgnu-folding-constant libngu/hash.c -- uint8_t d[H_SIZE], const-folded, not a real VLA 3 -Wunterminated-string-initialization extmod/moductypes.c and secp256k1 -- fixed-size char arrays that intentionally omit the NUL
None indicates a defect, so suppress the classes rather than patch four third-party trees.
Ordering matters and is the subtle part: -Wextra enables -Wunterminated-string-initialization, so a -Wno- placed before the -Wextra line is silently undone (-Wno-error= survived only because it changes error status, not enablement). The suppressions therefore have to come after -Wall/-Wextra, hence the reordering and the comment.
Verified: `make setup`, `make`, and mpy-cross all build with 0 compiler warnings. The lone remaining line is a linker warning about the CommandLineTools SDK's libSystem.tbd stub, which is not ours to fix.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityunix: stop building the unused bundled libffi in `make setup`by Danilo · e26e1eb5 · Aug 6, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Danilo
unix: stop building the unused bundled libffi in `make setup`
The `tools` target ran the port's `deplibs`, which builds both axtls and the bundled lib/libffi. Only axtls is actually used: mpconfigport.mk sets MICROPY_STANDALONE = 0, so the ffi module links the system libffi found via pkg-config, and $(BUILD)/lib/libffi is never referenced.
Building it is not merely wasted time -- on macOS it fails outright:
The failure went unnoticed because that recipe chains its steps with `;` rather than `&&`, so the errors scroll past and setup still exits 0.
Depend on axtls directly. The resulting vanilla micropython is unchanged -- both `import ffi` and `import ussl` still work.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritysim: keep running when there is no X11 displayby Danilo · aec8d053 · Aug 6, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Danilo
sim: keep running when there is no X11 display
simulator.py spawns xterm purely to host the firmware's REPL console; the Coldcard screen itself is drawn with SDL and needs no X11. On macOS without XQuartz, xterm exits immediately ("DISPLAY is not set"), the main loop sees xterm.poll() != None and breaks, and the simulator dies on startup before you can use it.
Run the child directly when DISPLAY (or xterm) is missing. The simulated screen, the /tmp/ckcc-simulator.sock link and `ckcc -x` all keep working; only the separate console window is lost, and that is already unusable in that situation. Behaviour with a working X11 display is unchanged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritymacos: extend mpy patch for Apple clang 21 -Werror failuresby Danilo · 272b3f29 · Aug 6, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Danilo
macos: extend mpy patch for Apple clang 21 -Werror failures
Two warnings that are new (or newly promoted) in Apple clang 21 break the micropython build on macOS, both in code that is intentional upstream:
extmod/moductypes.c - char type2char[16] = "BbHhIiQq------fd" needs no NUL terminator, but -Wunterminated-string-initialization flags it py/emitnative.c - MP_STATIC_ASSERT expands to sizeof(char[1 - 2*!(cond)]), which -Wgnu-folding-constant rejects as a folded VLA
Demote both to warnings, matching how this patch already handles the other clang-version drift.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytesting: bump pyscard to 2.3.1 so requirements install on swig 4.3+by Danilo · 07015188 · Aug 6, 2026 · 1 fileMessage 83 · StrongTriage 0Details
Commit message · Danilo
testing: bump pyscard to 2.3.1 so requirements install on swig 4.3+
pyscard 2.0.2 ships pre-generated SWIG sources that no longer compile against swig >= 4.3 (clang: "use of undeclared identifier '$function'" in smartcard/scard/scard_wrap.c), which broke `pip install -r requirements.txt` entirely. 2.3.1 publishes cp313 wheels, so it installs without invoking swig at all.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key materialdocumentation-only discount
AI analysis · Informational 15/100
This commit only adds a thank-you credit to an upcoming release changelog. It does not change any code, so it cannot by itself fix or introduce a security issue. The actual BIP-322 validation bugfix must have been made in a different, earlier commit.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidatebugfix: detect RNG_SR_SEIS and RNG_SR_SECS, retry safely, and fail closed on persistent faultsby scgbckbone · 82ced47a · Aug 5, 2026 · 5 filesMessage 50 · ThinModerate 66Details
Commit message · scgbckbone
bugfix: detect RNG_SR_SEIS and RNG_SR_SECS, retry safely, and fail closed on persistent faults
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
entropy or randomnessseed or entropy pathboot or update path
AI analysis · Moderate 66/100
This update fixes how the COLDCARD hardware wallet's random-number generator (RNG) handles rare hardware faults. Previously, the device could silently continue using weak or repeated random numbers if the RNG reported a seed error. Now it detects those error flags, tries a safe recovery a few times, and if the problem persists it stops with an error instead of producing bad randomness. Two keyboard drivers were also updated so a temporary RNG failure does not lock the user out before login.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validationboot or update path
AI analysis · High 70/100
This commit fixes a buffer-validation bug in the COLDCARD Mk4 bootloader's secure callgate. The old code checked memory ranges using simple addition (address + length), which can overflow and trick the device into treating an attacker-controlled buffer as safe. The patch replaces those checks with subtraction-based math that cannot overflow, and also rejects negative input lengths. A security review by Karma-X is credited with the finding.
bugfix: invalidate message signatures in Delta Mode
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundaryaccess controldefensive validationsigning or wallet path
AI analysis · Moderate 65/100
This update fixes a bug in the COLDCARD hardware wallet where signing a text message with the special 'Delta Mode' PIN would produce a signature that looked valid to anyone checking it. Delta Mode is a hidden feature that silently corrupts transaction signatures so attackers who force you to unlock your wallet cannot steal funds. The same protection was missing for message signatures, so an attacker could have tricked a victim into producing a seemingly valid signed message under duress. The fix makes message signatures produced in Delta Mode invalid, matching the existing behavior for transactions.