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 queue1281AI 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.
dovgopoly15015164
Rusty Russell95873614072
Sangbida Chaudhuri14731135066
Dusty Daemon771359066
ShahanaFarooqui931050063
daywalker9090580062
Níckolas Goline40540076
Lagrang376463069
Christian Decker36415072
Vincenzo Palazzo838080
Chandra Pratap56250082
ekzyis222063
Analysis record

Published AI watches

Last scanned 55 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-prioritypytest: test for bkpr_listbalances after emergencyrecover.by Rusty Russell · 2e8261ef · Feb 17, 2026 · 1 fileMessage 75 · AdequateInformational 12Details
Commit message · Rusty Russell

pytest: test for bkpr_listbalances after emergencyrecover.

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

This commit only adds a test case. It marks an existing emergency recovery test as expected to fail (xfail) and adds a single bookkeeping balance-listing call after recovery. There is no code fix or security change in the diff itself.

AI review queuedbkpr: limp along if we lost our db.by Rusty Russell · 29e0a1dd · Feb 17, 2026 · 2 filesMessage 76 · AdequateLow 44Details
Commit message · Rusty Russell

bkpr: limp along if we lost our db.

We can't really do decent bookkeeping any more, but don't crash!

```
bookkeeper: plugins/bkpr/recorder.c:178: find_txo_chain: Assertion `acct->open_event_db_id' failed.
bookkeeper: FATAL SIGNAL 6 (version v25.12)
0xaaaab7d51a7f send_backtrace
common/daemon.c:38
0xaaaab7d51b2b crashdump
common/daemon.c:83
0xffff8c0b07cf ???
???:0
0xffff8bdf7608 __pthread_kill_implementation
./nptl/pthread_kill.c:44
0xffff8bdacb3b __GI_raise
../sysdeps/posix/raise.c:26
0xffff8bd97dff __GI_abort
./stdlib/abort.c:79
0xffff8bda5cbf __assert_fail_base
./assert/assert.c:96
0xffff8bda5d2f __assert_fail
./assert/assert.c:105
0xaaaab7d41fd7 find_txo_chain
plugins/bkpr/recorder.c:178
0xaaaab7d421fb account_onchain_closeheight
plugins/bkpr/recorder.c:291
0xaaaab7d37687 do_account_close_checks
plugins/bkpr/bookkeeper.c:884
0xaaaab7d38203 parse_and_log_chain_move
plugins/bkpr/bookkeeper.c:1261
0xaaaab7d3871f listchainmoves_done
plugins/bkpr/bookkeeper.c:171
0xaaaab7d4811f handle_rpc_reply
plugins/libplugin.c:1073
0xaaaab7d4827b rpc_conn_read_response
plugins/libplugin.c:1377
0xaaaab7d889a7 next_plan
ccan/ccan/io/io.c:60
0xaaaab7d88f7b do_plan
ccan/ccan/io/io.c:422
0xaaaab7d89053 io_ready
ccan/ccan/io/io.c:439
```

Fixes: https://github.com/ElementsProject/lightning/issues/8854
Changelog-Fixed: Plugins: `bkpr_listbalances` no longer crashes if we lost our db, then do emergencyrecover and close a channel.
Reported-by: https://github.com/enaples

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Low 44/100

This commit fixes a crash in Core Lightning's bookkeeper plugin. After a user loses their main database and runs emergency recovery, then closes a channel, the bookkeeper plugin would hit an internal assertion and crash the whole node. The fix makes the plugin log a warning and continue running instead of crashing.

Lower-prioritygossipd: dev-compact-gossip-store to manually invoke compaction.by Rusty Russell · acb8a8cc · Feb 16, 2026 · 8 filesMessage 75 · AdequateInformational 19Details
Commit message · Rusty Russell

gossipd: dev-compact-gossip-store to manually invoke compaction.

And tests!

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

This commit adds a developer-only command to manually compact the gossip store file used by Core Lightning. It is a testing and diagnostic feature, not a normal user function. The command is gated behind the 'developer' build mode and does not change how regular users run the software. There is no indication in the commit that this fixes a security bug or introduces a security vulnerability.

Lower-prioritycommon/gossmap: use the UUID record on reopen.by Rusty Russell · 25131d2e · Feb 16, 2026 · 1 fileMessage 60 · AdequateLow 26Details
Commit message · Rusty Russell

common/gossmap: use the UUID record on reopen.

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

This change updates how Core Lightning reloads its saved network map (the 'gossip store') after the file is compacted or reopened. It now reads a special 'UUID' marker at the start of the file to decide whether the file was rewritten from scratch or simply trimmed. If the UUID changed, it rebuilds the in-memory map from scratch; if it matches, it still rebuilds but can trust the equivalent offset. The patch is a robustness improvement, not an obvious security fix, and the commit message does not describe any security relevance.

Security candidatetools: delete gossip_store of needed for downgrade even if db hasn't changed.by Rusty Russell · d4c62f8c · Feb 16, 2026 · 2 filesMessage 65 · AdequateInformational 18Details
Commit message · Rusty Russell

tools: delete gossip_store of needed for downgrade even if db hasn't changed.

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

This is a small bug-fix in a downgrade helper tool. Previously, the tool only deleted an incompatible gossip data file when the database actually needed changes. Now it deletes that file even if the database is already compatible, preventing a scenario where downgrading leaves behind a gossip file that the older version cannot read. It is a correctness fix, not an exploitable security vulnerability.

Lower-prioritydevtools: enhance dump-gossipstore to show some details of messages.by Rusty Russell · e5e5998c · Feb 16, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

devtools: enhance dump-gossipstore to show some details of messages.

Not a complete decode, just the highlights (what channel was announced
or updated, what node was announced).

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 improves a developer-only diagnostic tool (dump-gossipstore) so it prints the channel or node identifier alongside raw gossip messages. It is not a security fix and does not change any network-facing or wallet code. The only functional change is richer debug output.

Lower-prioritygossipd: code to invoke compactd and reopen store.by Rusty Russell · 15696d97 · Feb 16, 2026 · 8 filesMessage 65 · AdequateInformational 17Details
Commit message · Rusty Russell

gossipd: code to invoke compactd and reopen store.

This isn't called anywhere yet.

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

This commit adds new internal plumbing for a future 'gossip store compaction' feature in Core Lightning. It introduces a helper sub-daemon called lightning_gossip_compactd and functions to reopen the gossip store, but the commit message explicitly says this code is 'not called anywhere yet.' There is no immediate security issue visible in the diff, but it is a partial foundation for a feature that will later rewrite a persistent data file and spawn an external helper process.

Lower-prioritygossipd: don't compact on startup.by Rusty Russell · 445bcd04 · Feb 16, 2026 · 3 filesMessage 68 · AdequateLow 26Details
Commit message · Rusty Russell

gossipd: don't compact on startup.

We now only need to walk it if we're doing an upgrade.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Changed: `gossipd` no longer compacts gossip_store on startup (improving start times significantly).

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

This change stops Core Lightning's gossip daemon from automatically 'compacting' (cleaning up and rewriting) its gossip store file every time the node starts. Instead, it only rewrites the file when an actual version upgrade is needed. The main benefit is faster startup. The patch also tightens error handling when creating a fresh store file. There is no direct evidence in the commit that this fixes a known security vulnerability; it reads primarily as a performance and robustness improvement.

Lower-prioritygossipd: don't gather dying channels during compaction.by Rusty Russell · dfc4ce21 · Feb 16, 2026 · 3 filesMessage 65 · AdequateInformational 11Details
Commit message · Rusty Russell

gossipd: don't gather dying channels during compaction.

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

This commit removes dead code in the Lightning node's gossip subsystem. During startup compaction of the gossip database, the code used to collect a list of 'dying channels' but never actually used that list. The change simply stops collecting that unused list. There is no obvious security problem being fixed here; it appears to be a minor cleanup that may also avoid a small memory waste or confusion during startup.

Lower-prioritygossip_store: add UUID entry at front of the store.by Rusty Russell · b1055aa0 · Feb 16, 2026 · 7 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell

gossip_store: add UUID entry at front of the store.

We also put this in the store_ended message, too: so you can
tell if the equivalent_offset there really refers to this new
entry (or if two or more rewrites have happened).

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 commit changes how Core Lightning stores and tracks its internal gossip data file. It adds a unique identifier (UUID) to the front of the gossip store and includes that UUID in a 'store ended' marker so the node can tell when the file has been rewritten. The change is a normal data-format update, not a fix for an active security bug. There is one placeholder note in the code saying 'FIXME: real uuid!' which means the UUID is currently all zeros, but that is a completeness issue rather than an exploitable flaw.

AI review queuedcommon: move gossip_store_wire.csv into common/ from gossipd/by Rusty Russell · e8fd235d · Feb 16, 2026 · 26 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

common: move gossip_store_wire.csv into common/ from gossipd/

It's used by common/gossip_store.c, which is used by many things other than
gossipd. This file belongs in common.

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

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 15/100

This commit simply moves a file that defines internal message formats from one directory to another and updates all the references. It is a code reorganization (refactoring) with no functional change to the program's behavior and no security relevance.

AI review queuedpytest: test for crash when we have dying channels and compact the gossip_store.by Rusty Russell · b1503098 · Feb 16, 2026 · 1 fileMessage 83 · StrongModerate 58Details
Commit message · Rusty Russell

pytest: test for crash when we have dying channels and compact the gossip_store.

Before I fixed the handling of dying channels:

```
lightning_gossipd: gossip_store: can't read hdr offset 2362/2110: Success (version v25.12-279-gb38abe6-modded)
0x6537c19ecf3a send_backtrace
common/daemon.c:38
0x6537c19f1a1d status_failed
common/status.c:207
0x6537c19e557a gossip_store_get_with_hdr
gossipd/gossip_store.c:527
0x6537c19e5613 check_msg_type
gossipd/gossip_store.c:559
0x6537c19e5a36 gossip_store_set_flag
gossipd/gossip_store.c:577
0x6537c19e5c82 gossip_store_del
gossipd/gossip_store.c:629
0x6537c19e8ddd gossmap_manage_new_block
gossipd/gossmap_manage.c:1362
0x6537c19e390e new_blockheight
gossipd/gossipd.c:430
0x6537c19e3c37 recv_req
gossipd/gossipd.c:532
0x6537c19ed22a handle_read
common/daemon_conn.c:35
0x6537c19fbe71 next_plan
ccan/ccan/io/io.c:60
0x6537c19fc174 do_plan
ccan/ccan/io/io.c:422
0x6537c19fc231 io_ready
ccan/ccan/io/io.c:439
0x6537c19fd647 io_loop
ccan/ccan/io/poll.c:470
0x6537c19e463d main
gossipd/gossipd.c:609
```

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

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Moderate 58/100

This commit adds a test that reproduces a crash in Core Lightning's gossip daemon. The crash happens when the network's gossip store is compacted while a channel is in a 'dying' state (closing but not yet fully removed). The bug caused internal record offsets to become wrong, leading to a fatal read error and daemon crash. The commit message says the underlying handling was already fixed; this change only adds the regression test.

Lower-prioritygossipd: use gossmap to load the dying entries.by Rusty Russell · 900fd084 · Feb 16, 2026 · 1 fileMessage 60 · AdequateInformational 11Details
Commit message · Rusty Russell

gossipd: use gossmap to load the dying entries.

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

This is a small internal refactoring change in Core Lightning's gossip subsystem. It changes how 'dying' channel entries are loaded from the gossip store, switching from one temporary array to a callback that populates a persistent list. There is no indication this fixes a security bug or introduces a vulnerability; it appears to be code cleanup.

Lower-prioritygossipd: reset dying_channels array after compact.by Rusty Russell · 88f3f97b · Feb 16, 2026 · 1 fileMessage 65 · AdequateModerate 55Details
Commit message · Rusty Russell

gossipd: reset dying_channels array after compact.

Reported-by: @daywalker90
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 · Moderate 55/100

This patch fixes a bug in Core Lightning's gossip daemon where, after compacting the network graph store, the list of 'dying' channels was not reset and the code that repopulates it was not hooked up. This could cause the node to lose track of channels that are being closed, potentially leading to incorrect routing decisions or stale channel state. The fix clears the old list and provides a callback so dying channels are reloaded from the newly compacted store.

Lower-prioritydevtools/gossmap-compress: generate better scids.by Rusty Russell · 120c9d8c · Feb 16, 2026 · 3 filesMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

devtools/gossmap-compress: generate better scids.

Our poor scid generation clashes badly with simplified hashing (the
next patch) leading to l1's startup time when using a generated map
moving from 4 seconds to 14 seconds. Under CI it actually timed out
several tests.

Fixing our fake scids to be more "random" reduces it to 1.5 seconds.

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

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
AI analysis · Informational 15/100

This commit changes a developer-only test tool so the fake channel IDs it creates are less predictable. The goal is to speed up test startup and prevent CI timeouts, not to fix a security bug. No production code is affected.

Lower-prioritycommon: expose gossip_store "header and type" single-read struct.by Rusty Russell · a966dd71 · Feb 16, 2026 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · Rusty Russell

common: expose gossip_store "header and type" single-read struct.

gossip_store.c uses this to avoid two reads, and we want to use it
elsewhere too.

Also fix old comment on gossip_store_readhdr().

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

This commit is a small internal code cleanup. It moves a private data structure for reading gossip message headers from a source file into a shared header file so other parts of the program can reuse it. It also updates an outdated comment. There is no security-relevant change.

Lower-prioritygossipd: put the last_writes array inside struct gossip_store.by Rusty Russell · 1fb4da07 · Feb 16, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

gossipd: put the last_writes array inside struct gossip_store.

This is the file responsible for all the writing, so it should be
responsible for the rewriting if necessary (rather than
gossmap_manage).

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 is a small internal code cleanup in the part of Core Lightning that saves network gossip messages to disk. It moves a bookkeeping array (used to recover from rare filesystem sync problems) from one internal structure into another, so the module that actually writes to disk also owns the recovery data. There is no user-facing change, no new feature, and no obvious security vulnerability introduced or fixed by this patch.

Lower-prioritygossmap: reduce load times by 20%by Rusty Russell · 5e1bbb08 · Feb 16, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

gossmap: reduce load times by 20%

It's actually quite quick to load a cache-hot 308,874,377 byte
gossip_store (normal -Og build), but perf does show time spent
in siphash(), which is a bit overkill here, so drop that:

Before:
Time to load: 66718983-78037766(7.00553e+07+/-2.8e+06)nsec

After:
Time to load: 54510433-57991725(5.61457e+07+/-1e+06)nsec

We could save maybe 10% more by disabling checksums, but having
that assurance is nice.

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 speeds up how Core Lightning loads its network map by replacing a strong hash function with a cheaper, simpler one. The change is framed as a performance optimization. The new hash for node IDs is weaker and uses a random byte offset, which could in theory allow a specially crafted node ID to collide with another in the hash table. However, the commit message argues that creating such collisions is expensive because it requires opening real Lightning channels. There is no direct evidence in the commit or supplied references that this is exploitable as a security bug.

Lower-prioritygossmap: keep stats on live/deleted records.by Rusty Russell · 7d70e8ba · Feb 16, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

gossmap: keep stats on live/deleted records.

This way gossmap_manage can decide when to compact.

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

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

This commit adds internal bookkeeping counters that track how many gossip records are currently active versus how many have been deleted in Core Lightning's network map. It does not change any security behavior, fix a bug, or alter how data is validated. It simply provides statistics so that a future compaction routine can decide when to clean up the map.

Lower-prioritygossipd: compact when gossip store is 80% deleted records.by Rusty Russell · 912b40ae · Feb 16, 2026 · 3 filesMessage 73 · AdequateInformational 19Details
Commit message · Rusty Russell

gossipd: compact when gossip store is 80% deleted records.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Added: `gossipd` now uses a `lightning_gossip_compactd` helper to compact the gossip_store on demand, keeping it under about 210MB.

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

This change makes the Lightning node's gossip database automatically shrink itself when it becomes bloated with old, deleted records. It also fixes a small bug where the wrong file descriptor was being closed during that cleanup process. There is no direct evidence this is a security fix, but uncontrolled file growth and incorrect descriptor handling can contribute to reliability or minor resource problems.

Lower-prioritygossipd: write uuid record on startup.by Rusty Russell · 5dcf3986 · Feb 16, 2026 · 3 filesMessage 60 · AdequateInformational 12Details
Commit message · Rusty Russell

gossipd: write uuid record on startup.

This is the first record, and ignored by everything else.

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

This commit adds a new unique identifier (UUID) record to the gossip store file when the lightning node starts up or compacts its gossip database. The UUID is random and is intended to help identify different versions of the gossip store. The change is internal bookkeeping and does not fix or introduce any known security issue.

Security candidategossmap: add callback for gossipd to see dying messages.by Rusty Russell · 1ad8ca96 · Feb 16, 2026 · 7 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell

gossmap: add callback for gossipd to see dying messages.

gossmap doesn't care, so gossipd currently has to iterate through the
store to find them at startup. Create a callback for gossipd to use
instead.

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

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 18/100

This commit adds a new internal callback mechanism so the gossipd component can be notified when the network graph sees a 'dying channel' message. It is a code cleanup/refactoring change: previously gossipd had to scan the entire gossip store at startup to find these messages, now it can receive them through a callback. There is no indication this fixes a security bug or introduces a vulnerability.

Lower-prioritypytest: fix bogus test_gossip_store_compact_noappend test.by Rusty Russell · ae957161 · Feb 16, 2026 · 2 filesMessage 83 · StrongLow 34Details
Commit message · Rusty Russell

pytest: fix bogus test_gossip_store_compact_noappend test.

It didn't do anything, since the dev_compact_gossip_store command was
removed. When we make it do something, it crashes since old_len is 0:

```
gossipd: gossip_store_compact: bad version
gossipd: FATAL SIGNAL 6 (version v25.12rc3-1-g9e6c715-modded)
...
gossipd: backtrace: ./stdlib/abort.c:79 (__GI_abort) 0x7119bd8288fe
gossipd: backtrace: ./assert/assert.c:96 (__assert_fail_base) 0x7119bd82881a
gossipd: backtrace: ./assert/assert.c:105 (__assert_fail) 0x7119bd83b516
gossipd: backtrace: gossipd/gossip_store.c:52 (append_msg) 0x56294de240eb
gossipd: backtrace: gossipd/gossip_store.c:358 (gossip_store_compact) 0x56294
gossipd: backtrace: gossipd/gossip_store.c:395 (gossip_store_new) 0x56294de24
gossipd: backtrace: gossipd/gossmap_manage.c:455 (setup_gossmap) 0x56294de255
gossipd: backtrace: gossipd/gossmap_manage.c:488 (gossmap_manage_new) 0x56294
gossipd: backtrace: gossipd/gossipd.c:400 (gossip_init) 0x56294de22de9
```

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

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

This commit fixes a bug in Core Lightning's gossip store compaction code. The bug caused the program to crash with a 'bad version' assertion when starting up with an empty or freshly-created gossip store file. The fix changes an internal length variable from 0 to 1 so the version header is written correctly. The commit also updates related tests, including one that now checks the program handles a corrupted gossip store gracefully rather than crashing.

Lower-prioritydevtools/gossmap-compress: create latest gossip_store versionby Rusty Russell · facf24b6 · Feb 16, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell

devtools/gossmap-compress: create latest gossip_store version

This saves gossipd from converting it:

```
lightningd-1 2026-02-02T00:50:49.505Z DEBUG gossipd: Time to convert version 14 store: 890 msec
```

Reducing node startup time from 1.4 seconds to 0.5 seconds.

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

This is a developer tool change that updates an internal file-format version number and adds a required header record so compressed gossip files match the format Core Lightning expects. It avoids a startup-time conversion step and has no apparent security relevance.

Lower-prioritygossipd: lightningd/lightning_gossip_compactdby Rusty Russell · f56f8adc · Feb 16, 2026 · 3 filesMessage 58 · ThinInformational 19Details
Commit message · Rusty Russell

gossipd: lightningd/lightning_gossip_compactd

A new subprocess run by gossipd to create a compacted gossip store.

It's pretty simple: a linear compaction of the file. Once it's done the amount it
was told to, then gossipd waits until it completes the last bit.

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

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

This commit adds a new helper program that compacts the Lightning node's gossip store file by copying it without deleted records. It is a normal maintenance/performance feature. There is no clear security bug in the code shown, but the program reads and writes binary gossip files and trusts command-line arguments, so it follows a path that could be sensitive to malformed input.