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 simply adds a new person's PGP public-key fingerprint to the list of trusted release signers in two documentation files. It does not change any code, fix any bug, or alter any security behavior of the software itself.
This is a tiny internal fix to make a bookkeeping migration produce stable event ordering. It changes the timestamp used when creating historical 'deposit' records during a one-time database migration, so the records sort consistently with…
This commit is a documentation-only cleanup of the JSON-RPC command help files. It corrects which numeric error codes are listed for each command so the published schemas match what the software actually returns. No program logic, validati…
Documentation-only change with no executable code modificationsCorrects RPC schema error-code metadata to match actual handler behaviorNo change to input parsing, authorization, cryptography, or network behavior
This commit fixes a bug where a setting that controls whether unexpected transaction signatures are allowed was not initialized when the channel daemon starts. If a peer sent such signatures before the channel was fully ready, the program …
use of uninitialized variableundefined behavior (invalid bool load)network-triggered code path
This commit fixes the project's internal nightly code-coverage CI workflow. It changes how test coverage files are collected, ensures the same LLVM compiler version is used to generate and merge coverage data, and uploads a Codecov-compati…
This commit is a large cleanup of Core Lightning's API schemas, generated RPC bindings, and related plugin code. The stated goal is to make the documented 'required' fields match what the C code actually always produces or expects. In prac…
Large schema-only change with no accompanying security advisory or CVEOne semantic change to plugin hook response: invoice_payment hook can now reject with only failure_message and no resultMany fields change from optional to required in public RPC/protobuf interfaces
This commit only updates documentation. It adds error code 313 to the documented error lists for several Core Lightning commands (fundpsbt, utxopsbt, txprepare, multiwithdraw, and upgradewallet). The error code already existed in the code …
This commit fixes a release-script check that verifies the cryptographic signature on a file of checksums. Previously, the script only told GPG to verify the signature file itself. If someone replaced that signature file with an inline-sig…
Incorrect cryptographic verification logic in release toolingPotential false-positive signature verification with inline-signed .asc substitutionRelease-integrity hardening
This commit updates Core Lightning's release documentation to tell users and release managers to run gpg --verify with both the signature file and the manifest file named explicitly. The old one-argument form can silently succeed even if t…
Verification bypass risk in release artifact validationgpg --verify single-argument form can exit 0 without reading the intended manifestDocumentation-only hardening of release process
This commit is a routine update to the Rust dependency lock file (Cargo.lock), bumping many third-party libraries to newer patch or minor versions. The commit message gives no security reason for the update, and no verified references link…
Routine dependency refresh with no stated security rationaleUpdates to security-sensitive transitive crates (rustls, hyper, h2, tokio, webpki-roots) but no evidence these versions fix known vulnerabilitiesNo source-code changes or patch-specific fixes visible in the diff
This commit fixes a stack-overflow risk in Core Lightning's JSON parser. Before the fix, an attacker could send a valid JSON-RPC message containing thousands of nested brackets or braces. The parser's own helper functions used recursion fo…
Stack-overflow via deeply nested JSONRecursive JSON traversal without depth boundDenial-of-service vector in JSON-RPC input parsing
This commit only fixes typos and comment style. It changes two C-style comments from // to /* */ and corrects a grammar error in a documentation comment ('element' to 'elements'). There are no code behavior changes, no bug fixes, and no se…
This change fixes a test-infrastructure bug in Core Lightning's Python testing helpers. When running tests against a PostgreSQL database, very long test names could be silently shortened by PostgreSQL, causing different test runs or nodes …
No security-relevant signal: change is in test framework code onlyFixes a test reliability issue, not a runtime vulnerabilityNo input sanitization, authentication, cryptography, or network changes
This fix prevents Core Lightning from trying to use freshly created bitcoins (immature coinbase rewards) as emergency funds for fee-bump transactions. Such a transaction would be invalid under Bitcoin's rules and would be rejected by the n…
This commit fixes a bug in Core Lightning's askrene plugin that could prevent a node from restarting. When a saved routing layer contained a node bias with a description, the plugin accidentally freed the description's memory while using i…
Use-after-free / double-take of a tal-allocated string during plugin startupDenial-of-service-like symptom: lightningd aborts before replying to init, node cannot restartFixes publicly reported issue #9433 by endothermicdev
This commit only fixes a test case so it actually exercises the intended code path. It does not change any production code, so it cannot introduce or fix a real-world security vulnerability by itself. The test change is a reproducer for a …
This commit fixes a bug in Core Lightning's experimental dual-funded channel feature. When another node tried to open a channel, Core Lightning was not checking whether the proposed transaction fees were reasonable. A peer could request a …
Missing input validation on wire-parsed feerate fieldsPeer could induce signing and storage of feerate == 0RBF remote path allowed unbounded upward feerate walks
This commit adds regression tests for three related bugs where wildly wrong Bitcoin transaction feerates could enter Core Lightning. In the worst case, a malicious or broken fee source could make the node think a feerate was zero (due to a…
Integer overflow in feerate conversion (u32 wrap from 0xFFFFFFFF perkb to 0 perkw)Absurd feerate from external fee source bypassing sanity ceilingDatabase-stored out-of-range feerate causing startup abort/crash loop
This update fixes a crash bug in Core Lightning. When the software tried to list details of a channel opening in progress, it could crash if a stored fee rate was extremely large or zero. The crash happened because the code used an interna…
Integer overflow in RBF escalation (u32 * 25 / 24) leading to assertion failureAssertion failure in read-only introspection RPC (listpeerchannels) causing crash-loop at startupDatabase value treated as invariant despite originating from external fee estimator
This commit fixes a bug where Core Lightning nodes could get stuck in a crash loop. If a node had previously stored an extremely high or zero fee rate for an in-progress channel funding operation (a 'splice' or dual-funded channel RBF), a …
Integer overflow in fee-rate calculation (u32 overflow when multiplying by 25/24)Assertion failure leading to daemon crash loop at startupDatabase migration clamps out-of-range stored funding feerates
Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.
Security candidatelightningd: expose funding PSBT (if we have it) in JSON API.by Rusty Russell · 606aad07 · Nov 18, 2025 · 6 filesMessage 73 · AdequateInformational 19Details
Commit message · Rusty Russell
lightningd: expose funding PSBT (if we have it) in JSON API.
Changelog-Added: JSON-RPC: `psbt` field in `funding` in listpeerchannels, and `funding_psbt` in listclosedchannels. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundary
AI analysis · Informational 19/100
This commit adds a new read-only field to two JSON-RPC API responses that exposes the funding PSBT (a Bitcoin transaction planning document) for a channel, if one is stored. It is an informational API enhancement and does not change how transactions are signed, validated, or broadcast. There is no indication in the commit that this fixes a security bug.
Security candidatelightningd: don't rebroadcast withheld channels' funding_psbt on restart.by Rusty Russell · 33e5876d · Nov 18, 2025 · 1 fileMessage 65 · AdequateLow 46Details
Commit message · Rusty Russell
lightningd: don't rebroadcast withheld channels' funding_psbt on restart.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundary
AI analysis · Low 46/100
This change stops Core Lightning from re-announcing the funding transaction for channels that are marked as 'withheld' when the node restarts. A withheld channel is one whose funding transaction should not be broadcast yet (for example, because it is waiting for a peer or some other condition). Re-broadcasting it could leak the channel's existence or funding details prematurely, or cause the transaction to be mined before the protocol is ready. The fix is a one-line guard that skips these channels during restart rebroadcast.
Security candidatespender: look for unsigned PSBT on awaiting channels on startup, and re-send.by Rusty Russell · df5f38db · Nov 18, 2025 · 4 filesMessage 85 · StrongLow 30Details
Commit message · Rusty Russell
spender: look for unsigned PSBT on awaiting channels on startup, and re-send.
This covers the other corner case, where we crash before actually signing and sending the PSBT. We can spot this because the channel is in AWAITING_LOCKIN and we have a PSBT, but it's not signed yet.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 boundary
AI analysis · Low 30/100
This commit fixes a crash-recovery bug in Core Lightning's channel-opening plugin. If the node crashed after receiving a funding PSBT but before signing and broadcasting it, the channel could get stuck in an 'awaiting lock-in' state. On startup, the plugin now scans for such stuck channels, signs the PSBT, and re-sends it so the opening process can continue. The change is defensive and improves reliability rather than introducing a security vulnerability.
Security candidatelightningd: save funding_psbt in channel, database.by Rusty Russell · 5cbab33d · Nov 18, 2025 · 11 filesMessage 73 · AdequateInformational 20Details
Commit message · Rusty Russell
lightningd: save funding_psbt in channel, database.
Interestingly, @niftynei added a funding_psbt column to the db in 2020, but we don't use it (it was removed early 2021 with the "inflight" architecture). So we don't need to add a new column, just plumb it back in.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 20/100
This commit restores the use of an existing database column called funding_psbt in Core Lightning. It stores the unsigned Bitcoin transaction (PSBT) used to fund a Lightning channel in the channel record and database. The change itself is a data plumbing fix, not an obvious security patch. There is no direct evidence in the commit that it fixes an active vulnerability, but storing sensitive transaction data securely matters because the PSBT contains details about the funds being committed.
Security candidatepytest: test for signing a signed PSBT.by Rusty Russell · eaf7ac19 · Nov 18, 2025 · 1 fileMessage 70 · AdequateLow 43Details
Commit message · Rusty Russell
pytest: test for signing a signed PSBT.
Spoiler: we crash!
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 boundarysigning or wallet path
AI analysis · Low 43/100
This commit adds a test showing that Core Lightning crashes when asked to sign a PSBT (a Bitcoin transaction format) that has already been signed. The test is marked as expected to fail for now. It is a test-only change, not a fix, so the crash itself remains in the codebase. The crash appears to be triggered through a normal RPC call by an authenticated user.
Security candidatecommon: don't abort() if wally_psbt_output_taproot_keypath_add() fails.by Rusty Russell · f284489c · Nov 18, 2025 · 7 filesMessage 81 · StrongModerate 60Details
Commit message · Rusty Russell
common: don't abort() if wally_psbt_output_taproot_keypath_add() fails.
It fails on duplicates. It would ideally succeed, but bug reported:
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Fixed: JSON-RPC: `signpsbt` no longer crashes if asked to sign an already-signed PSBT with taproot paths.
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 boundarysigning or wallet path
AI analysis · Moderate 60/100
This update fixes a crash in Core Lightning's wallet command `signpsbt`. When asked to sign a PSBT (a Bitcoin transaction format) that already contains taproot signatures, the underlying library would fail and the program would call `abort()`, killing the node. The patch turns that fatal crash into a normal error message. It also removes a test marker that expected the crash, confirming the bug is now fixed.
Security candidatelightningd: remove withheld flag when we see sendpsbt.by Rusty Russell · ead680eb · Nov 18, 2025 · 1 fileMessage 65 · AdequateLow 41Details
Commit message · Rusty Russell
lightningd: remove withheld flag when we see sendpsbt.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 41/100
This change fixes a bookkeeping bug in Core Lightning's wallet code. When a user calls the `sendpsbt` RPC to broadcast a funding transaction, the code now clears an internal 'withheld' flag on the relevant channel. Previously, this flag could remain stuck, which might prevent the channel from advancing normally after the PSBT (partially-signed Bitcoin transaction) was sent. The patch is small and only adjusts internal state tracking; it does not appear to introduce a direct remote exploit.
Security candidatelightningd: save funding PSBT to database if we're to withhold it.by Rusty Russell · ff433a17 · Nov 18, 2025 · 11 filesMessage 73 · AdequateInformational 21Details
Commit message · Rusty Russell
lightningd: save funding PSBT to database if we're to withhold it.
Normally we don't care, but if we're withholding it, keep it around so we can sign & broadcast later.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 21/100
This commit adds plumbing to remember whether a new Lightning channel's funding transaction is being deliberately withheld from broadcast, and to store the unsigned funding PSBT in the database so it can be signed and broadcast later. The actual feature is not yet enabled for users (a comment says 'FIXME: Set by option' and the flag is hard-coded to false). It is a preparatory/refactoring change, not a fix for an active security bug.
Security candidatepytest: test failure if we crash after fundchannel_complete but before sendpsbt.by Rusty Russell · 409beb69 · Nov 18, 2025 · 2 filesMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell
pytest: test failure if we crash after fundchannel_complete but before sendpsbt.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 boundarysigning or wallet path
AI analysis · Informational 12/100
This commit only adds a new automated test and a small test helper plugin. The test deliberately crashes a node between two internal steps of opening a payment channel, then checks whether the channel eventually opens after the node restarts. It is marked as expected to fail (xfail), meaning the test documents a known bug rather than fixing it. There is no production code change here.
Lower-prioritylightningd: immediately close without broadcast whenever we close a withheld channel.by Rusty Russell · 8d99c5b8 · Nov 18, 2025 · 5 filesMessage 65 · AdequateLow 35Details
Commit message · Rusty Russell
lightningd: immediately close without broadcast whenever we close a withheld channel.
There's no funding tx to spend.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Low 35/100
This change fixes how Core Lightning handles closing channels where the funding transaction was deliberately withheld (not broadcast). Previously, the node tried to broadcast a unilateral close transaction for a channel that had no funding transaction on the blockchain, which is impossible and could cause errors or confusion. Now it immediately marks the channel as closed without broadcasting anything. This is a correctness and robustness fix rather than a direct theft-of-funds vulnerability.
Lower-prioritylightningd: add withhold option to fundchannel_complete.by Rusty Russell · b74d32f6 · Nov 18, 2025 · 8 filesMessage 73 · AdequateLow 28Details
Commit message · Rusty Russell
lightningd: add withhold option to fundchannel_complete.
This is just a polite way of telling us that if we close, don't bother broadcasting since we didn't broadcast the funding tx.
Changelog-Added: JSON-RPC: `fundchannel_complete` new parameter `withhold` (default false). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 28/100
This commit adds a new optional 'withhold' flag to the fundchannel_complete command in Core Lightning. When set, it tells the node that the funding transaction has not been broadcast yet, so if the channel is closed before broadcasting, the node can skip trying to broadcast a closing transaction. It is a user-facing workflow convenience, not a fix for a known security flaw.
Lower-prioritylightningd: add withheld flag to listpeerchannels and listclosedchannels.by Rusty Russell · 39349965 · Nov 18, 2025 · 12 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell
lightningd: add withheld flag to listpeerchannels and listclosedchannels.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Added: JSON-RPC: `listpeerchannels` `funding` object `withheld` flag, and `listclosedchannels` `funding_withheld` flags, indicating fundchannel_complete was called with the `withheld` parameter true.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100
This commit adds new read-only information fields to two JSON-RPC commands that list channel details. It exposes whether a channel's funding transaction was intentionally withheld from broadcast and, in one case, the associated PSBT (partially-signed Bitcoin transaction). There is no code change that alters how funds are handled, how transactions are signed, or how peers communicate; it only reports existing internal state through APIs.
Lower-prioritypytest: test withhold parameter to fundchannel_complete.by Rusty Russell · 2520bd5b · Nov 18, 2025 · 2 filesMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell
pytest: test withhold parameter to fundchannel_complete.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100
This commit is a test-only change. It adds a new test for an existing feature called 'withhold' in the fundchannel_complete RPC, and updates the Python client library to pass the withhold parameter. There is no code change to the actual lightning node behavior, and nothing in the commit suggests a security fix or vulnerability.
Lower-prioritylightningd: allow another gossip state transition.by Rusty Russell · c43206e4 · Nov 18, 2025 · 1 fileMessage 81 · StrongInformational 23Details
Commit message · Rusty Russell
lightningd: allow another gossip state transition.
This can definitely happen with zeroconf and the about-to-be-implemented withheld=True:
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 23/100
This is a small bug-fix patch for Core Lightning's internal channel gossip state machine. It adds one previously missing allowed transition between two internal states, preventing the daemon from logging a 'BROKEN' error and potentially misbehaving when a special type of channel (zeroconf, or soon a 'withheld' funding flow) is closed before the funding transaction is mined. There is no indication this allows an attacker to steal funds or take control; it is a robustness fix for an edge case in protocol handling.
Lower-priorityoffers: make find_best_peer take a feature bitmap.by Rusty Russell · a3441ff2 · Nov 18, 2025 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell
offers: make find_best_peer take a feature bitmap.
This means we can ask for more than one required feature at a time.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100
This is a small internal refactoring change in the Core Lightning 'offers' plugin. It changes one helper function so it can check for multiple peer features at once (using a bitmap) instead of only one feature at a time. The callers are updated to pass their single feature as a bitmap bit. There is no security fix or behavior change visible to users.
Lower-priorityoffers: require opt_onion_message for incoming invoices too. Changelog-Fixed: offers: require peers for blinded paths to have `option_onion_messages`, due to reports of LND not forwarding our blinded payments correctly.by 21M4TW · 29e4c3fe · Nov 18, 2025 · 1 fileMessage 85 · StrongLow 35Details
Commit message · 21M4TW
offers: require opt_onion_message for incoming invoices too. Changelog-Fixed: offers: require peers for blinded paths to have `option_onion_messages`, due to reports of LND not forwarding our blinded payments correctly.
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 35/100
This change tightens which network peers Core Lightning will choose when creating hidden (blinded) payment paths for incoming invoices. Previously it only required support for route blinding; now it also requires support for onion messages. The reason given is that LND nodes were reportedly not forwarding these hidden payments correctly, which could cause payment failures or routing problems. It is a robustness fix rather than a clear-cut security patch, and there is no evidence in the commit of funds being stolen.
Lower-prioritypytest: add tests for channel_state_changed into the CLOSED state.by Rusty Russell · 13852b7f · Nov 18, 2025 · 1 fileMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell
pytest: add tests for channel_state_changed into the CLOSED state.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100
This commit only adds and adjusts Python test code for the Core Lightning project. It extends existing tests to verify that a 'channel_state_changed' notification is correctly emitted when a payment channel transitions into the CLOSED state. There are no changes to production code, no bug fixes, and no security-sensitive behavior being altered.
Lower-prioritylightningd: deprecate "message": null in channel_state_changed notifications.by Rusty Russell · 7c7f1e42 · Nov 18, 2025 · 6 filesMessage 73 · AdequateInformational 20Details
Commit message · Rusty Russell
lightningd: deprecate "message": null in channel_state_changed notifications.
Somehow I missed this when deprecating `short_channel_id` being null.
Changelog-Deprecated: Plugins: `channel_state_changed` notification `message` field being `null`: it will be omitted instead. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 20/100
This is a routine API cleanup, not a security fix. The commit changes how Core Lightning tells plugins about channel state changes: instead of sending `"message": null` when there is no message, it will eventually stop including the `message` field at all. For now it still sends `null` unless the user has opted into strict 'no deprecated features' mode. The code also removes a general helper for adding `null` values to JSON and adds private copies in two places that still need it temporarily.
Lower-priorityschemas: allow *CLOSED* state in channel_state_changed notification.by Rusty Russell · 64563c51 · Nov 18, 2025 · 2 filesMessage 65 · AdequateInformational 18Details
Commit message · Rusty Russell
schemas: allow *CLOSED* state in channel_state_changed notification.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 18/100
This commit updates two JSON schema files used by Core Lightning to document and validate a notification message. It adds 'CLOSED' as a permitted value for the channel state field in the 'channel_state_changed' notification, along with a note that this value was introduced in version 25.12. There is no code behavior change, no runtime logic change, and no security fix or vulnerability present in the diff.
AI review queuedlightningd: notify plugins when finalizing channelby Matt Whitlock · cbfe1a99 · Nov 18, 2025 · 8 filesMessage 65 · AdequateInformational 18Details
Commit message · Matt Whitlock
lightningd: notify plugins when finalizing channel
Changelog-Added: Plugins now receive `channel_state_changed` notification upon final change to `CLOSED` state.
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100
This commit adds a new plugin notification so that plugins are told when a Lightning channel finishes closing and reaches the CLOSED state. It also makes the optional human-readable 'message' field in that notification truly optional in the generated API bindings. This is a routine feature addition, not a security fix or vulnerability.
Lower-priorityxpay: restrict maxparts to 6 for non-public nodes, but remove it if we can't route.by Rusty Russell · 73147daf · Nov 17, 2025 · 2 filesMessage 81 · StrongLow 34Details
Commit message · Rusty Russell
xpay: restrict maxparts to 6 for non-public nodes, but remove it if we can't route.
This attempts to solve a problem we have with Phoenix clients:
This payment has been split in two many parts by the sender: 31 parts vs max 6 parts allowed for on-the-fly funding.
The problem is that we don't have any way in bolt11 or bolt12 to specify the maximum number of HTLCs.
As a workaround, we start by restricting askrene to 6 parts if the node is not openly reachable, and if it struggles, we remove the restriction. This would work much better if askrene handled maxparts more completely!
See-Also: https://github.com/ElementsProject/lightning/issues/8331 Changelog-Fixed: `xpay` will not try to send too many HTLCs through unknown channels (6, as that is Phoenix's limit) unless it has no choice Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 · Low 34/100
This change adjusts how Core Lightning's xpay plugin splits payments. It limits multi-part payments to 6 pieces when the destination is not publicly known, matching a known limit used by Phoenix wallets. If routing fails with that limit, xpay removes it and retries. Previously, xpay could send too many payment pieces through private channels, causing payments to fail at the recipient. This is a compatibility and reliability fix, not a security vulnerability in the traditional sense, but it prevents a real-world payment failure scenario.
Lower-prioritypytest: Test that we don't try to pay too many htlcs at once through an unknown channel.by Rusty Russell · 145af08f · Nov 17, 2025 · 1 fileMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell
pytest: Test that we don't try to pay too many htlcs at once through an unknown channel.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 12/100
This commit only adds a new test case to the project's test suite. It does not change any production code. The test checks that the xpay payment feature limits how many simultaneous payment paths it tries to use when one of the channels is unannounced and has a low limit. Because no actual software behavior is changed, this commit by itself does not create or fix a security vulnerability.
Lower-prioritypytest: test to demonstrate that reservations of "private" channels overlap.by Rusty Russell · da4edd28 · Nov 17, 2025 · 1 fileMessage 75 · AdequateLow 35Details
Commit message · Rusty Russell
pytest: test to demonstrate that reservations of "private" channels overlap.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Low 35/100
This commit adds a test showing a bug in Core Lightning's routing-reservation system. When two separate routing layers use the same fake channel ID, a reservation made through one layer is incorrectly counted against the other layer too. The test is marked as expected to fail, meaning it documents the bug rather than fixing it. This could cause valid payment routes to be rejected because the system thinks capacity is already reserved when it should not be.
Lower-priorityaskrene: add optional layers to reservations.by Rusty Russell · 1102d806 · Nov 17, 2025 · 15 filesMessage 68 · AdequateLow 28Details
Commit message · Rusty Russell
askrene: add optional layers to reservations.
We have the issue of aliases: xpay uses scids like 0x0x0 for routehints and blinded paths, and then can apply reservations to them. But generally, reservations are *global*, so we need to differentiate.
Changelog-Added: Plugins: `askrene-reserve` and `askrene-unreserve` can take an optional `layer` inside `path` elements. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 28/100
This commit adds an optional 'layer' field to the askrene-reserve and askrene-unreserve commands in Core Lightning. The purpose is to let different plugins (like xpay) reserve capacity on fake or aliased channels without their reservations colliding with each other. It is a feature addition that improves correctness of route planning, not a fix for an active security bug.
Lower-priorityxpay: don't place global reservations on generated channels.by Rusty Russell · e5b68cad · Nov 17, 2025 · 1 fileMessage 73 · AdequateLow 49Details
Commit message · Rusty Russell
xpay: don't place global reservations on generated channels.
We generate fake scids for routehints and blinded paths. But then we were placing reservations on them as if they were global. If there are two xpays going at once these reservations will clash, even though the same scid refers to different channels.
Reported-by: @Lagrang3 Changelog-Fixed: xpay: fixed theoretical clash with simultanous payments via routehints and blinded paths. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 49/100
This fix corrects a bug in Core Lightning's 'xpay' plugin where temporary, made-up channel identifiers used for private payment routes (routehints and blinded paths) were being treated as real, globally-known channels. When two payments ran at the same time, they could reserve the same fake identifier and interfere with each other, potentially causing one payment to fail or be delayed. The fix marks these channels as fake and keeps their reservations private to each payment.