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 queue972AI 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.
dovgopoly1502164
Rusty Russell95873427072
Sangbida Chaudhuri14731124066
Dusty Daemon771358066
ShahanaFarooqui931035063
daywalker9090575062
Níckolas Goline40540076
Lagrang376456069
Christian Decker36411072
Vincenzo Palazzo838080
Chandra Pratap56250082
ekzyis222063
Analysis record

Published AI watches

Last scanned 28 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: don't invoke the pcap test every session.by Rusty Russell · 0b105283 · Feb 28, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · Rusty Russell

pytest: don't invoke the pcap test every session.

Only do it when the tcp_capture fixture is invoked, which is only for one test.

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
Security candidateschemas: fix ping requirements documentationby daywalker90 · 53a5512c · Feb 27, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · daywalker90

schemas: fix ping requirements documentation

Changelog-None

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

This commit only changes two lines of documentation text in JSON schema files. It corrects the description of the 'ping' command to say it works with any currently connected peer, not just peers with an open payment channel. There is no code change and no security impact.

Lower-prioritygitignore: add lightningd/lightning_gossip_compactdby daywalker90 · 85fa8cfc · Feb 27, 2026 · 1 fileMessage 40 · ThinTriage 0Details
Commit message · daywalker90

gitignore: add lightningd/lightning_gossip_compactd

Changelog-None

40/100 · ThinMessage clarity
✓ Specific, descriptive subject! No meaningful explanatory body
Lower-prioritylightningd: add channel_id filter to listpeerchannelsby Peter Neuroth · 2971f5d9 · Feb 24, 2026 · 12 filesMessage 73 · AdequateTriage 0Details
Commit message · Peter Neuroth

lightningd: add channel_id filter to listpeerchannels

Sometimes we don't know the short_channel_id yet (e.g the channel has
not been broadcasted), but we still know the channel_id from the funding
transaction. Add a channel_id filter to listpeerchannels and clarify
that id, short_channel_id and channel_id are mutually exclusive.

Changelog-Added: `listpeerchannels` now accepts a `channel_id` filter,
for cases where the `short_channel_id` is not known yet.

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

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidateCI: use nproc + 1 for pytest parallelism..by Rusty Russell · 77251ec1 · Feb 24, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Rusty Russell

CI: use nproc + 1 for pytest parallelism..

More future proof, better for self-hosted runners.

Example run times before:

4s CI completion
2m 36s Check we can downgrade the node (compile-gcc, sqlite3, liquid-regtest)
2m 52s Check we can downgrade the node (compile-gcc, postgres, regtest)
3m 20s Check we can downgrade the node (compile-gcc, sqlite3, regtest, 1)
3m 20s Check we can downgrade the node (compile-gcc, sqlite3, regtest, 1)
8m 1s Run fuzz regression tests
11m 46s Run unit tests (compile-clang-sanitizers, 0)
12m 59s Compile CLN compile-gcc
13m 42s Compile CLN compile-clang
14m 10s Compile CLN compile-gcc-O3
14m 15s Compile CLN compile-clang-sanitizers
15m 23s Pre-build checks
19m 37s Test CLN dual-fund
26m 49s Run unit tests (compile-gcc, 1)
43m 19s Valgrind Test CLN Valgrind (06/10)
43m 21s Valgrind Test CLN Valgrind (08/10)
43m 40s Valgrind Test CLN Valgrind (05/10)
43m 59s Valgrind Test CLN Valgrind (03/10)
44m 4s Valgrind Test CLN Valgrind (07/10)
47m 28s Valgrind Test CLN Valgrind (09/10)
47m 37s Valgrind Test CLN Valgrind (02/10)
47m 45s Valgrind Test CLN Valgrind (01/10)
52m 51s Valgrind Test CLN Valgrind (04/10)
54m 6s Valgrind Test CLN Valgrind (10/10)
1h 14m 13s Sanitizers Test CLN (ASan/UBSan (03/12), 3, --test-group=3 --test-group-count=12)
1h 14m 6s Sanitizers Test CLN (ASan/UBSan (06/12), 6, --test-group=6 --test-group-count=12)
1h 15m 23s Sanitizers Test CLN (ASan/UBSan (01/12), 1, --test-group=1 --test-group-count=12)
1h 20m 30s Sanitizers Test CLN (ASan/UBSan (08/12), 8, --test-group=8 --test-group-count=12)
1h 22m 35s Sanitizers Test CLN (ASan/UBSan (12/12), 12, --test-group=12 --test-group-count=12)
1h 23m 49s Sanitizers Test CLN (ASan/UBSan (04/12), 4, --test-group=4 --test-group-count=12)
1h 26m 11s Sanitizers Test CLN (ASan/UBSan (07/12), 7, --test-group=7 --test-group-count=12)
1h 28m 44s Sanitizers Test CLN (ASan/UBSan (05/12), 5, --test-group=5 --test-group-count=12)
1h 29m 1s Sanitizers Test CLN (ASan/UBSan (02/12), 2, --test-group=2 --test-group-count=12)
1h 29m 4s Sanitizers Test CLN (ASan/UBSan (11/12), 11, --test-group=11 --test-group-count=12)
1h 31m 36s Sanitizers Test CLN (ASan/UBSan (09/12), 9, --test-group=9 --test-group-count=12)
1h 38m 54s Sanitizers Test CLN (ASan/UBSan (10/12), 10, --test-group=10 --test-group-count=12)
1h 39m 22s Test CLN liquid
1h 52m 23s Test minimum supported BTC v25.0 with clang
1h 52m 28s Test CLN gcc
1h 53m 57s Test CLN splicing
1h 57m 25s Test CLN postgres
1h 59m 25s Test CLN clang

2d 17h 56m 16s TOTAL

Example runtimes afterwards:



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

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
Why it was queued
update trustdefensive validationfuzzing or regression evidencedocumentation-only discount
AI analysis · Informational 15/100

This commit only changes how many parallel test jobs run in the project's automated continuous integration (CI) system. It replaces hard-coded numbers like 4 or 2 with a dynamic value based on the number of available CPU cores. There is no change to the Core Lightning node software itself, its network behavior, wallet handling, or any user-facing feature. It is purely an infrastructure speed-up.

Security candidateCI: make downgrade and slow integration tests depend on check-compiled-source step.by Rusty Russell · d39ba340 · Feb 24, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Rusty Russell

CI: make downgrade and slow integration tests depend on check-compiled-source step.

As pointed out by Alex Myers: we don't want to waste time running the
complex steps if the generated files are not up-to-date.

But we still run the faster "integration" tests (not valgrind or
sanitizer ones), since they often reveal early failures.

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

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
update trustdefensive validationdocumentation-only discount
AI analysis · Informational 15/100

This commit changes the GitHub Actions CI workflow so that three slower, more complex test jobs now wait for a 'check-compiled-source' step instead of the plain 'compile' step. It is purely a build-pipeline efficiency tweak to avoid wasting time on long tests when generated source files are stale. There is no change to application code, no security fix, and no vulnerability.

Lower-priorityconnectd: teach dev_report_fds about Tor fdsby Rusty Russell · aca70eec · Feb 24, 2026 · 3 filesMessage 78 · AdequateTriage 0Details
Commit message · Rusty Russell

connectd: teach dev_report_fds about Tor fds

Our CI didn't run the Tor tests, and when we do, they fail
(particularly tests/test_gossip.py::test_tor_port_onions and
test_static_tor_onions):

```
lightningd-2 2026-02-16T01:06:28.607Z INFO connectd: dev_report_fds: 3 -> hsm fd
lightningd-2 2026-02-16T01:06:28.607Z INFO connectd: dev_report_fds: 4 -> gossipd fd
lightningd-2 2026-02-16T01:06:28.607Z INFO connectd: dev_report_fds: 5 -> listener (connection_in)
lightningd-2 2026-02-16T01:06:28.607Z INFO connectd: dev_report_fds: 5 name IPv4 socket 127.0.0.1:46045
lightningd-2 2026-02-16T01:06:28.607Z **BROKEN** connectd: dev_report_fds: 6 open but unowned? fd mode: socket
```

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
Lower-priorityMakefile: mark more things as intermediaries.by Rusty Russell · 5d444c61 · Feb 24, 2026 · 3 filesMessage 60 · AdequateTriage 0Details
Commit message · Rusty Russell

Makefile: mark more things as intermediaries.

This means we don't have to include them in our bundle.

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: use more optimized builds sometimes.by Rusty Russell · 1047c484 · Feb 24, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Rusty Russell

CI: use more optimized builds sometimes.

1. Don't --enable-debugbuild for sanitizer runs (slow) or -O3 compilations.
2. Use -O3 build for splicing and postgres tests runs (speed them a
little), make sure builds without --enable-debugbuild work.
3. Remove clang test run, because we already use that for
minimum-btc-version test: this saves another 2 hour CI job.

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

100/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
defensive validationdocumentation-only discount
Lower-priorityplugins: neaten rust plugins, make them intermediate objects.by Rusty Russell · e9a7c942 · Feb 24, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Rusty Russell

plugins: neaten rust plugins, make them intermediate objects.

This keeps it simpler for future expansion, and also means we won't
rebuild them as much.

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-priorityCI: Don't explicitly invoke .github/scripts/install-bitcoind.shby Rusty Russell · b3978d94 · Feb 24, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Rusty Russell

CI: Don't explicitly invoke .github/scripts/install-bitcoind.sh

It's done by setup.sh, so simply set the env var for that. Don't try
to reinstall valgrind or call `sudo apt-get update -qq` either, since
setup.sh does that too.

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Lower-priorityCI: Don't do release target build, create "small" profileby Rusty Russell · e50ea420 · Feb 24, 2026 · 2 filesMessage 85 · StrongTriage 0Details
Commit message · Rusty Russell

CI: Don't do release target build, create "small" profile

Using RUST_TARGET=release is slower than RUST_TARGET=debug, *but*
the images are much bigger.

On my laptop, but restricted to 4 CPUs. I added a target to build all
the prerequisited but not compress the bzip2:

RUST_TARGET Time to build Size (testpack.tar.bz2)
release 4m49s 133MB
debug 2m34s 343MB
small 2m9s 155MB

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Lower-priorityCI: use -O1 optimized builds for sanitizer and valgrind runs.by Rusty Russell · 201b6848 · Feb 24, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Rusty Russell

CI: use -O1 optimized builds for sanitizer and valgrind runs.

ChatGPT suggested this for sanitizer runs, but valgrind gains a little
too.

Sanitizer before: 74.1-98.9(84.5+/-7.3) minutes
Sanitizer after: 11.6-15.2(13.3+/-1.2) minutes

Valgrind before: 43.3-54.1(46.8+/-3.8) minutes
Valgrind after: 40.9-49.4(43.4+/-2.5) minutes

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
defensive validationdocumentation-only discount
Lower-priorityMakefile: don't build the sources in make check-source.by Rusty Russell · 932ba950 · Feb 24, 2026 · 3 filesMessage 73 · AdequateTriage 0Details
Commit message · Rusty Russell

Makefile: don't build the sources in make check-source.

check-source-bolt needs devtools, and check-python needs a full build.

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-priorityMakefile: make testpack.tar.gz from (almost) all changed files.by Rusty Russell · 6c5883e5 · Feb 24, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Rusty Russell

Makefile: make testpack.tar.gz from (almost) all changed files.

Here are the speeds and sizes of different compressors (just
compressing the raw tar file):

bzip2: 34.15s 412MB

gzip -1: 9.96s 420MB
gzip -2: 10.39s 417MB
gzip -3: 11.63s 414MB
gzip -4: 12.29s 409MB
gzip -5: 14.41s 406MB
gzip -6: 19.02s 405MB
gzip -7: 22.96s 405MB
gzip -8: 39.63s 404MB
gzip -9: 72.19s 404MB

xz: 72.92s 407MB

Uncompressing time:

xz: 2.3 seconds
bzip2: 20 seconds
gzip -5: 3 seconds

Note that this target is only useful on a *freshly built* tree: it
will include everything config.vars and newer.

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-priorityci: Enable sccache compiler cache for Rust and Cby Christian Decker · 381f94a6 · Feb 24, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Christian Decker

ci: Enable sccache compiler cache for Rust and C

[ Cherry-picked from another PR, and read the docs which say you have
to set SCCACHE_GHA_ENABLED to get inter-job caching! --RR ]

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Lower-priorityCI: Use variable to make group counts neater.by Rusty Russell · c1b2fde7 · Feb 24, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Rusty Russell

CI: Use variable to make group counts neater.

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

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
documentation-only discount
Lower-priorityCI: Use -O3 builds for Liquid integration tests.by Rusty Russell · 31ad743e · Feb 24, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Rusty Russell

CI: Use -O3 builds for Liquid integration tests.

The other integration tests are taking under an hour, and this is
taking 1hr 30m.

The downside is that backtraces are far less clear, but that's why the
main run uses the full debug version.

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

100/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
documentation-only discount
Lower-priorityMakefile: clean up a little.by Rusty Russell · 3812e745 · Feb 24, 2026 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · Rusty Russell

Makefile: clean up a little.

Make cdump-enumstr use libccan.a, rather than explicit ccan object: it's the
last one.

And mark submodcheck phony, as it is.

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-prioritypytest: mark test_partial_payment_restart slow.by Rusty Russell · 7a58575a · Feb 24, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Rusty Russell

pytest: mark test_partial_payment_restart slow.

We can actually be slow enough that we get a (60 second) MPP timeout
under valgrind:

```
# Restart, and make sure it's reconnected to l2.
l3.restart()
print(l2.rpc.listpeers())
wait_for(lambda: [p['connected'] for p in l2.rpc.listpeers()['peers']] == [True, True])

# Pay second part.
l1.rpc.sendpay(
route=route,
payment_hash=inv['payment_hash'],
amount_msat=1000,
bolt11=inv['bolt11'],
payment_secret=paysecret,
partid=2,
groupid=1,
)

> l1.rpc.waitsendpay(payment_hash=inv['payment_hash'], timeout=TIMEOUT, partid=1)

tests/test_pay.py:3352:
...
E pyln.client.lightning.RpcError: RPC call failed: method: waitsendpay, payload: {'payment_hash': 'd73e10b604f53afb05da052d1fc90c45269321169196e31b7ccc312eabc26557', 'timeout': 180, 'partid': 1}, error: {'code': 204, 'message': 'failed: WIRE_MPP_TIMEOUT (reply from remote)', 'data': {'created_index': 1, 'id': 1, 'payment_hash': 'd73e10b604f53afb05da052d1fc90c45269321169196e31b7ccc312eabc26557', 'groupid': 1, 'partid': 1, 'destination': '03cecbfdc68544cc596223b68ce0710c9e5d2c9cb317ee07822d95079acc703d31', 'amount_msat': 500, 'amount_sent_msat': 501, 'created_at': 1771551338, 'status': 'pending', 'bolt11': 'lnbcrt10n1p5e0wnfsp5vpgn0adhmyjecp47yfc6dtefett7d3qqzh4j908ane7tezyy0evqpp56ulppdsy75a0kpw6q5k3ljgvg5nfxggkjxtwxxmuescja27zv4tsdq9d9h8vxqyjw5qcqp9rzjqvuytqpdyk6wqaxvl47d3vee5swuwklej79qxjqqg394r4ptqaue5qqqvuqqqqgqqqqqqqqpqqqqqzsqqc9qxpqysgq6ur4cclfhnzs0tgenmxhvx8glw3q9eylp3pdck73x58cukwtfxj5zjg6g0a4p4plgj6qd0s0uxkuntzcn4l6vvndgrjj7gndma3t7pcqmr9q3j', 'erring_index': 2, 'failcode': 23, 'failcodename': 'WIRE_MPP_TIMEOUT', 'erring_node': '03cecbfdc68544cc596223b68ce0710c9e5d2c9cb317ee07822d95079acc703d31', 'erring_channel': '103x1x0', 'erring_direction': 0, 'raw_message': '0017'}}
```

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityCI: avoid rebuilds on downloads using testpack.tar.gz.by Rusty Russell · 740e35ad · Feb 24, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Rusty Russell

CI: avoid rebuilds on downloads using testpack.tar.gz.

We use the same fragment everywhere for consistency, even though some
stages don't actually call make.

The magic is:
CARGO=false CC=devtools/cc-nobuild SUPPRESS_GENERATION=1

Which causes us to fail if we want to rebuild.

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Lower-priorityCI: Make 12 not 10 valgrind tests, and 6 not 12 sanitizer tests.by Rusty Russell · 9b071418 · Feb 24, 2026 · 1 fileMessage 87 · StrongTriage 0Details
Commit message · Rusty Russell

CI: Make 12 not 10 valgrind tests, and 6 not 12 sanitizer tests.

Given the new timings, this should even things out a little.

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

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
defensive validationdocumentation-only discount
Lower-priorityCI: split gcc+sqlite3 tests into 6 runners.by Rusty Russell · 1d351e29 · Feb 24, 2026 · 1 fileMessage 90 · StrongTriage 0Details
Commit message · Rusty Russell

CI: split gcc+sqlite3 tests into 6 runners.

It takes 1h43m, and it's our "basic" integration test. So split 6
ways to get faster results, then if that passes do the other tests
(Postgres, clang, Liquid, splicing, dual-funding).

Now they take about 20 minutes each.

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

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
Why it was queued
documentation-only discount
Lower-priorityMakefile: support overriding of CC and CARGO for catching unintended builds.by Rusty Russell · b1031e56 · Feb 24, 2026 · 4 filesMessage 85 · StrongTriage 0Details
Commit message · Rusty Russell

Makefile: support overriding of CC and CARGO for catching unintended builds.

For CI we want to make sure we don't rebuild. CC=false doesn't work because
we reply on the output of "$CC -dumpmachine" for the external build directory.

So we would use:

make CC=devtools/cc-nobuild CARGO=false

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
Lower-priorityCI: do cargo test --all as part of post-build stepby Rusty Russell · bc518726 · Feb 24, 2026 · 1 fileMessage 95 · StrongTriage 0Details
Commit message · Rusty Russell

CI: do cargo test --all as part of post-build step

No point spending 1m24 seconds for *each* different compiler variant.

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

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
documentation-only discount