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 47 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 queuedcommon: add amount_msat_deduct / amount_msat_deduct_sub.by Rusty Russell · 35f65c5d · Nov 17, 2025 · 21 filesMessage 63 · AdequateInformational 15Details
Commit message · Rusty Russell

common: add amount_msat_deduct / amount_msat_deduct_sub.

I added amount_msat_accumulate for the "a+=b" case, but I was struggling
with a name for the subtractive equivalent. After some prompting, ChatGPT
suggested deduct.

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

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 15/100

This commit is a straightforward code cleanup: it introduces two new helper functions, amount_msat_deduct and amount_msat_deduct_sat, which are shorthand for 'subtract this amount from itself' (like a -= b). It then replaces many existing calls of the longer form amount_msat_sub(&x, x, y) with the shorter amount_msat_deduct(&x, y). There is no change in behavior, no bug fix, and no security relevance in the diff itself.

Security candidateaskrene: fix use-after-free if remove_htlc_min_violations fails.by Rusty Russell · e1202021 · Nov 17, 2025 · 1 fileMessage 78 · AdequateLow 41Details
Commit message · Rusty Russell

askrene: fix use-after-free if remove_htlc_min_violations fails.

It can only fail on overflow, but if it did, the fail path frees working_ctx
and returns "error_message".

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

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Low 41/100

This commit fixes a rare programming bug in Core Lightning's 'askrene' routing plugin. If a specific internal function failed due to an overflow, the code would free a memory context and then try to use it again on the error-handling path, which is a use-after-free. The patch changes the function to use a longer-lived memory context so the error path is safe. The failure condition is described as only possible on overflow, making real-world exploitation unlikely.

Lower-prioritylightningd: fix access to bcli plugin once it's freed.by Rusty Russell · 0b8239f3 · Nov 16, 2025 · 1 fileMessage 73 · AdequateLow 34Details
Commit message · Rusty Russell

lightningd: fix access to bcli plugin once it's freed.

```
2025-11-13T07:47:16.5733646Z Valgrind error file: valgrind-errors.46048
2025-11-13T07:47:16.5733739Z ==46048== Invalid read of size 8
2025-11-13T07:47:16.5733869Z ==46048== at 0x2F2B47: strmap_add_ (strmap.c:69)
2025-11-13T07:47:16.5734014Z ==46048== by 0x212066: plugin_request_send (plugin.c:2509)
2025-11-13T07:47:16.5734160Z ==46048== by 0x18FA54: bitcoin_plugin_send (bitcoind.c:123)
2025-11-13T07:47:16.5734329Z ==46048== by 0x190AA7: bitcoind_getrawblockbyheight_ (bitcoind.c:537)
2025-11-13T07:47:16.5734490Z ==46048== by 0x1917E3: bitcoind_getfilteredblock_ (bitcoind.c:857)
2025-11-13T07:47:16.5734615Z ==46048== by 0x1BE2DC: get_txout (gossip_control.c:106)
2025-11-13T07:47:16.5734750Z ==46048== by 0x1BE88A: gossip_msg (gossip_control.c:212)
2025-11-13T07:47:16.5734860Z ==46048== by 0x21BD60: sd_msg_read (subd.c:560)
2025-11-13T07:47:16.5734962Z ==46048== by 0x2E416D: next_plan (io.c:60)
2025-11-13T07:47:16.5735074Z ==46048== by 0x2E4DC3: do_plan (io.c:422)
2025-11-13T07:47:16.5735175Z ==46048== by 0x2E4E2A: io_ready (io.c:439)
2025-11-13T07:47:16.5735294Z ==46048== by 0x2E727E: io_loop (poll.c:455)
2025-11-13T07:47:16.5735464Z ==46048== Address 0x5ec7518 is 216 bytes inside a block of size 288 free'd
2025-11-13T07:47:16.5735692Z ==46048== at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
2025-11-13T07:47:16.5735798Z ==46048== by 0x2F767C: del_tree (tal.c:456)
2025-11-13T07:47:16.5735902Z ==46048== by 0x2F795D: tal_free (tal.c:532)
2025-11-13T07:47:16.5736018Z ==46048== by 0x20C30D: plugin_kill (plugin.c:468)
2025-11-13T07:47:16.5736147Z ==46048== by 0x20D0EE: plugin_conn_finish (plugin.c:853)
2025-11-13T07:47:16.5736265Z ==46048== by 0x2E6AF6: destroy_conn (poll.c:246)
2025-11-13T07:47:16.5736397Z ==46048== by 0x2E6B1A: destroy_conn_close_fd (poll.c:252)
2025-11-13T07:47:16.5736504Z ==46048== by 0x2F6FC9: notify (tal.c:246)
2025-11-13T07:47:16.5736602Z ==46048== by 0x2F75AA: del_tree (tal.c:437)
2025-11-13T07:47:16.5736707Z ==46048== by 0x2F795D: tal_free (tal.c:532)
2025-11-13T07:47:16.5736812Z ==46048== by 0x2E4FF6: io_close (io.c:496)
2025-11-13T07:47:16.5736920Z ==46048== by 0x2E72A5: io_loop (poll.c:459)
```

Changelog-None: exposed by recent plugin changes.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit fixes a use-after-free bug: when the bitcoin plugin (bcli) was freed during shutdown, the gossip subsystem could still try to send it a request, reading from freed memory. The patch simply stops new plugin requests once the daemon is shutting down. It is a stability/crash bug rather than an obvious remote exploit, and the commit does not describe it as a security vulnerability.

Lower-priorityfuzz-tests: Prevent memory leak in `fuzz-initial_channel`by Chandra Pratap · 0980d104 · Nov 16, 2025 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Prevent memory leak in `fuzz-initial_channel`

Changelog-None: The current test can leak memory due to improper
cleanup in the case of an early return. Fix it.

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit fixes a small memory leak inside a fuzz test, which is an automated testing helper program, not part of the live Lightning node software. It does not affect real users, wallets, or network operations.

Lower-priorityfuzz-tests: Add test for untested functionby Chandra Pratap · 84b95297 · Nov 16, 2025 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Add test for untested function

Currently, `fuzz-initial_channel` doesn't verify the function
`channel_update_fundinng()` in its target file,
`common/initial_channel.h`.

Add a test for it.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only adds a new fuzz test for an existing function and makes a small constant-definition cleanup. It does not change any production code, fix a bug, or alter behavior of the Core Lightning node. There is no security issue here.

AI review queuedfuzz-tests: Add coverage increasing inputs to seed corporaby Chandra Pratap · 350090a8 · Nov 16, 2025 · 78 filesMessage 83 · StrongInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Add coverage increasing inputs to seed corpora

Improvements in the fuzz-testing scheme of `fuzz-initial_channel`
led to the discovery of test inputs that result in greater code
coverage. Add these inputs to the test's seed corpus.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: unusually broad change
AI analysis · Informational 15/100

This commit only adds new test input files to a fuzz-testing seed corpus. It does not change any production code, configuration, or runtime behavior. The added files are used only during automated fuzz testing to exercise more code paths. There is no direct security impact on users running Core Lightning.

Lower-priorityscript: Add `mtime` constant for reproducible Fedora tarballby ShahanaFarooqui · 616fde52 · Nov 15, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · ShahanaFarooqui

script: Add `mtime` constant for reproducible Fedora tarball

Changelog-Fixed: Fedora releases are also deterministic now.

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

This commit changes the release build script so that Fedora tarballs use a fixed timestamp when files are packed. This makes the resulting archive byte-for-byte identical every time it is built, which is a reproducible-build improvement. There is no security vulnerability here.

Lower-prioritygitignore: Add generated files to gitignoreby ShahanaFarooqui · 8fe749e8 · Nov 14, 2025 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · ShahanaFarooqui

gitignore: Add generated files to gitignore

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

This commit only updates Git ignore lists to exclude automatically generated build artifacts from version control. It does not change any executable code, configuration defaults, or security behavior.

AI review queuedfuzz-tests: Add a seed corpus for the new testby Chandra Pratap · 0cabd46c · Nov 14, 2025 · 188 filesMessage 78 · AdequateInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Add a seed corpus for the new test

Add a minimal input set as a seed corpus for the newly introduced
test. This leads to discovery of interesting code paths faster.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: unusually broad change
AI analysis · Informational 15/100

This commit only adds test data files (a fuzzing seed corpus) for a new fuzz test called fuzz-wireaddr. It does not change any production code, so it cannot introduce a runtime security vulnerability on its own. The corpus contains many malformed and unusual network address strings used to exercise the parser during automated testing.

Lower-prioritycommon: fix bad formatting for DNS-type wireaddr.by Rusty Russell · 103cd1c4 · Nov 14, 2025 · 1 fileMessage 70 · AdequateLow 35Details
Commit message · Rusty Russell

common: fix bad formatting for DNS-type wireaddr.

Found by @Chand-ra fuzzing test!

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
fuzzing or regression evidence
AI analysis · Low 35/100

This commit fixes a formatting bug in Core Lightning where DNS-type network addresses were printed as plain text strings without using their known length. The old code passed a pointer to DNS address bytes directly to a string formatter, which could read past the intended data if the bytes were not null-terminated, potentially leaking nearby memory or crashing the program. The fix prints only the exact number of bytes that make up the DNS address.

Lower-priorityfuzz-tests: Add a wire test for wireaddr functionsby Chandra Pratap · a59d21dc · Nov 14, 2025 · 1 fileMessage 91 · StrongInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Add a wire test for wireaddr functions

Changelog-None: `towire_wireaddr()` and `fromwire_wireaddr()` in
`common/wireaddr.h` are responsible for marshalling/unmarshalling
BOLT #7 address descriptors.

Since these aren't tested by the existing wire fuzz tests, add a
roundtrip test for them. This has the added benefit of testing
`parse_wireaddr()` as well.

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit adds a new automated fuzz test file for network address parsing and serialization functions. It does not change any production code, fix a bug, or alter behavior. It is purely a test addition intended to improve code coverage and catch future bugs.

Lower-priorityfuzz: when running as unit tests, allow -v and [corpus...] args.by Rusty Russell · 0d93db77 · Nov 14, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

fuzz: when running as unit tests, allow -v and [corpus...] args.

Hacky parser, not a real one, but this is for devs, so they can clean
it up with ccan/opt themselves if the want to be fancy! 🎩

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
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes the fuzz testing helper code used by developers. It lets developers pass a -v flag and pick specific test corpus files when running fuzz targets as ordinary unit tests. There is no change to production wallet, networking, or consensus code, and nothing here affects real users or live funds.

AI review queuedfuzz-tests: Add a seed corpus for the new testby Chandra Pratap · e95e5f97 · Nov 13, 2025 · 444 filesMessage 78 · AdequateInformational 15Details
Commit message · Chandra Pratap

fuzz-tests: Add a seed corpus for the new test

Add a minimal input set as a seed corpus for the newly introduced
test. This leads to discovery of interesting code paths faster.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: unusually broad change
AI analysis · Informational 15/100

This commit only adds a set of test input files (a seed corpus) for a fuzz-testing harness named fuzz-init_received. Fuzz testing feeds random or semi-random data to a program to find crashes or bugs, but the commit itself does not change any production code, fix any vulnerability, or introduce any new functionality. It is purely a testing-data addition.

Lower-priorityfuzz-tests: Add a test for `peer_init_received()`by Chandra Pratap · afdeec46 · Nov 13, 2025 · 1 fileMessage 86 · StrongInformational 12Details
Commit message · Chandra Pratap

fuzz-tests: Add a test for `peer_init_received()`

Changelog-None: `peer_init_received()` in `connectd/peer_exchange_initmsg.{c, h}`
is responsible for handling `init` messages defined in BOLT #1. Since it deals
with untrusted input, add a test for it.

86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 12/100

This commit only adds a new fuzz test file. It does not change any production code, fix a bug, or patch a vulnerability. Fuzz tests feed random or crafted inputs to a function to help find future bugs, but adding the test itself is a defensive quality-assurance change, not a security fix.

AI review queuedcrates: centralize version managementby daywalker90 · ff2b77a5 · Nov 13, 2025 · 7 filesMessage 35 · OpaqueInformational 15Details
Commit message · daywalker90

crates: centralize version management

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a routine housekeeping change for a Rust-based software project. It moves version numbers for internal components into one central configuration file (the workspace root) and updates each component to reference that shared definition. There is no change to program logic, no bug fix, and no security patch visible in the diff.

Lower-priorityci: add workflow to create a PR for crate bumpsby daywalker90 · 83890963 · Nov 13, 2025 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · daywalker90

ci: add workflow to create a PR for crate bumps

Changelog-None

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit adds a new GitHub Actions workflow that automates the creation of pull requests to bump the version numbers of Rust crates in the Core Lightning project. It is a routine development and release automation change with no direct security relevance.

Lower-prioritypyln-testing: introduce canned blocks support to bitcoind fixture.by Rusty Russell · b4eda94e · Nov 13, 2025 · 2 filesMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

pyln-testing: introduce canned blocks support to bitcoind fixture.

We have to add a send_and_mine_block() for cases where we want to get
a txid and then mine it (for canned blocks, we mine it then figure out
which tx it was!).

And fix up out-by-one in saving blocks.

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 · Informational 15/100

This commit adds a testing-only feature called 'canned blocks' to the Core Lightning Python test framework. It lets developers replay pre-recorded Bitcoin blocks during tests instead of generating new ones, and fixes an off-by-one bug when saving blocks. There is no change to production code or to how real users' funds or nodes are secured.

Lower-priorityconnectd, gossipd, pay, bcli: use timemono when solely measuring duration for timeouts.by Rusty Russell · 522457a1 · Nov 13, 2025 · 13 filesMessage 73 · AdequateLow 29Details
Commit message · Rusty Russell

connectd, gossipd, pay, bcli: use timemono when solely measuring duration for timeouts.

This is immune to things like clock changes, and has the convenient side-effect that
it will *not* be overridden when we override time for developer purposes.

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

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

This commit swaps wall-clock timestamps for monotonic timestamps when measuring durations and timeouts in several parts of Core Lightning. Monotonic time only moves forward at a steady rate and is not affected by system clock changes or developer time overrides. The change makes timeout logic more reliable and prevents accidental misbehavior during testing, but it is a hardening/refactoring patch rather than a fix for an active, exploitable vulnerability.

Lower-prioritytopology: in deterministic mode, only return one best candidate for listincoming.by Rusty Russell · acbfaa00 · Nov 13, 2025 · 1 fileMessage 73 · AdequateLow 26Details
Commit message · Rusty Russell

topology: in deterministic mode, only return one best candidate for listincoming.

This ensures that bolt11/bolt12 selection of routehints/blinded paths is always the same.

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

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

This change makes a Lightning node return a single, predictable incoming channel when running in deterministic mode (used for reproducible testing and invoice route hints). Previously, multiple candidate channels could be returned in a non-deterministic order, which could cause the same invoice to produce different route hints across runs. The patch selects the highest-capacity channel as the one and only candidate. This is primarily a reliability/consistency fix; it does not appear to be a direct security vulnerability, but non-deterministic route hints could theoretically leak extra topology information or cause payment routing inconsistencies.

Lower-prioritylightningd: add --dev-ignore-idb to not complain about bitcoind in initialblockdownload.by Rusty Russell · 845bb30f · Nov 13, 2025 · 1 fileMessage 65 · AdequateInformational 19Details
Commit message · Rusty Russell

lightningd: add --dev-ignore-idb to not complain about bitcoind in initialblockdownload.

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

This commit adds a hidden developer-only command-line flag called --dev-ignore-ibd to Core Lightning's Bitcoin backend plugin. When enabled, it tells the plugin to lie to the main lightning daemon and claim that Bitcoin is not in 'initial block download' mode, even if it actually is. This is intended only for developer testing scenarios (for example, when using canned/fake blocks) and is not exposed as a normal user option. There is no indication in the commit that this is a security fix or that it addresses a reported vulnerability.

AI review queuedpseudorand: make the results in deterministic mode per-caller.by Rusty Russell · 0b2b92ff · Nov 13, 2025 · 7 filesMessage 65 · AdequateInformational 18Details
Commit message · Rusty Russell

pseudorand: make the results in deterministic mode per-caller.

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

This commit changes how Core Lightning generates 'pseudo-random' numbers when running in deterministic mode (used mainly for reproducible testing). It gives each separate piece of code that asks for a random number its own private counter, so the order in which different callers happen to ask no longer changes the random values they receive. The change is aimed at making tests more stable and easier to reproduce, not at fixing a security vulnerability in live operation.

AI review queuedglobal: use clock_time in place of time_now().by Rusty Russell · 8b9020d7 · Nov 13, 2025 · 52 filesMessage 60 · AdequateLow 34Details
Commit message · Rusty Russell

global: use clock_time in place of time_now().

Except for tracing, that sticks with time_now().

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
Why it was queued
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 34/100

This commit swaps most uses of the real-time clock function `time_now()` for a new internal helper called `clock_time()`. The change is infrastructure, not a fix for a known attack. It makes the node’s view of time easier to override for testing and reproducibility, and it reduces the risk that a backward clock jump confuses timers, logs, or payment expiry checks. Tracing is deliberately left on real time. There is no direct security bug being patched here, but the change touches many time-sensitive parts of a payment system, so it has broad defensive value.

Security candidatelightningd: introduce some changes for dual open id randomness even with CLN_DEV_ENTROPY_SEED.by Rusty Russell · 633fd21e · Nov 13, 2025 · 1 fileMessage 70 · AdequateInformational 23Details
Commit message · Rusty Russell

lightningd: introduce some changes for dual open id randomness even with CLN_DEV_ENTROPY_SEED.

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

70/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomness
AI analysis · Informational 23/100

This commit fixes a developer-only edge case. When running Core Lightning with a special developer mode flag (CLN_DEV_ENTROPY_SEED) that forces the same randomness seed for testing, multiple channel-opening sub-processes could accidentally pick the same internal IDs. That could cause a PSBT (transaction-building data structure) collision when combining contributions. The fix tweaks the seed slightly for each new sub-process so IDs differ, then restores the original seed afterward. It is not a normal user security bug and does not expose funds or keys.

Security candidateglobal: replace randombytes_buf() with randbytes() wrapper.by Rusty Russell · f8fd97fb · Nov 13, 2025 · 69 filesMessage 65 · AdequateInformational 19Details
Commit message · Rusty Russell

global: replace randombytes_buf() with randbytes() wrapper.

This allows us to override it for deterministic results.

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
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 19/100

This change is a straightforward internal cleanup: it replaces direct calls to the cryptographic library's random-byte function (randombytes_buf from libsodium) with a project-specific wrapper called randbytes(). The wrapper currently does the same thing, but having it in one place makes it easier to swap in a deterministic (predictable) random source for testing in the future. There is no direct security bug introduced by this commit itself, and no evidence it weakens real-world randomness.

Security candidatewallet: make utxo order deterministic if CLN_DEV_ENTROPY_SEED set.by Rusty Russell · 8c2116a1 · Nov 13, 2025 · 2 filesMessage 65 · AdequateInformational 18Details
Commit message · Rusty Russell

wallet: make utxo order deterministic if CLN_DEV_ENTROPY_SEED set.

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
entropy or randomnesssigning or wallet path
AI analysis · Informational 18/100

This change only affects Core Lightning when a special developer-only environment variable (CLN_DEV_ENTROPY_SEED) is set. It makes the order in which the wallet picks coins deterministic instead of random, which helps developers reproduce tests. In normal operation the wallet still picks coins randomly, so this commit does not introduce a security vulnerability for regular users.