原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"bitcoin-core"
],
"is_fork": true,
"size_kb": 349642,
"has_wiki": false,
"homepage": "https://bitcoincore.org/en/download",
"languages": {
"C": 3345308,
"M4": 55751,
"C++": 14677301,
"Nix": 3796,
"HTML": 21831,
"Rust": 41211,
"Sage": 59880,
"CMake": 276437,
"Shell": 215448,
"Python": 4313705,
"Scheme": 19984,
"Assembly": 28405,
"Makefile": 109129,
"Dockerfile": 5092,
"Cap'n Proto": 16569,
"Objective-C++": 5510
},
"pushed_at": "2026-07-26T16:15:46Z",
"created_at": "2018-08-01T21:59:57Z",
"owner_type": "User",
"updated_at": "2026-07-26T16:16:53Z",
"description": "Bitcoin Core integration/staging tree",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "C++",
"significant_languages": [
"C++",
"Python",
"C"
]
},
"owner": {
"blog": "https://bitcoincore.org/",
"name": "Hennadii Stepanov",
"type": "User",
"login": "hebasto",
"company": "Bitcoin Core",
"location": "Ukraine",
"followers": 1276,
"avatar_url": "https://avatars.githubusercontent.com/u/32963518?v=4",
"created_at": "2017-10-20T16:07:57Z",
"is_verified": null,
"public_repos": 80,
"account_age_days": 3201
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": false
},
"activity": {
"releases": [],
"recent_commits": [
{
"oid": "e34b8d5a7dcd45e4faa3bb5fdeae64bf049037f6",
"body": "…it (co)-authors\n\nf5d7cc66ecba075790e09b2933c782b218fa558f doc: Discourage adding AI agents as commit authors (sedited)\n\nPull request description:\n\n The goal of the AI policy is to ensure that contributors maintain the responsibility of understanding the change they are contributing. Adding AI agen\n[…]\nheStack:\n ACK f5d7cc66ecba075790e09b2933c782b218fa558f\n\nTree-SHA512: 134902fcf4748bf991a6c3df6e41d5edbbc0e57c35d15d9d84fe4d30153549c05546ea5fe22226356d01f6df15f0c7177d9b1af62b9f90982a7788613bdd94a9",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35794: doc: Discourage adding AI agents as comm…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-25T12:40:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b33a7fcd7bd896da7175a28802bac9ca53fa238d",
"body": "…imiting with global rate limits\n\n349c72ee00a06581aa8cddaced6377c49a81d511 net_processing: Drop unnecessary txid arg from InitiateTxBroadcastToAll (Anthony Towns)\n12b0dc33c4af6fc0eb48ae4265c6c050c4d122d7 doc: Add release note for -txsendrate etc (Anthony Towns)\n5cde66341a66c37454a4b516016243060cdc8f\n[…]\nn/bitcoin/commit/349c72ee00a06581aa8cddaced6377c49a81d511\n\nTree-SHA512: 2196a23308cb7fe36738cf638edf5c5b0e9ba32b11c083609fd8b50291e05bb33484f9921f8beab28d94c58d1adddea4c8ae1182a60a7f53f54be7370e2a0e47",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34628: p2p: Replace per-peer transaction rate-l…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-25T10:15:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6b059d9dbdbd4d5b6f52993f93bf291181bf3900",
"body": "… adjusted mempool vsize\n\n29b124416e4293aafda0097808c01f5a2cb8627c doc: add release notes for 32800 (Musa Haruna)\n5d25a0c28d19c4b2f3f5ecdf42fb11d1246855b1 rpc: add `vsize_adjusted` field to getrawtransaction output for mempool transactions (Musa Haruna)\neaef8d31118d26654c2bcea1c0528b66ea9b1b2d rpc: \n[…]\nsedited:\n ACK 29b124416e4293aafda0097808c01f5a2cb8627c\n\nTree-SHA512: 9322ab1a2f7561b4221fb2bbe9f822c402f845c52a93de14008c1e5bc33e5c6f19ebc647ab6615b7c6be137c76cff6a33c6920818a78813de5632eb88c96a876",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#32800: rpc: Distinguish between vsize and sigop…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-24T22:09:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "11ebbd907217a037d2c0c9be0395091e1d6395e1",
"body": "…-relay only connections\n\nc11508406e6e0cd14c07c58e23085e1a8ff543fa doc: Update docs that refer to -maxconnections (Martin Zumsande)\n69ce0dba2ae453d915eda0641f97e5bfe43c8273 test: add test that EvictTxPeerIfFull only evicts tx-relaying peers (brunoerg)\n3ed7f064180f8cf0102a8e27a7a73467733fe2ec p2p: tr\n[…]\ncofleon:\n ACK c11508406e6e0cd14c07c58e23085e1a8ff543fa\n\nTree-SHA512: c71e1481eb235429a6c9d7ce771c7bf825f850b135e904ccfa3505112628fef4188b560d0be0847c968e5ece43c1518590069b7e6e2480790d3ef1ce07d1ac38",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#28463: p2p: Increase inbound capacity for block…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-24T21:30:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3a2c52f9d70db6076ce64b8f7ef0eb301d7935a5",
"body": "…members `constexpr`\n\n05c35c402cc56e7082a48cc073434a40b0bebd8f refactor: Make all `const static` class members `constexpr` (rustaceanrob)\n\nPull request description:\n\n Found in #35713. If a `static class` member is not inlined or `constexpr`, the linker will fail when attempting to ODR-use the const\n[…]\nsedited:\n ACK 05c35c402cc56e7082a48cc073434a40b0bebd8f\n\nTree-SHA512: 2b823b94ddfae1a889b50ebdb6a8828d95baaa2578756daa826b6579045f7e92ea91562be96865c1df267f4dd288f91fd84ed60090e9ad38adc4efeb865cd90a",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35792: refactor: Make all `const static` class …",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-24T17:14:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f5d7cc66ecba075790e09b2933c782b218fa558f",
"body": null,
"is_bot": false,
"headline": "doc: Discourage adding AI agents as commit authors",
"author_name": "sedited",
"author_login": "sedited",
"committed_at": "2026-07-24T16:35:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05c35c402cc56e7082a48cc073434a40b0bebd8f",
"body": "If a `static class` member is not inlined or `constexpr`, the linker\nwill fail when attempting to ODR-use the constant (passing as `const\nT&`). These can be fixed by finding all member variables that are\n`const` qualified and inlining them with `constexpr`. There is a\nclang-tidy pull request that wo\n[…]\n ${LINES[$file]}; do\n args+=(-e \"${line}s/static const /static constexpr /\")\n done\n sed -i \"${args[@]}\" \"$file\"\ndone\n\necho >&2\necho \"===== proposed diff =====\" >&2\ngit --no-pager diff\n```",
"is_bot": false,
"headline": "refactor: Make all `const static` class members `constexpr`",
"author_name": "rustaceanrob",
"author_login": "rustaceanrob",
"committed_at": "2026-07-24T13:01:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c11508406e6e0cd14c07c58e23085e1a8ff543fa",
"body": null,
"is_bot": false,
"headline": "doc: Update docs that refer to -maxconnections",
"author_name": "Martin Zumsande",
"author_login": "mzumsande",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69ce0dba2ae453d915eda0641f97e5bfe43c8273",
"body": "Co-authored-by: Martin Zumsande <mzumsande@gmail.com>",
"is_bot": false,
"headline": "test: add test that EvictTxPeerIfFull only evicts tx-relaying peers",
"author_name": "brunoerg",
"author_login": "brunoerg",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ed7f064180f8cf0102a8e27a7a73467733fe2ec",
"body": "… a peer to tx relay\n\nCo-authored-by: Amiti Uttarwar <amiti@uttarwar.org>",
"is_bot": false,
"headline": "p2p: trigger possible eviction if we support bloom filters and change…",
"author_name": "Martin Zumsande",
"author_login": "mzumsande",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0bd3d3dfa562724e3dbc4cec2d4290e4561655cd",
"body": "Permit users to change the amount of inbounds that are permitted to relay\ntransactions. This is particularly relevant to ensure that superusers that are\nnot concerned with resource usage are not artificially restricted from offering\nmany transaction relay slots to the network.\n\nCo-authored-by: Martin Zumsande <mzumsande@gmail.com>",
"is_bot": false,
"headline": "init: make inbound tx relay percentage configurable",
"author_name": "Amiti Uttarwar",
"author_login": "amitiuttarwar",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc59aee196e278001a01a5f6baaaedb800a0b046",
"body": "Co-authored-by: Martin Zumsande <mzumsande@gmail.com>",
"is_bot": false,
"headline": "test: add functional test for inbound maxconnection limits",
"author_name": "Amiti Uttarwar",
"author_login": "amitiuttarwar",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b76e0473647d0df5c32ffe1bcdcbbcadc5d0dfa",
"body": "..and adjust the eviction logic.\nThe new default max connection number is 200, the default maximum of tx-relaying\ninbounds is limited to 50% of all inbound connections.\nWith 11 outbound connections, that is (200 - 11) * 0.5 = 94.5.\nAs a result, the tx-related maximum traffic should not change\ndrasti\n[…]\ner.\n\nOnce this commit is widely deployed, the added inbound capacity will\nallow us to increase the number of outgoing block-relay-only connections.\n\nCo-authored-by: Amiti Uttarwar <amiti@uttarwar.org>",
"is_bot": false,
"headline": "net: increase inbound capacity for block-relay-only connections",
"author_name": "Martin Zumsande",
"author_login": "mzumsande",
"committed_at": "2026-07-24T12:16:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "610dd320d1a80838fdf30ed1cb2e6ae1ec717f74",
"body": "7295b8be704a406cf8875641aa9066e071323093 chainparams: remove my testnet3 seed (Sjors Provoost)\n\nPull request description:\n\n With testnet3 long deprecated, albeit still not dropped #31975, and [testnet5](https://groups.google.com/g/bitcoindev/c/kGUMTxOvdJA) on the horizon, this seems like a good tim\n[…]\nlcl-ark:\n ACK 7295b8be704a406cf8875641aa9066e071323093\n\nTree-SHA512: 30c9ad9480a09cf48138157b5529e2878469bc629edb60c5dd2605e078647b9b9b025937936d1b6e3a980c6be3fc36c512bdd91a6864c72c3e093cd60d691860",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35783: chainparams: remove my testnet3 seed",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-24T07:12:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "afa5e46bbc6dd750bd71920b659162a945abf0ae",
"body": "51ee8ca1683ce1ba9997d0ccf014a1986afceb93 doc: clarify pruning impact on wallet sync (Memetic Money)\n\nPull request description:\n\n This updates prune-related help text to document the existing caveat that wallets should remain loaded, and relevant indexes should remain active, while pruning is enable\n[…]\nlcl-ark:\n ACK 51ee8ca1683ce1ba9997d0ccf014a1986afceb93\n\nTree-SHA512: 0705947909d194aaa82142528150cf14f9f4e0569790ea1a8b0ccd2850aa632f65234d44ac5a800a623412f20732b124e7af77e62f335d64dc8b363b144fca92",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35076: doc: clarify pruning impact on wallet sync",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-23T21:31:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "26b730cdbf2c77c12f684fd50bd376212b725394",
"body": "…ey::SetSeed\n\n2cf9d79d84cb485e31e2d78a5744c1e4dc5f5f44 key: validate BIP32 seed length in CExtKey::SetSeed (Muhammad)\n\nPull request description:\n\n BIP32 specifies that the seed must be between 128 and 512 bits (16 to 64 bytes). CExtKey::SetSeed currently accepts any length, which could result in we\n[…]\nsedited:\n ACK 2cf9d79d84cb485e31e2d78a5744c1e4dc5f5f44\n\nTree-SHA512: 0ac44f8a464172b465834e1b3edf457fc8a09eeaa89cdfb1286af577d3c90d75627af8b5c5edd66232d45c60812ebc7f6f402db6f804a56f727353b2bdca7c19",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35320: key: validate BIP32 seed length in CExtK…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-23T20:25:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "edf4b807f0513e5bfe423e4e956904e10c71742a",
"body": "a33f240524da405cac49300d0ab129ece6d64498 Squashed 'src/secp256k1/' changes from bd0287d650..d2d04864ef (fanquake)\n\nPull request description:\n\n Includes:\n * https://github.com/bitcoin-core/secp256k1/pull/1765\n * https://github.com/bitcoin-core/secp256k1/pull/1845\n * https://github.com/bitcoin-cor\n[…]\nStack:\n ACK c26d4e2d6f03e26c6c20a4cc854f26d150f38b14 🤫\n\nTree-SHA512: 01fafcbad34bf81055c97560cfda10cf01bc27fdc67e0d5104643e1139359e295abad4ccdcca2b182e8270454e12c9d814dc9636e18ebead5a2cac6cb8ed8052",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35781: Update secp256k1 subtree to latest master",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-23T20:11:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "774d11c58f221294950f05ac4d249e19583e4b7b",
"body": "… failure-path vectors to script_tests.json\n\nc4068cf37b6674417c77ce1f295b51dd49a57e81 test: add negative zero CSV failure script test vector (azuchi)\n37edf0e2338e4ae811ec224bf27d143ffbee25e6 test: add CHECKLOCKTIMEVERIFY failure-path script test vectors (azuchi)\na86a96d17b37a30ba0664cda01ef42d2d8e16\n[…]\nsedited:\n ACK c4068cf37b6674417c77ce1f295b51dd49a57e81\n\nTree-SHA512: e7baa9d96b0faec1115c7afb97aa2a8ac17a93d44637cd3e58ab91240b198b6d21c84a29129b586ff760f8f4ca8b1988c652b8f5ebd6ebaa0ffae6615c9aec5d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35664: test: add CLTV and CHECK(MULTI)SIGVERIFY…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-23T19:47:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "526673487ceef18d1df41d77b4783b9b3908ced5",
"body": "… JSON-RPC interface\n\nca9ffb8e1238d1a94560517d00c5189d3546b99c rpc: add OpenRPC discovery alias (willcl-ark)\nef0676f40077af799ce244c539ee7fbc07cc20a0 rpc: factor getaddressinfo embedded field docs (will)\n1fb6b6056093f5770e0f2c8db89faf48f275174e test: add functional test for getopenrpcinfo (will)\n672\n[…]\n w0xlt:\n ACK ca9ffb8e1238d1a94560517d00c5189d3546b99c\n\nTree-SHA512: 5bf7abdb9f119d591306884f31b9da815908e5cb5812706c5496b39162c22cd949465d7b3ff1fdce7ff5b3c1b6367c14b6d28d58dee86698c0161d4d844d84c9",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34683: rpc: support a formal description of our…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-23T17:57:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "290cb2f17ef6ba9198934bbaec53fa962a1dfa18",
"body": "…x scripts\n\n2cb3bfa8df7cab0635be221af1c8754dbbaff335 scripted-diff: Use long form of shell options in Guix scripts (Hennadii Stepanov)\n711eb10f08bcff5f4689abd4edebf96b913ad6b5 guix: Add copyright headers to Guix scripts (Hennadii Stepanov)\n80f831494e5347057199055b20c8b75bedd8bd07 guix: Fix `glibc` v\n[…]\nanquake:\n ACK 2cb3bfa8df7cab0635be221af1c8754dbbaff335\n\nTree-SHA512: 9e21d4ad50f5d583efdd8f79d9f96d45a92f1982ea3a422565bceea38aa50bbd9a9360972b37a1b49907e67523d68f3d1f889cb26179ce735453eb4fae4d3fa4",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35775: scripted-diff: Use C.UTF-8 locale in Gui…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-23T13:33:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d472a7798ac1ef0d7fe1fa11709e2cd2f9c6b4f3",
"body": "…in only\n\n8a90c7cd9739ad30e014ee8531647280fea6a037 guix: Build for macOS using LLVM toolchain only (Hennadii Stepanov)\n7e1a750d45d9199b9a6ee6835bcb78f19cda059c guix, refactor: Use `target` variable instead of hardcoded value (Hennadii Stepanov)\n\nPull request description:\n\n This PR makes macOS build\n[…]\nanquake:\n ACK 8a90c7cd9739ad30e014ee8531647280fea6a037\n\nTree-SHA512: 02bfa784f89db980de2d2bb759200a0e8c0b10f48ac7e14e2bcdba75416aef30afa68d36e98c4652e18d282f023d1e94a351ff65b4a2731bdcac7c8a8c720623",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#32764: guix: Build for macOS using LLVM toolcha…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-23T12:56:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9755d33390d843b0622e470df513c0707163057c",
"body": "…e as source for translations on Transifex\n\na434d66025095764cf58c5a049cf4414f53ee52f cmake, translation: Specify English as target language explicitly (Hennadii Stepanov)\n4097d6d968e835ac1233efcbc31bb7b776bdb51f cmake, translation: Sort messages within contexts alphabetically (Hennadii Stepanov)\n312\n[…]\nsedited:\n ACK a434d66025095764cf58c5a049cf4414f53ee52f\n\nTree-SHA512: 2f79af707974acd8c955e01c06b41794ae1702964bd5f6d260dba73f2f14d0b4b6e84f502f8515d84585e00db8db5b644cb6c47f91662a7ba5b6990f2d0ba115",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34808: cmake, translation: Use native Qt TS fil…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-23T12:55:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "51143291a6c502a63f252d5e6b9cf9ef146de17c",
"body": "419f7427eee25b6428bbce88e4898e20db9fd13c doc: fix outdated i2p URLs in comments (nebula-21)\n\nPull request description:\n\n This PR only updates URLs in comments, no functional changes.\n **Motivation**: While reviewing [PR\\#35696](https://github.com/bitcoin/bitcoin/pull/35696) I discovered that some \n[…]\nsedited:\n ACK 419f7427eee25b6428bbce88e4898e20db9fd13c\n\nTree-SHA512: 1993239c9544f0e917315b6f3ce5102c5ceaa05422803136bf0a5e69beef000a2b1a170030ca5367a00f433448c6ca0420f3b18137b7e6fd903d4c93263078b2",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35782: doc: fix outdated i2p URLs in comments",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-23T12:35:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2cb3bfa8df7cab0635be221af1c8754dbbaff335",
"body": "This improves readability and consistency across all Guix scripts.\n\n-BEGIN VERIFY SCRIPT-\n\nsed -i \"s/^set -e\\>/set -o errexit/g\" \\\n $( git grep -l \"set -e\" ./contrib/guix )\n\n-END VERIFY SCRIPT-",
"is_bot": false,
"headline": "scripted-diff: Use long form of shell options in Guix scripts",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-23T11:31:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "711eb10f08bcff5f4689abd4edebf96b913ad6b5",
"body": null,
"is_bot": false,
"headline": "guix: Add copyright headers to Guix scripts",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-23T10:13:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7295b8be704a406cf8875641aa9066e071323093",
"body": null,
"is_bot": false,
"headline": "chainparams: remove my testnet3 seed",
"author_name": "Sjors Provoost",
"author_login": "Sjors",
"committed_at": "2026-07-23T10:08:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "419f7427eee25b6428bbce88e4898e20db9fd13c",
"body": null,
"is_bot": false,
"headline": "doc: fix outdated i2p URLs in comments",
"author_name": "nebula-21",
"author_login": "nebula-21",
"committed_at": "2026-07-23T10:06:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c26d4e2d6f03e26c6c20a4cc854f26d150f38b14",
"body": null,
"is_bot": false,
"headline": "Update secp256k1 subtree to latest master",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-07-23T08:52:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a33f240524da405cac49300d0ab129ece6d64498",
"body": "d2d04864ef Merge bitcoin-core/secp256k1#1765: Add \"silentpayments\" module implementing BIP352 (take 4, limited to full-node scanning)\n9e4ec507e9 Merge bitcoin-core/secp256k1#1890: nonce: terminate RFC6979 loop at UINT_MAX\nafff8cba00 Merge bitcoin-core/secp256k1#1894: extrakeys: check invariant that \n[…]\n6260b78a2 ci: add 'brew trust' invocation to macOS CI\n0cad3df503 Improve checks for scalar _get_bits methods\n\ngit-subtree-dir: src/secp256k1\ngit-subtree-split: d2d04864ef9b056151603a3ced7980958b058028",
"is_bot": false,
"headline": "Squashed 'src/secp256k1/' changes from bd0287d650..d2d04864ef",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-07-23T08:52:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "22a03ca69443deb66b98deb37d8e84a33968ac10",
"body": "efb4eae33861d3f316d77788f5c83b58dad94a0a clusterlin: avoid recomputing intersections in MergeChunks (Pieter Wuille)\n4b91ad149f0056c0a6dfdbc816b0c3b6f8d74827 clusterlin: reserve the suboptimal-chunk queue up front (Pieter Wuille)\ne6ca996255bb7edaebe18a104b113d69a07bc445 clusterlin: avoid heap allocat\n[…]\nfleon:\n crACK efb4eae33861d3f316d77788f5c83b58dad94a0a\n\nTree-SHA512: 6bd523e8bc56dbc8ff2540ef26355e79895a8a11a26d08e22918aea0c002ee8f96916654d5a2b792515ef12ee022c65d71ab9a778f937a264aaf6e4ed6167b71",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35694: clusterlin: minor SFL optimizations",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-23T08:47:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7b6f9ba7bad13b0c4169259000f7802854cdda0d",
"body": "…ion` and unify with `submitBlock`\n\n75929b11edb4a59755b38788855b41b63ff4113d doc: add release note for submitSolution IPC changes (woltx)\ned75d70fdb82042c9f44f3bd51b33c8b415f50aa refactor: centralize SubmitBlock result handling (w0xlt)\ncbaa1696f3748c98466152a17687042f59de684f mining: add reason and \n[…]\nsedited:\n ACK 75929b11edb4a59755b38788855b41b63ff4113d\n\nTree-SHA512: 31b1c305c20aaebdfa2d887665d9927830d0f97ba3c3469e2792148ad799d5a400a000cc0ca0b9add071d314e27c9da44d55228c442533a32a7c031678b78a55",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34672: mining: add reason/debug to `submitSolut…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-22T22:50:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5311b15727f2f282274472184185423e441abd85",
"body": "…sspsbt when encountering invalid signatures\n\n7e19ce200b2e65770907a818b02e4ec3da9c5374 rpc: Fix descriptorprocesspsbt internal bug on invalid signatures (b-l-u-e)\n\nPull request description:\n\n Fixes #32849\n descriptorprocesspsbt crashes with an internal bug assertion when given a PSBT whose inputs \n[…]\n\n lgtm re-ACK 7e19ce200b2e65770907a818b02e4ec3da9c5374\n\nTree-SHA512: c534fb5bd3401ee3ac0bc27eaedaaaaf23e5e8510ed9b96a747bb0e41e2bd3d2031b6b08e933e139bb426e97bd05fab6e91397205f4be1db9d17630eea49a8bf",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#33014: rpc: Fix internal bug in descriptorproce…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-22T21:38:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8a90c7cd9739ad30e014ee8531647280fea6a037",
"body": null,
"is_bot": false,
"headline": "guix: Build for macOS using LLVM toolchain only",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T19:20:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80f831494e5347057199055b20c8b75bedd8bd07",
"body": "At the current time-machine commit\nc5eee3336cc1d10a3cc1c97fde2809c3451624d3, the default `glibc` package\nversion is 2.41.",
"is_bot": false,
"headline": "guix: Fix `glibc` version in comment",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T14:29:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8916f7967e1088e7b6157f708c2c85119d759fb2",
"body": "The C.UTF-8 locale is set by default in `guix shell`, and there is no\nreason to avoid it nowadays. This change also silences superfluous\nwarnings from Qt tools, making build logs cleaner and other issues\neasier to spot.\n\nLocales in the `guix-*` launch scripts have been updated as well for\nconsistency with the rest of the codebase.\n\n-BEGIN VERIFY SCRIPT-\n\nsed -i \"s/\\<export LC_ALL=C\\>/export LC_ALL=C.UTF-8/g\" \\\n $( git grep -l \"export LC_ALL=C\" ./contrib/guix/* )\n\n-END VERIFY SCRIPT-",
"is_bot": false,
"headline": "scripted-diff: Use C.UTF-8 locale in Guix scripts",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T14:29:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2e074d66ac17ca7907909bbbb563e77185a45e5",
"body": "…on on macOS\n\nfa0c8337a8d42564880715a07b00925d3e95dab1 test: Nudge toward QT_STYLE_OVERRIDE=fusion on macOS (MarcoFalke)\nfaa50c08b17b6f9afad5179a17a4a45ab79049c1 refactor: Run clang-format on qt test_main.cpp (MarcoFalke)\n\nPull request description:\n\n Fixes https://github.com/bitcoin/bitcoin/issues/\n[…]\na07b00925d3e95dab1, tested on macOS Tahoe 26.5.2 (Intel).\n\nTree-SHA512: 3fd4e65f708ce5acd5243747661b76a5cf25e6810b49586dee5971f5f8bad13a907ee27d6830124c8c6d2b7e807661a59404f387ff59c1feeacfaa4b276bf270",
"is_bot": false,
"headline": "Merge bitcoin-core/gui#951: test: Nudge toward QT_STYLE_OVERRIDE=fusi…",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T14:16:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6ced9ad782b8eec3a99c4cde62561b48312795a1",
"body": "075e7f421876f9b4eeffa2977abc50708831844c net: Simplify `AddressPosition` comparitor (rustaceanrob)\n\nPull request description:\n\n Picked from #35713 because this appears unintentional. There were no cases where the source attempted to compare `AddressPosition` by const reference, but such a compariso\n[…]\nited:\n Re-ACK 075e7f421876f9b4eeffa2977abc50708831844c\n\nTree-SHA512: 4fc95026e6f9ec23757c97fc36a7fa94faf54a018727d0d2606215fc5705f3f1817607d8ff72544664cedc666914484ed490c6f75af63db1ce1a337be2e2949f",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35770: net: Simplify `AddressPosition` comparitor",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-22T14:12:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b8844d3df759bfa070681327583427461d39105c",
"body": "…om seeds\n\ncf0f2aeae009c98615bffd4dafd74e46f20a0ae6 p2p: Assume v2transport for addresses from seeds (Martin Zumsande)\n\nPull request description:\n\n gmaxwell noted in https://github.com/bitcoin/bitcoin/pull/30951#issuecomment-5035178818 that addresses loaded from dns seeds and fixed seeds are still \n[…]\ndafd74e46f20a0ae6\n stratospher:\n tested ACK cf0f2aea.\n\nTree-SHA512: 921dfcf56960f66c37346f0a4d07e8ad8aa617d4cd1c4db36474e8275c47d5eb70a34c32d1378cbcfce356348b12c36c8fedcdaee3c90c2c4963256857407db4",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35766: p2p: Assume v2transport for addresses fr…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-22T12:56:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "075e7f421876f9b4eeffa2977abc50708831844c",
"body": "There were no cases where the source attempted to compare\n`AddressPosition` by const reference, but such a comparison is valid.\nThis may be fixed by simplifying the comparison operator here, which\nalso avoids copying the value.\n\nFound in #35713:\n```\n<AddressPosition>' requested here\n 817 | BOOS\n[…]\ncoin/src/addrman.h:76:10: note: candidate function not viable: 'this' argument has type 'const AddressPosition', but method is not marked const\n 76 | bool operator==(AddressPosition other) {\n```",
"is_bot": false,
"headline": "net: Simplify `AddressPosition` comparitor",
"author_name": "rustaceanrob",
"author_login": "rustaceanrob",
"committed_at": "2026-07-22T12:54:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fa0c8337a8d42564880715a07b00925d3e95dab1",
"body": "Using the Fusion style works around QTBUG-49686.\n\nOtherwise, there could be a nullptr-deref under the QMacStyle.",
"is_bot": false,
"headline": "test: Nudge toward QT_STYLE_OVERRIDE=fusion on macOS",
"author_name": "MarcoFalke",
"author_login": null,
"committed_at": "2026-07-22T11:52:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "faa50c08b17b6f9afad5179a17a4a45ab79049c1",
"body": null,
"is_bot": false,
"headline": "refactor: Run clang-format on qt test_main.cpp",
"author_name": "MarcoFalke",
"author_login": null,
"committed_at": "2026-07-22T11:51:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc49bd154a31b285c0f89be51767a424ac380924",
"body": "226e6388b7fd5d128d3757a9fe6c7ebc44803231 depends: Update Qt to 6.8.4 (Hennadii Stepanov)\n\nPull request description:\n\n Release notes: https://code.qt.io/cgit/qt/qtreleasenotes.git/about/qt/6.8.4/release-note.md\n\n `depends/patches/qt/qtbase_platformsupport.patch` has been dropped as the fix was back\n[…]\nanquake:\n ACK 226e6388b7fd5d128d3757a9fe6c7ebc44803231\n\nTree-SHA512: 20f371384c1fcfd5018218ef262b10568bd009e2f1fafca9fa42788aca4683ec706b7a4e35816b884b294b5f9bdb1aefda0bad75921d9e426558cccd80f913cd",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35709: depends: Update Qt to 6.8.4",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-22T10:50:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "efa1800a885c1ae605e18605ef73957ea13e575c",
"body": "e446ea09c4d37771798cf9b2d92c3cd1afeaac53 depends, zeromq: Apply upstream patch (Hennadii Stepanov)\n\nPull request description:\n\n See https://github.com/zeromq/libzmq/pull/4911.\n\n Here is an example of failure when building with [llvm-mingw 20260721 with LLVM 23.1.0 RC 1](https://github.com/mstorsjo\n[…]\nko:\n self-ACK e446ea09c4d37771798cf9b2d92c3cd1afeaac53\n\nTree-SHA512: 6d839180452c97f8ddf5d0bd774ccc6a56bbf877069191a2486ed3b222efa4ec83da1de1b5727b973e340e1b7de0bb7a3d5fd81964398ebbad542d61634b8679",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35769: depends, zeromq: Apply upstream patch",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-22T09:46:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fc4ceda8b610e0e32afd2f50b3dce5c754a3ad66",
"body": "…uilding with GCC 16.x\n\n51d36dfd076a98cd761ab312ab10792725ed7a29 qt: Fix `-Wsfinae-incomplete` warnings when building with GCC 16.x (Hennadii Stepanov)\n\nPull request description:\n\n According to the CMake documentation for [`AUTOMOC`](https://cmake.org/cmake/help/latest/prop_tgt/AUTOMOC.html), all `\n[…]\n review ACK 51d36dfd076a98cd761ab312ab10792725ed7a29 🦅\n\nTree-SHA512: fe48e4925aaccb833bc065aa7f988f22482ef83d3d555e601d3955109f840b221be971c560668eac79506f567999d4e1b2a464ec3717b5cecb9a3eaaa1dbc01b",
"is_bot": false,
"headline": "Merge bitcoin-core/gui#949: Fix `-Wsfinae-incomplete` warnings when b…",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T09:11:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "559d042ba2567a05e8d540c7d9d9a94c7d2973d2",
"body": "…ith getchainparams command\n\n7298281ba8dfb58e07121c74e64f07861ec21f5c bitcoin-util: replace netmagic command with getchainparams command (Anthony Towns)\n\nPull request description:\n\n This is a follow-up to #35610. It replaces the `netmagic` command with a more versatile `getchainparams` command, as \n[…]\nsedited:\n ACK 7298281ba8dfb58e07121c74e64f07861ec21f5c\n\nTree-SHA512: 153e97eb8d6bc6d98d925ce9718239c6ff5d7a80b760e7f3b807fc36f78e8da8550033c31016e1d1aee11484392dd80b76f9b1496a8dc6e47825910c170a0cd1",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35736: bitcoin-util: replace netmagic command w…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-22T08:23:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f2ed31f70231506083f31d9b4839a93ad803029",
"body": "…s after AFL fork\n\nfaada35f9c09844d0aeec7025d06a94427671a22 fuzz: [refactor] Use 100'000 digit separator in __AFL_LOOP (MarcoFalke)\nfae067ec4a408ca7adb7407e93d55d84ab2a8adb fuzz: Avoid dangling prevoutfetch threads after AFL fork (MarcoFalke)\n\nPull request description:\n\n Presumably fixes https://is\n[…]\nsedited:\n ACK faada35f9c09844d0aeec7025d06a94427671a22\n\nTree-SHA512: c249d7267f789084968f8510531f60fc71c9fbd6b4e574a181fd6da1af19a3cb7c03ba60c3ca70244b56ce44c602293517cdb6b0e969b4a2cc9d1afaa49ab0f8",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35767: fuzz: Avoid dangling prevoutfetch thread…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-22T07:48:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a31c30290d4c86000601de665866f9015635f48f",
"body": "f3f302150b5fc115e0561dd639b9b389822999e9 ci: Put space and non-ASCII char in `BASE_BUILD_DIR` (Hennadii Stepanov)\na7e980af31b92f5a21be6b91bed353e65c5cf770 build: Quote host paths in NSIS installer template (Hennadii Stepanov)\n\nPull request description:\n\n The CI scratch directory contains a space an\n[…]\n code review ACK f3f302150b5fc115e0561dd639b9b389822999e9\n\nTree-SHA512: 5785dc13961d656e73759888d653967e43d6a9e1eec46a12301c65d042bc53a824f2dd9cdaa602c1bfb1afb52c4753099a705eab3a337f88ac6a68893e2de7f9",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35746: ci: Test build directory path with spaces",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T07:36:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e446ea09c4d37771798cf9b2d92c3cd1afeaac53",
"body": "See https://github.com/zeromq/libzmq/pull/4911.",
"is_bot": false,
"headline": "depends, zeromq: Apply upstream patch",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-22T06:54:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32eb52100296718f7c0469e3210ce1db73694793",
"body": "…keys\n\n3bfdcbd7ee494c613deac0840ca6997fcc078c08 coins: reuse cache hasher for txid set (Lőrinc)\n2beab94896a3042201f3ad131e8dc2346e076940 coins: use SipHash-1-3-UJ for `CCoinsMap` (Lőrinc)\n7ff55cc6500e7a32204ffe774d00797f18153547 bench: add fixed-width SipHash benchmarks (Lőrinc)\n3aea85411f61e8890b34\n[…]\nptout21:\n ACK 3bfdcbd7ee494c613deac0840ca6997fcc078c08\n\nTree-SHA512: c3c66051cb1ebdb0cddbc8b8bed2297c524842f92960531de23d9586c5bb950b302c33d06fc15c2320cbbf97273b22ec3f17fd0e7ddcc7df4a8132a47a606277",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35215: coins: use SipHash-1-3-UJ for CCoinsMap …",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-21T22:43:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "883ef1d85d74c928ae753e07116d3fc61de4e446",
"body": "6aa5d8d9481f5e06b10095df7f46f0532f7ecdb7 blockencodings: fix extra transaction count (Lőrinc)\nbe4e64d9e4051f7272c75c2819ceb075ed5452c7 test: characterize extra transaction miscount (Lőrinc)\n\nPull request description:\n\n A short ID collision can invalidate a mempool-sourced transaction after an unrel\n[…]\nsedited:\n ACK 6aa5d8d9481f5e06b10095df7f46f0532f7ecdb7\n\nTree-SHA512: d4407dca7ca2b46795e52a5d611b66072d75ba966416d4ede27fa776ac0a7cbde52c8abae2daec532ec5f24d88e608622168ca066c0d1dbc133e098c8e6fe85a",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35727: blockencodings: fix extra transaction count",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-21T21:11:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f3f302150b5fc115e0561dd639b9b389822999e9",
"body": "The GHA workflows override `BASE_BUILD_DIR`, so the build tree no longer\nlives under `BASE_SCRATCH_DIR` and its word-splitting and UTF-8 coverage\nis bypassed on CI. Restore it by putting a space and a non-ASCII symbol\nin the externally defined path as well.",
"is_bot": false,
"headline": "ci: Put space and non-ASCII char in `BASE_BUILD_DIR`",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-21T19:25:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7e980af31b92f5a21be6b91bed353e65c5cf770",
"body": "The `File` instructions embed the build and source directories unquoted,\nso `makensis` fails for the `deploy` target when either path contains\nspaces.",
"is_bot": false,
"headline": "build: Quote host paths in NSIS installer template",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-21T19:25:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "faada35f9c09844d0aeec7025d06a94427671a22",
"body": "This makes it easier to glance the exact value.",
"is_bot": false,
"headline": "fuzz: [refactor] Use 100'000 digit separator in __AFL_LOOP",
"author_name": "MarcoFalke",
"author_login": null,
"committed_at": "2026-07-21T17:37:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf0f2aeae009c98615bffd4dafd74e46f20a0ae6",
"body": "By now, the vast majority of nodes in the network supports BIP324.\nEven if the optimistic guess would turn out to be wrong for a given\nnode, we would just reconnect with v1.\nThis is better than making v1 connections with peers when both nodes support v2.",
"is_bot": false,
"headline": "p2p: Assume v2transport for addresses from seeds",
"author_name": "Martin Zumsande",
"author_login": "mzumsande",
"committed_at": "2026-07-21T16:59:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fae067ec4a408ca7adb7407e93d55d84ab2a8adb",
"body": null,
"is_bot": false,
"headline": "fuzz: Avoid dangling prevoutfetch threads after AFL fork",
"author_name": "MarcoFalke",
"author_login": null,
"committed_at": "2026-07-21T16:55:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e1a750d45d9199b9a6ee6835bcb78f19cda059c",
"body": null,
"is_bot": false,
"headline": "guix, refactor: Use `target` variable instead of hardcoded value",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-21T12:52:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d673ca765a5a05b0f16b3b6d62047deda092da9b",
"body": "… and macOS/Windows\n\n0b0785daa00ba70fff809fbbf802fb09d02ea624 guix: split macOS and win builds (fanquake)\n008a3e29c8844c0be4457279f5c27c1bc57401c7 guix: split builds into Linux(gui) and macOS/Windows (fanquake)\na3b5dc05723641fe2ddf4fa47c329ffcbd22b228 cmake: Add `GenerateWindowsInstaller` script (He\n[…]\nebasto:\n ACK 0b0785daa00ba70fff809fbbf802fb09d02ea624.\n\nTree-SHA512: 6222024c891d1bec69bb93ae28864142d7e75aae31968b727a3f7226e0debe89f2dc6954a0c26ccfccf2ce8a28d002aa0284a778c2df6c330c5262d41057602d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35537: guix: split builds into Linux, Linux GUI…",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-21T12:23:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b36c2d78a3ad4940e1d5eb466b0e6650b1001ee3",
"body": "…s cache limit\n\n5d57f2cefee2acec3c8e11d6b1d5b5fe97e6cfe7 test: cover unused mempool space in coins cache (woltx)\n\nPull request description:\n\n This PR extends the existing unit test for `Chainstate::GetCoinsCacheSizeState()`.\n\n `Chainstate::GetCoinsCacheSizeState()` calculates when the UTXO/coins c\n[…]\nsedited:\n ACK 5d57f2cefee2acec3c8e11d6b1d5b5fe97e6cfe7\n\nTree-SHA512: c4131cdedd7bd48224d3323fdc1bbce668f171105939c8aa3c452080bbe22819f3910d2a5ce3f46a5a1b7eb625b63240a8c0b7c26fbd5f30927712545b0f765f",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35490: test: cover unused mempool space in coin…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-21T08:57:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d1d85263f8ebb47ad4d6126ff992d4915dda026b",
"body": "…ast peer with relay=false\n\n1fc9277a1c13c13f2ff1825f703a77ebcc9791be test: cover disconnect on private broadcast peer with relay=false (Bruno Garcia)\n\nPull request description:\n\n Currently, there is no test case to verify the disconnection of a private broadcast connection when the peer does not su\n[…]\nbula-21:\n ACK 1fc9277a1c13c13f2ff1825f703a77ebcc9791be\n\nTree-SHA512: 1fd7ad3a5fc690a25276a9654e297858d95607fa9c696a0a6f53223aeb3dde7f80e836d2cbf835a39487f953b04f73b4b8af0c79a2ee8f58c894259f7c9383ff",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35681: test: cover disconnect on private broadc…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-20T20:33:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4906594a3844d227f1f401b9114e6b872cccc576",
"body": "…nimal` QPA plugin\n\nfd59d68c2629440e544ffa6c9a96b4252ebf45c3 qt, test: Enable tests on macOS with `minimal` QPA plugin (Hennadii Stepanov)\nc8b2aeb2263c50428e2a465aebc0103e73582ffc qt: Avoid implicit `NSApplication` instantiation (Hennadii Stepanov)\n\nPull request description:\n\n On macOS, `test_bitco\n[…]\nin4btc:\n tACK fd59d68c2629440e544ffa6c9a96b4252ebf45c3\n\nTree-SHA512: 9fae09668cffe8b207736c6a202af01666a06ae1a8adbd3061717b92a692c0b65b6fe853f192cdc8793073b1c02c3f6a61350a5974397ac016ff8924a51e084a",
"is_bot": false,
"headline": "Merge bitcoin-core/gui#950: qt, test: Run GUI tests on macOS with `mi…",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-20T20:20:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e0c196f9c11cd1bad6b8804c063b344caf56b8a9",
"body": "…ule ignores\n\n6eca11175be68150ec860c26a7f4a7aaf9effb0e lint: remove E731 Ruff ignore (will)\nb52454538b08006b43a0bce8f4c9563c5e16ca83 lint: remove E712 Ruff ignore (will)\n\nPull request description:\n\n Follows up on #34547 by dropping (and fixing) most remaining default Ruff rule ignores:\n\n - [E712](\n[…]\nsedited:\n ACK 6eca11175be68150ec860c26a7f4a7aaf9effb0e\n\nTree-SHA512: 763ad88b66fbe1df09c88c688865b7ebdcc4b431858776b5557eb7eec61b98795fb6946b32549f2e631648eae03a6a2882fcd2a673948e1a04d8b2ea358d83ce",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35721: lint: drop most remaining default Ruff r…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-20T20:07:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fd59d68c2629440e544ffa6c9a96b4252ebf45c3",
"body": "The crash source, implicit `NSApplication` instantiation with a\nnon-Cocoa QPA plugin, was fixed in the previous commit.",
"is_bot": false,
"headline": "qt, test: Enable tests on macOS with `minimal` QPA plugin",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-20T14:09:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8b2aeb2263c50428e2a465aebc0103e73582ffc",
"body": "`[NSApplication sharedApplication]` creates the shared application\nobject if it does not yet exist. When running with the `minimal` or\n`offscreen` QPA plugins, which is common for testing purposes, the Cocoa\nplatform plugin never creates it, so these call sites were instantiating\n`NSApplication` as a side effect.\n\nUse the `NSApp` global instead and return early when it is `nil`.",
"is_bot": false,
"headline": "qt: Avoid implicit `NSApplication` instantiation",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-20T14:00:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "006f8f7d49a39bc1e3a302269c8ad244f05a209b",
"body": "d24d3cbad0109adc1a8ca4b7cba16aa920fa2799 fuzz: add p2p_private_broadcast harness (frankomosh)\n\nPull request description:\n\n Add a fuzz harness for `ConnectionType::PRIVATE_BROADCAST`, a privacy-preserving transaction relay mechanism whose p2p code paths had no meaningful fuzz coverage.\n\n Current `p\n[…]\nrewtoth:\n ACK d24d3cbad0109adc1a8ca4b7cba16aa920fa2799\n\nTree-SHA512: 0d2ff9a79aa87a6eb7d7efdbe03ebba545abad1d1e995dfe617e5bd8fd7a5098fd44d92fa6eac1695aa81f38e762b30ed7a7fd0db6c85aaa32bd1d068c946e38",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35090: fuzz: add p2p_private_broadcast harness",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-20T11:57:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "51d36dfd076a98cd761ab312ab10792725ed7a29",
"body": "According to the CMake documentation for `AUTOMOC`, all `moc` output\nfiles that are not included in a source file are aggregated into the\nCMake-generated `<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp`, which is\nadded to the target's sources.\n\nWithin that single translation unit, `moc`-generated code che\n[…]\nh\n `#ifdef ENABLE_WALLET` to prevent `-Wunused-private-field` warnings\n when building with `-DENABLE_WALLET=OFF`.\n2. `test/lint/lint-includes.py` is adjusted to allow new `#include`\n statements.",
"is_bot": false,
"headline": "qt: Fix `-Wsfinae-incomplete` warnings when building with GCC 16.x",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-20T11:23:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0b0785daa00ba70fff809fbbf802fb09d02ea624",
"body": "Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>",
"is_bot": false,
"headline": "guix: split macOS and win builds",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-07-20T08:28:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "008a3e29c8844c0be4457279f5c27c1bc57401c7",
"body": null,
"is_bot": false,
"headline": "guix: split builds into Linux(gui) and macOS/Windows",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-07-20T08:28:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3b5dc05723641fe2ddf4fa47c329ffcbd22b228",
"body": "The new script is parameterized by paths to executables. It can be used\nto generate the installer from the install tree rather than the build\ntree. This capability will be used by the Guix scripts in subsequent\ncommits.",
"is_bot": false,
"headline": "cmake: Add `GenerateWindowsInstaller` script",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-18T16:35:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bfdcbd7ee494c613deac0840ca6997fcc078c08",
"body": "Use `SaltedCoinsCacheHasher` for the temporary set of earlier txids in `CoinsViewOverlay`, and in existing overlay tests to exercise the new `Txid` overload.\nEvery entry is a computed transaction hash, and the set is limited to a few thousand elements per block, satisfying the SipHash-1-3-UJ jumbo-input requirements.\n\nCo-authored-by: Andrew Toth <andrewstoth@gmail.com>",
"is_bot": false,
"headline": "coins: reuse cache hasher for txid set",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-18T05:55:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2beab94896a3042201f3ad131e8dc2346e076940",
"body": "Use the fixed-width `SipHasher13UJ::Hash` path for `CCoinsMap`, while keeping other `SaltedOutpointHasher` users on SipHash-2-4.\nThe salted outputs are process-local and must not be persisted, serialized, or compared across processes.\n\nRetained cache entries identify real transaction outputs and the\n[…]\nt accumulate.\nThe assumeutxo loader assumes snapshot txids are valid while loading and verifies the complete snapshot content hash before activation.\n\nCo-authored-by: Pieter Wuille <pieter@wuille.net>",
"is_bot": false,
"headline": "coins: use SipHash-1-3-UJ for `CCoinsMap`",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-18T05:55:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ff55cc6500e7a32204ffe774d00797f18153547",
"body": "Benchmark 32-byte hashes and inputs consisting of a 32-byte hash plus a 32-bit index with SipHash-2-4 and SipHash-1-3-UJ.\nThe UJ benchmark zero-extends the index into one 64-bit normal block.\nKeep all four measurements together after shared correctness coverage and before changing `CCoinsMap`'s hasher.\n\nCo-authored-by: Pieter Wuille <pieter@wuille.net>",
"is_bot": false,
"headline": "bench: add fixed-width SipHash benchmarks",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-18T05:55:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3aea85411f61e8890b34e1de5fd348a4bcc85552",
"body": "Add SipHash-1-3-UJ outputs to the shared vectors for sequences of 8- and 32-byte blocks.\nCheck generic writes and applicable fixed-width `Hash` overloads against those outputs, and fuzz their equivalence including mixed normal/jumbo encodings.\n\nThe outputs were generated by an independent implementation that Claude Opus 4.8 produced using only the `SipHasher13UJ` class comment as its prompt.\n\nCo-authored-by: Lőrinc <pap.lorinc@gmail.com>",
"is_bot": false,
"headline": "test: add SipHash-1-3-UJ coverage",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-18T05:55:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0ccd4ad171567c2b911160a76bde65ba379b4f6",
"body": "Add const `SipHasher13UJ::Hash` overloads for one `uint256` jumbo block, optionally followed by one 64-bit normal block.\nReuse the generic hasher's initialized state and define these short paths in the header because the new hasher benefits from inlining.\n\nCo-authored-by: Lőrinc <pap.lorinc@gmail.com>",
"is_bot": false,
"headline": "crypto: add fixed-width SipHash-1-3-UJ",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-18T05:55:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2d7931b5c8b9630ce99d86b8fe96c6b6a928f87",
"body": "Add `SipHasher13UJ`, a block-oriented implementation accepting arbitrarily mixed 64-bit normal blocks and 256-bit jumbo blocks.\nFor hash-table use, cryptographic hash outputs must make up all but a small bounded number of retained jumbo blocks.\n\nThe generic interface serves as the executable specification for the fixed-width overloads added next.\n\nCo-authored-by: Lőrinc <pap.lorinc@gmail.com>\nCo-authored-by: Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>",
"is_bot": false,
"headline": "crypto: add generic SipHash-1-3-UJ",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-18T05:55:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25bfca06d6698663310f692ed64dd4ff8e2fc962",
"body": "Move the SipHash round, compression, and finalization operations shared by `CSipHasher` and `PresaltedSipHasher` into inline `SipHashState` methods.\nThis centralizes state mutation, preserves the existing byte-path code generation, and keeps the security-sensitive follow-up focused on its changed block compression, round counts, and finalizer.\n\nCo-authored-by: Pieter Wuille <pieter@wuille.net>",
"is_bot": false,
"headline": "refactor: simplify adding SipHash-1-3-UJ",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-18T05:55:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af50ba8500a81e1a79cdf953d27bbf53ee6c979f",
"body": "Lock SipHash-2-4 behavior into shared vectors before refactoring its round and finalization code.\nStore inputs as ordered hex byte blocks so `CSipHasher` and the independent Python implementation hash the same byte sequence, with applicable `PresaltedSipHasher` overloads checked against the same vec\n[…]\n 32-byte block sequences.\nThe Python test reads a build-tree copy so functional-test staging behaves consistently when files are symlinked or copied.\n\nCo-authored-by: Pieter Wuille <pieter@wuille.net>",
"is_bot": false,
"headline": "test: add shared SipHash vectors",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-18T03:09:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "18c05d93016b28a9afd4c716dfe00b6e0accb30b",
"body": "…ttempt-limit success\n\n6ee05c4b188c0da8cefb7f361c3ba6866c5710b5 test: wallet: BnB incomplete result on attempt-limit success (Bruno Garcia)\n\nPull request description:\n\n BnB can return a valid selection before exhausting the search tree, then hit `TOTAL_TRIES` while continuing to look for a better o\n[…]\nandamus:\n ACK 6ee05c4b188c0da8cefb7f361c3ba6866c5710b5\n\nTree-SHA512: 32d0cc6da7586abdd195b87459da0a6ebbdcf8115bef41f5e625864bfa9ce8231a58f8d4b61708279ebeaef372e4f3b5fb18eab28a01dad53f043ba083330b3d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35590: test: wallet: BnB incomplete result on a…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-18T01:18:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b56b66fc64bedce52a4445f1dcb692c24600e443",
"body": "…ingInput` params overload\n\nafab8d4225c720f8d8658d4ea134505b3d9531f9 fuzz, refactor: Remove `Serialize` overload (Hennadii Stepanov)\nefa7f8c1437681dfae536017da6f27c75f8f2309 fuzz: Remove unused `DeserializeFromFuzzingInput` params overload (Hennadii Stepanov)\n\nPull request description:\n\n Clang rece\n[…]\n:\n Review ACK afab8d4225c720f8d8658d4ea134505b3d9531f9\n\nTree-SHA512: 60e98034aa642a8bc0e43dd6c02e60927b5b51be21bbef5812569c797f5d80a04011bced43a34e237e454008382c792a8f7adbde960268f6ae2c0fe3bb2749b7",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35679: fuzz: Remove unused `DeserializeFromFuzz…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-17T21:33:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6ee05c4b188c0da8cefb7f361c3ba6866c5710b5",
"body": "BnB can return a valid selection before exhausting\nthe search tree, then hit TOTAL_TRIES while continuing\nto look for a better one. Add a unit test for that path\nusing a known exhaustion fixture plus an exact-match\ncoin, and assert the result is marked incomplete via\nGetAlgoCompleted() == false.\n\nCo-authored-by: Murch <murch@murch.one>",
"is_bot": false,
"headline": "test: wallet: BnB incomplete result on attempt-limit success",
"author_name": "Bruno Garcia",
"author_login": "brunoerg",
"committed_at": "2026-07-17T18:14:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6aa5d8d9481f5e06b10095df7f46f0532f7ecdb7",
"body": "A short ID collision can invalidate a mempool-sourced transaction after an unrelated transaction was found in extra_txn.\n\nTrack each slot's source so extra_count is decremented only when the invalidated slot came from extra_txn. Mark collided slots explicitly so later candidates do not refill them.",
"is_bot": false,
"headline": "blockencodings: fix extra transaction count",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-17T14:57:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be4e64d9e4051f7272c75c2819ceb075ed5452c7",
"body": null,
"is_bot": false,
"headline": "test: characterize extra transaction miscount",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-07-17T14:56:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7298281ba8dfb58e07121c74e64f07861ec21f5c",
"body": "Co-Authored-By: ekzyis <ramdip.singhgill@gmail.com>",
"is_bot": false,
"headline": "bitcoin-util: replace netmagic command with getchainparams command",
"author_name": "Anthony Towns",
"author_login": "ajtowns",
"committed_at": "2026-07-17T12:01:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d6ba4b3b572c978392ec030567aa9e689a259ba",
"body": "… for a few trivially copyable types\n\n3e8e21b2efcee4299f50030c37176ace29b315ec txgraph: avoid moving primitive members (Lőrinc)\nd9f94aa882ae7ac5697d30c4478d9a1d633c3728 rpc: avoid moving RPC enum types (Lőrinc)\nb67baed4e7e4c553426f1192a97725bc53b9df70 coins: avoid moving `COutPoint` values (Lőrinc)\n\n[…]\n176ace29b315ec, I have reviewed the code and it looks OK.\n\nTree-SHA512: cbe55b13290ae261bba359dc6e5a3bbdfb7ae9d31bdf8e0da2eef65a0df776e4081ceeac3c82731a631bda656a86b3789651fa1f4d87875cee1dc96351bdfd7c",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34514: refactor: remove unnecessary `std::move`…",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-17T10:36:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca9ffb8e1238d1a94560517d00c5189d3546b99c",
"body": "OpenRPC service discovery specifies `rpc.discover` as the discovery\nmethod name.\n\nExpose `rpc.discover` as an alias for `getopenrpcinfo`, so clients that\nexpect the standard OpenRPC discovery method can retrieve the same\ngenerated document without changing the existing Bitcoin Core RPC.",
"is_bot": false,
"headline": "rpc: add OpenRPC discovery alias",
"author_name": "willcl-ark",
"author_login": "willcl-ark",
"committed_at": "2026-07-17T08:40:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afab8d4225c720f8d8658d4ea134505b3d9531f9",
"body": "Serialization parameters should be embedded into the object being\nserialized rather than passed as a separate argument. This works here\nbecause only serialization is performed and no new object needs to be\nconstructed.",
"is_bot": false,
"headline": "fuzz, refactor: Remove `Serialize` overload",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-16T14:05:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efa7f8c1437681dfae536017da6f27c75f8f2309",
"body": "This overload has been unused since it was added in fac81affb527132945773a5315bd27fec61ec52f.",
"is_bot": false,
"headline": "fuzz: Remove unused `DeserializeFromFuzzingInput` params overload",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-16T14:05:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6eca11175be68150ec860c26a7f4a7aaf9effb0e",
"body": "Replace assigned lambdas with local functions so Ruff can enforce E731.\nFor platform-specific immutable file cleanup, store the command as data\ninstead of creating conditional callbacks.",
"is_bot": false,
"headline": "lint: remove E731 Ruff ignore",
"author_name": "will",
"author_login": "willcl-ark",
"committed_at": "2026-07-16T09:29:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b52454538b08006b43a0bce8f4c9563c5e16ca83",
"body": "Use identity checks for literal false values to preserve RPC semantics.",
"is_bot": false,
"headline": "lint: remove E712 Ruff ignore",
"author_name": "will",
"author_login": "willcl-ark",
"committed_at": "2026-07-16T09:04:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70d9ec7f3d452789d04dce81dc02db0b3b778bb5",
"body": "dab7f2c984bdf10ed65fec6e7b602486f853c456 test: cover -externalip/onlynet interaction in functional test (will)\n657a5aa3f3d0e8533d3d7dadfcc3b2908be83601 test: cover -externalip bypassing -onlynet (will)\n8c87e32bd3937251d6f30295cc1924048e5b74d1 net: let -externalip bypass -onlynet (will)\nf4af02e827b97\n[…]\n w0xlt:\n ACK dab7f2c984bdf10ed65fec6e7b602486f853c456\n\nTree-SHA512: a4ac9334b85da8b6902d3850e21d3a1c9d7dce70bcb79182448c8d5684e24462cd6e440385af7aa4420d9582e4dff9dc9e827ca7a6da0363fff2d3c531784d9b",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34538: net: advertise -externalip addresses",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-14T22:42:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7bff765d514e0bdc8e6b2d156d3de0dd3800ab1d",
"body": "…om enumerate response\n\n4c9de7d5b329f8ffca7222d8f53c2f5a5616dfc9 external_signer: validate fingerprint from enumerate response (Kyle 🐆)\n\nPull request description:\n\n `enumeratesigners` takes the `fingerprint` field from the external signer's `enumerate` output and stores it without checking it. That\n[…]\nsedited:\n ACK 4c9de7d5b329f8ffca7222d8f53c2f5a5616dfc9\n\nTree-SHA512: 7c3303b24e234e13a4c20c0b93552145b9ccffc29d1bae42ce8a2faf548377f051e52f8ffb3924679065b27d15fc7bf3859e5ae32a2bb185738cc29bc0ade486",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35639: external_signer: validate fingerprint fr…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-14T21:15:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "773b1c9aa587304ec0dc348270bc2c2d2156ec14",
"body": "72db4accbf5bae74d061db1aeee9e0688c0da2f5 coins: drop stale cursor null checks (Lőrinc)\n3d2f2d8de09d162863f7b8e7e48e347d7d87c648 coins: pass UTXO stats view by reference (Lőrinc)\n35aedb2823692756dbe958b08f415c2b3e0be4ea coins: drop cursor from base view (Lőrinc)\nc6fbe2f66cff3846068795b3e2c459242b7be5\n[…]\nrewtoth:\n ACK 72db4accbf5bae74d061db1aeee9e0688c0da2f5\n\nTree-SHA512: 12a81330a6ec1b91a7e4393f3761ea9ed4702ecb24312f1defa5a9a079a396ce921fc52f74fe296e5ac7ab20d5b5a8a84e858c96847f333c58b7fa9de9e8143e",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35572: coins: make cursor iteration DB-only",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-14T20:27:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d9e4f8dbd80260e52b29336b58eecb7c0d63cd6",
"body": "…negative values\n\n3ae3a94f2bdc572cdf1b5223419a25650291ab56 wallet: avoid call bumpfeediscount with negative values (Pol Espinasa)\n\nPull request description:\n\n in https://github.com/bitcoin/bitcoin/issues/34232 dergoegge reported an assertion fail in `SetBumpFeeDiscount`.\n\n **Context**\n\n The bump-\n[…]\ntin4btc:\n ACK 3ae3a94f2bdc572cdf1b5223419a25650291ab56\n\nTree-SHA512: e76693eb66c4883ed3ef5edf1baa972657b0d532487803706312d486b4d4a4997f5dcbc64781a1a21b7b5628b06fcc97a6633382509061734d0f5615e851bef1",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35633: wallet: avoid call bumpfeediscount with …",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-07-14T20:15:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c4216e885a666e3a1290d87068912a34cb858a60",
"body": "240d5f743aab0ff4f3e5d7d1783b410aa3306ad3 fuzz: Drop unnecessary mutexes (marcofleon)\n\nPull request description:\n\n Quick cleanup addressing https://github.com/bitcoin/bitcoin/pull/35295#discussion_r3550382830.\n\n This follows the same logic as 48df0939e7250a2de8a0c336bc3ddbcbe0578812 from https://gi\n[…]\n code review ACK 240d5f743aab0ff4f3e5d7d1783b410aa3306ad3\n\nTree-SHA512: 869127dc8cec4fc0688f92d67dc22f643cf3741c62d645eb4a959a9d8f46590efe19765f7df97ee36f9a3ca759c50fe983a3e6655e40a53ea99904e7a1ec00f6",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35723: fuzz: Drop unnecessary mutexes",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-14T19:35:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "240d5f743aab0ff4f3e5d7d1783b410aa3306ad3",
"body": "Remove the `Mutex` from the `coins_view` and `coinscache_sim`\npool startup helpers. Fuzz targets are entered sequentially within a\nprocess and parallel fuzzing uses separate processes/forks, which each\nhave their own copy of the global thread pool. Therefore, a mutex to\nprevent two in-process callers from racing to start the pool isn't needed.",
"is_bot": false,
"headline": "fuzz: Drop unnecessary mutexes",
"author_name": "marcofleon",
"author_login": "marcofleon",
"committed_at": "2026-07-14T18:21:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf0368fb76e4ee07fc1a461d73eaff3e4ddb5e6b",
"body": "…drop fuzz test workaround\n\nfab8eeed82cc784f05a7407da0245e6f44563778 fuzz: clang-format LIMITED_WHILE (MarcoFalke)\nfa0d777ce2a91816ab0a6bd8a0f389e4840e84c5 fuzz: Clang-format LIMITED_WHILE like while (MarcoFalke)\nfa1a9bde5a614d052a188a2e0756d2475ce777e0 fuzz: Remove unused workaround after fix in li\n[…]\n-format cleanups added since last review, which seem nice\n\nTree-SHA512: 0836628f8ee54adf02571025456211a74f63d05058b72280b10111ecfbb93d30945f4a48f30cc790774de4e2b489907313e86b0fa6729f3480c64850c94848b4",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35720: ipc: Update libmultiprocess subtree and …",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-07-14T18:10:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "efb4eae33861d3f316d77788f5c83b58dad94a0a",
"body": "MergeChunks scans the top chunk's transactions twice: once to count\nthe dependencies on the bottom chunk, and once to locate the randomly\npicked one. Remember the per-transaction dependency counts from the\nfirst pass, so the second pass only computes the intersection of the\nselected transaction, rather than one per transaction scanned.",
"is_bot": false,
"headline": "clusterlin: avoid recomputing intersections in MergeChunks",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-14T17:20:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b91ad149f0056c0a6dfdbc816b0c3b6f8d74827",
"body": "Reserve capacity for one entry per transaction in m_suboptimal_chunks at\nconstruction time, avoiding repeated reallocations while MakeTopological\nand StartOptimizing fill the queue.",
"is_bot": false,
"headline": "clusterlin: reserve the suboptimal-chunk queue up front",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-14T17:20:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6ca996255bb7edaebe18a104b113d69a07bc445",
"body": "Replace GetLinearization's four per-call heap-allocated vectors (the\nready chunk/transaction heaps and both dependency counters) with stack\narrays and explicit size counters. This especially benefits\nlinearization of small clusters, where the allocations make up a\nsignificant fraction of the total runtime.",
"is_bot": false,
"headline": "clusterlin: avoid heap allocations in GetLinearization",
"author_name": "Pieter Wuille",
"author_login": "sipa",
"committed_at": "2026-07-14T17:20:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d4065d1fe4d9ad802e7c2b996d6cb12d66677a2",
"body": "900a7785bf56ab92560a3ec63423c9376a7b255d ci: use Ubuntu 26.04 for lint container (fanquake)\n058a73a0aea6b949763bbea305391d7f2218c429 ci: use uv 11.x (fanquake)\n14f4ddcb55497faf25a3db60a7477ea4dbc236ed ci: mypy 2.3.0 (fanquake)\n\nPull request description:\n\n Container: Ubuntu `24.04` -> `26.04`.\n `uv\n[…]\nlcl-ark:\n ACK 900a7785bf56ab92560a3ec63423c9376a7b255d\n\nTree-SHA512: fc664b9cd16257ae023a4a60566bb512bb9b12d72a81e34a4a6659490a9eb84922cef6e44c622d4b52048788ce880d71a9b5168591aadbb83eae62fe54f54fcb",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35718: ci: Update lint container dependencies",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-07-14T14:11:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d9fbf766643742359590f57ab18ac67c51e6889",
"body": "…ig for btck_TransactionInput\n\n6667dc4eec7b458893920eb7f8631bdf2467c046 kernel: expose scriptSig for btck_TransactionInput (Peter Zafonte)\ne6de3a2d3c78d5b72f57bd6a5d711fed97ca70c1 kernel: expose witness stack for btck_TransactionInput (Peter Zafonte)\n\nPull request description:\n\n Silent payments sca\n[…]\nckies-v:\n ACK 6667dc4eec7b458893920eb7f8631bdf2467c046\n\nTree-SHA512: b5e9d32ec87a5f5a9fea5652ed69737eae1d1f9cfb777544b96d703bbd057c114e0b7afae4e9e9d09b8b546694b14fb923b747c04a8f0211ab6caa015d06967d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35380: kernel: expose witness stack and scriptS…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-07-14T12:38:04Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 0,
"commits_last_year": 3598,
"latest_release_at": null,
"latest_release_tag": null,
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 52,
"days_since_latest_release": null,
"mean_days_between_releases": null
},
"community": {
"has_readme": false,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": null,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 6,
"stars": 27,
"watchers": 9,
"fork_history": {
"days": [
{
"date": "2023-02-05",
"count": 1
},
{
"date": "2023-08-05",
"count": 1
},
{
"date": "2024-01-22",
"count": 1
},
{
"date": "2024-03-10",
"count": 1
},
{
"date": "2024-08-25",
"count": 1
},
{
"date": "2024-12-28",
"count": 1
}
],
"complete": true,
"collected": 6,
"total_forks": 6
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": true,
"example_dirs": [
"example",
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"depends/Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"contrib/devtools/deterministic-fuzz-coverage/Cargo.toml",
"contrib/devtools/deterministic-unittest-coverage/Cargo.toml",
"test/lint/test_runner/Cargo.toml"
],
"largest_source_bytes": 2409168,
"source_files_sampled": 2018,
"oversized_source_files": 129,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 3,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "lief",
"direct": false,
"version": "0.17.5",
"ecosystem": "pypi"
},
{
"name": "mypy",
"direct": false,
"version": "2.3.0",
"ecosystem": "pypi"
},
{
"name": "pyzmq",
"direct": false,
"version": "27.1.0",
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 3,
"direct_count": 0,
"indirect_count": 3
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 235,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 24,
"closed_unmerged_prs": 79
},
"bus_factor": 5,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "laanwj",
"commits": 7406,
"avatar_url": "https://avatars.githubusercontent.com/u/126646?v=4"
},
{
"type": "User",
"login": "fanquake",
"commits": 5411,
"avatar_url": "https://avatars.githubusercontent.com/u/863730?v=4"
},
{
"type": "User",
"login": "achow101",
"commits": 2471,
"avatar_url": "https://avatars.githubusercontent.com/u/3782274?v=4"
},
{
"type": "User",
"login": "sipa",
"commits": 2397,
"avatar_url": "https://avatars.githubusercontent.com/u/548488?v=4"
},
{
"type": "User",
"login": "hebasto",
"commits": 2235,
"avatar_url": "https://avatars.githubusercontent.com/u/32963518?v=4"
},
{
"type": "User",
"login": "gavinandresen",
"commits": 1101,
"avatar_url": "https://avatars.githubusercontent.com/u/331997?v=4"
},
{
"type": "User",
"login": "ryanofsky",
"commits": 923,
"avatar_url": "https://avatars.githubusercontent.com/u/7133040?v=4"
},
{
"type": "User",
"login": "glozow",
"commits": 795,
"avatar_url": "https://avatars.githubusercontent.com/u/25183001?v=4"
},
{
"type": "User",
"login": "jnewbery",
"commits": 794,
"avatar_url": "https://avatars.githubusercontent.com/u/1063656?v=4"
},
{
"type": "User",
"login": "jonasschnelli",
"commits": 774,
"avatar_url": "https://avatars.githubusercontent.com/u/178464?v=4"
}
],
"contributors_sampled": 100,
"top_contributor_share": 0.194
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [
"ruff.toml"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Cargo.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 17 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "e34b8d5a7dcd45e4faa3bb5fdeae64bf049037f6",
"ran_at": "2026-07-26T17:19:08Z",
"aggregate_score": 4.7,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-26T16:15:48Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2024-08-16T20:16:33Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/hebasto/bitcoin",
"host": "github.com",
"name": "bitcoin",
"owner": "hebasto"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"security": 58,
"vitality": 60,
"community": 30,
"governance": 79,
"engineering": 73
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 60,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 3598,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 52
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "3598 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 3598
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "critical",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"releases_count": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "no releases published",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases_published",
"params": {}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 1,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 1 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 1
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 30,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"forks": 6,
"stars": 27,
"watchers": 9,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "27 stars",
"points": 23,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 27
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "6 forks",
"points": 5.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 6
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "9 watchers",
"points": 5,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 9
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": false,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 79,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "excellent",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 88,
"inputs": {
"bus_factor": 5,
"contributors_sampled": 100,
"top_contributor_share": 0.194
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "5 contributor(s) cover half of all commits",
"points": 45.9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 5
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 19% of commits",
"points": 18.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 19
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "100 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 100
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 17 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"merged_prs": 235,
"open_issues": 0,
"closed_issues": 24,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 79
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "235/314 decided PRs merged",
"points": 28.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 235,
"decided": 314
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"followers": 1276,
"owner_type": "User",
"is_verified": null,
"owner_login": "hebasto",
"public_repos": 80,
"account_age_days": 3201
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1,276 followers of hebasto",
"points": 22.3,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1276,
"login": "hebasto"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "80 public repos, account ~8 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 80
}
},
{
"code": "account_age_years",
"params": {
"years": 8
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 73,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "ruff.toml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "ruff.toml"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [
"bitcoin-core"
],
"has_wiki": false,
"homepage": "https://bitcoincore.org/en/download",
"has_readme": false,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://bitcoincore.org/en/download",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "1 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 1
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 58,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 47,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 4.7
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 17 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 3 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 3
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 3,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 3,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 11
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 61,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.95,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "95 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 95,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"has_nix": true,
"has_tests": true,
"lockfiles": [
"Cargo.lock"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"depends/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"contrib/devtools/deterministic-fuzz-coverage/Cargo.toml",
"contrib/devtools/deterministic-unittest-coverage/Cargo.toml",
"test/lint/test_runner/Cargo.toml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "depends/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "depends/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "ruff.toml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "ruff.toml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "C++ (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C++"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Nix, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Nix, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"primary_language": "C++",
"largest_source_bytes": 2409168,
"source_files_sampled": 2018,
"oversized_source_files": 129
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "C++ (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C++"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "129/2018 source files over 60KB",
"points": 51.5,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 2018,
"oversized": 129
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example",
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example, examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example, examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Community profile unavailable"
],
"report_type": "repository",
"generated_at": "2026-07-26T17:19:30.596681Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hebasto/bitcoin.svg",
"full_name": "hebasto/bitcoin",
"license_state": "standard",
"license_spdx": "MIT"
}