EL
← All projectsElectrum

Electrum

Long-running lightweight Bitcoin wallet for desktop and mobile platforms.

BitcoinSoftware walletsNormal
Repository coverage

927 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.

65security candidates205second-pass queue280AI analyses
57commits · 30 days
111commits · 60 days
457commits · 180 days
926commits · 365 days
Backfill bands
Aug 5 → Feb 6470 seen11 candidatesComplete
Feb 6 → Jun 6346 seen10 candidatesComplete
Jun 6 → Jul 653 seen2 candidatesComplete
Jul 6 → Aug 554 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.

65/100 average clarity
192Strong · 80–100
410Adequate · 60–79
286Thin · 40–59
39Opaque · 0–39
2security 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.
ThomasV72219156
SomberNight35126114063
f321x37121104070
Sander van Grieken981030057
user322062
Roman Zeyde512053
Sasha Zykov413076
Aaron Fiore411068
Ferdinando Ametrano111096
Felix200075
Oren201043
Ilya Artemov200050
Analysis record

Published AI watches

Last scanned 22 minutes ago

Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10791 from SomberNight/202608_wallet_sign_message2

This change moves the trimming of leading/trailing spaces in message-signing fields from the user-interface code into the shared wallet code. For the graphical interfaces (Qt and QML), spaces are still stripped automatically for convenienc…

Behavior change in message signing/verification input handlingCLI now preserves whitespace, which could affect signature validity for messages that intentionally contain leading or trailing whitespaceNo memory-safety, cryptographic, or authentication flaw visible in the diff
b1aa52d7by ghost43+27−185 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: strip whitespaces in GUIs, do not strip in CLI

This commit tidies up how Electrum handles extra spaces around Bitcoin addresses, messages, and signatures when signing or verifying messages. Previously, different parts of the program (desktop GUI, mobile-style GUI, command line) behaved…

Behavior normalization across GUI and CLI interfacesNo cryptographic primitive changedNo privilege boundary crossed
4c3064f5by SomberNight+27−185 files
No security note in commit
Informational 22 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: nicer error msg if pubkey is unrelated

This commit improves the error handling in Electrum's message decryption feature. Previously, if a user tried to decrypt a message using a public key that did not belong to their wallet, the code could proceed and likely fail with a confus…

Input validation added for public key before cryptographic operationUser-facing exception replaces potential internal failureDefensive check prevents use of unrelated key material
92e938f4by SomberNight+5−01 file
No security note in commit
Low 29 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: force kwargs

This commit changes how Electrum's message-signing function is called so that callers must explicitly name each argument (address, message, password) rather than passing them by position. The main practical effect is to prevent accidental …

API hardening: keyword-only arguments prevent positional argument swapNo explicit security bug fix or vulnerability disclosure in commit message or diffNo changes to cryptographic logic, password handling, or message parsing
e1eb2a34by SomberNight+9−44 files
No security note in commit
Low 39 AI analysisMessage 45 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: consolidate checks from UIs

This commit moves input-validation checks for signing, verifying, encrypting, and decrypting messages out of the user-interface code and into the shared wallet logic. It also adds type checks so that non-text inputs are rejected earlier. T…

Input validation moved from UI controllers into core wallet logicType checks added at the CLI command entry points for message-crypto operationsUserFacingException used consistently for address, wallet, script-type, and key-format errors
48893760by SomberNight+89−396 files
No security note in commit
Low 27 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: consolidate checks from UIs

This commit moves input-validation and wallet-type checks for message decryption out of the user-interface and command-line layers and into the core wallet code. It also removes a faster, separate decryption path for imported wallets so al…

Input validation consolidated into a single core methodWatching-only wallet check moved from UI to wallet layerMultisig wallet unsupported-operation check moved from UI to wallet layer
9a0cc0d6by SomberNight+25−173 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add encrypt_message method, consolidated from UIs

This commit is a simple code cleanup: it moves the message-encryption logic from two separate places (the command-line tool and the Qt graphical interface) into a single shared method on the wallet class. The actual encryption behavior is …

No change to cryptographic primitives or parametersNo change to trust boundaries or input sourcesPure refactor consolidating duplicate code
5e9c8df0by SomberNight+26−183 files
No security note in commit
Informational 13 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add verify_message method, consolidated from UIs

This commit is a routine code cleanup: it moves message-signature verification out of three user-interface files into a single shared helper method in the wallet module. There is no security-relevant behavior change visible in the diff. Th…

No security-relevant functional changeRefactoring only: code deduplicationException handling broadened safely (ValueError covers binascii.Error and unicode errors)
ff5bbb04by SomberNight+26−304 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: strip whitespace from message before signing, as in qt gui

This commit fixes a minor consistency bug in Electrum's newer QML (mobile-style) user interface. When signing a message, the app now removes accidental spaces at the start or end of the message and address, just like the older desktop Qt i…

Behavioral inconsistency between GUI implementations could cause user confusion or failed verificationNo cryptographic weakness introduced; change is input normalizationNo memory-unsafe code, no privilege changes, no network changes
72507328by Ferdinando Ametrano+3−01 file
No security note in commit
Moderate 52 AI analysisMessage 93 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

lnwallet: don't blacklist htlc failures without channel update

This change fixes how Electrum's Lightning wallet reacts when a payment route fails but the failing node no longer provides a channel update message, as now allowed by the Lightning protocol spec. Previously, Electrum would permanently bla…

Denial-of-service via over-blacklisting: prior behavior could cause legitimate channels to be blacklisted, degrading payment success and potentially isolating the wallet from usable routes.Spec compliance fix: aligns Electrum with updated Lightning BOLT protocol behavior.No cryptographic bypass or funds theft signal: the change is about routing policy, not key leakage or transaction authorization.
a865e336by f321x+48−142 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

hww/qt: followup 898a4c270

This commit simply renames an internal variable from `dialog_label` to `_dialog_label` to mark it as private. It is a minor code cleanup with no visible behavior change and no security relevance.

f3af41deby f321x+4−41 file
No security note in commit
Low 25 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

trezor: drop session after closing it

This commit fixes a bug in Electrum's support for Trezor hardware wallets. After a Trezor session times out or is closed, Electrum now forgets the old session ID. Previously it kept the stale session ID, so the next attempt to sign a trans…

Fixes a stale-session reference that caused InvalidSessionError on re-authenticationEnsures PIN re-prompt after session timeout/closureFailure mode was denial-of-service (transaction signing crash), not unauthorized signing
071b1e24by f321x+8−51 file
No security note in commit
Informational 12 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

test_lnwallet: add unittest for unchanged channel update from failed htlc

This commit only adds a new unit test to Electrum's Lightning wallet test suite. It checks that when a payment fails due to a temporary lack of liquidity (TEMPORARY_CHANNEL_FAILURE) and the accompanying channel policy update is identical t…

Lightning payment routing failure handling behavior is being testedTEMPORARY_CHANNEL_FAILURE no longer (or is confirmed not to) blacklist channels when the channel update is unchangedLiquidity hints are used as an alternative to blacklisting for retry amounts
1f5b9adbby f321x+61−21 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

test_lnwallet: add unittest for single channel mpp split config

This commit adds a new automated test to the Electrum project. It does not change any production wallet or Lightning code. The test verifies that when Electrum splits a multi-part payment across a single channel, all payment parts actually…

14f7fa0bby f321x+22−01 file
No security note in commit
Low 47 AI analysisMessage 80 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

json_db: set_modified after incomplete data

This commit fixes a bug in Electrum's wallet storage recovery. If a wallet file was partially corrupted (a 'patch' was cut off mid-write), the app could recover the old data but then fail to mark the wallet as changed. As a result, later u…

Data-loss / integrity failure in wallet storage recovery pathMissing dirty flag after fallback data recoveryAppend-only storage file not rewritten after corruption cleanup
f75f1958by f321x+22−12 files
No security note in commit
Low 44 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet_db: register onion_keys converter

This commit fixes a bug in Electrum's Lightning wallet database handling. After a wallet restart, a specific type of encryption key used in Lightning payments was being loaded as a text string instead of raw bytes. This mismatch could caus…

Type confusion between str and bytes in cryptographic key handlingLightning payment error path affected after wallet restartMissing data converter in wallet database layer
5b2eb060by f321x+2−02 files
No security note in commit
Informational 18 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

qml: update ConfirmTxDialog onValidChanged

This is a small user-interface fix for the Electrum mobile/QML app. When sweeping private keys, the confirmation dialog that shows how much money will be moved initially displayed an amount of 0 because it did not refresh after the transac…

bd776e24by f321x+3−01 file
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: emit a single dataChanged when updating blockchain height

This change is a performance cleanup in Electrum's mobile/QML user interface. When the wallet learns that the Bitcoin blockchain has grown taller, it now refreshes the transaction list with a single 'everything changed' signal instead of s…

No security-relevant logic changePerformance/efficiency optimization onlyNo input validation, parsing, cryptography, or network changes
fbe9e2d8by f321x+8−41 file
No security note in commit
Informational 20 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: don't compute notification balance delta for large tx batches

This commit is a performance fix, not a security patch. It stops the Electrum mobile/QML wallet from calculating the total balance change when more than 20 new transactions arrive at once, because that calculation could freeze the user int…

No security-relevant signal present in the diff or commit messagePerformance/DoS mitigation against accidental UI freezing from large transaction batches
7b4759c5by f321x+5−21 file
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: change event callback logs to debug

This commit simply changes two logging messages from 'info' level to 'debug' level in the mobile/QML wallet interface. It reduces routine log output when many transactions occur. There is no security-relevant change.

a6cc4e08by f321x+2−21 file
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-priorityqt: ElectrumGui: repr(UserFacingException) -> str()by f321x · 2c541d26 · Mar 23, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · f321x

qt: ElectrumGui: repr(UserFacingException) -> str()

Show UserFacingException in ElectrumGui.start_new_window
as str() to the user, ther doesn't seem to be a good reason
to show its repr?

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidatewizard: catch NotLegacySinglesigScriptTypeby f321x · 543b73be · Mar 23, 2026 · 1 fileMessage 71 · AdequateInformational 21Details
Commit message · f321x

wizard: catch NotLegacySinglesigScriptType

Catch NetLegacySinglesigScriptType and convert it to a
UserFacingException if the user tries to import a private key for which
it is not possible to get a singlesig descriptor (e.g. p2wsh).

Fixes #10536

71/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
secret or key material
AI analysis · Informational 21/100

This commit fixes a bug in Electrum's wallet setup wizard. Previously, if a user tried to import an individual private key for an unusual script type (like p2wsh), the wizard would crash with an internal error instead of showing a friendly message saying it's not supported. The fix catches that internal error and converts it into a user-facing message. It is a robustness improvement, not a fix for a security vulnerability that allows theft or remote attacks.

Lower-prioritypem.py, x509.py: rm unused codeby SomberNight · 3e3f595e · Mar 20, 2026 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · SomberNight

pem.py, x509.py: rm unused code

now that bip70 support is removed, all this is only used to check expiration of self-signed electrum server certs in interface.py

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedrm bip70 supportby SomberNight · 42ad18b2 · Mar 20, 2026 · 20 filesMessage 69 · AdequateInformational 19Details
Commit message · SomberNight

rm bip70 support

- could not find a single project that still actually cares about bip70 [0]
- well except maybe BitPay.
- but I cannot test with BitPay:
- they have a testnet3 staging environment on test.bitpay.com
- but the SSL cert they use for bip70 has expired in 2021
- the webUI probably also has not been updated since then...
- they claim to have added LN support in 2022 in a blog post,
but it's not there on test.bitpay.com
- on mainnet, they require KYC before payment
- < ... angry noises >
- their loss then, I don't care.
- this is code that no one wants to maintain

- this does not yet delete the signed bip70 payment data for historical txs
- but it is no longer possible to export it from the GUI

[0]: https://bitcoinops.org/en/topics/bip70-payment-protocol/

69/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: broader security terminologysecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 19/100

This commit removes the BIP70 payment protocol from Electrum. BIP70 was the feature that let users pay merchants who sent signed payment requests (like BitPay invoices). The change deletes the code that fetched, verified, and sent those requests, along with the RSA and protobuf code that only BIP70 used. It is a feature-removal cleanup, not a security patch, and it does not introduce a vulnerability.

Lower-priorityinterface.py: rm broken dead codeby SomberNight · baf9a1d9 · Mar 20, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · SomberNight

interface.py: rm broken dead code

As it's failing due to relative imports, this might have been broken since py2->py3 migration.
```
$ python3 ./electrum/interface.py
Traceback (most recent call last):
File "/home/user/wspace/electrum/./electrum/interface.py", line 31, in <module>
import asyncio
File "/usr/lib/python3.13/asyncio/__init__.py", line 8, in <module>
from .base_events import *
File "/usr/lib/python3.13/asyncio/base_events.py", line 18, in <module>
import concurrent.futures
File "/usr/lib/python3.13/concurrent/futures/__init__.py", line 8, in <module>
from concurrent.futures._base import (FIRST_COMPLETED,
...<9 lines>...
as_completed)
File "/usr/lib/python3.13/concurrent/futures/_base.py", line 7, in <module>
import logging
File "/home/user/wspace/electrum/electrum/logging.py", line 6, in <module>
import logging.handlers
ModuleNotFoundError: No module named 'logging.handlers'; 'logging' is not a package
```

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityinterface.py: rm dead codeby SomberNight · fa6deb8d · Mar 20, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · SomberNight

interface.py: rm dead code

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritymv os.urandom sanity check to main __init__.pyby SomberNight · dceece1c · Mar 20, 2026 · 2 filesMessage 60 · AdequateTriage 0Details
Commit message · SomberNight

mv os.urandom sanity check to main __init__.py

cool check but I am going to delete rsakey.py

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI review queuedfixup prevby SomberNight · 2ea8d115 · Mar 20, 2026 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · SomberNight

fixup prev

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a tiny one-line code cleanup. It adds quote marks around a type hint name so the code does not need that class to be imported at module load time. It does not change what the program does or fix any security problem.

AI review queuedqt, qml: for new transaction notifications, instead of using sign, explicitly say sent/received. For multiple transactions, split summary in total sent/received and a balance change.by Sander van Grieken · 03e95acc · Mar 20, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Sander van Grieken

qt, qml: for new transaction notifications, instead of using sign, explicitly say sent/received.
For multiple transactions, split summary in total sent/received and a balance change.

move duplicated code to wallet.get_user_notifications_for_new_txns()

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a user-interface cleanup, not a security fix. It changes how Electrum's desktop and mobile-style GUIs describe new transactions in pop-up notifications: instead of showing a positive or negative number with a plus/minus sign, the notification now explicitly says 'sent' or 'received'. It also moves duplicated notification-building code from the two GUI layers into a shared wallet method. There is no evidence this change addresses a vulnerability.

Lower-priorityadb.get_spender: subscribe to outputs explicitly, instead of as a side effectby ThomasV · b19820dc · Mar 19, 2026 · 3 filesMessage 65 · AdequateTriage 0Details
Commit message · ThomasV

adb.get_spender: subscribe to outputs explicitly, instead of as a side effect

This allows to subscribe only if we need it (for channel closing tx and htlcs)

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-priorityfollow-up #10442by ThomasV · 01d017cd · Mar 19, 2026 · 1 fileMessage 51 · ThinTriage 0Details
Commit message · ThomasV

follow-up #10442

this assert fails if we do not have the preimage

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Lower-priorityadd more options to list_channelsby ThomasV · 46803695 · Mar 19, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · ThomasV

add more options to list_channels

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityswaps: make SwapManager.percentage Decimalby f321x · f56e6318 · Mar 19, 2026 · 5 filesMessage 68 · AdequateTriage 0Details
Commit message · f321x

swaps: make SwapManager.percentage Decimal

If SwapManager.percentage was a 0.2 float, rounding differences would
cause an exception in the fee calculation inverse sanity check when entering 20
000 sats into the SwapDialog. By making self.percentage a decimal we can
prevent this kind of issue.

```
File "/home/user/code/vibecoding_vm/electrum/electrum/gui/qt/swap_dialog.py", line 294, in on_send_edited
recv_amount = self.swap_manager.get_recv_amount(send_amount, is_reverse=self.is_reverse)
File "/home/user/code/vibecoding_vm/electrum/electrum/submarine_swaps.py", line 1320, in get_recv_amount
if abs(send_amount - inverted_send_amount) > 1:
~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'
```

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytrampoline: allow trampoline onion packets of arbitrary sizeby ThomasV · 558f8529 · Mar 19, 2026 · 5 filesMessage 50 · ThinTriage 0Details
Commit message · ThomasV

trampoline: allow trampoline onion packets of arbitrary size

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityqt: PluginsDialog: add link to websiteby f321x · efca1cc5 · Mar 17, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x

qt: PluginsDialog: add link to website

Adds a link to the plugins.electrum.org website so users who open the
plugins dialog out of curiosity get guided to the website and can
discover other plugins and learn more about the system.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityswapserver: cli: skip pending swaps in history commandsby f321x · 022a1bf0 · Mar 16, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · f321x

swapserver: cli: skip pending swaps in history commands

skip pending swaps in the swapserver history/summary cli commands.
They are not relevant and don't contain all required informations yet.

Fixes https://github.com/spesmilo/electrum/issues/10521
Fixes https://github.com/spesmilo/electrum/issues/10525

```
 File "/home/electrum/electrum-fork/electrum/daemon.py", line 268, in handle
   response['result'] = await f(*params)
                        ^^^^^^^^^^^^^^^^
 File "/home/electrum/electrum-fork/electrum/daemon.py", line 381, in run_cmdline
   result = await func(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/electrum/electrum-fork/electrum/commands.py", line 207, in func_wrapper
 File "/home/electrum/electrum-fork/electrum/commands.py", line 2349, in func_wrapper
   group = parser.add_argument_group('network options')
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/electrum/electrum-fork/electrum/plugins/swapserver/__init__.py", line 79, in get_summary
   swap_history = await get_history(self)
                  ^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/electrum/electrum-fork/electrum/commands.py", line 207, in func_wrapper
 File "/home/electrum/electrum-fork/electrum/commands.py", line 2349, in func_wrapper
   group = parser.add_argument_group('network options')
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/electrum/electrum-fork/electrum/plugins/swapserver/__init__.py", line 60, in get_history
   'date': swap['date'].strftime("%Y-%m-%d"),
           ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'strftime'
```

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedtests: move qml stuff to tests/qml/by SomberNight · 44e99bc1 · Mar 16, 2026 · 5 filesMessage 55 · ThinInformational 15Details
Commit message · SomberNight

tests: move qml stuff to tests/qml/

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only reorganizes test files. It moves QML-related unit tests from the tests/ folder into a new tests/qml/ subfolder and updates import paths accordingly. No production code, user-facing behavior, or security-sensitive logic was changed.

Lower-priorityswaps: rm until filter when fetching server pairsby f321x · 88c7a731 · Mar 16, 2026 · 1 fileMessage 88 · StrongTriage 0Details
Commit message · f321x

swaps: rm until filter when fetching server pairs

The `until` filter would limit the relay to only send us events created
up until this timestamp. If the user opens a swap transport by opening
the swap dialog, and keeps the dialog open the dialog will naturally age
above this limit and the relay will stop sending the client swapserver
events as they have (legitimately) been created after this timestamp.

As sanity check we still have the comparison against the current
timestamp in the event parsing loop to prevent pre/backdating.

Fixes https://github.com/spesmilo/electrum/issues/10520

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Lower-priorityqt: SwapServerDialog: resize server list with dialogby f321x · ffd25928 · Mar 16, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · f321x

qt: SwapServerDialog: resize server list with dialog

Waste less space in the dialog by limiting the stretch to 10px and
resize the servers_list with the dialog by setting stretch=1 so it can
be made larger.

Fixes https://github.com/spesmilo/electrum/issues/10519

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedtests: move revealer and timelock_recovery stuff to tests/plugins/by SomberNight · b397ddb0 · Mar 16, 2026 · 4 filesMessage 60 · AdequateInformational 15Details
Commit message · SomberNight

tests: move revealer and timelock_recovery stuff to tests/plugins/

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only moves existing test files for two Electrum plugins (Revealer and Timelock Recovery) into a new tests/plugins/ directory. The code itself is unchanged; it is purely a reorganization of the project's test suite.

Lower-priorityplugins: timelock_recovery: move checksum func to base classby SomberNight · c2f37294 · Mar 16, 2026 · 3 filesMessage 75 · AdequateTriage 0Details
Commit message · SomberNight

plugins: timelock_recovery: move checksum func to base class

don't import qt from tests unless it is qt being tested

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Lower-prioritytests: timelock_recovery plugin: add test vector for checksum from bipby SomberNight · 907ceb9f · Mar 16, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · SomberNight

tests: timelock_recovery plugin: add test vector for checksum from bip

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only adds a new test case to the Electrum test suite. It verifies that a checksum function used by the timelock_recovery plugin produces a known, expected output for an example taken from a Bitcoin improvement proposal (BIP). No production code was changed, and there is no security fix or vulnerability introduced.

AI review queuedtest_checksum_non_asciiby Oren · 8c5af52c · Mar 15, 2026 · 1 fileMessage 18 · OpaqueInformational 12Details
Commit message · Oren

test_checksum_non_ascii

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 12/100

This commit adds a new automated test to verify that a checksum function correctly handles non-ASCII characters (like accented letters, Chinese, Japanese, Arabic, and Hebrew text). It does not change any production code. The test ensures that special characters are kept as-is rather than being converted to Unicode escape sequences before hashing. This is a quality-assurance change, not a security fix or vulnerability.

Lower-priorityFix checksum following BIP-128 standardby Oren · 2f3f397a · Mar 15, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Oren

Fix checksum following BIP-128 standard

Non-Ascii characters should not be converted for
checksum calculation.
This will give consistent hash to BIP-128 and its
Javascript code example.

Timelock-Recovery Plans that contained only ascii
characters are not affected.

Also, 8 hex-chars is enough for a checksum.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytests: lnpeer: uncomment testcase: test_modern_shutdown_no_overlapby SomberNight · 1c24c613 · Mar 12, 2026 · 1 fileMessage 75 · AdequateTriage 0Details
Commit message · SomberNight

tests: lnpeer: uncomment testcase: test_modern_shutdown_no_overlap

This test case has always been disabled, but looks like the justification is easy to fix.

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification