EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

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

90security candidates259second-pass queue1003AI analyses
131commits · 30 days
258commits · 60 days
541commits · 180 days
1001commits · 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.

66/100 average clarity
220Strong · 80–100
546Adequate · 60–79
339Thin · 40–59
44Opaque · 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.
ThomasV137891162
SomberNight39330362063
f321x40124385070
Sander van Grieken10910101057
ghost4341516070
Felix2439072
user323062
ekzyis222053
accumulator613071
Roman Zeyde515053
Sasha Zykov515075
Aaron Fiore414068
Analysis record

Published AI watches

Last scanned 6 minutes ago

Informational 15 AI analysisMessage 78 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10988 from f321x/update_security_review_ci_model

This commit updates Electrum's internal CI (continuous integration) script that runs an automated security review using Anthropic's Claude Code tool. It changes the AI model version used for reviews from 'claude-opus-5' to 'claude-opus-5-5…

CI hardening: detects and reports AI model downgrades during automated security reviewNo changes to application code, cryptography, network protocol, or build artifactsNo privilege escalation, injection, or data-exfiltration vectors introduced by the diff
638fbba8by Felix+75−111 file
No security note in commit
Informational 12 AI analysisMessage 90 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

ci: security review: warn if the model got downgraded

This commit updates Electrum's own CI security-review script. It adds detection and warnings when the automated code reviewer (Claude Code) silently falls back to a different AI model, for example after a content-policy refusal. It does no…

CI-only changeNo modification of wallet, crypto, networking, or build artifactsAdds detection for AI model fallback/downgrade in automated security review
ace2ca7aby f321x+74−101 file
No security note in commit
Low 44 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10987 from spesmilo/fix_10986

This commit fixes a bug where Electrum failed to recognize certain already-signed Bitcoin transactions as complete. Specifically, for native SegWit inputs, Bitcoin Core can produce a finalized PSBT with a valid witness but an empty scriptS…

Logic error in transaction completeness detectionNative SegWit witness handling edge casePSBT interoperability issue with Bitcoin Core
bef80421by ghost43+11−02 files
No security note in commit
Low 35 AI analysisMessage 81 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

transaction: treat native segwit input with non-empty witness as complete

This commit fixes a bug where Electrum incorrectly treated finalized Bitcoin transactions as incomplete. Some wallet software (like Bitcoin Core and Sparrow) creates native SegWit transactions that omit an empty placeholder field Electrum …

Logic error in transaction completeness detectionPotential denial of service / user funds stuck due to refusal to broadcast valid finalized transactionInteroperability failure with Bitcoin Core and Sparrow PSBT output
e9bb42e6by ThomasV+11−02 files
No security note in commit
Moderate 68 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10981 from spesmilo/do_not_sign_txin_with_witness

This change prevents Electrum from re-signing Bitcoin transaction inputs that already contain a witness (the data proving the input was authorized). The patch fixes a bug where Electrum could incorrectly sign a non-SegWit input as if it we…

Incorrect signature algorithm selection for non-SegWit inputs when witness data is presentPSBT handling edge case where pre-existing witness data influences signing pathPotential invalid signature production during transaction signing
9da4c342by ThomasV+10−21 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10974 from SomberNight/202609_nostr_psbt_xpub

This commit only adds a long code comment explaining a design choice in Electrum's PSBT-over-Nostr plugin. It does not change any program behavior. The comment documents that the plugin derives each cosigner's Nostr secret key from their B…

Documentation-only changeExplicit design tradeoff disclosure: cosigners can derive each other's Nostr secret keys from shared xpubsNo functional code change
46408a78by ThomasV+13−01 file
No security note in commit
Low 42 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10980 from spesmilo/add_input_from_network_do_not_ignore_exceptions

This is a one-line bugfix in Electrum's transaction handling. Previously, the code accidentally swallowed (hid) almost all exceptions when fetching extra transaction data from the network, only re-raising errors that were both network-rela…

Exception swallowing bug fixedNetwork/transaction input enrichment logic changedSilent failure mode removed
bb9d3280by ghost43+1−11 file
No security note in commit
Moderate 60 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10970 from f321x/fix_bolt11_bugs_2

This commit fixes several bugs in Electrum's handling of BOLT11 Lightning invoices. The most user-visible fixes are: stricter validation of invoice amounts (rejecting zero, negative, sub-millisatoshi, and leading-zero amounts), correct pad…

Stricter BOLT11 amount validation prevents acceptance of zero, negative, sub-millisatoshi, and leading-zero amountsFixed int_to_data5 padding bug that corrupted small timestamp values during invoice round-tripMalformed 'r' routing tags now raise exceptions instead of being silently skipped
4b92c0f2by ghost43+82−939 files
No security note in commit
Moderate 61 AI analysisMessage 80 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

add_info_from_network: do not swallow exceptions

Electrum's transaction builder had a bug where it would ignore certain consistency errors when fetching extra transaction data from the network. A malicious or misbehaving server could supply a wrong input amount, and Electrum would silent…

Swallowed exception leading to use of attacker-controlled input valuePSBT input consistency check bypassedPotential malicious Electrum server influence on transaction signing
3f67b21bby ThomasV+1−11 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

bolt11: remove tag arg from get_routing_info

This is a small code cleanup change. A function that reads routing hints from Lightning invoices no longer takes a tag argument because only one type of routing hint ('r') is now supported. All callers are updated accordingly. There is no …

e78fba28by f321x+12−127 files
No security note in commit
Moderate 62 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10940 from accumulator/fix_10937

This commit tightens how Electrum parses Bitcoin payment requests (BOLT11 lightning invoices and BIP21 URIs). It turns previously uncaught internal errors into proper validation failures, rejects malformed invoice fields that used to be si…

Stricter input validation for externally supplied BOLT11 invoices and BIP21 URIsPreviously uncaught exceptions (ValueError, UnicodeDecodeError, ecc errors) are now wrapped in domain-specific decode exceptionsMalformed fallback addresses are skipped rather than aborting or crashing
a57ef6e7by Felix+707−9610 files
No security note in commit
Low 40 AI analysisMessage 36 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

bolt11: followup #10940

This commit tightens how Electrum parses BOLT11 Lightning invoices. It now rejects duplicate 'n' (node pubkey) tags instead of silently keeping only the first one, and it rejects invoice timestamps that are negative or too far in the futur…

Stricter validation of invoice timestamp boundsDuplicate 'n' tag now raises an exception instead of being silently droppedFollow-up to prior PR #10940, indicating a recent area of security-sensitive review
3026fbdbby f321x+14−232 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10737 from sashazykov/hw-close-wallet-thread-leak

This commit fixes a shutdown bug in Electrum's hardware wallet support. Previously, if disconnecting from a hardware wallet failed, the cleanup thread could keep running, which could crash the application when closing. The fix stops the th…

Process abort/crash at shutdown due to leaked QThreadException during cleanup not handled, potentially causing abnormal terminationHardware wallet client close made best-effort with error logging
5b77ca46by Felix+9−22 files
No security note in commit
Informational 23 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10958 from SomberNight/202609_deps

This commit is a routine dependency update for the Electrum Bitcoin wallet. It bumps versions of Python, OpenSSL, secp256k1, and various Python packages used in builds and runtime. The commit itself does not fix any known security bug in E…

Dependency version bumps for cryptographic libraries (OpenSSL, libsecp256k1, electrum-ecc)Routine maintenance commit with no explicit security claimHash-only changes in deterministic requirements files
8bd8c3fbby ghost43+57−5612 files
No security note in commit
Informational 21 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10965 from SomberNight/202609_header_checkpoints

This commit only adds new Bitcoin block header checkpoints to Electrum's built-in chain data files. Checkpoints are hardcoded reference points that help the wallet verify it is following the real blockchain and not a fake one. Updating the…

Hardcoded blockchain checkpoints extended for all supported networksNo executable code or cryptographic logic changedNo bug fix, privilege change, or input validation change present
9e0b7e64by ghost43+276−04 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

update block header checkpoints

This commit simply refreshes Electrum's built-in list of Bitcoin blockchain checkpoints. Checkpoints are known-good block hashes that help the wallet verify it is following the real chain. The update adds newer checkpoints for mainnet, sig…

e11c579bby SomberNight+276−04 files
No security note in commit
Low 46 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10945 from accumulator/stale_utxo_data_fixes

This commit fixes cases where Electrum's wallet cache could hold onto outdated information about coins and transactions after blockchain reorganizations or mempool changes. For example, if a transaction was previously thought to be mined b…

stale cached state after reorg/mempool evictionincorrect confirmation metadata displayed to userscache invalidation added at multiple state transitions
e20b24c0by Felix+132−239 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

transaction: add set_mined_info setter to TxInput

This commit is a simple code cleanup: it replaces two repeated lines that set a transaction input's block height and position with a single helper method called set_mined_info. There is no change in behavior, no bug fix, and no security re…

61f71acbby f321x+7−73 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qt/util: consolidate short_id check pattern

This is a small internal code cleanup in the Electrum Bitcoin wallet. It moves the logic that builds a compact transaction identifier (like '123x4') into one shared helper method, and removes a duplicate helper class. There is no user-faci…

2af9e26aby f321x+7−133 files
No security note in commit
Informational 19 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

contrib: build appimage: fetch ca-certificates from pinned sources

This commit changes how the Electrum AppImage build container first obtains trusted web certificates. Because the build's pinned Debian package sources use HTTPS, the container needs certificates before it can talk to them. The old method …

build pipeline changetemporary downgrade from HTTPS to HTTP for package bootstrappackage integrity still protected by apt GPG signatures
fd687940by f321x+11−41 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.

AI review queuedtest_lnwallet: add unittest for single channel mpp split configby f321x · 14f7fa0b · Jul 28, 2026 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · f321x

test_lnwallet: add unittest for single channel mpp split config

Tests that all parts of a multi-part payment over a single channel
are constructed using the channel of the split configuration.

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

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 use that chosen channel rather than letting the pathfinder pick a different cheaper route. It is purely a test-case addition.

Lower-prioritytests: move ln graph definitions and prepare_invoice to lnhelpers.pyby f321x · e281a4c4 · Jul 28, 2026 · 2 filesMessage 83 · StrongInformational 15Details
Commit message · f321x

tests: move ln graph definitions and prepare_invoice to lnhelpers.py

This makes them reusable from test files other than test_lnpeer and
removes the deferred test_lnpeer import in prepare_chans_and_peers_in_graph.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit is purely a test-code refactoring: it moves Lightning Network test helpers (graph definitions and an invoice preparation function) from one test file to another shared helper file. There is no change to production code, no security fix, and no vulnerability introduced.

Lower-prioritylnwallet: use split config channel for single channel mppby f321x · bf1b4a1b · Jul 28, 2026 · 1 fileMessage 85 · StrongLow 30Details
Commit message · f321x

lnwallet: use split config channel for single channel mpp

Use the channel returned by the split config when sending a
single channel mpp (multiple parts on a single channel), instead
of allowing the pathfinding to use any channel.
Otherwise it can happen that we have a good split config fitting a
specific channel, but the pathfinding then tries to put both parts
on another channel that cannot handle the sum of the parts, raising
at _assert_can_add_htlc later on and failing the payment.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 30/100

This commit fixes a bug in Electrum's Lightning payment logic. When sending a payment split into multiple parts over a single channel, the app could previously ignore the intended channel and route all parts through a different channel that lacked enough capacity. That caused the payment to fail with an internal assertion error. The fix ensures the chosen channel from the split configuration is actually used.

Lower-prioritytests: check liquidity hints are updated for all htlcsby f321x · 2f82eca1 · Jul 27, 2026 · 2 filesMessage 60 · AdequateInformational 12Details
Commit message · f321x

tests: check liquidity hints are updated for all htlcs

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 12/100

This commit only adds new automated tests for Electrum's Lightning payment routing code. It checks that internal 'liquidity hints' correctly track in-flight payment parts and are cleaned up after multipart payments succeed or time out. There are no changes to production wallet code, so users are not directly affected by this patch.

Lower-prioritylnworker/lnrouter: update liquidity hints in htlc callbacksby f321x · b176c50a · Jul 27, 2026 · 2 filesMessage 73 · AdequateLow 34Details
Commit message · f321x

lnworker/lnrouter: update liquidity hints in htlc callbacks

Update the channel liquidity hints in the
`htlc_fulfilled`/`htlc_failed` callbacks instead of the htlc
log handler (`_process_htlc_log()`).
`_process_htlc_log()` would raise `PaymentSuccess()` on the first fulfilled
htlc, removing the inflight htlcs counted in `LiquidityHintMgr` only for this
htlc's route.
All other htlcs that arrive later would leak and not get removed anywhere,
so the inflight htlc counter didn't get decreased and successful routes
would be punished by the penalty.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 34/100

This commit fixes a bug in Electrum's Lightning payment routing. Previously, when a multi-part payment succeeded, only the first successful payment chunk properly updated the wallet's internal channel-liquidity bookkeeping. Later chunks were never cleaned up, so the wallet kept treating those routes as if they still had money in flight. Over time this could make the wallet wrongly avoid or penalize channels that had actually worked fine, degrading payment reliability. The fix moves the cleanup into the proper success/failure callbacks so every chunk is accounted for.

Lower-prioritytest_lnpeer: add unittest for mpp fee budget checkby f321x · 42cb99d0 · Jul 27, 2026 · 1 fileMessage 50 · ThinInformational 12Details
Commit message · f321x

test_lnpeer: add unittest for mpp fee budget check

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 12/100

This commit only adds a new automated test to Electrum's Lightning code. It checks that when a payment is split into multiple parts (MPP), the fee budget is correctly shared across all parts so total fees cannot exceed the budget. There is no change to production code, no bug fix, and no security patch in this commit itself.

Lower-priorityLNWallet: fix fee budget check regressionby f321x · fc407c39 · Jul 27, 2026 · 1 fileMessage 78 · AdequateModerate 63Details
Commit message · f321x

LNWallet: fix fee budget check regression

The fee budget during local pathfinding route creation incorrectly
compared the full payment amount against the full budget on every
route instead of the partial amount against its fraction of the budget.
This is a regression introduced by df5c8c4c9 and makes it possible
for a payment to exceed the budget or a route to be incorrectly considered
too expensive.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Moderate 63/100

This commit fixes a bug in Electrum's Lightning Network payment routing. When splitting a payment into multiple parts, the app was checking each partial route's fees against the entire payment's fee budget instead of that part's fair share. This could cause a payment to silently overspend on fees, or wrongly reject a valid route as too expensive. The fix makes each partial route responsible only for its proportional share of the fee budget.

Lower-priorityci: bump security review ci model to opus 5by Felix · 1334146d · Jul 27, 2026 · 1 fileMessage 77 · AdequateInformational 15Details
Commit message · Felix

ci: bump security review ci model to opus 5

Bump the LLM used by the security review CI script from Claude Opus 4.8 to Claude Opus 5

77/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
AI analysis · Informational 15/100

This commit simply changes the version string of an AI model used by an internal continuous-integration (CI) security-review script. It does not modify Electrum wallet code, cryptography, networking, or any user-facing behavior. There is no indication this introduces or fixes a security vulnerability.

Lower-priorityqt: rename color themes (the user-visible names of the themes)by SomberNight · 1408d6d4 · Jul 23, 2026 · 1 fileMessage 81 · StrongInformational 15Details
Commit message · SomberNight

qt: rename color themes (the user-visible names of the themes)

"Light" is actually the Platform-dependent system theme, where we let Qt define the palette and it leave it alone. Qt in turn mostly defers to the OS. On modern windows/macos/gnome/kde/etc, if the OS is set to "dark mode", Electrum will end up using a system-specific dark mode. Hence the name "Light" is confusing.

"Dark" is the qdarkstyle theme, which is largely platform-independent.

I think it's fine if these names are not completely "user-friendly".

closes https://github.com/spesmilo/electrum/issues/10767

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 analysis · Informational 15/100

This commit simply renames two color theme labels shown in Electrum's settings window. 'Light' is renamed to 'System' and 'Dark' is renamed to 'qdarkstyle' to better describe what each option actually does. There are no code logic changes, no security fixes, and no behavior changes beyond the visible text.

AI review queuedjson_db: set_modified after incomplete databy f321x · f75f1958 · Jul 21, 2026 · 2 filesMessage 80 · StrongLow 47Details
Commit message · f321x

json_db: set_modified after incomplete data

Set the JsonDB modified after `maybe_load_incomplete_data`
removed a corrupted patch. Otherwise we might not override
the file on disk, append more patches and lose them all again
on the next reload.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 47/100

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 updates might be appended to the still-corrupted file instead of replacing it, and those updates could be lost the next time the wallet was opened. The fix marks the wallet as modified after recovery so it gets rewritten cleanly. This is a data-loss bug, not a remote attack.

Lower-priorityjson_db: escape '\' and '~' in json patch pointerby f321x · 97007d9e · Jul 21, 2026 · 2 filesMessage 88 · StrongModerate 59Details
Commit message · f321x

json_db: escape '\' and '~' in json patch pointer

> Because the characters '~' (%x7E) and '/' (%x2F) have special
meanings in JSON Pointer, '~' needs to be encoded as '~0' and '/'
needs to be encoded as '~1' when these characters appear in a
reference token.

https://www.rfc-editor.org/info/rfc6901/

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
AI analysis · Moderate 59/100

This commit fixes a bug in how Electrum builds JSON Patch pointers when wallet data contains special characters like '/' or '~' in keys. Before the fix, these characters were not escaped, which could cause patch operations to target the wrong location in the wallet database or fail. The fix follows RFC 6901 by escaping '~' as '~0' and '/' as '~1'. This is a data-integrity bug in wallet storage synchronization, but the commit itself does not describe it as a security vulnerability.

AI review queuedwallet_db: register onion_keys converterby f321x · 5b2eb060 · Jul 21, 2026 · 2 filesMessage 58 · ThinLow 44Details
Commit message · f321x

wallet_db: register onion_keys converter

`Channel.onion_keys` had no registered converter for hex -> bytes, causing
`pop_onion_key()` to return a hex str instead of bytes after the keys
got loaded from db following a restart.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 44/100

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 cause payment error decoding to fail or behave incorrectly, potentially leading to misleading error reports or degraded handling of failed Lightning transactions. The patch registers a proper converter so the keys are loaded as bytes, and adds a warning log when decoding fails.

Security candidateqml: update ConfirmTxDialog onValidChangedby f321x · bd776e24 · Jul 14, 2026 · 1 fileMessage 58 · ThinInformational 18Details
Commit message · f321x

qml: update ConfirmTxDialog onValidChanged

Commit 2de11eac923d51befe44dcc748505714196a7f2c gated the
ConfirmTxDialog amount behind `finalizer.valid`.
When sweeping private keys from the sweep view the resulting
`ConfirmTxDialog` is not valid in the beginning, and after it
turns valid nothing causes it to update. This results in the amount
being displayed as `0` even after it finished fetching the keys balances.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 18/100

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 transaction became valid. The patch makes the dialog refresh its amount display when validity changes, so users see the correct amount before confirming. There is no security vulnerability here.

Lower-priorityswaps: destroy swap transport on failed initializationby f321x · c5a38e5a · Jul 14, 2026 · 2 filesMessage 85 · StrongLow 26Details
Commit message · f321x

swaps: destroy swap transport on failed initialization

Call `swap_transport.destroy()` when the swap transport initialization
task fails, otherwise the task will keep the swap transport tasks alive,
leaking a swap transport for each failed connection attempt.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 26/100

This commit fixes a resource leak in Electrum's submarine-swap feature. When a connection to a swap server failed to start, the program was not properly cleaning up the connection object, so each failed attempt could leave behind leftover background tasks and memory. The patch now explicitly destroys the failed transport object before discarding it. This is a reliability bug rather than an active security vulnerability, though resource leaks can in some cases contribute to denial-of-service conditions.

Lower-prioritylntransport: wrap connection errors in send_bytes_and_drainby SomberNight · 9ff2a566 · Jul 13, 2026 · 1 fileMessage 73 · AdequateLow 25Details
Commit message · SomberNight

lntransport: wrap connection errors in send_bytes_and_drain

LightningPeerConnectionClosed is handled in Peer.handle_disconnect.

```
162.39 | E | lnpeer.Peer.[LNGossip, 02ab5336d0-d8be58cb] | Exception in main_loop: ConnectionResetError('Connection lost')
Traceback (most recent call last):
File "/home/user/wspace/electrum/electrum/util.py", line 1218, in wrapper
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 544, in wrapper_func
return await func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 558, in main_loop
async with self.taskgroup as group:
^^^^^^^^^^^^^^
File "/home/user/wspace/aiorpcX/aiorpcx/curio.py", line 304, in __aexit__
await self.join()
File "/home/user/wspace/electrum/electrum/util.py", line 1423, in join
task.result()
~~~~~~~~~~~^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 897, in _message_loop
await self._process_message(msg)
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 277, in _process_message
await f(*args)
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 389, in on_ping
await self.transport.send_bytes_and_drain(raw_msg)
File "/home/user/wspace/electrum/electrum/lntransport.py", line 238, in send_bytes_and_drain
await self.writer.drain()
File "/usr/lib/python3.13/asyncio/streams.py", line 386, in drain
await self._protocol._drain_helper()
File "/usr/lib/python3.13/asyncio/streams.py", line 166, in _drain_helper
raise ConnectionResetError('Connection lost')
ConnectionResetError: Connection lost
```

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 25/100

This commit fixes a minor error-handling bug in Electrum's Lightning network code. When the program tried to send data over a peer connection that had already dropped, a low-level 'Connection lost' error was escaping instead of being converted into the expected 'peer disconnected' exception. The patch wraps the connection error so the rest of the program handles the disconnect cleanly. There is no indication this is a security vulnerability or that it can be exploited by an attacker.

Lower-priorityandroid build: fix prev: chown fresh_clone base dir before git cloneby SomberNight · 7785865c · Jul 13, 2026 · 1 fileMessage 50 · ThinInformational 11Details
Commit message · SomberNight

android build: fix prev: chown fresh_clone base dir before git clone

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 11/100

This is a build script fix for Electrum's Android build process. It changes how a temporary directory is cleaned up before a fresh git clone. The change adds a `chown` command so the build user can remove files owned by root, preventing build failures. There is no indication this is a security vulnerability fix.

AI review queuedqml: emit a single dataChanged when updating blockchain heightby f321x · fbe9e2d8 · Jul 13, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · f321x

qml: emit a single dataChanged when updating blockchain height

emit a single dataChanged signal over the whole model index range
once in `QETransactionListModel.updateBlockchainHeight()` instead
of emitting a separate signal for each transaction.

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 18/100

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 sending one signal per transaction. That reduces UI lag and log noise, but it does not fix a security vulnerability.

AI review queuedqml: don't compute notification balance delta for large tx batchesby f321x · 7b4759c5 · Jul 13, 2026 · 1 fileMessage 85 · StrongInformational 20Details
Commit message · f321x

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

Don't compute the wallet balance delta for the new tx notification
shown after synchronizing the wallet if the notification batch
exceeds 10 txs. Otherwise the calculation will block the UI, especially
for large wallets with many new txs after initial sync.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

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 interface for several seconds. The change simply shows a generic message like '25 new transactions' instead of a detailed balance delta.

AI review queuedqml: change event callback logs to debugby f321x · a6cc4e08 · Jul 13, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · f321x

qml: change event callback logs to debug

Change per-tx event callback logs to debug, might make the process
a bit less clogged if there are many txs.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

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.

AI review queuedqml: don't force-build address model from tx event handlersby f321x · 35fc4a13 · Jul 13, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · f321x

qml: don't force-build address model from tx event handlers

The addressCoinModel property getter lazily constructs
QEAddressCoinListModel, whose __init__ runs a full (slow) initModel().
Instead of initializing it on a new transaction, blocking the UI,
just initialize it lazily when the user actually opens it.
Same pattern as importAddresses/importPrivateKeys.

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 18/100

This is a performance and responsiveness fix for the Electrum mobile/QML wallet. It stops the app from doing heavy work (building the address coin list) every time a new transaction arrives, which was causing the user interface to freeze. Instead, the list is only built when the user actually opens it. There is no security vulnerability being fixed here.

AI review queuedqml: skip per-tx balance updates during syncby f321x · 54cccd4f · Jul 13, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · f321x

qml: skip per-tx balance updates during sync

During synchronization, new_transaction fires for every incoming tx and
each balanceChanged emit makes QML recompute the balance on the GUI
thread. The balance isn't shown anyway during sync.

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
AI analysis · Informational 18/100

This commit is a performance optimization for Electrum's mobile/QML user interface. It prevents the wallet balance from being recalculated and redrawn on every incoming transaction during synchronization, because the balance isn't shown during sync anyway. It is not a security fix and does not change how transactions are validated or stored.

AI review queuedqml: QETransactionListModel: add txid->row indexby f321x · 997e8a2d · Jul 13, 2026 · 1 fileMessage 68 · AdequateInformational 13Details
Commit message · f321x

qml: QETransactionListModel: add txid->row index

Add a txid -> model row index dict to `QETransactionListModel`
instead of re-iterating the `tx_history` list on each event
to find the tx item.
This noticeably unblocks the UI during sync of a large wallet.

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
AI analysis · Informational 13/100

This commit is a performance improvement for the Electrum mobile/QML wallet. It replaces repeated scanning of the transaction history list with a simple dictionary lookup (txid -> row index). There is no security-relevant change visible in the diff.

Lower-prioritycontrib/make_download: fix importsby SomberNight · 58ae11d8 · Jul 10, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · SomberNight

contrib/make_download: fix imports

not sure why this was not an issue before(?)
perhaps due to python version differences
```
$ ./contrib/make_download /home/user/wspace/electrum-web
Traceback (most recent call last):
File "/home/user/wspace/electrum/./contrib/make_download", line 17, in <module>
version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py')
^^^^^^^^^^^^^^
AttributeError: module 'importlib' has no attribute 'util'
```

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This is a trivial bug fix in a helper script used to build Electrum's download web page. The script was missing an import statement needed to access a Python utility module. Without the import, the script crashed immediately with an AttributeError. The change adds the missing import and has no security relevance.

AI review queuedqml: android on-screen keyboard submit trigger acceptedby Sander van Grieken · 5fe0a292 · Jul 9, 2026 · 1 fileMessage 50 · ThinInformational 18Details
Commit message · Sander van Grieken

qml: android on-screen keyboard submit trigger accepted

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

This commit tweaks the Android on-screen keyboard behavior in Electrum's QML wallet search screen. It sets the Enter key to 'Done' and hides the 'Create Wallet' button while the user is typing a search. There is no clear security problem here; it appears to be a minor user-interface fix to prevent accidental wallet creation while searching.

Lower-priorityrelease notes: bump 4.8.0 date for second attemptby SomberNight · 8c0adcda · Jul 8, 2026 · 1 fileMessage 76 · AdequateInformational 15Details
Commit message · SomberNight

release notes: bump 4.8.0 date for second attempt

We failed to get a full quorum to reproduce the prior git tag.
The android apks were problematic to reproducibly build.
should be fixed by https://github.com/spesmilo/electrum/pull/10739

here we go again

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit only changes a release date in the RELEASE-NOTES file from July 2, 2026 to July 8, 2026. It is a documentation-only update explaining that the previous release attempt did not achieve full reproducible-build quorum, particularly for Android APKs. There are no code changes and no security fix or vulnerability introduced in this commit.