EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkNormal
Repository coverage

1855 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 queue1616AI analyses
144commits · 30 days
227commits · 60 days
805commits · 180 days
1851commits · 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
1164Adequate · 60–79
231Thin · 40–59
29Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
dovgopoly15015164
Rusty Russell95873816072
Sangbida Chaudhuri14731142066
Dusty Daemon771366066
ShahanaFarooqui931080063
daywalker9090587062
Níckolas Goline40540076
Lagrang376465069
Christian Decker36429072
Vincenzo Palazzo838080
Chandra Pratap56254082
ekzyis222063
Analysis record

Published AI watches

Last scanned 0 minutes ago

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

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

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

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

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

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

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

doc: require Homebrew GNU make and gpatch on macOS

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

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

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

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

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

common: hoist amount+currency parsing into common code.

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

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

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

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

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

common: hoist hash_str helper into its own header.

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

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

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

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

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

downgrade tool: fix invalid memory bug

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

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

xpay: actually tell askrene when a payment succeeded.

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

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

askrene: correctly order constraints.

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

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

askrene: don't leak channel intel entries

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

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

xpay: tests should expect the new error messages

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

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

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

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

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

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

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

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

fetchinvoice: don't bother with checking recurrence timing.

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

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

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

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

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

fetchinvoice: handle weird labels in recurrence_label parameter.

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

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

Add unit tests for str_to_u64

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

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

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

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

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

Explore captured commits

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

Lower-prioritypytest: parameterize test_showrunes.by Rusty Russell · b2b03e6e · Jan 26, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Rusty Russell

pytest: parameterize test_showrunes.

Another one we want to make sure stays unchanged.

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

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

This commit only updates a test file. It makes an existing test run twice—once with an old-style secret key and once with a new-style secret key—and checks that the expected rune values differ in each case. There is no change to production code, no bug fix, and no security patch.

Lower-prioritypytest: parameterize test_payerkey and test_exposesecret.by Rusty Russell · dae9140a · Jan 26, 2026 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: parameterize test_payerkey and test_exposesecret.

These are explicitly written to check that the values don't accidentally change,
which applies to both old and new 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 only changes test code. It expands two existing tests so they run against both the old and new styles of HSM secret generation, verifying that expected cryptographic output values remain stable. There is no change to production code, no bug fix, and no security vulnerability.

AI review queuedpytest: use old hsm secret whenever a canned database files is usedby Sangbida Chaudhuri · 81d1d4a3 · Jan 26, 2026 · 8 filesMessage 65 · AdequateInformational 17Details
Commit message · Sangbida Chaudhuri

pytest: use old hsm secret whenever a canned database files is used

Anything using a canned db depends on the node ids being generated from the old hsm seed.

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

This commit only changes test files. It tells the test framework to use an older, fixed HSM (wallet seed) secret whenever a test loads a pre-made ('canned') database snapshot. This ensures the test node's public identity matches the one recorded in the snapshot, so database migration and regression tests keep working after a recent change to how random seeds are generated. It is a test-suite maintenance patch, not a fix for a runtime security vulnerability.

Security candidatewallet: conduct unit tests with both bip86 and bip32.by Rusty Russell · fe5c3c95 · Jan 26, 2026 · 1 fileMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

wallet: conduct unit tests with both bip86 and bip32.

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

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Informational 15/100

This commit only changes test code. It makes the wallet unit tests run twice: once using the older BIP32 key derivation setup and once using the newer BIP86 setup. No production code is modified, so it cannot directly affect real users or introduce a runtime security flaw.

Lower-prioritytest: use old hsmsecret format for hardcoded onion messageby Sangbida Chaudhuri · c076a100 · Jan 26, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Sangbida Chaudhuri

test: use old hsmsecret format for hardcoded onion message

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

This is a tiny test-only change. It updates one test to use an older format for a secret key so that a pre-recorded test message still works. There is no change to production code and no security issue.

Security candidatepytest: changed old_hsmsecret to default to false.by Sangbida Chaudhuri · 1279a589 · Jan 26, 2026 · 10 filesMessage 83 · StrongInformational 15Details
Commit message · Sangbida Chaudhuri

pytest: changed old_hsmsecret to default to false.

This changes various tests in minor ways:

1. The "l2" secret key in tests/plugins/channeld_fakenet.c is updated.
2. The decompressed gossip data node id needs changing.
3. The coinmoves order changes in bookkeeper for anchors.
4. Various harcoded gossip constants change.
5. Some hardcoded makesecret results change.
6. zeroconf tests which hardcoded node ids change.
7. Arbitrary rune strings change.
8. A log message which uses node ids changes.

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
secret or key material
AI analysis · Informational 15/100

This commit only updates test files and test helpers to match a new default wallet-seed format. It does not change production code, does not fix a vulnerability, and has no direct security impact on running Core Lightning nodes.

Lower-prioritypytest: determine scid direction dynamicallyby Sangbida Chaudhuri · 6a9bdb80 · Jan 26, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Sangbida Chaudhuri

pytest: determine scid direction dynamically

Since we have changed our hsm_secret seed the node ids have all change hence the asseertions on the scids break. This changes it so that the direction is determined when the test executes.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only updates test code. It changes hard-coded channel direction numbers in pytest test expectations to be calculated at runtime based on node IDs. The reason is that a recent change to the test secret seed changed all generated node IDs, which flipped which channel direction value (0 or 1) the tests should expect. There is no change to production code, no security fix, and no vulnerability.

Lower-prioritytest: mark bookkeeper test to use old hsm secretby Sangbida Chaudhuri · 9d331f54 · Jan 26, 2026 · 1 fileMessage 90 · StrongInformational 14Details
Commit message · Sangbida Chaudhuri

test: mark bookkeeper test to use old hsm secret

bookkeeper's fee tracking depends on deterministic channel structure, which depends on node ID ordering. I'm marking this with the old_hsmsecret option for now.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 14/100

This commit only changes a single test file. It adds an option called 'old_hsmsecret' to a test setup so that the bookkeeper test produces deterministic (predictable) channel data. There is no change to production code, no bug fix, and no security patch.

Lower-prioritygetlog: fix schema.by Rusty Russell · 6749c656 · Jan 26, 2026 · 2 filesMessage 51 · ThinInformational 15Details
Commit message · Rusty Russell

getlog: fix schema.

getlog() only gets recent logs, not all of them (since it prunes, and soon will be a ringbuffer).

And "data" is actually an optional field, not required.

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

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit updates two JSON schema files for the getlog RPC command. It changes the title from 'Command to show logs' to 'Command to show recent logs' and marks the 'data' field as optional rather than required. These are documentation and schema accuracy corrections only; no code behavior changes.

Lower-prioritylightningd: move log_prefix and log_entry struct definitions into log.c.by Rusty Russell · 16e91160 · Jan 26, 2026 · 6 filesMessage 85 · StrongInformational 15Details
Commit message · Rusty Russell

lightningd: move log_prefix and log_entry struct definitions into log.c.

They're only exposed because of the notifications, but they are better
off with explicit parameters anyway.

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup. It moves two data structure definitions from a public header file into the single source file where they are actually used, and changes notification functions to accept plain values instead of a pointer to those internal structures. There is no user-visible behavior change and no security fix.

AI review queuedlogging: switch to a simple ringbuffer.by Rusty Russell · 4d8f923a · Jan 26, 2026 · 8 filesMessage 76 · AdequateInformational 19Details
Commit message · Rusty Russell

logging: switch to a simple ringbuffer.

We keep a history of logs internally, so we can drop them to disk on a
crash. This "black box recorder" was some of the first code I wrote
for CLN, but I can't remember the last time we use a crash log to
diagnose a problem.

We attempt to prune it to keep it under 10MB, but the complexity
and cost is rarely worth it: simplify it to use a ringbuffer.

Changelog-Changed: lightningd: logging is now more efficient internally (no more pruning, simple ringbuffer).

```
139993 DEBUG lightningd: fixup_scan: block 786151 with 1203 txs
===> 55388 DEBUG plugin-bcli: Log pruned 1001 entries (mem 10508118 -> 10298662)
33000 DEBUG gossipd: Unreasonable timestamp in 0102000a38ec41f9137a5a560dac6effbde059c12cb727344821cbdd4ef46964a4791a0f67cd997499a6062fc8b4284bf1b47a91541fd0e65129505f02e4d08542b16fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000d9d56000ba40001690fe262010100900000000000000001000003e8000001f30000000000989680
23515 DEBUG hsmd: Client: Received message 14 from client
22269 DEBUG 024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605-hsmd: Got WIRE_HSMD_ECDH_REQ
14409 DEBUG gossipd: Enqueueing update for announce 0102002f7e4b4deb19947c67292e70cb22f7fac837fa9ee6269393f3c513d0431d52672e7387625856c19299cfd584e1a3f39e0f98df13c99090df9f4d5cca8446776fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000e216b0008050001692e1c390101009000000000000003e800000000000013880000004526945a00
12534 DEBUG gossipd: Previously-rejected announce for 514127x248x1
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Got it!
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: ... , awaiting 1120
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Sending master 1020
```

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

This commit rewrites Core Lightning's internal log storage from a dynamically pruned array into a fixed 16 MB ring buffer. It is a refactoring/cleanup change: the old pruning logic is removed, the log size is now hard-capped, and the 'SKIPPED' entries in the getlog RPC are eliminated. There is no direct security fix described by the author, and the diff does not show an obvious exploitable vulnerability. The main security-relevant side effect is that crash logs and the getlog output now contain only the most recent 16 MB of messages, which could slightly reduce forensic information after an incident.

Lower-priorityconnectd: don't be That Node when someone is gossipping crap.by Rusty Russell · e383e14c · Jan 26, 2026 · 1 fileMessage 81 · StrongInformational 23Details
Commit message · Rusty Russell

connectd: don't be That Node when someone is gossipping crap.

As seen in my logs, we complain about nodes a *lot* (Hi old CLN!).

```
===>1589311 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-connectd: peer_out WIRE_WARNING
139993 DEBUG lightningd: fixup_scan: block 786151 with 1203 txs
55388 DEBUG plugin-bcli: Log pruned 1001 entries (mem 10508118 -> 10298662)
33000 DEBUG gossipd: Unreasonable timestamp in 0102000a38ec41f9137a5a560dac6effbde059c12cb727344821cbdd4ef46964a4791a0f67cd997499a6062fc8b4284bf1b47a91541fd0e65129505f02e4d08542b16fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000d9d56000ba40001690fe262010100900000000000000001000003e8000001f30000000000989680
23515 DEBUG hsmd: Client: Received message 14 from client
22269 DEBUG 024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605-hsmd: Got WIRE_HSMD_ECDH_REQ
14409 DEBUG gossipd: Enqueueing update for announce 0102002f7e4b4deb19947c67292e70cb22f7fac837fa9ee6269393f3c513d0431d52672e7387625856c19299cfd584e1a3f39e0f98df13c99090df9f4d5cca8446776fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000e216b0008050001692e1c390101009000000000000003e800000000000013880000004526945a00
12534 DEBUG gossipd: Previously-rejected announce for 514127x248x1
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Got it!
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: ... , awaiting 1120
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Sending master 1020
```

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 · Informational 23/100

This change is a minor log/noise reduction fix. When a peer sends a channel announcement for a channel whose funding transaction output has already been spent, the node used to send a warning message back every single time. Now it sends that warning at most once per second. The old behavior could annoy or overload peers (especially older CLN versions that keep sending stale announcements), but it does not create a direct security vulnerability like theft or remote crash.

Lower-prioritygossmap: don't log every time we don't like a cupdate.by Rusty Russell · cef86d1e · Jan 26, 2026 · 1 fileMessage 81 · StrongInformational 20Details
Commit message · Rusty Russell

gossmap: don't log every time we don't like a cupdate.

This happens for about 300 channels, from every process that loads the gossmap.

It's not very useful to flood the logs, so just log a summary.

To be fair, on my node, this is only the 11th most common message, so we will
revisit the others too:

```
1589311 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-connectd: peer_out WIRE_WARNING
139993 DEBUG lightningd: fixup_scan: block 786151 with 1203 txs
55388 DEBUG plugin-bcli: Log pruned 1001 entries (mem 10508118 -> 10298662)
33000 DEBUG gossipd: Unreasonable timestamp in 0102000a38ec41f9137a5a560dac6effbde059c12cb727344821cbdd4ef46964a4791a0f67cd997499a6062fc8b4284bf1b47a91541fd0e65129505f02e4d08542b16fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000d9d56000ba40001690fe262010100900000000000000001000003e8000001f30000000000989680
23515 DEBUG hsmd: Client: Received message 14 from client
22269 DEBUG 024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605-hsmd: Got WIRE_HSMD_ECDH_REQ
14409 DEBUG gossipd: Enqueueing update for announce 0102002f7e4b4deb19947c67292e70cb22f7fac837fa9ee6269393f3c513d0431d52672e7387625856c19299cfd584e1a3f39e0f98df13c99090df9f4d5cca8446776fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000e216b0008050001692e1c390101009000000000000003e800000000000013880000004526945a00
12534 DEBUG gossipd: Previously-rejected announce for 514127x248x1
===> 12092 DEBUG connectd: Bad cupdate for 641641x1164x1/1, ignoring (delta=80, fee=1073742199/58)
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Got it!
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: ... , awaiting 1120
10761 DEBUG 02e01367e1d7818a7e9a0e8a52badd5c32615e07568dbe0497b6a47f9bef89d6af-channeld-chan#70770: Sending master 1020
```

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

This change is a straightforward log-noise reduction. The program used to print a separate debug message every time it encountered a Lightning network channel update whose fees or delay values were too large to store in its internal format. Because this happens for hundreds of real channels, the logs were being flooded. The patch now counts these occurrences and prints a single summary line instead. It does not alter how the data is handled: the oversized values are still ignored and the channel half is still marked disabled, exactly as before.

Lower-prioritydevtools: Add shellcheck to pre-commit.by Se7enZ · 98c149c7 · Jan 23, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add shellcheck to pre-commit.

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

This commit adds a development tool called shellcheck to the project's pre-commit checks. It is purely a code-quality and linting change; it does not modify any runtime code, fix a bug, or change how the software behaves. There is no security issue in this commit itself.

Lower-prioritydevtools: Add pre-commit as a `dev` Python package.by Se7enZ · 854dec00 · Jan 23, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add pre-commit as a `dev` Python package.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds a development tool called 'pre-commit' to the project's Python development dependencies. It does not change any production code, runtime behavior, or network-facing functionality. There is no security issue here.

Lower-prioritydevtools: Add commitlint to pre-commit.by Se7enZ · 623300d6 · Jan 23, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add commitlint to pre-commit.

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

This change adds an automated commit-message style checker to the project's development workflow. It does not modify any payment, network, or cryptographic code, and there is no security relevance.

Lower-prioritydevtools: Add `fix-style-errors` script by @sangbida.by Se7enZ · 27482957 · Jan 23, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Se7enZ

devtools: Add `fix-style-errors` script by @sangbida.

A helper tool to fix code style errors using `ruff` and `clang-format`
and correct spelling.

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

This commit adds a new developer helper script that automatically fixes code style problems in Python and C files and corrects spelling mistakes. It is a tooling addition for maintainers and contributors, not a change to the wallet, network, or cryptographic code of Core Lightning. There is no security issue visible in the commit itself.

Lower-prioritydevtools: Add clang-format to pre-commit.by Se7enZ · ee94ba3d · Jan 23, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add clang-format to pre-commit.

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

This commit adds a code-formatting check (clang-format) to the project's pre-commit tooling. It does not change any executable code, protocol logic, or security-sensitive behavior. It is purely a developer workflow improvement to enforce consistent C code style before commits.

Lower-prioritydevtools: Set pre-commit default versions for Python and NodeJS.by Se7enZ · eba33056 · Jan 23, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Se7enZ

devtools: Set pre-commit default versions for Python and NodeJS.

Default to Python 3 and NodeJS to use that which is on the system,
avoiding conflicts with `nodeenv`.

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

This commit only changes the project's pre-commit configuration file. It tells the pre-commit tool to use the system's installed NodeJS and Python 3 versions, and makes a minor formatting tweak to a hook stage. There is no change to Core Lightning's runtime code, network behavior, or anything that handles funds, keys, or peer messages.

Lower-prioritydevtools: Add EOF fixer and trailing whitespace fix to pre-commit.by Se7enZ · e91625a6 · Jan 23, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add EOF fixer and trailing whitespace fix to pre-commit.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds two cosmetic code-style checks to the project's pre-commit tooling: one that removes trailing whitespace and one that ensures files end with a newline. It does not change any production code, cryptographic logic, network handling, or user-facing behavior. There is no security relevance.

Lower-prioritydevtools: Add custom `include-order-fixer` to pre-commit.by Se7enZ · 5ca181ec · Jan 23, 2026 · 4 filesMessage 65 · AdequateInformational 15Details
Commit message · Se7enZ

devtools: Add custom `include-order-fixer` to pre-commit.

Also fixes some exising file spacing issues. Preserves whitespace and
comments.

Assisted by Cursor Auto.

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

This commit adds a new developer tool that automatically sorts #include lines in C source files to match the project's coding style. It also wires that tool into the pre-commit checks and removes one stray blank line from a single file. There is no security-relevant code change here.

Lower-prioritybuild: Replace PLUGIN_RENEPAY_HDRS json.c with json.h in Makefile.by Se7enZ · 70fe0251 · Jan 23, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · Se7enZ

build: Replace PLUGIN_RENEPAY_HDRS json.c with json.h in Makefile.

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 15/100

This is a one-line build system fix in a Makefile. It changes a list of header files so that it references 'json.h' instead of 'json.c'. There is no runtime code change and no security relevance.

Lower-prioritydoc: Add pre-commit section to Contributor Workflow documentation.by Se7enZ · 2bc67c37 · Jan 23, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Se7enZ

doc: Add pre-commit section to Contributor Workflow documentation.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds documentation explaining how contributors can install and use the pre-commit tool for local code checks. It does not change any program code, build scripts, or security-sensitive behavior.

Lower-prioritydevtools: Add doc JSON schema checks and formatting to pre-commit.by Se7enZ · a22ba9ba · Jan 23, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Se7enZ

devtools: Add doc JSON schema checks and formatting to pre-commit.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds new pre-commit checks for JSON documentation files. It validates that JSON schema files in the doc/schemas directory follow a defined schema and are consistently formatted. There is no change to application code, no bug fix, and no security-related behavior change.

Lower-prioritydevtools: Add discouraged function check to pre-commit.by Se7enZ · 6e50148b · Jan 23, 2026 · 1 fileMessage 65 · AdequateInformational 12Details
Commit message · Se7enZ

devtools: Add discouraged function check to pre-commit.

Reimplements `make check-discouraged-functions` for Python regex.

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

This commit adds a new automated code-quality check that flags risky C functions like gets, scanf, sprintf, fgets, and fputs during pre-commit. It is a defensive tooling change, not a fix for an active security bug. There is no patch to any runtime code, so it does not directly change the software's security posture, but it helps prevent unsafe functions from being introduced in the future.