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 queuedlightningd: explicitly unwatch funding scriptpubkey when channel finally closed.by Rusty Russell · 95f1a4c0 · Mar 22, 2026 · 5 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell
lightningd: explicitly unwatch funding scriptpubkey when channel finally closed.
This is unnecessary now, since we have a destructor, but it'll be important when we move watching out to `bwatch`.
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 17/100
This change adds an explicit cleanup step that tells the node to stop monitoring the funding transaction once a channel is finally closed. The commit message says this is not strictly needed today because an existing destructor already handles it, but it will matter in a future refactor. There is no direct evidence this fixes an exploitable security bug.
AI review queuedlightningd: use scriptpubkey, not watch_txid for initial spotting of the funding tx.by Rusty Russell · 2432cae0 · Mar 22, 2026 · 3 filesMessage 73 · AdequateInformational 24Details
Commit message · Rusty Russell
lightningd: use scriptpubkey, not watch_txid for initial spotting of the funding tx.
funding_depth_cb handled three cases, implicitly:
1. First time we see the funding tx. 2. When we see the funding tx block reorged out. 3. When we see the tx depth increase.
This replaces first one with a scriptpubkey watch. The other two stay using the watch_txid for now.
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 24/100
This change alters how Core Lightning first detects a channel's funding transaction on the Bitcoin blockchain. Previously it looked for an exact transaction ID; now it watches for any transaction that pays to the channel's expected 2-of-2 multisig script. The commit message frames this as a refactor of the three existing cases handled by the funding-depth callback, not as a security fix. There is no direct evidence in the diff of a vulnerability being patched, but the change could reduce sensitivity to transaction malleability or to cases where the funding transaction ID is not yet known.
AI review queuedlightningd: save short_channel_id in inflight struct as soon as it gets mined.by Rusty Russell · 669e1024 · Mar 22, 2026 · 6 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell
lightningd: save short_channel_id in inflight struct as soon as it gets mined.
This also removed the last call to wallet_transaction_locate, so remove that too.
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 18/100
This is a small internal cleanup change in Core Lightning. It stores a channel identifier (short_channel_id) in memory as soon as a splicing transaction is mined, instead of looking it up from the database every time it is needed. It also removes an unused database helper function. There is no obvious security vulnerability here; it is primarily a code-quality and efficiency improvement.
AI review queuedcommon: make encode_scriptpubkey_to_addr take explicit len.by Rusty Russell · 3b0def41 · Mar 22, 2026 · 8 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell
common: make encode_scriptpubkey_to_addr take explicit len.
Don't assume it's a tal array: this is useful for dealing with wally_tx internals.
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 18/100
This change refactors a helper function that turns Bitcoin scriptPubKeys into human-readable addresses. Previously the function measured the length itself using a memory-tracking helper (tal_bytelen). Now callers pass the length explicitly. This is mostly a code-cleanup to support data that isn't tracked by that helper, such as internal libwally transaction buffers. There is no direct security bug being fixed, but the old pattern could theoretically lead to incorrect length handling if a non-tal buffer were passed in future code.
AI review queuedwallet: remove txfilter.by Rusty Russell · fa35af24 · Mar 22, 2026 · 13 filesMessage 51 · ThinInformational 12Details
Commit message · Rusty Russell
wallet: remove txfilter.
chaintopology was the only user, so we don't need the txfilter at all. Remove it.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100
This commit removes an unused internal transaction filter called txfilter. The code that added wallet addresses and public keys to this filter is deleted because nothing was actually using the filter anymore. There is no indication in the commit that this fixes a security bug; it appears to be ordinary code cleanup.
AI review queuedlightningd: use a blockdepth callback instead of a watch_txid.by Rusty Russell · d63b1e3b · Mar 22, 2026 · 7 filesMessage 73 · AdequateInformational 23Details
Commit message · Rusty Russell
lightningd: use a blockdepth callback instead of a watch_txid.
This is more explicit, and will work far better with an external watcher.
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 23/100
This commit refactors how Core Lightning tracks the confirmation depth of a channel's funding transaction. Instead of watching a specific transaction ID, it now watches the block height at which the funding transaction was found. The change is described by the author as making the code more explicit and better suited to external blockchain watchers. There is no direct evidence in the commit that this fixes a security vulnerability, but it does touch reorganization handling and could affect how the node reacts when a funding transaction is removed from the blockchain.
AI review queuedlightningd: remove redundant `txid` arg in depthcb_update_scid.by Rusty Russell · ff46af09 · Mar 22, 2026 · 5 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell
lightningd: remove redundant `txid` arg in depthcb_update_scid.
It's outpoint->txid in all cases.
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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This is a small internal cleanup: a function that updates a channel's short identifier was being passed both a transaction ID and a funding outpoint, but the transaction ID is always already part of the outpoint. The change removes the redundant argument and uses the outpoint's own transaction ID instead. There is no security-relevant change.
Splice commands can fail because of external reasons, for example our peer rejecting the splice. These external reasons eat the active `splice_command` so we need to stop storing the `splice_command` in callbacks and instead pull it from the `splice_commands` list which automatically removes the object when its consumed.
This corrects a lightningd crash under certain RPC circumstances.
Changelog-None
80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
AI analysis · Moderate 51/100
This patch fixes a crash in Core Lightning's lightningd daemon that could occur during splice-related RPC operations. The root cause was that splice command state could be consumed by external failures (like a peer rejecting the splice) while callbacks still held a stale pointer to it. The fix stops storing the splice command pointer inside callback data structures and instead looks it up fresh from the active list when needed, avoiding use-after-free-style crashes.
AI review queuedpyln-testing: move mnemonic dependency directly into pyln-testingby daywalker90 · 2566266b · Mar 17, 2026 · 3 filesMessage 75 · AdequateInformational 20Details
Commit message · daywalker90
pyln-testing: move mnemonic dependency directly into pyln-testing
When installing only pyln-testing directly it is missing the mnemonic dependency.
Changelog-None
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
second-pass: broader security terminology
AI analysis · Informational 20/100
This commit is a routine packaging fix. It moves a Python library called 'mnemonic' from the main project's dependency list into the dependency list of a smaller sub-package (pyln-testing). This ensures that anyone installing only pyln-testing gets the missing library. There is no security vulnerability or code behavior change here.
AI review queuedcurrencyrate: new rust plugin to provide the `currencyconvert` APIby daywalker90 · 09585ee5 · Mar 6, 2026 · 20 filesMessage 65 · AdequateInformational 15Details
Commit message · daywalker90
currencyrate: new rust plugin to provide the `currencyconvert` API
Changelog-Added: new plugin currencyrate to provide `currrencyconvert` API
65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 15/100
This commit introduces a brand-new optional Rust plugin called 'currencyrate' that adds a currency conversion API to Core Lightning. It also updates generated RPC, gRPC, and configuration schema files to expose the plugin's settings. There is no indication in the commit that this fixes a security bug; it is a feature addition.
AI review queuedCI: Speed up 'min-btc-support' by compiling clang with -O3.by Rusty Russell · 51745124 · Feb 28, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Rusty Russell
CI: Speed up 'min-btc-support' by compiling clang with -O3.
It's timing out after 2 hours sometimes: this now make it finish in 53 minutes.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
This commit changes a GitHub Actions CI workflow so that one of the automated test jobs compiles the project with a higher compiler optimization level (-O3) to make the build finish faster and avoid hitting a 2-hour timeout. It does not change any production code, user-facing behavior, or security-sensitive logic.
AI review queuedCI: Disable flakiness tracking.by Rusty Russell · d73b7564 · Feb 28, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Rusty Russell
CI: Disable flakiness tracking.
287abfbd901616a8c81a02ce366158b4f4630ddf "ci: Add a simple plugin to report test results to our falkiness tracker" slowed our integration tests to a crawl: out 6-way gcc integration tests should have taken 20 minutes, but were taking 1hr 24 minutes, and some runs were timing out altogether.
I cannot reach the server, seems it is down. But tracking flakiness is rarely useful, so I am disabling this.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
80/100 · StrongMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
This commit simply turns off a test-reporting feature in the project's automated build system because it was making tests run very slowly and the reporting server appeared to be down. It does not change any wallet, network, or Lightning protocol code, and there is no security issue in the change itself.
AI review queuedoffers: encapsulate globals in plugin_get_data()by Rusty Russell · 572d4db8 · Feb 23, 2026 · 7 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell
offers: encapsulate globals in plugin_get_data()
This is how modern plugins do it, and it has the benefit of not requiring extra code for memleak tracking.
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
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit is a straightforward internal code cleanup in the Core Lightning 'offers' plugin. It moves several global variables into a single per-plugin data structure and provides a helper function to access them. There is no change to user-facing behavior, no bug fix, and no security-related change described in the commit or diff.
AI review queueddb: add STRICT tables with migration for old databasesby wqxoxo · f318c13b · Feb 23, 2026 · 10 filesMessage 98 · StrongLow 47Details
Commit message · wqxoxo
db: add STRICT tables with migration for old databases
Enables STRICT tables in developer mode, but old databases (~2019) may have BLOB values in TEXT columns. Migration converts BLOB faildetail to TEXT with UTF-8 validation, NULLs invalid data.
STRICT is only applied to fresh databases; existing databases being upgraded skip STRICT to avoid type affinity issues with legacy data.
Also adds security pragmas in developer mode: trusted_schema=OFF, cell_size_check=ON.
Fixes #5390.
Changelog-Added: Database: STRICT tables and security pragmas in developer mode Changelog-Fixed: Database migration for old BLOB-typed faildetail values
98/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 47/100
This commit hardens Core Lightning's SQLite database handling in developer mode by adding STRICT table enforcement and two security-related SQLite pragmas. It also adds a migration that cleans up old database entries where a text column accidentally stored binary data, converting them to text or wiping them if they aren't valid text. The changes are defensive: they reduce the chance of unexpected data types causing bugs or security issues, but they do not by themselves fix a known exploitable vulnerability.
AI review queuedrenepay: refactor and bugfixesby Lagrang3 · 580c2f78 · Feb 23, 2026 · 8 filesMessage 70 · AdequateLow 47Details
Commit message · Lagrang3
renepay: refactor and bugfixes
We remove the auxiliary RPC renesenday (only used internally) in favor of a function that builds the onion, stores the shared secrets needed to recover the onion reply, and calls sendonion/injectpaymentonion.
This solves a concurrency race ``` **BROKEN** plugin-cln-renepay: Unable to parse sendpay_failure ``` in which we are waiting for renesenday to return in order to record the shared secrets but we get the a sendpay_failure notification with an onionreply before we have secrets to decode it.
It also solves a missing JSON id seen in the logs ``` DEBUG plugin-cln-renepay: JSON reply with unknown id ``` because renesendpay was using his command variable to issue an RPC to sendonion/injecpaymentonion and would fail or succeed the command before those RPCs were done. This also meant that the callback functions were silently being ignored.
Changelog-Fixed: renepay: fixes a race condition that leads to **BROKEN** plugin-cln-renepay: Unable to parse sendpay_failure
This commit fixes a timing bug in Core Lightning's experimental 'renepay' payment plugin. Previously, the plugin used an internal helper command (renesendpay) to send payment routes. Because of the way commands were chained, the plugin could receive a failure notification with an encrypted onion reply before it had saved the secrets needed to decode that reply. That caused error messages and could prevent the plugin from correctly learning why a payment failed. The fix builds the onion and stores the shared secrets directly before calling sendonion/injectpaymentonion, removing the race condition.
AI review queuedaskrene: move routines only accessed by the child process into child/.by Rusty Russell · 8775b628 · Feb 19, 2026 · 28 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell
askrene: move routines only accessed by the child process into child/.
We want to make it clear when future generations edit the code, which routines are called in the child (i.e. all the routing), and which in the parent.
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
second-pass: unusually broad change
AI analysis · Informational 15/100
This commit is a pure code reorganization: it moves several routing-related source files into a new 'child/' subdirectory within the askrene plugin. There are no functional changes, no bug fixes, and no security patches visible in the diff. The code is simply relocated to make it clearer which routines run in the child process versus the parent process.
AI review queuedpytest: fix bcli tests after sync refactorby dovgopoly · 3e979d1b · Feb 18, 2026 · 2 filesMessage 78 · AdequateInformational 12Details
Commit message · dovgopoly
pytest: fix bcli tests after sync refactor
Rewrite `test_bitcoin_failure` to reflect synchronous bcli behavior: the node now crashes on invalid bitcoind responses rather than retrying. Add `may_fail` and `broken_log` to handle expected crash.
Update `test_bitcoind_fail_first` stderr check to match the new error message format from `get_bitcoin_result`.
Update test mocks to use proper error format for "block not found".
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 12/100
This commit only changes test files. It updates pytest test cases to match new behavior after a code refactor made the lightning node crash instead of retry when it gets invalid responses from the connected Bitcoin node. There is no change to production code, so it does not introduce or fix a security vulnerability by itself.
AI review queuedpytest: remove now-invalid test.by Rusty Russell · cd7afb50 · Feb 18, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Rusty Russell
pytest: remove now-invalid test.
Commit 888745be163efe02345e944f7e7d501d64e3744c (dev_disconnect: remove @ marker.) in v0.11 in April 2022) removed the '@' marker from our dev_disconnect code, but one test still uses it.
Refactoring this code made it crash on invalid input. The test triggered a db issue which has been long fixed, so I'm simply removing it.
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
second-pass: broader security terminology
AI analysis · Informational 15/100
This commit simply deletes an outdated test from the test suite. The test used a '@' marker that was removed from the codebase in 2022, so it no longer works. There is no change to production code and no security issue is being fixed.
AI review queuedbkpr: limp along if we lost our db.by Rusty Russell · 29e0a1dd · Feb 17, 2026 · 2 filesMessage 76 · AdequateLow 44Details
Commit message · Rusty Russell
bkpr: limp along if we lost our db.
We can't really do decent bookkeeping any more, but don't crash!
Fixes: https://github.com/ElementsProject/lightning/issues/8854 Changelog-Fixed: Plugins: `bkpr_listbalances` no longer crashes if we lost our db, then do emergencyrecover and close a channel. Reported-by: https://github.com/enaples
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Low 44/100
This commit fixes a crash in Core Lightning's bookkeeper plugin. After a user loses their main database and runs emergency recovery, then closes a channel, the bookkeeper plugin would hit an internal assertion and crash the whole node. The fix makes the plugin log a warning and continue running instead of crashing.
AI review queuedcommon: move gossip_store_wire.csv into common/ from gossipd/by Rusty Russell · e8fd235d · Feb 16, 2026 · 26 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell
common: move gossip_store_wire.csv into common/ from gossipd/
It's used by common/gossip_store.c, which is used by many things other than gossipd. This file belongs in common.
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
second-pass: unusually broad change
AI analysis · Informational 15/100
This commit simply moves a file that defines internal message formats from one directory to another and updates all the references. It is a code reorganization (refactoring) with no functional change to the program's behavior and no security relevance.
AI review queuedpytest: test for crash when we have dying channels and compact the gossip_store.by Rusty Russell · b1503098 · Feb 16, 2026 · 1 fileMessage 83 · StrongModerate 58Details
Commit message · Rusty Russell
pytest: test for crash when we have dying channels and compact the gossip_store.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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
second-pass: broader security terminology
AI analysis · Moderate 58/100
This commit adds a test that reproduces a crash in Core Lightning's gossip daemon. The crash happens when the network's gossip store is compacted while a channel is in a 'dying' state (closing but not yet fully removed). The bug caused internal record offsets to become wrong, leading to a fatal read error and daemon crash. The commit message says the underlying handling was already fixed; this change only adds the regression test.
AI review queuedlightningd: don't assume peer existrs in peer_connected_serialize.by Rusty Russell · 09781bd3 · Feb 11, 2026 · 2 filesMessage 81 · StrongLow 43Details
Commit message · Rusty Russell
lightningd: don't assume peer existrs in peer_connected_serialize.
It's always true for the first hook invocation, but if there is more than one plugin, it could vanish between the two! In the default configuration, this can't happen.
This bug has been around since v23.02.
Note: we always tell all the plugins about the peer, even if it's already gone.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Fixed: lightningd: possible crash when peers disconnected if there was more than one plugin servicing the `peer_connected` hook. Reported-by: https://github.com/santyr Fixes: https://github.com/ElementsProject/lightning/issues/8858
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
second-pass: broader security terminology
AI analysis · Low 43/100
This commit fixes a crash bug in Core Lightning's lightningd daemon. When a peer disconnects between two plugin hook invocations, the code could try to read from a peer object that no longer exists, causing a use-after-free style crash. The fix copies the needed peer feature data into the hook payload so it remains valid even if the peer disappears. By default this cannot happen because only one plugin handles the hook, but it becomes possible when more than one plugin is registered.
AI review queuedpytest: reproduce crash when node disconnects between hooks:by Rusty Russell · eaf6fabf · Feb 11, 2026 · 2 filesMessage 73 · AdequateModerate 59Details
Commit message · Rusty Russell
pytest: reproduce crash when node disconnects between hooks:
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
second-pass: broader security terminology
AI analysis · Moderate 59/100
This commit adds a new test that reproduces a crash in Core Lightning. The crash happens when a peer disconnects while the lightning node is still waiting for a plugin's 'peer_connected' hook to finish. The test is currently marked as expected to fail, meaning the underlying bug has not been fixed yet in this commit. It is a reproduction test, not a fix.
AI review queueddecode: don't treat every failure as a rune.by Rusty Russell · 6a937307 · Feb 3, 2026 · 6 filesMessage 68 · AdequateInformational 19Details
Commit message · Rusty Russell
decode: don't treat every failure as a rune.
If we can't decode something, and it decodes as a rune (and all bech32 strings do!), then we would usually just complain it was a malformed rune. Be a big more useful, when the parameter looks like somthing else.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Fixed: JSON-RPC: `decode` is now more informative with malformed strings (won't claim everything is a malformed rune!).
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 19/100
This commit improves the 'decode' command in Core Lightning so that when it receives a malformed string, it no longer incorrectly labels every failure as a 'malformed rune'. It adds logic to guess the intended type of the input (e.g., a BOLT11 invoice, BOLT12 offer, emergency recovery string, or rune) and returns a more useful error message. There is no direct security vulnerability being fixed; it is a usability and diagnostic improvement.
AI review queuedpytest: test for crash when enableoffer called on a used single-use offer.by Rusty Russell · e2d17cea · Feb 2, 2026 · 1 fileMessage 83 · StrongLow 42Details
Commit message · Rusty Russell
pytest: test for crash when enableoffer called on a used single-use offer.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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
second-pass: broader security terminology
AI analysis · Low 42/100
This commit adds a test that exposes a bug in Core Lightning: if you try to re-enable a single-use offer that has already been used, the daemon hits an internal assertion and crashes. The test is marked as expected-to-fail for now, meaning the actual crash is not fixed by this commit—it only documents the failure. A user with RPC access could trigger a denial-of-service by calling enableoffer on a used single-use offer.