EP
← All projectsElements Project

Core Lightning

Modular C implementation of the Lightning Network protocol and node stack.

BitcoinLightning NetworkNormal
Repository coverage

1856 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

158security candidates263second-pass queue1853AI analyses
140commits · 30 days
225commits · 60 days
803commits · 180 days
1839commits · 365 days
Backfill bands
Aug 5 → Feb 61049 seen37 candidatesComplete
Feb 6 → Jun 6579 seen10 candidatesComplete
Jun 6 → Jul 678 seen1 candidatesComplete
Jul 6 → Aug 5147 seen16 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

70/100 average clarity
432Strong · 80–100
1164Adequate · 60–79
231Thin · 40–59
29Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
dovgopoly15015164
Rusty Russell95873958072
Sangbida Chaudhuri14731146066
Dusty Daemon771377066
ShahanaFarooqui931093063
daywalker9090589062
Níckolas Goline40540076
Lagrang376476069
Christian Decker36436072
Vincenzo Palazzo838080
Chandra Pratap56256082
ekzyis222063
Analysis record

Published AI watches

Last scanned 46 minutes ago

Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "doc: require Homebrew GNU make and gpatch on macOS"

This commit is a simple documentation revert. It undoes a previous change that told macOS users to install GNU make and GNU patch from Homebrew and to put those tools first in their command path. The reverted instructions now omit gpatch a…

0cfa949fby Sangbida Chaudhuri+4−81 file
No security note in commit
Informational 15 AI analysisMessage 75 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "tests: drop obsolete x-prefix in compacter-slow.sh"

This commit re-adds an old-style 'x' prefix to a string comparison in a test helper script. It is a test-only change with no effect on the actual Core Lightning node software, user funds, network behavior, or security. The change simply re…

116fd7cdby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

doc: require Homebrew GNU make and gpatch on macOS

This commit only updates macOS installation instructions in the documentation. It tells macOS users to install newer GNU versions of 'make' and 'patch' from Homebrew because Apple's built-in tools are too old for building and running sourc…

d3ff1474by Sangbida Chaudhuri+8−41 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tests: drop obsolete x-prefix in compacter-slow.sh

This commit is a trivial shell script cleanup. It removes an old-fashioned 'x' prefix from a string comparison in a test helper script so that a newer version of the Shellcheck linter stops warning about it. The change does not alter progr…

474c272aby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 18 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist amount+currency parsing into common code.

This commit moves existing code that parses payment amounts (Bitcoin millisatoshis, 'any' amount, or fiat currency amounts) from one plugin file into a shared library so it can be reused by a future feature. It is a code refactoring with n…

Refactoring of amount-parsing code into a shared helperAddition of explicit u64 overflow guards (mul_overflows_u64, add_overflows_u64) in the new common codeNo change to wire protocol or RPC interface semantics
e0f86c17by Rusty Russell+112−723 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: internal cleanups since all non-command JSON IDs are strings.

This is a routine internal cleanup commit in Core Lightning. It removes an unused helper function and simplifies how JSON-RPC request IDs are stored and formatted, since the project now always uses string IDs for non-command JSON traffic. …

No security-relevant keywords in commit title or messageNo CVE, advisory, or bug reference presentChanges are refactor/cleanup in nature
a70ae963by Rusty Russell+25−378 files
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist hash_str helper into its own header.

This commit is a routine code cleanup: it moves a small string-hashing helper function into a shared header file so it can be reused without being copied and pasted. There is no change to behavior, no bug fix, and no security relevance.

581bbb1fby Rusty Russell+16−176 files
No security note in commit
Informational 23 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade: we need to remove "impressions" from askrene datastore when downgrading to v26.06.

This is a database downgrade helper fix, not a live network vulnerability. Core Lightning's downgrade tool previously failed to strip out new 'channel impression' records when rolling a database back to version v26.06. The patch teaches th…

Database downgrade path could leave incompatible records in older schemaOffline tool only; no remote or on-chain triggerFix prevents potential node startup failure after version rollback
4d926285by Rusty Russell+43−111 file
No security note in commit
Low 31 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade tool: fix invalid memory bug

This commit fixes a typo in a database downgrade helper tool. The bug caused the tool to pass a negative number (turned into a huge positive size) when copying data, which led to an out-of-memory (OOM) error. The fix swaps two variable nam…

Integer underflow / negative-to-size_t wrap leading to excessive allocationOut-of-memory crash in maintenance toolMemory corruption potential if allocation somehow succeeded
42995326by Lagrang3+8−81 file
No security note in commit
Informational 24 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: actually tell askrene when a payment succeeded.

This commit fixes a bookkeeping bug in Core Lightning's xpay plugin. Previously, when a payment succeeded, xpay did not tell the askrene routing-helper that the route worked. As a result, askrene kept stale or overly pessimistic ideas abou…

Missing success feedback to routing layer can degrade payment reliabilityStale negative impressions may bias future path selection toward worse or failing routesNo direct funds-loss primitive is introduced or fixed
a66fabd4by Rusty Russell+40−02 files
No security note in commit
Low 49 AI analysisMessage 58 · Thin
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: correctly order constraints.

This commit fixes a bug in Core Lightning's routing helper (askrene) where two kinds of channel information—hard limits called 'constraints' and usage estimates called 'impressions'—were being applied in the wrong order. Because impression…

Routing decision bug caused by incorrect ordering of time-relative channel statePotential payment failure or acceptance of an over-capacity routeRegression test added demonstrating incorrect route acceptance before fix
4b6fe4a1by Rusty Russell+211−1182 files
No security note in commit
Low 35 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: don't leak channel intel entries

This commit fixes a memory leak in the askrene plugin of Core Lightning. When individual channel intelligence entries were deleted, the code removed the entry from its array but forgot to free two internal pointers (impression and constrai…

Memory leak in plugin data structure cleanupMissing deallocation of nested pointers before array removalFix located in routing/intelligence plugin (askrene)
8891f414by Lagrang3+5−01 file
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: tests should expect the new error messages

This commit only updates test files so that automated checks expect slightly different error wording from the xpay payment command. It does not change any production code, so it cannot introduce a security vulnerability or fix one on its o…

0b67601fby Lagrang3+24−32 files
No security note in commit
Low 43 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit invoices to 10 minutes for recurring offers in other currencies.

This change tightens the lifetime of recurring invoices priced in foreign currencies (like USD) to 10 minutes by default, and refreshes them with current exchange rates when they expire. Previously, such invoices could remain valid for the…

Fixes stale exchange-rate exposure for currency-denominated recurring invoicesAdds configurable expiry cap for recurring currency invoicesDistinguishes user-cancellation (0s expiry) from natural expiry to avoid misleading errors
446312cfby Rusty Russell+134−148 files
No security note in commit
Low 45 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit expiry to offer limit, or 10 minutes with currency conversion.

This commit tightens the expiration time on invoices created from BOLT12 offers. Previously, all such invoices defaulted to a 2-hour payment window. Now, if the offer has an absolute expiry, the invoice expires when the offer expires; and …

BOLT12 invoice expiry now bounded by offer absolute expiryCurrency-converted invoices use short expiry to limit exchange-rate exposureNew regression test added for expiry behavior
a6cf4915by Rusty Russell+55−22 files
No security note in commit
Low 29 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: don't bother with checking recurrence timing.

This commit removes local timing checks in Core Lightning's fetchinvoice plugin for recurring payments. Instead of the plugin refusing too-early or too-late invoice requests, it now lets the remote node decide and report back. The change i…

Removal of local input-validation checks for recurring invoice requestsReliance on remote-party enforcement for recurrence period limits and pay windowsTest expectations changed from local rejection to remote failure messages
3e49d908by Rusty Russell+2−682 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: don't do previous invoice checking in createinvoicerequest.

This commit removes a local sanity check in Core Lightning's experimental 'createinvoicerequest' command. Previously, when creating a recurring invoice request, the code looked up past payments by label to verify the previous recurrence wa…

Removal of local payment-state validation for recurring invoice requestsParameter rename from recurrence_label to label in internal RPC callsTest expectations changed from local 'previous invoice has not been paid' errors to remote failure messages
4348d8acby Rusty Russell+5−1224 files
No security note in commit
Low 35 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: handle weird labels in recurrence_label parameter.

This commit fixes how the fetchinvoice plugin handles user-supplied labels that contain special characters such as backslashes, quotes, tabs, and newlines. Previously these labels were passed as raw strings, which could cause JSON encoding…

JSON injection / improper escaping of user-controlled input passed between RPC componentsPotential mismatch between label parsing and label serialization leading to functional failures or unexpected behaviorFix is narrowly scoped to a single plugin and parameter
d7f87f2dby Rusty Russell+37−102 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Add unit tests for str_to_u64

This commit only adds a new automated test file that checks how a helper function (str_to_u64) converts text strings to unsigned 64-bit integers. It does not change any production code, so it cannot by itself introduce a security vulnerabi…

dddb455dby Lagrang3+203−01 file
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

pytest: add tests for what we want askrene to do.

This commit only adds a new pytest test file. It does not change any production code. The test describes desired future behavior for the askrene routing module's error messages when a payment source or destination lacks enough channel capa…

518620aeby Rusty Russell+67−01 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-prioritydocs: add frozen for uv syncby Lakshya Singh · ad040d0d · Oct 10, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Lakshya Singh

docs: add frozen for uv sync

prevent updates to lock file which might leave working directory dirty
resulting in a modded cln version build

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

This commit only updates documentation. It adds the '--frozen' flag to 'uv sync' commands in the installation guide so that the build tool does not update the dependency lock file automatically. This prevents the working directory from becoming 'dirty' during a build, which could otherwise cause the compiled Core Lightning version string to incorrectly show as modified. There is no code change and no security vulnerability is introduced or fixed.

Lower-prioritychore: remove __init__.py for package extensionby Lakshya Singh · d05a8ee7 · Oct 10, 2025 · 12 filesMessage 80 · StrongInformational 15Details
Commit message · Lakshya Singh

chore: remove __init__.py for package extension

for python 3.3+ we don’t need an __init__.py at namespace package to
allow extensions instead we can just get rid of them

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit removes empty Python package marker files called __init__.py from several related Python library packages. It is a routine modernization to use Python 3.3+'s built-in namespace package support instead of the older pkgutil workaround. There is no security-relevant change here.

Lower-prioritychore: remove uv sources defined at workspace levelby Lakshya Singh · 2879ef12 · Oct 10, 2025 · 6 filesMessage 77 · AdequateInformational 15Details
Commit message · Lakshya Singh

chore: remove uv sources defined at workspace level

duplicate definition isn’t required as we already defined them at
workspace level sources

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a routine cleanup of Python project configuration files. It removes duplicate workspace dependency definitions that were already set at the workspace level. There is no security relevance: no code behavior changes, no bug fixes, and no vulnerability patches.

Lower-priorityplugin: remove features when plugin is disabledby Peter Neuroth · c7531b0f · Oct 7, 2025 · 2 filesMessage 68 · AdequateModerate 51Details
Commit message · Peter Neuroth

plugin: remove features when plugin is disabled

We need to remove the feature bits set via a plugins get_manifest
response when the init response disables the plugin.

Changelog-Fixed Remove feature bits set by a plugin when the plugin
disables itself during init.

Signed-off-by: Peter Neuroth <pet.v.ne@gmail.com>

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

This commit fixes a bug in Core Lightning where a plugin could advertise certain protocol features when it first starts up, then later disable itself during initialization, but leave those feature bits still advertised by the node. The fix stores the feature bits a plugin claims and removes them if the plugin later disables itself. A leftover feature bit could mislead other nodes about what this node supports, potentially causing connection or protocol issues, though it is not a direct theft-of-funds bug.

Lower-priorityRevert "update makefile to remove hsm_encryption"by Rusty Russell · 8895ca29 · Oct 2, 2025 · 1 fileMessage 60 · AdequateInformational 11Details
Commit message · Rusty Russell

Revert "update makefile to remove hsm_encryption"

This reverts commit 084b03375cac181c7ddeba7204a11e2877645003.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 11/100

This commit is a simple build-system revert that puts one file (common/hsm_encryption.o) back into the fuzzing test Makefile. It undoes a prior change that had removed that file from the fuzzer's build list. There is no direct code change shown, and nothing in the commit message or diff indicates a security vulnerability or fix. It is most likely a routine build correction.

Lower-prioritypyln-testing: pass timeout to BitcoinProxyby Matt Whitlock · f7db1440 · Oct 2, 2025 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Matt Whitlock

pyln-testing: pass timeout to BitcoinProxy

The bitcoin.rpc.DEFAULT_HTTP_TIMEOUT of 30 seconds may not be enough
time to generate a block when the test machine is under load. Pass
pyln.testing.utils.TIMEOUT to bitcoin.rpc.RawProxy to allow extra time:
currently 60 seconds by default or 180 seconds if SLOW_MACHINE is set.

Changelog-None

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit changes a testing helper so that calls to Bitcoin Core during automated tests wait longer before giving up. It is purely a test-infrastructure reliability tweak and does not affect production code, user funds, or network security.

AI review queuedwallet: unit test the migration dedup code.by Rusty Russell · 5b06e653 · Oct 2, 2025 · 2 filesMessage 70 · AdequateInformational 12Details
Commit message · Rusty Russell

wallet: unit test the migration dedup code.

This is based on a real database, which values changed.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit adds a new automated test for a database cleanup routine called migrate_remove_chain_moves_duplicates. The test builds a small in-memory database, inserts many example records (some deliberately duplicated), runs the cleanup function, and checks that only the duplicates are removed. It does not change the actual cleanup code or any production behavior; it only adds test coverage.

AI review queuedwallet: find and remove any duplicates from the bug we just fixed.by Rusty Russell · fb973fea · Oct 2, 2025 · 3 filesMessage 65 · AdequateLow 27Details
Commit message · Rusty Russell

wallet: find and remove any duplicates from the bug we just fixed.

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 · Low 27/100

This commit adds a database cleanup routine that removes accidentally duplicated accounting records created by a previous bug. It is a data-integrity fix, not a security patch that stops an active attack. The underlying bug allowed the same on-chain money movement to be recorded twice—once under a live channel reference and once under a non-channel account reference—so users' coin-movement reports could be wrong until the duplicates are removed.

AI review queuedwallet: unit test for duplicate detection in wallet_save_chain_mvt.by Rusty Russell · 7631ce63 · Oct 2, 2025 · 2 filesMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell

wallet: unit test for duplicate detection in wallet_save_chain_mvt.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit only adds a new automated test file. It checks that a wallet function called wallet_save_chain_mvt correctly ignores exact duplicate records while still storing records that differ in transaction ID, output point, or movement type. There is no change to production code, no bug fix, and no security patch.

AI review queuedwallet: don't insert duplicate chain_moves entries after accounts.db migration.by Rusty Russell · bd1ba164 · Oct 2, 2025 · 2 filesMessage 73 · AdequateLow 28Details
Commit message · Rusty Russell

wallet: don't insert duplicate chain_moves entries after accounts.db migration.

When we migrate from accounts.db, we use the `account_nonchannel_id`
field. But we can replay the block chain and the channel involved is
still open, we will use the `account_channel_id` field, and our duplicate
detection fails.

As a result, we can end up with duplicate entries in the database, which
make accounting incorrect.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: JSON-RPC: `listchainmoves` could contain bogus duplicate entries after 25.09 bookkeeper migration.

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 · Low 28/100

This commit fixes a bug in Core Lightning's accounting/bookkeeping system where the same on-chain money movement could be recorded twice in the database after a migration. The bug happens because the code looked for duplicates using one account identifier, but after a migration or replay it could store the same event under a different identifier. The fix makes duplicate detection check both possible identifiers. It is a data-integrity bug, not a security vulnerability that an attacker can exploit.

AI review queuedpytest: test that we don't delete htlcs as soon as channel closed, wait for restart.by Rusty Russell · aa8d858c · Oct 2, 2025 · 1 fileMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell

pytest: test that we don't delete htlcs as soon as channel closed, wait for restart.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit only adds a new test to the test suite. It checks that old payment records (HTLCs) are not deleted from the database immediately when a channel closes, but are instead cleaned up later when the node restarts. There is no code change that fixes or changes any behavior.

AI review queuedwallet: don't delete old htlcs when we forget a channel, do it on startup.by Rusty Russell · cb2849d0 · Oct 2, 2025 · 5 filesMessage 100 · StrongInformational 21Details
Commit message · Rusty Russell

wallet: don't delete old htlcs when we forget a channel, do it on startup.

For old channels, this can take a while, and it stops everything. But
we are only doing this to save space; it's not a *functional* necessity.

A quick and dirty test with 50,000 htlcs shows the htlc deletion took
450msec. I tried adding an index, and changing it to set hstate to
HTLC_STATE_INVALID instead of deleting entries, but it still took about 350ms.

Whereas the "COUNT(*)" only took 1.7msec, so it's worth keeping.

Reported-by: @michael1011
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Changed: lightningd: we defer deletion of old htlcs on channel close, to avoid pausing for a long time (we clean them on startup)
Fixes: https://github.com/ElementsProject/lightning/issues/7962

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 21/100

This change moves a database cleanup job from the moment a channel closes to the next time the node starts up. Previously, deleting tens of thousands of old payment records when a channel closed could freeze the node for hundreds of milliseconds. Now the records are counted and reported immediately, but actually deleted later during startup. It is a performance and availability improvement, not a security fix.

AI review queuedwallet: don't show htlcs from closed channels in listhtlcs.by Rusty Russell · bee54f0e · Oct 2, 2025 · 1 fileMessage 85 · StrongInformational 18Details
Commit message · Rusty Russell

wallet: don't show htlcs from closed channels in listhtlcs.

This doesn't happen yet, since we delete all HTLCs when we close a channel. But we're
about to change that, so update the wallet_htlcs_first() code to avoid them.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a small, forward-looking cleanup change in Core Lightning's wallet code. It adjusts a database query so that the `listhtlcs` command will not return HTLCs (payment forwarding contracts) belonging to channels that have already been closed. The commit explicitly says this situation cannot happen yet because HTLCs are currently deleted when a channel closes, but the code is being prepared for an upcoming change where closed-channel HTLCs may be kept around.

Lower-prioritytests: skip certain tests if RUST is not enabledby Matt Whitlock · a05a3748 · Oct 2, 2025 · 5 filesMessage 78 · AdequateInformational 15Details
Commit message · Matt Whitlock

tests: skip certain tests if RUST is not enabled

* tests/test_cln_lsps.py::test_lsps0_listprotocols
* tests/test_clnrest.py
* tests/test_connection.py::test_wss_proxy

Changelog-Fixed: pytest: Tests that require Rust no longer fail if Rust is disabled.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes test code. It makes pytest skip certain tests when the software is built without Rust support, so those tests no longer fail in non-Rust builds. There is no change to the actual Lightning node or wallet code, and no security issue is introduced or fixed.

Lower-priorityupdate makefile to remove hsm_encryptionby Sangbida Chaudhuri · 084b0337 · Oct 1, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Sangbida Chaudhuri

update makefile to remove hsm_encryption

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit removes one object file (hsm_encryption.o) from a fuzz-testing Makefile. It is a build/test maintenance change with no visible security relevance to the actual Core Lightning software.

Lower-priorityworkflow: Add uv installation stepby ShahanaFarooqui · 3af8a028 · Oct 1, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · ShahanaFarooqui

workflow: Add uv installation step

RPC documentation is not syncing on readme server with error `uv: command not found`.

Changelog-None.

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

This commit adds a missing 'uv' tool installation step to an internal GitHub workflow that synchronizes RPC documentation to a readme server. It is a routine build/CI fix with no apparent security relevance.

Lower-prioritybookkeeper: fix reloading of rebalances.by Rusty Russell · 343d30ae · Oct 1, 2025 · 2 filesMessage 68 · AdequateInformational 21Details
Commit message · Rusty Russell

bookkeeper: fix reloading of rebalances.

Parse key correctly.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: bookkeeper: failed reload of rebalances on restart.

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

This commit fixes a simple off-by-one bug in the bookkeeper plugin. When restarting, the plugin reloads saved 'rebalance' records from its database. The code was reading the wrong part of the database key, so it could not split the two stored numbers apart and would log a 'weird' error and skip the record. The fix changes one number so it reads the correct key segment. A previously-failing test is now enabled. There is no direct security exploit here; the main risk is that accounting records could be missing or inconsistent after a restart.

Lower-prioritybookkeeper: test (failing!) for rebalances on restart.by Rusty Russell · ea1d233d · Oct 1, 2025 · 1 fileMessage 83 · StrongLow 28Details
Commit message · Rusty Russell

bookkeeper: test (failing!) for rebalances on restart.

```
lightningd-1 2025-09-22T02:10:10.978Z **BROKEN** plugin-bookkeeper: Unparsable datastore ["bookkeeper","rebalances","1-2"]
```

And, indeed, rebalance is missing:

```
> outbound_ev = only_one([ev for ev in inc_evs if ev['tag'] == 'rebalance_fee'])

tests/test_bookkeeper.py:825:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

arr = []

def only_one(arr):
"""Many JSON RPC calls return an array; often we only expect a single entry
"""
> assert len(arr) == 1
E AssertionError

```

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

This commit adds a new test that demonstrates a bug in Core Lightning's bookkeeping plugin: after a node restart, 'rebalance' fee records are lost and the plugin logs a 'BROKEN' warning about an unparsable datastore entry. The test is marked as expected-to-fail (xfail) so it documents the bug without breaking CI. It is a test-only change, not a fix, and there is no security exploit here.

Lower-prioritylightningd: remove --experimental-quiesce and --experimental-offersby Rusty Russell · dfe6e3c2 · Oct 1, 2025 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

lightningd: remove --experimental-quiesce and --experimental-offers

Deprecated 24.11, disabled 25.05 (they're the default now).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Removed: Config: --experimental-offers and --experimental-quiesce (default since v24.11)

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

This commit removes two old command-line flags, --experimental-quiesce and --experimental-offers, from the Core Lightning node software. These features became standard behavior in version 24.11, so the flags were only kept around temporarily to avoid breaking old configurations. There is no security issue here; it is ordinary cleanup of deprecated options.

Lower-priorityoffers: remove `blinding` from decode JSON-RPC.by Rusty Russell · ba75f7bc · Oct 1, 2025 · 2 filesMessage 68 · AdequateInformational 17Details
Commit message · Rusty Russell

offers: remove `blinding` from decode JSON-RPC.

Deprecated in 24.11, disabled in 25.05.

Changelog-Removed: JSON-RPC: `decode` field `blinding` (use `first_path_key` as per modern BOLT naming)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit removes an old JSON-RPC field named `blinding` from the `decode` command output. It was already renamed to `first_path_key` in a previous version and has now been fully removed after a deprecation period. This is a routine cleanup, not a security fix.

Lower-prioritylightningd: remove blinding field from onion_message_recv hook.by Rusty Russell · d73b60c5 · Oct 1, 2025 · 2 filesMessage 73 · AdequateInformational 21Details
Commit message · Rusty Russell

lightningd: remove blinding field from onion_message_recv hook.

Changelog-Removed: Plugins: `onion_message_recv` hook `blinding` field (use `first_path_key` as per modern BOLT 4 naming).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit removes an old, duplicate field name from a plugin hook used when receiving onion-routed messages. The field 'blinding' is being dropped in favor of the newer name 'first_path_key'. It is a planned API cleanup, not a security fix, and does not change how messages are processed or validated.

AI review queueddoc: pretty!by Rusty Russell · 350af1a3 · Oct 1, 2025 · 1 fileMessage 33 · OpaqueInformational 15Details
Commit message · Rusty Russell

doc: pretty!

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

33/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body! Too few words to establish purpose
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit only reformats a documentation table so the columns line up nicely. No code, no behavior, and no security-related changes are present.

AI review queuedBOLT12: Update recurrence to latest spec draft.by Rusty Russell · 54444e43 · Oct 1, 2025 · 20 filesMessage 68 · AdequateLow 27Details
Commit message · Rusty Russell

BOLT12: Update recurrence to latest spec draft.

Changes:
* Fields renumbered to their draft values + billion.
* offer_recurrence now comes in compulsory or optional (backwards compat) flavors.
* `proportional_amount` is now inside `offer_recurrence_base` not `offer_recurrence_paywindow`.
* New field `invreq_recurrence_cancel`.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-EXPERIMENTAL: Draft specification for recurring offers changed: old recurring offers will no longer work.

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: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 27/100

This commit updates Core Lightning's implementation of BOLT12 recurring payments to match a newer draft of the specification. It renumbers data fields, splits a setting into compulsory and optional versions, moves a proportional-amount setting into a different field, and adds a new invoice-request cancellation field. The changelog explicitly notes this is an experimental/draft feature change that breaks backward compatibility with old recurring offers. There is no direct evidence in the commit of a security vulnerability.

AI review queuedBOLT12: Remove `start_any_period` from recurrence_base.by Rusty Russell · e7ea57e1 · Oct 1, 2025 · 17 filesMessage 73 · AdequateInformational 19Details
Commit message · Rusty Russell

BOLT12: Remove `start_any_period` from recurrence_base.

Offer_absolute_expiry should be used if you want to require starting at the start.

Changelog-EXPERIMENTAL: Protocol: BOLT 12 recurrence `start_any_period` removed, use expiry if you need to restrict when they can start using the offer.

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

This commit removes an experimental BOLT12 feature called `start_any_period` from Core Lightning's offer recurrence system. It is a protocol/API cleanup change, not a security patch. The functionality is replaced by the existing `absolute_expiry` mechanism for restricting when offers can be used. There is no direct evidence in the commit of a vulnerability being fixed.

Lower-prioritytools: I cannot spell recurrEnce.by Rusty Russell · 92a69619 · Oct 1, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

tools: I cannot spell recurrEnce.

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 spelling check to the project's tooling. It prevents developers from misspelling the word 'recurrence' as 'recurrance' in the codebase. There is no security relevance.