BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2886 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 candidates603second-pass queue1092AI analyses
214commits · 30 days
500commits · 60 days
1525commits · 180 days
2880commits · 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
924Strong · 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 47 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 queuedtest: add coverage for importdescriptors while wallet is rescanningby Pol Espinasa · ad388bf2 · Jun 10, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Pol Espinasa

test: add coverage for importdescriptors while wallet is rescanning

Co-authored-by: w0xlt <woltx@protonmail.com>

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds a new automated test to Bitcoin Core. It checks that if you try to import wallet descriptors while the wallet is already busy rescanning the blockchain, the second import attempt is rejected with a clear error message. There is no change to production wallet code, so this patch does not fix or introduce any live security issue by itself.

AI review queuedtest: updated different_key to be different_field and also used a single assert_equal with 3 args instead of multiple assert_equalsby kevkevinpal · ddceb4e6 · Jun 10, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · kevkevinpal

test: updated different_key to be different_field and also used a single assert_equal with 3 args instead of multiple assert_equals

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

This is a minor cleanup of a Bitcoin Core test file. It renames a helper function parameter from 'different_key' to 'different_field' and combines two separate length checks into one three-argument equality assertion. There is no change to production code, no security fix, and no behavior change in what the test verifies.

Security candidateiwyu: Fix warnings in `src/bench` and treat them as errorby Hennadii Stepanov · 6751a323 · Jun 10, 2026 · 58 filesMessage 50 · ThinInformational 15Details
Commit message · Hennadii Stepanov

iwyu: Fix warnings in `src/bench` and treat them as error

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a code cleanup that adjusts which C++ header files are included in the project's benchmark code and a few related source files. It enables a stricter 'include what you use' (IWYU) check for the benchmark directory so missing or unnecessary #include lines are treated as errors in continuous integration. There is no change to program logic, no bug fix, and no security-relevant behavior.

Lower-priorityrefactor: Drop unused includes after iwyu CI bumpby MarcoFalke · fab52281 · Jun 10, 2026 · 2 filesMessage 72 · AdequateTriage 0Details
Commit message · MarcoFalke

refactor: Drop unused includes after iwyu CI bump

Now that the C++ std-lib was bumped in the CI task in the prior commit,
some unused includes can (and must) be dropped.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Lower-priorityci: Bump APT_LLVM_V-based task configs to Ubuntu 26.04by MarcoFalke · fa4774d0 · Jun 10, 2026 · 6 filesMessage 85 · StrongTriage 0Details
Commit message · MarcoFalke

ci: Bump APT_LLVM_V-based task configs to Ubuntu 26.04

Their clang version is pinned, so the only relevant change should be a
more recent cmake, more recent C++ stdlib, and more recent Python
version.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Lower-priorityci: Debian Trixie -> Ubuntu 26.04by MarcoFalke · fa1414a3 · Jun 10, 2026 · 5 filesMessage 57 · ThinTriage 0Details
Commit message · MarcoFalke

ci: Debian Trixie -> Ubuntu 26.04

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI review queuednet: move cs_main up in FetchBlock to fix rpc assert crashby Eugene Siegel · 359680b7 · Jun 9, 2026 · 1 fileMessage 85 · StrongModerate 54Details
Commit message · Eugene Siegel

net: move cs_main up in FetchBlock to fix rpc assert crash

1. FetchBlock runs in a http worker thread. It acquires a PeerRef,
locks cs_main, then may later call BlockRequested which asserts
that CNodeState exists for the peer.

2. FinalizeNode may run in either the bitcoind or b-net threads. It
locks cs_main, fetches a PeerRef from RemovePeer, fetches a CNodeState,
and later removes it from m_node_states.

Because of the lock placement in FetchBlock, the http worker thread in 1)
can acquire a valid PeerRef and block while the b-net thread in 2) is
cleaning up the peer in FinalizeNode. When the worker thread later acquires
cs_main, it may crash in BlockRequested since no CNodeState exists. Fix
this by acquiring the lock earlier in FetchBlock.

The lock can be replaced with a net-specific lock when the remaining
CNodeState fields are moved to Peer.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
AI analysis · Moderate 54/100

This commit fixes a rare crash in Bitcoin Core's networking code. When a user called a specific RPC command to fetch a block, the program could crash with an assertion failure if a peer disconnected at exactly the wrong moment. The fix moves a lock earlier so the peer's state cannot be cleaned up while the RPC thread is still using it. It is a stability bug, not a code-execution vulnerability, and requires precise timing to trigger.

Lower-prioritytest: Use SteadyClockContext in pcp_testsby MarcoFalke · fa03852e · Jun 9, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · MarcoFalke

test: Use SteadyClockContext in pcp_tests

This is easier to reason about, because it will automatically take care
of properly setting INITIAL_MOCK_TIME in the ctor. Also, it allows to
drop the ElapseTime and replace it with a call to operator+=()

100/100 · StrongMessage clarity
✓ 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
AI review queuedtest: Use FakeNodeClock in more placesby MarcoFalke · fa3716c4 · Jun 9, 2026 · 3 filesMessage 90 · StrongInformational 15Details
Commit message · MarcoFalke

test: Use FakeNodeClock in more places

The context is easier to reason about: E.g.,

* in TestBasicMining it allows to drop manual SetMockTime(0) calls,
* in connections_desirable_service_flags it allows to drop manual calls
to SetMockTime(GetTime<std::chrono::seconds>() + _n_) and replace them
by operator+=(_n_)
* in wallet_tests it clarifies that the mocktime does not persist
outside the AddTx function

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

This commit only changes Bitcoin Core's internal test code. It replaces the old global SetMockTime() helper with a new local FakeNodeClock object in three test files so that test time adjustments are scoped to each test and easier to read. There is no change to the actual Bitcoin node software that users run, so it cannot affect live wallets, transactions, or network security.

Lower-prioritytest: Add FakeNodeClock m_clock to TestChain100Setupby MarcoFalke · fae9623c · Jun 9, 2026 · 5 filesMessage 100 · StrongTriage 0Details
Commit message · MarcoFalke

test: Add FakeNodeClock m_clock to TestChain100Setup

Currently, all test cases using TestChain100Setup or a derived class
like BuildChainTestingSetup are using mocktime by default due to the
SetMockTime call in the TestChain100Setup ctor.

This is confusing, because test cases using mocktime explicitly seem to
imply that before they set the mocktime, real time was used.

E.g. index_reorg_crash claimed in a comment to "Enable mock time".

Fix this issue by adding a FakeNodeClock m_clock field to
TestChain100Setup. Then, use the m_clock instead of explicit calls to
SetMockTime or to a (now) shadowing local FakeNodeClock variable.

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
Lower-prioritybench, refactor: Use `std::string_view` for `BenchRunner` ctor parameterby Hennadii Stepanov · a6ed29d6 · Jun 9, 2026 · 2 filesMessage 73 · AdequateTriage 0Details
Commit message · Hennadii Stepanov

bench, refactor: Use `std::string_view` for `BenchRunner` ctor parameter

This avoids implicit conversions from string literals to `std::string`,
eliminating the need to include `<string>` everywhere the `BENCHMARK()`
macro is used.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityci: use llvm 22.1.7by fanquake · 6d47f7cc · Jun 9, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · fanquake

ci: use llvm 22.1.7

50/100 · ThinMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Lower-priorityci: skip libunwind runtime in LLVM buildby fanquake · 087f02c9 · Jun 9, 2026 · 1 fileMessage 84 · StrongTriage 0Details
Commit message · fanquake

ci: skip libunwind runtime in LLVM build

Document why we use LIBCXXABI_USE_LLVM_UNWINDER=OFF.

84/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Explains rationale or failure mode
AI review queuedscripted-diff: Rename UNIQUE_NAME to BITCOIN_UNIQUE_NAMEby Hennadii Stepanov · fba713a2 · Jun 8, 2026 · 5 filesMessage 83 · StrongInformational 15Details
Commit message · Hennadii Stepanov

scripted-diff: Rename UNIQUE_NAME to BITCOIN_UNIQUE_NAME

The `nb30.h` Windows header defines `UNIQUE_NAME` as a macro.

This introduces a fragile dependency on header inclusion order: if
Windows headers happen to be included before `UNIQUE_NAME` is used, the
preprocessor expands it into a numeric literal, causing syntax errors.

Rename the macro to `BITCOIN_UNIQUE_NAME` to remove this fragility and
avoid the collision entirely.

-BEGIN VERIFY SCRIPT-
sed -i 's/\<UNIQUE_NAME\>/BITCOIN_UNIQUE_NAME/g' $(git grep -l 'UNIQUE_NAME' ./src/)
-END VERIFY SCRIPT-

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
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a simple rename of an internal helper macro from UNIQUE_NAME to BITCOIN_UNIQUE_NAME. The change prevents a potential future build failure on Windows because a Windows system header also defines UNIQUE_NAME. It does not change program behavior, fix a vulnerability, or affect live network code.

AI review queuedtest: add coverage for importdescriptor with an encrypted walletby Pol Espinasa · 84d07e47 · Jun 8, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Pol Espinasa

test: add coverage for importdescriptor with an encrypted wallet

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

This commit only adds a new test case to Bitcoin Core's test suite. It checks that trying to import a wallet descriptor into an encrypted wallet fails with a helpful error message when the wallet is still locked. There is no change to production wallet code, no bug fix, and no security vulnerability being addressed.

Lower-priorityblockstorage: Remove cs_LastBlockFile recursive mutexby sedited · ec6cf49b · Jun 8, 2026 · 5 filesMessage 73 · AdequateTriage 0Details
Commit message · sedited

blockstorage: Remove cs_LastBlockFile recursive mutex

The cs_LastBlockFile mutex is redundant: all critical sections are
already covered by cs_main. This is demonstrated in this patch by
replacing all instances of locking cs_LastBlockFile with pairs of
`AssertLockHeld(::cs_main)` and `EXCLUSIVE_LOCKS_REQUIRED(::cs_main)`
annotations. No additional `::cs_main` LOCK(...)s are introduced.

It is also not clear for which sections `cs_LastBlockFile` is
responsible for. It is annotated for `m_blockfile_cursors`, but
sporadically and inconsistently also covers `m_blockfile_info`.

Since it has no semantic meaning, and seems confusing to developers,
remove it.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytest: Limit clocks to one active instanceby MarcoFalke · 35a814a0 · Jun 8, 2026 · 1 fileMessage 90 · StrongTriage 0Details
Commit message · MarcoFalke

test: Limit clocks to one active instance

SteadyClockContext and FakeNodeClock assume they are the only active
instance. Overlapping them in the same scope would silently clobber
each other.

Add a CRTP base class, LimitOne, that asserts at construction if
another instance already exists.

90/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
AI review queuedscripted-diff: Rename NodeClockContext to FakeNodeClockby seduless · 55e402ff · Jun 8, 2026 · 44 filesMessage 91 · StrongInformational 15Details
Commit message · seduless

scripted-diff: Rename NodeClockContext to FakeNodeClock

The previous name did not indicate the type was intended for
testing. Renaming to FakeNodeClock makes this explicit and
allows call sites to drop the ctx suffix on the variable name.

Suggested in #34858 review feedback.

-BEGIN VERIFY SCRIPT-
s() { git grep -l "$1" -- src | xargs sed -i "s/$1/$2/g"; }

s '\<NodeClockContext\>' 'FakeNodeClock'
s '\<clock_ctx\>' 'clock'
-END VERIFY SCRIPT-

91/100 · StrongMessage clarity
✓ 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
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a pure rename of a test-only helper class from NodeClockContext to FakeNodeClock, plus renaming its variables from clock_ctx to clock. It touches only test, benchmark, and fuzz code. There is no change to runtime Bitcoin node behavior and no security relevance.

AI review queuedtest: Use NodeClockContext in more call sitesby seduless · 1e9546fc · Jun 8, 2026 · 6 filesMessage 90 · StrongInformational 15Details
Commit message · seduless

test: Use NodeClockContext in more call sites

This refactor is a follow-up to commit
faad08e59c4419e09eb75054bf468ca98a837ca8 and does not
change any behavior.

These call sites are clean mechanical swaps. The remaining ones
require non-trivial test refactoring and are left for future
follow-ups.

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

This is a test-only code cleanup. It swaps old mock-time helpers for a newer test helper (NodeClockContext) in benchmarks and unit tests. The commit message explicitly says it does not change behavior, and the diff shows only mechanical replacements in test/bench files with no changes to production code.

Lower-prioritytest: Drop ++ from NodeClockContext default constructorby seduless · 758fea59 · Jun 8, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · seduless

test: Drop ++ from NodeClockContext default constructor

The increment was originally added so that mocked time would not appear
to go backward relative to real-clock timestamps captured before
construction, since Now<NodeSeconds>() rounds the current time down to
a whole second. In practice the tests do not mix real and mocked
timestamps in a way that exposes this, so the increment is unnecessary.

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
Lower-prioritytest: Enter mocktime before peer creation in block_relay_only_evictionby seduless · 7c2ec394 · Jun 8, 2026 · 1 fileMessage 95 · StrongTriage 0Details
Commit message · seduless

test: Enter mocktime before peer creation in block_relay_only_eviction

This is a follow-up to commit faad08e59c4419e09eb75054bf468ca98a837ca8.
Hoisting the NodeClockContext above peer creation ensures m_connected is
captured under mocktime, making the MINIMUM_CONNECT_TIME check
deterministic regardless of which peer is selected for eviction.

This is a prerequisite for the next commit, which removes the
one-second advance from the NodeClockContext default constructor.

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 review queuedadd release notesby Pol Espinasa · 0bfc5e4f · Jun 8, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Pol Espinasa

add release notes

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 only adds a release note documenting that two RPC commands now return a 'method not found' error when a specific optional feature is not enabled. It is purely documentation and contains no code changes.

Lower-prioritytest: check getprivatebroadcast and abortprivatebroadcast throw if the node is running without -privatebroadcast setby Pol Espinasa · fdc9fc1d · Jun 8, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Pol Espinasa

test: check getprivatebroadcast and abortprivatebroadcast throw if the node is running without -privatebroadcast set

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
Lower-priorityrpc: getprivatebroadcastinfo and abortprivatebroadcast throw if -privatebroadcast is disabledby Pol Espinasa · 7b821ef9 · Jun 8, 2026 · 3 filesMessage 50 · ThinTriage 0Details
Commit message · Pol Espinasa

rpc: getprivatebroadcastinfo and abortprivatebroadcast throw if -privatebroadcast is disabled

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedfuzz: fix dead HD keypaths (de)serialization round-tripby Sebastian Falbesoner · 5deb053a · Jun 7, 2026 · 1 fileMessage 91 · StrongInformational 19Details
Commit message · Sebastian Falbesoner

fuzz: fix dead HD keypaths (de)serialization round-trip

`DeserializeHDKeypaths()` was writing into the original `hd_keypaths`
map instead of `deserialized_hd_keypaths`. As a result the latter was
always empty and the round-trip assertion following was trivially true,
so the serialize/deserialize round-trip wasn't actually being exercised.

That bug was introduced with the commit introducing the fuzz target
(commit f898ef65c947776750e49d050633f830546bbdc6, #18994).

91/100 · StrongMessage clarity
✓ 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 evidencesigning or wallet pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Informational 19/100

This commit fixes a one-line bug in a Bitcoin Core fuzz test (an automated testing tool). The test was supposed to check that serializing and then deserializing HD keypaths produced the same data, but it accidentally wrote the deserialized result back into the original map. This made the test's final check always pass, so the round-trip was not actually being tested. It is a test-only bug, not a vulnerability in live Bitcoin Core code.