LDK
← All projectsLightning Dev Kit

rust-lightning

Composable Rust libraries for building Lightning wallets, nodes, and services.

BitcoinCryptographic librariesLightning NetworkNormal
Repository coverage

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

249security candidates223second-pass queue1517AI analyses
88commits · 30 days
195commits · 60 days
565commits · 180 days
1307commits · 365 days
Backfill bands
Aug 5 → Feb 6819 seen18 candidatesComplete
Feb 6 → Jun 6468 seen16 candidatesComplete
Jun 6 → Jul 6128 seen8 candidatesComplete
Jul 6 → Aug 561 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.

70/100 average clarity
470Strong · 80–100
830Adequate · 60–79
293Thin · 40–59
62Opaque · 0–39
3security 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.
Elias Rohrer15315153667
Matt Corallo43452370574
Jeffrey Czyz19545182169
Wilmer Paulino15945155169
Leo Nash11613116162
Valentine Wallace14010135169
Vincenzo Palazzo11311183
Joost Jager16224162069
elnosh371331057
auto-pr-bot2478087
shaavan22622069
Carla Kirk-Cohen78366068
Analysis record

Published AI watches

Last scanned 41 minutes ago

Informational 19 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'tx-sync: Parallelize esplora status queries' (#4913)

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
c303f515by Matt Corallo+140−371 file
No security note in commit
Low 30 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Skip Electrum creator transaction downloads' (#4992)

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
c36e50cbby Matt Corallo+142−02 files
No security note in commit
Low 44 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Use preferred sPK of watched txn in electrum, not rand ones' (#4867)

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
bfe5ca89by tnull+52−243 files
No security note in commit
Low 33 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Serialize transient Event variants; move persist decision into ChannelManager' (#4791)

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
a0d4632eby Matt Corallo+694−818 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Document that funding signing events can go stale' (#4960)

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 …

26eecf2dby Matt Corallo+15−02 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Drop the honggfuzz version pin from the CI fuzz job

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…

4a1635efby auto-pr-bot+1−51 file
No security note in commit
Informational 15 AI analysisMessage 86 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Run the CI fuzz job on the stable toolchain

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…

21c4ed2bby auto-pr-bot+3−32 files
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Expose the dummy-hop tail constructor publicly

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
c5443353by auto-pr-bot+14−71 file
No security note in commit
Moderate 54 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Fail commitment sig verification without counterparty params

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
de7ecc2fby auto-pr-bot+24−01 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Clarify the commitment validation failure message

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…

3284a006by auto-pr-bot+11−114 files
No security note in commit
Moderate 61 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Move holder commit sig checks to `InMemorySigner`' (#4885)

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'
83f5ba55by Matt Corallo+626−31024 files
No security note in commit
Low 42 AI analysisMessage 86 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Drop stale splice signature on disconnect' (#4954)

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
c9a77251by Matt Corallo+22−12 files
No security note in commit
Moderate 58 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Drop stale splice signature on disconnect

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
71405b4bby Wilmer Paulino+22−12 files
Vendor flagged security relevance
Informational 20 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'offers: rename matches_invoice_signing_pubkey to key_can_sign_invoice' (#4942)

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.

a476cf92by Matt Corallo+13−133 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

offers: rename matches_invoice_signing_pubkey to key_can_sign_invoice

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.

388187caby Vincenzo Palazzo+13−133 files
No security note in commit
Informational 18 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'offers: add Offer::permits_invoice_signed_by' (#4884)

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
016af8f9by Matt Corallo+81−135 files
No security note in commit
Low 29 AI analysisMessage 85 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Support retired TLV fields in object-constructing macros

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
6d7c2bdaby Jeffrey Czyz+120−222 files
No security note in commit
Informational 17 AI analysisMessage 91 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Replace splice failure wire tests with a 0.2 downgrade test

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
80f2b44fby auto-pr-bot+95−2663 files
No security note in commit
Low 28 AI analysisMessage 98 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Document duplicate HTLC handling on revoked commitments

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
c5bd8b11by auto-pr-bot+19−01 file
Vendor flagged security relevance
Moderate 60 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Abort active splice RBF when prior candidate confirms

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
7587d2cdby Wilmer Paulino+623−424 files
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-priorityAllow invalid contribution error upon quiescenceby Wilmer Paulino · 68c1f21a · Jul 2, 2026 · 1 fileMessage 68 · AdequateInformational 19Details
Commit message · Wilmer Paulino

Allow invalid contribution error upon quiescence

While a contribution may be valid at the time the splice is requested,
quiescence still needs to happen, which can affect the balances of the
channel as it fully settles all pending state. After doing so, it's
possible that the contribution is no longer valid. Since quiescence
itself doesn't have a terminal message, we see a `WarnAndDisconnect`
event happen.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100

This commit updates a fuzz test (a randomized testing harness) to accept one additional warning message when the test framework expects a peer disconnection. The new message, 'contribution no longer valid at quiescence,' is treated as a normal, non-fatal outcome of the splicing/RBF protocol when channel balances settle before the splice proceeds. It is a test-only change and does not alter production code behavior.

Lower-priorityAlways emit SpliceNegotiationFailed when contributingby Wilmer Paulino · 367c657a · Jul 2, 2026 · 2 filesMessage 73 · AdequateLow 32Details
Commit message · Wilmer Paulino

Always emit SpliceNegotiationFailed when contributing

Previously, this could result in an acceptor not receiving a
`Event::SpliceNegotiationFailed` for a splice in which they reused the
same contribution (except for the feerate change). Our API should
guarantee that users should always see `SpliceNegotiated` and
`SpliceNegotiationFailed` events for splices that they contribute to.

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

This patch fixes a bug in Lightning Dev Kit's splicing feature where a channel participant (the 'acceptor') could fail to receive a notification when a splice negotiation they contributed to fell through. Without that notification, the user's wallet software would not know it could safely unlock and reuse the funds it had set aside for the splice. The fix ensures both sides always get a SpliceNegotiationFailed event when a splice they contributed to fails, even if their exact same inputs/outputs were reused from a previous round.

AI review queuedOnly emit Event::SpliceNegotiated when contributingby Wilmer Paulino · 2334a200 · Jul 2, 2026 · 5 filesMessage 73 · AdequateInformational 19Details
Commit message · Wilmer Paulino

Only emit Event::SpliceNegotiated when contributing

There's no need to inform users of negotiated splices when they're not
contributing as it just produces noise. Once they do start contributing,
they cannot stop, so we always emit the event going forward. Note that
we still emit `Event::ChannelReady` with the new locked funding outpoint
for each locked splice, so users can still learn that a splice occurred
that way.

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

This commit changes when users of the Lightning Dev Kit library are notified about a 'splice'—a way to resize a Lightning channel's on-chain funding. Previously both sides got an event when a splice was negotiated. Now only the side that actually added or removed money (a 'local contribution') gets the event. The other side still learns about the locked splice later through a different event. This is a user-interface cleanup, not a security fix, and does not change how funds are protected.

Lower-priorityln: add awaiting_trampoline_forwards to accumulate inbound MPPby Carla Kirk-Cohen · bfb4acb8 · Jul 2, 2026 · 1 fileMessage 95 · StrongLow 30Details
Commit message · Carla Kirk-Cohen

ln: add awaiting_trampoline_forwards to accumulate inbound MPP

When we are a trampoline router, we need to accumulate incoming HTLCs
(if MPP is used) before forwarding the trampoline-routed outgoing
HTLC(s). This commit adds a new map in channel manager, and mimics the
handling done for claimable_payments.

We will rely on our pending_outbound_payments (which will contain a
payment for trampoline forwards) for completing MPP claims,
not want to surface `PaymentClaimable` events for trampoline,
so do not need to have pending_claiming_payments like we have for MPP
receives.

This map is not persisted, as we're currently working on refactoring
restart logic to depend on channel monitors. We should not use this
accumulation map in production yet, as we can hit a force close if:
- We are used as a trampoline, despite not supporting the feature
- A trampoline MPP part arrives and is committed to the inbound channel
and added to `awaiting_trampoline_forwards`
- We restart and the MPP part is not re-added to
`awaiting_trampoline_forwards`

In this scenario, we will not hit our MPP timeout logic for this HTLC
because we have "forgotten" about it. It will be up to our counterparty
to force close the channel on us, because we're not failing it back
after we hit MPP timeout. Likewise, even if other MPP parts arrive,
we won't consider the inbound accumulation to be complete so we'll fail
them back but forget about the HTLC that came before the restart.

We currently reject trampoline HTLCs earlier in the lifecycle, so we
are not at risk of producing a state that could trigger such a force
close. In the commits that follow, we'll allow forwarding of
trampoline HTLC for tests so that we can start to cover this code.

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
AI analysis · Low 30/100

This commit adds a new internal bookkeeping map for a not-yet-enabled feature called trampoline routing. The commit itself is defensive: it documents that the new map is intentionally not saved to disk and warns that using it in production could cause a channel force-close after a restart. Because the feature is currently rejected earlier in the code path, the commit says the risky state cannot be reached today. It is best read as a work-in-progress foundation rather than an active vulnerability.

Lower-priorityln: use outer onion values for trampoline NextPacketDetailsby Carla Kirk-Cohen · 52f2394a · Jul 2, 2026 · 1 fileMessage 85 · StrongModerate 60Details
Commit message · Carla Kirk-Cohen

ln: use outer onion values for trampoline NextPacketDetails

When we receive trampoline payments, we first want to validate the
values in our outer onion to ensure that we've been given the amount/
expiry that the sender was intending us to receive to make sure that
forwarding nodes haven't sent us less than they should.

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
defensive validation
AI analysis · Moderate 60/100

This change fixes how trampoline-style Lightning payments decide how much money and when (time lock) to forward to the next hop. Previously the code used values from the inner trampoline onion, which could differ from what the forwarding node actually received in the outer onion. Now it uses the outer onion values, so a forwarding node cannot silently pay the next hop less than it should while still satisfying the inner trampoline instructions. This prevents a potential fee/amount mismatch in multi-hop trampoline routing.

Lower-priorityln: store next trampoline amount and cltv in PendingHTLCRoutingby Carla Kirk-Cohen · e14a28dd · Jul 2, 2026 · 2 filesMessage 73 · AdequateLow 29Details
Commit message · Carla Kirk-Cohen

ln: store next trampoline amount and cltv in PendingHTLCRouting

When we're forwarding a trampoline payment, we need to remember the
amount and CLTV that the next trampoline is expecting.

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

This commit changes how Lightning trampoline payments are tracked internally. It stores the amount and expiry time that the next trampoline hop expects, so the node remembers them when forwarding a payment. The change looks like a correctness fix for trampoline routing rather than a typical security bug, but without the surrounding code it is hard to tell whether the missing fields previously caused fee or expiry mismatches that could be exploited.

Lower-priorityln: use outer onion values in PendingHTLCInfo for trampolineby Carla Kirk-Cohen · c58d1d83 · Jul 2, 2026 · 1 fileMessage 85 · StrongModerate 59Details
Commit message · Carla Kirk-Cohen

ln: use outer onion values in PendingHTLCInfo for trampoline

When we are a trampoline node receiving an incoming HTLC, we need access
to our outer onion's amount_to_forward to check that we have been
forwarded the correct amount. We can't use the amount in the inner
onion, because that contains our fee budget - somebody could forward us
less than we were intended to receive, and provided it is within the
trampoline fee budget we wouldn't know.

In this commit we set our outer onion values in PendingHTLCInfo to
perform this validation properly. In the commit that follows, we'll
start tracking our expected trampoline values in trampoline-specific
routing info.

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

This commit fixes a bug in how trampoline routing nodes validate incoming Lightning payments. Previously, the node used values from the inner (trampoline) onion, which included the fee budget, to check whether it received the correct amount. A malicious or buggy upstream node could forward less money than intended, and as long as the shortfall stayed within the fee budget, the trampoline node would not detect it. The patch makes the node use the outer onion's stated amount instead, so it can verify it actually received what it was supposed to before forwarding.

Lower-priorityln: store incoming mpp data in PendingHTLCRoutingby Carla Kirk-Cohen · a1260ed1 · Jul 2, 2026 · 2 filesMessage 68 · AdequateLow 25Details
Commit message · Carla Kirk-Cohen

ln: store incoming mpp data in PendingHTLCRouting

When we receive a trampoline forward, we need to wait for MPP parts to
arrive at our node before we can forward the outgoing payment onwards.
This commit threads this information through to our pending htlc struct
which we'll use to validate the parts we receive.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Low 25/100

This commit is a small code change that stores extra multi-path payment (MPP) information when a trampoline forward is received. It appears to be a preparatory step for validating incoming payment parts before forwarding them onward. There is no direct evidence in the commit that this fixes an active security vulnerability; it reads more like internal plumbing for an unfinished feature.

Lower-priorityln: use total_msat to calculate the amount for our next trampolineby Carla Kirk-Cohen · 3e162db9 · Jul 2, 2026 · 1 fileMessage 85 · StrongModerate 59Details
Commit message · Carla Kirk-Cohen

ln: use total_msat to calculate the amount for our next trampoline

For regular blinded forwards, it's okay to use the amount in our
update_add_htlc to calculate the amount that we need to foward onwards
because we're only expecting on HTLC in and one HTLC out.

For blinded trampoline forwards, it's possible that we have multiple
incoming HTLCs that need to accumulate at our node that make our total
incoming amount from which we'll calculate the amount that we need to
forward onwards to the next trampoline. This commit updates our next
trampoline amount calculation to use the total intended incoming amount
for the payment so we can correctly calculate our next trampoline's
amount.

`decode_incoming_update_add_htlc_onion` is left unchanged because
the call to `check_blinded` will be removed in upcoming commits.

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

This commit fixes a bug in how the Lightning Dev Kit calculates the amount to forward when acting as a trampoline node for blinded multi-path payments. Previously, the code used the amount from a single incoming payment packet, which could be too small when several partial payments are meant to combine. The fix uses the intended total payment amount instead, preventing the node from rejecting or misrouting trampoline forwards that arrive in multiple pieces.

Security candidateln: remove incoming trampoline secret from HTLCSourceby Carla Kirk-Cohen · 816b866d · Jul 2, 2026 · 1 fileMessage 85 · StrongInformational 23Details
Commit message · Carla Kirk-Cohen

ln: remove incoming trampoline secret from HTLCSource

We don't need to track a single trampoline secret in our HTLCSource
because this is already tracked in each of our previous hops contained
in the source. This field was unnecessarily added under the belief that
each inner trampoline onion we receive for inbound MPP trampoline would
have the same session key.

It can be removed with breaking changes to persistence because we
currently refuse to decode trampoline forwards, and will not read
HTLCSource::Trampoline to prevent downgrades.

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
update trust
AI analysis · Informational 23/100

This commit removes a redundant 32-byte shared secret field from an internal data structure used when forwarding trampoline payments in the Lightning Dev Kit. The developers realized the secret was already stored inside each previous hop's data, so keeping a single copy at the top level was unnecessary. The change also updates serialization so older saved state cannot be cleanly loaded, but the code currently refuses to decode trampoline forwards anyway, so that downgrade risk is intentional and noted.

Lower-priorityln/refactor: use amount_msat and counterparty_skimmed_fee_msat varsby Carla Kirk-Cohen · 53ce5590 · Jul 2, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Carla Kirk-Cohen

ln/refactor: use amount_msat and counterparty_skimmed_fee_msat vars

Followup from prefactor PR.

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

This is a small code cleanup that replaces two computed expressions with variables already available in scope. It does not change behavior, fix a bug, or address any security issue.

AI review queuedFix Joost's Forgejo usernameby Elias Rohrer · ade3b6bd · Jul 2, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Elias Rohrer

Fix Joost's Forgejo username

Use the account name present on this Forgejo instance so Joost stays
in the reviewer rotation.

Co-Authored-By: HAL 9000

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

This commit simply corrects a username in an automated reviewer assignment workflow. It changes one reviewer handle from 'joost_spiral' to 'joostjager' so the right person stays in the rotation. There is no security issue here.

Security candidateUse Forgejo OIDC for review requestsby Elias Rohrer · 57c84bca · Jul 2, 2026 · 1 fileMessage 73 · AdequateInformational 19Details
Commit message · Elias Rohrer

Use Forgejo OIDC for review requests

Request a local Authorized Integration JWT in the reviewer workflow.

Use bearer authorization for the reviewer request API call.

This avoids a long-lived user token.

The workflow still gets the missing reviewer-request capability.

Co-Authored-By: HAL 9000

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
access controlsigning or wallet path
AI analysis · Informational 19/100

This commit changes the project's automated reviewer-assignment workflow to stop using a long-lived secret token and instead request a short-lived authentication token from the Forgejo CI service. This is a security-hardening improvement: it reduces the risk that a stolen or leaked long-lived token could be misused. There is no indication of an active vulnerability being fixed, and the change itself does not introduce obvious new weaknesses.

Lower-priorityUpdate upstream CHANGELOG with latest 0.1/0.2 releasesby Matt Corallo · d2b3a786 · Jul 2, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Matt Corallo

Update upstream CHANGELOG with latest 0.1/0.2 releases

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the CHANGELOG.md file to add release notes for versions 0.2.4, 0.1.11, 0.2.3, and 0.1.10. It does not change any source code, build scripts, tests, or configuration. The changelog text describes security fixes that were already made in earlier commits, but this documentation-only commit itself does not introduce or fix any vulnerability.

Lower-priorityReduce LSPS5 reset cooldownby Elias Rohrer · 773c08ac · Jul 2, 2026 · 3 filesMessage 58 · ThinLow 25Details
Commit message · Elias Rohrer

Reduce LSPS5 reset cooldown

Allow LSPS5 peer lifecycle events to clear webhook notification
cooldowns again after 100ms. This keeps rapid reconnect churn
throttled while avoiding multi-second delays between legitimate
wake-up opportunities.

Preserve subsecond precision in LSPSDateTime elapsed-time calculation
so the new interval is enforced as configured.

Co-Authored-By: HAL 9000

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Low 25/100

This commit shortens a rate-limiting cooldown in the LSPS5 webhook notification system from 10 seconds down to 100 milliseconds, and fixes a time-calculation bug that previously dropped sub-second precision. The change is described by the authors as a tuning fix to avoid multi-second delays for legitimate wake-up notifications while still throttling rapid reconnect churn. There is no direct evidence in the commit that this is a security vulnerability fix, but the affected code is a denial-of-service/amplification throttle, so any weakening of it has defensive-security relevance.

Lower-priorityfuzz: add explicit local force-close opsby Joost Jager · 2ede7212 · Jul 1, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Joost Jager

fuzz: add explicit local force-close ops

Add a small HTLC-free force-close slice to the chanmon consistency
harness. The new opcodes close one known channel on each peer link and
track which channels are expected to close.

Use the close tracker to reject untracked channel loss while accepting
stale post-close errors and cleanup generated by explicitly closed
channels. Later harness API calls skip tracked-closed channels so normal
channel APIs are not called after modeling a local close.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes a fuzzing test harness (chanmon_consistency.rs). It adds new test operations that simulate local force-closing of channels and tracks which channels are expected to close so the harness can reject unexpected channel losses. There is no change to production code, user-facing behavior, or real wallet/channel logic, so it does not introduce or fix a security vulnerability in the software itself.

Lower-priorityfuzz: inline chanmon finish invariantsby Joost Jager · c468bb82 · Jun 30, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Joost Jager

fuzz: inline chanmon finish invariants

Move the final chanmon consistency invariant checks into
Harness::finish so the checks can read harness state directly.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit is a minor internal refactoring of a fuzz test file. It moves a small helper function's contents directly into the place where it was called, changing a loop over three hard-coded nodes into a generic loop. There is no change to production code, no change to security behavior, and no fix for a vulnerability.

Lower-priorityfuzz: factor chanmon finish cleanup helperby Joost Jager · a4d8301f · Jun 30, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Joost Jager

fuzz: factor chanmon finish cleanup helper

Move the finish-time relay and mining loop into a helper so the
harness has a single cleanup path for relayed transactions.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit is a simple code cleanup inside a fuzz testing harness. It moves an existing loop that relays and mines transactions into a new helper function, then calls that helper from the existing 'finish' method. No behavior changes are visible in the diff, and the code is not part of the production Lightning library that real users would run.

Security candidatefuzz: add chanmon holder signer fuzz opsby Joost Jager · 6ae2634e · Jun 30, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Joost Jager

fuzz: add chanmon holder signer fuzz ops

Allow chanmon consistency fuzz inputs to block holder-side signer
operations and retry monitor-driven claim signing. The new commands
extend the existing signer-op blocking machinery to the holder
commitment and holder HTLC transaction paths.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundaryfuzzing or regression evidence
AI analysis · Informational 15/100

This commit only adds new fuzz-testing commands to an existing test harness. It lets the fuzzer temporarily block and then re-enable the local node's own signing operations during simulated channel failures. There is no change to production code, user-facing behavior, or real wallet security.

Lower-priorityExplicitly state rust toolchain in forgejo actionsby Matt Corallo · 05c9ef04 · Jun 29, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Matt Corallo

Explicitly state rust toolchain in forgejo actions

Forgejo doesn't expand env/matrix arguments in the names it prints
for steps in actions, so we have to be explicit. We also have a lot
of jobs where we really don't need an env indirection for two
lines that reference it.

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

This commit is a cosmetic cleanup of CI workflow files. It replaces environment variables like TOOLCHAIN with the literal Rust version names (e.g., 'stable', 'beta', '1.75') in step titles and commands so that Forgejo's CI logs display meaningful names. No code behavior changes, no security fix or vulnerability introduced.

Lower-priorityTweak default merge message somewhatby Matt Corallo · 693c478a · Jun 29, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Matt Corallo

Tweak default merge message somewhat

I hate how long the title ends up being when you include the full
branch name in it, so move it to the next line.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit adds a template file that controls the default message shown when merging pull requests on a Forgejo code hosting instance. It only changes the formatting of merge commit messages and has no security relevance.

AI review queuedFix lightning-invoice bitcoin dependency versionby Daniel Roberts · fbc22051 · Jun 29, 2026 · 1 fileMessage 68 · AdequateInformational 20Details
Commit message · Daniel Roberts

Fix lightning-invoice bitcoin dependency version

`lightning-invoice` since 743f43fcfd5acba55242792ed1e9337f2ab52858 will
not build against `rust-bitcoin` older than v0.32.7.

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

This commit is a routine packaging fix. It updates the minimum required version of the rust-bitcoin library for the lightning-invoice crate from 0.32.4 to 0.32.7 because the code no longer compiles against older 0.32.x releases. It does not change any application logic, cryptographic operations, or network behavior, and there is no indication it fixes a security vulnerability.

Lower-priorityFor now disable all windows + macos CI runs until we have runnersby Matt Corallo · b86d2b33 · Jun 28, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Matt Corallo

For now disable all windows + macos CI runs until we have runners

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

This commit simply turns off Windows and macOS automated build tests in the project's CI configuration because the necessary test machines ('runners') are not currently available. It does not change any actual Lightning code, cryptography, networking, or user-facing behavior.

Security candidatePin actions/checkout + actions/cache to a full URL and commit hashby Matt Corallo · 3a56fcc2 · Jun 28, 2026 · 6 filesMessage 73 · AdequateInformational 18Details
Commit message · Matt Corallo

Pin actions/checkout + actions/cache to a full URL and commit hash

Reference the checkout action by its explicit data.forgejo.org URL
pinned to a commit hash (v6) rather than the bare `actions/checkout@v4`
short form.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
access control
AI analysis · Informational 18/100

This commit hardens the project's automated build and test scripts by replacing loose version tags like 'actions/checkout@v4' with exact commit hashes served from a specific domain. This prevents a compromised or renamed third-party action from silently injecting malicious code into the project's CI runs. It is a defensive security improvement, not a fix for an active bug or breach.

Lower-priorityUse preinstalled rustup instead of curling the installerby Matt Corallo · c897a448 · Jun 28, 2026 · 5 filesMessage 81 · StrongInformational 15Details
Commit message · Matt Corallo

Use preinstalled rustup instead of curling the installer

rustup is already present in the runner image, so replace every
`curl https://sh.rustup.rs | sh ...` toolchain install with a plain
`rustup default <toolchain>`, which installs the toolchain if needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 is a routine cleanup of the project's automated build scripts. It replaces the practice of downloading and running the Rust installer from the internet with using the Rust toolchain manager (rustup) that is already installed on the build machines. There is no security vulnerability here; it is a maintenance and reliability improvement.