EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkActive incident
Repository coverage

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

184security candidates280second-pass queue1894AI analyses
56commits · 30 days
211commits · 60 days
683commits · 180 days
1671commits · 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
489Strong · 80–100
1231Adequate · 60–79
259Thin · 40–59
30Opaque · 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.
cdecker14910384
Níckolas Goline63844277
Rusty Russell96475958172
daywalker90118895165
Lagrang386578170
Vincenzo Palazzo13411182
dovgopoly15015164
Sangbida Chaudhuri14931146066
Dusty Daemon821378066
ShahanaFarooqui931093063
Peter Neuroth1024101071
Christian Decker36436072
Analysis record

Published AI watches

Last scanned 57 minutes ago

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

contrib: add jaonoctus's signing key

This commit simply adds a new person's PGP public-key fingerprint to the list of trusted release signers in two documentation files. It does not change any code, fix any bug, or alter any security behavior of the software itself.

41278b4eby jaonoctus+2−02 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

wallet: fixed timestamps for invented bookkeeper deposits

This is a tiny internal fix to make a bookkeeping migration produce stable event ordering. It changes the timestamp used when creating historical 'deposit' records during a one-time database migration, so the records sort consistently with…

498e5086by daywalker90+2−01 file
No security note in commit
Informational 21 AI analysisMessage 85 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

docs: document missing and fix erroneous JSON-RPC error codes

This commit is a documentation-only cleanup of the JSON-RPC command help files. It corrects which numeric error codes are listed for each command so the published schemas match what the software actually returns. No program logic, validati…

Documentation-only change with no executable code modificationsCorrects RPC schema error-code metadata to match actual handler behaviorNo change to input parsing, authorization, cryptography, or network behavior
d1b6963bby daywalker90+204−1224 files
No security note in commit
Low 46 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

channeld: initialize tx_sigs_allowed on startup

This commit fixes a bug where a setting that controls whether unexpected transaction signatures are allowed was not initialized when the channel daemon starts. If a peer sent such signatures before the channel was fully ready, the program …

use of uninitialized variableundefined behavior (invalid bool load)network-triggered code path
c09c4520by Erick Cestari+1−01 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

ci: fix the coverage nightly's profile handling

This commit fixes the project's internal nightly code-coverage CI workflow. It changes how test coverage files are collected, ensures the same LLVM compiler version is used to generate and merge coverage data, and uploads a Codecov-compati…

5685c9a3by cdecker+12−211 file
No security note in commit
Low 37 AI analysisMessage 78 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

schemas: make required fields match the code

This commit is a large cleanup of Core Lightning's API schemas, generated RPC bindings, and related plugin code. The stated goal is to make the documented 'required' fields match what the C code actually always produces or expects. In prac…

Large schema-only change with no accompanying security advisory or CVEOne semantic change to plugin hook response: invoice_payment hook can now reject with only failure_message and no resultMany fields change from optional to required in public RPC/protobuf interfaces
ddbd2963by daywalker90+1786−173950 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

doc: document error 313 on every command which can return it

This commit only updates documentation. It adds error code 313 to the documented error lists for several Core Lightning commands (fundpsbt, utxopsbt, txprepare, multiwithdraw, and upgradewallet). The error code already existed in the code …

a34b9758by Peter Neuroth+30−86 files
No security note in commit
Low 25 AI analysisMessage 88 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tools/build-release.sh: name the checksum file when verifying the signature

This commit fixes a release-script check that verifies the cryptographic signature on a file of checksums. Previously, the script only told GPG to verify the signature file itself. If someone replaced that signature file with an inline-sig…

Incorrect cryptographic verification logic in release toolingPotential false-positive signature verification with inline-signed .asc substitutionRelease-integrity hardening
8e495707by Peter Neuroth+5−21 file
No security note in commit
Low 42 AI analysisMessage 95 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

doc: pass the manifest explicitly to gpg --verify

This commit updates Core Lightning's release documentation to tell users and release managers to run gpg --verify with both the signature file and the manifest file named explicitly. The old one-argument form can silently succeed even if t…

Verification bypass risk in release artifact validationgpg --verify single-argument form can exit 0 without reading the intended manifestDocumentation-only hardening of release process
2dee8699by Peter Neuroth+9−62 files
Vendor flagged security relevance
Low 25 AI analysisMessage 58 · Thin
EP Elements ProjectCore Lightning BitcoinLightning Network

Cargo.lock: update dependencies

This commit is a routine update to the Rust dependency lock file (Cargo.lock), bumping many third-party libraries to newer patch or minor versions. The commit message gives no security reason for the update, and no verified references link…

Routine dependency refresh with no stated security rationaleUpdates to security-sensitive transitive crates (rustls, hyper, h2, tokio, webpki-roots) but no evidence these versions fix known vulnerabilitiesNo source-code changes or patch-specific fixes visible in the diff
c1551c55by daywalker90+298−2761 file
No security note in commit
High 80 AI analysisMessage 85 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

common: bound JSON nesting depth when parsing

This commit fixes a stack-overflow risk in Core Lightning's JSON parser. Before the fix, an attacker could send a valid JSON-RPC message containing thousands of nested brackets or braces. The parser's own helper functions used recursion fo…

Stack-overflow via deeply nested JSONRecursive JSON traversal without depth boundDenial-of-service vector in JSON-RPC input parsing
83f92e4bby Níckolas Goline+90−22 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 28 · Opaque
EP Elements ProjectCore Lightning BitcoinLightning Network

common: minor typo fixes

This commit only fixes typos and comment style. It changes two C-style comments from // to /* */ and corrects a grammar error in a documentation comment ('element' to 'elements'). There are no code behavior changes, no bug fixes, and no se…

273d7f02by w3lld1+3−32 files
No security note in commit
Informational 20 AI analysisMessage 90 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

pyln-testing: truncate long testnames

This change fixes a test-infrastructure bug in Core Lightning's Python testing helpers. When running tests against a PostgreSQL database, very long test names could be silently shortened by PostgreSQL, causing different test runs or nodes …

No security-relevant signal: change is in test framework code onlyFixes a test reliability issue, not a runtime vulnerabilityNo input sanitization, authentication, cryptography, or network changes
c4fe4cbaby Peter Neuroth+59−12 files
No security note in commit
Moderate 60 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

wallet: exclude immature coinbase outputs from fee rescue selection

This fix prevents Core Lightning from trying to use freshly created bitcoins (immature coinbase rewards) as emergency funds for fee-bump transactions. Such a transaction would be invalid under Bitcoin's rules and would be rejected by the n…

Consensus-invalid transaction generation preventedFee rescue / CPFP failure mode mitigatedCoinbase maturity check added to coin selection
34883ff7by cdecker+5−12 files
Vendor flagged security relevance
Moderate 59 AI analysisMessage 91 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: fix crash loading node bias with description

This commit fixes a bug in Core Lightning's askrene plugin that could prevent a node from restarting. When a saved routing layer contained a node bias with a description, the plugin accidentally freed the description's memory while using i…

Use-after-free / double-take of a tal-allocated string during plugin startupDenial-of-service-like symptom: lightningd aborts before replying to init, node cannot restartFixes publicly reported issue #9433 by endothermicdev
4681177dby Vincenzo Palazzo+2−32 files
No security note in commit
Informational 12 AI analysisMessage 91 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tests: restart the node which owns the layer in node bias test

This commit only fixes a test case so it actually exercises the intended code path. It does not change any production code, so it cannot introduce or fix a real-world security vulnerability by itself. The test change is a reproducer for a …

0f3f67a0by Vincenzo Palazzo+3−21 file
No security note in commit
High 78 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

dualopend: bound the feerates a peer opens at

This commit fixes a bug in Core Lightning's experimental dual-funded channel feature. When another node tried to open a channel, Core Lightning was not checking whether the proposed transaction fees were reasonable. A peer could request a …

Missing input validation on wire-parsed feerate fieldsPeer could induce signing and storage of feerate == 0RBF remote path allowed unbounded upward feerate walks
ba08356fby cdecker+140−04 files
Vendor flagged security relevance
High 72 AI analysisMessage 100 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tests: regression coverage for out-of-range feerates

This commit adds regression tests for three related bugs where wildly wrong Bitcoin transaction feerates could enter Core Lightning. In the worst case, a malicious or broken fee source could make the node think a feerate was zero (due to a…

Integer overflow in feerate conversion (u32 wrap from 0xFFFFFFFF perkb to 0 perkw)Absurd feerate from external fee source bypassing sanity ceilingDatabase-stored out-of-range feerate causing startup abort/crash loop
65bdbc47by cdecker+137−02 files
No security note in commit
Moderate 64 AI analysisMessage 86 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: don't assert on funding feerates read from the db

This update fixes a crash bug in Core Lightning. When the software tried to list details of a channel opening in progress, it could crash if a stored fee rate was extremely large or zero. The crash happened because the code used an interna…

Integer overflow in RBF escalation (u32 * 25 / 24) leading to assertion failureAssertion failure in read-only introspection RPC (listpeerchannels) causing crash-loop at startupDatabase value treated as invariant despite originating from external fee estimator
d67c4936by cdecker+72−227 files
Vendor flagged security relevance
Moderate 53 AI analysisMessage 86 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

wallet: clamp absurd inflight funding feerates on upgrade

This commit fixes a bug where Core Lightning nodes could get stuck in a crash loop. If a node had previously stored an extremely high or zero fee rate for an in-progress channel funding operation (a 'splice' or dual-funded channel RBF), a …

Integer overflow in fee-rate calculation (u32 overflow when multiplying by 25/24)Assertion failure leading to daemon crash loop at startupDatabase migration clamps out-of-range stored funding feerates
f057c692by cdecker+34−01 file
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Lower-prioritydoc: update release-checklist to make CHANGELOG.md more coherent.by Rusty Russell · b13f5db0 · Apr 10, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

doc: update release-checklist to make CHANGELOG.md more coherent.

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

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

This commit only updates the project's internal release checklist documentation. It reorders the steps for preparing a release changelog so that maintainers first import changes from point releases, then merge new entries, then remove duplicates, and then format the result. There is no change to any software code, configuration, or security-sensitive process.

Lower-priorityCHANGELOG.md: import v25.12.1 CHANGELOG.md, remove duplicate entries.by Rusty Russell · 1e19ebfc · Apr 10, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

CHANGELOG.md: import v25.12.1 CHANGELOG.md, remove duplicate entries.

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

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

This commit only edits the project's CHANGELOG.md file. It imports the changelog for an already-released version (v25.12.1) and removes duplicate entries that were previously listed under the unreleased section. No program code, configuration, or build files were changed, so this cannot introduce or fix any security vulnerability by itself.

AI review queuedsql: add test that triggers bug on channelmovesby Lagrang3 · 96b4da92 · Apr 9, 2026 · 1 fileMessage 78 · AdequateLow 40Details
Commit message · Lagrang3

sql: add test that triggers bug on channelmoves

Updating channelmoves table makes sql to crash if there are more
elements in listchannelmoves than limit_per_list.

Changelog-None

Signed-off-by: Lagrang3 <lagrang3@protonmail.com>

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

This commit only adds a new test case that demonstrates a bug. The test is marked as expected to fail (xfail). It shows that running a SQL query on the 'channelmoves' table can crash a node if the number of channel movements exceeds an internal list limit. The actual crash-causing code is not fixed here, so this commit by itself does not resolve the issue.

Lower-prioritysql: make LIMIT_PER_LIST into a dev option ...by Lagrang3 · bb0553c8 · Apr 9, 2026 · 1 fileMessage 70 · AdequateLow 25Details
Commit message · Lagrang3

sql: make LIMIT_PER_LIST into a dev option ...

for regression tests.

Changelog-None

Signed-off-by: Lagrang3 <lagrang3@protonmail.com>

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Low 25/100

This change turns a hard-coded internal batch size (10,000 items) for the SQL plugin into a developer-only command-line option. It is intended to let regression tests use a smaller value. The option is marked 'dev-' and is not meant for production use. There is no direct security bug in the patch, but making the limit configurable could, in theory, allow a tester or misconfigured node to request very large batches and change resource usage or timing behavior.

AI review queuedsql: fix crash for large channelmoves tables.by Rusty Russell · 2ba55cc6 · Apr 9, 2026 · 2 filesMessage 68 · AdequateModerate 50Details
Commit message · Rusty Russell

sql: fix crash for large channelmoves tables.

I've reworked this: in general we should clear the refresh bit before
calling the jsonrpc to do the update. This allows the wait callback to
set the bit again if there's more to do, so we won't lose entries.

Now it's clear that we can remove the overzealous assert.

sql: plugins/sql.c:1749: refresh_by_created_index: Assertion `td->refresh_needs != REFRESH_UNNECESSARY' failed.
sql: FATAL SIGNAL 6 (version v26.04rc2)
0x5618e147892e send_backtrace
common/daemon.c:38
0x5618e14789bb crashdump
common/daemon.c:83
0x7f54d10ea04f ???
./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x7f54d1138eec __pthread_kill_implementation
./nptl/pthread_kill.c:44
0x7f54d10e9fb1 __GI_raise
../sysdeps/posix/raise.c:26
0x7f54d10d4471 __GI_abort
./stdlib/abort.c:79
0x7f54d10d4394 __assert_fail_base
./assert/assert.c:94
0x7f54d10e2ec1 __GI___assert_fail
./assert/assert.c:103
0x5618e1472725 refresh_by_created_index
plugins/sql.c:1749
0x5618e14736af one_refresh_done
plugins/sql.c:579
0x5618e1473932 limited_list_done
plugins/sql.c:1738
0x5618e1477418 handle_rpc_reply
plugins/libplugin.c:1093
0x5618e1477548 rpc_conn_read_response
plugins/libplugin.c:1398
0x5618e147ec71 next_plan
ccan/ccan/io/io.c:60
0x5618e147ef90 do_plan
ccan/ccan/io/io.c:422
0x5618e147f049 io_ready
ccan/ccan/io/io.c:439
0x5618e147ffae io_loop
ccan/ccan/io/poll.c:470
0x5618e14786af plugin_main
plugins/libplugin.c:2461
0x5618e1474b12 main
plugins/sql.c:2219
0x7f54d10d5249 __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
0x7f54d10d5304 __libc_start_main_impl
../csu/libc-start.c:360
0x5618e1470710 ???
_start+0x20:0
0xffffffffffffffff ???
???:0

Diagnosed-by: Lagrang3 <lagrang3@protonmail.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-None: Introduced this release.

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 · Moderate 50/100

This commit fixes a crash in Core Lightning's SQL plugin. The bug was a too-strict internal check (an assertion) that could fail when the plugin had a large number of channel moves to refresh. The fix changes how the plugin tracks which refresh work is still needed, so it no longer trips over itself when new work arrives while a refresh is already running. It is a stability fix for a plugin, not a remote exploit.

Lower-priorityCI: Turn on diff outputs on failed doc genby Dusty Daemon · 48952927 · Apr 9, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Dusty Daemon

CI: Turn on diff outputs on failed doc gen

When the doc generator fails, make the CI output the diff of how it failed.

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 is a tiny change to the project's build/CI Makefile. It adds the `--text` flag to a `git diff` command that runs during automated checks. This only affects how test failures are displayed when generated documentation files don't match expectations. There is no security relevance.

Lower-prioritysplice: Enable the splice in default settingsby Dusty Daemon · 9b51d661 · Apr 9, 2026 · 2 filesMessage 60 · AdequateInformational 18Details
Commit message · Dusty Daemon

splice: Enable the splice in default settings

Turn splicing on by default for channel feature sets!

Changelog-Deprecated Splicing is now enabled by default!

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

This commit turns on a new Lightning protocol feature called 'splicing' by default. Splicing lets users add or remove funds from an existing Lightning channel without closing and reopening it. The change itself is a simple configuration default update and does not fix any bug or vulnerability. It only affects which features a node advertises to peers and which tests expect to see in that advertisement list.

Security candidatesplice: Remove experiemental splicing featureby daywalker90 · 3a17da61 · Apr 9, 2026 · 29 filesMessage 45 · ThinInformational 15Details
Commit message · daywalker90

splice: Remove experiemental splicing feature

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 15/100

This commit removes the experimental flag that previously had to be enabled for splicing, making splicing a default feature. It is a feature-promotion and cleanup change, not a security fix. There are no code changes that patch a vulnerability, no mention of a CVE, and no security advisory.

Lower-prioritysplice script: Fix rare memleak in pluginby Dusty Daemon · 72092258 · Apr 9, 2026 · 1 fileMessage 60 · AdequateInformational 17Details
Commit message · Dusty Daemon

splice script: Fix rare memleak in plugin

Fix leaking of the `abort_pkg` if our peer does not support splicing.

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

This is a one-line memory leak fix in a rarely-used error path of the splicing plugin. When a splice attempt fails because the peer does not support splicing, a small helper object was allocated against the plugin's long-lived context instead of the short-lived command context. That means the memory is not freed until the plugin restarts, rather than when the command finishes. It is a resource-cleanup bug, not a code-execution or funds-loss vulnerability.

AI review queuedv2604.rc2by Sangbida Chaudhuri · 39c243ce · Apr 2, 2026 · 10 filesMessage 0 · OpaqueInformational 15Details
Commit message · Sangbida Chaudhuri

v2604.rc2

Changelog-None

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a routine version bump from v26.04rc1 to v26.04rc2 for Core Lightning. It only updates version strings in packaging files and refreshes the changelog. No code behavior changes are included in the diff itself, so this single commit does not introduce or fix any security issue.

Lower-prioritydoc: provide realistic example for bkpr-report.by Rusty Russell · f067b738 · Apr 2, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

doc: provide realistic example for bkpr-report.

This should make the accountants happy!

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 only adds example request/response documentation for the bkpr-report RPC command. It changes two JSON schema files to show accountants how the report output looks, with no code logic changes.

Lower-prioritybkpr-report: make ? work as expected on amount fields.by Rusty Russell · bc931451 · Apr 2, 2026 · 4 filesMessage 75 · AdequateInformational 17Details
Commit message · Rusty Russell

bkpr-report: make ? work as expected on amount fields.

They should test if it's zero, not if it's present.

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

This commit fixes a small behavior bug in the bookkeeper plugin's report formatting. Previously, the '?' fallback feature in report templates checked whether an amount field was present, not whether it was zero. Now, for amount fields like credit, debit, fees, and creditdebit, '?' treats a zero value as if the field were missing, so fallback text is used as users would expect. This is a correctness/usability fix, not a security vulnerability.

Lower-prioritybkpr-report: enhance tag syntax from {tag:replacement} to {tag?if-set:if-not-set}by Rusty Russell · 90b86107 · Apr 2, 2026 · 6 filesMessage 73 · AdequateInformational 21Details
Commit message · Rusty Russell

bkpr-report: enhance tag syntax from {tag:replacement} to {tag?if-set:if-not-set}

This is more powerful, but we need to do this before release. It lets
us do things like: {credit?+{credit}:0} to only put a `+` in front of
no-zero credit, and {txid?TXID {txid}:Outpoint {outpoint}} to print
either `TXID xxx` or `Outpoint xxx`.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

This commit is a routine feature enhancement for the bookkeeper plugin's report formatting syntax. It expands template tag syntax so users can specify both 'if present' and 'if absent' text around a tag. There is no indication of a security bug being fixed; it is a pre-release user-facing improvement with added tests and documentation updates.

AI review queuedmsggen: generate native notification bindings from schemasby Peter Neuroth · 8b6374e1 · Apr 2, 2026 · 22 filesMessage 85 · StrongInformational 19Details
Commit message · Peter Neuroth

msggen: generate native notification bindings from schemas

Expand the native notification list consumed by msggen and regenerate the Rust and gRPC outputs for the documented notification schemas.

This wires the new schema-backed native notifications through cln-rpc, cln-grpc, and the bundled msggen schema metadata. Keep the temporary xpay-prefixed plugin notifications out of generation for now.

coin_movement.extra_tags remains a repeated string in the generated gRPC surface for now because msggen does not currently emit enums nested under repeated array items correctly.

Changelog-Changed: cln-rpc and cln-grpc now expose notification bindings for balance_snapshot, coin_movement, deprecated_oneshot, disconnect, forward_event, invoice_creation, invoice_payment, log, onionmessage_forward_fail, openchannel_peer_sigs, plugin_started, plugin_stopped, sendpay_failure, sendpay_success, shutdown, and warning.

msggen: generate xpay notification bindings

Treat xpay as a built-in plugin for notification generation and include its documented notification schemas in the msggen output.

This extends the generated cln-rpc and cln-grpc notification surfaces with the flat xpay schema files, while exposing the actual notification names `pay_part_start` and `pay_part_end` in generated APIs.

Changelog-Changed: cln-rpc and cln-grpc now expose xpay notification bindings for `pay_part_start` and `pay_part_end`.

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
second-pass: unusually broad change
AI analysis · Informational 19/100

This commit is a large, routine code-generation update for Core Lightning's Rust and gRPC client libraries. It adds native bindings for many existing node notifications (such as payment events, log messages, and coin movements) so that external applications can subscribe to them through the gRPC and Rust RPC interfaces. The change is mostly mechanical: it exposes notifications that already existed internally, but does not by itself add new node functionality or change security-critical logic. There is no indication in the commit that this fixes a security bug or introduces a vulnerability.

Lower-prioritycln-grpc: add round-trip tests for notification bindingsby Peter Neuroth · 9336e360 · Apr 2, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Peter Neuroth

cln-grpc: add round-trip tests for notification bindings

cln-grpc: clean up notification tests

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

This commit only adds new automated tests for notification message bindings in the cln-grpc Rust component. It does not change any production code, network behavior, or security logic. There is no security issue here.

Lower-prioritydoc: add notification schemas for native topicsby Peter Neuroth · 95b13b9c · Apr 2, 2026 · 18 filesMessage 68 · AdequateInformational 15Details
Commit message · Peter Neuroth

doc: add notification schemas for native topics

Add schema definitions for the documented native notifications which were
still only described in prose.

This makes the notification payloads available in doc/schemas so msggen can
consume them in later commits, while keeping this commit schema-only.

The balance_snapshot schema follows the current implementation shape:
the notification wrapper contains a single balance_snapshot object whose
accounts field is an array of account snapshots.

doc: add flat xpay notification schemas

Add schema files for the documented xpay notifications using the temporary
flat naming convention.

These topics are plugin-emitted rather than native lightningd notifications,
so keep them separate from msggen generation for now while still recording
their subscriber-visible payload shape in doc/schemas.

68/100 · AdequateMessage clarity
✓ 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 only adds new JSON schema documentation files describing notification messages that Core Lightning already sends. It does not change any executable code, network behavior, or security logic. There is no security fix or vulnerability introduced here.

Lower-prioritydoc: update pay_part_start and pay_part_endby Peter Neuroth · 48271d53 · Apr 2, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Peter Neuroth

doc: update pay_part_start and pay_part_end

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

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates developer documentation. It changes example JSON snippets for two plugin event notifications so that the fields appear directly under 'params' instead of being nested inside a 'payload' object. There is no code change and no security relevance.

Security candidatepytest: fix flake in test_easy_splice_out_into_channelby Rusty Russell · 3e878280 · Apr 2, 2026 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

pytest: fix flake in test_easy_splice_out_into_channel

```
2026-04-01T07:56:01.0560642Z > assert 'inflight' not in p1
2026-04-01T07:56:01.0581633Z E AssertionError: assert 'inflight' not in {'peer_id': '033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a', 'peer_connected': True, 'reestablished': True, 'channel_type': {'bits': [12, 22], 'names': ['static_remotekey/even', 'anchors/even']}, 'updates': {'local': {'htlc_minimum_msat': 0, 'htlc_maximum_msat': 990000000, 'cltv_expiry_delta': 6, 'fee_base_msat': 1, 'fee_proportional_millionths': 10}, 'remote': {'htlc_minimum_msat': 0, 'htlc_maximum_msat': 990000000, 'cltv_expiry_delta': 6, 'fee_base_msat': 1, 'fee_proportional_millionths': 10}}, 'state': 'CHANNELD_AWAITING_SPLICE', 'scratch_txid': 'bf969125a0929605ba1e007912173fbf55cc67e19963e6d87a66066b7d764d9d', 'last_tx_fee_msat': 4545000, 'lost_state': False, 'feerate': {'perkw': 3750, 'perkb': 15000}, 'owner': 'channeld', 'short_channel_id': '103x2x0', 'direction': 1, 'channel_id': '68c2b5982e67b7dbd42d310e2dd481831c5add0d6a541fec6e26d000fd0ea0f4', 'funding_txid': 'f4a00efd00d0266eec1f546a0ddd5a1c8381d42d0e312dd4dbb7672e98b5c268', 'funding_outnum': 0, 'initial_feerate': '939perkw', 'last_feerate': '939perkw', 'next_feerate': '978perkw', 'inflight': [{'funding_txid': '88f913adf41749a106c97cea7a6f6e448efa73fc6bc9325b78802188d8b0b67d', 'funding_outnum': 1, 'feerate': '939perkw', 'total_funding_msat': 1100000000, 'our_funding_msat': 1000000000, 'splice_amount': 0, 'scratch_txid': '1076f7048d0c1debb7bf2e1d448b3f1345a6973e24dc6a2fadade67ef75133aa'}], 'close_to_addr': 'bcrt1p9r2qj40kfad955p2arkd70lpyh0epugjljrm2djh6483kqffg04q9fufhw', 'close_to': '512028d40955f64f5a5a502ae8ecdf3fe125df90f112fc87b53657d54f1b012943ea', 'private': False, 'opener': 'local', 'alias': {'local': '7654047x8069664x16198', 'remote': '14528636x6434403x24187'}, 'features': ['option_static_remotekey', 'option_anchors'], 'funding': {'local_funds_msat': 1000000000, 'remote_funds_msat': 0, 'pushed_msat': 0, 'psbt': 'cHNidP8BAgQCAAAAAQMEZgAAAAEEAQEBBQECAQYBAwH7BAIAAAAAAQBxAgAAAAE/IGufqbpSEgvYbw685nDEyMxGKL9FlQilR593oz4l8wAAAAAA/f///wLzbOcpAQAAABYAFLikxoEHURUNIRqJZO+hZBpDIRdbgIQeAAAAAAAWABTiR1/vOKdPfmxe7PFjWeVXM/PEamUAAAABAR+AhB4AAAAAABYAFOJHX+84p09+bF7s8WNZ5Vcz88RqAQhrAkcwRAIgffBOLzpOGluuXVQL3+Nh57/v1KiZMmTQ8azbTp1uvq8CIEEJMg/FcFFBRhJEEj7+qSAWJ1zYMoTRkLXnz2kYn1t+ASECAuzPYkKg0uX0lzjSQPmcEN8Qg4GvjKKB1Kggpt1l4X8BDiBsxRVtCsARg7eO1wBCa1Q9QSO1uVsgKM0CdYaTNqNDaQEPBAEAAAABEAT9////DPwJbGlnaHRuaW5nAgIAAQz8CWxpZ2h0bmluZwEItnNGZ/Bz25IAAQMIQEIPAAAAAAABBCIAIAudZByKBPnrEYNlicb4obXo+9D41IAxB52EsOTPC6lrAAEDCAEvDwAAAAAAAQQiUSCfpNJOnaQ8W/j8DZc21ORFI4rNcU0GgRbfUWXQeR26HSEHoyOuZ721tL0aN6eJJY4wZEeSiAU21KuPQRiZUZCCbScJAIgBXIECAAAADPwJbGlnaHRuaW5nAQixrSLGhyK6fAA=', 'withheld': False}, 'to_us_msat': 1000000000, 'min_to_us_msat': 1000000000, 'max_to_us_msat': 1000000000, 'total_msat': 1000000000, 'fee_base_msat': 1, 'fee_proportional_millionths': 10, 'dust_limit_msat': 546000, 'their_max_htlc_value_in_flight_msat': 18446744073709551615, 'our_max_htlc_value_in_flight_msat': 18446744073709551615, 'their_reserve_msat': 10000000, 'our_reserve_msat': 10000000, 'spendable_msat': 978718000, 'receivable_msat': 0, 'minimum_htlc_in_msat': 0, 'minimum_htlc_out_msat': 0, 'maximum_htlc_out_msat': 990000000, 'their_to_self_delay': 5, 'our_to_self_delay': 5, 'max_accepted_htlcs': 483, 'state_changes': [{'timestamp': '2026-04-01T07:52:32.735Z', 'old_state': 'CHANNELD_AWAITING_LOCKIN', 'new_state': 'CHANNELD_NORMAL', 'cause': 'user', 'message': 'Lockin complete'}, {'timestamp': '2026-04-01T07:52:51.053Z', 'old_state': 'CHANNELD_NORMAL', 'new_state': 'CHANNELD_AWAITING_SPLICE', 'cause': 'remote', 'message': 'Splice signatures sent'}], 'status': ['CHANNELD_NORMAL:Channel ready for use.'], 'in_payments_offered': 0, 'in_offered_msat': 0, 'in_payments_fulfilled': 0, 'in_fulfilled_msat': 0, 'out_payments_offered': 0, 'out_offered_msat': 0, 'out_payments_fulfilled': 0, 'out_fulfilled_msat': 0, 'htlcs': []}
2026-04-01T07:56:01.0603053Z
2026-04-01T07:56:01.0607410Z tests/test_splice.py:713: AssertionError
```

We need to wait for this, as l1 and l3 may not have seen block yet.

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

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundaryaccess control
AI analysis · Informational 15/100

This commit fixes a flaky test in Core Lightning's test suite. The test sometimes failed because it checked immediately whether an 'inflight' splice entry had disappeared from a channel, but the nodes l1 and l3 may not have processed the latest block yet. The fix simply waits for that condition instead of asserting it right away. There is no security issue in the production code.

Lower-priorityconnectd: remove DNS seeds entirely.by Rusty Russell · 03f85c7f · Apr 2, 2026 · 1 fileMessage 76 · AdequateLow 32Details
Commit message · Rusty Russell

connectd: remove DNS seeds entirely.

For 25.05 (0a94f3b5706cd06e69ca120f1b77da8562cd2453) we removed DNS lookups,
but we left them for the corner case where a proxy is used. darosior points
out that his is no longer functional, which brought my attention to this
vestigial corner case.

Changelog-None: we said we'd removed them earlier!
Reported-by: darosior
Closes: https://github.com/ElementsProject/lightning/pull/8968
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 32/100

This commit removes leftover code that let Core Lightning nodes look up peer addresses through two public DNS seed services when using a proxy. The project had already announced it was removing DNS seeds in an earlier version, but a small corner case was missed. This change finishes that removal. It is a cleanup/privacy-hardening change rather than a fix for an active security bug.

AI review queuedpytest: removed old testby enaples · 2cc1abcf · Apr 2, 2026 · 1 fileMessage 38 · OpaqueInformational 15Details
Commit message · enaples

pytest: removed old test

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit simply deletes an old test from the test suite. It removes a pytest function that checked how the software handles opening a dual-funded channel when Bitcoin fee estimates are unavailable. There is no change to the actual software code that users run, and nothing in the commit message or diff suggests a security fix or vulnerability.

Lower-prioritylightningd: refuse to let a peer open a channel if we have no fee estimates.by Rusty Russell · 49779a99 · Apr 2, 2026 · 6 filesMessage 73 · AdequateLow 45Details
Commit message · Rusty Russell

lightningd: refuse to let a peer open a channel if we have no fee estimates.

This seems a sensible precaution anyway.

Changelog-Changed: lightningd: we don't allow new incoming channels if we cannot estimate fees (rather than assuming minfee).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This change stops Core Lightning from accepting new incoming payment channels when the node cannot estimate current Bitcoin transaction fees. Previously, the node might accept a channel while assuming a very low fallback fee. That could lead to problems later if the real network fees were much higher, because the channel's agreed fee range might be too low to get transactions confirmed promptly. The patch adds a safety check that rejects incoming channel offers with a clear 'feerates unknown' message until fee estimates become available.

Lower-prioritytests: test reproduce #8863 [ Neated and added xfail -- RR ]by enaples · 7f949c61 · Apr 2, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · enaples

tests: test reproduce #8863
[ Neated and added xfail -- RR ]

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 12/100

This commit only adds a new test case to the project's test suite. It does not change any production code. The test is marked as expected to fail (xfail) and is intended to reproduce a previously reported issue (#8863) about opening dual-funded channels when fee estimates are unavailable. There is no security fix or vulnerability being introduced in this diff.

AI review queuedlightningd: don't hand 0 to dualopend as anchor feerate if we cannot estimate fees.by Rusty Russell · 5dec676c · Apr 2, 2026 · 1 fileMessage 81 · StrongLow 44Details
Commit message · Rusty Russell

lightningd: don't hand 0 to dualopend as anchor feerate if we cannot estimate fees.

Fixes: https://github.com/ElementsProject/lightning/issues/8847
Reported-by: https://github.com/mdance
Changelog-EXPERIMENTAL: fixed crash with dual funding if we cannot estimate fees.

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

This patch fixes a crash in Core Lightning's experimental dual-funding feature. When the node couldn't estimate current Bitcoin transaction fees, it was passing a value of 0 to a sub-component (dualopend) as the 'anchor feerate.' That zero value caused the process to crash. The fix detects the zero, substitutes a minimum fallback feerate, and adds a safety check to ensure it is never zero.

Lower-prioritycommon: allow current_feerate under 253 in marginal_feerate().by Rusty Russell · a9a00c41 · Apr 2, 2026 · 1 fileMessage 73 · AdequateInformational 21Details
Commit message · Rusty Russell

common: allow current_feerate under 253 in marginal_feerate().

We don't allow this for now (by spec!), but in case we ever did we
should not try to enforce it here!

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

This small code change removes a hard crash (assertion) that would occur if a future version of the software allowed Bitcoin feerates below 253 satoshis per kiloweight. Instead of crashing, the function now quietly raises such low feerates up to the minimum. The change is framed by the author as a future-proofing measure, not a fix for an active security bug.

Lower-prioritypytest: test that we refuse incoming open requests if we have no feerates.by Rusty Russell · 6c6f6576 · Apr 2, 2026 · 1 fileMessage 75 · AdequateInformational 11Details
Commit message · Rusty Russell

pytest: test that we refuse incoming open requests if we have no feerates.

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

This commit only adds a new automated test to Core Lightning. The test checks that the node refuses incoming channel-opening requests when it cannot estimate Bitcoin transaction fees. It does not change any production code, so by itself it cannot introduce or fix a security issue. It may be a regression test for behavior fixed in an earlier commit.