Commit Graph
20133 Commits
Author SHA1 Message Date
ziggie 99eceba7a5 scripts: switch verify-install.sh from curl to wget
Replace curl with wget for downloading release manifests and
signatures in verify-install.sh. wget handles redirects, retries, and
error reporting more robustly by default, which avoids silent download
failures that caused misleading "Invalid signature!" errors.

Also add error checking to all download calls so failures are reported
immediately with the URL that failed, and log which signature file and
user failed gpg verification.
2026-02-13 10:35:11 +01:00
ziggie b7c4755934 scripts: log failing signature details in verify-install
When gpg --verify fails, include the signature filename, username,
and full GPG output in the error message. Previously only a generic
"Invalid signature!" was printed, making it hard to identify which
signer's signature was invalid.
2026-02-13 10:35:11 +01:00
ziggie 5e3d608761 ci: add verify-release workflow
Add a workflow that triggers when a release is published. It runs
verify-install.sh inside the official Docker image to validate
signatures and binary hashes. If verification fails, the release
is automatically set back to draft.
2026-02-13 10:35:11 +01:00
Olaoluwa Osuntokun b3e37edfae Merge pull request #10563 from Roasbeef/go-1-25
build+docs: bump minimum Go version to 1.25.5
2026-02-11 14:55:30 -08:00
ziggieXXX 3267fec34a Merge pull request #10536 from starius/unlock-wait
lncli unlock: wait until daemon can unlock
2026-02-11 17:28:55 +01:00
ziggieXXX 17b956d320 Merge pull request #10559 from lightningnetwork/elle-issue-dedupe
.claude+.github: add issue dedupe workflow
2026-02-11 14:29:04 +01:00
Elle Mouton 7baead7183 multi: add issue dedupe command and workflow
- add /dedupe command definition for Claude Code
- add workflow to run dedupe on issue opened
- add comment helper script for posting duplicates
2026-02-11 13:06:42 +02:00
Yong e53c4b1de5 Merge pull request #10465 from ziggie1984/bugfix/fix-peer-disconnect-log
peer: fix log output when not applicable
2026-02-11 11:41:20 +08:00
Olaoluwa Osuntokun ba1fb50380 build+docs: bump minimum Go version to 1.25.5
With Go 1.26 now released, this bumps the minimum required Go version
from 1.24.11 to 1.25.5 across all go.mod files and updates the
installation documentation with the correct download links and SHA256
hashes for Go 1.25.5 binaries.

The build system (Dockerfiles, Makefile, CI) was already using Go 1.25.5,
so this change aligns the go.mod minimum version to match.
2026-02-10 12:54:10 -08:00
Olaoluwa Osuntokun 83163a0fe7 Merge pull request #10553 from lightningnetwork/claude-chill
ci: reduce pr-severity bot comment spam
2026-02-10 09:54:25 -08:00
Olaoluwa Osuntokun 3807c6c563 Merge pull request #9820 from lightningnetwork/actor
actor: add new package for structured concurrency based on the Actor model
2026-02-09 17:02:02 -08:00
Olaoluwa Osuntokun 8781daa995 actor: add README.md
In this commit, we add a readme which serves as a general introduction
to the pacakge, and also the motivation of the package. It serves as a
manual for developers that may wish to interact with the package.
2026-02-06 19:26:54 -08:00
Olaoluwa Osuntokun 7c9d72134c actor: add example files
In this commit, we add a series of examples that show how the package
can be used in the wild. They can be run as normal Example tests.
2026-02-06 19:26:54 -08:00
Olaoluwa Osuntokun 9ebd8d240d actor: add the actor system and router
In this commit, we add the actor system (along with the receiptionist)
and the router.

An actor can be registered with the system, which allows other callers
to locate it to send message to it via the receptionist. Custom routers
can be created for when there're actors that rely on the same service
key and also req+resp type. This can be used to implement something
similar to a worker pool.
2026-02-06 19:26:54 -08:00
Olaoluwa Osuntokun b055af6420 actor: add fundamental interfaces and concrete Actor impl
In this commit, we add the actual Actor implementation. We define a
series of types and interfaces, that in concert, describe our actor. An
actor has some ID, a reference (used to send messages to it), and also a
set of defined messages that it'll accept.

An actor can be implemented using a simple function if it's stateless.
Otherwise, a struct can implement the Receive method, and handle its
internal message passing and state that way.
2026-02-06 19:26:54 -08:00
Olaoluwa Osuntokun 3069829d61 actor: add Future[T] and Promise[T] w/ concrete impls
In this commit, we add two new fundamental data structures: Future[T]
and Promise[T].

A future is a response that might be ready at some point in the future.
This is already a common pattern in Go, we just make a type safe wrapper
around the typical operations: block w/ a timeout, add a call back for
execution, pipeline the response to a new future.

A promise is an intent to complete a future. Typically the caller
receives the future, and the callee is able to complete the future using
a promise.
2026-02-06 19:26:54 -08:00
Olaoluwa Osuntokun 90415aaa04 actor: add new actor package as distinct sub-module 2026-02-06 19:26:53 -08:00
ziggieXXX 14b90a27cf Merge pull request #10507 from hieblmi/wallet-tip
rpcserver: add `wallet_synced` to `GetInfoResponse`
2026-02-05 17:55:02 -05:00
Slyghtning 7766c1dd9a docs: add release notes for wallet_synced RPC field 2026-02-05 08:58:33 +01:00
Slyghtning b8693bea33 itest: add wallet_synced field integration test
In this commit, we add an integration test that verifies the
wallet_synced field in GetInfoResponse correctly reflects the wallet's
sync state.

The test creates a node, verifies wallet_synced becomes true after
initial sync, then stops the node and mines blocks while it's offline.
After restart, the test polls GetInfo to observe the wallet catching up,
ideally capturing the transition from wallet_synced=false to true.

The test is registered in the "wallet sync" test case group.
2026-02-05 08:58:33 +01:00
Slyghtning d39577682e rpcserver: populate wallet_synced in GetInfo response
In this commit, we extend the chainSyncInfo struct with a new
isWalletSynced field that tracks the wallet's sync state independently
from the composite isSynced field. The GetInfo RPC handler now populates
the WalletSynced response field from this new struct field.

A debug log line is added to GetInfo to help diagnose sync state issues,
showing both the composite sync status and the wallet-specific sync
status.

Currently isWalletSynced mirrors isSynced since both ultimately derive
from the same underlying wallet sync check. This prepares the plumbing
for future differentiation where wallet sync state could be tracked
separately from router and blockbeat dispatcher states.
2026-02-05 08:58:31 +01:00
Slyghtning 3c22c3e7fa lnrpc: add wallet_synced field to GetInfoResponse
In this commit, we add a new `wallet_synced` boolean field to the
GetInfoResponse message. This field exposes the wallet's internal sync
state with the backing chain source, providing visibility into whether
the wallet has caught up to the current chain tip.

This is distinct from the existing `synced_to_chain` field, which
represents a composite sync state that also considers the router and
blockbeat dispatcher. The new field allows callers to distinguish
between wallet sync delays and other subsystem sync states.
2026-02-05 08:45:53 +01:00
Olaoluwa Osuntokun 44c6cc5a1c Merge pull request #10530 from NishantBansal2003/gossip-race
discovery: fix race on remoteUpdateHorizon in GossipSyncer
2026-02-04 17:48:58 -08:00
Boris Nagaev d8f39fa1b4 docs/release-notes: add release notes entry 2026-02-04 15:21:03 -05:00
Boris Nagaev 593e8c01cf docs/release-notes: fix PR reference 2026-02-04 15:20:03 -05:00
Boris Nagaev 6cd785c751 lncli unlock: add unit tests
Add table-driven unit tests for unlock() that exercise success and error paths,
cover flag and arg handling.
2026-02-04 15:20:03 -05:00
Boris Nagaev e865552cc1 lncli unlock: wait until daemon can unlock
Use the StateService stream to wait for LOCKED before sending the unlock
request, then wait for UNLOCKED/RPC_ACTIVE before reporting success.
If the state shows the wallet is already unlocked, skip sending the
unlock request and return an error immediately.

This avoids lost unlocks during slow startup.
Fix https://github.com/lightningnetwork/lnd/issues/7749
2026-02-04 15:20:03 -05:00
Nishant Bansal caa24791be discovery: fix race on remoteUpdateHorizon in GossipSyncer
Guard access to remoteUpdateHorizon to prevent a race when
the gossiper is flushing a pending batch of announcements
while concurrently processing a GossipTimestampRange message
from a peer.

Signed-off-by: Nishant Bansal <nishant.bansal.282003@gmail.com>
2026-02-05 00:57:55 +05:30
Olaoluwa Osuntokun 5c7d3ad045 Merge pull request #10540 from morehouse/gossiper_shutdown_deadlock
discovery: fix gossiper shutdown deadlock
2026-02-04 10:32:15 -08:00
Olaoluwa Osuntokun 0871193cdf ci: reduce pr-severity bot comment spam
Only post a severity classification comment when the bot hasn't
commented before or when the severity actually changed. Previously
every push (synchronize event) would post a new comment even if the
classification was identical.

The prompt now instructs the classifier to:
- Check for existing bot comments via the pr-severity-bot marker
- Compare the new severity against the existing severity label
- Skip commenting if both match, while still ensuring labels are correct
- Include a severity changed banner when re-commenting due to a change
2026-02-04 10:02:53 -08:00
Yong eaa7bcf67a Merge pull request #10547 from gijswijs/fix-linter-for-worktrees
Fix linter in git worktrees
2026-02-04 20:26:06 +08:00
Olaoluwa Osuntokun 4d775457c5 Merge pull request #10550 from Roasbeef/fix-claude-again
ci: add tool constraints to pr-severity prompt
2026-02-03 21:45:46 -04:00
Yong 89b54abbc6 Merge pull request #10544 from ellemouton/updateBWCompatBaseVersion
scripts: update bw-compat test LND base version
2026-02-04 03:30:11 +08:00
Gijs van Dam 2643988524 make: fix linter in git worktrees
When running `make lint` in a git worktree, the diff processor fails
with "no version control repository found" because the Docker container
only mounts the worktree directory, not the main git directory that the
worktree's .git file references.

This causes golangci-lint's `new-from-rev` filter to not work, resulting
in all ~32k existing lint issues being reported instead of only newly
introduced ones.

Fix by detecting when we're in a worktree (.git is a file, not a
directory) and mounting the main .git directory into the container so
revgrep can access the git history.
2026-02-03 19:45:56 +01:00
Olaoluwa Osuntokun 7b93441814 ci: add tool constraints to pr-severity prompt
Claude keeps trying to use `gh api` to add severity labels, which gets
denied by the allowed tools restriction. Instead of retrying with the
permitted `gh pr edit --add-label` command, it silently gives up and
only posts the comment. The result is that severity comments appear on
PRs but the actual labels are never applied.

Add an explicit tool constraints section at the top of the prompt so
Claude knows upfront that only `gh pr view`, `gh pr edit`, and
`gh pr comment` are available.
2026-02-03 10:22:56 -08:00
Olaoluwa Osuntokun d332cb0761 Merge pull request #10529 from Roasbeef/fix-edge-features-decode-compat
graphdb: fix backwards-compat for channel edge feature deserialization
2026-02-03 13:12:26 -04:00
Olaoluwa Osuntokun 56a7f45b99 graphdb: fix backwards-compat for channel edge feature deserialization
This commit fixes a backwards compatibility issue that prevented nodes
from upgrading from v0.19.x to v0.20.x.

In v0.19.x, channel edge features were serialized as raw feature bytes
without a length prefix. In v0.20.x (commit 2f2845dfc), the serialization
changed to use Features.Encode() which adds a 2-byte big-endian length
prefix before the feature bits. The deserialization code was updated to
use Features.Decode() which expects this length prefix.

When v0.20.x reads a database created by v0.19.x, Decode() tries to read
a length prefix that doesn't exist, causing an EOF error:

    unable to decode features: EOF

The fix adds a deserializeChanEdgeFeatures() helper that detects which
format is being read and decodes accordingly:

- New format (v0.20+): First 2 bytes encode the length of the remaining
  bytes. Detected when uint16(bytes[0:2]) == len(bytes)-2.

- Legacy format (pre-v0.20): Raw feature bits without length prefix.
  Uses DecodeBase256 with the known length.

The format detection is safe because in the legacy format, the first byte
always has at least one bit set (the serialization uses minimum bytes),
so the first two bytes can never encode a value equal to len-2.

Fixes #10528.
2026-02-03 09:12:04 -08:00
Matt Morehouse 5fa025e9e7 docs: add release note 2026-02-03 09:15:34 -06:00
Matt Morehouse 21588acb3d discovery: fix gossiper shutdown deadlock
When processing a remote network announcement, it is possible for two
error messages to be sent back on the errChan.  Since Brontide doesn't
actually read from errChan, and since errChan only buffered one error
message, the sending goroutine would deadlock forever.  This would only
become apparent when the gossiper attempted to shut down and got hung
up.

For now, we can fix this simply by buffering up to two error messages on
errChan.  There is an existing TODO to restructure this logic entirely
to use the actor model, and we can do a more thorough fix as part of
that work.

This bug was discovered while doing full node fuzz testing and was
triggered by sending a specific channel_announcement message and then
shutting down LND.
2026-02-03 09:14:56 -06:00
Elle Mouton df0bd94b91 scripts: update bw-compat test LND base version
Update the backwards compat test to use lnd v0.20.0-beta as the base
version.
2026-02-03 17:06:24 +02:00
Yong 06b175a140 Merge pull request #10463 from hieblmi/fix-trickle
discovery: default trickledelay to 1 if less is set
2026-02-03 18:42:30 +08:00
Slyghtning 22feff6dbb docs: update release notes for gossip trickle delay validation 2026-02-02 20:48:01 +01:00
Slyghtning 4ef2019dd9 config: default TrickleDelay to 1ms if non-positive 2026-02-02 20:47:59 +01:00
Slyghtning dd29d5690f sqldb: close test db in cleanup 2026-02-02 18:51:39 +01:00
ziggieXXX 20a6b1726f Merge pull request #10532 from darioAnongba/fix/ignored-local-mark-coop
peer: fix MarkCoopBroadcasted to correctly use local parameter
2026-02-02 12:36:06 -05:00
Dario Anongba Varela 6e56c9a538 peer: fix MarkCoopBroadcasted to correctly use local parameter 2026-02-02 12:16:29 +01:00
Olaoluwa Osuntokun 7ccab028f0 Merge pull request #10531 from Roasbeef/claude-fix
workflows: fix Claude workflows for fork PRs and external contributors
2026-01-29 16:41:18 -04:00
Olaoluwa Osuntokun a77b9d9b89 workflows/pr-severity: allow non-write users for classification
The PR severity classifier was failing for external contributors because
the claude-code-action checks that the actor has write permissions. Since
this workflow only reads PR metadata via the API and doesn't execute any
code from the PR (and has restricted tool permissions), it's safe to allow
any user to trigger classification.
2026-01-29 15:57:18 -04:00
Olaoluwa Osuntokun bcb589cc9e workflows/claude: fix PR checkout for fork PRs
When a PR originates from a fork, the PR branch doesn't exist in the
origin remote. This adds a step that uses `gh pr checkout` before
running the Claude action, which properly handles fork PRs by adding
the fork as a remote and fetching the branch from there.
2026-01-29 13:30:41 -04:00
Olaoluwa Osuntokun 19b2ad7979 Merge pull request #10527 from Roasbeef/fix-pr-severity-fork-prs
workflows/pr-severity: use pull_request_target for fork PRs
2026-01-28 15:53:19 -04:00