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.
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
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
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
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
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
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
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)
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
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.
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.
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
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
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…
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
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
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…
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
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
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.
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. …
Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.
AI review queuedwallet_db: handle non-existing parent_set_key in v65by f321x · 73a03249 · Feb 20, 2026 · 1 fileMessage 73 · AdequateTriage 12Details
Commit message · f321x
wallet_db: handle non-existing parent_set_key in v65
Handles non-existing parent_set_key in _convert_version_65.
Fixes #10487
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqt: fix toolbar action exc in offline modeby f321x · 907fff46 · Feb 16, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x
qt: fix toolbar action exc in offline mode
Fix exception when clicking on "Donate to server" in offline mode by not showing the "Donate to server" menu action when no network is set.
Raise CancelledError in `fetch_bitcoin_paper` as `_fetch_tx_from_network` already shows an according error message so the second, subsequent error message shown by `on_error` is not useful if `_fetch_tx_from_network` already failed.
``` 63.53 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter Traceback (most recent call last): File "/home/user/Documents/electrum/electrum/gui/qt/main_window.py", line 864, in donate_to_server d = self.network.get_donation_address() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'get_donation_address' ```
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI review queuedwizard: fix exception when loading new tc walletby f321x · 3905f8d9 · Feb 11, 2026 · 2 filesMessage 88 · StrongTriage 0Details
Commit message · f321x
wizard: fix exception when loading new tc wallet
I tried to reproduce: https://github.com/spesmilo/electrum/issues/8815#issuecomment-2094259186 which triggered the following exception for me:
``` Traceback (most recent call last): File "/home/user/code/electrum-fork/electrum/gui/qt/__init__.py", line 409, in start_new_window window = self._create_window_for_wallet(wallet) File "/home/user/code/electrum-fork/electrum/gui/qt/__init__.py", line 329, in _create_window_for_wallet w = ElectrumWindow(self, wallet) File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 290, in __init__ self.load_wallet(wallet) ~~~~~~~~~~~~~~~~^^^^^^^^ File "/home/user/code/electrum-fork/electrum/util.py", line 495, in do_profile o = func(*args, **kw_args) File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 589, in load_wallet self.update_recently_opened_menu() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 741, in update_recently_opened_menu for i, k in enumerate(recent): ~~~~~~~~~^^^^^^^^ TypeError: 'NoneType' object is not iterable ```
This happens because the trustedcoin wallet is loaded outside of Daemon.load_wallet() so Daemon.update_recently_opened_wallets() is not getting called and config.RECENTLY:_OPEN_WALLET_FILES is still None when we try to iterate through it. As fix i now use load_wallet() instead of manually instantiating the Wallet and additionally handle RECENTLY_OPEN_WALLET_FILES being None in ElectrumWindow.update_recently_opened_menu().
My pull request https://github.com/spesmilo/electrum/pull/10121 would have sent this exception to the crash reporter so we might have noticed it earlier. I think we should not just catch all exceptions in the wizard like on master as it causes us to repeatedly miss regressions in the wizard that could be sent to the crash reporter.
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
Why it was queued
second-pass: broader security terminology
AI review queuedtests: add unittest for Abstract_Wallet.export_history_to_fileby f321x · a6a57f0f · Feb 3, 2026 · 8 filesMessage 95 · StrongTriage 12Details
Commit message · f321x
tests: add unittest for Abstract_Wallet.export_history_to_file
Adds unittest for Abstract_Wallet.export_history_to_file that compares the output against reference files. This should help to prevent regressions and ensure the layout of the export stays static over time.
95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedhistory export: make fees bitcoin, add hook, rm local txby f321x · e1dac558 · Feb 3, 2026 · 2 filesMessage 81 · StrongTriage 12Details
Commit message · f321x
history export: make fees bitcoin, add hook, rm local tx
Change fees from sats to bitcoin so the fee value is consistent with the other values. Fixes #10445
Also adds a plugin hook so plugins can create fancy history exports.
And stops adding unconfirmed/local transactions to the history as they are unordered and make the export non-deterministic. Also transactions that haven't happened yet don't seem useful for accounting.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedmove history export from HistoryList to Abstract_Walletby f321x · 68144588 · Feb 3, 2026 · 2 filesMessage 73 · AdequateTriage 12Details
Commit message · f321x
move history export from HistoryList to Abstract_Wallet
Moves the history export function to Abstract_wallet so it can be unittested and called from other places like the cli or QML too.
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 review queuedlnhtlc: remove unneeded non-initiator fee_update in logby ThomasV · 5767913e · Jan 28, 2026 · 3 filesMessage 50 · ThinTriage 12Details
Commit message · ThomasV
lnhtlc: remove unneeded non-initiator fee_update in log
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 review queuedcontrib: minor clean-up shell usageby SomberNight · ceadcac9 · Jan 23, 2026 · 2 filesMessage 45 · ThinTriage 12Details
Commit message · SomberNight
contrib: minor clean-up shell usage
45/100 · ThinMessage clarity
✓ 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 review queuedcontrib/add_cosigner: fix for python 3.13by SomberNight · b495ee77 · Jan 23, 2026 · 1 fileMessage 80 · StrongTriage 12Details
Commit message · SomberNight
contrib/add_cosigner: fix for python 3.13
This script used to work, I assume my breakage is due to the python version.
``` Traceback (most recent call last): File "/home/user/wspace/electrum/./contrib/add_cosigner", line 35, in <module> version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py') ^^^^^^^^^^^^^^ AttributeError: module 'importlib' has no attribute 'util' ```
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 review queuedqt: fix: addresses tab broken for imported watchonly walletsby SomberNight · 0e07128c · Jan 23, 2026 · 2 filesMessage 91 · StrongTriage 12Details
Commit message · SomberNight
qt: fix: addresses tab broken for imported watchonly wallets
regression from https://github.com/spesmilo/electrum/pull/10376
91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedupdate block header checkpointsby SomberNight · 08fa871f · Jan 22, 2026 · 4 filesMessage 35 · OpaqueTriage 12Details
Commit message · SomberNight
update block header checkpoints
35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI review queuedupdate localeby ThomasV · d9091784 · Jan 22, 2026 · 1 fileMessage 18 · OpaqueTriage 0Details
Commit message · ThomasV
update locale
18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
AI review queuedwallet: check swap provider liquidity for send change to lnby f321x · 7b828a83 · Jan 22, 2026 · 1 fileMessage 85 · StrongTriage 12Details
Commit message · f321x
wallet: check swap provider liquidity for send change to ln
Check the swap providers liquidity as well if we try to send change to lightning in `make_unsigned_transaction`. It is now expected that the swap_manager is already initialized when calling `make_unsigned_transaction`, otherwise no dummy output will get added.
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 review queuedwallet: stop() to clean-up lnworker even in offline modeby SomberNight · 15067be5 · Jan 20, 2026 · 1 fileMessage 50 · ThinTriage 12Details
Commit message · SomberNight
wallet: stop() to clean-up lnworker even in offline mode
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 review queuedqml: PasswordDialog: show error on invalid passwordby f321x · 07f61ebd · Jan 20, 2026 · 3 filesMessage 85 · StrongTriage 12Details
Commit message · f321x
qml: PasswordDialog: show error on invalid password
Currently the PasswordDialog on QML would just close if the user enters an incorrect password. This is confusing as the user doesn't know why the dialog closed and if it initiated any action or not.
With the change the PasswordDialog will get the ability to show an error message and will show "Invalid Password" if an incorrect password is entered. I also used it for the password unification warning ("Need to enter similar password ...") instead of showing a separate popup.
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: broader security terminologysecond-pass: security-sensitive path
AI review queuedqml: QEDaemon.setPassword to restore invariant wallets are unlockedby SomberNight · 6d9ec728 · Jan 19, 2026 · 2 filesMessage 73 · AdequateTriage 12Details
Commit message · SomberNight
qml: QEDaemon.setPassword to restore invariant wallets are unlocked
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedwallet: minor clean-up and sanity checks for unlock/lockby SomberNight · 91f286b4 · Jan 19, 2026 · 1 fileMessage 81 · StrongTriage 12Details
Commit message · SomberNight
wallet: minor clean-up and sanity checks for unlock/lock
- unlock() did not handle password=="" well instead of the caller converting the arg, as in https://github.com/spesmilo/electrum/commit/7113cec4c724c2a443031c71cc8d08fee5e2f385, it is more robust for the function itself to do it - get_unlocked_password() should never return an invalid password - add is_unlocked()
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
This must be an old regression. The GUI was not allowing to open a wallet that did not have a password set: it prompted for a password and did not accept any string (should at least accept empty "").
Without this, it was only possible to open a passwordless wallet if that was the first wallet the user opened (as otherwise we would overwrite the empty pw with the pw of the current wallet).
90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI review queuedtests: add TestLNWallet to test lnwallet utilsby f321x · 562839c5 · Jan 8, 2026 · 1 fileMessage 70 · AdequateTriage 12Details
Commit message · f321x
tests: add TestLNWallet to test lnwallet utils
Adds new unittest file test_lnwallet.py to allow unittesting utility functions of LNWallet.
70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqt: WalletInfoDialog: sort keystores by root fingerprintby f321x · fb96ba41 · Jan 8, 2026 · 1 fileMessage 73 · AdequateTriage 12Details
Commit message · f321x
qt: WalletInfoDialog: sort keystores by root fingerprint
Sort the keystore tabs of the WalletInfoDialog by their root fingerprints. This makes it less confusing when looking at different wallet instances of the same multisig setup as the tabs will always have the same order.
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 review queuedAddressSynchronizer: invalidate balance cache on spvby f321x · 663fcddc · Jan 7, 2026 · 1 fileMessage 85 · StrongTriage 8Details
Commit message · f321x
AddressSynchronizer: invalidate balance cache on spv
There was a race incorrectly counting transactions with one confirmations to the unconfirmed balance instead of the confirmed balance. This happened because the balance cache of AddressSynchronizer got invalidated after `on_event_blockchain_updated` and then again after `receive_history_callback`->`add_transaction`, however when calling `AddressSynchronizer.get_balance()` before the tx got spv verified the height would still be counted as 0 (unconfirmed), populating the balance cache again with the unconfirmed balance. I noticed this only on QML due to timing differences to Qt. Invalidating the cache in `AddressSynchronizer.add_verified_tx()` after the tx got verified causes the balance to get recalculated and shown correctly.
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
These better hold, lol: wallet.lnworker.wallet == wallet lnworker.wallet.lnworker == lnworker
75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedlnworker: split LNWallet and LNWorker: LNWallet "has an" LNWorkerby SomberNight · 1006e809 · Jan 5, 2026 · 17 filesMessage 83 · StrongTriage 12Details
Commit message · SomberNight
lnworker: split LNWallet and LNWorker: LNWallet "has an" LNWorker
- LNWallet no longer "is-an" LNWorker, instead LNWallet "has-an" LNWorker - the motivation is to make the unit tests nicer, and allow writing unit tests for more things - I hope this makes it possible to e.g. test lnsweep in the unit tests - some stuff we would previously have to write a regtest for, maybe we can write a unit test for, now - in unit tests, MockLNWallet now - inherits LNWallet - the Wallet is no longer being mocked
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
The done_callback for the callback tasks in _run_htlc_switch_iteration tried to access mpp_sets by key but they might already have been deleted when the callback is called, causing an KeyError. Instead forward the exceptions to the crash reporter so we get notice of them and they get logged correctly.
``` 20251219T131356.946565Z | ERROR | asyncio | Exception in callback Peer._run_htlc_switch_iteration.<locals>.<lambda>(<Task finishe.../util.py:1773>) at /home/user/code/electrum-fork/electrum/lnpeer.py:2907 handle: <Handle Peer._run_htlc_switch_iteration.<locals>.<lambda>(<Task finishe.../util.py:1773>) at /home/user/code/electrum-fork/electrum/lnpeer.py:2907 created at /usr/lib64/python3.14/asyncio/events.py:94> source_traceback: Object created at (most recent call last): File "/usr/lib64/python3.14/threading.py", line 1082, in _bootstrap_inner self._context.run(self.run) File "/home/user/code/electrum-fork/electrum/util.py", line 1145, in run_with_except_hook run_original(*args2, **kwargs2) File "/usr/lib64/python3.14/threading.py", line 1024, in run self._target(*self._args, **self._kwargs) File "/home/user/code/electrum-fork/electrum/util.py", line 1705, in run_event_loop loop.run_until_complete(stopping_fut) File "/usr/lib64/python3.14/asyncio/base_events.py", line 706, in run_until_complete self.run_forever() File "/usr/lib64/python3.14/asyncio/base_events.py", line 677, in run_forever self._run_once() File "/usr/lib64/python3.14/asyncio/base_events.py", line 2038, in _run_once handle._run() File "/usr/lib64/python3.14/asyncio/events.py", line 94, in _run self._context.run(self._callback, *self._args) Traceback (most recent call last): File "/usr/lib64/python3.14/asyncio/events.py", line 94, in _run self._context.run(self._callback, *self._args) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/code/electrum-fork/electrum/lnpeer.py", line 2909, in <lambda> f"{self.lnworker.received_mpp_htlcs[pk]=}", exc_info=t.exception()) if t.exception() else None ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^ KeyError: '0000980000010001:1' ```
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI review queuedqml: OpenWalletDialog: load any wallet if password matchesby f321x · aee0f8fb · Dec 18, 2025 · 5 filesMessage 73 · AdequateTriage 12Details
Commit message · f321x
qml: OpenWalletDialog: load any wallet if password matches
If the user has wallets with different passwords (non-unified pw) and enters a password on startup that fails to unlock the recently used wallet this change will automatically open any other wallet if there is another wallet that can be unlocked with this password.
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: broader security terminologysecond-pass: security-sensitive path