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.
Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.
This commit changes how the Lightning networking code handles oversized encrypted messages. Previously, certain conditions would cause the program to crash with a panic. Now the code returns errors instead, which is a defensive improvement…
panic-to-error conversion for oversized message encryption/decryptiondenial-of-service hardening against oversized peer messagesdebug_assert retained to preserve test coverage of invariant violations
This commit simply updates the 'repository' web links in 15 package metadata files from GitHub to a self-hosted Forgejo instance. It does not change any program code, build logic, dependencies, or security behavior. There is no security is…
This commit fixes a bug in the Lightning Dev Kit where, after a disconnection, a node could fail to retransmit a 'splice_locked' message to a peer that was still waiting for transaction signatures. Without this retransmission, the two peer…
Protocol state desynchronization between channel peers after reconnectionMissing retransmission of splice_locked for 0-conf splice channelsPotential channel unusability or stuck splice negotiation
This commit fixes a small accounting bug in how the Lightning wallet estimates the size (and therefore transaction fee) of a special Bitcoin transaction that sweeps funds back to the user after a channel closes. The old code always assumed…
debug assertion failure possible in development/testing buildstransaction weight/fee estimate overestimation up to 3 WUconstant replaced with per-descriptor length computation
This commit changes the project's internal code-review workflow. It stops automatically assigning a human reviewer when a pull request is opened; instead, contributors must manually click a button to request a reviewer after first addressi…
This commit fixes a bug in LDK's Lightning channel reconnection logic after a splice (a way to resize a channel's on-chain funds). If one peer had already received the splice signatures but the other had not, and then they disconnected and…
Protocol-state inconsistency on reconnection after splice signature exchangePotential channel stall/force-close due to quiescence not being exited before commitment updateFuzzer-discovered edge case in Lightning splicing retransmission
This commit adds a new option for Lightning invoice creators to explicitly tell payers not to use multi-path payments (MPP) when paying an invoice. It does not change any enforcement rules; it only changes what feature bits are advertised …
New API surface for feature advertisement controlExplicit documentation that the method does not enforce single-HTLC receipt, shifting enforcement responsibility to callersNo removal or weakening of existing validation logic
This commit adjusts the project's continuous integration (CI) test script to pin an older version of a build-time helper crate called `jobserver` when using older Rust compilers. It is a build compatibility fix, not a security patch, and d…
This commit only adds new test code. It exercises how a newer version of LDK exchanges saved channel data with the older LDK 0.2 release when a channel has a pending splice. There is no change to production logic, no bug fix, and no securi…
This commit removes the 'Option' wrapper from several HTLC amount fields, making them required instead of optional. It is a cleanup/refactoring change that simplifies the code by assuming the amount is always known. The commit message fram…
Removal of Option wrapper for financial amount fieldsSerialization format change from optional to required TLV fieldsLoss of backward compatibility with older serialized monitor/channel state
This commit is a code cleanup inside the project's test suite. It replaces a helper function with several hard-to-read positional arguments (like bare `false` and `None`) with a 'builder' pattern that names each option. This makes the test…
This commit is a feature addition, not a vulnerability fix. It extends rust-lightning's BOLT 12 payment support so that when a wallet pays a BOLT 12 invoice, the paid invoice is saved through retries and restarts and is later exposed in th…
New BOLT 12 payer proof feature: persists paid invoice across retries/restarts and exposes it in Event::PaymentSentPayer signing key re-derived from invoice payer metadata rather than storing extra key materialAdds end-to-end test for proof creation, verification, and bech32 round-trip
This commit is a code cleanup (refactor) in the Lightning Dev Kit library. It moves existing payer key-derivation logic into shared helper functions so that future 'payer proof' features can reuse the same code. The change does not appear …
Refactor only: moves existing key derivation/verification logic into helpers without changing algorithmsAdds new public API `Bolt12Invoice::derive_payer_signing_keys` for payer proof key recoveryNo mention of vulnerability, bug, CVE, security fix, or exploit in commit title/message
This commit changes a CI workflow for the rust-lightning project. It stops trying to push new fuzz test inputs directly to a corpus repository from automated test runs, and instead uploads them as a temporary artifact that a separate sched…
This commit adds partial support in the Lightning Dev Kit node software for receiving and temporarily holding multi-part trampoline payments, then deliberately rejects them once all parts arrive because full outbound forwarding is not yet …
New trampoline forward handling path accumulates MPP parts before rejectingDebug assertion guards first-HTLC failure in MPP mergeTODO comment flags possible MPP inconsistency in next_node_id across trampoline parts
This commit removes a redundant 32-byte shared secret field from an internal data structure used when forwarding trampoline payments in the Lightning Dev Kit. The developers realized the secret was already stored inside each previous hop's…
Removes redundant secret field from in-memory/persisted stateChanges TLV serialization layout for HTLCSource::TrampolineForwardBreaking persistence change acknowledged by commit author
This commit changes the project's automated reviewer-assignment workflow to stop using a long-lived secret token and instead request a short-lived authentication token from the Forgejo CI service. This is a security-hardening improvement: …
Removal of long-lived repository secret from CI workflowAdoption of OIDC-based short-lived token for API authorizationWorkflow runs in pull_request_target context with no code checkout
This commit only adds new fuzz-testing commands to an existing test harness. It lets the fuzzer temporarily block and then re-enable the local node's own signing operations during simulated channel failures. There is no change to productio…
This commit hardens the project's automated build and test scripts by replacing loose version tags like 'actions/checkout@v4' with exact commit hashes served from a specific domain. This prevents a compromised or renamed third-party action…
CI/CD supply-chain hardeningAction reference pinning to immutable commit hashUse of explicit action mirror URL
This commit fixes a logic bug in the Lightning Dev Kit's channel splicing code. Previously, the code wrongly assumed that no unrelated monitor update could be pending when a splice `tx_signatures` message arrived while the channel was quie…
Assertion relaxation in state-machine handling of splice `tx_signatures`Race condition between unrelated HTLC preimage monitor update and splice signature exchangePotential panic or protocol stall due to overly strict debug assertion
Allow LSPS5 peer lifecycle events to clear webhook notification cooldowns again after 100ms. This keeps rapid reconnect churn throttled while avoiding multi-second delays between legitimate wake-up opportunities.
Preserve subsecond precision in LSPSDateTime elapsed-time calculation so the new interval is enforced as configured.
Add a small HTLC-free force-close slice to the chanmon consistency harness. The new opcodes close one known channel on each peer link and track which channels are expected to close.
Use the close tracker to reject untracked channel loss while accepting stale post-close errors and cleanup generated by explicitly closed channels. Later harness API calls skip tracked-closed channels so normal channel APIs are not called after modeling a local close.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Allow chanmon consistency fuzz inputs to block holder-side signer operations and retry monitor-driven claim signing. The new commands extend the existing signer-op blocking machinery to the holder commitment and holder HTLC transaction paths.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundaryfuzzing or regression evidence
AI analysis · Informational 15/100
This commit only adds new fuzz-testing commands to an existing test harness. It lets the fuzzer temporarily block and then re-enable the local node's own signing operations during simulated channel failures. There is no change to production code, user-facing behavior, or real wallet security.
Lower-priorityExplicitly state rust toolchain in forgejo actionsby Matt Corallo · 05c9ef04 · Jun 29, 2026 · 3 filesMessage 73 · AdequateTriage 0Details
Commit message · Matt Corallo
Explicitly state rust toolchain in forgejo actions
Forgejo doesn't expand env/matrix arguments in the names it prints for steps in actions, so we have to be explicit. We also have a lot of jobs where we really don't need an env indirection for two lines that reference it.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityTweak default merge message somewhatby Matt Corallo · 693c478a · Jun 29, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Matt Corallo
Tweak default merge message somewhat
I hate how long the title ends up being when you include the full branch name in it, so move it to the next line.
60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI review queuedFix lightning-invoice bitcoin dependency versionby Daniel Roberts · fbc22051 · Jun 29, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Daniel Roberts
Fix lightning-invoice bitcoin dependency version
`lightning-invoice` since 743f43fcfd5acba55242792ed1e9337f2ab52858 will not build against `rust-bitcoin` older than v0.32.7.
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
Lower-priorityFor now disable all windows + macos CI runs until we have runnersby Matt Corallo · b86d2b33 · Jun 28, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Matt Corallo
For now disable all windows + macos CI runs until we have runners
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidatePin actions/checkout + actions/cache to a full URL and commit hashby Matt Corallo · 3a56fcc2 · Jun 28, 2026 · 6 filesMessage 73 · AdequateInformational 18Details
Commit message · Matt Corallo
Pin actions/checkout + actions/cache to a full URL and commit hash
Reference the checkout action by its explicit data.forgejo.org URL pinned to a commit hash (v6) rather than the bare `actions/checkout@v4` short form.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
access control
AI analysis · Informational 18/100
This commit hardens the project's automated build and test scripts by replacing loose version tags like 'actions/checkout@v4' with exact commit hashes served from a specific domain. This prevents a compromised or renamed third-party action from silently injecting malicious code into the project's CI runs. It is a defensive security improvement, not a fix for an active bug or breach.
Lower-priorityUse preinstalled rustup instead of curling the installerby Matt Corallo · c897a448 · Jun 28, 2026 · 5 filesMessage 81 · StrongTriage 0Details
Commit message · Matt Corallo
Use preinstalled rustup instead of curling the installer
rustup is already present in the runner image, so replace every `curl https://sh.rustup.rs | sh ...` toolchain install with a plain `rustup default <toolchain>`, which installs the toolchain if needed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityPass commit context to codecov explicitly in coverage jobby Matt Corallo · 4f884af2 · Jun 28, 2026 · 1 fileMessage 83 · StrongTriage 0Details
Commit message · Matt Corallo
Pass commit context to codecov explicitly in coverage job
Codecov auto-detects only a fixed set of CI providers and cannot detect the Forgejo Actions environment, so it fails to determine the pull request (and commit/branch) for uploads. Pass --slug, --sha, --branch, and --pr to the codecov CLI explicitly, derived from the workflow context, with --pr omitted on non-pull_request events.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityComment the codecov report link on PRsby Matt Corallo · 51d0a4f8 · Jun 28, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · Matt Corallo
Comment the codecov report link on PRs
Codecov's own PR comment depends on CI environment detection, which does not work under Forgejo, so post a link to the commit's coverage report from the coverage job instead. A hidden marker keeps the comment sticky (updated in place rather than re-posted on every push), and the step only runs for pull requests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Port the GitHub Actions workflows under .github/workflows/ to Forgejo Actions under .forgejo/workflows/, targeting the instance at git.rust-bitcoin.org and the lightningdevkit/rust-lightning repo. All jobs run on the debian-trixie worker label; the build matrix restores windows/macos legs (no runners provisioned for those yet).
Forgejo-specific adaptations: - Fold the fuzz corpus push into the fuzz job, since Forgejo supports neither the workflow_run trigger nor cross-run artifact access. The push still targets the GitHub corpus repo and is best-effort so a push hiccup cannot cascade to dependent jobs. - Report build failures and stale-unicode notices via the fj CLI against Forgejo instead of the gh CLI against GitHub. - Run cargo audit directly in place of the rustsec/audit-check action, which is not on Forgejo's default action registry.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
Lower-priorityRun tor in the background for the tor-connect jobby Matt Corallo · 7c206895 · Jun 28, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · Matt Corallo
Run tor in the background for the tor-connect job
The runner image ships the tor package but has no sudo to start the system service, so the previous `sudo apt install -y tor` step cannot work. Instead, start tor in the background within the test step, wait for it to fully bootstrap (the test routes real traffic, including to a .onion address, through the proxy), run the test, and kill tor on exit.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI review queuedAdd workflow to assign a random reviewer on new PRsby Matt Corallo · 311a74cf · Jun 28, 2026 · 1 fileMessage 78 · AdequateTriage 12Details
Commit message · Matt Corallo
Add workflow to assign a random reviewer on new PRs
Forgejo has no built-in random/round-robin reviewer assignment, so add a small Forgejo Actions workflow that, on pull request open, picks a random developer from the maintainer pool (excluding the author) and requests their review via the API.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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
signing or wallet pathsecond-pass: security-sensitive path
Lower-prioritySet max fee in route params for probesby Valentine Wallace · 47f58f34 · Jun 26, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Valentine Wallace
Set max fee in route params for probes
May as well, and allows removing a comment that explains why we were previously leaving it as None.
72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Security candidateLower strictness of pending monitor update while awaiting tx_signaturesby Wilmer Paulino · b8a76c17 · Jun 25, 2026 · 2 filesMessage 73 · AdequateModerate 57Details
Commit message · Wilmer Paulino
Lower strictness of pending monitor update while awaiting tx_signatures
We previously assumed that no monitor update should ever be pending when receiving `tx_signatures` while quiescent, with the exception of the `RenegotiatedFunding` variant. This was a bit too strict, as we did not consider that if an HTLC was sent via the same channel, its preimage could be received from upstream leading to a monitor update to durably persist it.
This commit ensures that if the recipient of a `tx_signatures` has not yet echoed theirs back, and it is awaiting a monitor update completion, then the pending monitor update must be of the `RenegotiatedFunding` variant. If the pending monitor update is of another variant, then we must remain quiescent with no pending updates available to send until after the `tx_signatures` exchange.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundary
AI analysis · Moderate 57/100
This commit fixes a logic bug in the Lightning Dev Kit's channel splicing code. Previously, the code wrongly assumed that no unrelated monitor update could be pending when a splice `tx_signatures` message arrived while the channel was quiescent. In reality, an unrelated HTLC preimage could trigger a pending monitor update at the same time. The fix relaxes the strictness so the protocol does not panic or get stuck, and adds a regression test covering the scenario.
Lower-priorityRemove expectance of interactive-tx commitment_signed during reestablishby Wilmer Paulino · fab95959 · Jun 25, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Wilmer Paulino
Remove expectance of interactive-tx commitment_signed during reestablish
The use of `expecting_peer_commitment_signed` was being used as a way to signal that we must disconnect if the message is not sent in a timely manner. This isn't necessary, as we're already quiescent within this flow, and can disconnect via that signal instead.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
After we complete a splice negotiation and see a `FundingTransactionReadyForSigning` event, the counterparty may already have sent its initial `commitment_signed` for the splice funding transaction. If we then cancel the funding contribution, our local channel state no longer tracks the pending splice attempt and queues `tx_abort`, but the in-flight `commitment_signed` can still arrive first. Handling that message against the post-abort channel state attempts to validate a signature for the now-stale splice funding transaction and can force-close the still-live channel.
We fix this by checking the optional `funding_txid` (which we expect all implementations to always include by default) included in `commitment_signed` before validating the commitment signature. If it does not match the channel's locked funding txid, we can safely ignore the stale message.
73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validation
AI analysis · Moderate 64/100
This patch fixes a bug in the Lightning Dev Kit where a delayed message from a peer could accidentally force-close a live payment channel. During a failed 'splice' (a way to resize a channel), the peer might already have sent a signature for the now-canceled new funding transaction. Before this fix, the software would try to check that signature against the old channel state, fail, and wrongly close the channel. The fix makes the software first check whether the signature belongs to the currently active funding transaction and ignore it if it is stale.
Replace Box::pin with core::pin::pin! in process_events_async now that MSRV is 1.75. This eliminates a heap allocation per task on every loop iteration by pinning the futures directly to the stack.
To satisfy lifetime and Joiner bounds, the loop logic was refactored to run synchronous timer checks first, using flags to conditionally execute the stack-pinned futures. Existing eager polling and early-break semantics are preserved.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidatePin zeroize for old Rust CIby Joost Jager · a8a4767f · Jun 24, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Joost Jager
Pin zeroize for old Rust CI
zeroize 1.9.0 uses Rust 2024 metadata, which Cargo 1.75 cannot parse. Pin it to 1.8.2 for older toolchains so the transaction sync HTTPS feature check keeps passing on the MSRV job.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
access controlmemory safety
AI analysis · Informational 15/100
This commit only changes a CI script to pin a dependency version so older Rust toolchains can still build the project. It is a build-maintenance fix with no security relevance.
AI review queuedDrop the BufReader wrapperby Abeeujah · b582ce15 · Jun 24, 2026 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Abeeujah
Drop the BufReader wrapper
Post `0.32.4` deserialization of consensus objects now use `Read` as the trait bounds, making the BufReader no longer needed for deserialization.
AI review queuedDeserialize consensus objects using Read typeby Abeeujah · deee085c · Jun 24, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Abeeujah
Deserialize consensus objects using Read type
The BufReader wrapping is no longer needed after the rust-bitcoin `0.32.4` release which contains the standardisation of the trait bounds for deserialization to `Read` instead of `BufReader`.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context