EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkActive incident
Repository coverage

2008 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
55commits · 30 days
210commits · 60 days
682commits · 180 days
1670commits · 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
488Strong · 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
daywalker90117895165
Lagrang386578170
Vincenzo Palazzo13411182
dovgopoly15015164
Sangbida Chaudhuri14931146066
Dusty Daemon821378066
ShahanaFarooqui931093063
Peter Neuroth1024101071
Christian Decker36436072
Analysis record

Published AI watches

Last scanned 3 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-prioritytools/generate-wire.py: don't set TLV fields to NULL if they're empty.by Rusty Russell · eefc9b9a · Apr 30, 2026 · 1 fileMessage 83 · StrongLow 35Details
Commit message · Rusty Russell

tools/generate-wire.py: don't set TLV fields to NULL if they're empty.

There's a new BOLT 12 test, which checks that the ->currencies array isn't empty.
We were treating it as missing, which is wrong. So allocate empty arrays when
they appear, instead of setting them to NULL.

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

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

This is a one-line code generator fix in Core Lightning's wire protocol tooling. Previously, when a variable-length array field (common in newer Lightning protocol messages like BOLT 12) had zero elements, the generated code set the pointer to NULL. Now it always allocates an empty array. This corrects behavior where an empty-but-present list could be mistaken for a missing list, which could cause protocol compliance failures or logic errors in BOLT 12 features.

Lower-priorityMakefile: check bolt quotes in CI.by Rusty Russell · ac5c8646 · Apr 30, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Rusty Russell

Makefile: check bolt quotes in CI.

I accidentally dropped this!

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 simply adds a missing CI (continuous integration) check back into the project's Makefile. The check verifies that quotes from the BOLT specification are still accurate in the source code. It is a build/process fix with no security relevance to running Lightning nodes.

Lower-priorityxpay: don't use MPP for bolt12 unless the invoice explicitly supports it.by Rusty Russell · e3709649 · Apr 30, 2026 · 3 filesMessage 73 · AdequateLow 36Details
Commit message · Rusty Russell

xpay: don't use MPP for bolt12 unless the invoice explicitly supports it.

We actually changed this by default last release, and nobody noticed!

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

This change removes a deprecated option that let Core Lightning's xpay plugin split BOLT12 invoice payments into multiple parts even when the invoice did not explicitly allow it. Going forward, xpay will respect the invoice's feature flags and avoid multi-part payments unless permitted. The commit notes this behavior actually changed by default in the previous release without anyone noticing, and this patch cleans up the leftover override and deprecation.

Lower-priorityCI: check that wire format is correct.by Rusty Russell · cc9b18b3 · Apr 30, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Rusty Russell

CI: check that wire format is correct.

Regenerate the CSV files from the specs, apply the wire/extracted*.patch files and
make sure they are up-to-date.

This catches people editing the files: if you want to change them, you have to create
a new patch file.

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

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit adds a new automated CI check that ensures wire protocol CSV files and their associated patches stay in sync with the official BOLT specifications. It does not change any runtime code, protocol handling, or user-facing behavior. It is purely a build/validation improvement to catch manual edits that should instead go through patch files.

Lower-prioritycommon: BOLT update which adds taproot fallback.by Rusty Russell · 4705faad · Apr 30, 2026 · 2 filesMessage 60 · AdequateInformational 19Details
Commit message · Rusty Russell

common: BOLT update which adds taproot fallback.

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

This commit updates the version of the Lightning BOLT specification used by Core Lightning and adds a test case for a new BOLT #11 example that includes a Taproot (P2TR) fallback address. It does not change production code behavior; it only adds test coverage for parsing a Taproot fallback in a BOLT11 invoice. There is no direct security vulnerability visible in the diff.

Lower-priorityBOLTs: more textual changes.by Rusty Russell · 671068a5 · Apr 30, 2026 · 7 filesMessage 50 · ThinInformational 15Details
Commit message · Rusty Russell

BOLTs: more textual changes.

Attributable errors and some reordering, but nothing beyond text
changes for us.

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

This commit only updates comments, documentation strings, and the order of wire protocol definitions to match a newer version of the Lightning specification (BOLTs). No actual program logic, checks, or behavior were changed. It is not a security fix.

Lower-prioritycommon: assume OPT_PAYMENT_SECRET.by Rusty Russell · 6c368a11 · Apr 30, 2026 · 2 filesMessage 70 · AdequateLow 26Details
Commit message · Rusty Russell

common: assume OPT_PAYMENT_SECRET.

This means we can assume support, but we *can't* assume it's present, because
of keysend, which doesn't use it.

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

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 26/100

This commit changes how Core Lightning advertises support for two Lightning network features: 'payment_secret' and 'option_channel_type'. Previously these were actively announced as supported; now the code treats them as assumed to be supported by all modern nodes. The commit message notes a caveat: payment secrets still won't be present in 'keysend' payments, which don't use them. This is a protocol-level behavior change, not a fix for an active vulnerability, and the commit itself does not describe any security issue.

Lower-prioritydoc: update post-release instructions.by Rusty Russell · 85837a0e · Apr 30, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

doc: update post-release instructions.

Document how to update to the latest bolts, and how to remove deprecated features.

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
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the project's internal documentation checklist used after making a software release. It adds instructions for updating version numbers, test files, compatibility tools, and how to remove old deprecated features. There is no code change and no security issue.

Security candidatelightning-downgrade: prepare for downgrading to v26.04.by Rusty Russell · cc8c043f · Apr 30, 2026 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Rusty Russell

lightning-downgrade: prepare for downgrading to v26.04.

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

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
update trustsigning or wallet path
AI analysis · Informational 15/100

This commit is routine release bookkeeping. It adds a new version marker (v26.04) to the downgrade tool and a comment in the database migration list so that users who later downgrade from v26.04 to an earlier release have the correct metadata. There is no bug fix, behavior change, or security-sensitive code change.

Lower-prioritypatch fix-features-quote.patchby Rusty Russell · 60e418cc · Apr 30, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Rusty Russell

patch fix-features-quote.patch

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

This commit is a trivial documentation-only fix in a source code comment. It adds a missing comment-closing marker so that a block of text describing protocol feature bits is properly formatted. No executable code, logic, or behavior was changed.

Security candidateBOLT quotes: split cross-section quotes; prepare for new `...` semantics.by Rusty Russell · 07d1db00 · Apr 30, 2026 · 11 filesMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

BOLT quotes: split cross-section quotes; prepare for new `...` semantics.

The new check_quotes.py tool will treat `...` at the start of a quote as
"immediately follows previous quote in BOLT text". To prepare for that,
we change existing quotes which used leading `...` to mean "skip some
text": split them into two consecutive BOLT comments (the second starting
with `...` to use the existing wildcard match), and add explicit `*...`
markers between consecutive BOLT test vector sections which cross `# From`
headers.

Also remove leading `...` from nonce quotes in cryptomsg.c/handshake.c
where the actual BOLT text starts a fresh sentence (no prior quote in file).

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

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
fuzzing or regression evidencecryptography-sensitive path
AI analysis · Informational 15/100

This commit is a documentation and code-comment cleanup. It splits BOLT (Bitcoin Lightning specification) quote comments so a new internal tool can check them more accurately, and removes a few stray leading ellipses from comments. There is no change to actual program logic, network behavior, or security-sensitive code.

Lower-priorityUpdate outdated BOLT quotes in HTLC/closing handling.by Rusty Russell · de23003f · Apr 30, 2026 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

Update outdated BOLT quotes in HTLC/closing handling.

Mose of these are from the stricter `...` which won't cross section
boundaries. The listoffers_done doesn't actually need the ellipsis at
all.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 only updates code comments that quote the BOLT (Basis of Lightning Technology) specification. No program logic, behavior, or security checks were changed. It is a documentation/comment cleanup with no security relevance.

Lower-priorityUpdate outdated BOLT #11 quotes in invoice handling.by Rusty Russell · 5528776c · Apr 30, 2026 · 2 filesMessage 91 · StrongInformational 15Details
Commit message · Rusty Russell

Update outdated BOLT #11 quotes in invoice handling.

Textual updates: the tests are actually correct. The invoice.c change
is to cross a section boundary.

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

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

This commit only updates documentation-style comments and test fixture strings to match the current BOLT #11 specification. It changes how a specification quote is split across comment blocks and updates hard-coded Bech32 invoice strings in unit tests to reflect corrected examples. There is no code behavior change and no security relevance.

Lower-prioritydevtools: import check_quotes.py from lnprototest.by Rusty Russell · 63c433c2 · Apr 30, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

devtools: import check_quotes.py from lnprototest.

The Python tool (copied from lnprototest) handles multiple comment styles.

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 brand-new Python developer tool that checks whether comments in the source code accurately quote the BOLT (Bitcoin Lightning) protocol specification documents. It does not change any runtime code, network handling, cryptography, or wallet logic. There is no security issue visible in this commit.

Lower-prioritydevtools/check_quotes.py: add -k option, make `...` more nuanced.by Rusty Russell · 12c3e2ea · Apr 30, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

devtools/check_quotes.py: add -k option, make `...` more nuanced.

Splits BOLT files into per-section chunks so wildcards can't inadvertently
cross section headers, supports `...`-at-start semantics, and adds make-style `-k`

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 updates an internal developer tool (check_quotes.py) that verifies whether comments in the source code accurately quote the BOLT specification. The changes add a keep-going option, improve wildcard matching, and handle single-line comment markers. There is no runtime Lightning node code changed, no user-facing behavior, and no security issue present in the commit itself.

Lower-prioritycheck-source-bolt: replace C check-bolt tool with Python check_quotes.py, check Rust and Python tooby Rusty Russell · 021a5777 · Apr 30, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

check-source-bolt: replace C check-bolt tool with Python check_quotes.py, check Rust and Python too

Extend check-source-bolt to also check Python and Rust source files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 replaces an internal developer tool used to check that source-code comments accurately quote the Lightning BOLT specifications. The old tool only handled C files; the new Python tool also checks Rust and Python files. It is a build/development tooling change with no runtime security impact.

Lower-prioritycommon/sphinx: don't create unused keys, fill in BOLT quotes.by Rusty Russell · c883870e · Apr 30, 2026 · 1 fileMessage 65 · AdequateInformational 13Details
Commit message · Rusty Russell

common/sphinx: don't create unused keys, fill in BOLT quotes.

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

This is a small code cleanup in the onion routing (sphinx) code. It removes an unused internal key container and adds explanatory quotes from the BOLT specification. There is no functional change to how packets are encrypted or verified, and no security bug is fixed.

Security candidatecommon: follow BOLT 4 requirements to make decryption constant time.by Rusty Russell · d5508e1e · Apr 30, 2026 · 1 fileMessage 73 · AdequateModerate 67Details
Commit message · Rusty Russell

common: follow BOLT 4 requirements to make decryption constant time.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: Protocol: use BOLT4's paranoid advice about doing constant-time error decryption.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
constant-time or timing behavior
AI analysis · Moderate 67/100

This change fixes a privacy weakness in how Core Lightning processes returned error messages from the Lightning network routing protocol. Previously, the software stopped decrypting as soon as it found the error's origin, which could let a malicious routing node figure out its position in the payment path by measuring how quickly the sender reacted. The patch now always performs 27 decryption rounds and uses dummy keys after the real origin is found, following the BOLT 4 specification's 'paranoid' advice to make the process take the same amount of time regardless of where the failure occurred.

Lower-prioritylightningd: make sure we don't send channel_updates for unasked for channels.by Rusty Russell · a7abb0a2 · Apr 30, 2026 · 3 filesMessage 73 · AdequateLow 40Details
Commit message · Rusty Russell

lightningd: make sure we don't send channel_updates for unasked for channels.

We can decide to send an HTLC down a preferred channel which leads to the same peer
as the one they asked for, but the spec is clear that you shouldn't send the "wrong"
channel_update in that case.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: Protocol: when we send errors, we won't include a `channel_update` if we chose a different channel than the one they told us to.

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

This commit fixes a protocol compliance bug in Core Lightning. When a payment failed and the node sent back an error message, it could attach a 'channel_update' for a different channel than the one the sender had asked to use. The fix makes sure the attached update matches the requested channel, and omits it if not. This mainly prevents routing confusion and fingerprinting rather than direct theft of funds.

AI review queuedFix C comments which will accidentally trigger Python BOLT quote checker.by Rusty Russell · 69f1e720 · Apr 30, 2026 · 7 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

Fix C comments which will accidentally trigger Python BOLT quote checker.

We're going to get stricter, so "/* BOLT #N to-local output */" or "/* BOLT11 ... */"
will upset it.

Also remove a stray bare blank line in a BOLT comment block.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only rewords C code comments to avoid confusing an internal Python tool that checks documentation quotes. No program behavior, network protocol handling, or security logic is changed. It is a code-comment cleanup with no security relevance.

Lower-prioritycheck_quotes.py: add --coverage tracking; add devtools/bolt-coverage.py.by Rusty Russell · 63aa7650 · Apr 30, 2026 · 2 filesMessage 83 · StrongInformational 15Details
Commit message · Rusty Russell

check_quotes.py: add --coverage tracking; add devtools/bolt-coverage.py.

check_quotes.py gains --coverage=FILE: on each successful match, atomically
appends one line '{bolt} {section_idx} {start} {end}' to FILE using a single
os.write() call so parallel make invocations don't interleave records.

find_quote() and find_quote_immediate() are updated to return match start
positions (needed to record the covered range, not just the end).

bolt-coverage.py reads the coverage file and reports BOLT text not covered
by any source comment. By default it restricts output to Requirements
sections; --all-sections shows every section. --bolt N restricts to
a single BOLT number.

Exit status is 0 if everything in the selected sections is covered, 1 if
anything is uncovered.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

This commit adds two developer-only tools that track whether the project's source-code comments correctly quote the BOLT (Bitcoin Lightning specification) documents. It does not change any network, wallet, or consensus code, and it introduces no security-relevant behavior in the running node.

Lower-prioritygossipd: correclty ignore channel_announcement and channel_update for other chains.by Rusty Russell · cdab8f4e · Apr 30, 2026 · 1 fileMessage 73 · AdequateLow 37Details
Commit message · Rusty Russell

gossipd: correclty ignore channel_announcement and channel_update for other chains.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: Protocol: `gossipd` will now silently ignore gossip for other chains (rather than sending warnings).

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

This change fixes Core Lightning's gossip daemon so that it silently ignores Lightning network gossip messages meant for other blockchains, instead of reacting to them (previously it may have sent warning messages or processed them inappropriately). This aligns the code with the protocol specification and reduces unnecessary or risky behavior when receiving cross-chain gossip.

Lower-priorityMakefile: add check-requirements-coverageby Rusty Russell · 7a77230d · Apr 30, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Rusty Russell

Makefile: add check-requirements-coverage

Prints out a report of uncovered Requirements sections of the BOLTs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 15/100

This commit only adds a new Makefile target that reports which sections of the Bitcoin Lightning specification (BOLTs) are not yet quoted or covered by the codebase. It does not change any running code, network behavior, or security logic, so it has no direct security impact.

Lower-prioritycommon: correctly refuse to accept wireaddr with port == 0.by Rusty Russell · 3d9bdab1 · Apr 30, 2026 · 7 filesMessage 81 · StrongModerate 51Details
Commit message · Rusty Russell

common: correctly refuse to accept wireaddr with port == 0.

BOLT 7 says this, but we don't do it. (Actually, it only says that for certain types,
but I've fixed that in https://github.com/lightning/bolts/pull/1331).

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

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Moderate 51/100

This change tightens how Core Lightning handles network addresses it receives from other nodes. Previously, the code would accept an address even if its port number was 0. The patch now treats port 0 as a signal to ignore the address, matching the Lightning protocol specification (BOLT 7). It also improves error reporting so callers can tell the difference between a malformed address, an unknown address type, and an address that should simply be skipped. The main risk is that a peer could announce a useless port-0 address and, before this fix, the node might have tried to use it in ways that caused confusion or minor failures.

Lower-prioritytests: update test_forward_different_fees_and_cltv to use default min_final_cltv_expiry_delta.by Rusty Russell · 6669d077 · Apr 30, 2026 · 1 fileMessage 91 · StrongInformational 15Details
Commit message · Rusty Russell

tests: update test_forward_different_fees_and_cltv to use default min_final_cltv_expiry_delta.

The BOLT #7 was updated to use the new default 18 as min_final_cltv_expiry_delta, so
update our quote and test, and fix other textual spec changes.

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

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

This commit only updates a single test file to match a recent change in the public Lightning Network specification (BOLT #7). The default minimum final CLTV expiry delta was changed from 9 to 18 blocks, so the test's expected numbers, comments, and quotes from the spec were adjusted accordingly. There is no change to production code, no bug fix, and no security issue.