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
145commits · 30 days
228commits · 60 days
806commits · 180 days
1848commits · 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 22 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-prioritytests: added *non-developer mode* test for invalid filteringby dovgopoly · dcaa529a · Dec 22, 2025 · 1 fileMessage 60 · AdequateLow 42Details
Commit message · dovgopoly

tests: added *non-developer mode* test for invalid filtering

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Low 42/100

This commit adds a test for a crash that only happens when Core Lightning runs in normal (non-developer) mode. A user sending a malformed JSON filter through the command-line tool could cause the node to crash because a logging function expects data that isn't set in non-dev mode. The test confirms the crash and the expected error message.

AI review queuedlightningd: fix segfault when parse_filter failsby dovgopoly · a1a4affe · Dec 22, 2025 · 1 fileMessage 68 · AdequateHigh 72Details
Commit message · dovgopoly

lightningd: fix segfault when parse_filter fails

We need to initialize ->json_cmd *before* complaining about malformed
filters.

```
lightningd: FATAL SIGNAL 11 (version v25.12-21-g3851187-modded)
0x1042d2023 ???
send_backtrace+0x4f:0
0x1042d20cb ???
crashdump+0x43:0
0x19fe3b743 ???
???:0
0x104180173 command_log
lightningd/jsonrpc.c:1406
0x10420d8f7 command_fail_badparam
common/json_command.c:25
0x104181a07 parse_request
lightningd/jsonrpc.c:1075
0x104181a07 read_json
lightningd/jsonrpc.c:1216
0x10424c65b next_plan
ccan/ccan/io/io.c:60
0x10424c65b do_plan
ccan/ccan/io/io.c:422
0x10424c587 io_ready
ccan/ccan/io/io.c:439
0x10424dd9b io_loop
ccan/ccan/io/poll.c:470
0x10417ede7 io_loop_with_timers
lightningd/io_loop_with_timers.c:22
0x104183a33 main
lightningd/lightningd.c:1492
```

Co-authored-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: JSON-RPC: malformed filters no longer crash lightningd.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · High 72/100

This commit fixes a bug where a malformed JSON-RPC filter could crash the Core Lightning daemon (lightningd) with a segmentation fault. The crash happened because the code tried to report the malformed filter before it had looked up the command it was processing. The fix moves the command lookup earlier, so the error can be reported safely without dereferencing a null pointer.

Lower-prioritytest: Add tests to confirm that description is added to RPCsby ShahanaFarooqui · 1887ed4a · Dec 19, 2025 · 1 fileMessage 72 · AdequateInformational 12Details
Commit message · ShahanaFarooqui

test: Add tests to confirm that description is added to RPCs

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 12/100

This commit only adds new automated tests to verify that a user-provided description is returned by two existing RPC commands (disableoffer and enableoffer). It does not change any production code, fix a bug, or alter security behavior. There is no security issue in this change.

Lower-prioritytest: test_sql: fix missing description fieldby erdoganishe · bb5b8d70 · Dec 19, 2025 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · erdoganishe

test: test_sql: fix missing description field

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This is a minor test-only fix. A developer added a missing 'description' field to an expected list of fields inside a test file. It does not change any production code, user-facing behavior, or security logic.

Lower-prioritydoc: Added doc schemas with description and update protoby ShahanaFarooqui · 54af71c5 · Dec 19, 2025 · 11 filesMessage 50 · ThinInformational 19Details
Commit message · ShahanaFarooqui

doc: Added doc schemas with description and update proto

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

This commit is a routine documentation and code-generation update. It adds a new optional 'description' field to the responses of three RPC commands that manage BOLT12 offers (disableoffer, enableoffer, listoffers), and propagates that field through the generated gRPC/Protobuf and Rust/Python client bindings. There is no indication of a security vulnerability, bug fix, or behavior change beyond surfacing existing data to API consumers.

Lower-prioritylightningd: add description field to offer related responcesby erdoganishe · 1f302cd2 · Dec 19, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · erdoganishe

lightningd: add description field to offer related responces

Changelog-Added: Expose decoded offer description in `offer` and `listoffers` RPC responses.

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

This commit simply adds a human-readable 'description' field to several RPC responses that already expose a BOLT12 offer string. It decodes the existing offer string and, if the offer contains a description, includes it in the JSON output. There is no security-relevant change.

Lower-prioritytools: Fixed shellcheck error from promote-stable scriptby ShahanaFarooqui · a05150bd · Dec 19, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · ShahanaFarooqui

tools: Fixed shellcheck error from promote-stable script

Changelog-None: Fixed script.

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

This commit is a routine cleanup of a developer/release script. It fixes a shellcheck linting warning and restructures how a Docker Hub login token is requested. There is no security-relevant change: the same credentials are still sent to the same Docker Hub API endpoint, just with slightly different shell syntax and error handling.

Lower-prioritypay: Enforce maxdelay for direct channel paymentsby wqxoxo · bc3b9b4f · Dec 19, 2025 · 2 filesMessage 86 · StrongLow 47Details
Commit message · wqxoxo

pay: Enforce maxdelay for direct channel payments

When paying through a direct channel, direct_pay_override() creates a
route bypassing the normal routing path, which skips the CLTV budget
check in payment_getroute(). This allows payments to succeed even when
maxdelay is set below the required min_final_cltv_expiry.

Add a check in direct_pay_override() to verify the required CLTV
doesn't exceed cltv_budget before using the direct channel shortcut.
If it exceeds, skip the direct channel and let normal routing handle
the failure with a proper error message.

Fixes: #8609

Changelog-Fixed: pay: `maxdelay` parameter now enforced for direct channel payments

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

This fix closes a loophole in Core Lightning's payment plugin. When a payer had a direct channel to the recipient, the plugin could bypass the normal route-finding step that checks whether the requested payment delay (CLTV) fits within the user's configured 'maxdelay' budget. As a result, a payment could go through even though the user explicitly asked not to accept such a long delay. The patch adds the missing budget check before taking the direct-channel shortcut and now rejects the payment with a clear error when the delay is too high.

Lower-prioritygossipd: move timestamp_reasonable into gossmap_manage.c.by Rusty Russell · d6f6d46c · Dec 19, 2025 · 3 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

gossipd: move timestamp_reasonable into gossmap_manage.c.

It's only used in there anyway.

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

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

This commit is a simple internal code cleanup: a helper function that checks whether a gossip timestamp is reasonable is moved from a shared header file into the only file that actually uses it, and its visibility is changed from public to private (static). There is no change to what the function does, no bug fix, and no security-relevant behavior change.

Lower-prioritygossipd: don't need hsm fd any more.by Rusty Russell · 4c8d656f · Dec 19, 2025 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

gossipd: don't need hsm fd any more.

gossipd no longer makes gossip messages, and hasn't since v24.02, so it
doesn't actually need to talk to the hsm daemon.

Also, various comments were out of date, so fix those too.

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 is a routine cleanup patch. The gossipd subdaemon used to need a secure connection to the wallet's signing daemon (hsmd) to sign network gossip messages, but that work was moved elsewhere in version 24.02. The patch removes the now-unused connection and updates stale comments. There is no security bug being fixed here.

Lower-prioritytests: add payer_note case for xpayby nazarevsky · d065d369 · Dec 18, 2025 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · nazarevsky

tests: add payer_note case for xpay

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

This commit only changes a test file. It updates an existing test case to pass a new optional parameter, payer_note, when calling the xpay command for a BOLT 12 invoice. There is no change to production code, no bug fix, and no security relevance.

Lower-priorityxpay: add payer_note fieldby nazarevsky · 66ce41d5 · Dec 18, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · nazarevsky

xpay: add payer_note field

Changelog-Added: Add 'payer-note' field to the 'xpay' RPC call.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit adds a new optional 'payer-note' field to the xpay RPC command in Core Lightning. It simply passes a user-provided note through to an underlying invoice-fetching call. There is no security issue visible in the change.

Lower-prioritycln-rpc: update schema, update proto for xpay payer_note fieldby nazarevsky · bcdce8f4 · Dec 18, 2025 · 9 filesMessage 50 · ThinInformational 15Details
Commit message · nazarevsky

cln-rpc: update schema, update proto for xpay payer_note field

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

This commit adds a new optional 'payer_note' field to the xpay RPC command and its generated protocol bindings. It is a routine feature addition that lets a payer attach a short message when requesting a BOLT12 invoice. There is no indication of a security bug or fix.

Lower-priorityreadme: change links for 'Useful commands' from local to a web docby nazarevsky · 07165697 · Dec 18, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · nazarevsky

readme: change links for 'Useful commands' from local to a web doc

Changelog-None

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the README file to point documentation links for common commands to an external website instead of local files. It does not change any program code, configuration, or security behavior.

Lower-priorityscript: Update sync RPC documentation script to check if the page was renderable for Readmeby ShahanaFarooqui · 611e2620 · Dec 17, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · ShahanaFarooqui

script: Update sync RPC documentation script to check if the page was renderable for Readme

- ReadMe API v2 now requires category.uri instead of category.id.

- ReadMe v2 page responses include a renderable field indicating whether the document is MDX-compatible and can be rendered successfully. The script now checks this field and prints detailed compilation errors if rendering fails.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit updates an internal GitHub automation script that publishes Core Lightning's JSON-RPC command documentation to the ReadMe documentation platform. It adapts the script to ReadMe's newer API version (using a category web address instead of a numeric ID, wrapping page content differently, and checking whether ReadMe can successfully render each uploaded page). There is no change to the Core Lightning node software, wallet logic, network protocol, or any user-facing runtime behavior. It is purely a documentation-publishing tooling fix.

Security candidatedocs: Updated schema for mdx compatibilityby ShahanaFarooqui · 3e841b35 · Dec 17, 2025 · 151 filesMessage 80 · StrongInformational 15Details
Commit message · ShahanaFarooqui

docs: Updated schema for mdx compatibility

Changelog-Fixed: Ensure documentation renders correctly when adding/updating new RPCs by detecting non-MDX-compatible pages.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a documentation-only change. It updates the project's documentation files and JSON schemas so that author email addresses, web links, and tables are written in a format compatible with MDX (a modern documentation rendering format). There are no changes to the actual Core Lightning software code, so it cannot affect node security, funds, or network behavior.

Lower-prioritypytest: add test to demonstrate gossip_store misordering node announcements.by Rusty Russell · d1857fff · Dec 17, 2025 · 1 fileMessage 95 · StrongLow 28Details
Commit message · Rusty Russell

pytest: add test to demonstrate gossip_store misordering node announcements.

We usually lose the node announcement on restart, because the
node_announcement message is ignored by gossmap, as it doesn't (yet!) know of the node, since the
channel_announcement does not precede the node_announcement.

This is supposed to be detected and fixed by gossipd, but this simple test shows that it is not!

```
FAILED tests/test_gossip.py::test_gossmap_lost_node - AssertionError: assert {'nodes': [{'nodeid': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59', 'alias': 'SILENTARTIST-v25.12-2-g703851b', 'color': '022d22', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}, {'nodeid': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518', 'alias': 'JUNIORBEAM-v25.12-2-g703851b', 'color': '0266e4', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}, {'nodeid': '035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d'}, {'nodeid': '0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de199', 'alias': 'JUNIORFELONY-v25.12-2-g703851b', 'color': '0382ce', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}]} == {'nodes': [{'nodeid': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59', 'alias': 'SILENTARTIST-v25.12-2-g703851b', 'color': '022d22', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}, {'nodeid': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518', 'alias': 'JUNIORBEAM-v25.12-2-g703851b', 'color': '0266e4', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}, {'nodeid': '035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d', 'alias': 'HOPPINGFIRE-v25.12-2-g703851b', 'color': '035d2b', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}, {'nodeid': '0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de199', 'alias': 'JUNIORFELONY-v25.12-2-g703851b', 'color': '0382ce', 'last_timestamp': 1765172273, 'features': '8898880a8a59a1', 'addresses': []}]}

Differing items:
{'nodes': [{'addresses': [], 'alias': 'SILENTARTIST-v25.12-2-g703851b', 'color': '022d22', 'features': '8898880a8a59a1...}, {'addresses': [], 'alias': 'JUNIORFELONY-v25.12-2-g703851b', 'color': '0382ce', 'features': '8898880a8a59a1', ...}]} != {'nodes': [{'addresses': [], 'alias': 'SILENTARTIST-v25.12-2-g703851b', 'color': '022d22', 'features': '8898880a8a59a1...}, {'addresses': [], 'alias': 'JUNIORFELONY-v25.12-2-g703851b', 'color': '0382ce', 'features': '8898880a8a59a1', ...}]}

Full diff:
{
'nodes': [
{
'addresses': [],
'alias': 'SILENTARTIST-v25.12-2-g703851b',
'color': '022d22',
'features': '8898880a8a59a1',
'last_timestamp': 1765172273,
'nodeid': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
},
{
'addresses': [],
'alias': 'JUNIORBEAM-v25.12-2-g703851b',
'color': '0266e4',
'features': '8898880a8a59a1',
'last_timestamp': 1765172273,
'nodeid': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518',
},
{
- 'addresses': [],
- 'alias': 'HOPPINGFIRE-v25.12-2-g703851b',
- 'color': '035d2b',
- 'features': '8898880a8a59a1',
- 'last_timestamp': 1765172273,
'nodeid': '035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d',
},
{
'addresses': [],
'alias': 'JUNIORFELONY-v25.12-2-g703851b',
'color': '0382ce',
'features': '8898880a8a59a1',
'last_timestamp': 1765172273,
'nodeid': '0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de199',
},
],
}

```

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

This commit only adds a new test that demonstrates a bug: after restarting a Core Lightning node, one node's announcement information can disappear from the local network view. The test is marked as expected to fail, so it documents the problem rather than fixing it. There is no immediate security exploit here, but it shows a reliability issue in how the node stores and reloads network gossip data.

Lower-prioritygossipd: make sure we correctly move node announcement when *no* channel preceeds it in the gossip store.by Rusty Russell · f0e95476 · Dec 17, 2025 · 2 filesMessage 83 · StrongLow 32Details
Commit message · Rusty Russell

gossipd: make sure we correctly move node announcement when *no* channel preceeds it in the gossip store.

We had the test backwards, so we moved it *all the time*. This bloats our gossip store, as well as
not moving it in the case where we need to.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: gossipd: we would occasionally not show a node announcement in listnodes().

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

This commit fixes a logic bug in Core Lightning's gossip daemon. The condition for moving a 'node announcement' record in the gossip store was accidentally inverted, so it was moved all the time instead of only when needed. This caused unnecessary growth of the gossip store and could hide node announcements from the listnodes() RPC result. It is a reliability/availability bug, not a direct funds-loss vulnerability, and there is no evidence it was disclosed as a security issue or credited to an external researcher.

Lower-priorityplugins: lsps: move primitives into lsps0by Peter Neuroth · ba93a7ca · Dec 16, 2025 · 6 filesMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

plugins: lsps: move primitives into lsps0

Those primitives are actually defined in lsps0

This commit is part of a series that refactor the lsp plugin crate into
a modularized crate with the goal to separate the actual plugin runtime
as much as possible from library code to make it accessible for 3rd
party plugin implementations.

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

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

This is a straightforward code reorganization: the developer moved shared data types (like monetary amounts and channel identifiers) from a file called 'primitives.rs' into a file called 'lsps0.rs' because the LSPS0 specification actually defines those types. Other files were updated to import from the new location. No behavior changes, bug fixes, or security fixes are visible in the diff.

AI review queuedplugins: lsps: replace heavy transportby Peter Neuroth · 462ca844 · Dec 16, 2025 · 6 filesMessage 68 · AdequateLow 27Details
Commit message · Peter Neuroth

plugins: lsps: replace heavy transport

We replace the legacy transport by a slim custommsg hook that makes use
of the lightweight multiplexed transport and avoids deserialization and
serialization through this extra layer

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Low 27/100

This commit refactors the LSPS (Lightning Service Provider Specification) plugin in Core Lightning to replace a heavier custom-message transport layer with a slimmer one. It removes a 536-line transport module and introduces a simpler hook-based multiplexer. The change is a code-quality/architecture refactor; there is no direct evidence in the commit or supplied references that it fixes a security vulnerability.

AI review queuedplugins: lsps: remove anyhow from tlvsby Peter Neuroth · 4a1c9220 · Dec 16, 2025 · 1 fileMessage 68 · AdequateInformational 12Details
Commit message · Peter Neuroth

plugins: lsps: remove anyhow from tlvs

Remove anyhow as a dependency from the tlv module. This allows for a
cleaner error handling

Changelog-None

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

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

This commit is a routine code cleanup in a Core Lightning plugin. It swaps one Rust error-handling library (anyhow) for another (thiserror) in the TLV (type-length-value) parsing module. The actual parsing logic and security checks remain the same; only the way errors are represented and reported is changed. There is no indication this fixes a security bug.

Lower-priorityplugins: lsps: refactor client to use jsonrpcresponseby Peter Neuroth · 52745565 · Dec 16, 2025 · 3 filesMessage 73 · AdequateInformational 14Details
Commit message · Peter Neuroth

plugins: lsps: refactor client to use jsonrpcresponse

This makes it easier for client implementations to separate transport or
parser related issues from actuall json-rpc error responses. Also this
helps to segregate the individual responsibilities of the crates
further.

This further alows us to remove the error enum from proto/jsonrpc
completely as this now only deals as a from/to-wire module

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

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

This commit is a straightforward internal code cleanup in Core Lightning's LSPS (Lightning Service Provider Specification) plugin. It changes how JSON-RPC responses are handled so that transport/parser problems are kept separate from actual JSON-RPC error responses returned by a remote server. There is no indication this fixes a security bug or introduces a vulnerability; it is a refactoring for better code organization.

Lower-priorityplugins: lsps: move lsps2 model to proto moduleby Peter Neuroth · b88dc597 · Dec 16, 2025 · 6 filesMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

plugins: lsps: move lsps2 model to proto module

This commit is part of a series that refactor the lsp plugin crate into
a modularized crate with the goal to separate the actual plugin runtime
as much as possible from library code to make it accessible for 3rd
party plugin implementations.

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

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

This commit is a pure code refactor: it moves the LSPS2 data model (request/response types, fee calculation, validation, and tests) from one internal module path to another within the same plugin crate. No functionality, logic, or security behavior changes. It is not a security fix.

Lower-priorityplugins: lsps: move errors into proto moduleby Peter Neuroth · a94885ba · Dec 16, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

plugins: lsps: move errors into proto module

This commit is part of a series that refactor the lsp plugin crate into
a modularized crate with the goal to separate the actual plugin runtime
as much as possible from library code to make it accessible for 3rd
party plugin implementations.

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

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

This commit is a routine code reorganization in Core Lightning's experimental LSPS plugin. It moves standard JSON-RPC error code constants from one internal Rust module to another and adds a new client-rejected error type. There is no security-relevant behavior change, no bug fix, and no vulnerability patch.

Lower-priorityplugins: lsps: add peer_id to transportby Peter Neuroth · 0f624ed6 · Dec 16, 2025 · 3 filesMessage 68 · AdequateInformational 14Details
Commit message · Peter Neuroth

plugins: lsps: add peer_id to transport

Frankly, transport without a target doesn't make sense, so this commit
adds a PublicKey (from secp256k1) as the target to the Transport trait.
It can easily be replaced by a common PeerId without changing the api
for external implementations if needed in the future

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

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

This commit is a routine code refactor in an experimental plugin. It adds a peer identifier (a public key) to the internal transport layer so every message knows which Lightning peer it is intended for. There is no indication this fixes a security bug; it is a design improvement.