EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkNormal
Repository coverage

1854 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 queue538AI analyses
147commits · 30 days
226commits · 60 days
804commits · 180 days
1850commits · 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
431Strong · 80–100
1163Adequate · 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.
dovgopoly1502164
Rusty Russell95873237072
Sangbida Chaudhuri1473171066
Dusty Daemon771314066
ShahanaFarooqui931020063
daywalker9089532062
Níckolas Goline40513076
Lagrang376428069
Christian Decker3647072
Vincenzo Palazzo834080
Chandra Pratap56250082
ekzyis222063
Analysis record

Published AI watches

Last scanned 43 minutes ago

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

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

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

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

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

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

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

doc: require Homebrew GNU make and gpatch on macOS

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

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

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

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

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

common: hoist amount+currency parsing into common code.

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

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

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

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

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

common: hoist hash_str helper into its own header.

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

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

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

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

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

downgrade tool: fix invalid memory bug

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

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

xpay: actually tell askrene when a payment succeeded.

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

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

askrene: correctly order constraints.

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

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

askrene: don't leak channel intel entries

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

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

xpay: tests should expect the new error messages

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

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

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

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

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

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

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

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

fetchinvoice: don't bother with checking recurrence timing.

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

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

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

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

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

fetchinvoice: handle weird labels in recurrence_label parameter.

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

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

Add unit tests for str_to_u64

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

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

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

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

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

Explore captured commits

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

AI review queuedcrates: weekly dependency updateby daywalker90 · 199ecd27 · May 4, 2026 · 1 fileMessage 35 · OpaqueInformational 11Details
Commit message · daywalker90

crates: weekly dependency update

Changelog-None

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: broader security terminologysecond-pass: opaque commit message
AI analysis · Informational 11/100

This is a routine weekly update to the Rust dependency lock file (Cargo.lock). It bumps several third-party library versions, including the TLS/encryption library rustls, the HTTP client reqwest, and some Java/Windows helper crates. The commit message gives no security reason for the update, and no verified security advisory was supplied. Dependency updates can in principle fix security bugs, but this diff alone does not show any specific vulnerability being patched or any change to Core Lightning's own code.

Lower-priorityxpay: don't use MPP for bolt12 unless the invoice explicitly supports it.by Rusty Russell · e3709649 · Apr 30, 2026 · 3 filesMessage 73 · AdequateTriage 0Details
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
Lower-priorityVersions: update for next version.by Rusty Russell · aaf36612 · Apr 30, 2026 · 4 filesMessage 60 · AdequateTriage 0Details
Commit message · Rusty Russell

Versions: update for next version.

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
Lower-priorityCI: check that wire format is correct.by Rusty Russell · cc9b18b3 · Apr 30, 2026 · 1 fileMessage 80 · StrongTriage 0Details
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
Security candidatewire: add shim patch for when we regenerate.by Rusty Russell · bcf4d72f · Apr 30, 2026 · 2 filesMessage 68 · AdequateInformational 12Details
Commit message · Rusty Russell

wire: add shim patch for when we regenerate.

The current BOLTVERSION doesn't match our implementation, so when we
`make extract-bolt-csv` we get a change.

Fold the changes into a single splice patch.

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
boot or update path
AI analysis · Informational 12/100

This commit is a housekeeping change to two patch files used when regenerating Lightning protocol wire definitions. It merges two separate patches into one and updates the generated diff context so that running `make extract-bolt-csv` produces no unexpected changes. There is no runtime code change, no bug fix, and no security-relevant behavior described.

Lower-priorityMakefile: check bolt quotes in CI.by Rusty Russell · ac5c8646 · Apr 30, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
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
Lower-prioritycommon: BOLT update which make channel_type assumed.by Rusty Russell · edd22480 · Apr 30, 2026 · 4 filesMessage 65 · AdequateTriage 0Details
Commit message · Rusty Russell

common: BOLT update which make channel_type assumed.

We already required it, so the changes are textual.

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
Lower-prioritycommon: BOLT update which adds taproot fallback.by Rusty Russell · 4705faad · Apr 30, 2026 · 2 filesMessage 60 · AdequateTriage 0Details
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
Lower-priorityBOLTs: more textual changes.by Rusty Russell · 671068a5 · Apr 30, 2026 · 7 filesMessage 50 · ThinTriage 0Details
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
Lower-prioritycommon: assume OPT_PAYMENT_SECRET.by Rusty Russell · 6c368a11 · Apr 30, 2026 · 2 filesMessage 70 · AdequateTriage 0Details
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
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 · StrongTriage 0Details
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
Lower-priorityBOLTs: update for splicing: commit_sig retranmission.by Rusty Russell · 0f2504cf · Apr 30, 2026 · 4 filesMessage 65 · AdequateTriage 0Details
Commit message · Rusty Russell

BOLTs: update for splicing: commit_sig retranmission.

This needs Dusty's examination...

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
Lower-prioritybech32: check for invalid/unnecessary trailing bits.by Rusty Russell · 00ff0a0b · Apr 30, 2026 · 4 filesMessage 91 · StrongModerate 51Details
Commit message · Rusty Russell

bech32: check for invalid/unnecessary trailing bits.

There's a new test for bolt12 in commit 7153bed9705d7493 ("BOLT 12:
add test vector for invalid bech32 padding (#1312)") which requires us
to b stricter in decoding.

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
Why it was queued
fuzzing or regression evidence
AI analysis · Moderate 51/100

This commit tightens how Core Lightning decodes bech32 strings—the format used for things like Bitcoin addresses and BOLT 12 offers. Previously, extra padding bits at the end of a bech32 string were silently thrown away, even if they were non-zero or unnecessarily long. Now the decoder rejects those cases. The change is driven by a new BOLT test vector that requires stricter decoding, and it could prevent subtle malleability or parsing-confusion issues where two different-looking bech32 strings decode to the same data.

Lower-priorityBOLT12: don't allow zero-amount offers.by Rusty Russell · 0c63d015 · Apr 30, 2026 · 5 filesMessage 68 · AdequateTriage 0Details
Commit message · Rusty Russell

BOLT12: don't allow zero-amount offers.

And enhance some of our quotes to use `...` at the start to link them.
As they were, we didn't notice when a new requirement appeared in the
middle.

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
Lower-prioritydoc: update post-release instructions.by Rusty Russell · 85837a0e · Apr 30, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
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
Lower-priorityBOLT: update to include `channel_type` feature in BOLT 9.by Rusty Russell · f0e43a5c · Apr 30, 2026 · 3 filesMessage 65 · AdequateTriage 0Details
Commit message · Rusty Russell

BOLT: update to include `channel_type` feature in BOLT 9.

We add it to our code, even though we don't use it (yet?).

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 review queuedgossipd: don't forget closed channels until 72 blocks, not 12.by Rusty Russell · 234cc8e5 · Apr 30, 2026 · 10 filesMessage 83 · StrongLow 37Details
Commit message · Rusty Russell

gossipd: don't forget closed channels until 72 blocks, not 12.

Touches a pile of tests, but they're easy to find.

Changelog-Changed: Protocol: We now wait 72 blocks, not 12, before closing channels (BOLT update)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit changes how long Core Lightning nodes remember closed Lightning channels in their network map. The delay is increased from 12 blocks to 72 blocks after the funding output is spent, matching an update to the BOLT protocol specification. This is a protocol-compliance and robustness change, not a fix for an active security vulnerability. The main effect is that nodes keep stale channel information longer, which can slightly delay routing around dead channels but also gives more protection against blockchain reorganizations.

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-prioritycommon: update BOLTs, reject "empty offer_chains" offers.by Rusty Russell · 5d5b0123 · Apr 30, 2026 · 3 filesMessage 83 · StrongInformational 23Details
Commit message · Rusty Russell

common: update BOLTs, reject "empty offer_chains" offers.

It's a bit moot, since we can't pay them anyway, but this brings us into line
with the test vectors. It *did* catch that we treated empty as missing, though.

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
fuzzing or regression evidence
AI analysis · Informational 23/100

This commit tightens validation of a special kind of Lightning payment request called a BOLT12 offer. Previously, the software treated an offer that explicitly listed zero supported blockchains the same as one that didn't list any at all. The updated specification says such an empty list is invalid, so the code now rejects it. The commit message notes this is mostly a formality because the node couldn't actually pay these offers anyway, but it fixes a spec-compliance edge case and a test-vector mismatch.

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-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 · StrongTriage 0Details
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
Lower-priorityUpdate outdated BOLT quotes in HTLC/closing handling.by Rusty Russell · de23003f · Apr 30, 2026 · 4 filesMessage 73 · AdequateTriage 0Details
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
Lower-priorityUpdate outdated BOLT #11 quotes in invoice handling.by Rusty Russell · 5528776c · Apr 30, 2026 · 2 filesMessage 91 · StrongTriage 0Details
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
Lower-prioritydevtools: import check_quotes.py from lnprototest.by Rusty Russell · 63c433c2 · Apr 30, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
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
Lower-prioritydevtools/check_quotes.py: add -k option, make `...` more nuanced.by Rusty Russell · 12c3e2ea · Apr 30, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
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