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.
AI review queuedcommon: implement tal_arr_append and tal_arr_appendn, and use them.by Rusty Russell · 427ee36d · May 11, 2026 · 12 filesMessage 73 · AdequateInformational 19Details
Commit message · Rusty Russell
common: implement tal_arr_append and tal_arr_appendn, and use them.
These are useful for the common pattern of "append these bytes to this tal array".
As a bonus, we do memcheck() on all these callers, for extra checking under valgrind.
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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100
This commit is a routine code cleanup: it introduces two helper functions, tal_arr_append and tal_arr_appendn, to replace repeated open-coded patterns of resizing a memory array and copying data into it. The change touches many files but does not fix any reported security bug. It adds extra memory-checking under Valgrind and a new unit test. There is no indication this patch is a security fix or that it addresses a known vulnerability.
Lower-prioritygetroutes: return more detailed fields in routes[].by Rusty Russell · 6206d02d · May 11, 2026 · 9 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell
getroutes: return more detailed fields in routes[].
This reflects a long-standing complaint from @lagrang3 when the API was first implemented, and I should have listened. In particular, the impedance mismatch with the sendpay API is annoying.
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100
This commit is a routine API enhancement for the `getroutes` command in Core Lightning. It adds extra, more explicit fields (such as incoming/outgoing node IDs and amounts) to each route hop so that callers can more easily pass the result to other APIs like `sendpay`. There is no indication of a security bug or fix.
Lower-priorityxpay: add a CLTV shadow for single non-blinded paths.by Rusty Russell · 72f4cae8 · May 11, 2026 · 9 filesMessage 73 · AdequateLow 30Details
Commit message · Rusty Russell
xpay: add a CLTV shadow for single non-blinded paths.
BOLT 7 recommends this. pay did it: in fact, pay would also add sats, but that's much more difficult and fraught, so only do CLTV.
Changelog-Added: Protocol: `xpay` now uses shadow CLTV additions to help mask final destination as per BOLT 7. 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 30/100
This commit adds a privacy feature to Core Lightning's xpay plugin. When making a payment over a single non-blinded path, xpay can now add extra CLTV (timelock) blocks as a 'shadow' to make it harder for an intermediate node to tell that it is the final hop. This follows a BOLT 7 recommendation and mirrors behavior already present in the older 'pay' plugin. The change is purely additive and opt-in via a hidden developer flag.
Lower-prioritycommon: routines to create and validate payer proofs.by Rusty Russell · 325b52d2 · May 11, 2026 · 6 filesMessage 73 · AdequateLow 28Details
Commit message · Rusty Russell
common: routines to create and validate payer proofs.
Claude helped debug, using the LDK implementation at first, then modified heavily.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> 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
defensive validation
AI analysis · Low 28/100
This commit adds new code for creating and checking 'payer proofs' in Core Lightning, a feature used with BOLT 12 invoices. A payer proof lets someone who paid an invoice selectively reveal parts of it while keeping other parts hidden. The change is a new feature implementation, not a fix for a known bug or vulnerability. There is no evidence in the commit message or diff that this is a security patch or that it addresses any disclosed issue.
common: add bolt12 payer proof support (bolt12-cli)
[Adapted for my decode routines --RR]
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 21/100
This commit adds a new command-line feature to a developer tool (bolt12-cli) that lets users decode and display a new type of BOLT 12 data structure called a 'payer proof.' It also makes a small, safe-looking fix to how text fields are printed so that trailing null bytes are not shown. There is no indication in the commit that this fixes a security vulnerability; it appears to be a normal feature addition.
Lower-prioritybolt12: generate payer_proof JSON test vectors.by Rusty Russell · 22b0a1c9 · May 11, 2026 · 3 filesMessage 78 · AdequateInformational 13Details
Commit message · Rusty Russell
bolt12: generate payer_proof JSON test vectors.
Create canonical JSON test vectors, using SUPERVERBOSE. We remove the ones from bolt12_merkle.c.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 13/100
This commit is a test-infrastructure change for Core Lightning's BOLT 12 payer proof implementation. It removes debug logging from the production merkle code and adds a new test program that prints canonical JSON test vectors. There is no change to security-sensitive runtime behavior, no bug fix, and no disclosed vulnerability.
AI review queuedoffers: add createproof API.by Rusty Russell · 9dda3eec · May 11, 2026 · 13 filesMessage 58 · ThinInformational 22Details
Commit message · Rusty Russell
offers: add createproof API.
Changelog-EXPERIMENTAL: JSON-RPC: `createproof` to create a payment proof for a (successful) BOLT12 payment. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 22/100
This commit adds a new experimental JSON-RPC command called `createproof` to Core Lightning. It lets a user generate a cryptographically signed receipt (a 'payer proof') showing they successfully paid a BOLT12 invoice or offer. The change is a feature addition, not a fix for a known vulnerability. It exposes a new RPC that signs proof data using the node's keys, so the main security consideration is making sure only authorized callers can use it and that the proof data is signed correctly. The commit itself does not claim to fix any security issue, and there is no evidence of malicious intent or a disclosed vulnerability.
AI review queuedcommon/bolt12: use a const char * for fail reason.by Rusty Russell · 1189175c · May 11, 2026 · 28 filesMessage 65 · AdequateInformational 22Details
Commit message · Rusty Russell
common/bolt12: use a const char * for fail reason.
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
parser or protocol pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 22/100
This commit is a code-quality refactor across many files. It changes the 'failure reason' string returned by BOLT11/BOLT12 decoding functions from a mutable 'char *' to a read-only 'const char *'. It also exposes a previously internal helper function and adds memory ownership fixes so callers don't accidentally use freed error strings. There is no direct evidence in the commit message or diff that this fixes an active security vulnerability, but it removes a class of potential memory-management mistakes and makes the API safer for future callers.
Lower-prioritycommon: generalize BOLT12 merkle generation.by Rusty Russell · 5c851ab9 · May 11, 2026 · 2 filesMessage 60 · AdequateInformational 11Details
Commit message · Rusty Russell
common: generalize BOLT12 merkle generation.
Allow a callback to tell us the hash of unknown branches.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 11/100
This commit refactors the code that builds BOLT12 merkle trees so it can handle 'omitted' fields via caller-supplied callbacks. It is a structural generalization, not a fix for a known bug or vulnerability. There is no direct evidence in the commit or supplied references that this change addresses a security issue.
Lower-prioritycommon: add test for partial merkle tree support.by Rusty Russell · 64f13406 · May 11, 2026 · 2 filesMessage 70 · AdequateInformational 14Details
Commit message · Rusty Russell
common: add test for partial merkle tree support.
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
AI analysis · Informational 14/100
This commit only adds a new automated test file and updates the build instructions to compile it. It does not change any production code, fix a bug, or alter behavior. The test exercises a feature called 'partial merkle tree support' used in BOLT12 invoices, but it is purely a test addition.
AI review queuedcommon: add bolt12 payer proof support (decode)by Vincenzo Palazzo · d477db45 · May 11, 2026 · 10 filesMessage 68 · AdequateInformational 22Details
Commit message · Vincenzo Palazzo
common: add bolt12 payer proof support (decode)
[Adapted for my decode routines --RR] Changelog-EXPERIMENTAL: JSON-RPC: `decode` now supports the `lnp` payer proof format.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 22/100
This commit adds support for decoding a new experimental BOLT12 format called a 'payer proof' in the Core Lightning node's decode command and related API bindings. It is a feature addition that extends existing decoding logic to recognize and return fields for payer proofs, such as the payment preimage, signature, and merkle proof hashes. There is no direct evidence in the commit that this fixes an active security vulnerability; it appears to be a protocol-support enhancement.
Lower-prioritycommon: fix over-allocation in merkle tree creation.by Rusty Russell · 05a26932 · May 11, 2026 · 1 fileMessage 73 · AdequateLow 26Details
Commit message · Rusty Russell
common: fix over-allocation in merkle tree creation.
If we have 5 fields, ilog64(5) is 3, and (1 << 3) is 8. Adding one made it 16.
In fact, since ilog64(4) is also 3, we should *subtract one*, but this handles 0 more neatly (ilog64(0) is defined to return 0, as a special case).
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 26/100
This commit fixes a simple math bug that caused the program to reserve up to twice as much temporary memory as needed when building a special data structure (a Merkle tree) used in BOLT 12 offers. The bug did not corrupt data or expose secrets; it only wasted memory. The patch removes an unnecessary '+1' in the allocation size calculation.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100
This commit adds a new data structure definition for 'payer proofs' in the BOLT12 (Bitcoin Lightning) wire protocol. It is purely a schema/import change: it adds a new TLV (Type-Length-Value) record type called payer_proof and lists its fields, plus includes a header file needed to compile it. There is no executable code, no parsing logic, no behavior change, and no indication of a bug or vulnerability.
Lower-prioritydevtools/bolt12-cli: add missing offer_metadata field.by Rusty Russell · 48c6697d · May 11, 2026 · 1 fileMessage 65 · AdequateInformational 16Details
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 16/100
This commit fixes a small display bug in a developer-only command-line tool (bolt12-cli). The tool decodes BOLT 12 offers, invoice requests, and invoices, but was failing to print the optional offer_metadata field. The fix simply adds three print statements so the field is shown when present. It does not change how Core Lightning nodes validate or process these messages, and there is no indication it fixes a security vulnerability.
Security candidatecommon: expose is_signature_field as is_tlv_signature_field.by Rusty Russell · bc2411b5 · May 11, 2026 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell
common: expose is_signature_field as is_tlv_signature_field.
Proof code needs this.
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 · Informational 15/100
This commit simply renames an internal helper function and makes it publicly available in a header file so other parts of the codebase can use it. There is no bug fix, behavior change, or security-sensitive logic alteration. It is a routine code-organization change.
AI review queueddecode: fix decode on recurring offers.by Rusty Russell · c23ee375 · May 11, 2026 · 6 filesMessage 78 · AdequateInformational 23Details
Commit message · Rusty Russell
decode: fix decode on recurring offers.
We no longer have offer_recurrence, we have offer_recurrence_compulsory and offer_recurrence_optional. Decode was changed in v25.12, but we never properly tested it (recurrence is experimental, after all).
I opted for simplicity over truth here, and simply modified decode to match the schema, but add a "compulsory" flag.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 23/100
This commit fixes a bug in Core Lightning's `decode` command for recurring payment offers. A previous code change split one offer field into two variants (compulsory and optional), but the `decode` output was not updated to match the new schema. The fix makes `decode` report a single `offer_recurrence` block with a new boolean flag indicating whether recurrence is compulsory. It is a correctness/API bug, not a direct funds-loss vulnerability, because it affects an experimental feature and would mainly cause decoding errors or misleading output rather than unauthorized payments.
AI review queueddecode / bolt12-cli: add missing invreq_recurrence_cancel field.by Rusty Russell · bf55e580 · May 11, 2026 · 11 filesMessage 73 · AdequateInformational 21Details
We missed this. It's experimental, so no changelog needed.
Spotted-by: Claude Sonnet 4.6 <noreply@anthropic.com> 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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 21/100
This commit adds a missing data field, invreq_recurrence_cancel, to Core Lightning's decode command and related generated code. The field is part of the experimental BOLT12 recurring invoice request format and lets a payer signal that they want to cancel a recurring invoice. The change is mostly schema, RPC, gRPC, and test updates to expose and validate the new field. It is not a traditional security patch, but missing the field could have caused invoice-request decoding or validation to be incomplete for an experimental feature.
Lower-priorityaskrene: added reservations leak test under loadby ScuttoZ · ba855be9 · May 11, 2026 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · ScuttoZ
askrene: added reservations leak test under load
Changelog-None
55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100
This commit only adds a new automated test to the Core Lightning project. It does not change any production code, fix a bug, or introduce a feature. The test checks whether a routing-reservation cleanup bug exists under heavy payment load, but the commit itself is purely a test addition with no patch.
Lower-priorityaskrene: relax timeout for reservation leakby Lagrang3 · e71f63f5 · May 11, 2026 · 1 fileMessage 60 · AdequateInformational 12Details
Commit message · Lagrang3
askrene: relax timeout for reservation leak
Signed-off-by: Lagrang3 <lagrang3@protonmail.com>
60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 12/100
This commit only changes a test file, increasing a timeout in an existing test by ten times. It does not modify any production code. There is no direct security fix or vulnerability being patched here; it appears to be a test reliability tweak to prevent flaky failures under slow or loaded test conditions.
tests: add regression tests for withdraw returning unsigned tx
Adds two tests to reproduce issue #8701 where the withdraw command returns an unsigned raw transaction in the 'tx' response field:
1. test_withdraw_returns_signed_tx: verifies that withdraw's 'tx' field contains witness data for all inputs (basic wallet UTXOs).
2. test_withdraw_close_output_signed: verifies signing works when withdrawing funds that include channel close outputs (anchor/P2WSH with CSV locks), which was the exact scenario in the reported issue.
The root cause is that psbt_txid() uses WALLY_PSBT_EXTRACT_NON_FINAL which strips signatures/witnesses, and the withdraw response returns this unsigned tx instead of the finalized one.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Low 46/100
This commit only adds two new automated tests that demonstrate an existing bug: the 'withdraw' command returns an unsigned raw transaction in its 'tx' field because an internal helper strips away signatures. The tests are marked as expected-to-fail, so the actual code flaw is not fixed here. A user relying on the returned transaction could receive a version that looks valid but would be rejected by the Bitcoin network because it lacks required witness data. The commit documents the regression but does not change the wallet logic itself.
The withdraw command was returning an unsigned raw transaction in its 'tx' response field. This happened because signpsbt_done() used psbt_txid() to extract utx->tx, which internally calls wally_psbt_extract() with WALLY_PSBT_EXTRACT_NON_FINAL — stripping all signature and witness data.
The broadcast itself succeeded because sendpsbt internally finalizes the PSBT via psbt_final_tx(), but the 'tx' field returned to the user had empty scriptSigs and no witness data.
This is a regression from 908f834d6 ("Update libwally to 0.8.8, support PSBTv2") which rewrote psbt_txid() from manually copying final_scriptsig/redeem_script into the cloned tx, to using wally_psbt_extract(WALLY_PSBT_EXTRACT_NON_FINAL) which strips all signing data by design.
Fix by finalizing the signed PSBT in signpsbt_done() and extracting the fully signed transaction via psbt_final_tx(). The txid verification still uses psbt_txid() (which is correct for txid computation since txids exclude witness data).
Fixes: https://github.com/ElementsProject/lightning/issues/8701 Changelog-Fixed: withdraw now returns a fully signed transaction in the `tx` response field. Signed-off-by: Vincenzo Palazzo <vincenzopalazzo@member.fsf.org>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
100/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✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Low 33/100
This commit fixes a bug in Core Lightning's 'withdraw' command where the transaction shown to the user was returned without valid signatures or witness data, even though the actual network broadcast worked correctly. The returned 'tx' field looked like a real transaction but would be rejected if a user tried to broadcast it themselves. The fix ensures the returned transaction is fully signed and final.
Security candidatebitcoin/tx.c: use 330 sat dust limit for P2TR/P2WPKH change outputs Fixes #8395 Fix by checking is_elements: Elements keeps 546 sat, Bitcoin uses 330 sat. Changelog-Fixed: Transactions now correctly create change outputs >= 330 sat for P2TR/P2WPKH instead of absorbing them as feesby Andezion · fcd6671a · May 8, 2026 · 2 filesMessage 81 · StrongLow 36Details
Commit message · Andezion
bitcoin/tx.c: use 330 sat dust limit for P2TR/P2WPKH change outputs Fixes #8395 Fix by checking is_elements: Elements keeps 546 sat, Bitcoin uses 330 sat. Changelog-Fixed: Transactions now correctly create change outputs >= 330 sat for P2TR/P2WPKH instead of absorbing them as fees
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 boundary
AI analysis · Low 36/100
This commit fixes a bug in Core Lightning where small change outputs on Bitcoin were being treated as too tiny to keep, causing them to be silently added to transaction fees instead of returned to the user. The fix lowers the threshold for P2TR/P2WPKH change outputs on Bitcoin from 546 satoshis to 330 satoshis, matching current Bitcoin network rules. Elements/Liquid still uses 546. Users could previously lose small change amounts as extra fees.
AI review queuedfuzz-tests: Add a seed corpus for the new testby Chandra Pratap · 8a4ffea7 · May 7, 2026 · 538 filesMessage 78 · AdequateInformational 15Details
Commit message · Chandra Pratap
fuzz-tests: Add a seed corpus for the new test
Add a minimal input set as a seed corpus for the newly introduced test. This leads to discovery of interesting code paths faster.
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 evidencesecond-pass: unusually broad change
AI analysis · Informational 15/100
This commit only adds test data files (a seed corpus) for a fuzzing test named fuzz-open_channel. Fuzzing corpora are collections of example inputs used to exercise code during automated testing. No production code, protocol logic, or configuration is changed, and the commit message does not describe any security fix or vulnerability.
Lower-priorityfuzz-tests: Add a test for `fundee_channel()`by Chandra Pratap · 4284fdef · May 7, 2026 · 2 filesMessage 78 · AdequateInformational 12Details
Commit message · Chandra Pratap
fuzz-tests: Add a test for `fundee_channel()`
Changelog-None: `fundee_channel()` in `openingd/openingd.c` is responsible for handling incoming `open_channel` messages from a peer. Since it deals with external input, add a test for it.
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 12/100
This commit only adds a new automated fuzz test for an existing function called fundee_channel(). It does not change the actual production code that handles incoming channel offers, so it cannot by itself introduce a security vulnerability or fix one. It is a testing improvement.
Lower-priorityfuzz-tests: add test for amount-{sat, msat} arithmeticby Chandra Pratap · 9fae53fe · May 7, 2026 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Chandra Pratap
fuzz-tests: add test for amount-{sat, msat} arithmetic
Changelog-None: The `fuzz-amount` test doesn't fuzz the arithmetic operations for `struct amount_sat` and `struct amount_msat`. Add a test for them.
83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100
This commit only adds a new fuzz test file. Fuzz tests feed random data into program functions to check they behave correctly. There is no change to the actual wallet, network, or payment code that runs in production, so this commit does not introduce or fix a security vulnerability by itself.