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
227commits · 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 59 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.

AI review queuedwallet: scaffold BIP86 addrtypeby Sangbida Chaudhuri · d0d51479 · Oct 26, 2025 · 7 filesMessage 58 · ThinInformational 15Details
Commit message · Sangbida Chaudhuri

wallet: scaffold BIP86 addrtype

Add the UTXO_P2TR_BIP86 in preparation to add BIP86 wallet functions such as newaddr, listaddr etc. We also add a new index in the database for BIP86 as this is using a completely different derivation path and hsm_secret.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a small, preparatory code change that adds a new internal label for a future type of Bitcoin address (BIP86-style taproot). It does not implement the feature, change how money is handled, or fix any bug. There is no security issue visible in this patch.

AI review queuedtests: Update test assertions and comments for unified derivation approachby Sangbida Chaudhuri · 22b17daa · Oct 26, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Sangbida Chaudhuri

tests: Update test assertions and comments for unified derivation approach

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

This commit only changes test files. It updates test cases to use the new 'p2tr' address type label instead of older labels like 'bech32' or 'bip86', removes skip markers that previously disabled tests, and adjusts expected output counts and comments to match a unified key derivation approach. There is no change to production wallet or Lightning code, so it does not introduce or fix a security vulnerability on its own.

AI review queuedtools: update hsmtool to use the new hsm_secret API.by Sangbida Chaudhuri · 3da0f16f · Oct 26, 2025 · 5 filesMessage 73 · AdequateLow 32Details
Commit message · Sangbida Chaudhuri

tools: update hsmtool to use the new hsm_secret API.

Changelog-Added: `hsmtool` now supports hsm_secret files using a 12-word mnemonic.
Changelog-Removed: hsmtool support for mnemonics in non-english languages removed.

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

This commit refactors the Core Lightning 'hsmtool' utility to use a new unified API for handling the node's master secret file (hsm_secret). It adds support for storing the secret as a 12-word English mnemonic phrase inside the file, and removes support for non-English mnemonic wordlists. The change is a feature/rewrite rather than a clear security fix, but it touches sensitive key-handling code and removes some legacy behavior. There is no vendor statement that this is a security patch, and no independent attribution.

AI review queuedtests: add BIP86 supportby Sangbida Chaudhuri · 7f3a57cc · Oct 26, 2025 · 3 filesMessage 38 · OpaqueInformational 18Details
Commit message · Sangbida Chaudhuri

tests: add BIP86 support

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit only adds tests and documentation for a new wallet address type called BIP86. It does not change the actual wallet or address-generation code. There is no security bug visible in this patch.

Lower-prioritylightningd: fix compilation for older compilers.by Rusty Russell · f40ff1d0 · Oct 24, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

lightningd: fix compilation for older compilers.

gcc 9.3.0-10 (Ubunto Focal):

```
cc lightningd/offer.c
In file included from ccan/ccan/cast/cast.h:6,
from lightningd/offer.c:2:
lightningd/offer.c: In function 'json_createoffer':
ccan/ccan/cast/cast.h:115:13: error: dereferencing pointer to incomplete type 'struct json_escape'
115 | __typeof__(**(union { int z; __typeof__(expr) x; }){0}.x)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ccan/ccan/build_assert/build_assert.h:38:24: note: in definition of macro 'BUILD_ASSERT_OR_ZERO'
38 | (sizeof(char [1 - 2*!(cond)]) - 1)
| ^~~~
ccan/ccan/cast/cast.h:122:31: note: in expansion of macro 'cast_const_strip2'
122 | __builtin_types_compatible_p(cast_const_strip2(expr), \
| ^~~~~~~~~~~~~~~~~
ccan/ccan/cast/cast.h:59:35: note: in expansion of macro 'cast_const_compat2'
59 | (0 ? BUILD_ASSERT_OR_ZERO(cast_const_compat2((expr), type)) : \
| ^~~~~~~~~~~~~~~~~~
lightningd/offer.c:105:12: note: in expansion of macro 'cast_const2'
105 | cast_const2(const struct json_escape **,
| ^~~~~~~~~~~
ccan/ccan/cast/cast.h:115:13: error: dereferencing pointer to incomplete type 'const struct json_escape'
115 | __typeof__(**(union { int z; __typeof__(expr) x; }){0}.x)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ccan/ccan/build_assert/build_assert.h:38:24: note: in definition of macro 'BUILD_ASSERT_OR_ZERO'
38 | (sizeof(char [1 - 2*!(cond)]) - 1)
| ^~~~
ccan/ccan/cast/cast.h:123:10: note: in expansion of macro 'cast_const_strip2'
123 | cast_const_strip2(type))
| ^~~~~~~~~~~~~~~~~
ccan/ccan/cast/cast.h:59:35: note: in expansion of macro 'cast_const_compat2'
59 | (0 ? BUILD_ASSERT_OR_ZERO(cast_const_compat2((expr), type)) : \
| ^~~~~~~~~~~~~~~~~~
lightningd/offer.c:105:12: note: in expansion of macro 'cast_const2'
105 | cast_const2(const struct json_escape **,
| ^~~~~~~~~~~
make: *** [Makefile:320: lightningd/offer.o] Error 1
```

Reported-by: Shahana
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 15/100

This commit fixes a build failure on older GCC compilers by adding a missing header file. It does not change runtime behavior or fix any security vulnerability.

Lower-prioritylightningd: try harder to ensure uniqueness in --dev-save-plugin-io names.by Rusty Russell · 9987b6f9 · Oct 24, 2025 · 2 filesMessage 85 · StrongInformational 18Details
Commit message · Rusty Russell

lightningd: try harder to ensure uniqueness in --dev-save-plugin-io names.

Incorporate a time: this covers the restart case as well. And make it time_mono(),
which doesn't get overridden when we override normal wall time.

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
AI analysis · Informational 18/100

This commit fixes a minor developer-only bug where a special diagnostic flag (--dev-save-plugin-io) could reuse filenames across internal restarts, causing file creation to fail. It adds a startup timestamp to filenames so they stay unique. This flag is not used in production and the failure mode is a noisy error, not a security vulnerability.

Lower-prioritypytest: test for splicing while channel is not announced yet.by Rusty Russell · d4a541c5 · Oct 24, 2025 · 1 fileMessage 83 · StrongModerate 54Details
Commit message · Rusty Russell

pytest: test for splicing while channel is not announced yet.

```
DEBUG lightningd: Got depth change 2->3 for e9e31956f77c3844ee2e6e4607dbfebdee95a9aa549668a7a429b8246a6a29de
**BROKEN** lightningd: FATAL SIGNAL 6 (version v25.09-20-g003ba4a)
**BROKEN** lightningd: backtrace: common/daemon.c:41 (send_backtrace) 0x619bef20e274
**BROKEN** lightningd: backtrace: common/daemon.c:78 (crashdump) 0x619bef20e408
**BROKEN** lightningd: backtrace: ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 ((null)) 0x7a1ccf24532f
**BROKEN** lightningd: backtrace: ./nptl/pthread_kill.c:44 (__pthread_kill_implementation) 0x7a1ccf29eb2c
**BROKEN** lightningd: backtrace: ./nptl/pthread_kill.c:78 (__pthread_kill_internal) 0x7a1ccf29eb2c
**BROKEN** lightningd: backtrace: ./nptl/pthread_kill.c:89 (__GI___pthread_kill) 0x7a1ccf29eb2c
**BROKEN** lightningd: backtrace: ../sysdeps/posix/raise.c:26 (__GI_raise) 0x7a1ccf24527d
**BROKEN** lightningd: backtrace: ./stdlib/abort.c:79 (__GI_abort) 0x7a1ccf2288fe
**BROKEN** lightningd: backtrace: ./assert/assert.c:96 (__assert_fail_base) 0x7a1ccf22881a
**BROKEN** lightningd: backtrace: ./assert/assert.c:105 (__assert_fail) 0x7a1ccf23b516
**BROKEN** lightningd: backtrace: lightningd/peer_control.c:2202 (funding_depth_cb) 0x619bef1ac497
**BROKEN** lightningd: backtrace: lightningd/watch.c:223 (txw_fire) 0x619bef1cfcbf
**BROKEN** lightningd: backtrace: lightningd/watch.c:292 (watch_topology_changed) 0x619bef1cffa4
**BROKEN** lightningd: backtrace: lightningd/chaintopology.c:829 (updates_complete) 0x619bef144a8c
**BROKEN** lightningd: backtrace: lightningd/chaintopology.c:1047 (get_new_block) 0x619bef14561e
```

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 · Moderate 54/100

This commit adds a test that reproduces a crash in Core Lightning when a user performs a channel splice before the channel has been publicly announced. The crash is an assertion failure in the code that handles funding transaction confirmations. The test is marked as expected to fail for now, meaning the bug exists but is not yet fixed.

Lower-prioritymemleak: make notleak() work even before memleak is initalized.by Rusty Russell · 06f18b1d · Oct 24, 2025 · 3 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell

memleak: make notleak() work even before memleak is initalized.

It now simply renames tal names, so it's harmless to do even if we're
not going to do memleak detection.

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

This is a small internal cleanup in Core Lightning's memory-tracking helpers. It makes the 'notleak' marker safe to use earlier during program startup, before the full memory-leak detection system is ready. There is no direct security vulnerability being fixed; it is a robustness improvement that prevents potential false-positive leak reports or minor memory accounting issues during initialization.

Lower-prioritybitcoin: remove unused scriptpubkey_opreturn_padded.by Rusty Russell · 4bc357f0 · Oct 24, 2025 · 2 filesMessage 72 · AdequateInformational 12Details
Commit message · Rusty Russell

bitcoin: remove unused scriptpubkey_opreturn_padded.

I noticed, because it pulled in randomness routines.

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

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
AI analysis · Informational 12/100

This commit simply removes an unused helper function that created random padding for Bitcoin-style data scripts. There is no security fix or vulnerability here—just cleanup of dead code that happened to pull in randomness routines.

Lower-prioritytests: use timemono not time_now() for duration measurement.by Rusty Russell · f801054e · Oct 24, 2025 · 2 filesMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

tests: use timemono not time_now() for duration measurement.

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

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes two internal test files to use a monotonic clock instead of the current wall-clock time when measuring how long test operations take. It does not change any production code, cryptographic algorithms, or network behavior. There is no security issue here.

Lower-priorityautogenerate-rpc-examples.py: add examples for listchainmoves and listchannelmoves.by Rusty Russell · 71f164a4 · Oct 24, 2025 · 4 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

autogenerate-rpc-examples.py: add examples for listchainmoves and listchannelmoves.

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

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

This commit only adds documentation examples for two existing RPC commands, listchainmoves and listchannelmoves. It does not change any runtime code, security logic, or behavior of the Core Lightning node. There is no security issue here.

Lower-prioritylightningd: remove unused `start_time` field in bitcoind_getfilteredblock.by Rusty Russell · 1df86130 · Oct 24, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

lightningd: remove unused `start_time` field in bitcoind_getfilteredblock.

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

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

This commit removes an unused internal timestamp field (`start_time`) from a data structure used when fetching filtered Bitcoin blocks. It is a straightforward code cleanup with no functional or security change.

AI review queuedlightningd: fix crash in channel_control.by Rusty Russell · 5a530e6c · Oct 24, 2025 · 1 fileMessage 78 · AdequateLow 30Details
Commit message · Rusty Russell

lightningd: fix crash in channel_control.

I got a NULL deref on `infcopy->remote_funding = *inflight->funding->splice_remote_funding`
at once point in testing, so this should prevent that from happening,
yet still allow us to catch it in CI if it happens again.

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

This commit fixes a programming bug where Core Lightning could crash because it tried to use a missing piece of data (a NULL pointer) when preparing information about an in-progress channel funding transaction. The fix adds a safety check: if the expected data is missing, it logs a backtrace for debugging and skips that entry instead of crashing. The crash appears to have been triggered during internal testing of a newer feature (splicing), and the patch is defensive rather than a complete fix for why the data might be missing.

AI review queuedcommon: add new_htable() macro to allocate, initialize and setup memleak coverage for any typed hash table.by Rusty Russell · 75616f6b · Oct 24, 2025 · 23 filesMessage 83 · StrongInformational 18Details
Commit message · Rusty Russell

common: add new_htable() macro to allocate, initialize and setup memleak coverage for any typed hash table.

You can now simply add per-tal-object helpers for memleak, but our older pattern required
calling memleak functions explicitly during memleak handling. Hash tables in particular need
to be dynamically allocated (we override the allocators using htable_set_allocator and assume
this), so it makes sense to have a helper macro that does all three.

This eliminates a huge amount of code.

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
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a code cleanup change that introduces a helper macro to reduce repeated boilerplate when creating hash tables and registering them with the project's memory-leak detection tooling. It does not fix a known security bug, change protocol behavior, or alter access controls. The patch removes many manual memleak-registration calls and replaces them with a single macro that performs allocation, initialization, and registration together.

AI review queuedlightningd: cancel watching original funding when we switch to the new one via splice.by Rusty Russell · 89eaf834 · Oct 24, 2025 · 6 filesMessage 73 · AdequateLow 32Details
Commit message · Rusty Russell

lightningd: cancel watching original funding when we switch to the new one via splice.

This happens if the channel is *not* announcable yet. Then we hit the assertion
in funding_depth_cb that the txid is the same as the current funding.txid.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-EXPERIMENTAL: fixed crash when we splice a channel which hasn't been announced yet.

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: broader security terminologysecond-pass: security-sensitive path
AI analysis · Low 32/100

This patch fixes a crash in Core Lightning that could happen when using the experimental splicing feature on a channel that hasn't been publicly announced yet. The crash was caused by the node still watching the old funding transaction while switching to a new one after a splice. The fix stops watching the old funding transaction before updating to the new one. It is a bug fix for an experimental feature and does not appear to be an exploitable security vulnerability.

Security candidatewallet: make sure to watch all txids in transactions table.by Rusty Russell · 478a0d57 · Oct 24, 2025 · 5 filesMessage 85 · StrongInformational 24Details
Commit message · Rusty Russell

wallet: make sure to watch all txids in transactions table.

We watch if they are to do with a channel, or have outputs going to us, but otherwise
we didn't, so we never updated the blockheight in the db.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: JSON-RPC: `listtransactions` now correctly updates `blockheight` for txs created by `sendpsbt` which have no change outputs.

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 boundarysigning or wallet path
AI analysis · Informational 24/100

This commit fixes a bookkeeping bug in Core Lightning's wallet. When a user broadcast a transaction created with `sendpsbt` that had no change output coming back to the node, the node did not track the transaction's confirmation status. As a result, `listtransactions` would never show the correct `blockheight` for that transaction. The fix makes the node explicitly watch all unconfirmed transactions in its database so their confirmation height gets updated. There is no direct security exploit here; it is a data-correctness and user-experience issue.

Security candidatepytest: add test that we notice height change of sendpsbt with no change.by Rusty Russell · 2591ac48 · Oct 24, 2025 · 1 fileMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell

pytest: add test that we notice height change of sendpsbt with no change.

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

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

This commit only adds a new automated test to the project's test suite. It does not change any production code, so it cannot directly fix or introduce a security vulnerability. The test checks that a wallet transaction created via sendpsbt is correctly tracked from unconfirmed to confirmed status, including after a node restart. It is currently marked as expected to fail (xfail), meaning the underlying behavior may not yet work as intended.

Lower-priorityadd .clangd to gitignoreby Peter Neuroth · 29999efb · Oct 24, 2025 · 1 fileMessage 51 · ThinInformational 15Details
Commit message · Peter Neuroth

add .clangd to gitignore

I use .clangd to configure compiler flags for the lsp (language server)
I use in nvim.

Changelog-None

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

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit adds '.clangd' to the .gitignore file, which simply tells Git to ignore local configuration files for a C language server used by some developers. It does not change any program code, build process, or security behavior.

Lower-priorityplugins: make fatal errors neater.by Rusty Russell · e28fed75 · Oct 24, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

plugins: make fatal errors neater.

Without this they get run together on stderr.

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 is a trivial formatting fix. When a plugin crashes with a fatal error, the message printed to the terminal was missing a final newline, so multiple error messages could appear squashed together. The change adds that missing newline. It has no security relevance.

Lower-prioritycommon/jsonrpc_io: helper routines for reading JSON from sockets.by Rusty Russell · 68f6a1a1 · Oct 24, 2025 · 5 filesMessage 73 · AdequateInformational 11Details
Commit message · Rusty Russell

common/jsonrpc_io: helper routines for reading JSON from sockets.

The efficient way to do this is to use membuf, which handles the buffer
control (only using memmove when necessary). We have multiple places
where we opencoded this, some of which did not use membuf at all.

So now we create common infrastructure. I tried making it a single
function but the various users are quite different, so instead I opted
for a toolbox approach.

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

This commit adds a new shared helper library for reading and parsing JSON-RPC messages from network sockets. It is purely a code-organization change: it introduces reusable routines and a unit test, but does not change any existing callers or fix any reported bug. There is no indication in the commit message or diff that this is a security patch.

Lower-prioritycommon: export helper membuf_tal_realloc.by Rusty Russell · 7c9e016f · Oct 24, 2025 · 4 filesMessage 70 · AdequateInformational 15Details
Commit message · Rusty Russell

common: export helper membuf_tal_realloc.

We have to call it membuf_tal_resize() because the other on is
a ccan/json_out static function!

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

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit simply moves an existing memory-resizing helper function from two separate source files into a shared utility file so both places can call the same copy. The actual behavior of the code does not change; it is a routine code cleanup (refactoring).

Lower-prioritylightningd: use jsonrpc_io for plugin JSON commands.by Rusty Russell · 4958cd32 · Oct 24, 2025 · 2 filesMessage 65 · AdequateLow 26Details
Commit message · Rusty Russell

lightningd: use jsonrpc_io for plugin JSON commands.

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

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Low 26/100

This commit refactors how Core Lightning reads JSON messages from plugins, switching from a custom hand-rolled parser buffer to a shared helper called jsonrpc_io. The change removes a lot of duplicated parsing logic and may fix subtle bugs where the old code could mis-handle partial or large plugin responses. There is no direct evidence in the commit that this fixes a known security vulnerability, but centralizing JSON-RPC input handling is generally a hardening move that reduces the chance of parser-related crashes or misrouting of plugin messages.

Lower-priorityplugins: remove unused json_buffer / json_toks members from libplugin-pay.by Rusty Russell · dd7cc71b · Oct 24, 2025 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

plugins: remove unused json_buffer / json_toks members from libplugin-pay.

They were never referenced, and saving the toks is questionable since their
lifetime is not guaranteed to live beyond this call (at least the buffer was
duplicated, but that also assumed it was at the start of the object).

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

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

This commit removes two unused data fields from the payment-handling code in Core Lightning's plugins. The fields stored a copy of the incoming JSON command buffer and a pointer to its parsed tokens, but nothing in the code actually read them. The commit message notes that keeping the parsed token pointer was especially questionable because the tokens could become invalid after the call. This is a code cleanup with no direct security fix; it eliminates a latent risk of future misuse but does not change any active behavior.

Lower-prioritylibplugin: use jsonrpc_io logic for sync requests too.by Rusty Russell · bc4bb2b0 · Oct 24, 2025 · 3 filesMessage 65 · AdequateLow 26Details
Commit message · Rusty Russell

libplugin: use jsonrpc_io logic for sync requests too.

It's a little overkill, but it's clear.

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

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Low 26/100

This commit refactors how Core Lightning plugins read JSON-RPC replies when they make synchronous requests to lightningd. It replaces a custom, simpler read-and-parse loop with the same shared JSON-RPC I/O machinery already used for asynchronous requests. The change is described by the author as 'a little overkill, but it's clear'—meaning it is a code-quality/consistency refactor rather than a fix for a known security bug. There is no direct evidence in the commit or supplied references that this resolves an exploitable vulnerability.

Lower-prioritycommon: add json_dup_contents() to duplicate toks and buffer.by Rusty Russell · e5318ee6 · Oct 24, 2025 · 4 filesMessage 65 · AdequateInformational 12Details
Commit message · Rusty Russell

common: add json_dup_contents() to duplicate toks and buffer.

We do this in several places, might as well make it common code.

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

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 12/100

This commit is a routine code cleanup. It introduces a shared helper function that copies a JSON buffer and its associated tokens, then replaces two existing hand-rolled copy operations in the JSON-RPC code with that helper. There is no indication of a security fix or behavior change.