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 makes on-chain 'MonitorEvent' notifications durable and replay-safe. Previously, if a node crashed after a ChannelMonitor persisted a block update but before the ChannelManager processed the resulting event, the event could be …
Durability/atomicity fix for async persistence: prevents lost MonitorEvents across crashesNew ack-based event lifecycle with random event IDsArchival gating on unacknowledged events to avoid losing preimage/timeout information
This commit refactors how LDK nodes claim incoming Lightning payments. It replaces a separate 'claim with known custom TLVs' method with an options struct passed to the normal claim call, and fixes two edge cases in payment attribution dat…
API change: claim_funds now takes ClaimFundsOptions, consolidating TLV-known behavior into one pathFailure-packet length bound added to prevent oversized onion error messagesIncoming failure packet truncated at 32 KiB before processing
This change fixes a wallet bookkeeping problem in rust-lightning's built-in coin-selection wrappers. Previously, when a splice attempt failed or coin selection errored after picking UTXOs, those UTXOs stayed marked as 'reserved' in memory …
Resource exhaustion / denial-of-service via permanent in-memory UTXO reservationIncorrect state tracking in coin-selection wrapperNew API method required for correct lifecycle management (release_utxos)
This commit fixes a bug in the wallet's coin-selection code. When the wallet picked UTXOs to spend, it locked them immediately so they couldn't be reused. But if a later step—fetching the change address or the previous transaction—failed, …
Resource lock leak on error pathUTXO lock state inconsistency between selection and confirmationDenial-of-service/funds-unavailability risk from persistent UTXO locks
This commit rewrites how a Lightning wallet talks to Esplora block-explorer servers so that many status checks happen in parallel instead of one at a time. It is a performance/refactoring change. There is no direct evidence in the commit t…
Concurrency/timing change in transaction confirmation logicNew inconsistency check preserved when a previously-confirmed tx is reported unconfirmedAdded defensive error path for missing pre-fetched block status
This change stops the Electrum-based transaction sync client from downloading the very transaction that created an output it is watching. Previously, the client could request that transaction from Electrum, even though a transaction can ne…
Avoids unnecessary Electrum transaction.get requests for watched outputsReduces information disclosure to Electrum server about watched outpointsAdds regression test verifying request suppression
This change improves how the Lightning Dev Kit's Electrum and Esplora transaction-sync clients track watched Bitcoin transactions. Previously, the code ignored the script pubkey (the 'address' associated with a transaction) supplied when r…
Previously ignored `script_pubkey` argument in `register_tx` for transaction watchersElectrum script-history queries previously used an arbitrary transaction output, which could be OP_RETURN and therefore unindexed by some Electrum serversNew logic prefers caller-supplied script pubkey and falls back to non-OP_RETURN outputs
This commit changes how LDK stores pending event notifications. It adds serialization support for several event types that previously were not fully saved to disk, and introduces a helper method so the code can decide which events are wort…
Data-loss prevention: previously non-round-trippable event variants are now fully serialized, avoiding accidental event loss when users serialize Event queues themselvesState-consistency hardening: ChannelManager now explicitly skips events that describe non-surviving restart state, preventing replay of stale eventsDefensive assertion: debug builds assert that every persisted event round-trips to Some(event), catching serialization mismatches
This commit only adds documentation comments to two source files. It explains that certain funding-signing events can become stale if the underlying negotiation fails, and that callers may see specific harmless errors as a result. No code …
This commit fixes a design flaw in LDK's built-in wallet helper where coins selected for a splice-in (or other unclaimed funding) were permanently reserved in memory if the transaction was abandoned. Over repeated failed splices, all spend…
Denial-of-service via UTXO exhaustion from repeated failed splice negotiationsRisk of inability to broadcast fee-bumping/claim transactions due to lack of available UTXOsNew API surface (release_utxos) introduced to mitigate resource leak
This commit removes a fixed-version pin for the honggfuzz fuzzing tool in a continuous-integration script. The project now uses the current release of honggfuzz instead of an older pinned version. There is no change to the actual Lightning…
This commit changes the Rust toolchain used in the continuous integration (CI) fuzzing job from a fixed older version (1.75) to the latest stable release. It is purely a build/test infrastructure change to fix a dependency compatibility is…
This commit makes a previously internal helper function public so that outside developers can build dummy-hop tails for blinded payment paths without recreating the logic themselves. It is an API usability change, not a fix for a known sec…
No security-relevant behavior change in the diffAPI visibility broadened from crate-public to publicCLTV expiry overflow check already present and unchanged
This change adds a safety check in a Bitcoin Lightning Network library (LDK). Previously, if the software tried to verify a peer's commitment signature before it had learned the peer's channel parameters, it could crash with a panic. Now i…
Defensive check added on peer-driven code path to prevent panicMissing counterparty_parameters could previously cause panic during commitment transaction constructionChannel closure returned instead of panic
This commit only changes the wording of an error message sent to peers when a commitment transaction fails validation. It replaces the vague phrase 'Failed to validate our commitment' with the clearer 'Received commitment failed validation…
This commit moves the checks that validate a counterparty's signatures on the holder's commitment and HTLC transactions out of the general channel code and into the signer module (InMemorySigner). Previously, these signature checks were do…
Moved signature validation from channel state machine into signer moduleAdded new tests that corrupt signatures and verify rejectionChanged error message from 'Invalid commitment tx signature from peer' / 'Invalid funding_created signature from peer' to 'Failed to validate our commitment'
This change fixes a Lightning channel splicing bug: when two peers temporarily disconnect during a splice, any half-finished signature the other side already sent is now discarded. Before the fix, that stale signature could be reused after…
State-invalidation bug in multi-step protocol (splice negotiation)Stale cryptographic signature not cleared on disconnectPotential reuse of old commitment state after reconnect
This fix prevents a Lightning channel from being accidentally force-closed. During a splice (a way to resize a payment channel), one side's initial signature could be kept in memory after the peers disconnected. If the peers later reconnec…
State inconsistency: in-memory buffered message not cleared on disconnectDuplicate message processing after reconnectionForce-close consequence for active Lightning channel
This commit is a simple rename of a public function from `matches_invoice_signing_pubkey` to `key_can_sign_invoice`, plus matching updates to its documentation, callers, tests, and changelog. No behavior changed. It is not a security fix.
This commit is a simple rename of a function and its documentation from matches_invoice_signing_pubkey to key_can_sign_invoice. No logic, behavior, or security properties changed. It is a follow-up code-review naming cleanup.
Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.
Security candidateValidate the `Router` is meeting MPP and max-fee limitations givenby Matt Corallo · c31a7bee · Feb 20, 2026 · 6 filesMessage 73 · AdequateLow 47Details
Commit message · Matt Corallo
Validate the `Router` is meeting MPP and max-fee limitations given
When `OutboundPayments` calls the provided `Router` to fetch a `Route` it passes a `RouteParameters` with a specific max-fee. Here we validate that the `Route` returned sticks to the limits provided, and also that it meets the MPP rules of not having any single MPP part which can be removed while still meeting the desired payment amount.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validationboot or update path
AI analysis · Low 47/100
This commit adds safety checks inside the Lightning payment code to make sure the route finder (the 'Router') actually follows the rules it was given. Before sending a payment, the code now verifies that the chosen route does not exceed the user-set maximum fee, does not contain useless empty paths, and does not include unnecessary multi-path payment (MPP) parts. If the router misbehaves, the payment is abandoned instead of being sent. It is a defensive hardening change rather than a fix for a known active attack.
Lower-priorityAdd FilesystemStoreV2 with paginated listing supportby benthecarman · 8f2266e4 · Feb 20, 2026 · 4 filesMessage 73 · AdequateInformational 19Details
Commit message · benthecarman
Add FilesystemStoreV2 with paginated listing support
Implements PaginatedKVStore traits with timestamp-prefixed filenames for newest-first pagination and [empty] directory markers for consistent namespace hierarchy.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100
This commit adds a new version of a file-based storage backend (FilesystemStoreV2) for the Lightning Dev Kit. It is a feature addition, not a security patch. The code introduces pagination support and a consistent directory layout using a special marker directory named '[empty]'. There is no direct evidence in the commit of a vulnerability being fixed, but the new code touches filesystem paths and page-token parsing, which are typical places where bugs can hide. The changes appear defensive and well-tested.
Lower-priorityAdd PaginatedKVStore traits upstreamed from ldk-serverby benthecarman · 38db7abf · Feb 19, 2026 · 1 fileMessage 83 · StrongInformational 18Details
Commit message · benthecarman
Add PaginatedKVStore traits upstreamed from ldk-server
Allows for a paginated KV store for more efficient listing of keys so you don't need to fetch all at once. Uses monotonic counter or timestamp to track the order of keys and allow for pagination. The traits are largely just copy-pasted from ldk-server.
Adds some basic tests that were generated using claude code.
83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 18/100
This commit adds new Rust programming interfaces (traits) for listing stored data in pages rather than all at once. It does not change any existing behavior, fix a bug, or alter how data is stored or protected. It is a feature addition to support more efficient key listing in future code.
Lower-priorityprefactor: move FilesystemStore utilies into fs_store/common.rsby benthecarman · 32698136 · Feb 19, 2026 · 6 filesMessage 73 · AdequateInformational 15Details
Commit message · benthecarman
prefactor: move FilesystemStore utilies into fs_store/common.rs
Ahead of adding the FilesystemStoreV2 we move some common utilies into a shared file.
We also move the FilesystemStore into its own module.
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 pure code reorganization (refactor) with no security-relevant behavior change. It splits the existing FilesystemStore implementation into a shared common module and a v1 module, in preparation for a future FilesystemStoreV2. All call sites are updated to use the new module path, but the actual file-reading, writing, locking, and listing logic is moved unchanged.
Lower-priorityError api change- replaced io::error with string based formatby Apostlex0 · 16ea4c7e · Feb 19, 2026 · 4 filesMessage 50 · ThinInformational 19Details
Commit message · Apostlex0
Error api change- replaced io::error with string based format
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 19/100
This commit is a code-quality refactor in the Lightning Dev Kit's block-sync module. It replaces the use of Rust's generic input/output error type with more specific string-based error messages when parsing HTTP and RPC responses. It does not appear to fix a security vulnerability, change network behavior, or introduce a new attack path. The main risk is that some error classifications may have shifted slightly (for example, parse errors are now consistently treated as persistent rather than transient), which could affect retry behavior but is not directly exploitable.
Security candidateReplace `get_closing_signed_broadcast!` macro with direct function callsby elnosh · 28388c40 · Feb 19, 2026 · 5 filesMessage 65 · AdequateInformational 15Details
Commit message · elnosh
Replace `get_closing_signed_broadcast!` macro with direct function calls
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 15/100
This commit is a straightforward code cleanup in the project's test suite. It replaces a Rust macro used only in tests with an equivalent regular function. There is no change to the actual Lightning node logic that runs in production, and no security-relevant behavior is altered.
Security candidateReplace `get_payment_preimage_hash!` macro with direct function callsby elnosh · e48478a7 · Feb 19, 2026 · 9 filesMessage 65 · AdequateInformational 15Details
Commit message · elnosh
Replace `get_payment_preimage_hash!` macro with direct function calls
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 15/100
This commit is a straightforward code cleanup in the project's test suite. It removes a helper macro used only in tests and replaces it with direct calls to an existing function. There is no change to the actual Lightning node logic that runs in production, and nothing in the commit suggests a security fix.
Security candidateReplace `check_closed_broadcast!` macro with direct function callsby elnosh · 63f4f8f5 · Feb 19, 2026 · 13 filesMessage 65 · AdequateInformational 15Details
Commit message · elnosh
Replace `check_closed_broadcast!` macro with direct function calls
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 15/100
This commit is a straightforward code cleanup in the project's test suite. It replaces a Rust macro called `check_closed_broadcast!` with direct calls to an equivalent function. Macros are a shorthand in Rust; replacing them with normal function calls makes the test code easier to read and maintain but does not change what the tests actually do. There is no change to the live Lightning node software that users run, so this cannot affect real funds or network security.
Lower-prioritychanges: switch to bitreq from chunked_transferby Apostlex0 · 98535fab · Feb 19, 2026 · 5 filesMessage 68 · AdequateLow 39Details
Commit message · Apostlex0
changes: switch to bitreq from chunked_transfer
we changed the http layer from the manual tcpstream client implementation to bitreq, this change lets us rely on bitreq for http request formatting, sockets, HTTP parsing, chunked bodies, pooling, and async support instead of having to manually implement them.
cargo.toml: we added bitreq 0.3 and updates the rest-client and rpc-client feature wiring to depend on bitreq. A tokio feature is also enabled to allow bitreq async support and pipelining.
http.rs: The old HttpEndpoint builder and all manual TCP/socket timeout logic are dropped along with the manual GET/POST construction and response parsing. The client API now uses base_url and get/post return Result with a typed HttpClientError instead of std::io::Result. HttpClientError splits transport failures (bitreq::Error), non-2xx HTTP responses (HttpError), and response decoding issues (std::io::Error).
rest.rs and rpc.rs: HttpEndpoint and the Mutex<Option<HttpClient>> caching pattern are removed and both clients now own an HttpClient directly using base_url. rpc.rs also adds RpcClientError so we can represent HTTP failures, JSON-RPC errors from the server, and malformed responses instead of just giving out std::io::Error.
convert.rs: it maps HttpClientError and RpcClientError into BlockSourceError with this retry classification: transport errors and HTTP 5xx are transient, HTTP 4xx and invalid data are persistent, and RPC errors are treated as transient.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 39/100
This commit replaces the project's custom-built HTTP client code with an external library called bitreq. It is a large refactoring of how the software talks to Bitcoin nodes over REST and RPC. The change itself is described as a maintenance improvement, not a security fix. It removes a lot of hand-written HTTP parsing and replaces it with a dependency, which could introduce new bugs or behavior differences, but the diff does not show a known vulnerability being patched.
Lower-priorityAvoid sending stfu for quiescent splice action while pending spliceby Wilmer Paulino · 15b04b5e · Feb 19, 2026 · 2 filesMessage 65 · AdequateLow 35Details
Commit message · Wilmer Paulino
Avoid sending stfu for quiescent splice action while pending splice
We can't splice while one is already pending, so there's no point in attempting to become quiescent.
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 a minor protocol behavior bug in the Lightning Dev Kit's splicing feature. Previously, the code would try to send a 'stfu' (stop, let's become quiescent) message to start a new splice even when another splice was already pending. Since starting a second splice isn't allowed while one is pending, sending the message was pointless and could cause confusion or unnecessary protocol churn. The patch now skips sending 'stfu' in that situation and adds tests covering reconnection scenarios.
Rework max commitment transaction balance debug assertions
These assertions made sure that our balance would never dip below the reserve, and if they ever were, that the balance must only move towards meeting the reserve. With splicing, this doesn't always work, as a node that is not interested in contributing could end up below the reserve of the post-splice channel. Therefore, we rework these assertions such that we only keep track of the previous commitment transaction balance, and compare against the current, ensuring that our balance only increases when below the reserve.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100
This commit changes internal bookkeeping checks that only run in debug builds. The old checks could incorrectly fire and crash a developer/test build when a Lightning channel was spliced (resized) in a way that left one party temporarily below the required reserve balance. The new checks relax that rule for splicing by only requiring balances move upward when below reserve, rather than always staying above reserve. It is a robustness fix for an assertion, not a fix for a live-network security vulnerability.
Lower-priorityAccount for missing balance in channel reserve assertions for splicesby Wilmer Paulino · 52c76abf · Feb 19, 2026 · 1 fileMessage 73 · AdequateInformational 21Details
Commit message · Wilmer Paulino
Account for missing balance in channel reserve assertions for splices
When we create the post-splice `FundingScope`, the monotonicity debug assertion trackers were initialized to the post-splice balance without accounting for pending HTLCs or anchor costs. Since splices can have in-flight HTLCs (unlike fresh channel opens), the first commitment transaction's actual balance was lower than the initialized max, causing the debug assertion in `ChannelContext::build_commitment_transaction` to fire.
Note that we don't need to recompute the full post-splice balance here. We can rely on the pre-splice `FundingScope`'s `holder/counterparty_max_commitment_tx_output` instead since they're already accounted for there.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 21/100
This commit fixes an internal debug-only accounting bug that occurs when a Lightning channel is spliced (its funding amount is changed) while payments are still in flight. The bug made a non-release debug assertion incorrectly fire, but it did not change normal runtime behavior or allow funds to be stolen.
Lower-priorityBind Channel::commitment_signed result in internal_commitment_signedby Wilmer Paulino · 1b8617c3 · Feb 18, 2026 · 1 fileMessage 50 · ThinLow 32Details
Commit message · Wilmer Paulino
Bind Channel::commitment_signed result in internal_commitment_signed
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Low 32/100
This is a small Rust code cleanup in the Lightning Dev Kit's channel manager. It changes how the result of a commitment_signed call is handled so the result is first bound to a local variable before being passed to an error-handling macro. The change itself does not alter the visible behavior of the code, but it may fix a subtle Rust borrow-checker or drop-order issue that could affect correctness during channel state updates. There is no direct evidence in the commit that this fixes a security vulnerability.
Inline unreachable debug assertion in MsgHandlErrInternal::no_such_peer
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 13/100
This commit is a code cleanup, not a security fix. It moves a debug-only assertion (a check that only runs in test builds) from many call sites into a single helper function and renames that helper to make its purpose clearer. The runtime behavior is unchanged, and the assertion is still not active in production builds.
Avoid persisting ChannelManager on handle_tx_* errors
These errors will only ever affect our in-memory state, so there's no need to persist the ChannelManager when we come across one. Note that `tx_abort` is not included here because there is a possibility we force close the channel, which we should persist.
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 34/100
This change adjusts when LDK saves its channel state to disk while processing certain transaction-sharing messages during channel setup. Previously, an error in handling these messages would trigger a disk save even though the error only affected temporary in-memory state. Now the code skips that unnecessary save, while still saving when something important actually happens (like completing a signing session). The commit message frames this as a cleanup/optimization, not a security fix.
Lower-priorityRefactor channel splice operations into helper in chanmon_consistencyby Wilmer Paulino · ff39dff9 · Feb 18, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Wilmer Paulino
Refactor channel splice operations into helper in chanmon_consistency
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100
This commit is a straightforward code cleanup in a fuzz test file. It moves repeated splice-in and splice-out test operations into shared helper functions and updates the test cases to use them. There is no change to production code, no security fix, and no behavior change intended.
This regressed at some point, making the logs harder to parse on a failed test run.
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 fixes a formatting issue in fuzz testing logs by adding a missing newline at the end of each log entry. It only affects test output readability and has no security relevance.
Security candidateTime out incomplete MPP payments in chanmon_consistencyby Wilmer Paulino · 520dcbb2 · Feb 18, 2026 · 4 filesMessage 73 · AdequateLow 27Details
Commit message · Wilmer Paulino
Time out incomplete MPP payments in chanmon_consistency
This requires calling `timer_tick_occurred`. As a result, when `timer_tick_occurred` is called, disabled/enabled updates and `WarnAndDisconnect` events may be triggered.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Low 27/100
This commit changes how a Lightning payment library runs its internal fuzz tests. It makes the test harness call the normal periodic timer function instead of a special stripped-down version, so incomplete multi-part payments time out properly during testing. The production code is mostly unchanged, but a few internal test-only helpers are now available under a new test-utilities feature flag. There is no direct evidence this fixes a real-world security bug; it appears to be a test-harness cleanup that makes fuzzing more realistic.
Lower-priorityConsider probe events for stuck payments check in chanmon_consistencyby Wilmer Paulino · 28ef7a8d · Feb 18, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Wilmer Paulino
Consider probe events for stuck payments check in chanmon_consistency
Even though we don't explicitly send probes, because probes are detected based on hashing the payment hash+preimage, it's rather trivial for the fuzzer to build payments that accidentally end up looking like probes.
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
fuzzing or regression evidence
AI analysis · Informational 15/100
This commit fixes a fuzz testing harness so it correctly tracks payments that the fuzzer accidentally generates as probe-like payments. It is a test-only change and does not affect real Lightning node behavior or user funds.
Lower-priorityUse channel_id over short_channel_id for payments in chanmon_consistencyby Wilmer Paulino · c0c09c7d · Feb 18, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Wilmer Paulino
Use channel_id over short_channel_id for payments in chanmon_consistency
The `short_channel_id` is no longer guaranteed to be stable with splicing now that the fuzzer can actually lock splices.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100
This commit updates an internal fuzz-testing harness (a tool that automatically throws random inputs at the code to find bugs) to use a more stable channel identifier when building test payments. It does not change the production Lightning node code that real users run, and there is no indication it fixes a security vulnerability. The change is purely about making the fuzzer work correctly now that the codebase supports 'splicing,' a feature that can change a channel's short identifier.
Security candidateDrive splices to completion in chanmon_consistencyby Wilmer Paulino · 3c09513b · Feb 18, 2026 · 1 fileMessage 85 · StrongInformational 12Details
Commit message · Wilmer Paulino
Drive splices to completion in chanmon_consistency
This commit adds support for locking splices. This required confirming transactions, which this target previously didn't consider.
It also fixes a `serial_id` collision, due to its generation using the first 4 bytes of `get_secure_random_bytes`, that was preventing splices from negotiating up to the `tx_signatures` exchange.
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 · Informational 12/100
This commit updates a fuzzing test harness (chanmon_consistency) in the Lightning Dev Kit project. It adds the ability to simulate confirming splice transactions on a fake blockchain and fixes a serial ID collision in the test's random number generator. The changes are confined to test/fuzzing code and do not alter production Lightning logic.
This commit adds new opcodes to enable/disable signer operations one by one. Note that this only covers signer operations post-funding.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 13/100
This commit only changes test and fuzzing code. It adds new test controls that let developers temporarily disable or enable individual signer operations during fuzz testing, and it removes one unused signer-operation flag. There is no change to production Lightning code, so it does not create a real-world security vulnerability or fix one.
Lower-prioritySplit CI test script into parallel jobsby Joost Jager · a026acef · Feb 18, 2026 · 10 filesMessage 78 · AdequateInformational 15Details
Commit message · Joost Jager
Split CI test script into parallel jobs
Split the monolithic ci-tests.sh into six focused scripts that run as separate parallel jobs via a reusable workflow (ci-build.yml):
Shared setup (MSRV pins, backtrace) is extracted into ci-tests-common.sh. The ci-tests.sh script now delegates to the sub-scripts for local use.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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 purely a refactoring of the project's continuous integration (CI) setup. It splits one large test script into six smaller, focused scripts that can run in parallel on GitHub Actions. There are no changes to the actual Lightning protocol code, cryptography, networking, or any code that end users or nodes run. It does not fix or introduce any security-relevant behavior.
Lower-priorityAllow intercepting HTLCs based on the source channelby Matt Corallo · 9a9531f3 · Feb 18, 2026 · 3 filesMessage 73 · AdequateInformational 19Details
Commit message · Matt Corallo
Allow intercepting HTLCs based on the source channel
It may be useful in some situations to select HTLCs for interception based on the source channel in addition to the sink. Here we add the ability to do so by adding new flags to `HTLCInterceptionFlags`.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100
This commit adds new configuration options that let a Lightning node operator choose to intercept (pause and manually handle) forwarded payments based on whether the payment arrived over a publicly announced channel or a private one. It is a feature addition, not a fix for an existing security flaw. The code does not bypass fee or time-lock requirements, so it cannot be used to steal funds or force free routing on its own. The main risk is operational: a node operator who enables these new flags and then mishandles intercepted payments could cause payment delays or failures.
Lower-priorityPass constructed `PendingAddHTLCInfo` to chanman `forward_htlcs`by Matt Corallo · 113f9cbd · Feb 18, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Matt Corallo
Pass constructed `PendingAddHTLCInfo` to chanman `forward_htlcs`
We jump through some hoops in order to pass a small list of objects to `forward_htlcs` on a per-channel basis rather than per-HTLC. Then, `forward_htlcs` builds a `PendingAddHTLCInfo` for each HTLC for insertion. Worse, in some `forward_htlcs` callsites we're actually starting with a `PendingAddHTLCInfo`, converting it to a tuple, then back inside `forward_htlcs`.
Instead, here we just pass a list of built `PendingAddHTLCInfo`s to `forward_htlcs`, cleaning up a good bit of code and even avoiding an allocation of the HTLCs vec in many cases.
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100
This commit is a straightforward internal code cleanup in the Lightning Dev Kit's channel manager. It changes how pending HTLC (Hashed Time-Locked Contract) forwarding information is passed between functions: instead of converting data into tuples and then back into a structured object, the structured object is passed directly. The commit message and diff show no intent to fix a security issue, and the behavior appears functionally equivalent.