EP
← All projectsElements Project

Core Lightning

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

BitcoinLightning NetworkNormal
Repository coverage

1856 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 queue1853AI analyses
139commits · 30 days
224commits · 60 days
803commits · 180 days
1839commits · 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
432Strong · 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 Russell95873958072
Sangbida Chaudhuri14731146066
Dusty Daemon771377066
ShahanaFarooqui931093063
daywalker9090589062
Níckolas Goline40540076
Lagrang376476069
Christian Decker36436072
Vincenzo Palazzo838080
Chandra Pratap56256082
ekzyis222063
Analysis record

Published AI watches

Last scanned 4 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.

Security candidatesqlite3: consistently comment where we want to upgrade.by Rusty Russell · e051ba6b · Aug 11, 2025 · 3 filesMessage 78 · AdequateInformational 15Details
Commit message · Rusty Russell

sqlite3: consistently comment where we want to upgrade.

Now you can grep for 'sqlite3 version' and see where we would like
to update.

Debian 11 (Bullseye) and Ubuntu 20.04 (Focal) ship with SQLite 3.31.1.
RHEL 9 ships with 3.34.1. Fedora 38+ uses SQLite 3.40+.

Unfortunately, RHEL8 ships with 3.26.0, and is still on maintenance Support
(security fixes, no new features): runs until May 31, 2029.

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

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagesigning or wallet path
AI analysis · Informational 15/100

This commit only adds and rewords comments in the source code to make it easier to find places where the project would like to require a newer SQLite version in the future. It does not change any actual behavior, fix any bug, or alter any security-related logic.

Lower-priorityfix: macOS for grpico-toolsby Lakshya Singh · 4afa5f71 · Aug 11, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Lakshya Singh

fix: macOS for grpico-tools

add openssl installation and flags to install grpcio-tools

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

This commit is a routine fix for the macOS CI build workflow. It adds Python 3.10 setup, installs OpenSSL via Homebrew, and sets environment variables so that the grpcio-tools Python package can be built successfully on macOS runners. There is no indication this change affects shipped software security or introduces a vulnerability.

Lower-priorityrefactor: pyproject.toml poetry to uv + hatchby Lakshya Singh · c56464ca · Aug 11, 2025 · 16 filesMessage 92 · StrongInformational 15Details
Commit message · Lakshya Singh

refactor: pyproject.toml poetry to uv + hatch

make use of standard keys for project and dependeny specification

- provide sources to run uv build so that it can refer local packages
- using hatchling for build as is stock build option
- use optional-dependencies.dev for dev-dependencies
- add hatch targets for packages and includes where unclear

Changelog-Update: use uv with hatchling instead of poetry

92/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
AI analysis · Informational 15/100

This commit is a routine build-system refactor for Core Lightning's Python packages. It switches the package manager from Poetry to uv and the build backend to hatchling, updating pyproject.toml files and lock files accordingly. There is no change to the actual Lightning node code, no bug fix, and no security patch.

Lower-priorityfeat: replace poetry with uv in Makefilesby Lakshya Singh · 89eaf5b5 · Aug 11, 2025 · 6 filesMessage 80 · StrongInformational 15Details
Commit message · Lakshya Singh

feat: replace poetry with uv in Makefiles

Extract package versions from pyproject.toml directly
instead of using poetry commands. Use `uv run` to execute flake8,
pytest and other Python tools consistently.

Add new make commands for uv builds

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

This commit is a routine build-tooling change: it swaps the Python package manager from Poetry to uv in Makefiles, updates how package versions are read, and wraps Python commands with `uv run`. There is no change to Core Lightning's runtime code, network protocol handling, wallet logic, or cryptography, so it does not introduce or fix a security vulnerability.

Lower-prioritychore: update docs for uvby Lakshya Singh · a0fe0174 · Aug 11, 2025 · 9 filesMessage 57 · ThinInformational 15Details
Commit message · Lakshya Singh

chore: update docs for uv

update commands and usage for uv

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates documentation files to replace instructions mentioning the Poetry Python tool with instructions for a newer tool called 'uv'. No program code, configuration files, or security logic was changed. It is a routine developer-experience/documentation maintenance change with no security relevance.

Lower-priorityfix: replace deprecated flask.escape with markupsafe.escapeby Lakshya Singh · d428998d · Aug 11, 2025 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Lakshya Singh

fix: replace deprecated flask.escape with markupsafe.escape

Updates tests/rkls_github_canned_server.py to use markupsafe.escape
instead of the deprecated flask.escape function. The flask.escape
function is now deprecated and will be removed in a future Flask
release, so this change ensures forward compatibility.

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

This is a routine maintenance change in a test helper file. It swaps one HTML-escaping function for an equivalent one to stay compatible with future Flask releases. There is no security issue here.

Lower-prioritychore: add libffiby Lakshya Singh · b0360eac · Aug 11, 2025 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · Lakshya Singh

chore: add libffi

missing libffi fails coincurve installation

55/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This is a routine build-system maintenance change. It adds the libffi library to the list of packages installed in a FreeBSD CI workflow so that the Python coincurve package can compile successfully. There is no security-relevant change to the software itself.

Lower-prioritychore: add poetry for recklessby Lakshya Singh · c468dda5 · Aug 11, 2025 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Lakshya Singh

chore: add poetry for reckless

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This is a routine build-script change. It adds one command to install the Poetry Python packaging tool via the uv package manager, so that the project's 'reckless' component can continue to work during a migration from Poetry to uv. There is no security-relevant change visible in the diff.

Lower-priorityfeat: update release pipelineby Lakshya Singh · 570c631b · Aug 11, 2025 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · Lakshya Singh

feat: update release pipeline

add documentation for release pipeline changes

62/100 · AdequateMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit is a routine maintenance change to the project's release pipeline. It swaps the Python packaging tool from Poetry to uv (a newer, faster Python package manager) and updates the matching documentation. There is no change to Core Lightning's actual node software, wallet logic, or network protocol, and no security bug is fixed or introduced in the diff.

AI review queuedfeat: replace poetry with uv for dependency managementby Lakshya Singh · 69102c62 · Aug 11, 2025 · 4 filesMessage 85 · StrongInformational 15Details
Commit message · Lakshya Singh

feat: replace poetry with uv for dependency management

Replace poetry with uv for managing Python dependencies and running
commands across CI workflow.

- Add astral-sh/setup-uv@v5 action to install uv
- Replace all poetry run commands with uv run
- Remove poetry-specific installation steps
- Update Python setup in multiple jobs

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 discountsecond-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a routine build-tooling change: it swaps the Python dependency manager used by the project's automated CI workflows from Poetry to uv. It does not modify Core Lightning's actual node code, wallet logic, network protocol handling, or any user-facing behavior. There is no security-relevant change visible in the diff.

AI review queuedfix: coincurve build issueby Lakshya Singh · 0ca833fe · Aug 11, 2025 · 2 filesMessage 90 · StrongInformational 19Details
Commit message · Lakshya Singh

fix: coincurve build issue

hatchling build requires license file but the build that coincurve
21.0.0 uses doesn’t account for that in `build_hatch.py` this was added
to prevent need of `cffi` as a runtime dependency but we can probably
live without it until it gets fixed.

change MR: https://github.com/ofek/coincurve/pull/176

reported issue: https://github.com/ofek/coincurve/issues/187

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 19/100

This commit fixes a build problem by pinning a Python cryptography helper library (coincurve) to an older version. It is a build/dependency workaround, not a fix for a security vulnerability in Core Lightning itself. The change prevents installation failures caused by a packaging bug in coincurve 21.0.0, but it does not patch any runtime security flaw.

Lower-priorityfix: flake8 lint rulesby Lakshya Singh · f442bd50 · Aug 11, 2025 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Lakshya Singh

fix: flake8 lint rules

Remove unnecessary global declarations across multiple test files.
This change improves code quality by eliminating redundant global
statements for variables that are already accessible in their
respective scopes. Add proper type annotation for fees_from_status
in test_closing.py and import the required typing modules. These
changes maintain the same functionality while making the code cleaner
and more compliant with Python best practices.

73/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit is a routine code cleanup: it removes unnecessary 'global' declarations and adds a Python type annotation. There is no change to how the software behaves or to any security-sensitive logic.

Lower-priorityfeat: add pytest configby Lakshya Singh · 04afdc47 · Aug 11, 2025 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · Lakshya Singh

feat: add pytest config

Add pytest.ini with pythonpath = . configuration to ensure modules
are properly discovered when running tests. Also add empty
__init__.py file to make the tests directory a proper Python package.

85/100 · StrongMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit adds a basic pytest configuration file and an empty package marker file to the tests directory. It is purely a development/testing setup change with no security relevance.

Lower-priorityfeat: add __init__.py in packagesby Lakshya Singh · 6088a0e4 · Aug 11, 2025 · 12 filesMessage 84 · StrongInformational 15Details
Commit message · Lakshya Singh

feat: add __init__.py in packages

allows for namespace sharing in a virtual environment otherwise gets overriden by pyln-proto-grpc's pyln folder

84/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit adds small marker files (__init__.py) to several Python packages so they can share the same 'pyln' namespace in a virtual environment. It is a packaging/development fix, not a security patch. There is no indication it fixes a vulnerability or changes how the software protects funds or data.

Lower-priorityaskrene: paranoid checks ...by Lagrang3 · 5b8102ec · Aug 8, 2025 · 1 fileMessage 50 · ThinLow 42Details
Commit message · Lagrang3

askrene: paranoid checks ...

that new flows respect the HTLC min/max constraints.

Changelog-None

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

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Low 42/100

This commit adds extra safety checks to Core Lightning's 'askrene' routing plugin. After computing payment routes, it now verifies that every hop's amount respects each channel's advertised minimum and maximum HTLC limits. If a route violates those limits, it is rejected with a broken/log message. This is a defensive hardening change rather than a fix for a known active exploit.

Lower-priorityaskrene: refine: disable HTLC min violationsby Lagrang3 · b479963c · Aug 8, 2025 · 4 filesMessage 80 · StrongLow 35Details
Commit message · Lagrang3

askrene: refine: disable HTLC min violations

Disable channels with HTLC min violations so that we don't hit them
twice when computing routes.

Changelog-None

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

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 35/100

This change fixes a routing bug in Core Lightning's experimental 'askrene' plugin. Previously, when the plugin planned a payment route, it could repeatedly try to use channels whose minimum payment size (htlc_min) was bigger than the amount being sent, wasting computation and potentially producing bad routes. The patch makes the plugin remember and temporarily disable those channels during the same routing query, so it doesn't hit the same constraint twice.

Lower-priorityaskrene: refine: remove refine_with_fee_and_limitsby Lagrang3 · f7ba8f1c · Aug 8, 2025 · 2 filesMessage 55 · ThinInformational 12Details
Commit message · Lagrang3

askrene: refine: remove refine_with_fee_and_limits

and remove unused helper functions.

Changelog-None

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

55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Provides an explanatory body
AI analysis · Informational 12/100

This commit removes a large block of unused code from the askrene routing plugin in Core Lightning. The deleted functions handled fee calculations, capacity limits, and HTLC constraints during payment route refinement, but they were no longer being called anywhere. There is no indication in the commit message or diff that this fixes a security bug; it appears to be routine code cleanup.

Lower-priorityaskrene: rework the caller of the MCF solverby Lagrang3 · 767893de · Aug 8, 2025 · 3 filesMessage 68 · AdequateInformational 23Details
Commit message · Lagrang3

askrene: rework the caller of the MCF solver

We use a wrapper around the MCF solver that takes care of finding the
best linearization parameters and fixing the flow values to meet the
htlc_min and htlc_max constraints.
We have reworked the current implementation and made it a bit more
similar to renepay's version.

Out of 50000 simulated payment situations distributed accross payment
amounts of 1e2, 1e3, 1e4, 1e5 and 1e6 sats, we find that 133 failed
cases in the master branch turn to success with the current changes,
while only 3 success cases in the master are not solved by the changes.

master
+-------+------+
| S | F |
+---+-------+------+
| S | 46329 | 133 |
changes +---+-------+------+
| F | 3 | 3535 |
+---+-------+------+

Out of the 133 cases that flipped from failure to success the failed
reasons were:

122 -> "Could not find route without excessive cost"
5 -> "We couldn't quite afford it"
5 -> "Amount *msat below minimum"
1 -> tripped an HTLC min check

Changelog-None.

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 23/100

This commit rewrites the payment routing solver in Core Lightning's experimental 'askrene' plugin. It changes how routes are computed, how fees and delays are checked, and how channel capacity reservations are handled. The stated goal is to make more payments succeed in simulation. There is no claim this fixes a security vulnerability, and the changes are in an experimental plugin rather than core payment logic. The main risk is that a bug in the new solver could produce invalid or uneconomic routes, but the commit itself does not introduce an obvious exploitable weakness.

Lower-priorityaskrene: refine: add a step to increase flows ...by Lagrang3 · d64f438b · Aug 8, 2025 · 1 fileMessage 68 · AdequateInformational 24Details
Commit message · Lagrang3

askrene: refine: add a step to increase flows ...

by a small amount if the deliver amount is less than the requested
amount by X.
This step saves runtime by avoiding calling an extra MCF
and it helps us solve a small percentage of cases where the only
available routes have HTLCmin that is bigger than X.

Changelog-None

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 24/100

This commit adds a small optimization to Core Lightning's payment routing plugin (askrene). After computing payment routes, if the deliverable amount is slightly short of the requested amount, the code now nudges each route's amount upward by up to 2% (without exceeding each route's maximum). The goal is to avoid an extra expensive computation and to handle edge cases where a channel's minimum HTLC size is larger than the leftover shortfall. There is no indication in the commit that this fixes a security vulnerability.

Lower-priorityaskrene: add new functions to refine flowsby Lagrang3 · 620b96a3 · Aug 8, 2025 · 2 filesMessage 80 · StrongInformational 11Details
Commit message · Lagrang3

askrene: add new functions to refine flows

Try a new way to refine flows,
ie. reduce excess due to MCF accuracy and HTLC max constraints
after hop amounts are computed with fees included.

Changelog-None.

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

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 11/100

This commit adds new internal helper functions to the askrene routing plugin in Core Lightning. The code is designed to refine payment routes after they are computed, trimming them so they respect per-hop HTLC maximums, liquidity limits, and exact fees. There is no indication in the commit that this fixes a security vulnerability; it reads as a normal feature or accuracy improvement to the routing algorithm.

Lower-priorityaskrene: refine: remove flows with HTLC min faultsby Lagrang3 · f4f8ea08 · Aug 8, 2025 · 1 fileMessage 65 · AdequateLow 35Details
Commit message · Lagrang3

askrene: refine: remove flows with HTLC min faults

Changelog-None

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

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

This change improves the Lightning payment routing plugin 'askrene' by removing proposed payment routes that would violate each channel's minimum HTLC (payment) amount. Previously, the refinement step only checked maximum deliverable amounts and zero-amount flows, but could leave in routes where the delivered amount is below a channel's htlc_min. This patch adds a minimum-deliverable calculation and filters out such invalid flows. It is a correctness/hardening fix rather than a clear exploit, but invalid routes could cause payment failures or unexpected node behavior.

Lower-priorityaskrene: refine: expose some of the refine APIby Lagrang3 · 3a0d0da5 · Aug 8, 2025 · 2 filesMessage 60 · AdequateInformational 12Details
Commit message · Lagrang3

askrene: refine: expose some of the refine API

that can be useful for us in the mcf.c main loop.

Changelog-None

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

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

This commit is a routine internal code reorganization in Core Lightning's routing plugin (askrene). It exposes some helper functions and adds new utilities for merging duplicate payment routes and checking route constraints. There is no indication of a security fix or vulnerability being patched.

Lower-prioritydocs: Updated Connection URI doc to clearify certs orderby ShahanaFarooqui · 1fb442a9 · Aug 8, 2025 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · ShahanaFarooqui

docs: Updated Connection URI doc to clearify certs order

Changelog-None.

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

This commit only rewords a documentation sentence to make clearer the order in which three certificate pieces should be combined. No code, configuration, or security behavior changed.

Lower-prioritychannel: Fix channel state max valueby Dusty Daemon · 39451c00 · Aug 7, 2025 · 1 fileMessage 45 · ThinInformational 23Details
Commit message · Dusty Daemon

channel: Fix channel state max value

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

This commit corrects a C header file constant called CHANNEL_STATE_MAX so that it points to the last entry in the channel-state list. Previously it pointed to an older, no-longer-last state. This kind of off-by-one bookkeeping bug can cause array overruns or missing state handling in code that uses the constant to size loops or tables, but the diff itself only changes one macro and does not show any actual crash or exploit path.

Lower-prioritychannel: Add test for channel state maxby Dusty Daemon · 9215653c · Aug 7, 2025 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Dusty Daemon

channel: Add test for channel state max

Adds a test so CI will fail if CHANNEL_STATE_MAX isn’t updated when new channel states are added.

Changelog-None

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit adds a new automated test to the Core Lightning project. The test checks that a project-wide constant called CHANNEL_STATE_MAX correctly reflects the highest numbered channel state. If a developer adds a new channel state but forgets to update the constant, the test will fail in continuous integration. It is a defensive code-quality change, not a fix for an active security issue.