{
 "number": 36087,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/36087",
 "title": "util: Add and use AssertUnreachable",
 "author": "maflcko",
 "author_association": "MEMBER",
 "created_at": "2026-08-26T05:24:17Z",
 "updated_at": "2026-09-05T13:21:01Z",
 "age_days": 22,
 "draft": true,
 "labels": [
  "Utils/log/libs",
  "Needs rebase",
  "CI failed"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
 "head_ref": "2608-unreachable",
 "head_repo": "maflcko/bitcoin-core",
 "head_history": [
  {
   "t": "2026-08-26T05:44:59Z",
   "sha": "acd644e1300f54040138a8f6680c34fb66c8c27e"
  },
  {
   "t": "2026-08-26T20:09:39Z",
   "sha": "75b5beff89dac7c003bf18462be9265471e60845"
  },
  {
   "t": "2026-08-26T20:11:02Z",
   "sha": "ef3faf295223e0e16559eacb36302dcd1939f0b4"
  },
  {
   "t": "2026-08-29T14:19:28Z",
   "sha": "701e01bad9e756cc72cf221599834fca30174826"
  },
  {
   "t": "2026-08-29T14:23:44Z",
   "sha": "e8d53b989d72e03cee51a560578005ff6fb6d0dc"
  },
  {
   "t": "2026-09-01T07:08:34Z",
   "sha": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8"
  }
 ],
 "additions": 790,
 "deletions": 546,
 "changed_files": 312,
 "commit_count": 7,
 "size_bucket": "XL",
 "mergeable_state": "dirty",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {},
   "conflicts": [
    {
     "number": 36159,
     "title": "http: Improve HTTPRemoteClient::MaybeDisconnect()",
     "author": "hodlinator"
    },
    {
     "number": 36135,
     "title": "fuzz: test HTTPRequest state machine in http_request",
     "author": "frankomosh"
    },
    {
     "number": 36130,
     "title": "test: add tests in transaction_tests.cpp covering live mutants",
     "author": "ViniciusCestarii"
    },
    {
     "number": 36122,
     "title": "BIP460: CISA for Taproot key path spends",
     "author": "fjahr"
    },
    {
     "number": 36116,
     "title": "iwyu: Fix warnings in `src/rpc` and treat them as errors",
     "author": "hebasto"
    },
    {
     "number": 36091,
     "title": "test: Add debug output to common tested types",
     "author": "rustaceanrob"
    },
    {
     "number": 36070,
     "title": "wallet: Add deriveHDKey interface",
     "author": "PraneethGunas"
    },
    {
     "number": 36068,
     "title": "fuzz: reuse one fuzzed wallet across inputs",
     "author": "brunoerg"
    },
    {
     "number": 36015,
     "title": "txorphanage: bound orphan memory by storing transactions serialized",
     "author": "brunoerg"
    },
    {
     "number": 35998,
     "title": "wallet: Handle or explicitly ignore `WalletBatch` write failures",
     "author": "achow101"
    },
    {
     "number": 35916,
     "title": "fuzz: improve ipc fuzz coverage",
     "author": "enirox001"
    },
    {
     "number": 35911,
     "title": "Warn on and add missing [[noreturn]]",
     "author": "fanquake"
    },
    {
     "number": 35887,
     "title": "ipc: use std::optional for checkSpawned(), add tests and rename arg -ipcfd to -ipcchild",
     "author": "ViniciusCestarii"
    },
    {
     "number": 35752,
     "title": "wallet: make encryption state updates atomic",
     "author": "l0rinc"
    },
    {
     "number": 35731,
     "title": "Indexes: Harden the flush-error notification invariant",
     "author": "arejula27"
    },
    {
     "number": 35714,
     "title": "validation: stop writes after flush failure",
     "author": "l0rinc"
    },
    {
     "number": 35713,
     "title": "Remove boost as a unit test runner",
     "author": "rustaceanrob"
    },
    {
     "number": 35646,
     "title": "RFC: Separate out runtime errors from BlockValidationState using `util::Expected`",
     "author": "yuvicc"
    },
    {
     "number": 35511,
     "title": "RFC: consensus: Make `CAmount` a class",
     "author": "hodlinator"
    },
    {
     "number": 35461,
     "title": "util: Clarify the assertion message in assertion failures (Assert, Assume, etc.)",
     "author": "optout21"
    },
    {
     "number": 35429,
     "title": "wallet: avoid global access in external signer SPKM",
     "author": "w0xlt"
    },
    {
     "number": 35377,
     "title": "wallet: Allow importing of descriptors without private keys when the wallet has the private keys",
     "author": "achow101"
    },
    {
     "number": 35301,
     "title": "Silent Payments: Implement bip352 (take 2)",
     "author": "Eunovo"
    },
    {
     "number": 35003,
     "title": "validation: improve block data I/O error handling in P2P paths",
     "author": "furszy"
    },
    {
     "number": 34909,
     "title": "wallet, refactor: modularise wallet by extracting out legacy wallet migration",
     "author": "rkrux"
    },
    {
     "number": 34861,
     "title": "wallet: Add importdescriptors interface",
     "author": "polespinasa"
    },
    {
     "number": 34778,
     "title": "logging: rewrite macros to enforce restrictions at compile-time, improve efficiency and usability",
     "author": "ryanofsky"
    },
    {
     "number": 34681,
     "title": "wallet: move rescan logic into ChainScanner and wallet/scan",
     "author": "Eunovo"
    },
    {
     "number": 34603,
     "title": "wallet: Fix detection of symlinks on Windows",
     "author": "achow101"
    },
    {
     "number": 34566,
     "title": "feature: Use different datadirs for different signets",
     "author": "ekzyis"
    },
    {
     "number": 34520,
     "title": "refactor: Add [[nodiscard]] to functions returning bool+mutable ref",
     "author": "maflcko"
    },
    {
     "number": 34193,
     "title": "wallet: make migration more robust against failures",
     "author": "furszy"
    },
    {
     "number": 34083,
     "title": "Add initial vectorized chacha20 implementation for 2-3x speedup",
     "author": "theuni"
    },
    {
     "number": 32387,
     "title": "ipc: add windows support",
     "author": "ryanofsky"
    },
    {
     "number": 31252,
     "title": "rpc: print P2WSH and P2SH redem Script in getrawtransaction and getblock",
     "author": "polespinasa"
    },
    {
     "number": 30342,
     "title": "kernel, logging: Pass Logger instances to kernel objects",
     "author": "ryanofsky"
    },
    {
     "number": 29278,
     "title": "Wallet:  Add `maxfeerate` wallet startup option",
     "author": "ismaelsadeeq"
    },
    {
     "number": 29256,
     "title": "log, refactor: Allow log macros to accept context arguments",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {},
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 0,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "jeanpablojp"
  ]
 },
 "signals": {
  "needs_rebase": true,
  "ci_failed": true,
  "mergeable_state": "dirty",
  "last_author_activity": "2026-09-01T07:09:37Z",
  "last_reviewer_activity": "2026-08-29T17:37:39Z",
  "last_reviewer": "jeanpablojp",
  "author_silent_days": 16,
  "waiting_on_author_days": 0,
  "days_since_update": 12
 },
 "refs": {
  "mentioned": [],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [],
  "conflicts": [
   36159,
   36135,
   36130,
   36122,
   36116,
   36091,
   36070,
   36068,
   36015,
   35998,
   35916,
   35911,
   35887,
   35752,
   35731,
   35714,
   35713,
   35646,
   35511,
   35461,
   35429,
   35377,
   35301,
   35003,
   34909,
   34861,
   34778,
   34681,
   34603,
   34566,
   34520,
   34193,
   34083,
   32387,
   31252,
   30342,
   29278,
   29256
  ]
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [
  "src/script/interpreter.cpp",
  "test/lint/test_runner/src/lint_cpp.rs",
  "test/lint/test_runner/src/main.rs"
 ],
 "body": "The current code uses assertions with falsy literal values in a few places. This is perfectly fine, but this comes with a bit of confusion sometimes:\n\n* `assert(false)` may cause confusion when it is unclear if `NDEBUG` can disable it. (The intention is to disallow `NDEBUG` compilation)\n* `Assert(false)` hides the noreturn attribute behind a function call, which may cause GCC return-type warnings. (Clang seems to understand it) E.g. https://godbolt.org/z/e7bWsPn51\n* When C++23 will be allowed, devs may prefer `std::unreachable`. However, this is unsafe and will invoke UB.\n* There is confusion why a `CHECK_NONFATAL` macro exists, but no fatal equivalent.\n\nFix all those issues by:\n\n* Adding the util/check.h include for all assertions to import the `NDEBUG` compile error. (scripted-diff + clang-format)\n* Adding a new `AssertUnreachable`, which directly calls the noreturn `assertion_fail` helper.\n* Adding an `assert_falsy` linter to enforce all code to use this macro.\n* Adding a linter to forbid `std::unreachable`.",
 "commits": [
  {
   "sha": "6f48b96b5308103590e828cf90afddcfbce88421",
   "date": "2026-09-01T06:56:53Z",
   "message": "scripted-diff: Add util/check.h includes for assertions\n\nThe project has a compile error when compiled without assertions in\nutil/check.h. Thus, util/check.h should be included for all assertions.\n\nSo do that with a scripted-diff for Assert and assert, and remove the\ncassert include, which is exported from util/check.h.\n\n-BEGIN VERIFY SCRIPT-\n\n paths=(\n   'src' \\\n   ':(exclude)src/bench/nanobench.h' \\\n   ':(exclude)src/tinyformat.h' \\\n   ':(exclude)src/univalue' \\\n   ':(exclude)src/crc32c' \\\n   ':(exclude)src/crypto/ctaes' \\\n   ':(exclude)src/ipc/libmultiprocess' \\\n   ':(exclude)src/leveldb' \\\n   ':(exclude)src/minisketch' \\\n   ':(exclude)src/secp256k1' \\\n )\n\n # Add the util/check.h includes\n for f in $(git grep -l --extended-regexp \"\\<(a|A)ssert\\(\" -- \"${paths[@]}\"); do\n   if ! grep --quiet \"util/check.h\" \"$f\"; then\n     line=$(grep --line-number --max-count=1 '^#include' \"$f\" | cut --delimiter=: --fields=1)\n     sed --in-place \"${line}i#include <util/check.h>\" \"$f\"\n   fi\n done\n\n # Remove cassert includes\n for f in $(git grep -l '<cassert>' -- \"${paths[@]}\"); do\n   sed --in-place '/^#include <cassert>$/d' \"$f\"\n done\n\n-END VERIFY SCRIPT-"
  },
  {
   "sha": "33e78c167ae0decdd89baeb1f6784b716690c072",
   "date": "2026-09-01T06:56:53Z",
   "message": "refactor: Add missing #include external_signer.h to external_signer_scriptpubkeyman.h\n\nThis include is required and this change is also required for the next commit."
  },
  {
   "sha": "1c636d994a28b74abb565a7d7cf3c78107ebc05b",
   "date": "2026-09-01T06:59:07Z",
   "message": "scripted-diff: Sort includes\n\n-BEGIN VERIFY SCRIPT-\ngit show -U0 HEAD~1 | ./contrib/devtools/clang-format-diff.py -p1 -i -v\n-END VERIFY SCRIPT-"
  },
  {
   "sha": "2c658f176f3148d5a1f8fed9eb6336b3727079ea",
   "date": "2026-09-01T06:59:11Z",
   "message": "util: Add AssertUnreachable\n\nAlso, in the tests convert a falsy literal to a \"runtime\" zero value."
  },
  {
   "sha": "281b80c766bab0bc3468ac10d33d4e593061f83a",
   "date": "2026-09-01T07:05:04Z",
   "message": "scripted-diff: Replace falsy assertions with AssertUnreachable\n\nReplace assertions with falsy literal values by the explicit unreachable-code assertion macro.\n\n-BEGIN VERIFY SCRIPT-\n\n paths=(\n   'src'\n   ':(exclude)src/tinyformat.h'\n   ':(exclude)src/univalue/'\n   ':(exclude)src/crc32c'\n   ':(exclude)src/crypto/ctaes'\n   ':(exclude)src/ipc/libmultiprocess'\n   ':(exclude)src/leveldb'\n   ':(exclude)src/minisketch'\n   ':(exclude)src/secp256k1'\n )\n\n sed --in-place --regexp-extended 's/\\<(a|A)ssert\\((0|false)\\)/AssertUnreachable()/g' $( \\\n   git grep -l --extended-regexp '\\<(a|A)ssert\\((0|false)\\)' -- \"${paths[@]}\" \\\n )\n\n sed --in-place --regexp-extended 's/assert\\((0|false) && \"([^\"]*)\"\\);/AssertUnreachable(); \\/\\/ \\2/g' $( \\\n   git grep -l --extended-regexp '\\<assert\\((0|false) &&' -- \"${paths[@]}\" \\\n )\n\n-END VERIFY SCRIPT-"
  },
  {
   "sha": "2d8025c569d8af1d4ad80c24e2ee26b8cac4c20e",
   "date": "2026-09-01T07:05:04Z",
   "message": "lint: Add assert_falsy linter"
  },
  {
   "sha": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
   "date": "2026-09-01T07:05:04Z",
   "message": "lint: Add std_unreachable linter"
  }
 ],
 "timeline": [
  {
   "t": "2026-08-26T05:44:59Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "acd644e1300f54040138a8f6680c34fb66c8c27e"
  },
  {
   "t": "2026-08-26T20:09:39Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "75b5beff89dac7c003bf18462be9265471e60845"
  },
  {
   "t": "2026-08-26T20:11:02Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "ef3faf295223e0e16559eacb36302dcd1939f0b4"
  },
  {
   "t": "2026-08-29T14:19:28Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "701e01bad9e756cc72cf221599834fca30174826"
  },
  {
   "t": "2026-08-29T14:23:44Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "e8d53b989d72e03cee51a560578005ff6fb6d0dc"
  },
  {
   "t": "2026-08-29T17:37:39Z",
   "kind": "review",
   "who": "jeanpablojp",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "e8d53b989d72e03cee51a560578005ff6fb6d0dc",
   "text": "Left 3 comments."
  },
  {
   "t": "2026-08-29T17:37:39Z",
   "kind": "review_comment",
   "who": "jeanpablojp",
   "assoc": "CONTRIBUTOR",
   "path": "src/script/interpreter.cpp",
   "commit": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
   "in_reply_to": null,
   "text": "`AssertUnreachable` here and in `SignatureHashSchnorr` calls `assertion_fail` from `util/check.cpp`. This file is in `libbitcoin_consensus`, which should only depend on crypto. Normal builds hide it, `bitcoin_common` pulls util in anyway, but the riscv job links the lib standalone and breaks. Exclude consensus from `assert_falsy` under the same \"not linking the util lib\" reason, or move `assertion_fail`?"
  },
  {
   "t": "2026-08-29T17:37:39Z",
   "kind": "review_comment",
   "who": "jeanpablojp",
   "assoc": "CONTRIBUTOR",
   "path": "test/lint/test_runner/src/lint_cpp.rs",
   "commit": "e8d53b989d72e03cee51a560578005ff6fb6d0dc",
   "in_reply_to": null,
   "text": "The message says any falsy literal, but the regex hardcodes the spacing, so `assert (false)`, `assert(false )` and `assert(0&&\"x\")` all slip through. `\\<(a|A)ssert\\s*\\(\\s*(0|false)\\s*(&&|\\))` catches them. And `std_unreachable` lets `__builtin_unreachable()` through. libstdc++ implements `std::unreachable()` as exactly that, and it builds under C++20 where `std::unreachable()` doesn't. Worth catching the builtin too?"
  },
  {
   "t": "2026-08-29T17:37:39Z",
   "kind": "review_comment",
   "who": "jeanpablojp",
   "assoc": "CONTRIBUTOR",
   "path": "test/lint/test_runner/src/main.rs",
   "commit": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
   "in_reply_to": null,
   "text": "The scripted-diff that satisfies this linter is the next commit, so lint is red here, 135 lines. Swapping the two applies cleanly and gives the same tree. The linters already in master came in with their fix in one commit."
  },
  {
   "t": "2026-09-01T07:08:34Z",
   "kind": "force_push",
   "who": "maflcko",
   "commit": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8"
  },
  {
   "t": "2026-09-01T07:08:57Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "test/lint/test_runner/src/lint_cpp.rs",
   "commit": "e8d53b989d72e03cee51a560578005ff6fb6d0dc",
   "in_reply_to": 3887230883,
   "text": "[quoted text omitted]\n\nThx, used that.\n\n[quoted text omitted]\nI think the risk of someone using it should be low, because it is a compiler-specific built-in."
  },
  {
   "t": "2026-09-01T07:09:01Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "test/lint/test_runner/src/main.rs",
   "commit": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
   "in_reply_to": 3887230890,
   "text": "Thx, swapped commits"
  },
  {
   "t": "2026-09-01T07:09:37Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/script/interpreter.cpp",
   "commit": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
   "in_reply_to": 3887230879,
   "text": "Thx, will fix this some time before taking out of draft."
  }
 ],
 "labels_log": [
  {
   "t": "2026-08-26T05:24:21Z",
   "action": "labeled",
   "label": "Utils/log/libs",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-26T05:45:34Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-26T15:52:51Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-26T20:23:36Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-29T08:43:26Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-29T15:27:05Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-31T16:50:56Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-01T07:47:37Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-05T13:21:00Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2026-08-26T05:45:17Z",
   "kind": "convert_to_draft",
   "who": "maflcko"
  }
 ],
 "text_chars": 4833,
 "text_tokens_estimate": 1208,
 "changed_paths": [
  "doc/developer-notes.md",
  "src/addresstype.cpp",
  "src/addrman.cpp",
  "src/arith_uint256.cpp",
  "src/base58.cpp",
  "src/bech32.cpp",
  "src/bench/sign_transaction.cpp",
  "src/bench/verify_script.cpp",
  "src/bip324.cpp",
  "src/bitcoin-chainstate.cpp",
  "src/bitcoin-cli.cpp",
  "src/bitcoin-util.cpp",
  "src/blockencodings.cpp",
  "src/blockfilter.cpp",
  "src/chain.h",
  "src/chainparams.cpp",
  "src/chainparamsbase.cpp",
  "src/cluster_linearize.h",
  "src/coins.cpp",
  "src/coins.h",
  "src/common/messages.cpp",
  "src/common/signmessage.cpp",
  "src/compressor.cpp",
  "src/crypto/chacha20.cpp",
  "src/crypto/chacha20poly1305.cpp",
  "src/crypto/hex_base.cpp",
  "src/crypto/hkdf_sha256_32.cpp",
  "src/crypto/poly1305.h",
  "src/crypto/sha256.cpp",
  "src/crypto/sha3.cpp",
  "src/crypto/siphash.cpp",
  "src/dbwrapper.cpp",
  "src/deploymentinfo.cpp",
  "src/deploymentinfo.h",
  "src/deploymentstatus.h",
  "src/hash.h",
  "src/httpserver.cpp",
  "src/index/blockfilterindex.cpp",
  "src/index/txindex.cpp",
  "src/init.cpp",
  "src/ipc/capnp/common-types.h",
  "src/ipc/capnp/protocol.cpp",
  "src/ipc/test/fuzz/ipc.cpp",
  "src/ipc/test/ipc_tests.cpp",
  "src/kernel/bitcoinkernel.cpp",
  "src/kernel/chainparams.cpp",
  "src/kernel/coinstats.cpp",
  "src/kernel/disconnected_transactions.cpp",
  "src/kernel/mempool_removal_reason.cpp",
  "src/key.cpp",
  "src/key_io.cpp",
  "src/logging.cpp",
  "src/mapport.cpp",
  "src/memusage.h",
  "src/merkleblock.cpp",
  "src/net.cpp",
  "src/net.h",
  "src/net_permissions.h",
  "src/net_processing.cpp",
  "src/netaddress.cpp",
  "src/netaddress.h",
  "src/netbase.cpp",
  "src/netgroup.cpp",
  "src/netgroup.h",
  "src/node/chainstate.cpp",
  "src/node/coin.cpp",
  "src/node/connection_types.cpp",
  "src/node/eviction.cpp",
  "src/node/minisketchwrapper.cpp",
  "src/node/psbt.cpp",
  "src/node/transaction.cpp",
  "src/node/txdownloadman_impl.cpp",
  "src/node/txorphanage.cpp",
  "src/node/utxo_snapshot.cpp",
  "src/outputtype.cpp",
  "src/policy/feerate.cpp",
  "src/policy/fees/block_policy_estimator.cpp",
  "src/policy/fees/estimator_man.cpp",
  "src/policy/packages.cpp",
  "src/policy/policy.cpp",
  "src/prevector.h",
  "src/primitives/transaction.cpp",
  "src/protocol.cpp",
  "src/protocol.h",
  "src/psbt.cpp",
  "src/psbt.h",
  "src/pubkey.cpp",
  "src/qt/addresstablemodel.cpp",
  "src/qt/askpassphrasedialog.cpp",
  "src/qt/bantablemodel.cpp",
  "src/qt/bitcoin.cpp",
  "src/qt/bitcoin.h",
  "src/qt/bitcoinamountfield.cpp",
  "src/qt/bitcoingui.cpp",
  "src/qt/bitcoinunits.cpp",
  "src/qt/guiutil.cpp",
  "src/qt/guiutil.h",
  "src/qt/optionsmodel.cpp",
  "src/qt/optionsmodel.h",
  "src/qt/peertablemodel.cpp",
  "src/qt/peertablesortproxy.cpp",
  "src/qt/receivecoinsdialog.cpp",
  "src/qt/rpcconsole.cpp",
  "src/qt/sendcoinsdialog.cpp",
  "src/qt/splashscreen.cpp",
  "src/qt/test/addressbooktests.cpp",
  "src/qt/test/apptests.cpp",
  "src/qt/test/wallettests.cpp",
  "src/qt/transactionrecord.cpp",
  "src/qt/transactiontablemodel.cpp",
  "src/qt/utilitydialog.cpp",
  "src/qt/walletcontroller.cpp",
  "src/qt/walletframe.cpp",
  "src/qt/walletmodel.cpp",
  "src/qt/walletview.cpp",
  "src/random.cpp",
  "src/random.h",
  "src/rest.cpp",
  "src/rpc/server.cpp",
  "src/scheduler.cpp",
  "src/script/descriptor.cpp",
  "src/script/interpreter.cpp",
  "src/script/miniscript.cpp",
  "src/script/miniscript.h",
  "src/script/script.cpp",
  "src/script/script.h",
  "src/script/sign.cpp",
  "src/script/solver.cpp",
  "src/span.h",
  "src/streams.h",
  "src/support/allocators/pool.h",
  "src/sync.h",
  "src/test/blockchain_tests.cpp",
  "src/test/blockencodings_tests.cpp",
  "src/test/blockfilter_tests.cpp",
  "src/test/blockmanager_tests.cpp",
  "src/test/btcsignals_tests.cpp",
  "src/test/chainstate_write_tests.cpp",
  "src/test/checkqueue_tests.cpp",
  "src/test/compress_tests.cpp",
  "src/test/crypto_tests.cpp",
  "src/test/cuckoocache_tests.cpp",
  "src/test/flatfile_tests.cpp",
  "src/test/fuzz/addition_overflow.cpp",
  "src/test/fuzz/addrman.cpp",
  "src/test/fuzz/asmap.cpp",
  "src/test/fuzz/asmap_direct.cpp",
  "src/test/fuzz/banman.cpp",
  "src/test/fuzz/base_encode_decode.cpp",
  "src/test/fuzz/bech32.cpp",
  "src/test/fuzz/bip324.cpp",
  "src/test/fuzz/bitdeque.cpp",
  "src/test/fuzz/bitset.cpp",
  "src/test/fuzz/block.cpp",
  "src/test/fuzz/block_header.cpp",
  "src/test/fuzz/block_index.cpp",
  "src/test/fuzz/block_index_tree.cpp",
  "src/test/fuzz/bloom_filter.cpp",
  "src/test/fuzz/cluster_linearize.cpp",
  "src/test/fuzz/coins_view.cpp",
  "src/test/fuzz/coinscache_sim.cpp",
  "src/test/fuzz/connect_block.cpp",
  "src/test/fuzz/connman.cpp",
  "src/test/fuzz/crypto_aes256.cpp",
  "src/test/fuzz/crypto_aes256cbc.cpp",
  "src/test/fuzz/crypto_chacha20.cpp",
  "src/test/fuzz/crypto_chacha20poly1305.cpp",
  "src/test/fuzz/crypto_common.cpp",
  "src/test/fuzz/crypto_diff_fuzz_chacha20.cpp",
  "src/test/fuzz/crypto_poly1305.cpp",
  "src/test/fuzz/cuckoocache.cpp",
  "src/test/fuzz/dbwrapper.cpp",
  "src/test/fuzz/decode_tx.cpp",
  "src/test/fuzz/descriptor_parse.cpp",
  "src/test/fuzz/deserialize.cpp",
  "src/test/fuzz/difference_formatter.cpp",
  "src/test/fuzz/fee_rate.cpp",
  "src/test/fuzz/feefrac.cpp",
  "src/test/fuzz/feeratediagram.cpp",
  "src/test/fuzz/fees.cpp",
  "src/test/fuzz/flatfile.cpp",
  "src/test/fuzz/float.cpp",
  "src/test/fuzz/golomb_rice.cpp",
  "src/test/fuzz/headerssync.cpp",
  "src/test/fuzz/hex.cpp",
  "src/test/fuzz/http_request.cpp",
  "src/test/fuzz/integer.cpp",
  "src/test/fuzz/key.cpp",
  "src/test/fuzz/key_io.cpp",
  "src/test/fuzz/kitchen_sink.cpp",
  "src/test/fuzz/locale.cpp",
  "src/test/fuzz/merkle.cpp",
  "src/test/fuzz/message.cpp",
  "src/test/fuzz/miniscript.cpp",
  "src/test/fuzz/muhash.cpp",
  "src/test/fuzz/multiplication_overflow.cpp",
  "src/test/fuzz/net.cpp",
  "src/test/fuzz/net_permissions.cpp",
  "src/test/fuzz/netaddress.cpp",
  "src/test/fuzz/netbase_dns_lookup.cpp",
  "src/test/fuzz/node_eviction.cpp",
  "src/test/fuzz/p2p_headers_presync.cpp",
  "src/test/fuzz/p2p_private_broadcast.cpp",
  "src/test/fuzz/p2p_transport_serialization.cpp",
  "src/test/fuzz/parse_hd_keypath.cpp",
  "src/test/fuzz/parse_iso8601.cpp",
  "src/test/fuzz/parse_numbers.cpp",
  "src/test/fuzz/poolresource.cpp",
  "src/test/fuzz/prevector.cpp",
  "src/test/fuzz/primitives_transaction.cpp",
  "src/test/fuzz/private_broadcast.cpp",
  "src/test/fuzz/rolling_bloom_filter.cpp",
  "src/test/fuzz/rpc.cpp",
  "src/test/fuzz/script.cpp",
  "src/test/fuzz/script_descriptor_cache.cpp",
  "src/test/fuzz/script_flags.cpp",
  "src/test/fuzz/script_sign.cpp",
  "src/test/fuzz/scriptnum_ops.cpp",
  "src/test/fuzz/secp256k1_ec_seckey_import_export_der.cpp",
  "src/test/fuzz/span.cpp",
  "src/test/fuzz/string.cpp",
  "src/test/fuzz/threadpool.cpp",
  "src/test/fuzz/transaction.cpp",
  "src/test/fuzz/tx_in.cpp",
  "src/test/fuzz/tx_out.cpp",
  "src/test/fuzz/tx_pool.cpp",
  "src/test/fuzz/txdownloadman.cpp",
  "src/test/fuzz/txgraph.cpp",
  "src/test/fuzz/txrequest.cpp",
  "src/test/fuzz/util.h",
  "src/test/fuzz/util/mempool.cpp",
  "src/test/fuzz/util/net.cpp",
  "src/test/fuzz/util/wallet.h",
  "src/test/fuzz/vecdeque.cpp",
  "src/test/fuzz/versionbits.cpp",
  "src/test/headers_sync_chainwork_tests.cpp",
  "src/test/httpserver_tests.cpp",
  "src/test/interfaces_tests.cpp",
  "src/test/key_io_tests.cpp",
  "src/test/logging_tests.cpp",
  "src/test/mempool_fee_estimator_tests.cpp",
  "src/test/mempool_tests.cpp",
  "src/test/miniminer_tests.cpp",
  "src/test/miniscript_tests.cpp",
  "src/test/net_tests.cpp",
  "src/test/node_init_tests.cpp",
  "src/test/orphanage_tests.cpp",
  "src/test/pcp_tests.cpp",
  "src/test/private_broadcast_tests.cpp",
  "src/test/random_tests.cpp",
  "src/test/rbf_tests.cpp",
  "src/test/scheduler_tests.cpp",
  "src/test/scriptnum10.h",
  "src/test/sigopcount_tests.cpp",
  "src/test/sock_tests.cpp",
  "src/test/streams_tests.cpp",
  "src/test/threadpool_tests.cpp",
  "src/test/transaction_tests.cpp",
  "src/test/txdownload_tests.cpp",
  "src/test/txrequest_tests.cpp",
  "src/test/txvalidation_tests.cpp",
  "src/test/util/chainstate.h",
  "src/test/util/cluster_linearize.h",
  "src/test/util/net.cpp",
  "src/test/util/net.h",
  "src/test/util/poolresourcetester.h",
  "src/test/util/transaction_utils.cpp",
  "src/test/util_check_tests.cpp",
  "src/test/util_tests.cpp",
  "src/test/validation_chainstatemanager_tests.cpp",
  "src/test/validation_tests.cpp",
  "src/torcontrol.cpp",
  "src/txdb.cpp",
  "src/txgraph.cpp",
  "src/txmempool.h",
  "src/txrequest.cpp",
  "src/uint256.h",
  "src/util/asmap.cpp",
  "src/util/chaintype.cpp",
  "src/util/check.h",
  "src/util/fees.cpp",
  "src/util/obfuscation.h",
  "src/util/result.h",
  "src/validation.cpp",
  "src/wallet/coincontrol.cpp",
  "src/wallet/coinselection.cpp",
  "src/wallet/db.cpp",
  "src/wallet/export.cpp",
  "src/wallet/external_signer_scriptpubkeyman.cpp",
  "src/wallet/external_signer_scriptpubkeyman.h",
  "src/wallet/feebumper.h",
  "src/wallet/scriptpubkeyman.cpp",
  "src/wallet/spend.cpp",
  "src/wallet/test/coinselector_tests.cpp",
  "src/wallet/test/fuzz/coincontrol.cpp",
  "src/wallet/test/fuzz/coinselection.cpp",
  "src/wallet/test/fuzz/spend.cpp",
  "src/wallet/test/fuzz/wallet_bdb_parser.cpp",
  "src/wallet/test/group_outputs_tests.cpp",
  "src/wallet/test/ismine_tests.cpp",
  "src/wallet/test/psbt_wallet_tests.cpp",
  "src/wallet/test/spend_tests.cpp",
  "src/wallet/test/util.cpp",
  "src/wallet/test/wallet_test_fixture.cpp",
  "src/wallet/test/wallet_tests.cpp",
  "src/wallet/transaction.cpp",
  "src/wallet/wallet.cpp",
  "src/wallet/wallet.h",
  "src/wallet/walletutil.cpp",
  "src/zmq/zmqabstractnotifier.cpp",
  "test/lint/test_runner/src/lint_cpp.rs",
  "test/lint/test_runner/src/main.rs"
 ],
 "files": [
  {
   "path": "doc/developer-notes.md",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/addresstype.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/addrman.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/arith_uint256.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/base58.cpp",
   "add": 1,
   "del": 2
  },
  {
   "path": "src/bech32.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/bench/sign_transaction.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/bench/verify_script.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/bip324.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/bitcoin-chainstate.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/bitcoin-cli.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/bitcoin-util.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/blockencodings.cpp",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/blockfilter.cpp",
   "add": 6,
   "del": 4
  },
  {
   "path": "src/chain.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/chainparams.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/chainparamsbase.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/cluster_linearize.h",
   "add": 8,
   "del": 7
  },
  {
   "path": "src/coins.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/coins.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/common/messages.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/common/signmessage.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/compressor.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/crypto/chacha20.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/crypto/chacha20poly1305.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/crypto/hex_base.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/crypto/hkdf_sha256_32.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/crypto/poly1305.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/crypto/sha256.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/crypto/sha3.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/crypto/siphash.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/dbwrapper.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/deploymentinfo.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/deploymentinfo.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/deploymentstatus.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/hash.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/httpserver.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/index/blockfilterindex.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/index/txindex.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/init.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/capnp/common-types.h",
   "add": 7,
   "del": 6
  },
  {
   "path": "src/ipc/capnp/protocol.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/ipc/test/fuzz/ipc.cpp",
   "add": 5,
   "del": 4
  },
  {
   "path": "src/ipc/test/ipc_tests.cpp",
   "add": 7,
   "del": 6
  },
  {
   "path": "src/kernel/bitcoinkernel.cpp",
   "add": 7,
   "del": 7
  },
  {
   "path": "src/kernel/chainparams.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/kernel/coinstats.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/kernel/disconnected_transactions.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/kernel/mempool_removal_reason.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/key.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/key_io.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/logging.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/mapport.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/memusage.h",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/merkleblock.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/net.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/net.h",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/net_permissions.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/net_processing.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/netaddress.cpp",
   "add": 9,
   "del": 8
  },
  {
   "path": "src/netaddress.h",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/netbase.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/netgroup.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/netgroup.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/node/chainstate.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/node/coin.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/node/connection_types.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/node/eviction.cpp",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/node/minisketchwrapper.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/node/psbt.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/node/transaction.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/node/txdownloadman_impl.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/node/txorphanage.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/node/utxo_snapshot.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/outputtype.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/policy/feerate.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/policy/fees/block_policy_estimator.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/policy/fees/estimator_man.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/policy/packages.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/policy/policy.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/prevector.h",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/primitives/transaction.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/protocol.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/protocol.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/psbt.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/psbt.h",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/pubkey.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/qt/addresstablemodel.cpp",
   "add": 9,
   "del": 9
  },
  {
   "path": "src/qt/askpassphrasedialog.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/qt/bantablemodel.cpp",
   "add": 5,
   "del": 4
  },
  {
   "path": "src/qt/bitcoin.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/qt/bitcoin.h",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/qt/bitcoinamountfield.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/qt/bitcoingui.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/qt/bitcoinunits.cpp",
   "add": 8,
   "del": 8
  },
  {
   "path": "src/qt/guiutil.cpp",
   "add": 9,
   "del": 10
  },
  {
   "path": "src/qt/guiutil.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/qt/optionsmodel.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/qt/optionsmodel.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/qt/peertablemodel.cpp",
   "add": 6,
   "del": 6
  },
  {
   "path": "src/qt/peertablesortproxy.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/qt/receivecoinsdialog.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/qt/rpcconsole.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/qt/sendcoinsdialog.cpp",
   "add": 13,
   "del": 13
  },
  {
   "path": "src/qt/splashscreen.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/qt/test/addressbooktests.cpp",
   "add": 8,
   "del": 8
  },
  {
   "path": "src/qt/test/apptests.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/qt/test/wallettests.cpp",
   "add": 9,
   "del": 8
  },
  {
   "path": "src/qt/transactionrecord.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/qt/transactiontablemodel.cpp",
   "add": 10,
   "del": 10
  },
  {
   "path": "src/qt/utilitydialog.cpp",
   "add": 5,
   "del": 6
  },
  {
   "path": "src/qt/walletcontroller.cpp",
   "add": 7,
   "del": 7
  },
  {
   "path": "src/qt/walletframe.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/qt/walletmodel.cpp",
   "add": 13,
   "del": 13
  },
  {
   "path": "src/qt/walletview.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/random.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/random.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/rest.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/rpc/server.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/scheduler.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/script/descriptor.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/script/interpreter.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/script/miniscript.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/script/miniscript.h",
   "add": 7,
   "del": 7
  },
  {
   "path": "src/script/script.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/script/script.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/script/sign.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/script/solver.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/span.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/streams.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/support/allocators/pool.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/sync.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/blockchain_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/blockencodings_tests.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/blockfilter_tests.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/blockmanager_tests.cpp",
   "add": 5,
   "del": 4
  },
  {
   "path": "src/test/btcsignals_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/chainstate_write_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/checkqueue_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/compress_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/crypto_tests.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/test/cuckoocache_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/flatfile_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/addition_overflow.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/addrman.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/asmap.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/asmap_direct.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/test/fuzz/banman.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/base_encode_decode.cpp",
   "add": 3,
   "del": 4
  },
  {
   "path": "src/test/fuzz/bech32.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/bip324.cpp",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/test/fuzz/bitdeque.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/bitset.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/block.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/block_header.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/block_index.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/block_index_tree.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/bloom_filter.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/cluster_linearize.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/coins_view.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/coinscache_sim.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/connect_block.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/connman.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/crypto_aes256.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/crypto_aes256cbc.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/crypto_chacha20.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/crypto_chacha20poly1305.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/crypto_common.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/crypto_diff_fuzz_chacha20.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/crypto_poly1305.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/cuckoocache.cpp",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/test/fuzz/dbwrapper.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/test/fuzz/decode_tx.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/descriptor_parse.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/deserialize.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/difference_formatter.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/fee_rate.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/feefrac.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/test/fuzz/feeratediagram.cpp",
   "add": 5,
   "del": 7
  },
  {
   "path": "src/test/fuzz/fees.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/flatfile.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/float.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/golomb_rice.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/headerssync.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/hex.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/http_request.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/integer.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/test/fuzz/key.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/key_io.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/kitchen_sink.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/locale.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/merkle.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/test/fuzz/message.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/miniscript.cpp",
   "add": 5,
   "del": 3
  },
  {
   "path": "src/test/fuzz/muhash.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/test/fuzz/multiplication_overflow.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/net.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/net_permissions.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/netaddress.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/netbase_dns_lookup.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/node_eviction.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/p2p_headers_presync.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/p2p_private_broadcast.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/p2p_transport_serialization.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/parse_hd_keypath.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/parse_iso8601.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/parse_numbers.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/poolresource.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/prevector.cpp",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/test/fuzz/primitives_transaction.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/private_broadcast.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/rolling_bloom_filter.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/rpc.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/script.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/script_descriptor_cache.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/script_flags.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/script_sign.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/scriptnum_ops.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/fuzz/secp256k1_ec_seckey_import_export_der.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/span.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/test/fuzz/string.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/threadpool.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/transaction.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/tx_in.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/test/fuzz/tx_out.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/tx_pool.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/test/fuzz/txdownloadman.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/txgraph.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/test/fuzz/txrequest.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/test/fuzz/util.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/util/mempool.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/fuzz/util/net.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/test/fuzz/util/wallet.h",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/fuzz/vecdeque.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/fuzz/versionbits.cpp",
   "add": 6,
   "del": 5
  },
  {
   "path": "src/test/headers_sync_chainwork_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/httpserver_tests.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/interfaces_tests.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/key_io_tests.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/logging_tests.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/test/mempool_fee_estimator_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/mempool_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/miniminer_tests.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/test/miniscript_tests.cpp",
   "add": 8,
   "del": 7
  },
  {
   "path": "src/test/net_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/node_init_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/orphanage_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/pcp_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/private_broadcast_tests.cpp",
   "add": 4,
   "del": 2
  },
  {
   "path": "src/test/random_tests.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/rbf_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/scheduler_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/scriptnum10.h",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/sigopcount_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/sock_tests.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/streams_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/threadpool_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/transaction_tests.cpp",
   "add": 7,
   "del": 8
  },
  {
   "path": "src/test/txdownload_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/test/txrequest_tests.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/test/txvalidation_tests.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/test/util/chainstate.h",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/test/util/cluster_linearize.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/util/net.cpp",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/test/util/net.h",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/test/util/poolresourcetester.h",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/test/util/transaction_utils.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/test/util_check_tests.cpp",
   "add": 6,
   "del": 4
  },
  {
   "path": "src/test/util_tests.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/test/validation_chainstatemanager_tests.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/validation_tests.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/torcontrol.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/txdb.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/txgraph.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/txmempool.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/txrequest.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/uint256.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/util/asmap.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/util/chaintype.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/util/check.h",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/util/fees.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/util/obfuscation.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/util/result.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/validation.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/wallet/coincontrol.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/wallet/coinselection.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/wallet/db.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/wallet/export.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/wallet/external_signer_scriptpubkeyman.cpp",
   "add": 5,
   "del": 3
  },
  {
   "path": "src/wallet/external_signer_scriptpubkeyman.h",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/wallet/feebumper.h",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/wallet/scriptpubkeyman.cpp",
   "add": 5,
   "del": 5
  },
  {
   "path": "src/wallet/spend.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/wallet/test/coinselector_tests.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/wallet/test/fuzz/coincontrol.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/wallet/test/fuzz/coinselection.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/wallet/test/fuzz/spend.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/wallet/test/fuzz/wallet_bdb_parser.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/wallet/test/group_outputs_tests.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/wallet/test/ismine_tests.cpp",
   "add": 3,
   "del": 2
  },
  {
   "path": "src/wallet/test/psbt_wallet_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/wallet/test/spend_tests.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/wallet/test/util.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/wallet/test/wallet_test_fixture.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/wallet/test/wallet_tests.cpp",
   "add": 9,
   "del": 9
  },
  {
   "path": "src/wallet/transaction.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/wallet/wallet.cpp",
   "add": 4,
   "del": 5
  },
  {
   "path": "src/wallet/wallet.h",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/wallet/walletutil.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/zmq/zmqabstractnotifier.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "test/lint/test_runner/src/lint_cpp.rs",
   "add": 58,
   "del": 2
  },
  {
   "path": "test/lint/test_runner/src/main.rs",
   "add": 12,
   "del": 2
  }
 ],
 "test_lines": 657,
 "git": {
  "head": "d9e7bf5d98399c781b491c9f67b40f67f76d1af8",
  "head_matches_backup": true,
  "base": "fe3c92cfe0da39d7f34ee3e11fee056b141afd0e",
  "commits": [
   {
    "sha": "6f48b96b53",
    "subject": "scripted-diff: Add util/check.h includes for assertions",
    "files": 279,
    "add": 262,
    "del": 114
   },
   {
    "sha": "33e78c167a",
    "subject": "refactor: Add missing #include external_signer.h to external_signer_scriptpubkeyman.h",
    "files": 1,
    "add": 2,
    "del": 1
   },
   {
    "sha": "1c636d994a",
    "subject": "scripted-diff: Sort includes",
    "files": 262,
    "add": 569,
    "del": 545
   },
   {
    "sha": "2c658f176f",
    "subject": "util: Add AssertUnreachable",
    "files": 4,
    "add": 14,
    "del": 8
   },
   {
    "sha": "281b80c766",
    "subject": "scripted-diff: Replace falsy assertions with AssertUnreachable",
    "files": 73,
    "add": 135,
    "del": 135
   },
   {
    "sha": "2d8025c569",
    "subject": "lint: Add assert_falsy linter",
    "files": 2,
    "add": 35,
    "del": 2
   },
   {
    "sha": "d9e7bf5d98",
    "subject": "lint: Add std_unreachable linter",
    "files": 2,
    "add": 33,
    "del": 1
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "4b3a71ea60140da7",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}