LL
← All projectsLightning Labs

LND

Go implementation of a complete Lightning Network node.

BitcoinLightning NetworkNormal
Repository coverage

1386 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.

141security candidates194second-pass queue1285AI analyses
78commits · 30 days
173commits · 60 days
599commits · 180 days
1237commits · 365 days
Backfill bands
Aug 5 → Feb 6405 seen5 candidatesComplete
Feb 6 → Jun 6665 seen28 candidatesComplete
Jun 6 → Jul 689 seen4 candidatesComplete
Jul 6 → Aug 569 seen0 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.

67/100 average clarity
318Strong · 80–100
646Adequate · 60–79
391Thin · 40–59
31Opaque · 0–39
1security candidate with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Olaoluwa Osuntokun20942204474
Elle Mouton26832268167
ziggie44416413165
Yong28513171
LNBiG111173
Jared Tobin909171
bitromortac531051069
yyforyongyu83861068
Erick Cestari26726070
Andras Banki-Horvath11311072
Gijs van Dam33230073
ziggieXXX2026070
Analysis record

Published AI watches

Last scanned 29 minutes ago

Moderate 62 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11212 from ziggie1984/disable-legacy-channels

This change stops LND from opening new Lightning channels using the old 'legacy' commitment format. The legacy format makes it harder to recover funds if something goes wrong, because the money owed to you is tied to a secret key that chan…

Prevents opening new channels with the legacy commitment type, whose tweaked to_remote output complicates data-loss recoveryCloses a negotiation path where an empty channel_type TLV bypassed feature checks and forced a legacy channelAdds explicit RPC and wire rejection with a dedicated error code
112cb5f3by ziggieXXX+265−4716 files
Vendor flagged security relevance
Moderate 56 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11223 from gijswijs/legacy-dust-retribution-fix

This update fixes a bug in how LND handles old-style punishment transactions when a channel partner tries to cheat. Previously, tiny (dust) HTLCs were left as blank placeholder entries in the punishment data, which could cause the node to …

nil-pointer dereference risk in breach retribution pathlegacy revocation log handling inconsistency with modern formatdefensive hardening added for trimmed/dust HTLCs
500ca51fby ziggieXXX+168−146 files
No security note in commit
Moderate 62 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11190 from Roasbeef/zpay32-reject-duplicate-payment-hashes

This change tightens how LND reads Lightning invoices (BOLT 11). Previously, if an invoice contained more than one payment hash field, LND would silently keep the first one and ignore the rest. Now it rejects the invoice entirely. The rele…

Behavior change from 'use first duplicate field' to 'reject duplicate fields'New error type ErrDuplicatePaymentHash returned on duplicate payment hash fieldsMalformed/unsupported-length duplicate payment hash now treated as duplicate and rejected
86306f89by Yong+147−106 files
No security note in commit
Moderate 62 AI analysisMessage 98 · Strong
LL Lightning LabsLND BitcoinLightning Network

zpay32: reject duplicate payment hash fields

This change tightens how LND reads Lightning invoices. Previously, if an invoice contained more than one payment hash field, LND would silently keep the first valid one and ignore the rest. Now it rejects such invoices outright. This preve…

Behavioral change from silent first-field acceptance to explicit rejection of duplicate payment hash fieldsPrevents invoice parsing from depending on field ordering when multiple payment hashes are presentCovers malformed first field + valid second field, closing a potential bypass
e2f27063by Olaoluwa Osuntokun+147−106 files
Vendor flagged security relevance
Moderate 53 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11132 from yyforyongyu/task-11129-pong

This change fixes how LND answers network 'ping' messages from other Lightning nodes. Previously, LND would sometimes silently ignore valid pings to limit reply traffic, which violates the Lightning protocol (BOLT 1) and could make a peer …

Protocol compliance fix: BOLT 1 requires a Pong for every valid PingRemoved silent suppression of Pong replies that could cause peer timeout/misbehaviorUnified rate limiting now accounts for amplification bandwidth, not just ping count
d3d1f1d0by Olaoluwa Osuntokun+274−1715 files
Vendor flagged security relevance
Low 33 AI analysisMessage 90 · Strong
LL Lightning LabsLND BitcoinLightning Network

itest: stop creating legacy channels

This commit updates LND's integration tests to stop using an obsolete 'legacy' channel type and adds a test confirming that LND now rejects that legacy type. The commit message says the real fix is elsewhere in the same pull request: previ…

Deprecated commitment format (legacy) is now rejected by RPCTest added to verify legacy channel type is refusedUnused legacy node configuration flag removed
03d8b09dby ziggie+24−85 files
No security note in commit
Moderate 60 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11198 from gijswijs/amp-setlocal-reconstruction-fix

This change fixes a bug in LND's handling of AMP (Atomic Multi-Path) payments. Previously, if one partial payment set failed to reconstruct its secret preimage, the entire invoice was canceled, including unrelated partial payment sets from…

Denial-of-service against reusable static AMP invoices by causing unrelated accepted HTLC sets to be canceledIncorrect invoice state transition from set-local failure to global invoice cancellationAvailability impact on multi-payer AMP invoice scenarios
88959aecby Olaoluwa Osuntokun+155−44 files
Vendor flagged security relevance
Low 29 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11200 from ziggie1984/build-go-1.27.1

This commit updates the Go programming language version used to build LND from 1.25.13/1.26.6 to 1.26.8 (language version) and 1.27.1 (toolchain). It also regenerates many automatically generated RPC files and adjusts linter settings. The …

Go version bump may indirectly address unlisted runtime/standard-library security fixesLarge regenerated protobuf files suggest dependency/toolchain refresh rather than logic changeLinter configuration expanded to suppress new checks, consistent with a toolchain upgrade
ef4820e5by Olaoluwa Osuntokun+4932−412670 files
No security note in commit
Informational 15 AI analysisMessage 92 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: adopt focused golangci-lint v2.13 checks

This commit is a routine build-maintenance change. It updates the project's Go linter configuration to a newer version and fixes the resulting style warnings: a WebSocket header spelling and several documentation comments that didn't start…

bada7ea3by ziggie+27−1911 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
LL Lightning LabsLND BitcoinLightning Network

lnrpc: regenerate protos with Go 1.27

This commit is a housekeeping change that regenerates automatically generated RPC binding files using a newer Go compiler version. The only differences are in code comments (doc-comment formatting), not in actual program logic or API behav…

dd523108by ziggie+4501−369826 files
No security note in commit
Informational 20 AI analysisMessage 100 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: fix Go 1.27 compatibility

This commit is a routine build-and-test maintenance patch to make the LND codebase compile and pass tests with the upcoming Go 1.27 release. It upgrades the project's custom linter tool, refreshes many indirect tool dependencies, adjusts o…

No production code changesNo vulnerability fix or CVE reference presentDependency-only refresh in tools module (development tooling)
6b54a387by ziggie+365−3706 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: bump Go language and toolchain versions

This commit is a routine maintenance update that changes which version of the Go programming language is used to build the lnd project. It does not change any application logic, fix a bug, or address a security vulnerability. The project i…

b1f9ca66by ziggie+39−3930 files
No security note in commit
Moderate 60 AI analysisMessage 83 · Strong
LL Lightning LabsLND BitcoinLightning Network

invoices: cancel only the failing AMP set on reconstruction failure

This commit fixes a bug in LND's invoice handling for reusable AMP (Atomic Multi-Path) invoices. Previously, if one payment set failed to reconstruct its preimage, the entire invoice was canceled, even though other valid payment sets on th…

Denial-of-service-like availability impact: a malicious or buggy payer could cause a whole reusable AMP invoice to be canceled, blocking legitimate concurrent payersSet-local failure incorrectly escalated to invoice-global cancellationRegression test added for concurrent-set survival after reconstruction failure
d74ab6faby Gijs van Dam+141−42 files
No security note in commit
Low 34 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11061 from bitromortac/2604-bolt12-1f

This commit adds the missing cryptographic signature layer for BOLT 12 offers in LND. It builds a Merkle tree from the message fields, signs that tree with a BIP-340 Schnorr signature, and now rejects invoice requests and invoices whose si…

Adds BIP-340 Schnorr signature verification for BOLT 12 invoice_request and invoice messagesMerkle tree commits to canonical re-encoded TLV records; non-minimal feature/amount encodings now rejected to preserve byte-exactnessSignature TLV type 240 and reserved range 240-1000 excluded from the signed Merkle root
1049d301by Yong+2076−7815 files
Vendor flagged security relevance
Low 35 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11125 from bhandras/codex/reorg-aware-output-lock-20260825

This commit adds a new optional wallet feature to LND that lets users lock UTXOs until the transaction spending them reaches a chosen confirmation depth, instead of relying on a wall-clock timeout. It is a feature addition with safety chec…

New RPC fields release_after_spend_confs and confirmed_spend_height added to LeaseOutput and FundPsbtCustom lock ID enforced as required for confirmation-controlled FundPsbt leases; all-zero and reserved internal IDs rejectedCapability check (ResolveOutputLeaser) prevents silent downgrade to time-only lease when confirmation control is requested
80dde144by Yong+1293−10021 files
No security note in commit
Informational 19 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #10812 from ziggie1984/chanstate-kv-store-move

This commit is a large internal code reorganization for the LND Lightning node. It moves channel state storage logic from the `channeldb` package into a new `chanstate` package, while keeping the same database keys, serialization formats, …

Large refactoring with no change to cryptographic or consensus-critical logicCodec serialization moved verbatim to new package; wire format unchangedDatabase bucket keys and TLV record types preserved
62b0a073by Olaoluwa Osuntokun+3923−310924 files
No security note in commit
Low 25 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #10804 from GeorgeTsagk/close-immediately-itest-lnd-7c38

This change fixes a data-handling bug in LND's channel-opening code. When opening a Lightning channel using an optional 'auxiliary funding controller' (used for custom channel types such as Taproot Assets), the funding manager was previous…

Data-correctness fix in funding handshake: negotiated channel configs now exposed to auxiliary funding controllerAuxiliary funding controller receives incomplete channel state before patch, complete state after patchNo explicit security claim, CVE, or advisory referenced in commit or supplied materials
1e127653by Olaoluwa Osuntokun+291−254 files
No security note in commit
Moderate 60 AI analysisMessage 88 · Strong
LL Lightning LabsLND BitcoinLightning Network

bolt12: verify invoice_request and invoice signatures on read

This change makes LND's BOLT 12 invoice and invoice-request reader actually check that the digital signature is valid, instead of only checking that a signature field exists. Before, an attacker could craft or modify a BOLT 12 message and …

Missing cryptographic verification on parsed BOLT 12 messages replaced with BIP-340 Schnorr signature verificationReader accepted any 64-byte placeholder signature before the patchNew negative tests verify rejection of wrong-signer and tampered Merkle-root fields
aa8bd19fby bitromortac+272−723 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 78 · Adequate
LL Lightning LabsLND BitcoinLightning Network

itest: cover confirmation-controlled leases

This commit only adds a new integration test for an existing feature called confirmation-controlled leases. It does not change production code, so it cannot introduce a security vulnerability or fix one directly. The test exercises how lon…

a1ab4e92by Andras Banki-Horvath+152−02 files
No security note in commit
Moderate 68 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11122 from gijswijs/websocket-proxy-hardening

This update fixes two security-related bugs in LND's REST WebSocket proxy. First, a specially crafted WebSocket protocol header could crash the proxy (a panic). Second, the proxy previously had no limit on how large an incoming WebSocket m…

panic fix in request header parsingunbounded incoming WebSocket message read now cappedincorrect header value assignment possible before fix
c662f853by Yong+227−104 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

AI review queuedmod: bump prometheus client dependencyby ziggie · 8b7ededa · Jun 9, 2026 · 2 filesMessage 68 · AdequateLow 27Details
Commit message · ziggie

mod: bump prometheus client dependency

Bump the direct Prometheus client_golang dependency to v1.23.2 and let
MVS select the newer common, procfs, and client_model modules required
by that release.

The newer Prometheus graph no longer references
github.com/prometheus/common v0.4.1, which was the remaining path that
caused go mod tidy to retain the github.com/gogo/protobuf v1.1.1 go.mod
checksum after removing the redundant gogo/protobuf replace.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Low 27/100

This commit updates the Prometheus metrics library and several related Go module dependencies to newer versions. It is a routine dependency maintenance change, not a code-level security fix. The commit message does not describe any specific vulnerability being patched, and the diff only changes dependency version pins in go.mod and go.sum. While newer dependency versions can indirectly improve security by removing old, potentially vulnerable transitive packages, there is no direct evidence in the commit that this fixes a known security issue.

AI review queuedkvdb: bump prometheus client dependencyby ziggie · 316a2dfa · Jun 9, 2026 · 2 filesMessage 68 · AdequateInformational 18Details
Commit message · ziggie

kvdb: bump prometheus client dependency

Bump the nested kvdb module's Prometheus client dependency to v1.23.2
and let MVS select the newer common, procfs, and client_model versions
required by that release.

This removes the old Prometheus common v0.4.1 graph edge that referenced
github.com/gogo/protobuf v1.1.1, matching the root module cleanup.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 18/100

This commit updates the Prometheus monitoring library used inside the kvdb sub-module of LND. It is a routine dependency refresh that removes an old transitive dependency on an outdated version of gogo/protobuf. There is no direct code change, no disclosed vulnerability being fixed, and no indication this patch itself introduces a security problem.

AI review queuedmod: bump protobuf hex display forkby ziggie · 3f3718ca · Jun 9, 2026 · 19 filesMessage 68 · AdequateInformational 17Details
Commit message · ziggie

mod: bump protobuf hex display fork

Update google.golang.org/protobuf to v1.36.11 and point the replace
directive at the matching lightninglabs/protobuf-go-hex-display
v1.36.11-hex-display tag.

This keeps the fork aligned with the latest upstream protobuf-go release
while preserving the UseHexForBytes option used by the CLI JSON marshal
and unmarshal paths.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit is a routine dependency update. It bumps the project's custom protobuf (protocol buffer) code generator fork from version 1.33.0 to 1.36.11 of the upstream Google library, while keeping a Lightning Labs-specific tweak that displays raw bytes as hexadecimal in CLI JSON output. The only code changes are regenerated version strings in generated files; no application logic was modified.

AI review queuedmod: remove redundant gogo protobuf replaceby ziggie · ee7c48d2 · Jun 9, 2026 · 2 filesMessage 68 · AdequateInformational 12Details
Commit message · ziggie

mod: remove redundant gogo protobuf replace

The main module already requires github.com/gogo/protobuf v1.3.2, which
is the fixed and latest tagged version. Go's MVS continues to select
v1.3.2 without the self-replace, so the replace no longer changes the
effective dependency version.

Running go mod tidy records an older transitive go.mod checksum, but go
list still resolves github.com/gogo/protobuf to v1.3.2.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 12/100

This commit removes a now-unnecessary override in the project's dependency file. The override was originally added to force the use of a fixed version of the gogo/protobuf library, but the project already directly requires that fixed version, so the override had no practical effect. The effective dependency version remains unchanged, and no security-relevant behavior changes.

AI review queuedbuild: bump Go versionsby ziggie · 92e29a42 · Jun 8, 2026 · 30 filesMessage 40 · ThinLow 34Details
Commit message · ziggie

build: bump Go versions

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
second-pass: unusually broad change
AI analysis · Low 34/100

This commit simply updates the Go compiler and toolchain versions used to build LND from 1.25.10/1.26.3 to 1.25.11/1.26.4 across many configuration files, Docker images, and documentation. It contains no direct code changes. Such patch-level Go bumps are typically routine maintenance that may include upstream security fixes in the Go runtime, but the commit itself does not describe any specific vulnerability or attack.

AI review queuedlint: fix wastedassign issues in test filesby Erick Cestari · f1b34b81 · Jun 3, 2026 · 11 filesMessage 55 · ThinInformational 15Details
Commit message · Erick Cestari

lint: fix wastedassign issues in test files

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only cleans up test files by removing unused variable assignments and adding one missing error check. It does not change any production code that runs on real Lightning nodes, so it cannot directly affect live funds, network behavior, or security.

AI review queuedlint: enable wastedassign linterby Erick Cestari · d680013b · Jun 3, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Erick Cestari

lint: enable wastedassign linter

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

This commit simply turns on a code-quality linter called 'wastedassign' in the project's linting configuration. It does not change any application code, fix a bug, or alter runtime behavior. There is no security relevance.

AI review queuedlint: fix wastedassign issues in non-test filesby Erick Cestari · d9355bbe · Jun 3, 2026 · 3 filesMessage 55 · ThinInformational 15Details
Commit message · Erick Cestari

lint: fix wastedassign issues in non-test files

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit removes unused variable assignments that were flagged by a Go linter. In two command-line handlers, it stops advancing an argument list that is never read again. In a Lightning channel function, it simplifies a swap to only assign the value that is actually used. There is no visible security relevance: no behavior changes, no bug fixes, and no disclosed vulnerability.

AI review queuedlint: enable copyloopvar and remove redundant loop var copies in non-test filesby Erick Cestari · c324b518 · Jun 3, 2026 · 25 filesMessage 83 · StrongInformational 15Details
Commit message · Erick Cestari

lint: enable copyloopvar and remove redundant loop var copies in non-test files

Since Go 1.22 loop variables are scoped per-iteration, so the
`x := x` / `a, b := a, b` copies inside range/for loops are no longer
needed. This enables the `copyloopvar` linter so these are caught
automatically and removes the existing redundant copies in non-test
files.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a routine code cleanup: it removes 53 lines of the form `x := x` inside Go loops and enables a linter to prevent them in the future. Since Go 1.22, loop variables are already scoped per-iteration, so these copies were unnecessary. The change does not alter program behavior or fix any security bug.

AI review queuedpaymentsdb: add FetchInFlightPayments benchmarkby yyforyongyu · 90a41046 · Jun 3, 2026 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · yyforyongyu

paymentsdb: add FetchInFlightPayments benchmark

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

This commit only adds new benchmark test files for measuring how fast the code can list currently unfinished Lightning payments from the database. It does not change any production code, user-facing behavior, or security-sensitive logic. There is nothing here that could be exploited or that weakens security.

AI review queuedbolt12: validate Offer per BOLT 12 reader/writer requirementsby bitromortac · 0cf82818 · Jun 3, 2026 · 6 filesMessage 73 · AdequateModerate 59Details
Commit message · bitromortac

bolt12: validate Offer per BOLT 12 reader/writer requirements

ValidateOfferRead and ValidateOfferWrite enforce the codec-side portion
of the BOLT 12 offer reader and writer requirements. Reader rules cover
TLV range, even-feature-bit rejection, chain mismatch, dependency rules
between offer_amount/description/currency, missing issuer identity,
zero-hop blinded paths, and offer expiry. Writer rules mirror the same
dependency and identity guards plus a defense-in-depth empty-
offer_chains rejection.

offer_currency is validated against the ISO 4217 registry via
golang.org/x/text/currency (now a direct dependency); offer_issuer_id is
verified to be an on-curve SEC1 compressed point on both read and write
paths. Encode invokes Validate so invalid bytes never reach the wire.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validationsecond-pass: broader security terminology
AI analysis · Moderate 59/100

This commit adds input validation to BOLT 12 offers in the LND Lightning node. BOLT 12 offers are payment requests that one node can present to another. Before this change, LND could accept or re-encode malformed offers that violated the protocol rules, such as offers with no usable payment path, expired offers, invalid currency codes, or hidden unknown required fields. The new code rejects these on both reading and writing, which helps prevent nodes from acting on bad offers or producing invalid ones.

AI review queuedbolt12: add Offer message struct with TLV codecby bitromortac · bc208958 · Jun 3, 2026 · 6 filesMessage 68 · AdequateInformational 12Details
Commit message · bitromortac

bolt12: add Offer message struct with TLV codec

The Offer struct models a long-lived, reusable BOLT 12 payment template.
It defines TLV fields as optional records and exposes Encode/DecodeOffer
for round-trip serialization. The struct implements
lnwire.PureTLVMessage; AllRecords filters the decoded TypeMap through
bolt12InUnsignedRange to derive any signed-range extras the encoder must
re-emit, keeping offer_id and the Merkle root stable across encoders
that understand a wider set of even/odd extensions.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit adds new code for encoding and decoding BOLT 12 'offers' in the LND Lightning node. It is a feature-introduction commit with no bug fix or security patch. There is no direct evidence in the commit or supplied references that this change fixes a vulnerability or introduces one.

AI review queuedbuild: bump Go version to 1.26.3by ziggie · d3dad169 · May 26, 2026 · 29 filesMessage 57 · ThinInformational 24Details
Commit message · ziggie

build: bump Go version to 1.26.3

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
second-pass: unusually broad change
AI analysis · Informational 24/100

This commit updates the Go compiler/toolchain version used to build the LND Lightning node from Go 1.25.5 to Go 1.26.3, and bumps the minimum Go language version declared in module files from 1.25.5 to 1.25.10. It also swaps one Windows release target from 32-bit ARM to 64-bit ARM. There is no code change to LND itself. The main security relevance is that newer Go patch releases typically fix bugs and security vulnerabilities in the Go runtime and standard library, so staying current is good defensive hygiene. However, the commit message does not say this is a security fix, and no specific vulnerability is named.

AI review queuedcontractcourt+itest: tests for coop close insta-dispatchby Olaoluwa Osuntokun · eaa2d682 · May 21, 2026 · 5 filesMessage 83 · StrongLow 39Details
Commit message · Olaoluwa Osuntokun

contractcourt+itest: tests for coop close insta-dispatch

In this commit, we add three focused unit tests in contractcourt
plus an itest that exercises the regression end-to-end.

The chain watcher harness gains an opt-in early-dispatch capture that
records every notifyEarlyCoopClose invocation so tests can assert how
many fired and what summaries they carried. On top of that:

TestEarlyDispatchCoopClose verifies the headline behavior. An
async-path coop close fires exactly one early dispatch with
IsPending=true and the post-N-conf flow still produces the regular
CooperativeCloseInfo downstream.

TestEarlyDispatchForceCloseNotInvoked guards the carve-out: force
closes never fire the early dispatch since their CLOSED_CHANNEL
event timing is intentionally unchanged.

TestEarlyDispatchReorgRefiresOnReReplacement nails down the reorg
path. Once a deep reorg removes the close, the early-dispatch flag
is cleared and the next coop close re-fires the early event with its
own summary, so a subscriber observes each distinct close attempt.

testZeroConfCoopCloseSubscribeEvents brings up a zero-conf channel
between Alice and Bob with --dev.force-channel-close-confs=3 so the
chain watcher takes the async multi-confirmation path. Alice
subscribes to channel events, initiates a cooperative close, and the
test asserts that CLOSED_CHANNEL fires after only one confirmation
of the close tx (not after the full three) and that
FULLY_RESOLVED_CHANNEL arrives once the close has reached three
confirmations. A quiet-window assertion at the end verifies that
exactly one CLOSED_CHANNEL event is delivered. If the suppression in
MarkChannelClosed broke and let it re-fire NotifyClosedChannel at N
confs, this assertion would catch the duplicate.

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
second-pass: broader security terminology
AI analysis · Low 39/100

This commit is a follow-up test and release-note patch for a previously fixed LND bug. The underlying issue was that subscribers listening for channel close events would not receive the 'CLOSED_CHANNEL' notification until a cooperative close transaction had been buried several blocks deep, instead of being told immediately when the close first appeared on-chain. The commit itself only adds unit tests and an integration test that prove the fix works, plus a release-note entry describing the restored behavior. It does not change production code, so it cannot introduce a new exploitable vulnerability on its own.

AI review queuedchancloser: remove dead ChannelFlushed.FreshFlush fieldby Jared Tobin · c5f3ad33 · May 14, 2026 · 3 filesMessage 83 · StrongInformational 15Details
Commit message · Jared Tobin

chancloser: remove dead ChannelFlushed.FreshFlush field

FreshFlush is never read in any transition handler. The only
producer (peer/brontide.go) sets it unconditionally to true,
and after the previous commit removed expectChanPendingClose,
the test loops that iterated over {true, false} no longer
differentiate between the two values.

Remove the field, the unconditional assignment, and collapse
the test loops into single sub-tests.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit removes an unused data field called FreshFlush from the cooperative channel-closing logic. The field was always set to true and never actually checked by any code, so deleting it is a cleanup change with no security effect.

AI review queuedchancloser: add nil-tx guard to legacy close testby Jared Tobin · ef7e084d · May 14, 2026 · 1 fileMessage 98 · StrongInformational 22Details
Commit message · Jared Tobin

chancloser: add nil-tx guard to legacy close test

Add call tracking to the legacy mockChannel so that every
MarkCoopBroadcasted invocation is recorded. TestTaprootFastClose
now asserts that at least one call was made and that every call
carried a non-nil tx, guarding against the limbo state described
in https://github.com/lightninglabs/taproot-assets/issues/2108.

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 22/100

This commit only changes a test file. It adds a safety check to make sure a function called during cooperative channel closes is always given a real transaction, not a blank one. The test now records every call and fails if any call has a nil transaction. It does not change the actual production code that users run, so it cannot by itself fix or introduce a live bug.

AI review queuedchancloser: remove MarkCoopBroadcasted(nil) callsby Jared Tobin · 711a4a40 · May 14, 2026 · 9 filesMessage 80 · StrongLow 46Details
Commit message · Jared Tobin

chancloser: remove MarkCoopBroadcasted(nil) calls

Remove the two call sites that set ChanStatusCoopBroadcasted
before a cooperative close transaction exists:

- BeginNegotiation in the legacy close path (chancloser.go)
- ChannelFlushed handling in the RBF close path
(rbf_coop_transitions.go)

Both calls passed nil as the close tx, creating a "limbo" state
where ChanStatusCoopBroadcasted is set but no close transaction
is stored. This is unnecessary because ShutdownInfo — persisted
earlier by MarkShutdownSent in initChanShutdown / the RBF
ShutdownPending transition — already serves as the durable
signal that the shutdown flow was entered.

ChanStatusCoopBroadcasted should only be set when a real close
transaction exists, which this change preserves.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 46/100

This commit cleans up how LND records that a Lightning channel is being closed cooperatively. Previously, the code would mark a channel as 'cooperatively closed' before an actual closing transaction existed, storing a placeholder 'nil' transaction. That created a confusing in-between state in the database. The change removes those premature marks and now requires a real, non-nil closing transaction before the status is set. It also updates restart logic so the node can still recover an unfinished close from other stored information. The commit is defensive hardening rather than a fix for an active exploit.

AI review queuedsqldb/v2: use pgx/v5/pgconn instead of standalone pgconnby Boris Nagaev · 548233fb · May 14, 2026 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Boris Nagaev

sqldb/v2: use pgx/v5/pgconn instead of standalone pgconn

In pgx v5, the pgconn package was absorbed into the main pgx module.
Update imports from github.com/jackc/pgconn to
github.com/jackc/pgx/v5/pgconn and remove the now-unnecessary
standalone pgconn dependency from go.mod.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This is a routine dependency cleanup. The project was using a standalone PostgreSQL connection helper package (pgconn) that has been merged into the main pgx database driver package in version 5. The change updates two source files to import pgconn from its new location and removes the old standalone package from the module files. There is no functional code change and no security fix or vulnerability introduced.

AI review queuedsqldb: use pgx/v5/pgconn instead of standalone pgconnby Boris Nagaev · e9b422f7 · May 14, 2026 · 4 filesMessage 73 · AdequateInformational 18Details
Commit message · Boris Nagaev

sqldb: use pgx/v5/pgconn instead of standalone pgconn

In pgx v5, the pgconn package was absorbed into the main pgx module.
Update imports from github.com/jackc/pgconn to
github.com/jackc/pgx/v5/pgconn and remove the now-unnecessary
standalone pgconn dependency from go.mod.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 18/100

This is a routine dependency cleanup. The project switched from a standalone PostgreSQL connection package to the version bundled inside the newer pgx v5 library. Only import paths and the dependency list changed; no program logic was modified. There is no indication this fixes or introduces a security vulnerability.

AI review queuedmod: bump neutrino dependencyby ziggie · 80d04a50 · May 12, 2026 · 2 filesMessage 35 · OpaqueInformational 6Details
Commit message · ziggie

mod: bump neutrino dependency

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

This commit only updates a dependency version number in LND's package list (go.mod and go.sum). It bumps the 'neutrino' library from version 0.16.2 to a newer pre-release snapshot. The commit itself contains no code changes, no description of why the update is needed, and no mention of security issues. Without seeing what actually changed inside the neutrino library, we cannot tell whether this is a routine maintenance update or a security fix.

AI review queuedlnrpc: depend on chanstate Storeby ziggie · 186ea36f · May 12, 2026 · 4 filesMessage 68 · AdequateInformational 15Details
Commit message · ziggie

lnrpc: depend on chanstate Store

Replace concrete ChannelStateDB fields in the invoices and wallet RPC
configs with chanstate.Store, and update the subserver dependency
wiring to pass the interface. The affected RPC paths only need
channel-state store methods for hop hints and waiting-close channel
queries.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a small internal refactoring change. It swaps out a specific database type for a narrower interface in a few RPC configuration structs. There is no user-facing behavior change, no bug fix, and no security-relevant change visible in the diff.

AI review queuedcontractcourt: use chanstate Store in breach arbby ziggie · 8f10cf54 · May 11, 2026 · 1 fileMessage 68 · AdequateInformational 17Details
Commit message · ziggie

contractcourt: use chanstate Store in breach arb

Replace BreachConfig's concrete ChannelStateDB dependency with
chanstate.Store. The breach arbitrator only needs closed-channel reads
and MarkChanFullyClosed from the channel-state store.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 17/100

This is a small internal code cleanup change in LND's contract court. It swaps a broad database dependency for a narrower interface that only exposes what the breach arbitrator actually needs: reading closed channels and marking a channel fully closed. There is no direct security fix, new feature, or behavior change visible in the diff. It reduces the code's attack surface by limiting what the breach arbitrator can access, but the change alone does not close any known vulnerability.

AI review queuedpeer: depend on chanstate Storeby ziggie · d08b1b07 · May 11, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · ziggie

peer: depend on chanstate Store

Replace the peer config's concrete channel state DB dependency with
chanstate.Store. Brontide only needs channel lookups, closed-channel
lookup, and initial forwarding policy access from the channel-state
store.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup: it swaps a specific database type for a narrower interface in one part of the Lightning Network Daemon (LND). It does not change user-facing behavior, fix a bug, or alter security logic. There is no indication this is a security patch.

AI review queuedfunding: depend on chanstate Storeby ziggie · ae9de8d0 · May 11, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · ziggie

funding: depend on chanstate Store

Replace the funding manager's concrete *channeldb.ChannelStateDB
dependency with chanstate.Store. The manager only uses methods covered
by the store contract, including channel opening state and initial
forwarding policy persistence.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This is a small internal code cleanup in LND's funding manager. It replaces a direct dependency on a specific database type with a narrower interface (chanstate.Store). There is no functional change visible in the diff, no bug fix, and no security-relevant behavior change.

AI review queuedfunding: enforce BOLT-02 push_msat bound on fundeeby Erick Cestari · d5505498 · May 11, 2026 · 3 filesMessage 73 · AdequateLow 45Details
Commit message · Erick Cestari

funding: enforce BOLT-02 push_msat bound on fundee

Reject incoming OpenChannel messages where push_msat exceeds
1000 * funding_satoshis, as required by BOLT-02. The existing RejectPush
flag only gates on push_msat > 0 and does not cover the spec bound.

An over-sized push is eventually caught downstream in reservation.go when
theirBalance = capacity - fee - push_msat goes negative and
ErrFunderBalanceDust is returned. Rejecting it up front produces a
clearer, spec-aligned error and avoids the chanacceptor and commitment
type negotiation round-trips for a channel we will refuse anyway.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 45/100

This commit tightens validation in LND when another node asks to open a Lightning channel. It now rejects requests where the proposed 'push' payment is larger than the entire channel funding, as the Lightning protocol (BOLT-02) already requires. Before this change, such oversized pushes were only caught later in the process, after extra setup work. The change is a defensive hardening fix, not an active exploit patch, and the commit message frames it as spec compliance rather than a security vulnerability.