BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

325security candidates672second-pass queue3017AI analyses
152commits · 30 days
322commits · 60 days
1286commits · 180 days
2834commits · 365 days
Backfill bands
Aug 5 → Feb 61351 seen45 candidatesComplete
Feb 6 → Jun 61033 seen63 candidatesComplete
Jun 6 → Jul 6281 seen11 candidatesComplete
Jul 6 → Aug 5207 seen5 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.

71/100 average clarity
1198Strong · 80–100
1206Adequate · 60–79
702Thin · 40–59
88Opaque · 0–39
6security candidates 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.
merge-script2105094389
Antoine Poinsot22422170
Ava Chow20669195070
MarcoFalke41421408074
fanquake23321228058
Lőrinc18121177081
Hennadii Stepanov22816211065
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 51 minutes ago

Low 38 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36299: cli: Improve empty-response and fix -rpcclienttimeout regression

This update fixes two bugs in bitcoin-cli, the command-line tool used to talk to a Bitcoin node. First, when a server replied with an empty body but said it was intentionally empty (Content-Length: 0), the client would keep waiting instead…

Client-side hang on empty HTTP body (denial-of-service against bitcoin-cli user)Timeout regression could abort legitimate slow RPC responsesFix distinguishes Content-Length: 0 from absent Content-Length
dd809d2cby Ava Chow+41−232 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36052: ci: Doc: Move all config comments right next to the option they explain

This commit is a documentation and code-style cleanup for Bitcoin Core's continuous integration (CI) scripts. It changes how build configuration strings are formatted in shell scripts so comments can sit next to the options they describe, …

9f059527by merge-script+100−9826 files
No security note in commit
Moderate 60 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35833: log: prevent user input from injecting fake log lines

This update fixes a way that people with limited access to a Bitcoin node could make fake log entries appear real. Normally, the node cleans up special characters in log messages but was leaving newlines alone. A clever user could slip a n…

Log injection / log forgery via embedded newlines in untrusted inputInput from restricted RPC users reaching log output without newline escapingControl-character escaping bypass due to explicit newline exception
d4b0e1e4by Ava Chow+48−114 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36391: test: fix typo in rpc_psbt

This commit fixes a one-word typo in a comment inside a test file. The comment incorrectly referred to 'walletcreatepsbt' when the surrounding test code actually calls 'walletcreatefundedpsbt'. No code behavior changes, and there is no sec…

4b612c6bby merge-script+1−11 file
No security note in commit
Informational 15 AI analysisMessage 82 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: fix typo in rpc_psbt

This commit fixes a typo in a comment within a test file. The comment incorrectly referred to 'walletcreatepsbt' when the surrounding test code actually exercises 'walletcreatefundedpsbt'. No code behavior changes, and there is no security…

0a8ffe90by Bruno Garcia+1−11 file
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36377: doc: add 461 (Deterministic ECDSA signatures with low-R grinding) to bips.md

This commit is a documentation-only update. It adds a single line to Bitcoin Core's list of implemented BIPs, noting that BIP 461 (a technique for making ECDSA signatures smaller and deterministic) has been implemented since version 0.17.0…

e0f16ef9by merge-script+1−01 file
No security note in commit
Low 27 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36375: wallet: accept uppercase addresses without amount in sendall

This patch fixes a bug in Bitcoin Core's `sendall` wallet command. If a user typed a bech32 address in uppercase letters, the command would fail with a confusing 'below dust threshold' error instead of sending the funds. The fix compares d…

Functional bug in RPC command causing unexpected transaction failureCase-sensitivity mismatch between user input and canonical address encodingNo memory safety, cryptographic, or authorization issue evident
e7aef7e8by Ava Chow+22−52 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36381: test: avoid testing at the exact `-maxfeerate` boundary

This commit fixes a flaky automated test in Bitcoin Core. The test was checking the maximum transaction fee rate by creating a transaction at the exact boundary, which sometimes failed because the real transaction size could be slightly sm…

No production code changedTest-only changeNo memory safety, cryptography, consensus, or authorization changes
ba8fdb97by Ava Chow+1−11 file
No security note in commit
Informational 20 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36233: guix: Update time-machine to `60f6956aeffa7f30285745bd0ea615e9acfc74f8`

This is a build-system maintenance update for Bitcoin Core's reproducible build environment (Guix). It updates the Guix time-machine commit and several dependency versions, and temporarily disables some test suites that fail when building …

No direct security-relevant code change in Bitcoin Core consensus, wallet, or P2P layers.Dependency version bumps (git-minimal, linux-headers, python-lief, python-minimal) are routine build-environment updates.Disabling third-party package test suites reduces build-time test coverage but does not alter Bitcoin Core's own test or release binaries.
619185d5by merge-script+32−73 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36364: tools: Call SHA256AutoDetect in bitcoin-util, bitcoin-tx and bitcoin-wallet

This change makes three Bitcoin command-line tools (bitcoin-tx, bitcoin-util, and bitcoin-wallet) automatically pick the fastest SHA-256 hashing implementation available on the computer, such as hardware-accelerated versions on modern CPUs…

dc2a9987by merge-script+6−03 files
No security note in commit
Informational 23 AI analysisMessage 98 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36321: net: cast vector size to avoid overflow, truncation, sign change

This is a one-line fix in Bitcoin Core's network code. It changes how the size of a list of block headers is converted to a signed integer inside a loop. Previously, if the list was empty, the conversion could trigger undefined-behavior wa…

UndefinedBehaviorSanitizer integer sanitizer warning addressedImplicit signed/unsigned conversion in loop counterUnsigned integer wraparound on empty vector size
ced4c6e6by merge-script+1−11 file
No security note in commit
Low 32 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#34371: wallet: allow importprunedfunds for spending transactions

This change fixes a Bitcoin Core wallet bug where the `importprunedfunds` RPC command could only re-import transactions that sent money to the wallet, not transactions that spent money from it. After this fix, both incoming and outgoing tr…

Logic bug in wallet transaction import scopeIncorrect balance possible after removing and re-importing spending transactionFix routes import through existing involvement check (IsMine + IsFromMe)
ed7dd7cfby Ava Chow+36−203 files
No security note in commit
Low 28 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#29278: Wallet: Add `maxfeerate` wallet startup option

This commit adds a new Bitcoin Core wallet startup option called -maxfeerate. It lets users set a maximum fee rate (fee per unit of transaction size) that the wallet will allow when creating or broadcasting transactions. Previously, the wa…

New wallet startup option -maxfeerate to cap transaction fee rateNew transaction error type MAX_FEE_RATE_EXCEEDEDBroadcastTransaction now checks both max absolute fee and max fee rate
f80aaf4bby Ava Chow+303−7930 files
No security note in commit
Moderate 64 AI analysisMessage 86 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35984: sign: skip signing SIGHASH_SINGLE inputs with no corresponding output

This Bitcoin Core update fixes a wallet-signing quirk. When a user chose the SIGHASH_SINGLE signature mode, an input that had no matching output index would sign essentially nothing meaningful. That signature could then stay valid even if …

Funds-redirection footgun from SIGHASH_SINGLE signatures with no committed outputInconsistent guard between SignTransaction and SignPSBTInput pathsFix centralizes the guard in the low-level signature creator to cover future signing paths
e19f83e9by Ava Chow+37−82 files
Vendor flagged security relevance
Low 35 AI analysisMessage 86 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35696: i2p: update leaseset encryption types

This change updates Bitcoin Core's I2P (Invisible Internet Project) privacy network settings to use newer, stronger encryption for the published 'leaseset' that describes how other peers can contact a node. The old setting included ElGamal…

Cryptographic algorithm update (ElGamal to MLKEM-768)Use of I2P 'legacy' encryption type removedConfiguration-only change in network privacy layer
65e075f8by Ava Chow+2−21 file
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35948: init: correct first-run disk space estimate

This change fixes a labeling bug in Bitcoin Core's first-run disk-space warning. The estimate was stored in GiB (binary gigabytes, 1024-based) but displayed as GB (decimal gigabytes, 1000-based), and for pruned nodes it showed the full-cha…

d26f19c7by Ava Chow+5−42 files
No security note in commit
Low 44 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36284: wallet: don't double discard output groups with avoidpartialspends

This is a wallet bug, not a theft or remote-code bug. When a Bitcoin Core user turns on the optional 'avoidpartialspends' or 'avoid_reuse' setting, an output group rejected during coin selection could be counted twice as 'discarded.' That …

Logic error causing double-counting of discarded UTXO groupsCan trigger false 'insufficient funds' failure in coin selectionAffects avoidpartialspends / avoid_reuse wallets only
e8e7e91aby Ava Chow+43−14 files
No security note in commit
Informational 18 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35890: doc: use overwrite (>) instead of append (>>) for one-shot PSBT files in offline-signing-tutorial.md

This is a documentation-only fix in a tutorial file. It changes two shell examples from using '>>' (append to file) to '>' (overwrite file). If a user followed the old instructions and ran the same command twice, the file would contain two…

No security signal: change is limited to documentationNo code changes to Bitcoin Core binaries, RPC, wallet, or consensus logicNo cryptographic, network, or privilege-boundary implications
bfdcd979by merge-script+2−21 file
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35675: mining: add block template manager

This is a large internal code reorganization (refactor) in Bitcoin Core. It creates a new BlockTemplateManager class that takes over block-template creation, block submission, and tip-waiting helpers that were previously spread across seve…

Large refactor touching mining, RPC, interfaces, and test shutdown pathsNew object lifetime dependency: BlockTemplateManager holds references to mempool, chainman, and notifications; explicit reset ordering added in Shutdown/InitAndLoadChainstate/test setupsRemoval of early-init node.mining interface; BlockTemplateManager is now created after chainstate load, with a comment that it must exist before setChainstateLoaded(true) unblocks IPC waiters
5c726f20by Ryan Ofsky+561−44926 files
No security note in commit
Informational 12 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35301: Silent Payments: Implement bip352 (take 2)

This commit adds the first implementation of BIP352 (Silent Payments) to Bitcoin Core. Silent Payments are a new type of privacy-preserving Bitcoin address that lets someone receive payments without publicly revealing a fixed address. The …

New cryptographic feature implementation (BIP352 Silent Payments)Extensive use of secp256k1 silentpayments moduleInput public key extraction from P2PKH, P2WPKH, P2SH-P2WPKH, and P2TR inputs
be5d0b55by Ava Chow+6951−010 files
No security note in commit
Repository ledger

Explore captured commits

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

Lower-prioritytest: Remove `system_tests/run_command` runtime dependenciesby Hennadii Stepanov · a4324ce0 · Feb 18, 2026 · 4 filesMessage 72 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

test: Remove `system_tests/run_command` runtime dependencies

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal test code. It replaces tests that previously relied on external system commands like 'echo', 'false', and 'cat' with a self-contained mock program. There is no change to the actual Bitcoin node software that users run, and no security issue is introduced or fixed.

Lower-priorityci: [refactor] Drop last use of pwshby MarcoFalke · fa36adeb · Feb 17, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: [refactor] Drop last use of pwsh

Seems easier to just use Bash and Python consistently.

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

This commit is a minor cleanup in the project's automated testing configuration. It replaces a PowerShell script snippet with an equivalent Bash snippet that does the same thing: record the versions of build tools like CMake and MSBuild. There is no security issue here.

Lower-priorityci: [refactor] Move github_import_vs_env to python scriptby MarcoFalke · fae31b1e · Feb 17, 2026 · 3 filesMessage 77 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: [refactor] Move github_import_vs_env to python script

Also, change the yaml anchor name and the step name.
Also, small refactors while touching the files.

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

This is a routine cleanup of Bitcoin Core's Windows CI (continuous integration) scripts. It moves a PowerShell snippet that imports Visual Studio environment variables into a Python helper, renames a YAML anchor, and simplifies some repetitive code. There is no security-relevant change.

Lower-prioritythreadpool: make Submit return Expected instead of throwingby furszy · 59d24bd5 · Feb 17, 2026 · 3 filesMessage 81 · StrongLow 31Details
Commit message · furszy

threadpool: make Submit return Expected instead of throwing

Unlike exceptions, which can be ignored as they require extra try-catch
blocks, returning expected errors forces callers to always handle
submission failures.

Not throwing an exception also fixes an unclean shutdown bug
#34573 since we no longer throw when attempting to Submit()
from the libevent callback http_request_cb().

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 31/100

This change refactors Bitcoin Core's internal thread pool so that submitting a task returns an error code instead of throwing an exception. The main practical effect is fixing an unclean shutdown bug (#34573) where an unhandled exception could be thrown from an HTTP event callback. It is a defensive reliability improvement rather than a direct exploit for stealing funds or remote code execution.

Lower-priorityvalidation: reset BLOCK_FAILED_CHILD to BLOCK_FAILED_VALID when loading from diskby stratospher · b5b2956b · Feb 17, 2026 · 1 fileMessage 73 · AdequateLow 44Details
Commit message · stratospher

validation: reset BLOCK_FAILED_CHILD to BLOCK_FAILED_VALID when loading from disk

- there maybe existing block indexes stored in disk with
BLOCK_FAILED_CHILD
- since they don't exist anymore, clean up block index entries with
BLOCK_FAILED_CHILD and reset it to BLOCK_FAILED_VALID.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 44/100

This Bitcoin Core commit cleans up an old block-status flag when loading the blockchain database from disk. The old flag (BLOCK_FAILED_CHILD) is no longer used by current code, so the patch converts any leftover occurrences into the newer equivalent flag (BLOCK_FAILED_VALID) and marks the index entries as needing to be saved. This is a defensive data-consistency fix rather than a fix for an active exploit.

Lower-priorityvalidation: remove BLOCK_FAILED_MASKby stratospher · 29740c06 · Feb 17, 2026 · 8 filesMessage 50 · ThinInformational 15Details
Commit message · stratospher

validation: remove BLOCK_FAILED_MASK

since it's the same as BLOCK_FAILED_VALID now

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a simple code cleanup: it removes a redundant constant named BLOCK_FAILED_MASK and replaces its uses with BLOCK_FAILED_VALID, because the two had become identical in meaning. There is no functional change to how Bitcoin Core validates blocks or handles invalid chains.

Lower-prioritytest: check LoadBlockIndex correctly recomputes invalidity flagsby stratospher · fb3e1bf9 · Feb 17, 2026 · 1 fileMessage 95 · StrongInformational 12Details
Commit message · stratospher

test: check LoadBlockIndex correctly recomputes invalidity flags

Add a test for block index transitioning from legacy
BLOCK_FAILED_CHILD to BLOCK_FAILED_VALID behavior.

In the scenario where a valid block has a BLOCK_FAILED_CHILD
parent and a BLOCK_FAILED_VALID grandparent, ensure that all
three blocks are correctly marked as BLOCK_FAILED_VALID
after reloading the block index.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 12/100

This commit only adds a new automated test to Bitcoin Core. It does not change any production code. The test verifies that when the block index database is reloaded, a chain of three blocks with mixed invalidity flags is all correctly marked as permanently invalid. There is no direct security fix here, only a regression test for existing behavior.

Lower-priorityvalidation: stop using BLOCK_FAILED_CHILDby stratospher · 37bc2078 · Feb 17, 2026 · 5 filesMessage 58 · ThinInformational 20Details
Commit message · stratospher

validation: stop using BLOCK_FAILED_CHILD

even though we have a distinction between BLOCK_FAILED_VALID
and BLOCK_FAILED_CHILD in the codebase, we don't use it for
anything. since there's no functional difference between them
and it's unnecessary code complexity to categorise them correctly,
just mark as BLOCK_FAILED_VALID instead.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 20/100

This is a code cleanup change in Bitcoin Core. It removes the use of a separate 'descendant of a failed block' flag and instead marks those blocks with the same 'validation failed' flag used for the block itself. The commit explicitly states the two flags had no functional difference and were only adding unnecessary complexity. There is no indication this fixes a security bug or changes network behavior.

Lower-priorityrefactor: use clearer variables in InvalidateBlock()by stratospher · 120c631e · Feb 17, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · stratospher

refactor: use clearer variables in InvalidateBlock()

Improve upon the variable name for `invalid_walk_tip` to make the
InvalidateBlock logic easier to read. Block tip before disconnection
is now tracked directly via `disconnected_tip`, and `new_tip`
is the tip after the disconnect.

Co-authored-by: stickies-v <stickies-v@protonmail.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Informational 15/100

This commit is a straightforward code cleanup in Bitcoin Core's block invalidation logic. It renames a variable from 'invalid_walk_tip' to 'disconnected_tip' and introduces a new variable 'new_tip' to make the code easier to read. There are no functional changes that would affect security.

Security candidatetest: Set assert_debug_log timeout to 0by MarcoFalke · fa4cb96b · Feb 17, 2026 · 13 filesMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Set assert_debug_log timeout to 0

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
seed or entropy pathsigning or wallet path
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal functional test code. It makes the default timeout for a debug-log assertion helper stricter (0 seconds instead of 2 seconds) and updates existing tests to explicitly pass a 2-second timeout where needed. There is no change to the actual Bitcoin node software that users run, so it cannot affect live networks, wallets, or consensus.

Lower-priorityclusterlin: improve TxData::dep_top_idx type (optimization)by Pieter Wuille · b75574a6 · Feb 17, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: improve TxData::dep_top_idx type (optimization)

The combined size of TxData::dep_top_idx can be 16 KiB with 64
transactions and SetIdx = uint32_t. Use a smaller type where possible to
reduce memory footprint and improve cache locality of m_tx_data.

Also switch from an std::vector to an std::array, reducing allocation
overhead and indirections.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a straightforward memory-use and performance optimization inside Bitcoin Core's transaction clustering code. It changes an internal index type to the smallest unsigned integer that fits the data, and switches a dynamically-sized vector to a fixed-size array. There is no security-relevant change here—no bug fix, no input validation change, no cryptographic change, and no behavior change visible outside the module.

Lower-priorityclusterlin: get rid of DepData (optimization)by Pieter Wuille · 73cbd15d · Feb 17, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: get rid of DepData (optimization)

With the earlier change to pool SetInfo objects, there is little need
for DepData anymore. Use parent/child TxIdxs to refer to dependencies,
and find their top set by having a child TxIdx-indexed vector in each
TxData, rather than a list of dependencies. This makes code for
iterating over dependencies more natural and simpler.

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

This is a routine internal code cleanup in Bitcoin Core's transaction-cluster linearization logic. It replaces a separate list of dependency objects with direct parent/child indexes and a per-transaction vector, making the code simpler and slightly faster. There is no user-facing change, no network change, and no security fix.

Lower-priorityclusterlin: precompute reachable sets (optimization)by Pieter Wuille · 7194de3f · Feb 17, 2026 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Pieter Wuille

clusterlin: precompute reachable sets (optimization)

Instead of computing the set of reachable transactions inside
PickMergeCandidate, make the information precomputed, and updated in
Activate (by merging the two chunks' reachable sets) and Deactivate (by
recomputing).

This is a small performance gain on itself, but also a preparation for
future optimizations that rely on quickly testing whether dependencies
between chunks exist.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This is a routine performance optimization inside Bitcoin Core's transaction clustering code. It precomputes and caches which related transactions a chunk can reach, instead of recalculating that set on demand. The change includes extra assertions to verify the cached values stay correct. There is no security-relevant behavior change and no indication this fixes a vulnerability.

Lower-priorityclusterlin: abstract out functions from MergeStep (refactor)by Pieter Wuille · cbd684a4 · Feb 17, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: abstract out functions from MergeStep (refactor)

This is a simple refactor to make the code more readable.

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

This is a pure code cleanup: a single function was split into three smaller, clearer helper functions with no change to what the code actually does. There is no security issue visible in the commit.

Lower-priorityclusterlin: unidirectional MakeTopological initially (optimization)by Pieter Wuille · b684f954 · Feb 17, 2026 · 2 filesMessage 73 · AdequateInformational 13Details
Commit message · Pieter Wuille

clusterlin: unidirectional MakeTopological initially (optimization)

It suffices to initially only attempt one direction of merges in
MakeTopological(), and only try both directions on chunks that are the
result of other merges.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 13/100

This commit is an internal performance optimization for Bitcoin Core's transaction clustering algorithm. It changes how the code tries to combine groups of related transactions during fee estimation, doing less work upfront while still checking both directions for newly merged groups. The test file updates expected iteration counts accordingly. There is no indication this change affects security, consensus, network behavior, or user funds.

Lower-priorityscripted-diff: rename _rep -> _idx in SFLby Pieter Wuille · 20e2f3e9 · Feb 17, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Pieter Wuille

scripted-diff: rename _rep -> _idx in SFL

This is a preparation for the next commit, where chunks will no longer
be identified using a representative transaction, but using a set index.
Reduce the load of line changes by doing this rename ahead of time.

-BEGIN VERIFY SCRIPT-
sed --in-place 's/_rep/_idx/g' src/cluster_linearize.h
-END VERIFY SCRIPT-

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit is a purely mechanical rename of internal variable names in Bitcoin Core's transaction clustering code. Every occurrence of '_rep' (short for 'representative') is changed to '_idx' (short for 'index') in a single header file. There are no logic changes, no bug fixes, and no security implications. The commit message explicitly says this is a preparatory cleanup to make the next change easier to review.

Lower-priorityclusterlin: keep track of active children (optimization)by Pieter Wuille · 63b06d55 · Feb 17, 2026 · 1 fileMessage 73 · AdequateInformational 14Details
Commit message · Pieter Wuille

clusterlin: keep track of active children (optimization)

This means we can iterate over all active dependencies in a
cluster/chunk in O(ntx) time rather than O(ndeps) (*), as the number of
active dependencies in a set of transactions of size is at most ntx-1.

(*) Asymptotically, this is not actually true, as for large transaction
counts, iterating over a BitSet still scales with ntx. In practice
however, where BitSets are represented by a constant number of integers,
it holds.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 14/100

This is a routine performance improvement inside Bitcoin Core's transaction-cluster linearization code. It replaces an O(number of dependencies) scan with an O(number of transactions) scan by maintaining a smaller 'active children' set. There is no user-visible behavior change, no network-facing change, and no security fix.

Lower-priorityclusterlin: add more Assumes and sanity checks (tests)by Pieter Wuille · 268fcb6a · Feb 17, 2026 · 1 fileMessage 60 · AdequateInformational 16Details
Commit message · Pieter Wuille

clusterlin: add more Assumes and sanity checks (tests)

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 16/100

This commit adds extra internal safety checks and test-like assertions to a Bitcoin Core transaction-cluster linearization module. It does not change normal network behavior; it only helps developers catch programming mistakes during testing or debugging. There is no indication it fixes an active security bug or is exploitable by users.

Lower-priorityclusterlin: split up OptimizeStep (refactor)by Pieter Wuille · dcf458ff · Feb 17, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Pieter Wuille

clusterlin: split up OptimizeStep (refactor)

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

This commit is a straightforward code cleanup inside Bitcoin Core's transaction-cluster linearization logic. It takes one large function, OptimizeStep, and splits it into two smaller helper functions, PickChunkToOptimize and PickDependencyToSplit, without changing what the code actually does. There is no security-relevant change here.

Lower-priorityclusterlin: make MergeSequence take SetIdx (simplification)by Pieter Wuille · 3221f1a0 · Feb 17, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: make MergeSequence take SetIdx (simplification)

Future changes will rely on knowing the chunk indexes of the two created
chunks after a split. It is natural to return this information from
Deactivate, which also simplifies MergeSequence.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a small internal code cleanup in Bitcoin Core's transaction clustering/linearization logic. It changes a helper function so it returns chunk indexes directly instead of having callers look them up afterward. There is no user-facing behavior change, no network change, and no security fix.

Lower-priorityclusterlin: split tx/chunk dep counting (preparation)by Pieter Wuille · f66fa69c · Feb 17, 2026 · 2 filesMessage 95 · StrongInformational 15Details
Commit message · Pieter Wuille

clusterlin: split tx/chunk dep counting (preparation)

This splits the chunk_deps variable in LoadLinearization in two, one for
tracking tx dependencies and one for chunk dependencies. This is a
preparation for a later commit, where chunks won't be identified anymore
by a representative transaction in them, but by a separate index. With
that, it seems weird to keep them both in the same structure if they
will be indexed in an unrelated way.

Note that the changes in src/test/util/cluster_linearize.h to the table
of worst observed iteration counts are due to switching to a different
data set, and are unrelated to the changes in this commit.

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

This is a routine internal code cleanup in Bitcoin Core's transaction clustering/linearization logic. It splits one combined counter into two separate counters for clarity, with no functional change intended. There is no security issue visible in the commit.

Lower-priorityclusterlin: avoid depgraph argument in SanityCheck (cleanup)by Pieter Wuille · 900e4597 · Feb 17, 2026 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: avoid depgraph argument in SanityCheck (cleanup)

Since the deterministic ordering change, SpanningForestState holds a
reference to the DepGraph it is linearizing. So this means we do not
need to pass it to SanityCheck() as an argument anymore.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a small internal cleanup in Bitcoin Core's transaction-cluster linearization code. It removes an unnecessary argument from a debugging/self-check function called SanityCheck(), because the object already stores a reference to the same data. There is no user-facing change, no network behavior change, and no security fix.

Lower-priorityclusterlin: fix type to count dependenciesby Pieter Wuille · 666b3797 · Feb 17, 2026 · 1 fileMessage 45 · ThinInformational 20Details
Commit message · Pieter Wuille

clusterlin: fix type to count dependencies

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

This commit fixes a variable type mismatch in Bitcoin Core's transaction clustering code. The code counts dependencies between groups of transactions, but was using a transaction-index type for the count. If that count type is smaller than the actual number of dependencies, it could overflow or behave incorrectly when many dependencies exist. The fix changes the count and random-picker variables to a plain unsigned integer, which is the appropriate type for counting.

Security candidateclusterlin: inline UpdateChunk into (De)Activate (optimization)by Pieter Wuille · d90f98ab · Feb 17, 2026 · 1 fileMessage 78 · AdequateInformational 12Details
Commit message · Pieter Wuille

clusterlin: inline UpdateChunk into (De)Activate (optimization)

The two calls to UpdateChunk, in Activate and Deactive each, are subtly
different: the top one needs to update the chunk_idx of iterated
transactions, while the bottom one leaves it unchanged. To exploit this
difference, inline the four function calls, getting rid of UpdateChunks.

This is also a preparation for a future improvement that inlines the
recomputation of reachable sets in the same loop in Deactivate.

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

This commit is a routine code cleanup in Bitcoin Core's transaction-cluster linearization logic. It removes a helper function called UpdateChunk and copies its logic directly into the two places that used it (Activate and Deactivate). The behavior is intended to stay exactly the same; the change is described by the author as an optimization and preparation for future work. There is no indication of a security fix.

Lower-priorityclusterlin: simplify PickMergeCandidate (optimization)by Pieter Wuille · 6f898dbb · Feb 17, 2026 · 2 filesMessage 63 · AdequateInformational 15Details
Commit message · Pieter Wuille

clusterlin: simplify PickMergeCandidate (optimization)

The current process consists of iterating over the transactions of the
chunk one by one, and then for each figuring out which of its
parents/children are in unprocessed chunks.

Simplify this (and speed it up slightly) by splitting this process into
two phases: first determine the union of all parents/children, and then
find which chunks those belong to.

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a routine code cleanup and performance tweak inside Bitcoin Core's transaction-cluster linearization logic. It rewrites how the algorithm picks which chunk of transactions to merge next, making the code simpler and slightly faster. There is no indication of a security bug being fixed.