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 updates Eclair's underlying Bitcoin library from version 0.47 to 0.48 and makes small code adjustments to match the new library's API. The changes touch how private keys are derived and how test data is converted. There is no d…
Dependency version bump of cryptographic Bitcoin libraryPrivate key derivation code modifiedTaproot/MuSig2 test vector code adjusted
This commit adds an experimental new Lightning channel type to Eclair called 'zero-fee commitments.' It is a large feature patch implementing a draft BOLT specification (PR 1228), not a fix for a known vulnerability. The change introduces …
Large feature addition (+1618/-276 across 42 files) touching consensus-sensitive transaction construction and signingNew experimental channel type disabled by default; requires explicit opt-in via eclair.confImplements draft BOLT specification (lightning/bolts#1228), not a finalized standard
This commit updates the PostgreSQL database driver used by the Eclair Lightning node software from version 42.7.8 to 42.7.11. The commit message says this fixes a vulnerability that could allow denial-of-service (DoS) attacks if a node con…
Dependency version bump for security fixVendor-disclosed potential DoS vector via untrusted database hostChecksum file updated for reproducible builds
This commit only adjusts a flaky unit test that checks transaction weight estimates. It widens the allowed tolerance for variable-length ECDSA signatures when two signatures are involved instead of one. There is no change to production cod…
This commit adds official Lightning channel splicing support to Eclair and replaces an experimental protocol. It includes backwards-compatibility shims for older Phoenix wallets, changes how reconnection messages request retransmission of …
Protocol state machine changes for interactive transaction signing and reconnection retransmissionBackwards-compatibility shim that multiplexes two protocol versions based on peer feature bitsTLV type-number collision handling between official and experimental splicing protocols
This commit changes how Eclair (a Bitcoin Lightning node) remembers its own closing signatures during a mutual channel close. Previously, the code re-generated signing nonces and re-signed closing transactions when the peer's signature arr…
MuSig2 nonce handling changed: local partial signatures are now stored and reused instead of regeneratedEarly signature validation added for peer's partial signature before final transaction aggregationRemoved CloserNonces helper that generated three random nonces per closing attempt
This commit updates the Eclair Lightning node software to support a new, backwards-compatible draft of the official Bitcoin Lightning 'splicing' protocol. It adds a funding transaction identifier to commitment signatures and introduces a '…
Adds disambiguation of commitment signatures by funding transaction ID, reducing risk of applying a signature to the wrong commitment during multi-funding splicingIntroduces a new odd-length message (start_batch) and odd TLV (FundingTx), which unknown peers should ignore per Lightning spec conventionsMaintains legacy experimental batch TLV for backwards compatibility
This commit adds a new testing-only module that uses a fuzzing tool called Jazzer to automatically throw random data at Eclair's Lightning message parsers. It does not change any production code, network behavior, or security logic. It is …
New test-only fuzzing module addedNo production code changesNo network-facing or cryptographic logic modified
This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.47). Most changes are mechanical: replacing local helper functions with new library-provided equivalents for encoding signatures and signing…
Dependency version bump for bitcoin-lib and secp256k1-kmpRefactor of ECDSA signature encoding/signing code pathsRemoval of local DER conversion helpers in favor of library-provided methods
This commit is a refactoring and observability improvement for the Eclair Lightning node. It adds start/end timestamps to payment events and failures, renames some timestamp fields for consistency, and updates how payment hashes are derive…
Refactoring of payment event data model with new timestamp fieldsPayment hash now derived from preimage instead of passed separatelyRemoval of WaitingToRelayPayment from JSON type hints
This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.46). The main change is a code refactor in how Taproot addresses and scripts are created: instead of passing an optional script tree, caller…
Dependency version bump (bitcoin-lib 0.45.1 -> 0.46)Taproot script construction API refactorNo explicit security claim in commit message or diff
This is a routine dependency update for Eclair, a Bitcoin Lightning node. It bumps the internal 'bitcoin-lib' library from version 0.45 to 0.45.1 and its related 'bitcoin-kmp-jvm' component from 0.28.0 to 0.28.1. The commit message says th…
Dependency version bump onlyNo source code changes in commitNo security-related wording in commit message or diff
This commit adjusts how Eclair estimates the 'weight' (a measure of transaction size used to calculate Bitcoin mining fees) for funding inputs in Lightning channel transactions. It increases the assumed signature size from 72 to 73 bytes, …
Fee-estimation mismatch between implementations could cause interactive-tx negotiation failuresUnder-estimated weight could lead to insufficient fees if a 73-byte high-S signature is accepted by minersChange aligns with BOLT 3 recommendation and LDK behavior
This commit fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. When a user tried to buy extra spending capacity (a 'liquidity purchase') and the remote peer backed out after the local node had already signed, Eclair ke…
Fixes a denial-of-service / availability issue where upstream HTLCs were held until near CLTV expiry after a peer-aborted liquidity purchaseAdds explicit handling for tx_abort after local signing in dual-funded opens and splicesIntroduces LiquidityPurchaseAborted event and matching cleanup in Peer
This commit is a small cleanup pull request titled 'Nits'. It fixes a typo in documentation, corrects a log message to show the right commitment format name, changes a debug log to info level for transaction signing, adds structured loggin…
This commit removes support for older Lightning channel types ('static_remotekey' and 'default' channels) from the Eclair node software. It is a deliberate feature-removal change announced in the previous release. The main risk is operatio…
Removal of legacy commitment format support reduces attack surface for fee-manipulation and transaction-malleability issues present in pre-anchor channels.Simplified fee tolerance removes the 'too low' feerate check, relying on anchor/taproot CPFP/RBF behavior.Explicit channel_type requirement prevents silent downgrade to weaker channel types.
This commit refactors how Eclair stores closed Lightning channels. Instead of keeping all closed channel data in the same table as active channels, it moves them to a dedicated table with only essential summary information. The main stated…
DoS mitigation: channels that never confirmed or had nothing at stake are no longer persisted in the databaseDatabase schema migration removes foreign key constraint on htlc_infosNew closed-channel data class stores only minimal, stringified fields to avoid future backwards-compatibility issues
This commit updates Eclair's underlying bitcoin-lib dependency from version 0.41 to 0.43.2 and adjusts Eclair's code to match the new library's API. The changes are mostly mechanical: switching how Musig2 nonces and Taproot script trees ar…
Dependency version bump of core cryptographic library (bitcoin-lib 0.41 -> 0.43.2, secp256k1-kmp 0.18.0 -> 0.19.0)Refactoring of MuSig2 nonce handling and Taproot script tree constructionRemoval of Kotlin interop conversions around cryptographic types
This commit fixes a bug in Eclair's dual-funded Lightning channel logic. When opening or splicing a channel using taproot (P2TR) inputs, each participant's wallet needs full details about every input in the transaction, not just its own. P…
Fixes a signing failure in taproot interactive dual-funding/splicingPSBT now includes all remote inputs, satisfying BIP-341 all-inputs signature commitmentPreviously tests hid the bug by sharing a single dummy wallet between both parties
This commit only adds a new test case to Eclair's invoice parsing tests. It checks that a specific Bitcoin Lightning invoice with a non-standard 'high-S' signature can still be decoded and that the sender's public key is recovered correctl…
Test-only change: no production code modifiedRelates to BOLT 11 signature malleability / high-S acceptanceReferences upstream BOLT specification change (bolts PR 1284)
If the first DB write of a channel fails, we want to abort the channel immediately, otherwise our state may be unusable. If for some reason we already have a channel (for example because of a partial restore from a DB backup), we want to avoid overwriting this state as well.
* Add global `channel_id`s collision resistance
We add a global, concurrent map that keeps track of every temporary and final `channel_id` being used. We always add to this map before creating channel actors or transitioning to a final `channel_id` (and thus before storing channel data in the DB).
We only remove from that map when a channel actor dies: no other channel can be associated with the corresponding temporary or final `channel_id` since the channel was created after registering the IDs.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
We previously rejected Bolt12 invoices when a reply path was provided in the onion message. This wasn't in the spec, and it could make sense to provide a specific reply path with an invoice in case the payer considers the invoice invalid and wants to send back an invoice_error to inform the recipient.
This created compatibility issues with LDK.
Fixes #3322
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedBack to dev (#3313)by Bastien Teinturier · 2dda7946 · May 21, 2026 · 8 filesMessage 36 · OpaqueTriage 0Details
Commit message · Bastien Teinturier
Back to dev (#3313)
After the 0.14.0 release.
36/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedUse official feature bit for `option_simple_taproot` (#3144)by Bastien Teinturier · 872cb663 · May 5, 2026 · 14 filesMessage 81 · StrongTriage 19Details
Commit message · Bastien Teinturier
Use official feature bit for `option_simple_taproot` (#3144)
Use the official feature bit and name for taproot channels and the corresponding channel types. Activate taproot channels support by default (without support for announcing such channels yet).
See https://github.com/lightning/bolts/pull/995
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: security-sensitive path
There's a race condition between Bob and Carol's router states, which aren't updated exactly at the same time. Retrying the condition should fix this race condition.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI review queuedAdd fuzz tests for onion, route blinding and lightning message codecs (#3282)by Nishant Bansal · 0778eafa · Apr 13, 2026 · 4 filesMessage 91 · StrongTriage 12Details
Commit message · Nishant Bansal
Add fuzz tests for onion, route blinding and lightning message codecs (#3282)
- Expand LightningMessageCodecs fuzz tests to cover all message types - Add fuzz tests for payment and message onion payload codecs - Add fuzz tests for route blinding codecs - Add fuzz tests for onion failure message codecs
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidenceparser or protocol pathsecond-pass: security-sensitive path
If the test runs too quickly and the message is processed in less than 1 millisecond, there is a race condition since reading from the database excludes the upper timestamp bound (`timestamp < now`).
We also remove our usage of the `BETWEEN` keyword for postgres. The `BETWEEN` keyword is inclusive of both bounds, while we want to exclude the upper bound to allow pagination.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
We create a new set of actors that keep track of payment statistics across our peers and rank them to identify the top profit earners. Based on those statistics, the actors issue recommendations to:
- allocate more liquidity towards nodes that are generating revenue and may run out of liquidity in the next few days - reclaim liquidity from inactive channels - change our relay fees to optimize increases or decreases in outgoing flow and volume
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedFix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)by Bastien Teinturier · 8c5f39f4 · Mar 19, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Bastien Teinturier
Fix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)
The integration test "send blinded multi-part payment a->b->c (single channel a->b)" in `OfferPaymentSpec` fails intermittently. The root cause is a race condition in `Postman` where the subscription for an onion message reply is registered after the message is sent, allowing the reply to arrive and be silently dropped before the subscription exists.
In integration tests where all 3 nodes run on the same JVM, the onion message round-trip (Alice -> Bob -> Carol -> creates invoice -> Carol -> Bob -> Alice) can complete in just a few milliseconds - fast enough to beat the `Subscribe` message to the `Postman`'s mailbox.
This explains why the test is flaky: it usually works (round-trip slower than subscribe), but occasionally fails (round-trip faster than subscribe, reply dropped).
We simply move the subscription registration to *before* the message is sent to the network.
100/100 · StrongMessage clarity
✓ Specific, 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
second-pass: broader security terminology
AI review queuedAdd bitcoin rpc call to check if an address belongs to our wallet (#3267)by Fabrice Drouin · a4d66adc · Mar 18, 2026 · 4 filesMessage 73 · AdequateTriage 12Details
Commit message · Fabrice Drouin
Add bitcoin rpc call to check if an address belongs to our wallet (#3267)
We use the "ismine" property that is returned by the "getaddressinfo" RPC call.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedImprove support for plugin-defined features (#3264)by Bastien Teinturier · a4f4abd9 · Mar 17, 2026 · 42 filesMessage 93 · StrongTriage 19Details
Commit message · Bastien Teinturier
Improve support for plugin-defined features (#3264)
We allow injecting non-official features via plugins, by extending the `CustomFeaturePlugin` trait. However, we previously added those features to a set of unknown features: we can do better and add them to the known features map, which provides pretty-printing in logs and simplifies debugging.
We also had an issue where `hasFeature` would always return `false` for plugin features, even when they were supported by both nodes, because we only looked at our `activated` features map which only contains official features.
We get rid of the `UnknownFeature` class entirely and keep the encoded feature bits after deserializing them. We take those feature bits into account in `hasFeature`, which fixes the issue.
This creates a slightly weird asymmetry because our local features, which are created based on our `eclair.conf`, will not have this field set while features that are read from network messages or the DB will have this field set. A better architecture would be to remove the `activated` map entirely and directly wrap the feature bits, while providing helper functions to interact with features without having to directly read a `BitVector`. This is a larger refactoring though, because we'd need to add support for filtering `init` / `node` features using bitmasks, which isn't entirely trivial to handle and requires careful management of plugin features.
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: broader security terminologysecond-pass: unusually broad changesecond-pass: security-sensitive path
AI review queuedFix flaky onion message test (#3266)by Bastien Teinturier · 1543e7ca · Mar 17, 2026 · 1 fileMessage 98 · StrongTriage 0Details
Commit message · Bastien Teinturier
Fix flaky onion message test (#3266)
The "automatically connect to known nodes" test was flaky, because there is a race with our code that lazily removes node announcements from our DB after channels close (in `handleChannelSpent` in `Validation.scala`).
We now explicitly wait for gossip to ensure that we cannot run into this race condition, which should fix the flakyness during CI.
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
second-pass: broader security terminology
AI review queuedReject offers with amount set to `0` (#3265)by Bastien Teinturier · 16ebf01a · Mar 17, 2026 · 2 filesMessage 76 · AdequateTriage 7Details
Commit message · Bastien Teinturier
Reject offers with amount set to `0` (#3265)
This doesn't make any sense, the field should be omitted if any amount is acceptable: setting it to `0` is confusing.
See https://github.com/lightning/bolts/pull/1316
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedRemove support for zlib encoding for channel queries (#3263)by Bastien Teinturier · eef7c326 · Mar 11, 2026 · 8 filesMessage 81 · StrongTriage 7Details
Commit message · Bastien Teinturier
Remove support for zlib encoding for channel queries (#3263)
We removed support for sending compressed data when it was removed from the spec (see https://github.com/ACINQ/eclair/pull/2244). We meant to remove support for receiving compressed data as well as a follow-up, but it slipped for a long time! There's no reason to keep supporting it now.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
We add a `ChannelFundingCreated` event that is emitted when the funding transaction or a splice transaction has been signed and can now be published, either by us or by our peer (depending on who funds).
This can be handy to detect peers that are using black-listed inputs and immediately close the channel before it confirms and can be used.
66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
We fix a few flaky tests in our channel FSM that test scenarios where errors are received while creating funding transactions. The issue was that we used a dummy wallet that could complete its call before our calls to `awaitCond(alice.stateName == WAIT_FOR_FUNDING_INTERNAL)`.
We use a new dummy on-chain wallet that never responds to transaction funding calls to allow tests to inject failure events.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedImprove channel and payment events (#3246)by Bastien Teinturier · d735e0b5 · Feb 11, 2026 · 19 filesMessage 76 · AdequateTriage 7Details
Commit message · Bastien Teinturier
Improve channel and payment events (#3246)
We improve the following events:
- `TransactionPublished` includes more details about mining fees and an optional liquidity purchase - all channel events include the latest `channel_type` - `PaymentRelayed` exposes the `relayFee` earned
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedInclude the `node_id` of channel peers in payment events (#3243)by Bastien Teinturier · ff7a24c5 · Jan 23, 2026 · 40 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier
Include the `node_id` of channel peers in payment events (#3243)
When scoring peers, we don't really care about individual channels but rather about the peer itself, who is identified by its `node_id`. We update payment events to include the `node_id` of our channel peer, to make it easier to compute statistics about each of our peers.
We also rework the events in `PaymentEvents.scala` to be more consistent now that we've added support for trampoline, splicing, liquidity ads and on-the-fly funding, which are all the features we had planned that can impact peer scoring.
Note that we don't yet update the schema of the `AuditDb`, which means that some of the data isn't stored and is currently filled with a dummy value. We will include *all* updates to the DB schema in a future PR and will fix this.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
AI review queuedMore tests for accountability (#3240)by Thomas HUET · 0214a1e7 · Jan 8, 2026 · 4 filesMessage 78 · AdequateTriage 7Details
Commit message · Thomas HUET
More tests for accountability (#3240)
These tests are also added to lightning-kmp (https://github.com/ACINQ/lightning-kmp/pull/846) to check compatibility.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedCI: fix test with latest bitcoind (#3239)by Fabrice Drouin · 3ac122b9 · Jan 8, 2026 · 1 fileMessage 98 · StrongTriage 0Details
Commit message · Fabrice Drouin
CI: fix test with latest bitcoind (#3239)
Add flag to build without multiprocess architecture which we don't use and requires and additional dependency (capnproto).
98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
We emit several events during the channel lifecycle, which have become a bit of a mess over the years, especially with the addition of 0-conf, splicing and on-the-fly funding.
We now use the following events:
- `ChannelCreated` once the funding transaction is created - `ChannelFundingConfirmed` once the funding transaction is confirmed, which is also emitted for splice transactions - `ChannelReadyForPayments` once the channel is ready for payments, after exchanging `channel_ready` for the channel creation or `splice_locked` for splice transactions
The order between `ChannelFundingConfirmed` and `ChannelReadyForPayments` depends on whether 0-conf is used or not.
We remove `ChannelOpened`, which was actually a subset of the existing `ChannelReadyForPayments` event (which was added afterwards).
We add a few fields to existing channel events, which we don't yet store in the DB to avoid modifying it, but will store later when we modify the schema of the `AuditDb`.
We now store an entry in the `AuditDb` whenever a splice transaction confirms, which allows tracking the full history of a channel's changes.
88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
AI review queuedAccountable HTLCs (#3217)by Thomas HUET · e3fd1867 · Jan 5, 2026 · 68 filesMessage 58 · ThinTriage 19Details
Commit message · Thomas HUET
Accountable HTLCs (#3217)
Add accountability signal for HTLCs, it replaces endorsement. See https://github.com/lightning/bolts/pull/1280
58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
While we send `commit_sig` messages individually on the wire, we need a codec for the batch object when using the cluster mode, when peer connection actors live on remote machines.
66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedAdd more tolerance in tests (#3199)by pm47 · 6dd9f769 · Oct 29, 2025 · 1 fileMessage 78 · AdequateTriage 12Details
Commit message · pm47
Add more tolerance in tests (#3199)
DER encoding size can vary by +- 3 bytes, not +- 2.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path