EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkNormal
Repository coverage

1855 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 queue1177AI analyses
144commits · 30 days
227commits · 60 days
805commits · 180 days
1851commits · 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
431Strong · 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.
dovgopoly15014164
Rusty Russell95873570072
Sangbida Chaudhuri14731132066
Dusty Daemon771359066
ShahanaFarooqui931040063
daywalker9090580062
Níckolas Goline40540076
Lagrang376463069
Christian Decker36415072
Vincenzo Palazzo838080
Chandra Pratap56250082
ekzyis222063
Analysis record

Published AI watches

Last scanned 16 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-prioritybcli: remove unused async code after sync refactorby dovgopoly · 57d60c02 · Feb 18, 2026 · 1 fileMessage 73 · AdequateInformational 21Details
Commit message · dovgopoly

bcli: remove unused async code after sync refactor

Remove the asynchronous execution infrastructure no longer needed after converting all bcli commands to synchronous execution. This includes removing the async callbacks, the pending request queue, etc.

Fix missing `close(from)` file descriptor leak in `run_bitcoin_cliv`.

Changelog-Changed: bcli plugin now uses synchronous execution, simplifying bitcoin backend communication and improving error handling reliability.

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

This commit is mostly a cleanup: it removes old asynchronous code from the bitcoin-cli plugin after it was converted to run commands one at a time (synchronously). The only functional bug fix is adding a missing `close(from)` call, which stops a file descriptor leak when running bitcoin-cli. There is no obvious new security vulnerability introduced by the change.

Lower-prioritybcli: convert `estimatefees` to synchronous executionby dovgopoly · d06024ce · Feb 18, 2026 · 1 fileMessage 73 · AdequateLow 26Details
Commit message · dovgopoly

bcli: convert `estimatefees` to synchronous execution

Add `command_err_badjson` helper for sync error handling, mirroring the async `command_err_bcli_badjson`. Store args string in `bcli_result` for consistent error messages.

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

This change rewrites how Core Lightning asks Bitcoin for fee estimates, switching from an asynchronous (multi-step callback) style to a simpler synchronous style. It also adds a shared helper for reporting bad JSON responses from bitcoin-cli and fixes a typo in a log message ('32 bites' to '32 bits'). The rewrite does not obviously add or remove a vulnerability, but it changes timing and error-handling behavior in a security-sensitive area (fee estimation), so it warrants careful review.

Lower-prioritybcli: return "not found" on any `getblockhash` exit statusby dovgopoly · d727946b · Feb 18, 2026 · 1 fileMessage 73 · AdequateLow 45Details
Commit message · dovgopoly

bcli: return "not found" on any `getblockhash` exit status

Return "not found" on any `getblockhash` exit status. Previously, only exit code 8 (block height doesn't exist) returned "not found", while other exit codes returned an error. Now any non-zero exit status returns "not found" since any failure means the block is unavailable.

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

This change alters how Core Lightning's bitcoin backend plugin reacts when the connected Bitcoin node cannot find a requested block by height. Previously, only one specific error code (8) was treated as 'block not found,' while any other failure caused Core Lightning to report a hard error and stop. Now, any non-zero failure from the 'getblockhash' command is treated as 'not found.' This makes the plugin more tolerant of Bitcoin node behavior differences, but could mask real backend problems such as network errors, authentication failures, or node crashes by silently treating them as missing blocks.

Lower-prioritybcli: add synchronous `run_bitcoin_cli` for future refactorby dovgopoly · fad05200 · Feb 18, 2026 · 1 fileMessage 50 · ThinInformational 13Details
Commit message · dovgopoly

bcli: add synchronous `run_bitcoin_cli` for future refactor

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 13/100

This commit adds a new internal helper function that runs the bitcoin-cli command synchronously (waiting for it to finish before continuing). It is marked UNNEEDED, meaning it is not currently used anywhere. The change appears to be a pure code-structure refactor with no active security behavior introduced.

Lower-prioritybcli: convert `sendrawtransaction` to synchronous executionby dovgopoly · 0de13507 · Feb 18, 2026 · 1 fileMessage 50 · ThinInformational 16Details
Commit message · dovgopoly

bcli: convert `sendrawtransaction` to synchronous execution

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 16/100

This commit changes how Core Lightning submits raw Bitcoin transactions to the local bitcoin node. Previously it was done in the background (asynchronous); now it is done inline (synchronous) and returns the result directly. The change is a refactor that makes error handling more explicit and helps functional tests observe failures. There is no direct evidence in the commit that this fixes an exploitable security bug.

Lower-prioritybcli: convert `getutxout` to synchronous executionby dovgopoly · a3e07f4f · Feb 18, 2026 · 1 fileMessage 50 · ThinInformational 16Details
Commit message · dovgopoly

bcli: convert `getutxout` to synchronous execution

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 16/100

This commit changes how a Core Lightning plugin asks its connected Bitcoin node about transaction outputs. It switches one internal call from asynchronous to synchronous execution and adds more detailed error messages. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be a code-quality and robustness improvement.

Lower-prioritybcli: replace magic numbers with constantsby dovgopoly · 2b39fc0c · Feb 18, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · dovgopoly

bcli: replace magic numbers with constants

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

This commit is a simple code cleanup: it replaces three hard-coded numbers in the bitcoin-cli plugin with named constants. The actual behavior of the program does not change at all. There is no security fix here.

Lower-prioritypytest: add tests for bcli `getblockfrompeer` retry pathby dovgopoly · edbad6cd · Feb 18, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · dovgopoly

pytest: add tests for bcli `getblockfrompeer` retry path

Add `test_bcli_concurrent` to verify bcli handles concurrent requests while the `getblockfrompeer` retry path is active, simulating a pruned node scenario where `getblock` initially fails.

Add `test_bcli_retry_timeout` to verify lightningd crashes with a clear error message when we run out of `getblock` retries.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 12/100

This commit only adds new automated tests to the Core Lightning project. It does not change any production code, so it cannot introduce a security vulnerability by itself. The tests exercise an existing retry mechanism in the bitcoin backend plugin (bcli) when a pruned Bitcoin node temporarily cannot return a block. One test documents that Core Lightning will shut down (fatal error) if the retry path runs out of time. That behavior is already present in the code; the test merely records it.

Lower-prioritybcli: convert `getchaininfo` to synchronous executionby dovgopoly · f8c7a204 · Feb 18, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · dovgopoly

bcli: convert `getchaininfo` to synchronous execution

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit changes how the bitcoin-cli plugin answers the 'getchaininfo' request. Previously it started an asynchronous background job and later returned the result. Now it calls bitcoin-cli directly and waits for the answer before responding. The change removes the 'UNNEEDED' marker from the synchronous helper functions, because they are now used, and marks the old asynchronous result handler as no longer needed. On its own this is a routine internal refactor; it does not obviously fix a security bug, but it does remove one asynchronous path where race conditions or state confusion could occur.

Lower-prioritylightningd: add `get_bitcoin_result` for bcli response handlingby dovgopoly · 7b1793f4 · Feb 18, 2026 · 1 fileMessage 73 · AdequateInformational 23Details
Commit message · dovgopoly

lightningd: add `get_bitcoin_result` for bcli response handling

Add `get_bitcoin_result` function that checks bcli plugin responses for errors and returns the result token. Previously, callbacks only detected errors when result parsing failed, ignoring the explicit error field from the plugin. Now we extract the actual error message from bcli, providing clearer reasoning when the plugin returns an error response.

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

This commit refactors how Core Lightning handles replies from its internal Bitcoin plugin (bcli). Previously, if the plugin reported an error, the main daemon might try to read a non-existent 'result' field and produce a confusing 'bad result' message. The new helper explicitly checks for an 'error' field first and extracts the real error message. It also makes several callbacks parse the 'result' object directly instead of expecting it to be wrapped in a top-level '{result:{...}}' structure. This is primarily a robustness/logging improvement; it does not by itself fix a known exploitable vulnerability, but it removes a class of error-handling gaps that could hide or misreport plugin failures.

AI review queuedpytest: fix bcli tests after sync refactorby dovgopoly · 3e979d1b · Feb 18, 2026 · 2 filesMessage 78 · AdequateInformational 12Details
Commit message · dovgopoly

pytest: fix bcli tests after sync refactor

Rewrite `test_bitcoin_failure` to reflect synchronous bcli behavior: the node now crashes on invalid bitcoind responses rather than retrying. Add `may_fail` and `broken_log` to handle expected crash.

Update `test_bitcoind_fail_first` stderr check to match the new error message format from `get_bitcoin_result`.

Update test mocks to use proper error format for "block not found".

Co-authored-by: ShahanaFarooqui <shahana.farooqui@gmail.com>

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 12/100

This commit only changes test files. It updates pytest test cases to match new behavior after a code refactor made the lightning node crash instead of retry when it gets invalid responses from the connected Bitcoin node. There is no change to production code, so it does not introduce or fix a security vulnerability by itself.

Lower-prioritybcli: convert `getrawblockbyheight` to synchronous executionby dovgopoly · b5c300a8 · Feb 18, 2026 · 1 fileMessage 73 · AdequateInformational 19Details
Commit message · dovgopoly

bcli: convert `getrawblockbyheight` to synchronous execution

Also rename command_err_badjson to generic command_err helper, since error messages aren't always about bad JSON (e.g., "command failed" for non-zero exit).

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

This commit rewrites one internal plugin function so it calls the Bitcoin backend in a straightforward, step-by-step (synchronous) style instead of a chain of callbacks. It also renames an internal error helper so it can print 'command failed' when the backend returns a non-zero exit code, not only 'bad JSON'. The change is mostly a refactor; it does not obviously fix or introduce a security vulnerability on its own.

Lower-priorityconnectd: use membuf for more efficient output queue.by Rusty Russell · 963b353a · Feb 18, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

connectd: use membuf for more efficient output queue.

This is exactly what membuf is for: it handles expansion much more
neatly.

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 is a routine internal code cleanup in Core Lightning's connection daemon. It replaces a hand-rolled memory buffer (a manually resized byte array with an offset) with a standard helper called membuf. There is no indication this fixes a security bug; it is described by the author as a more efficient and neater way to manage the outgoing encrypted message queue.

Lower-prioritypytest: fix flae int test_fetchinvoice_autoconnect.by Rusty Russell · 4d030d83 · Feb 18, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Rusty Russell

pytest: fix flae int test_fetchinvoice_autoconnect.

l3 doesn't just need to know about l2 (which it can get from the
channel_announcement), but needs to see the node_announcement.

Otherwise:

```
l1, l2 = node_factory.line_graph(2, wait_for_announce=True,
# No onion_message support in l1
opts=[{'dev-force-features': -39},
{'dev-allow-localhost': None}])

l3 = node_factory.get_node()
l3.rpc.connect(l1.info['id'], 'localhost', l1.port)
wait_for(lambda: l3.rpc.listnodes(l2.info['id'])['nodes'] != [])

offer = l2.rpc.call('offer', {'amount': '2msat',
'description': 'simple test'})
> l3.rpc.call('fetchinvoice', {'offer': offer['bolt12']})

tests/test_pay.py:4804:
...
> raise RpcError(method, payload, resp['error'])
E pyln.client.lightning.RpcError: RPC call failed: method: fetchinvoice, payload: {'offer': 'lno1qgsqvgnwgcg35z6ee2h3yczraddm72xrfua9uve2rlrm9deu7xyfzrcgqypq5zmnd9khqmr9yp6x2um5zcssxwz9sqkjtd8qwnx06lxckvu6g8w8t0ue0zsrfqqygj636s4sw7v6'}, error: {'code': 1003, 'message': 'Failed: could not route or connect directly to 033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a: {"code":400,"message":"Unable to connect, no address known for peer"}'}
```

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

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

This commit fixes a flaky test in the Core Lightning test suite. The test was waiting until a node learned about another node's existence, but it actually needed to wait until it also learned the node's network address. No production code was changed, and there is no security issue.

Lower-priorityCI: run tests in the `wireshark` group so we can test packet sizesby Rusty Russell · 42bdb2d6 · Feb 18, 2026 · 2 filesMessage 87 · StrongInformational 15Details
Commit message · Rusty Russell

CI: run tests in the `wireshark` group so we can test packet sizes

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

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only changes how the project's automated test system is set up. It installs the Wireshark network-packet inspection tools and runs the test suite inside a special Linux group so tests can capture network packets. There is no change to the actual Core Lightning software that users run, and nothing in the commit suggests a security vulnerability or fix.

Lower-priorityconnectd: don't flush messages unless we have something important.by Rusty Russell · 2436ee6f · Feb 18, 2026 · 3 filesMessage 65 · AdequateInformational 18Details
Commit message · Rusty Russell

connectd: don't flush messages unless we have something important.

This replaces our previous nagle-based toggling.

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

This change tweaks how Core Lightning's connection daemon decides when to actually send low-priority network messages to a peer. Previously it used TCP's Nagle algorithm to batch small messages; now it explicitly holds back non-urgent traffic for a short random timer (around half a second on average) and only flushes immediately for important messages such as connection setup, channel opens/closes, and payments. The goal is to reduce network noise from routine gossip while keeping time-sensitive traffic responsive. There is no direct evidence in the commit that this fixes a security vulnerability.

Lower-prioritydevtools/gossipwith: don't count "padding" pings towards max-messages count.by Rusty Russell · ca2d3899 · Feb 18, 2026 · 1 fileMessage 83 · StrongInformational 18Details
Commit message · Rusty Russell

devtools/gossipwith: don't count "padding" pings towards max-messages count.

We are about to use them to make our packet size constant, and this
will upset the tests.

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

This is a small change to a developer testing tool (gossipwith) used to simulate Lightning network peers. It adjusts how the tool counts ping messages so that 'padding' pings—used only to keep packet sizes constant—do not reduce the limit on how many real messages the tool will process. The change is not in production node code and does not appear to fix a security vulnerability.

Lower-priorityconnectd: don't toggle nagle on and off, leave it always off.by Rusty Russell · d45bc2d5 · Feb 18, 2026 · 2 filesMessage 73 · AdequateInformational 23Details
Commit message · Rusty Russell

connectd: don't toggle nagle on and off, leave it always off.

We're doing our own buffering now.

We leave the is_urgent() function for two commits in the future though.

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

This change simplifies how Core Lightning's networking layer handles TCP packet batching. Previously, the code repeatedly turned a kernel feature called Nagle's algorithm on and off for each message depending on whether it was 'urgent.' Now it just leaves Nagle disabled all the time. The practical effect is lower latency for time-sensitive Lightning messages and less risk of inconsistent behavior across operating systems. It is not a fix for a known exploit, but it removes a fragile, platform-dependent mechanism that could have caused message delays or odd edge cases.

Lower-prioritypytest: add fixture for checking packet sizes.by Rusty Russell · 36933834 · Feb 18, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: add fixture for checking packet sizes.

This requires access to dumpcap. On Ubuntu, at least, this means you
need to be in the "wireshark" group.

We may also need:
sudo ethtool -K lo gro off gso off tso off

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 only adds a new test fixture and one test to the project's test suite. It lets developers capture network traffic during tests and check that TCP packet payloads stay a constant size. It does not change the actual Core Lightning software that users run, so it cannot introduce a security vulnerability or fix one in production code.

Lower-priorityconnectd: refactor to break up "encrypt_and_send".by Rusty Russell · df1ae1d6 · Feb 18, 2026 · 1 fileMessage 65 · AdequateInformational 13Details
Commit message · Rusty Russell

connectd: refactor to break up "encrypt_and_send".

Do all the special treatment of the message type first.

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

This commit is a code cleanup in Core Lightning's connection handling. It moves the developer-only 'dev-disconnect' test logic out of the main message-sending function into its own helper, without changing what the logic actually does. There is no indication this fixes or introduces a security issue.

Lower-priorityconnectd: refactor outgoing loop.by Rusty Russell · 7577e59f · Feb 18, 2026 · 1 fileMessage 58 · ThinInformational 13Details
Commit message · Rusty Russell

connectd: refactor outgoing loop.

Give us a single "next message" function to call. This will be useful
when we want to write more than one at a time.

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

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 13/100

This is a routine internal code cleanup in Core Lightning's connection handling. It moves the logic for picking the next message to send into a new helper function, with no intended behavior change. There is no indication this fixes or introduces a security issue.

AI review queuedpytest: remove now-invalid test.by Rusty Russell · cd7afb50 · Feb 18, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: remove now-invalid test.

Commit 888745be163efe02345e944f7e7d501d64e3744c (dev_disconnect:
remove @ marker.) in v0.11 in April 2022) removed the '@' marker from
our dev_disconnect code, but one test still uses it.

Refactoring this code made it crash on invalid input. The test
triggered a db issue which has been long fixed, so I'm simply removing
it.

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

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit simply deletes an outdated test from the test suite. The test used a '@' marker that was removed from the codebase in 2022, so it no longer works. There is no change to production code and no security issue is being fixed.

Lower-priorityconnectd: pad messages with dummy pings if needed to make size uniform.by Rusty Russell · 8b90d40a · Feb 18, 2026 · 5 filesMessage 73 · AdequateLow 35Details
Commit message · Rusty Russell

connectd: pad messages with dummy pings if needed to make size uniform.

Messages are now constant.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Added: Protocol: we now pad all peer messages to make them the same length.

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

This change makes every encrypted network packet sent between Core Lightning peers the same fixed size (1460 bytes). When a real message is smaller than that, the software now stuffs the leftover space with a harmless dummy 'ping' message before sending. This is a privacy improvement: an outside observer watching the encrypted traffic can no longer guess what kind of message is being sent just by looking at packet lengths. It is not a fix for an active exploit, and it does not change what attackers can do.

Lower-priorityconnectd: only do lazy transmission for *definitely* non-urgent messages.by Rusty Russell · afdc92fe · Feb 18, 2026 · 1 fileMessage 73 · AdequateLow 46Details
Commit message · Rusty Russell

connectd: only do lazy transmission for *definitely* non-urgent messages.

Since we delay the others quite a lot (up to 1 second), it's better to consider
most messages "urgent" and worth immediately transmitting.

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

This change adjusts when Core Lightning's networking layer sends messages immediately versus batching them for up to a second. Previously, most messages were treated as non-urgent and could be delayed; now, only a small set of message types (HTLC updates and gossip) are batched, and everything else—including messages from plugins—is sent right away. The patch is framed as a performance/reliability improvement, but it removes a broad delay that could have masked timing-related bugs or made certain attacks easier by giving attackers predictable one-second windows to race against batched messages.

Lower-priorityconnect: switch to using io_write_partial instead of io_write.by Rusty Russell · c23b7a49 · Feb 18, 2026 · 3 filesMessage 73 · AdequateLow 33Details
Commit message · Rusty Russell

connect: switch to using io_write_partial instead of io_write.

This gives us finer control over write sizes: for now we just cap
the write size.

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

This change refactors how Core Lightning's connection daemon sends encrypted messages to peers. Previously, the daemon wrote entire encrypted messages in one go using io_write. Now it uses io_write_partial, which writes at most 1460 bytes at a time, tracking how much has been sent and continuing until the full message is transmitted. The stated goal is to create more uniform packet sizes on the wire. The patch itself is a defensive refactoring; there is no direct evidence in the commit or supplied references that it fixes a known exploitable vulnerability.