BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

252security candidates604second-pass queue1092AI analyses
211commits · 30 days
502commits · 60 days
1527commits · 180 days
2882commits · 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.

70/100 average clarity
926Strong · 80–100
1188Adequate · 60–79
686Thin · 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.
Antoine Poinsot2248170
Ava Chow15649130064
MarcoFalke40921110074
Lőrinc1772183081
fanquake2271976057
Hennadii Stepanov2091455063
rkrux57944074
Sjors Provoost89825074
Sebastian Falbesoner33717073
David Gumberg55638072
Pieter Wuille95518066
Hodlinator66523076
Analysis record

Published AI watches

Last scanned 15 minutes ago

Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35895: refactor: Enable clang-tidy rule to reject anon namespace in header

This is a code cleanup change that turns on a static-analysis rule to prevent a specific C++ coding pattern (anonymous namespaces in header files) and updates two headers to comply. It does not change how Bitcoin Core behaves at runtime an…

No security-relevant code changeNo memory safety, cryptography, consensus, or network changesTooling-only refactor (clang-tidy configuration)
c4fbd3c7by merge-script+9−123 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35630: test: Add importdescriptors rpc error test coverage

This commit only adds new test cases to Bitcoin Core's functional test suite. It does not change any production wallet, node, or RPC code. The tests verify that the importdescriptors RPC reports errors in the right order, rejects bad times…

465196d0by merge-script+77−11 file
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35180: coins: group private cache helpers

This change is purely a code cleanup: it moves two internal helper functions of a Bitcoin Core cache class into the private section of the class and removes a duplicate 'private:' label. There is no change to what the code does, no bug fix…

c940fd75by merge-script+13−141 file
No security note in commit
Low 29 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35582: rpc: reject null for optional parameters

This Bitcoin Core change tightens how three RPC commands (scantxoutset, scanblocks, deriveaddresses) handle the value null when it is passed for optional parameters. Previously, explicitly passing null could be treated differently from sim…

RPC parameter validation changeNull value handling changeAddition of explicit error checks for missing required contextual parameters
3db96eb5by merge-script+18−75 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable misc-definitions-in-headers

This commit is a code cleanup: it turns on a clang-tidy style check called 'misc-definitions-in-headers' and suppresses that check around a large inline implementation block in a benchmark header. There is no change to Bitcoin's runtime be…

fa93132dby MarcoFalke+3−02 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable clang-tidy rule to reject anon namespace in header

This commit only changes a linting configuration file for the project's code style checker. It enables a rule that prevents anonymous namespaces from being used in header files, which is a code-quality and build-hygiene practice. There is …

No security-relevant signals in the diff or commit message.Change is purely a static-analysis/linting configuration update.
fa5ca877by MarcoFalke+2−11 file
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Use C++20 std::identity over IntIdentity

This commit is a straightforward code cleanup: it replaces a small custom helper named IntIdentity with the standard C++20 std::identity from the <functional> header. The behavior of the ConvertBits function is unchanged; only the implemen…

fafe5042by MarcoFalke+4−111 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test the result order of a multiple import request is correct

This commit only adds a new automated test to Bitcoin Core. It checks that when a user asks the wallet to import multiple descriptors at once, the list of results comes back in the same order as the original request, including any error me…

3ac8b806by Pol Espinasa+40−01 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test invalid or missing timestamp throws importdescriptors

This commit only adds new automated tests for the Bitcoin Core wallet's importdescriptors RPC. It checks that the command correctly rejects requests with a missing or invalid timestamp. No production wallet code is changed, so this cannot …

No changes to consensus, networking, wallet logic, or cryptographyOnly functional test code is modifiedAdded assertions are for expected error handling paths
e4732bf0by Pol Espinasa+28−11 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Remove unused #include in common/system

This is a minor code cleanup that removes one unused header file include and swaps another for a more specific one. It does not change any program behavior or fix any security issue.

fa7304f3by MarcoFalke+1−22 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

iwyu: Fix warnings in `src/consensus` and treat them as errors

This commit is a routine code cleanup: it adjusts which C++ header files are included in several consensus-related source files and turns on a stricter compiler hygiene check (Include What You Use, or IWYU) for the src/consensus directory.…

13b53f8bby Hennadii Stepanov+42−79 files
No security note in commit
Informational 15 AI analysisMessage 55 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

fuzz: don't connman.ReceiveMsgFrom oversized msg

This is a small fix to a Bitcoin Core fuzz test (an automated internal testing harness), not to the live network code. The fuzzer was sometimes creating fake P2P messages larger than the real protocol allows and passing them into a test he…

Test-only fuzz harness hardeningOversized message guard added before ReceiveMsgFrom() in fuzz targetNo change to production P2P message acceptance logic
bb19f1daby Greg Sanders+5−01 file
No security note in commit
Informational 15 AI analysisMessage 97 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: Temporarily remove riscv32 config from GHA matrix

This commit simply removes one failing test configuration (RISC-V 32-bit bare metal) from the project's GitHub Actions CI matrix because it was failing. It is a routine CI maintenance change with no security implications.

fa06ea42by MarcoFalke+0−61 file
No security note in commit
Low 47 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: verify cross-build SDK archives

This change adds checksum verification to the build system's downloads of Apple, FreeBSD, NetBSD, and OpenBSD software development kits (SDKs). Before this patch, those SDK archives were downloaded at build time and extracted without confi…

Adds cryptographic digest verification for downloaded SDK archivesRemoves unchecked extraction of remote SDK archives in CIHardens CI supply chain for macOS/BSD cross-builds
873550beby Lőrinc+25−126 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: update NetBSD cross-build SDK

This is a routine maintenance update to Bitcoin Core's continuous integration (CI) system. It changes the version number of the NetBSD operating system used for cross-compilation testing from a release candidate (11.0_RC6) to the final rel…

2c87337eby Lőrinc+1−11 file
No security note in commit
Informational 15 AI analysisMessage 72 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: require `TryGetTotalRam()` detection

This commit only changes a test file and build configuration. It removes the option to skip a test when the system cannot detect total RAM, and instead requires the RAM detection to succeed. It does not change any production wallet, networ…

6a2de55aby Lőrinc+3−112 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: use `MIN_DBCACHE_BYTES`

This commit is a simple automated rename of a constant from MIN_DB_CACHE to MIN_DBCACHE_BYTES across five files. The value stays the same (4 MiB), and no behavior changes. It is a code-cleanup/refactoring change with no security relevance.

7cfa21d6by Lőrinc+5−55 files
No security note in commit
Informational 20 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

kernel: allow setting chainstate `dbcache`

This commit adds a new public API knob to the Bitcoin Core 'libbitcoinkernel' library so that programs using the kernel can choose how much memory to use for the chainstate database cache. It also enforces minimum and maximum size limits. …

New configurable cache-size API with explicit min/max validationReplaces hard-coded DEFAULT_KERNEL_CACHE with caller-supplied valueAdds unit tests for out-of-range rejection and 32-bit upper-bound rejection
8bd9f460by Lőrinc+41−14 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

kernel, node: colocate dbcache bounds

This commit is a small code cleanup: it moves two constants that define the minimum and maximum size of the database cache (dbcache) into a shared kernel header so that both the node and kernel code use the same limits. There is no change …

8aa21e11by Lőrinc+7−74 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

node, qt: inline `DEFAULT_DB_CACHE`

This is a small code cleanup change in Bitcoin Core. It removes a misleading alias named DEFAULT_DB_CACHE and replaces it with the underlying name DEFAULT_KERNEL_CACHE in a few places. The behavior of the program is unchanged; only the nam…

cd086c16by Lőrinc+5−74 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.

AI review queuedUpdate ci.ymlby Woolfgm · cd98caea · Dec 17, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Woolfgm

Update ci.yml

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit simply bumps the GitHub Actions 'checkout' step from version 5 to version 6 in the project's continuous integration (CI) workflow file. It does not change any Bitcoin Core source code, consensus rules, wallet logic, or network behavior. There is no indication of a security fix or vulnerability.

AI review queuednet: Fix `-Wmissing-braces`by Hennadii Stepanov · f46e3ec0 · Dec 17, 2025 · 5 filesMessage 35 · OpaqueInformational 15Details
Commit message · Hennadii Stepanov

net: Fix `-Wmissing-braces`

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

This commit is a portability fix for compiler warnings about missing braces when initializing IPv6 address constants. It introduces platform-specific macros so the code compiles cleanly on illumos and Microsoft Visual C++ without changing behavior. There is no security issue here.

AI review queuednet_processing: store transactions for private broadcast in PeerManagerby Vasil Dimov · 679ce3a0 · Dec 16, 2025 · 6 filesMessage 73 · AdequateInformational 12Details
Commit message · Vasil Dimov

net_processing: store transactions for private broadcast in PeerManager

Extend `PeerManager` with a transaction storage and a new method
`InitiateTxBroadcastPrivate()` which:
* adds a transaction to that storage and
* calls `CConnman::PrivateBroadcast::NumToOpenAdd()` to open dedicated
privacy connections that will pick an entry from the transaction
storage and broadcast it.

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

This commit adds infrastructure for a new privacy feature in Bitcoin Core. It creates a storage area for transactions that should be broadcast privately, and a method to request short-lived connections to privacy-network peers to broadcast them. The code is purely additive scaffolding; it does not by itself introduce a vulnerability, nor does it complete the private-broadcast feature. It simply wires a new code path into the existing transaction-broadcast logic.

AI review queuednode: extend node::TxBroadcast with a 3rd optionby Vasil Dimov · a3faa6f9 · Dec 16, 2025 · 3 filesMessage 68 · AdequateInformational 14Details
Commit message · Vasil Dimov

node: extend node::TxBroadcast with a 3rd option

Extend `node::TxBroadcast` with a 3rd option to not add the
transaction to the mempool and broadcast privately.

This is a non-functional change - `BroadcastTransaction()` will not
do anything if the 3rd options is passed and is not used by any of
its callers.

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

This commit adds a new placeholder option for broadcasting Bitcoin transactions more privately, but the option is not actually used anywhere yet. It is a non-functional change that prepares the code for a future feature. There is no security issue in this patch itself.

AI review queuednet_processing: rename RelayTransaction() to better describe what it doesby Vasil Dimov · 95c051e2 · Dec 16, 2025 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Vasil Dimov

net_processing: rename RelayTransaction() to better describe what it does

Rename `PeerManager::RelayTransaction()` to
`PeerManager::InitiateTxBroadcastToAll()`. The transaction is not
relayed when the method returns. It is only enqueued for a possible
broadcasting at a later time. Also, there will be another method which
only does so to Tor or I2P peers.

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

This commit simply renames a function inside Bitcoin Core from RelayTransaction() to InitiateTxBroadcastToAll(). No behavior changes; the new name is more accurate because the function only queues a transaction for possible later broadcast rather than sending it immediately. It is a code clarity and documentation improvement.

AI review queuedrefactor: Add compile-time-checked hex txidby rustaceanrob · 5ac35795 · Dec 13, 2025 · 5 filesMessage 98 · StrongInformational 15Details
Commit message · rustaceanrob

refactor: Add compile-time-checked hex txid

Suggested by @l0rinc in #34004

Message by @l0rinc:

This adds a consteval constructor to transaction_identifier (Txid/Wtxid) to allow parsing hex strings at compile-time.
This replaces runtime FromHex checks in tests, ensuring that malformed hardcoded hashes cause build failures rather than runtime test failures.

Test variables are explicitly marked constexpr. This is required to workaround a regression in GCC 14 (Bug 117501) where the compiler incorrectly flags consteval initialization of non-constexpr variables as "statements with no effect".

GCC Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117501
Reproducer: https://godbolt.org/z/xb5TMaPs6

Co-authored-by: l0rinc <pap.lorinc@gmail.com>

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a code cleanup change that lets Bitcoin Core tests create transaction IDs from hex strings at compile time instead of runtime. It does not change how the live network or wallet behaves, and it does not fix a security bug. It only makes test code stricter so that bad hardcoded hashes fail during compilation rather than when tests run.

AI review queuedipc: separate log statements per levelby stickies-v · f2731676 · Dec 13, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · stickies-v

ipc: separate log statements per level

Avoids ratelimiting unconditional log statements when debug logging
is enabled. Introduces slight behaviour change by removing
the category from unconditional logs, making them more uniform
with the other unconditional logs in the codebase.

Also, in a slight behavior change, prefix the info-level (and higher)
messages with "ipc:".

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

This is a routine logging cleanup in Bitcoin Core's inter-process communication (IPC) code. It changes how messages from the internal IPC library are written to the log file, mainly to prevent a harmless side effect where enabling detailed debug logging could accidentally suppress some log lines. There is no security vulnerability here.

AI review queuedrefactor: Separate out logic for building a tree-shaped dependency graphby marcofleon · a70a14a3 · Dec 12, 2025 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · marcofleon

refactor: Separate out logic for building a tree-shaped dependency graph

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a simple code cleanup: it takes a block of code that built a simplified tree-shaped dependency graph inside one fuzz test and moves it into a reusable helper function named BuildTreeGraph. The behavior is unchanged; no security issue is introduced or fixed.

AI review queuedfuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree`by marcofleon · 876e2849 · Dec 12, 2025 · 1 fileMessage 83 · StrongInformational 17Details
Commit message · marcofleon

fuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree`

The dependency graphs generated by this test can have holes
(unused indices) in them. This means some of the transactions
were skipped when using `depgraph_gen.TxCount()` as the upper
bound of the loop. Switch to using `depgraph.Positions()` to
correctly handle sparse graphs.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: broader security terminology
AI analysis · Informational 17/100

This commit fixes a bug in an internal Bitcoin Core fuzz test (a randomized self-test used during development). The test was looping over transaction indices using the total transaction count, but some indices can be unused 'holes' in the generated test data. As a result, the test sometimes skipped valid transactions or accessed unused slots. The fix makes the loop iterate over only the actually-used positions. This appears to be a test-only correctness issue, not a vulnerability in live Bitcoin Core code.

AI review queuedtest: fix race condition in p2p_v2_misbehaving.py peerid assertionby stratospher · 09dfa4d3 · Dec 12, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · stratospher

test: fix race condition in p2p_v2_misbehaving.py peerid assertion

due to asyncio's non-deterministic task scheduling, peer2's
connection might happen before peer1's, causing peer2 to get
assigned peer_id=1 on bitcoind side and peer1 to get assigned
peer_id=2 on bitcoind side.

since we test that peer2 remains connected, any disconnection
must originate from peer1, making the specific peer id unnecessary
for test correctness. so we can remove the specific peer_id from
the expected debug log.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit fixes a flaky test, not a security bug. The test checked for specific peer ID numbers in log messages, but because of unpredictable scheduling in the test framework, those IDs could differ between runs. The fix removes the specific ID numbers from the expected log messages so the test passes reliably. No production code or network behavior was changed.

AI review queuedrefactor: Pass chainstate parameters to MaybeCompleteSnapshotValidationby Ryan Ofsky · 840bd2ef · Dec 12, 2025 · 8 filesMessage 85 · StrongInformational 17Details
Commit message · Ryan Ofsky

refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation

Remove hardcoded references to m_ibd_chainstate and m_snapshot_chainstate so
MaybeCompleteSnapshotValidation function can be simpler and focus on validating
the snapshot without dealing with internal ChainstateManager states.

This is a step towards being able to validate the snapshot outside of
ActivateBestChain loop so cs_main is not locked for minutes when the snapshot
block is connected.

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 validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit is a code cleanup (refactor) in Bitcoin Core's assumeutxo snapshot feature. It renames functions and changes how the snapshot validation code receives its inputs, so it no longer relies on hardcoded internal chainstate names. The change does not alter the actual snapshot validation logic or security checks; it is preparation for future work to reduce how long a global lock is held during snapshot validation. There is no direct security vulnerability in this patch.

AI review queuedrefactor: Add Chainstate m_assumeutxo and m_target_utxohash membersby Ryan Ofsky · 9fe927b6 · Dec 12, 2025 · 3 filesMessage 85 · StrongInformational 17Details
Commit message · Ryan Ofsky

refactor: Add Chainstate m_assumeutxo and m_target_utxohash members

Get rid of m_disabled/IsUsable members. Instead of marking chains disabled for
different reasons, store chainstate assumeutxo status explicitly and use that
information to determine how chains should be treated.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This is a code cleanup (refactor) in Bitcoin Core that changes how the program tracks whether a chainstate is based on an unvalidated snapshot (assumeutxo). It replaces a simple disabled flag with explicit state tracking. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be a maintainability and correctness improvement.

AI review queuedrefactor: Convert ChainstateRole enum to structby Ryan Ofsky · 4dfe3839 · Dec 12, 2025 · 26 filesMessage 80 · StrongInformational 18Details
Commit message · Ryan Ofsky

refactor: Convert ChainstateRole enum to struct

Change ChainstateRole parameter passed to wallets and indexes. Wallets and
indexes need to know whether chainstate is historical and whether it is fully
validated. They should not be aware of the assumeutxo snapshot validation
process.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a code cleanup (refactor) change in Bitcoin Core. It replaces a three-value enum called ChainstateRole with a small struct carrying two yes/no flags: whether a chainstate is fully validated and whether it is historical (used for assumeutxo background validation). The logic that decides how wallets, indexes, and network processing react to block notifications is preserved; only the internal data type and comparisons are changed. There is no security fix or behavior change intended here.

AI review queuedgui: Add restore_and_migrate function to restore then migrate a walletby Ava Chow · f11a7d24 · Dec 11, 2025 · 2 filesMessage 73 · AdequateInformational 19Details
Commit message · Ava Chow

gui: Add restore_and_migrate function to restore then migrate a wallet

restore_and_migrate first restores a wallet file to the wallets
directory in the expected layout, then it performs legacy to descriptor
wallet migration on the restored wallet.

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

This commit adds a new GUI feature that lets a user restore a wallet backup file and then automatically convert it from the older 'legacy' wallet format to the newer 'descriptor' wallet format. It shows confirmation and progress dialogs, copies the backup into the normal wallets folder without changing the original file, and then runs the existing migration logic. There is no obvious security bug in the change itself; it is a user-facing convenience feature built on top of existing wallet restore and migration code.

AI review queuedgui: Move actual migration part of migrate() to its own functionby Ava Chow · 16ab6dfc · Dec 11, 2025 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Ava Chow

gui: Move actual migration part of migrate() to its own function

We will need to use the same migration code in a later commit, so first
move it to a separate function.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup in the Bitcoin Core graphical wallet. It takes the actual wallet-migration steps out of the user-facing 'migrate' function and puts them into a new internal helper function called 'do_migrate'. The user confirmation dialog and the migration logic itself are unchanged; the code is just reorganized so the same migration steps can be reused later. There is no security issue visible here.

AI review queuedwallet, interfaces, gui: Expose load_after_restore parameterby Ava Chow · 4ec2d18a · Dec 11, 2025 · 3 filesMessage 65 · AdequateInformational 18Details
Commit message · Ava Chow

wallet, interfaces, gui: Expose load_after_restore parameter

RestoreWallet has a load_after_restore parameter, expose this to callers
using it through the wallet interface as well.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit is a small, non-security code cleanup. It exposes an existing internal option called load_after_restore through the wallet interface so that callers can choose whether a restored wallet should be loaded automatically. The GUI code is updated to pass true, preserving the previous behavior. There is no indication this fixes a vulnerability or introduces a security risk.

AI review queuedSet bugprone-unused-return-value.AllowCastToVoidby MarcoFalke · fad4a9fe · Dec 11, 2025 · 5 filesMessage 60 · AdequateInformational 15Details
Commit message · MarcoFalke

Set bugprone-unused-return-value.AllowCastToVoid

It only makes sense to turn this off with C++26, which introduces the _
placeholder.

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

This commit is a code-style and static-analysis configuration change. It tells the clang-tidy linter to allow discarding function return values when the call is explicitly cast to void, and updates a few places in benchmark, test, and HTTP server code to use that style instead of a temporary variable marked 'maybe unused'. There is no security-relevant behavior change.

AI review queueddepends: Boost 1.90.0by fanquake · ca4a844e · Dec 10, 2025 · 2 filesMessage 38 · OpaqueInformational 15Details
Commit message · fanquake

depends: Boost 1.90.0

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit updates the Boost dependency used by Bitcoin Core's build system from version 1.88.0 to 1.90.0. It also removes a custom patch that was previously needed to skip compiling certain Boost.Test libraries, because the newer Boost version now includes that functionality directly. There is no indication in the commit that this fixes a security vulnerability.

AI review queuedrefactor: replace manual promise with SyncWithValidationInterfaceQueueby ANtutov · e71c4df1 · Dec 10, 2025 · 1 fileMessage 62 · AdequateInformational 18Details
Commit message · ANtutov

refactor: replace manual promise with SyncWithValidationInterfaceQueue

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a small internal cleanup in Bitcoin Core's transaction-broadcasting code. It replaces a hand-rolled 'promise/future' wait mechanism with an existing helper function that does the same job. There is no security bug being fixed here; the change just makes the code simpler and easier to maintain.

AI review queuednet: Cache -capturemessages settingby Anthony Towns · 5f5c1ea0 · Dec 9, 2025 · 4 filesMessage 35 · OpaqueInformational 15Details
Commit message · Anthony Towns

net: Cache -capturemessages setting

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

This commit is a small internal cleanup: it reads the '-capturemessages' debug/logging setting once at startup and stores it in a class member, instead of looking it up from global command-line arguments every time a message is sent. It also adds a test helper to set the flag directly. There is no security fix here and no behavior change visible to users.

AI review queuedrefactor: Enable clang-tidy bugprone-unused-return-valueby MarcoFalke · faa23738 · Dec 6, 2025 · 6 filesMessage 85 · StrongInformational 15Details
Commit message · MarcoFalke

refactor: Enable clang-tidy bugprone-unused-return-value

This requires some small refactors to silence false-positive warnings.

Also, expand the bugprone-unused-return-value.CheckedReturnTypes option
to include util::Result, and util::Expected.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a code cleanup change that turns on a static-analysis check (clang-tidy 'bugprone-unused-return-value') and makes small, behavior-preserving edits so the codebase passes the new check. It does not fix a security bug or change how the software behaves at runtime.

AI review queuedscripted-diff: LogPrintf -> LogInfoby MarcoFalke · fa05181d · Dec 4, 2025 · 15 filesMessage 68 · AdequateInformational 15Details
Commit message · MarcoFalke

scripted-diff: LogPrintf -> LogInfo

This refactor does not change behavior.

-BEGIN VERIFY SCRIPT-

sed --in-place 's/\<LogPrintf\>/LogInfo/g' \
$( git grep -l '\<LogPrintf\>' -- ./contrib/ ./src/ ./test/ ':(exclude)src/logging.h' )

-END VERIFY SCRIPT-

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple automated rename that changes every use of the logging macro LogPrintf to LogInfo across 15 source files. The commit message and the included verification script confirm it is a pure refactor with no intended behavior change. There is no security issue here.

AI review queuedrefactor: unify container presence checks - non-trivial countsby Lőrinc · d9319b06 · Dec 3, 2025 · 5 filesMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

refactor: unify container presence checks - non-trivial counts

The changes made here were:

| From | To |
|-------------------|------------------|
| `m.count(k) == 1` | `m.contains(k)` |
| `m.count(k) == 0` | `!m.contains(k)` |
| `m.count(k) != 1` | `!m.contains(k)` |
| `m.count(k) < 1` | `!m.contains(k)` |

* `mapInfo` is instance of `std::unordered_map` and can only contain 0 or 1 value for a given key;
* similarly, `g_enabled_filter_types` and `setClientRules` are both `std::set` instances;
* lastly, while `mapTxSpends` is `std::unordered_multimap` that could potentially hold multiple values, having a size less than 1 means that the value is missing.

`QMap<WalletModel*, WalletView*> mapWalletViews` values were also migrated manually.

Co-authored-by: pablomartin4btc <pablomartin4btc@gmail.com>
Co-authored-by: fanquake <fanquake@gmail.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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a code cleanup that replaces old-style 'count the number of matching entries' checks with newer, clearer 'does this container contain the key' checks. It does not change program behavior, fix a bug, or address a security issue. It is purely a readability and maintainability improvement.

AI review queuedrefactor: unify container presence checks - trivial countsby Lőrinc · 03930755 · Dec 3, 2025 · 56 filesMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

refactor: unify container presence checks - trivial counts

The changes made here were:

| From | To |
|-------------------|------------------|
| `m.count(k)` | `m.contains(k)` |
| `!m.count(k)` | `!m.contains(k)` |
| `m.count(k) == 0` | `!m.contains(k)` |
| `m.count(k) != 0` | `m.contains(k)` |
| `m.count(k) > 0` | `m.contains(k)` |

The commit contains the trivial, mechanical refactors where it doesn't matter if the container can have multiple elements or not

Co-authored-by: Jan B <608446+janb84@users.noreply.github.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
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a pure code cleanup: it replaces older-style container lookups like `m.count(k)` with the newer, clearer `m.contains(k)` across many files. The behavior is identical, so there is no security impact.

AI review queuedrefactor: unify container presence checks - findby Lőrinc · 8bb9219b · Dec 3, 2025 · 9 filesMessage 80 · StrongInformational 15Details
Commit message · Lőrinc

refactor: unify container presence checks - find

The changes made here were:

| From | To |
|------------------------|------------------|
| `m.find(k) == m.end()` | `!m.contains(k)` |
| `m.find(k) != m.end()` | `m.contains(k)` |

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a pure code cleanup: it replaces verbose 'find ... == end()' checks with the simpler 'contains()' method on C++ containers. There is no change in behavior, no bug fix, and no security impact.