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 53 minutes ago

Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "doc: require Homebrew GNU make and gpatch on macOS"

This commit is a simple documentation revert. It undoes a previous change that told macOS users to install GNU make and GNU patch from Homebrew and to put those tools first in their command path. The reverted instructions now omit gpatch a…

0cfa949fby Sangbida Chaudhuri+4−81 file
No security note in commit
Informational 15 AI analysisMessage 75 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "tests: drop obsolete x-prefix in compacter-slow.sh"

This commit re-adds an old-style 'x' prefix to a string comparison in a test helper script. It is a test-only change with no effect on the actual Core Lightning node software, user funds, network behavior, or security. The change simply re…

116fd7cdby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

doc: require Homebrew GNU make and gpatch on macOS

This commit only updates macOS installation instructions in the documentation. It tells macOS users to install newer GNU versions of 'make' and 'patch' from Homebrew because Apple's built-in tools are too old for building and running sourc…

d3ff1474by Sangbida Chaudhuri+8−41 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tests: drop obsolete x-prefix in compacter-slow.sh

This commit is a trivial shell script cleanup. It removes an old-fashioned 'x' prefix from a string comparison in a test helper script so that a newer version of the Shellcheck linter stops warning about it. The change does not alter progr…

474c272aby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 18 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist amount+currency parsing into common code.

This commit moves existing code that parses payment amounts (Bitcoin millisatoshis, 'any' amount, or fiat currency amounts) from one plugin file into a shared library so it can be reused by a future feature. It is a code refactoring with n…

Refactoring of amount-parsing code into a shared helperAddition of explicit u64 overflow guards (mul_overflows_u64, add_overflows_u64) in the new common codeNo change to wire protocol or RPC interface semantics
e0f86c17by Rusty Russell+112−723 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: internal cleanups since all non-command JSON IDs are strings.

This is a routine internal cleanup commit in Core Lightning. It removes an unused helper function and simplifies how JSON-RPC request IDs are stored and formatted, since the project now always uses string IDs for non-command JSON traffic. …

No security-relevant keywords in commit title or messageNo CVE, advisory, or bug reference presentChanges are refactor/cleanup in nature
a70ae963by Rusty Russell+25−378 files
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist hash_str helper into its own header.

This commit is a routine code cleanup: it moves a small string-hashing helper function into a shared header file so it can be reused without being copied and pasted. There is no change to behavior, no bug fix, and no security relevance.

581bbb1fby Rusty Russell+16−176 files
No security note in commit
Informational 23 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade: we need to remove "impressions" from askrene datastore when downgrading to v26.06.

This is a database downgrade helper fix, not a live network vulnerability. Core Lightning's downgrade tool previously failed to strip out new 'channel impression' records when rolling a database back to version v26.06. The patch teaches th…

Database downgrade path could leave incompatible records in older schemaOffline tool only; no remote or on-chain triggerFix prevents potential node startup failure after version rollback
4d926285by Rusty Russell+43−111 file
No security note in commit
Low 31 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade tool: fix invalid memory bug

This commit fixes a typo in a database downgrade helper tool. The bug caused the tool to pass a negative number (turned into a huge positive size) when copying data, which led to an out-of-memory (OOM) error. The fix swaps two variable nam…

Integer underflow / negative-to-size_t wrap leading to excessive allocationOut-of-memory crash in maintenance toolMemory corruption potential if allocation somehow succeeded
42995326by Lagrang3+8−81 file
No security note in commit
Informational 24 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: actually tell askrene when a payment succeeded.

This commit fixes a bookkeeping bug in Core Lightning's xpay plugin. Previously, when a payment succeeded, xpay did not tell the askrene routing-helper that the route worked. As a result, askrene kept stale or overly pessimistic ideas abou…

Missing success feedback to routing layer can degrade payment reliabilityStale negative impressions may bias future path selection toward worse or failing routesNo direct funds-loss primitive is introduced or fixed
a66fabd4by Rusty Russell+40−02 files
No security note in commit
Low 49 AI analysisMessage 58 · Thin
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: correctly order constraints.

This commit fixes a bug in Core Lightning's routing helper (askrene) where two kinds of channel information—hard limits called 'constraints' and usage estimates called 'impressions'—were being applied in the wrong order. Because impression…

Routing decision bug caused by incorrect ordering of time-relative channel statePotential payment failure or acceptance of an over-capacity routeRegression test added demonstrating incorrect route acceptance before fix
4b6fe4a1by Rusty Russell+211−1182 files
No security note in commit
Low 35 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: don't leak channel intel entries

This commit fixes a memory leak in the askrene plugin of Core Lightning. When individual channel intelligence entries were deleted, the code removed the entry from its array but forgot to free two internal pointers (impression and constrai…

Memory leak in plugin data structure cleanupMissing deallocation of nested pointers before array removalFix located in routing/intelligence plugin (askrene)
8891f414by Lagrang3+5−01 file
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: tests should expect the new error messages

This commit only updates test files so that automated checks expect slightly different error wording from the xpay payment command. It does not change any production code, so it cannot introduce a security vulnerability or fix one on its o…

0b67601fby Lagrang3+24−32 files
No security note in commit
Low 43 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit invoices to 10 minutes for recurring offers in other currencies.

This change tightens the lifetime of recurring invoices priced in foreign currencies (like USD) to 10 minutes by default, and refreshes them with current exchange rates when they expire. Previously, such invoices could remain valid for the…

Fixes stale exchange-rate exposure for currency-denominated recurring invoicesAdds configurable expiry cap for recurring currency invoicesDistinguishes user-cancellation (0s expiry) from natural expiry to avoid misleading errors
446312cfby Rusty Russell+134−148 files
No security note in commit
Low 45 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit expiry to offer limit, or 10 minutes with currency conversion.

This commit tightens the expiration time on invoices created from BOLT12 offers. Previously, all such invoices defaulted to a 2-hour payment window. Now, if the offer has an absolute expiry, the invoice expires when the offer expires; and …

BOLT12 invoice expiry now bounded by offer absolute expiryCurrency-converted invoices use short expiry to limit exchange-rate exposureNew regression test added for expiry behavior
a6cf4915by Rusty Russell+55−22 files
No security note in commit
Low 29 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: don't bother with checking recurrence timing.

This commit removes local timing checks in Core Lightning's fetchinvoice plugin for recurring payments. Instead of the plugin refusing too-early or too-late invoice requests, it now lets the remote node decide and report back. The change i…

Removal of local input-validation checks for recurring invoice requestsReliance on remote-party enforcement for recurrence period limits and pay windowsTest expectations changed from local rejection to remote failure messages
3e49d908by Rusty Russell+2−682 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: don't do previous invoice checking in createinvoicerequest.

This commit removes a local sanity check in Core Lightning's experimental 'createinvoicerequest' command. Previously, when creating a recurring invoice request, the code looked up past payments by label to verify the previous recurrence wa…

Removal of local payment-state validation for recurring invoice requestsParameter rename from recurrence_label to label in internal RPC callsTest expectations changed from local 'previous invoice has not been paid' errors to remote failure messages
4348d8acby Rusty Russell+5−1224 files
No security note in commit
Low 35 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: handle weird labels in recurrence_label parameter.

This commit fixes how the fetchinvoice plugin handles user-supplied labels that contain special characters such as backslashes, quotes, tabs, and newlines. Previously these labels were passed as raw strings, which could cause JSON encoding…

JSON injection / improper escaping of user-controlled input passed between RPC componentsPotential mismatch between label parsing and label serialization leading to functional failures or unexpected behaviorFix is narrowly scoped to a single plugin and parameter
d7f87f2dby Rusty Russell+37−102 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Add unit tests for str_to_u64

This commit only adds a new automated test file that checks how a helper function (str_to_u64) converts text strings to unsigned 64-bit integers. It does not change any production code, so it cannot by itself introduce a security vulnerabi…

dddb455dby Lagrang3+203−01 file
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

pytest: add tests for what we want askrene to do.

This commit only adds a new pytest test file. It does not change any production code. The test describes desired future behavior for the askrene routing module's error messages when a payment source or destination lacks enough channel capa…

518620aeby Rusty Russell+67−01 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

AI review queueduse json_escape_unescape_len()by Matt Whitlock · c28f5e70 · Aug 15, 2025 · 4 filesMessage 48 · ThinInformational 20Details
Commit message · Matt Whitlock

use json_escape_unescape_len()

This avoids making an extra copy of the escaped string.

Note that jsonrpc_command_add() no longer accepts usage strings
containing invalid escape sequences. (Previously, it would quietly
accept such a string without unescaping anything.)

Changelog-None

48/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context! Too few words to establish purpose
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

This is a small code cleanup that switches to a helper function which unescapes JSON strings without making an extra copy. The only behavior change is that invalid escape sequences in command usage strings are now rejected instead of silently accepted unchanged. There is no obvious security vulnerability being fixed, and no evidence of an exploit or disclosure.

Lower-prioritylightningd: use json_escape_unescape_len for log message strings received from pluginsby Matt Whitlock · 3dd09797 · Aug 15, 2025 · 1 fileMessage 65 · AdequateInformational 22Details
Commit message · Matt Whitlock

lightningd: use json_escape_unescape_len for log message strings received from plugins

[ Reduced to just neatening, as 23997b2e1d882b2e99c50d29d7399080052e6568 did
the unescape handling already -- RR ]

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

This commit is a small cleanup in Core Lightning's plugin handling. It changes how log messages received from plugins are unescaped, switching to a dedicated function that handles lengths directly. The commit message explicitly says this is just 'neatening' and that the actual unescape handling was already done in an earlier commit. There is no direct evidence in the diff or commit message that this fixes a security vulnerability.

Lower-prioritylightningd: add channel_type to openchannel & openchannel2 hooks.by Rusty Russell · 733bdfa6 · Aug 15, 2025 · 9 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

lightningd: add channel_type to openchannel & openchannel2 hooks.

An obvious omission!

Changelog-Added: Plugins: `openchannel` and `openchannel2` hooks now expose the `channel_type` field for the offered channel.
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 adds a missing piece of information—the channel type—to two plugin hooks used when opening Lightning channels. It is a straightforward feature addition that lets plugins see what kind of channel is being offered. There is no indication it fixes a security bug or introduces a vulnerability.

Lower-prioritychore: fix some minor issuesby longhutianjie · f1bfa71e · Aug 15, 2025 · 3 filesMessage 72 · AdequateInformational 15Details
Commit message · longhutianjie

chore: fix some minor issues

Signed-off-by: longhutianjie <keplrnewton@icloud.com>

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit fixes three trivial typos in documentation and a code comment: 'do it it' becomes 'do if it', 'in in' becomes 'in', and 'the the' becomes 'the'. There are no code behavior changes and no security relevance.

Security candidatecommon: set errno=0 before calling strto{l,ul,ull}by Matt Whitlock · ea2feccb · Aug 15, 2025 · 3 filesMessage 78 · AdequateLow 35Details
Commit message · Matt Whitlock

common: set errno=0 before calling strto{l,ul,ull}

The strto{l,ul,ull} functions do not set errno upon a successful return, so a
successful return from a maximally valued input could be misinterpreted as an
overflow error if errno happened already to be set to ERANGE before the call.
To guard against this edge case, always set errno to zero before calling these
functions if checking errno afterward.

Changelog-None

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

This commit fixes a subtle programming bug in how Core Lightning converts text strings to numbers. Functions like strtoull only set an error flag (errno) when a value is too large, but they leave it unchanged on success. If some earlier code had already set that flag to 'overflow,' a later successful conversion of the largest possible number could be wrongly rejected as an overflow. The patch clears the error flag before each conversion so the check afterward is reliable. The practical security impact is limited because the bug only triggers when a prior operation happens to leave that specific error flag set, and the affected conversions are mostly for amounts, route hints, and JSON parsing rather than cryptographic checks.

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-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.

AI review queuedcommon: mvt_tag parsing routine.by Rusty Russell · bafda5ce · Aug 14, 2025 · 13 filesMessage 50 · ThinInformational 18Details
Commit message · Rusty Russell

common: mvt_tag parsing routine.

Rather than open-coding in json_parse.

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

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit is a straightforward internal code cleanup: it moves the logic for converting a text tag into an internal coin-movement tag out of the JSON parser and into a dedicated helper function. There is no visible security fix, behavior change, or vulnerability being addressed.

AI review queuedcommon: rename enum mvt_tag values.by Rusty Russell · 5756b54f · Aug 14, 2025 · 13 filesMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

common: rename enum mvt_tag values.

Prefix MVT_ to them, for clarity.

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

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup: it renames a set of internal bookkeeping labels (called enum mvt_tag values) so they all start with 'MVT_'. For example, CHANNEL_OPEN becomes MVT_CHANNEL_OPEN. The change touches many files but only renames symbols; it does not alter program logic, data formats, network behavior, or security checks.

AI review queuedcommon/coin_mvt: make more parameters const.by Rusty Russell · f4ac8fcc · Aug 14, 2025 · 6 filesMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

common/coin_mvt: make more parameters const.

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

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds the C keyword 'const' to function parameters and test stubs. It does not change any program logic, data flow, or behavior. It is a code-quality/cleanup change with no security relevance.

AI review queuedcoin_mvt: use bitmap instead of tal_arr for tags.by Rusty Russell · 8c315c15 · Aug 14, 2025 · 14 filesMessage 80 · StrongInformational 15Details
Commit message · Rusty Russell

coin_mvt: use bitmap instead of tal_arr for tags.

We're going to store them in the db this way, so I thought I'd see what it looks like if
we lift that interface all the way through.

We use a struct, so that types are checked strictly.

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

80/100 · StrongMessage clarity
✓ 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 15/100

This commit is a straightforward internal refactoring: it replaces a variable-length list of text labels (called a 'tal_arr') with a compact 64-bit bitmap (a 'struct mvt_tags') for tracking coin-movement tags. The change touches many call sites but does not alter what the tags mean, how money moves, or any security boundary. It is not a security fix and introduces no obvious vulnerability.

AI review queuedcommon: put "external" and "wallet" strings, and test functions into common/coin_mvt.hby Rusty Russell · b0231a59 · Aug 14, 2025 · 12 filesMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

common: put "external" and "wallet" strings, and test functions into common/coin_mvt.h

They're scattered and reproduced in many places: unify them.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a straightforward code cleanup: it moves the literal strings 'external' and 'wallet', plus small helper functions that test account names, into a single shared header file. Previously these strings and functions were duplicated across many files. There is no change to program behavior, no bug fix, and no security-related change.

AI review queueddb: hand amount_msat / amount_sat by copy, not pointer.by Rusty Russell · b8b1d45d · Aug 14, 2025 · 5 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell

db: hand amount_msat / amount_sat by copy, not pointer.

This is how we handle amount_msat and amount_sat everywhere these days, and this
wasn't updated.

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

This commit changes several database helper functions so they receive monetary amounts by copy (passing the value directly) instead of by pointer (passing a memory address). The commit message says this is just to match how the rest of the codebase now handles these types. There is no direct evidence in the diff or message that this fixes a security bug; it appears to be a code-consistency cleanup. Passing by copy can sometimes prevent certain classes of mistakes (for example, accidentally passing a NULL pointer or a pointer to uninitialized memory), but the diff does not show any such bug being fixed.

AI review queuedlightningd: use channel_coin_mvt / chain_coin_mvt directly for notifications.by Rusty Russell · 45678aaf · Aug 14, 2025 · 7 filesMessage 73 · AdequateInformational 12Details
Commit message · Rusty Russell

lightningd: use channel_coin_mvt / chain_coin_mvt directly for notifications.

Rather than converting to a generic coin_mvt struct, use these directly in
the notification, which is more explicit.

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

This is a routine internal code cleanup in Core Lightning. It changes how the node reports coin movements (on-chain and channel transactions) to plugins, switching from a single generic data structure to two more specific ones. There is no indication this fixes a security bug or introduces a vulnerability.

AI review queuedcommon/coin_mvt: add struct mvt_account_id to separate channels from others.by Rusty Russell · 6fc0b1f3 · Aug 14, 2025 · 13 filesMessage 73 · AdequateInformational 17Details
Commit message · Rusty Russell

common/coin_mvt: add struct mvt_account_id to separate channels from others.

This means we can keep a pointer to the channel directly, *or* a string.
This avoids gratuitous formatting (on creation) and lookups (later).

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

This commit is a code-quality refactor in Core Lightning's internal accounting system. It replaces formatted channel ID strings with direct pointers to channel objects, and introduces a small helper structure that can hold either a channel pointer or an alternative account name. The change removes unnecessary string formatting and lookups, and updates the wire serialization format for on-chain coin movement records. There is no indication of a security vulnerability being fixed or introduced.

Lower-prioritybkpr: remove unused "account_exits" parameter to account_get_balance().by Rusty Russell · 0c9dc4cf · Aug 14, 2025 · 4 filesMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

bkpr: remove unused "account_exits" parameter to account_get_balance().

Only used in 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 15/100

This is a small code cleanup in the bookkeeper plugin. It removes an unused 'account_exists' flag from a helper function that looks up account balances. The flag was only used in tests, so the change simplifies the code without altering real behavior.

Lower-prioritydb: better diagnostics when a query fails.by Rusty Russell · ed77edf4 · Aug 14, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

db: better diagnostics when a query fails.

Print the error!

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 changes an error message when a database query fails. Previously the program reported where the query came from and the SQL text; now it reports the actual database error message. There is no security fix here—only improved diagnostic logging for developers and operators.

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-prioritybkpr: remove different currency support.by Rusty Russell · b1fa2ef3 · Aug 14, 2025 · 15 filesMessage 68 · AdequateInformational 19Details
Commit message · Rusty Russell

bkpr: remove different currency support.

We still output the fields, they're just always the currency of the node.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Changed: Plugins: `bookkeeper` now explicitly assumes every transaction is in the same currency as the node (true unless you added manually)

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

This commit removes the bookkeeper plugin's ability to track multiple currencies. From now on, every transaction is reported in the node's own currency (for example, Bitcoin on mainnet). The change simplifies the code and database schema but does not fix a security bug. It could affect accounting accuracy for anyone who had manually configured different currencies.

Lower-prioritycommon/coin_mvt: make more fields const, reorder fields.by Rusty Russell · 1d3237f8 · Aug 14, 2025 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

common/coin_mvt: make more fields const, reorder fields.

Make the common fields the first ones, and make part_and_group and
payment_hash const pointers.

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 routine code cleanup in Core Lightning's internal accounting structures. It reorders struct fields for consistency and marks two pointer fields as 'const' (read-only after creation). There is no functional change visible in the diff, and no security issue is indicated.

Lower-prioritycommon/coin_mvt: use enum rather than true/false for credit/debit.by Rusty Russell · e372c2ec · Aug 14, 2025 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

common/coin_mvt: use enum rather than true/false for credit/debit.

More readable for me. Also, change order so we definitely break
compilation on all callers (putting enum before amount).

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 code cleanup: it replaces a true/false flag with a named enum (COIN_CREDIT/COIN_DEBIT) to make the code easier to read. It does not change any behavior, fix a bug, or address a security issue. The author deliberately reordered function arguments so any missed callers would fail to compile, ensuring the change is complete.

Lower-prioritylibplugin: make jsonrpc_set_datastore_binary() take an explicit length.by Rusty Russell · a25c1d45 · Aug 14, 2025 · 3 filesMessage 65 · AdequateInformational 16Details
Commit message · Rusty Russell

libplugin: make jsonrpc_set_datastore_binary() take an explicit length.

This means it doesn't have to be a tal ptr.

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

This is a small internal code cleanup in Core Lightning's plugin helper library. It changes a helper function so callers pass the data length explicitly, rather than the helper measuring it itself. The commit message frames this as a convenience change, not a security fix. There is no direct evidence in the commit of an exploitable vulnerability, but the change removes a class of potential bugs where a non-tal pointer could be mis-measured.

Lower-prioritycommon: coin movements for payments need group id as well as part id.by Rusty Russell · bc5e54d1 · Aug 14, 2025 · 5 filesMessage 73 · AdequateInformational 24Details
Commit message · Rusty Russell

common: coin movements for payments need group id as well as part id.

The part id is *only* unique within a group. The payment_hash / partid / groupid tuple is unique.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Added: Plugins: `coin_movement` notification with `part_id` field now always has `group_id` field.

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

This change fixes accounting data that Core Lightning sends to plugins. For multi-part payments, the existing 'part_id' alone was not unique; the same part number could appear in different payment groups. The commit adds a 'group_id' field so plugins can reliably match each coin movement to the correct payment. It is a correctness/audit fix rather than a direct funds-loss bug, but inaccurate accounting could mislead downstream tools.

Lower-prioritycommon: remove `struct coin_mvt` altogether.by Rusty Russell · e32b5141 · Aug 14, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

common: remove `struct coin_mvt` altogether.

Now we only ever use `struct chain_coin_mvt` or `struct channel_coin_mvt`.

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 removes an unused internal data structure (`struct coin_mvt`) and the helper functions that converted two other structures into it. It is a code cleanup change with no visible effect on users and no security relevance.