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 rewrites how a Lightning wallet talks to Esplora block-explorer servers so that many status checks happen in parallel instead of one at a time. It is a performance/refactoring change. There is no direct evidence in the commit t…
Concurrency/timing change in transaction confirmation logicNew inconsistency check preserved when a previously-confirmed tx is reported unconfirmedAdded defensive error path for missing pre-fetched block status
This change stops the Electrum-based transaction sync client from downloading the very transaction that created an output it is watching. Previously, the client could request that transaction from Electrum, even though a transaction can ne…
Avoids unnecessary Electrum transaction.get requests for watched outputsReduces information disclosure to Electrum server about watched outpointsAdds regression test verifying request suppression
This change improves how the Lightning Dev Kit's Electrum and Esplora transaction-sync clients track watched Bitcoin transactions. Previously, the code ignored the script pubkey (the 'address' associated with a transaction) supplied when r…
Previously ignored `script_pubkey` argument in `register_tx` for transaction watchersElectrum script-history queries previously used an arbitrary transaction output, which could be OP_RETURN and therefore unindexed by some Electrum serversNew logic prefers caller-supplied script pubkey and falls back to non-OP_RETURN outputs
This commit changes how LDK stores pending event notifications. It adds serialization support for several event types that previously were not fully saved to disk, and introduces a helper method so the code can decide which events are wort…
Data-loss prevention: previously non-round-trippable event variants are now fully serialized, avoiding accidental event loss when users serialize Event queues themselvesState-consistency hardening: ChannelManager now explicitly skips events that describe non-surviving restart state, preventing replay of stale eventsDefensive assertion: debug builds assert that every persisted event round-trips to Some(event), catching serialization mismatches
This commit only adds documentation comments to two source files. It explains that certain funding-signing events can become stale if the underlying negotiation fails, and that callers may see specific harmless errors as a result. No code …
This commit removes a fixed-version pin for the honggfuzz fuzzing tool in a continuous-integration script. The project now uses the current release of honggfuzz instead of an older pinned version. There is no change to the actual Lightning…
This commit changes the Rust toolchain used in the continuous integration (CI) fuzzing job from a fixed older version (1.75) to the latest stable release. It is purely a build/test infrastructure change to fix a dependency compatibility is…
This commit makes a previously internal helper function public so that outside developers can build dummy-hop tails for blinded payment paths without recreating the logic themselves. It is an API usability change, not a fix for a known sec…
No security-relevant behavior change in the diffAPI visibility broadened from crate-public to publicCLTV expiry overflow check already present and unchanged
This change adds a safety check in a Bitcoin Lightning Network library (LDK). Previously, if the software tried to verify a peer's commitment signature before it had learned the peer's channel parameters, it could crash with a panic. Now i…
Defensive check added on peer-driven code path to prevent panicMissing counterparty_parameters could previously cause panic during commitment transaction constructionChannel closure returned instead of panic
This commit only changes the wording of an error message sent to peers when a commitment transaction fails validation. It replaces the vague phrase 'Failed to validate our commitment' with the clearer 'Received commitment failed validation…
This commit moves the checks that validate a counterparty's signatures on the holder's commitment and HTLC transactions out of the general channel code and into the signer module (InMemorySigner). Previously, these signature checks were do…
Moved signature validation from channel state machine into signer moduleAdded new tests that corrupt signatures and verify rejectionChanged error message from 'Invalid commitment tx signature from peer' / 'Invalid funding_created signature from peer' to 'Failed to validate our commitment'
This change fixes a Lightning channel splicing bug: when two peers temporarily disconnect during a splice, any half-finished signature the other side already sent is now discarded. Before the fix, that stale signature could be reused after…
State-invalidation bug in multi-step protocol (splice negotiation)Stale cryptographic signature not cleared on disconnectPotential reuse of old commitment state after reconnect
This fix prevents a Lightning channel from being accidentally force-closed. During a splice (a way to resize a payment channel), one side's initial signature could be kept in memory after the peers disconnected. If the peers later reconnec…
State inconsistency: in-memory buffered message not cleared on disconnectDuplicate message processing after reconnectionForce-close consequence for active Lightning channel
This commit is a simple rename of a public function from `matches_invoice_signing_pubkey` to `key_can_sign_invoice`, plus matching updates to its documentation, callers, tests, and changelog. No behavior changed. It is not a security fix.
This commit is a simple rename of a function and its documentation from matches_invoice_signing_pubkey to key_can_sign_invoice. No logic, behavior, or security properties changed. It is a follow-up code-review naming cleanup.
This commit adds a new public helper method, Offer::matches_invoice_signed_by (later renamed matches_invoice_signing_pubkey), that lets callers check whether an invoice signing key belongs to the recipient named by a BOLT 12 offer. It also…
Refactors existing BOLT 12 invoice-signing-pubkey validation into a reusable helperAdds public API to bind an invoice signing key to an offer recipientAdds unit tests for issuer-id vs. path-last-hop matching behavior
This commit is a feature enhancement for LDK's internal serialization macros. It allows developers to mark old protocol fields as 'retired' (reserved but no longer used) in more places, so those type numbers cannot be accidentally reused. …
TLV type-number reservation mechanism extended to more macro-generated code pathsPrevents accidental reuse of retired protocol field type numbersAvoids UnknownRequiredFeature decode failures for obsolete even-type fields
This commit is a test-only cleanup in the Lightning Dev Kit (LDK) Rust codebase. It removes low-level byte-level tests for splice failure events and replaces them with a single cross-version test that actually loads a 0.2 node with seriali…
Cross-version serialization compatibility test addedRemoval of byte-level tests that could not detect real 0.2 mismatchesNo production code changes
This commit only adds a code comment explaining an existing quirk: if a revoked old channel transaction contains two identical-looking payment forwards and the other side claims both, the software may only claim one upstream while letting …
Behavioral quirk in revoked-commitment HTLC resolution documentedDuplicate (payment_hash, amount) HTLCs can map to the same upstream sourcePotential missed upstream preimage claim on second identical HTLC
This commit fixes a state-handling bug in Lightning Dev Kit's splicing feature. When a user tries to speed up or replace a pending splice (an 'RBF' attempt) and the older splice transaction unexpectedly gets confirmed on-chain, the softwar…
State-conflict handling between confirmed splice candidate and active RBF negotiationStructured abort propagation through chain-event pathConditional abort based on holder signature progress to avoid unsafe cancellation
Reviewed-on: https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4839 Reviewed-by: Matt Corallo <matt@noreply.git.rust-bitcoin.org>
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
This commit adds a brand-new, optional crate called lightning-payer-proof to the rust-lightning workspace. It provides a public library (and separate UniFFI bindings) for verifying BOLT 12 'payer proofs' — cryptographic receipts that a Lightning payment was made. The change is purely additive: it introduces new code, test vectors, CI build entries, and workspace membership. There is no patch to existing logic and nothing in the commit message or diff indicates a security bug was fixed.
Lower-priorityMerge PR 'taproot gossip prefactor - dedup channel update construction in routing tests' (#4893)by Val Wallace · 179ff4ca · Aug 19, 2026 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Val Wallace
Merge PR 'taproot gossip prefactor - dedup channel update construction in routing tests' (#4893)
from dedup-chanupdate-tests into main
Reviewed-on: https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4893 Reviewed-by: Val Wallace <val@noreply.git.rust-bitcoin.org>
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
merge-commit duplicate discount
Lower-priorityMerge PR 'Add fundee-side test for queued splice failure filtering' (#4894)by jkczyz · d68c824a · Aug 17, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · jkczyz
Merge PR 'Add fundee-side test for queued splice failure filtering' (#4894)
✓ 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
merge-commit duplicate discount
Lower-priorityMerge PR 'Manually cache downloaded artifacts in forgejo actions' (#4877)by Matt Corallo · 42bd8db0 · Aug 14, 2026 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Matt Corallo
Merge PR 'Manually cache downloaded artifacts in forgejo actions' (#4877)
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
AI review queuedMerge PR 'Ban non-dust HTLCs if dust limit would be breached' (#4890)by Matt Corallo · b198733e · Aug 14, 2026 · 2 filesMessage 81 · StrongModerate 57Details
Commit message · Matt Corallo
Merge PR 'Ban non-dust HTLCs if dust limit would be breached' (#4890)
from 2026-08-ban-nondust-htlcs into main
Reviewed-on: https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4890 Reviewed-by: Matt Corallo <matt@noreply.git.rust-bitcoin.org>
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 pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Moderate 57/100
This change tightens how Lightning payment limits are calculated when transaction fees are high. Previously, the code could allow a non-dust HTLC (a payment large enough to normally appear on-chain) to be offered even when the combined dust-exposure risk pushed the channel past its safety limit. The patch lowers the allowed outbound amount by one millisatoshi in that edge case so the HTLC is treated as dust and rejected, preventing a situation where a miner-fee spike could make an HTLC uneconomical to claim on-chain. The practical effect is a small, defensive correction to fee-based channel safety logic.
Lower-priorityMerge PR 'Document current typing of funding transaction re-broadcasts' (#4889)by Matt Corallo · 65856dbd · Aug 14, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Matt Corallo
Merge PR 'Document current typing of funding transaction re-broadcasts' (#4889)
from 2026-08-txtype-docs into main
Reviewed-on: https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4889 Reviewed-by: Matt Corallo <matt@noreply.git.rust-bitcoin.org>
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
merge-commit duplicate discount
Lower-priorityAdd fundee-side test for queued splice failure filteringby Jeffrey Czyz · 13cee48e · Aug 14, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Jeffrey Czyz
Add fundee-side test for queued splice failure filtering
When a splice promotes with a conflicting queued RBF and the promoted candidate has no recorded local contribution, the queued failure is filtered against the candidate's funding transaction. The bug fixed in #4879 had a second manifestation on this path: a node that was the fundee of the original channel has no pre-splice funding transaction, so filtering against the swapped-in pre-splice scope panicked instead of emitting an incorrect DiscardFunding.
The test added there only covers the original funder, whose pre-splice funding transaction is present. Add a role-flipped variant so the fundee case, which previously panicked, has regression coverage.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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
Lower-priorityMerge PR 'Stop logging repeatedly why we're unable to send `stfu`' (#4883)by Matt Corallo · 6c341231 · Aug 13, 2026 · 1 fileMessage 93 · StrongTriage 0Details
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Filter queued splice failures before funding promotion
When a splice was promoted, the funding scope of the promoted candidate was swapped with the channel current funding scope before constructing the failure for a conflicting queued RBF contribution.
For a counterparty-only candidate without a recorded local contribution, `FundingComponentSet` falls back to the candidate funding transaction. After the swap, that candidate instead contained the pre-splice funding scope, so filtering used the original funding transaction rather than the promoted splice. This could emit `DiscardFunding` for an output that the confirmed splice had actually created, incorrectly telling the wallet that the output was reusable.
Identify the promoted candidate first and compute the queued splice failure while its funding transaction is still intact. Then remove and promote that candidate, and continue filtering discarded replacement rounds against the promoted transaction and the surviving queued contribution.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityMerge PR 'Add build_random_walk_probe_path for probe path construction' (#4842)by Matt Corallo · 8dfc1566 · Aug 12, 2026 · 1 fileMessage 86 · StrongTriage 0Details
Commit message · Matt Corallo
Merge PR 'Add build_random_walk_probe_path for probe path construction' (#4842)
from probe-random-walk-router into main
Reviewed-on: https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4842 Reviewed-by: Matt Corallo <matt@noreply.git.rust-bitcoin.org>
86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
AI review queuedCorrect 0.2.5 and 0.1.12 CHANGELOG entriesby Matt Corallo · 8322fc4e · Aug 11, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Matt Corallo
Correct 0.2.5 and 0.1.12 CHANGELOG entries
* The response panic issue is when accepting *onion messages* which merit a response, not HTLCs, * 0.1 was not vulnerable to the panic-on-reorg issue Kyle reported as it did not contain the new package merging logic.
73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
This commit only edits the project's CHANGELOG text. It corrects earlier release notes: one panic issue actually involved 'onion messages' (not HTLCs), and an older 0.1 release was not actually vulnerable to a reorg-related panic because it lacked the relevant code. No code behavior changes.
AI review queuedAdd 0.1.12 release notesby Matt Corallo · 9bc0dc50 · Aug 11, 2026 · 1 fileMessage 38 · OpaqueHigh 78Details
Commit message · Matt Corallo
Add 0.1.12 release notes
38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
This commit adds release notes for rust-lightning version 0.1.12, describing several security fixes. The most serious is an on-chain funds-theft vulnerability for nodes that forward Lightning payments through channels opened by untrusted peers. Other fixes address denial-of-service crashes, including cases involving invalid onion message reply paths, oversized protocol messages, reorgs during on-chain HTLC claims, and peer flooding of channel-open requests. The release notes credit Project Loupe and Kyle W. Santiago for reporting the security issues.
Lower-priorityMerge PR 'Silently convert staging option_zero_fee_commitments to current in channel types' (#4865)by Matt Corallo · 74485e7f · Aug 11, 2026 · 5 filesMessage 81 · StrongTriage 0Details
Commit message · Matt Corallo
Merge PR 'Silently convert staging option_zero_fee_commitments to current in channel types' (#4865)
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Informational 15/100
This commit is a routine cleanup that fixes Rust compiler warnings on the nightly toolchain. It replaces deprecated ways of writing maximum integer values (like `u64::max_value()` and `std::usize::MAX`) with the modern equivalents (`u64::MAX`, `usize::MAX`), adds a missing semicolon in a log statement, and updates related comments. These changes do not alter program behavior or fix any security issue.
Lower-priorityMerge PR 'Fix channel-order dependence in MPP fulfill reload test' (#4858)by Val Wallace · e49d527d · Aug 10, 2026 · 1 fileMessage 91 · StrongTriage 0Details
✓ 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
merge-commit duplicate discount
Lower-priorityNote `list_paginated_with_values` default impl relies on `NotFound`by Matt Corallo · 3895486b · Aug 10, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Matt Corallo
Note `list_paginated_with_values` default impl relies on `NotFound`
Not too long ago we removed the requirement that `KVStore`s correctly implement `NotFound`. The default `list_paginated_with_values` implementation, sadly, re-introduced that requirement, at least for default-implementation-users. Its worth calling this out explicitly in the docs, if for no other reason than to help LLMs.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context