EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkNormal
Repository coverage

1856 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

158security candidates263second-pass queue1853AI analyses
140commits · 30 days
225commits · 60 days
803commits · 180 days
1839commits · 365 days
Backfill bands
Aug 5 → Feb 61049 seen37 candidatesComplete
Feb 6 → Jun 6579 seen10 candidatesComplete
Jun 6 → Jul 678 seen1 candidatesComplete
Jul 6 → Aug 5147 seen16 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

70/100 average clarity
432Strong · 80–100
1164Adequate · 60–79
231Thin · 40–59
29Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
dovgopoly15015164
Rusty Russell95873958072
Sangbida Chaudhuri14731146066
Dusty Daemon771377066
ShahanaFarooqui931093063
daywalker9090589062
Níckolas Goline40540076
Lagrang376476069
Christian Decker36436072
Vincenzo Palazzo838080
Chandra Pratap56256082
ekzyis222063
Analysis record

Published AI watches

Last scanned 43 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: save pre-movement dbs, and accounting dbs.by Rusty Russell · 9b4a7085 · Aug 14, 2025 · 5 filesMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: save pre-movement dbs, and accounting dbs.

We can use these to test migrations.

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

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

This commit only adds test data files (compressed SQLite snapshots) and a new pytest test case for the bookkeeper module. It is a testing-only change with no modifications to production code, so it has no security impact on running Core Lightning nodes.

Lower-prioritybkpr: remove currency support from balances.by Rusty Russell · 47c2735e · Aug 14, 2025 · 4 filesMessage 78 · AdequateInformational 18Details
Commit message · Rusty Russell

bkpr: remove currency support from balances.

We're going to get rid of this concept, but the main change is that the
account_get_balance API can be drastically simplified:

account_get_credit_debit() accesses the raw fields, never fails, but
returns the a flag which tells us if the account doesn't actually have
any events.

The one place we care about the balance, calculate by hand. Then
account_get_balance() (and struct account_balance) can simply be
moved to th test.

Subtly, without the "GROUP BY" clause, you always get one row, even if
there are no rows (but the SUM are null).

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

This commit is a code cleanup in Core Lightning's bookkeeper plugin. It removes support for tracking multiple currencies per account and simplifies how account balances are calculated. The change is described by the developer as removing a concept they no longer want. There is no indication in the commit message or diff that this fixes a security vulnerability.

Lower-prioritylightningd: have onchaind inform us when to make a channel penalty_adj.by Rusty Russell · 22b452ad · Aug 14, 2025 · 12 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell

lightningd: have onchaind inform us when to make a channel penalty_adj.

bookkeeper used to generate these as channel events, now lightningd does.

We also add a "journal" event, which we will need later too.

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 moves bookkeeping of penalty-related channel balance adjustments from the bookkeeper plugin into the main lightningd process. It adds new internal accounting tags and a message so the on-chain subsystem can tell lightningd when to record these adjustments. There is no direct security vulnerability visible in the diff; it is a refactor of how internal accounting events are generated.

Lower-prioritycommon: make chain_coin_mvt's outpoint member a non-pointer.by Rusty Russell · d066a5f3 · Aug 14, 2025 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

common: make chain_coin_mvt's outpoint member a non-pointer.

It's always set, and in fact we assume it is (journal entries are not
internal to lightningd, so we won't see them in
lightningd/notification.c: that comment is misleading).

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 straightforward internal code cleanup: it changes a data structure so that a transaction reference (outpoint) is stored directly inside the structure rather than as a separate pointer. The commit author states the pointer was always expected to be set anyway, and the change removes a misleading comment suggesting it could be absent. There is no indication this fixes a security bug or changes externally observable behavior in a risky way.

Lower-prioritycoin_mvt: put timestamp into the struct.by Rusty Russell · c0221b1b · Aug 14, 2025 · 4 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

coin_mvt: put timestamp into the struct.

This is not particularly relevant now (it's always the current time) but will be
useful when we implement the list commands.

Note that timestamp is set to be "u32" in various schemas. This will
only become a problem on Sun 07 Feb 2106 06:28:15 UTC. I apologize to
my grandchildren in advance.

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 moves the timestamp for coin movement records from being generated at the moment of notification into the coin movement data structure itself. It is a straightforward internal refactoring to prepare for future list commands. There is no security issue here.

Lower-prioritylightningd: separate coin_movement `tags` array into `primary_tag` and `extra_tags`.by Rusty Russell · 650f3882 · Aug 14, 2025 · 5 filesMessage 73 · AdequateInformational 18Details
Commit message · Rusty Russell

lightningd: separate coin_movement `tags` array into `primary_tag` and `extra_tags`.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Deprecated: JSON-RPC: `coin_movement` notification `tags` array (use `primary_tag` and `extra_tags`).
Changelog-Added: JSON-RPC: `coin_movement` notification `primary_tag` and `extra_tags`.

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

This commit is a routine API cleanup, not a security fix. It splits the coin_movement notification's old 'tags' array into two new fields: 'primary_tag' and 'extra_tags'. The old 'tags' array is kept for backward compatibility but marked as deprecated. Nothing in the change fixes a vulnerability or changes how funds are protected.

Lower-prioritycommon: mvt_tag_strs() function to turn tags array into strings.by Rusty Russell · 1833cc2d · Aug 14, 2025 · 3 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

common: mvt_tag_strs() function to turn tags array into strings.

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 small code cleanup: it introduces a helper function that converts internal 'tags' into strings, and uses that helper in two places where notifications are formatted as JSON. There is no visible change in behavior and no security issue is apparent.

Lower-prioritycommon: enforce the use of a "primary" tag in coin_mvt tags.by Rusty Russell · 0d40d43c · Aug 14, 2025 · 1 fileMessage 73 · AdequateInformational 24Details
Commit message · Rusty Russell

common: enforce the use of a "primary" tag in coin_mvt tags.

Undocumented, but the first tag in the coin_movement notification is
considered the primary tag, and the others are optional. The
bookkeeper plugin relies on this!

Enforce that this is true, and in the process document in the code which
is the primary tag.

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

This commit adds internal safety checks to ensure that financial movement records in Core Lightning always start with a main category tag, with any extra tags treated as secondary. It does not change user-facing behavior in production builds, but it helps prevent bookkeeping mistakes that could misclassify transactions.

Lower-prioritypytest: don't assume that tags will always be in the same order.by Rusty Russell · 9c6e7b8d · Aug 14, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: don't assume that tags will always be in the same order.

This isn't a robust assumption, so sort them before comparison.

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 change only affects internal test helper code. It makes test comparisons of tag lists ignore the order of tags by sorting them first. There is no security issue; it is a test robustness fix.

Lower-prioritytools: Filter "highlight" case insensitiveby Peter Neuroth · 5e620cab · Aug 14, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

tools: Filter "highlight" case insensitive

There was a problem with a ‘highlight’ that was misunderstood as a
spelling mistake in lib-wally. Since ‘hightlight’ is already filtered
out, we simply instruct grep to ignore upper/lower case when filtering.

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 changes a spelling-check script so it ignores uppercase and lowercase when filtering out the word 'highlight'. It is a build/tooling fix to prevent false positives in the project's spell checker and has no security relevance.

Lower-prioritychanneld: Add extra_tlvs to wire htlcsby Peter Neuroth · 631a1d95 · Aug 14, 2025 · 4 filesMessage 68 · AdequateInformational 20Details
Commit message · Peter Neuroth

channeld: Add extra_tlvs to wire htlcs

This appends the extra_tlvs to the internal wire htlcs "added" and
"existing" for the extra tlvs to be handed to lightningd.

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

This commit extends the internal message format used between parts of a Core Lightning node so that extra optional data fields (TLVs) attached to forwarded payments are preserved when HTLCs are passed between sub-daemons. The change itself is a data plumbing/plumbing extension, not a fix for a known vulnerability. There is no vendor statement that this is a security patch, and no independent researcher is credited.

Lower-prioritydocs: Add extra_tlvs to the htlc_accepted_hook docby Peter Neuroth · 40c01ea2 · Aug 14, 2025 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Peter Neuroth

docs: Add extra_tlvs to the htlc_accepted_hook doc

Changelog-Added: The `htlc_accepted_hook` now gets the TLV-stream
attached to the HTLC passed through as `extra_tlvs` and can replace it.

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates developer documentation. It adds a description of an existing feature called extra_tlvs to the htlc_accepted_hook documentation. There is no code change, no bug fix, and no security issue visible in the commit itself.

Lower-prioritychanneld: add extra_tlvs from update_add_htlc msgby Peter Neuroth · f4cc633c · Aug 14, 2025 · 6 filesMessage 68 · AdequateLow 28Details
Commit message · Peter Neuroth

channeld: add extra_tlvs from update_add_htlc msg

We currently only consider known tlv types in the internal
representation of a htlc. This commit adds the remaining unknown tlv
fields to the htlc as well. This is in prepareation to forward these to
the htlc_accepted_hook.

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

This commit changes how Core Lightning stores extra data fields (called TLVs) attached to HTLC payment messages. Previously, only known fields like the blinded path were kept. Now, any unknown extra TLV fields are preserved inside the internal HTLC record too. The stated purpose is to later forward these extra fields to the htlc_accepted_hook plugin interface. There is no direct security fix here; it is a data-preservation change that could affect how future features or plugins handle payment data.

Lower-prioritycommon/htlc_wire: add towire/fromwire helpers for wrapped tlv streams.by Rusty Russell · 6fbc5d02 · Aug 14, 2025 · 1 fileMessage 65 · AdequateLow 48Details
Commit message · Rusty Russell

common/htlc_wire: add towire/fromwire helpers for wrapped tlv streams.

And make sure we check the length properly in fromwire!

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

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

This commit refactors how Core Lightning reads and writes optional extra TLV data attached to HTLC messages. The main functional change is adding a length check when reading these wrapped TLV streams, so a malformed message cannot claim a length larger than the remaining data. The commit message explicitly calls out that the length was not being checked properly before.

Lower-prioritycommon: handle taken() extra_tlvs in new_existing_htlc properly.by Rusty Russell · 63065aa9 · Aug 14, 2025 · 3 filesMessage 65 · AdequateLow 42Details
Commit message · Rusty Russell

common: handle taken() extra_tlvs in new_existing_htlc properly.

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

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

This patch fixes a memory-management bug when handling extra TLV (type-length-value) data attached to Lightning Network HTLCs (payment hops). The bug involved the 'taken()' memory ownership marker: when the caller had marked the extra_tlvs array to be 'taken' (transferred), the old code would still make a full copy and deep-copy of every value buffer, which is unnecessary and could lead to use-after-free or double-free problems because the original array's value buffers were not re-parented correctly. The patch introduces a helper that checks whether the array is already 'taken' and, if so, avoids the redundant deep copy, ensuring the value buffers are attached to the correct parent object.

Lower-prioritytools: Remove lockfiles from spell-checkingby Peter Neuroth · 5c1fd782 · Aug 14, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

tools: Remove lockfiles from spell-checking

The rare case happened where a lockfile sha-sum contained a "Ctlv" which
spell-check complained about. Stupid lockfiles that don't know it is
actually "cltv"!

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 trivial change to a spell-checking script used during development. It tells the spell-checker to ignore package-lock.json files because their randomly-generated hash strings can accidentally contain the letters 'ctlv', which the script flags as a misspelling of 'cltv'. There is no security issue here.

Lower-prioritytests: Add tests for extra_tlvs in hookby Peter Neuroth · dbbb1131 · Aug 14, 2025 · 2 filesMessage 78 · AdequateInformational 15Details
Commit message · Peter Neuroth

tests: Add tests for extra_tlvs in hook

Adds some testcases for custom tlvs, set by a htlc_accepted_hook. We
check that the custom tlvs replace the update_add_htlc_tlvs and get
forwarded to the peer. We also check that a malformed tlv will result in
a **BROKEN** behaviour.

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

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

This commit only adds new automated tests and a test plugin. It does not change any production code, so it cannot by itself introduce a security vulnerability or fix one. The tests exercise an existing feature that lets plugins attach custom data fields to forwarded Lightning payments, and verify that malformed data triggers a 'BROKEN' log warning.

AI review queuedlightningd: Add extra_tlvs to htlc_accepted_hookby Peter Neuroth · 2264b93c · Aug 14, 2025 · 7 filesMessage 68 · AdequateLow 38Details
Commit message · Peter Neuroth

lightningd: Add extra_tlvs to htlc_accepted_hook

Add serializing and deserializing of the extra tlvs to to the
htlc_accepted_hook to allow plugin users to replace the tlv stream that
is attached to the update_add_htlc message on forwards.

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
signing or wallet pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Low 38/100

This commit adds a new plugin hook feature to Core Lightning that lets plugins inspect and replace optional extra data (TLV fields) attached to forwarded Lightning payments. It is a feature addition, not a direct bug fix. The code includes validation of those extra fields and a note that they are not saved to the database. There is no claim in the commit that this fixes a security vulnerability.

AI review queuedchanneld: Add extra_tlvs to incomming wire msgby Peter Neuroth · ef52de88 · Aug 14, 2025 · 6 filesMessage 68 · AdequateLow 26Details
Commit message · Peter Neuroth

channeld: Add extra_tlvs to incomming wire msg

This appends the extra_tlvs to the internal channeld_offer_htlc wire
msg. We also recombine the extra_tlvs with the blinded path key for
forwarding htlcs.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 26/100

This commit changes how Core Lightning passes extra data fields (TLVs) when forwarding or storing payment instructions inside the channel daemon. It adds a new field to an internal message and recombines those extra fields with a blinding key before the HTLC is added to the channel. There is no direct evidence in the commit that this fixes a security bug; it appears to be a protocol-correctness or feature-completeness change for blinded routes.

AI review queuedcln-bip353: add plugin that fetches payment instructions from human readable addressesby daywalker90 · e3e41163 · Aug 14, 2025 · 21 filesMessage 65 · AdequateLow 33Details
Commit message · daywalker90

cln-bip353: add plugin that fetches payment instructions from human readable addresses

Changelog-Add: new plugin cln-bip353 that can fetch BIP-353 payment instructions from human readable addresses

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
second-pass: unusually broad change
AI analysis · Low 33/100

This commit adds a brand-new plugin called cln-bip353 to Core Lightning. The plugin lets users look up Bitcoin/Lightning payment instructions from human-readable addresses like send.some@satsto.me using DNS (BIP-353). It also exposes a new RPC command and gRPC method named fetchbip353. Because this is a large feature addition touching RPC, gRPC, generated Python code, documentation, and tests, it increases the attack surface of the node: any bugs in DNS resolution, DNSSEC proof handling, or parsing of returned payment instructions could affect the node. However, the commit itself is a feature addition, not a documented security fix, and no specific vulnerability is visible in the diff.

AI review queuedcommon/json_parse_simple: make convenience functions inlineby Matt Whitlock · 9112c1d5 · Aug 14, 2025 · 7 filesMessage 85 · StrongInformational 18Details
Commit message · Matt Whitlock

common/json_parse_simple: make convenience functions inline

json_tok_streq(…) and json_get_member(…) are convenience wrappers for
json_tok_strneq(…) and json_get_membern(…) respectively. Unfortunately, using
them incurs a performance penalty in the common case where they are called with
a string literal argument because the compiler is unable to substitute a
compile-time constant in place of the buried call to strlen(…).

For example,

json_get_member(buf, tok, "example");

…will have worse performance than…

json_get_membern(buf, tok, "example", strlen("example"));

…because the former is forced to scan over "example" at run-time to count its
length whereas the latter is able to elide the strlen(…) call at compile time.

Hoist these convenience functions up into common/json_parse_simple.h and mark
them as inline so that the compiler can elide the strlen(…) call in the common
case of calling these functions with a string literal argument.

Changelog-None

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This change moves two helper functions from a source file into a header file and marks them 'inline' so the compiler can optimize common calls. It is a performance cleanup, not a security fix. The functions behave the same way as before; only how the compiler sees them changes. Test stub files are updated to match the new internal layout.

Security candidatelightningd: fix race with crossover pings.by Rusty Russell · 5f544038 · Aug 14, 2025 · 8 filesMessage 68 · AdequateLow 37Details
Commit message · Rusty Russell

lightningd: fix race with crossover pings.

We cannot use subd_req() here: replies will come out of order, and the
we should not simply assign the reponses in FIFO order.

Changelog-Fixed: lightningd: don't get confused with parallel ping commands.
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
Why it was queued
authentication path
AI analysis · Low 37/100

This commit fixes a bug in Core Lightning's handling of multiple ping commands sent at the same time. Previously, if two ping commands were issued in parallel, the replies could arrive out of order and be matched to the wrong command, potentially causing incorrect responses or confusion in the node. The fix adds a unique request ID to each ping so replies can be correctly paired with their original commands.

Lower-priorityconnectd: warn if we ignore peer incoming for longer than 5 seconds.by Rusty Russell · a0fd72eb · Aug 14, 2025 · 3 filesMessage 85 · StrongInformational 22Details
Commit message · Rusty Russell

connectd: warn if we ignore peer incoming for longer than 5 seconds.

One reason why ping processing could be slow is that, once we receive
a message from the peer to send to a subdaemon, we don't listen for
others until we've drained that subdaemon queue entirely.

This can happens for reestablish: slow machines can take a while to
set that subdaemon up.

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

This change adds a warning log when the Lightning node's connection handler has ignored incoming peer messages for more than 5 seconds. It does not fix the underlying delay; it only makes the delay visible in logs so operators and developers can spot when message processing stalls.

Lower-prioritygossipwith: add flag to insist that we receive all messages.by Rusty Russell · 0938d544 · Aug 14, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

gossipwith: add flag to insist that we receive all messages.

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 is a small change to a developer-only diagnostic tool called 'gossipwith'. It adds a new optional command-line flag that makes the tool return a failure exit code if it does not receive the expected number of messages. There is no indication this fixes a security bug or affects normal Lightning node operation.

Lower-prioritycommon: add json_add_timerel helper.by Rusty Russell · 80309dfb · Aug 14, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Rusty Russell

common: add json_add_timerel helper.

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

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

This commit simply adds a new helper function for formatting relative time values as JSON numbers. It is a routine, non-security code addition with no bug fix or behavior change to existing features.