Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": true,
"size_kb": 290933,
"has_wiki": true,
"homepage": "https://bitcoin.org/en/download",
"languages": {
"C": 2664184,
"M4": 55007,
"C++": 14480199,
"Nix": 3651,
"HTML": 21831,
"Rust": 41211,
"Sage": 59880,
"CMake": 274180,
"Shell": 190659,
"Python": 4236082,
"Scheme": 19642,
"Assembly": 28405,
"Makefile": 107294,
"Dockerfile": 5092,
"Cap'n Proto": 14554,
"Objective-C++": 5506
},
"pushed_at": "2026-06-30T14:37:01Z",
"created_at": "2018-02-07T11:52:47Z",
"owner_type": "User",
"updated_at": "2026-06-30T08:43:41Z",
"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": null,
"name": "Vasil Dimov",
"type": "User",
"login": "vasild",
"company": null,
"location": null,
"followers": 274,
"avatar_url": "https://avatars.githubusercontent.com/u/266751?v=4",
"created_at": "2010-05-06T17:45:52Z",
"is_verified": null,
"public_repos": 36,
"account_age_days": 5924
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v0.15.1",
"kind": "patch",
"published_at": "2017-11-06T08:46:24Z"
},
{
"tag": "v0.15.0",
"kind": "minor",
"published_at": "2017-09-10T22:13:03Z"
},
{
"tag": "v0.14.2",
"kind": "patch",
"published_at": "2017-06-15T10:44:01Z"
},
{
"tag": "v0.14.1",
"kind": "patch",
"published_at": "2017-04-20T09:28:25Z"
},
{
"tag": "v0.14.0",
"kind": "minor",
"published_at": "2017-03-05T18:09:49Z"
},
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2017-01-02T08:54:25Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2016-10-27T06:10:55Z"
},
{
"tag": "v0.13.0",
"kind": "minor",
"published_at": "2016-08-17T11:06:57Z"
},
{
"tag": "v0.12.1",
"kind": "patch",
"published_at": "2016-04-11T11:01:43Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2016-02-17T08:40:03Z"
},
{
"tag": "v0.11.3",
"kind": "patch",
"published_at": "2017-03-09T19:49:36Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2015-11-10T13:46:18Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2015-10-12T18:58:31Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2015-07-10T17:23:55Z"
},
{
"tag": "v0.10.5",
"kind": "patch",
"published_at": "2017-03-09T19:48:56Z"
},
{
"tag": "v0.10.4",
"kind": "patch",
"published_at": "2015-11-09T14:08:30Z"
},
{
"tag": "v0.10.3",
"kind": "patch",
"published_at": "2015-10-11T08:49:25Z"
},
{
"tag": "v0.10.2",
"kind": "patch",
"published_at": "2015-05-16T08:37:27Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2015-04-25T08:05:13Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2015-02-13T08:55:11Z"
},
{
"tag": "v0.9.5",
"kind": "patch",
"published_at": "2015-05-21T08:48:26Z"
},
{
"tag": "v0.9.4",
"kind": "patch",
"published_at": "2015-01-12T09:36:57Z"
},
{
"tag": "v0.9.3",
"kind": "patch",
"published_at": "2014-09-22T14:42:15Z"
},
{
"tag": "v0.9.2",
"kind": "patch",
"published_at": "2014-06-13T10:26:02Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2014-04-08T10:04:06Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2014-03-16T10:05:28Z"
},
{
"tag": "v0.8.6",
"kind": "patch",
"published_at": "2013-12-05T12:11:26Z"
},
{
"tag": "v0.8.5",
"kind": "patch",
"published_at": "2013-09-12T03:35:18Z"
},
{
"tag": "v0.8.4",
"kind": "patch",
"published_at": "2013-08-21T01:07:28Z"
},
{
"tag": "v0.8.3",
"kind": "patch",
"published_at": "2013-06-25T14:27:24Z"
},
{
"tag": "v0.8.2",
"kind": "patch",
"published_at": "2013-05-25T15:48:25Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2013-03-17T19:35:36Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2013-02-18T23:38:34Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2012-12-10T14:47:37Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2012-10-09T17:22:09Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2012-09-12T18:07:22Z"
}
],
"recent_commits": [
{
"oid": "3c76bd435681ee2ebaa1f407ac23736d9c3b331b",
"body": "829255c8bedc033ddb518fae43050c4ca10caf6a cmake: Remove `SelectLibraryConfigurations` from `FindQRencode` module (Hennadii Stepanov)\n5c55606da9ba8b701718e1c84751979c8e87e4f7 depends: Remove unused `lib/pkgconfig` in `qrencode` package (Hennadii Stepanov)\n402ba10b20b05a2bf0a3d5e9270f1ad88021ba48 cmake\n[…]\neKarrot:\n ACK 829255c8bedc033ddb518fae43050c4ca10caf6a\n\nTree-SHA512: fd87a5afd7c0b3271a008df8adcb2ff809053799a0658fbb5a1f15ed11f6abad25836c8e1b7507d0d4c35c027dcbba88b136ac827e17b283ee4ffbbe55d6f4ee",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35603: build: QRencode cleanups",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-29T14:48:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "57b3bf8496032cb7a87eafe94ce840387ece2408",
"body": "…h -U_FORTIFY_SOURCE\n\nbbbbab86a81e137e83fbaed4ec1ba7318c7e8a11 ci: Bump tsan config to ubuntu:26.04 with -U_FORTIFY_SOURCE (MarcoFalke)\n\nPull request description:\n\n The `-U_FORTIFY_SOURCE` should be harmless in the Tsan CI, and is required to work around https://github.com/bitcoin/bitcoin/issues/30\n[…]\nanquake:\n ACK bbbbab86a81e137e83fbaed4ec1ba7318c7e8a11\n\nTree-SHA512: 7c4b434342861fabc52eda7b551ebe08fcde6079cd39d54a21938c88dcfd80cdb876dd7de859bac1201a2b928163c19704c24d5b5a5e76f4935e33cb3e6ae2bd",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35609: ci: Bump tsan config to ubuntu:26.04 wit…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-29T10:45:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2a9e35d293b308e81811fa93ad2e5e8ed20e66e0",
"body": "…ERR}`\n\n41ceea400e891a9f51d2dbb91f7acca03ac7fc46 scripted-diff: Rename `StatusLevel::{INFO,WARN,ERR}` (Hennadii Stepanov)\nf395acdeeeaa1f3fd75d3cedbf2731fa24083e9f scripted-diff: Rename `Sock::{RECV,SEND,ERR}` (Hennadii Stepanov)\n7ac25c91771389d9f7e8b1b50225a358a4a75723 util, refactor: Rename local `\n[…]\nator:\n re-ACK 41ceea400e891a9f51d2dbb91f7acca03ac7fc46\n\nTree-SHA512: bf3c76468f9b0167e22356c140306a626bf4f769076c260931d35047724970dd2c97985bde2ef3ceb192d560710832b535ef9bba2ea133c0bfe4eb6b2e8e447f",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35588: scripted-diff: Rename `Sock::{RECV,SEND,…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-28T20:39:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "41ceea400e891a9f51d2dbb91f7acca03ac7fc46",
"body": "The `ERR` macro is defined on illumos-based systems in the `regset.h`\nheader included by the Boost.Test framework, which may cause a\ncompilation error.\n\n-BEGIN VERIFY SCRIPT-\n\nren() { sed -i \"s/\\<$1\\>/$2/g\" $( git grep -l \"$1\" ./src/qt/psbtoperationsdialog.* ) ; }\nren StatusLevel::INFO StatusLevel::\n[…]\n Info\nren StatusLevel::WARN StatusLevel::Warn\nren WARN Warn\nren StatusLevel::ERR StatusLevel::Error\nren ERR Error\n\n-END VERIFY SCRIPT-",
"is_bot": false,
"headline": "scripted-diff: Rename `StatusLevel::{INFO,WARN,ERR}`",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-27T10:33:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f395acdeeeaa1f3fd75d3cedbf2731fa24083e9f",
"body": "The `ERR` macro is defined on illumos-based systems in the `regset.h`\nheader included by the Boost.Test framework, which causes a compilation\nerror.\n\n-BEGIN VERIFY SCRIPT-\n\nren1() { sed -i \"s/\\<$1\\>/$2/g\" $( git grep -l \"$1\" ./src/util/sock.* ./src/httpserver.h ) ; }\nren1 RECV RecvEvent\nren1 SEND Se\n[…]\n ERR ErrorEvent\n\nren2() { sed -i \"s/\\<$1\\>/$2/g\" $( git grep -l \"$1\" ./src/ ) ; }\nren2 Sock::RECV Sock::RecvEvent\nren2 Sock::SEND Sock::SendEvent\nren2 Sock::ERR Sock::ErrorEvent\n\n-END VERIFY SCRIPT-",
"is_bot": false,
"headline": "scripted-diff: Rename `Sock::{RECV,SEND,ERR}`",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-27T10:26:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7a74f6529357cf78ee74f0316b9502664f56889e",
"body": "… across FuzzedSock instances\n\n6fa4132298a9da4fb59ea6d90346db467585db40 fuzz: share a single mocked steady clock across FuzzedSock instances (Hao Xu)\n\nPull request description:\n\n This is a follow-up of https://github.com/bitcoin/bitcoin/pull/35478#issuecomment-4667842057, inspired by maflcko .\n\n E\n[…]\nfleon:\n crACK 6fa4132298a9da4fb59ea6d90346db467585db40\n\nTree-SHA512: 3c773b5c0c3ba42a8245c9ea6042b0bc767df4fad506305f3c200310616b48a59deb1542086eb4ce3e8a1407c4d6b42cef3b37cd84bfe80d4821972b8d3b4286",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35536: fuzz: share a single mocked steady clock…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-27T09:55:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1290ce7f74b50f99932e7b83e414dec2732a8b9",
"body": "…xtendedPublicKey classes\n\n8791c4764cad513df20fcf17fb806d2318ead11a test: use ExtendedPrivateKey in wallet_taproot.py (rkrux)\n89ceafafb9fd3af716ce64b1cbd6549ce34af465 test: use ExtendedPrivateKey in wallet_listdescriptors.py (rkrux)\nbbfffcab588feb026cfecf117c482e48d8e4c144 test: use ExtendedPrivateK\n[…]\n w0xlt:\n ACK 8791c4764cad513df20fcf17fb806d2318ead11a\n\nTree-SHA512: f8ec4e09eaa6cc44b0f1c9a91337e570b12fb882c258be89b470de1a8cecf9d2fd40d9f02ee739dcbf639462ea7710aa145a3726f0f537f5a1f1e7772e5b019d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35543: test: introduce ExtendedPrivateKey and E…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-26T22:56:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ac25c91771389d9f7e8b1b50225a358a4a75723",
"body": "The local `static constexpr auto ERR` shadowed the `Sock::ERR` static\ndata member. Rename it to `accept_error`, per the Developer Notes'\nshadowing guidance.\n\nCo-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>",
"is_bot": false,
"headline": "util, refactor: Rename local `ERR` in `Sock::Accept`",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-26T20:08:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbbbab86a81e137e83fbaed4ec1ba7318c7e8a11",
"body": null,
"is_bot": false,
"headline": "ci: Bump tsan config to ubuntu:26.04 with -U_FORTIFY_SOURCE",
"author_name": "MarcoFalke",
"author_login": null,
"committed_at": "2026-06-26T17:47:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea9afb61a1c52979d0e64e4dae9b3a611f7b9a5e",
"body": "…/ `pkg-config` requirements\n\nfb8a1038867b6e8a938d2c0b66cd961e2fd538d4 doc: Clarify build docs about `pkgconf` / `pkg-config` requirements (Hennadii Stepanov)\n\nPull request description:\n\n Since https://github.com/bitcoin/bitcoin/pull/34411, `pkgconf`/`pkg-config` is no longer strictly required.\n\n \n[…]\nsedited:\n ACK fb8a1038867b6e8a938d2c0b66cd961e2fd538d4\n\nTree-SHA512: 0f740c954f058ce69fe936a51cfe1dc36dc374d392a94343d5c9f6b0be9565e4163c01015b00fef4e58eb180a8a520e6e81ea8b206868b3bcdf077caf0d24d65",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35602: doc: Clarify build docs about `pkgconf` …",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-26T14:33:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "672eedc46b064a3349b943b842362102c213fe95",
"body": "… extend coverage\n\n1a3cfdf1b7ab2b55dbd0a4a4fa428b4e7d8bfa73 fuzz: connman: cover AddLocalServices/RemoveLocalServices (Bruno Garcia)\nc507fb306342c4bd14ce1d50249aceb054e947ea fuzz: connman: add outbound-bytes invariants (Bruno Garcia)\n4a6fce43ead13ad595caef5d398f2b0eb52b1d6a fuzz: connman: add AddNod\n[…]\nsedited:\n ACK 1a3cfdf1b7ab2b55dbd0a4a4fa428b4e7d8bfa73\n\nTree-SHA512: c7b6799ca65d2e639d8ab9ab0cc77bae663f24fbda934446a8ee2e8ce9e8e36624d16b4f492b1714e2d67375edd35907cb9392d21f368d3d5298275ff1d05c72",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35220: fuzz: connman: strengthen assertions and…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-26T13:30:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0e5c718d8afcc5cba138e9cb9db39244c5726a80",
"body": "… are live\n\ndf9eb72b129b999eb5e327c51fd580ba9910a778 test: ensure group data cluster pointers are live (Greg Sanders)\n\nPull request description:\n\n Belt-and-suspenders check inside `SanityCheck` to avoid dangling pointers.\n\nACKs for top commit:\n l0rinc:\n code review ACK df9eb72b129b999eb5e327c51\n[…]\nsedited:\n ACK df9eb72b129b999eb5e327c51fd580ba9910a778\n\nTree-SHA512: a666b07a56401182aac156bf575ebe3e0a7fc89cd885ccb0b0e65d64da4df673be2b00cf1643a930da1cd65806924ecb6cd94cb18bcead5761aeae775fa5f2e3",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35506: test: ensure group data cluster pointers…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-26T12:30:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "93012d7ff918eef41adf453bf10ddb4da21f3df4",
"body": "… send and sendall\n\n8ebfff0f88bfeee02f72e97049302d6af47a5d38 doc: add send RPC release note (Sjors Provoost)\n5884f5a4fa936b0b059748c81e0904c83b8328ad wallet: remove experimental warning from send RPCs (Sjors Provoost)\n\nPull request description:\n\n The `send` RPC was introduced in v21 an initially ma\n[…]\ntin4btc:\n ACK 8ebfff0f88bfeee02f72e97049302d6af47a5d38\n\nTree-SHA512: beb5321adaf871157bda396c8e5740daff95ffe342416914340ae4197accebe60236032d1329876b42405437b99f59079a56ec1e5ac592b753031ba2ebd36cfb",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35601: wallet: remove experimental warning from…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-25T17:39:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "829255c8bedc033ddb518fae43050c4ca10caf6a",
"body": "Co-authored-by: Daniel Pfeifer <daniel@pfeifer-mail.de>",
"is_bot": false,
"headline": "cmake: Remove `SelectLibraryConfigurations` from `FindQRencode` module",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-25T15:33:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c55606da9ba8b701718e1c84751979c8e87e4f7",
"body": null,
"is_bot": false,
"headline": "depends: Remove unused `lib/pkgconfig` in `qrencode` package",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-25T14:30:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "402ba10b20b05a2bf0a3d5e9270f1ad88021ba48",
"body": null,
"is_bot": false,
"headline": "cmake: Drop optional `PkgConfig` use in `FindQRencode` module",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-25T14:04:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ebfff0f88bfeee02f72e97049302d6af47a5d38",
"body": null,
"is_bot": false,
"headline": "doc: add send RPC release note",
"author_name": "Sjors Provoost",
"author_login": "Sjors",
"committed_at": "2026-06-25T14:02:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb8a1038867b6e8a938d2c0b66cd961e2fd538d4",
"body": null,
"is_bot": false,
"headline": "doc: Clarify build docs about `pkgconf` / `pkg-config` requirements",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-25T12:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5884f5a4fa936b0b059748c81e0904c83b8328ad",
"body": null,
"is_bot": false,
"headline": "wallet: remove experimental warning from send RPCs",
"author_name": "Sjors Provoost",
"author_login": "Sjors",
"committed_at": "2026-06-25T12:02:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b84e5106c38c146f2393b9a337e2d604fd64faf",
"body": "58560c281d008547b0e2115bdddaee83f0d4dd1e ci: remove some packages from Chimera job (fanquake)\n\nPull request description:\n\n This job doesn't build QT, so drop `ninja` and `xz`.\n With libevent removed, and no Qt build, we can also drop `pkgconf`.\n\nACKs for top commit:\n sedited:\n ACK 58560c281d00\n[…]\nebasto:\n ACK 58560c281d008547b0e2115bdddaee83f0d4dd1e.\n\nTree-SHA512: 4537c8c77334637ea177321d95ad39ee103ab0080e8331f9fe9efb92a3bb4dc00fb59d2e250fd43c267c05f0a2b98e779949ff40723633c2f2bff345fa554a31",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35595: ci: remove some packages from Chimera job",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-25T10:43:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "58560c281d008547b0e2115bdddaee83f0d4dd1e",
"body": "This doesn't build QT, so drop ninja and xz, and add a comment.\nWith libevent removed, and no Qt build, we can also drop pkgconf.",
"is_bot": false,
"headline": "ci: remove some packages from Chimera job",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-25T08:46:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "295ce6f45c8fe5cc5e74fe23adbae48cbc7a94d0",
"body": "9e6546c517cd8e97ca6f64bba812dec9257e0b89 test: raise reindex mining RPC timeout (Lőrinc)\n\nPull request description:\n\n **Problem:** I often hit a timeout in `feature_reindex.py` when running functional tests locally in parallel in debug mode (especially on battery or in power-saving mode).\n **Fix:*\n[…]\nsedited:\n ACK 9e6546c517cd8e97ca6f64bba812dec9257e0b89\n\nTree-SHA512: d3541dd6752f943921a030393b00e684b3b5d00b93aa0b2b1f85c017698bdfe2216d7f5441bb7dd5f153453385e4df6f9cc8055589e57bca83fa48f0b7de4252",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35576: test: raise `feature_reindex` RPC timeout",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-25T08:30:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "633044f14362108b782b37408385b6e024eaa41b",
"body": "…he wallet after migrating\n\n0cdd817a82a26be53efa6038dae85fceb0cf2248 add release note (Pol Espinasa)\n517d37ce3ebfe264f44f7b563ca29dfdb0891534 test: tests wallet migration with load_wallet disabled (Pol Espinasa)\nb98dd63da7b9b14a3655f00021cc5a35826ccc15 rpc: Add load_wallet argument to migratewallet \n[…]\nn/bitcoin/commit/0cdd817a82a26be53efa6038dae85fceb0cf2248\n\nTree-SHA512: 8389599e63603b1a532e1bfba0b6c652653386c001f5a881bd49843302b74ff4dbaa4131b5b377c24f483d42e0e70a92b96f760244e3c2e2b44ce08cd04ca1e0",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35266: rpc, wallet: add an option to not load t…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-24T19:28:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d6269e2a903c46a8ac1e359e34f4dbe023ac9386",
"body": "703a671fbc2a6f875fea6644a974692679d880a3 fuzz: compact coins view db during fuzzing (Lőrinc)\n0868c85fd576a34355539da037f99f2c41639cad refactor: rename async coin compaction (Lőrinc)\n\nPull request description:\n\n **Problem:** #35465 added async chainstate compaction, but the `coins_view_db` fuzz targ\n[…]\nrewtoth:\n ACK 703a671fbc2a6f875fea6644a974692679d880a3\n\nTree-SHA512: 9854c3acbaace795155e7469cb10938fbd872726cbb8a4b4ef71d6d352d00824498747215aee1b237e64452eae2e690a3f7d7daa6b6b0030e75a6f2ccc0802fb",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35594: fuzz: cover async chainstate compaction",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-24T19:24:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d84fc352cbc1363df5cd6024a22e73fc63283e4f",
"body": "… interpretation\n\nabc33ff043f07226d1f1f88a1d1ddce8dccdd930 test: announce field must be 0 or 1 in sendcmpct (brunoerg)\n2d0dce0af54b8eb0ebdaf62f12a92d7e559a281e net_processing: fix BIP152 first integer interpretation (brunoerg)\n\nPull request description:\n\n Fixes #35542\n\n According to the BIP152, th\n[…]\n w0xlt:\n ACK abc33ff043f07226d1f1f88a1d1ddce8dccdd930\n\nTree-SHA512: 77fed86d4de81f7c35ff002b6e1b2a90882ea55f159075da4d34a619d1075f625fca34f929cdd981f1b2eb06f76b64f42cda46502dcd1b4a634c690b0882ec7c",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35550: net_processing: fix BIP152 first integer…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-23T23:19:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "703a671fbc2a6f875fea6644a974692679d880a3",
"body": "Exercise `CCoinsViewDB::CompactFullAsync()` from the `coins_view_db` fuzz target so the new chainstate compaction wrapper can run concurrently with ordinary coins view operations.\n\nThe fuzz operation only schedules compaction, matching production; outstanding work is waited for by the `CCoinsViewDB` destructor at the end of the fuzz input.",
"is_bot": false,
"headline": "fuzz: compact coins view db during fuzzing",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-06-23T23:14:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0868c85fd576a34355539da037f99f2c41639cad",
"body": "Rename the `CCoinsViewDB` async compaction wrapper to `CompactFullAsync()` so it is distinct from the blocking `CDBWrapper::CompactFull()` primitive it calls.",
"is_bot": false,
"headline": "refactor: rename async coin compaction",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-06-23T23:13:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fafff08e1fe4c546338f2ba99540eac2b9102d09",
"body": "…miner startup defaults)\n\nb847626562e79083865c59df9dbcf0f1e91e2bb8 test: refresh MiniWallet after node restart (Sjors Provoost)\nf4e643cb152c4ace9659de553f80d6a4f79dd62d test: merge mining options in package feerate check (Sjors Provoost)\n280ce6a0aed469c920aa4faa3baf10fd6572a106 miner: ensure block_m\n[…]\n w0xlt:\n ACK b847626562e79083865c59df9dbcf0f1e91e2bb8\n\nTree-SHA512: 47678eaed604228269bd892ccf8ff58804745bbc7675b4a93528da9a9292a2eb1e0562cdb8341edac77178563420885b48282bb9e5c2b997b28f2fc64ceeff3d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35403: mining: pr 33966 followups (disentangle …",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-23T22:07:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e12db0902be404e2a48ebebaade711e2cf94276c",
"body": "146b3adfaa19070ff88b202df865bb9fca4336b6 doc: remove libevent (fanquake)\n96d7f55f1dfbad4ae4991b7154e5d916b00d4687 vcpkg: remove libevent (fanquake)\n0443943dc03e9892937355b543eb410477aba135 ci: remove libevent (fanquake)\na0ca249f3fc8a678855925a83d508073916e0f79 depends: remove libevent (fanquake)\n35d\n[…]\nsedited:\n ACK 146b3adfaa19070ff88b202df865bb9fca4336b6\n\nTree-SHA512: ecd14be93d11603d7c373a41474a7df1734b48550b12cd37933b604860913a77d42ee08bc187610881bec239b0834c2486f8fe52299cd3315a57b79c2e95929d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34411: Full Libevent removal",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-23T17:12:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fa8e4700ba9f7d07f727fffb1a6099f45deef322",
"body": "…entation, reject sendtoaddress/sendmany\n\n2fe34808faaac41cca228b8795539b567908ad51 wallet: reject sendtoaddress and sendmany for external signers (Sjors Provoost)\nbd5a32f7db29c0f223c674cdd24cf04f94fda096 doc: add taproot descriptor to getdescriptors example (woltx)\n7131c82937835bdbe83bd64f784d8a265d\n[…]\nnaiyoma:\n ACK 2fe34808faaac41cca228b8795539b567908ad51\n\nTree-SHA512: 86859d2f81ac337f3b4b6578c6ee0151ffb76b8374dfa58e28e00ce4eb69dc200cd6bd2d0a99f73d0475c3824d6ac1cb9e2542b119ca124dd835132dc95cd023",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35424: doc, wallet: align external signer docum…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-23T13:01:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6fa4132298a9da4fb59ea6d90346db467585db40",
"body": "Each FuzzedSock used to own its mocked steady clock and call\nMockableSteadyClock::SetMockTime() directly. Hold the clock by reference\nto an externally provided FakeSteadyClock instead, so that several\nFuzzedSock instances sharing a test case (e.g. one per peer, or one\ncreated via Accept()) advance a\n[…]\n resets mocktime on\ndestruction.\n\nFakeSteadyClock is a LimitOne type, so each fuzz target constructs one\ninstance per iteration and passes it to ConsumeSock / ConsumeNode / the\nFuzzedSock constructor.",
"is_bot": false,
"headline": "fuzz: share a single mocked steady clock across FuzzedSock instances",
"author_name": "Hao Xu",
"author_login": "HowHsu",
"committed_at": "2026-06-23T12:18:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8791c4764cad513df20fcf17fb806d2318ead11a",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_taproot.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89ceafafb9fd3af716ce64b1cbd6549ce34af465",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_listdescriptors.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbfffcab588feb026cfecf117c482e48d8e4c144",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_send.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ab6e590f7338a4329853fc9b35a9d12585fc2c9",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_keypool.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e20118720dd1d359ad2d5cb23a3e0ac99ed4b5a",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_fundrawtransaction.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06af0cddbb925719691bf22da91dba09550efb9f",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_descriptor.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4100fac20e813dbc93ccaf4691b9b0ad82a093e0",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_createwallet.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff3f6def9a5805d9f6f488c0686c51c4dce65f55",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_bumpfee.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "003f2a01f63bcae4af66a794df431627904fb4df",
"body": null,
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in feature_notifications.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f988e6d6e643bc0dab9bc2e3d0598cab1c1521fc",
"body": "This avoids hardcoding xprvs and xpubs in the test.\n\nAlso use key's parent fingerprint and derivation path while creating descriptors\nso that all of it is self-documenting and not dependent on hardcoded values,\nmaking them easy to read and update.\n\nAlso use descsum_create function more to avoid hardcoding the descriptor\nchecksum.",
"is_bot": false,
"headline": "test: use ExtendedPrivateKey in wallet_importdescriptors.py",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-23T09:43:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "146b3adfaa19070ff88b202df865bb9fca4336b6",
"body": null,
"is_bot": false,
"headline": "doc: remove libevent",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96d7f55f1dfbad4ae4991b7154e5d916b00d4687",
"body": null,
"is_bot": false,
"headline": "vcpkg: remove libevent",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0443943dc03e9892937355b543eb410477aba135",
"body": null,
"is_bot": false,
"headline": "ci: remove libevent",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0ca249f3fc8a678855925a83d508073916e0f79",
"body": null,
"is_bot": false,
"headline": "depends: remove libevent",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35d2d0679782581cbbf05babc59f0f28858a9b72",
"body": "Also remove raii_event_tests.",
"is_bot": false,
"headline": "cmake: remove libevent",
"author_name": "fanquake",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b58eb6d514499300910ac76a42af5024297b346",
"body": "…om causing UB\n\nd6359937bfa41e166f098b53252dd14262fd8de5 validation: check invariants when inserting into m_blocks_unlinked (stratospher)\n0852925bd8d455618ec76c789a31bdeaada0da3a test/doc: remove misleading comment and improve tests (stratospher)\nca4a38028191c9695a0037180e4253e26e48f690 test: add co\n[…]\n/bitcoin/commit/d6359937bfa41e166f098b53252dd14262fd8de5)\n\nTree-SHA512: bb21adc2d92fe1865bbbcebf775a850ca3eccac6fe83d7bca10b78eee4c0abf782e44fa0ddfec9d9a70f42fa40bdc49b68a1d1b4905cdc371ba29117d3120619",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35070: validation: prevent FindMostWorkChain fr…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-23T08:25:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0cdd817a82a26be53efa6038dae85fceb0cf2248",
"body": null,
"is_bot": false,
"headline": "add release note",
"author_name": "Pol Espinasa",
"author_login": "polespinasa",
"committed_at": "2026-06-22T21:07:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "517d37ce3ebfe264f44f7b563ca29dfdb0891534",
"body": "Co-authored-by: w0xlt <woltx@protonmail.com>",
"is_bot": false,
"headline": "test: tests wallet migration with load_wallet disabled",
"author_name": "Pol Espinasa",
"author_login": "polespinasa",
"committed_at": "2026-06-22T21:07:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b98dd63da7b9b14a3655f00021cc5a35826ccc15",
"body": null,
"is_bot": false,
"headline": "rpc: Add load_wallet argument to migratewallet RPC",
"author_name": "Pol Espinasa",
"author_login": "polespinasa",
"committed_at": "2026-06-22T21:07:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4acd063ba6fbe32bf28babac052cbbfd1d965c56",
"body": "Loading the wallet after migrating is not a necessary step.\nBy making it optional pruned nodes can also migrate legacy wallets.\nAlso remove the migrated wallet from the list of wallets to load on startup.",
"is_bot": false,
"headline": "wallet: make loading the wallet after migrating optional",
"author_name": "Pol Espinasa",
"author_login": "polespinasa",
"committed_at": "2026-06-22T21:07:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d8e15dff015d3df8e87de63e650a5aee32ff12f",
"body": "b552f1713add4d14c8b940a8175b6bbe19bea846 ci: use warp docker buildkit cache (will)\n\nPull request description:\n\n This was inadvertently broken in #35441 when we dropped the runners job. Unfortunately GHA seems to continue just fine when this field is empty, so it wasn't noticed at runtime.\n\nACKs for\n[…]\n3dwards:\n ACK b552f1713add4d14c8b940a8175b6bbe19bea846\n\nTree-SHA512: 0bc61b42e94b0a73ef6026dea3dce27fdea611218936e585b5232fde358b4fab4728d59338b86c75affec80c11b6f1fada56ffb785999fabae0b01becb41268d",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35571: ci: use warp docker buildkit cache",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-22T15:04:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "33e3c7524ffb6deca39ac2a9b78dc4139b0caaf2",
"body": "…ds` harness\n\n48df0939e7250a2de8a0c336bc3ddbcbe0578812 fuzz: Remove unnecessary thread pool mutexes (marcofleon)\na4c3b003f8795babe603d5a4fabc474aacb8380a fuzz: Speed up dbwrapper_concurrent_reads harness (marcofleon)\n\nPull request description:\n\n Limiting how many read queries each worker executes s\n[…]\nrunoerg:\n ACK 48df0939e7250a2de8a0c336bc3ddbcbe0578812\n\nTree-SHA512: 24c35e13fa26790b36e5190283b78dd8511165d576841cb701f541a36c5b7c0a73f9bc265e71598a879fa1df9a9438e7841736f72b967214196fa6fe68569eff",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35521: fuzz: Speed up `dbwrapper_concurrent_rea…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-22T13:37:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1a3cfdf1b7ab2b55dbd0a4a4fa428b4e7d8bfa73",
"body": null,
"is_bot": false,
"headline": "fuzz: connman: cover AddLocalServices/RemoveLocalServices",
"author_name": "Bruno Garcia",
"author_login": "brunoerg",
"committed_at": "2026-06-22T13:31:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c507fb306342c4bd14ce1d50249aceb054e947ea",
"body": null,
"is_bot": false,
"headline": "fuzz: connman: add outbound-bytes invariants",
"author_name": "Bruno Garcia",
"author_login": "brunoerg",
"committed_at": "2026-06-22T13:31:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a6fce43ead13ad595caef5d398f2b0eb52b1d6a",
"body": "Co-authored-by: frankomosh <frankomosh197@gmail.com>",
"is_bot": false,
"headline": "fuzz: connman: add AddNode/RemoveAddedNode invariants",
"author_name": "Bruno Garcia",
"author_login": "brunoerg",
"committed_at": "2026-06-22T13:31:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c20859b5f0db428c293d4f29196854a506c3b06",
"body": "…ocket-handling implementation\n\n61020b36c5ff6b0d1e15e034d7c0c8b0fe9c6f8e doc: add release note for #35182 replace libevent HTTP server (Matthew Zipkin)\n39e9099da5992d55269baf00fd656892b17cc7b3 logging: deprecate libevent category (Matthew Zipkin)\n8c1eea0777c586ce58a500bbea509cd39e4f3507 http: remove\n[…]\ntack:\n re-ACK 61020b36c5ff6b0d1e15e034d7c0c8b0fe9c6f8e\n\nTree-SHA512: d39f782b9e6c7d67fdba5638fe9a1018b83062668c8b2ab0aa3fe363801f3c36a0ae97b8da0ea0395195e03a2c248a5d1511e5fa27c438c9bd7fca5c83d1ae4c",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35182: Replace libevent with our own HTTP and s…",
"author_name": "merge-script",
"author_login": "fanquake",
"committed_at": "2026-06-22T12:25:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "48df0939e7250a2de8a0c336bc3ddbcbe0578812",
"body": "Remove the `Mutex` from the `threadpool` and `dbwrapper_concurrent_reads`\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: Remove unnecessary thread pool mutexes",
"author_name": "marcofleon",
"author_login": "marcofleon",
"committed_at": "2026-06-22T11:11:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4c3b003f8795babe603d5a4fabc474aacb8380a",
"body": "Limit how many read queries each worker executes. This significantly\nspeeds up the test, as each worker runs >90% fewer (2000 to 128)\nexpensive LevelDB operations (like `IteratorSeek`) but still\nends up hitting the intended target code.\n\nRevert the `num_entries` max from 3000 back to 5000, as that didn't\nhave much effect on input speed and restores a bit of lost coverage.",
"is_bot": false,
"headline": "fuzz: Speed up dbwrapper_concurrent_reads harness",
"author_name": "marcofleon",
"author_login": "marcofleon",
"committed_at": "2026-06-22T11:11:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61020b36c5ff6b0d1e15e034d7c0c8b0fe9c6f8e",
"body": null,
"is_bot": false,
"headline": "doc: add release note for #35182 replace libevent HTTP server",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39e9099da5992d55269baf00fd656892b17cc7b3",
"body": "Creates logic to deprecate logging categories but still\n\"support\" them so the software doesn't quit with unknown category\non startup. Deprecated categories are always false and attempts\nto switch them are logged as warnings.",
"is_bot": false,
"headline": "logging: deprecate libevent category",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c1eea0777c586ce58a500bbea509cd39e4f3507",
"body": null,
"is_bot": false,
"headline": "http: remove libevent usage from this subsystem",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e427c227fa39cb0fd3e55bd36180650e2d42b273",
"body": null,
"is_bot": false,
"headline": "fuzz: switch http_libevent::HTTPRequest to http_bitcoin::HTTPRequest",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21c7542cf8841f4cf733578e27dda7e25e6bc81d",
"body": null,
"is_bot": false,
"headline": "http: switch servers from libevent to bitcoin",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbb8d1fb33ab771e66f03c3f220a41cd274f453f",
"body": null,
"is_bot": false,
"headline": "HTTPServer: disconnect after idle timeout (-rpcservertimeout)",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5f242eef3a1eb86760b694f83921f460046e004",
"body": null,
"is_bot": false,
"headline": "HTTPServer: implement control methods to match legacy API",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ca645c2e4da0b1b2e792520cf4c1949301e4ae9",
"body": "The original function was already naturally split into two chunks:\nFirst, we parse and validate the users' RPC configuration for IPs and\nports. Next we bind libevent's http server to the appropriate\nendpoints.\n\nThis commit splits these chunks into two separate functions, leaving\nthe argument parsing\n[…]\nnd moving the\nlibevent-specific binding into the http_libevent namespace.\n\nA future commit will implement http_bitcoin::HTTPBindAddresses to\nbind the validate list of endpoints by the new HTTP server.",
"is_bot": false,
"headline": "refactor: split HTTPBindAddresses into config parse and libevent setup",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fec6b6bca81214547117c8e005ae8197f573d633",
"body": "The original function is passed to libevent as a callback when HTTP\nrequests are received and processed. It wrapped the libevent request\nobject in a http_libevent::HTTPRequest and then handed that off to\nbitcoin for basic checks and finally dispatch to worker threads.\n\nIn this commit we split the fu\n[…]\nt maintains the logic of checking and dispatching.\n\nThis will be the merge point for http_libevent and http_bitcoin,\nwhere HTTPRequest objects from either namespace have the same\ndownstream lifecycle.",
"is_bot": false,
"headline": "refactor: split http_request_cb into libevent callback and dispatch",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f946ff5a0bb18796155315215b25ada398bec6fd",
"body": "These methods are called by http_request_cb() and are present in the\noriginal http_libevent::HTTPRequest.",
"is_bot": false,
"headline": "Add helper methods to HTTPRequest to match original API",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd11b5e01ba3cbc7242576e0eba044a7acb4d368",
"body": "This is a refactor to prepare for matching the API of HTTPRequest\ndefinitions in both namespaces http_bitcoin and http_libevent. In\nparticular, to provide a consistent return type for GetRequestMethod()\nin both classes.",
"is_bot": false,
"headline": "define HTTP request methods at module level outside of class",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ee7df988ef80d1b027ea21cc27e3c86da04aa55",
"body": "See https://www.rfc-editor.org/rfc/rfc7230#section-6.3.2\n\n> A server MAY process a sequence of pipelined requests in\n parallel if they all have safe methods (Section 4.2.1 of [RFC7231]),\n but it MUST send the corresponding responses in the same order that\n the requests were received.\n\nWe choose N\n[…]\n well as responded to in the order received.\nThis prevents race conditions where old state may get sent in response\nto requests that are very quick to process but were requested later on\nin the queue.",
"is_bot": false,
"headline": "HTTPServer: use a queue to pipeline requests from each connected client",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ef1b80a09c40c98f8095091040721bc42285b1c",
"body": null,
"is_bot": false,
"headline": "Allow http workers to send data optimistically as an optimization",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a69bb9e1e6de8a5fe2d080cecefa62c66d1bb432",
"body": null,
"is_bot": false,
"headline": "HTTPServer: disconnect clients",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:47:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cdf71998e554ed844c3e1e878bba25c090a7875e",
"body": "Sockets-touching bits copied and adapted from `CConnman::SocketSendData()`\n\nTesting this requires adding a new feature to the SocketTestingSetup,\nreturning the DynSock I/O pipes from the mock socket so the received\ndata can be checked.\n\nCo-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "HTTPServer: compose and send replies to connected clients",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6734bcdeff4e4b0ef6582ef44d77ef602c4451e3",
"body": null,
"is_bot": false,
"headline": "HTTPserver: support \"chunked\" Transfer-Encoding",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80e1cfe5a257c2e824a6527d05e8d1f9e7277789",
"body": "`SocketHandlerConnected()` adapted from CConnman\n\nTesting this requires adding a new feature to the SocketTestingSetup,\ninserting a \"request\" payload into the mock client that connects\nto us.\n\nThis commit also moves IOErrorIsPermanent() from sock.cpp to sock.h\nso it can be called from the socket handler in httpserver.cpp\n\nCo-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "HTTPServer: read requests from connected clients",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c5226ab96a6bdb5b921c8273d4ad8eb4c118fc2",
"body": "Socket handling methods are copied from CConnMan:\n\n`CConnman::GenerateWaitSockets()`\n`CConnman::SocketHandlerListening()`\n`CConnman::ThreadSocketHandler()` and `CConnman::SocketHandler()` are combined into ThreadSocketHandler()`.\n\nCo-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "HTTPServer: start an I/O loop in a new thread and accept connections",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ef4ebdc0c836f6c1c32389967adb58f0b9929fc",
"body": null,
"is_bot": false,
"headline": "http: Introduce HTTPRemoteClient class",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a85286c5c718f3cbbce322da8decd7f80e09e25b",
"body": "Co-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "HTTPServer: generate sequential Ids for each newly accepted connection",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a3aa1af2857618d2c7a93d4784cc4c89fc8e735",
"body": "AcceptConnection() is mostly copied from CConmann in net.cpp\nand then modernized.\n\nCo-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "HTTPServer: implement and test AcceptConnection()",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5bc018948f389559ccfaca128b07c9b17b3218b",
"body": "…ocket\n\nIntroduce a new low-level socket managing class `HTTPServer`.\n\nBindAndStartListening() was copied from CConnMan's BindListenPort()\nin net.cpp and modernized.\n\nUnit-test it with a new class `SocketTestingSetup` which mocks\n`CreateSock()` and will enable mock client I/O in future commits.\n\nCo-authored-by: Vasil Dimov <vd@FreeBSD.org>",
"is_bot": false,
"headline": "http: Introduce HTTPServer class and implement binding to listening s…",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9463e98781dc116fc7ffb8cb6d2b9467656ce8e7",
"body": "HTTP Request message:\nhttps://datatracker.ietf.org/doc/html/rfc1945#section-5\n\nRequest Line aka Control Line aka first line:\nhttps://datatracker.ietf.org/doc/html/rfc1945#section-5.1\n\nSee message_read_status() in libevent http.c for how\n`MORE_DATA_EXPECTED` is handled there",
"is_bot": false,
"headline": "http: Implement HTTPRequest class",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad50aa4a0fad25e659ef86fc61b733347e8e5f3c",
"body": "HTTP Response message:\nhttps://datatracker.ietf.org/doc/html/rfc1945#section-6\n\nStatus line (first line of response):\nhttps://datatracker.ietf.org/doc/html/rfc1945#section-6.1\n\nStatus code definitions:\nhttps://datatracker.ietf.org/doc/html/rfc1945#section-9",
"is_bot": false,
"headline": "http: Implement HTTPResponse class",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68b5d289d19c42de9bebf54a0555053d29721111",
"body": "see:\nhttps://www.rfc-editor.org/rfc/rfc2616#section-4.2\nhttps://www.rfc-editor.org/rfc/rfc7231#section-5\nhttps://www.rfc-editor.org/rfc/rfc7231#section-7\nhttps://httpwg.org/specs/rfc9111.html#header.field.definitions",
"is_bot": false,
"headline": "http: Implement HTTPHeaders class",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89c54ae4cbc8e58921551d5f1a90eb4683106ccb",
"body": "This commit is a no-op to isolate HTTP methods and objects that\ndepend on libevent. Following commits will add replacement objects\nand methods in a new namespace for testing and review before\nswitching over the server.",
"is_bot": false,
"headline": "http: enclose libevent-dependent code in a namespace",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5aa3629b489d3b3ad5e4356555c2fbc8713254ff",
"body": "The utility can not be opinionated about CR or SP on either end of a\nline it reads. That decision is up to the caller and in fact in the\ncase of HTTP should be allowed in some places and rejected in others.\n\nReplace TrimStringView() with more surgical operation.",
"is_bot": false,
"headline": "util/string: LineReader should only trim \\r or \\r\\n",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cdbb191b50affbc9ecb1c6af2ee9c1ceff6816a",
"body": "Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>",
"is_bot": false,
"headline": "util/string: use string_view in LineReader",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "881d4b6c75c5cd7953d4760336cc06d7a65aa701",
"body": null,
"is_bot": false,
"headline": "test: cover common HTTP attacks and common malformed requests",
"author_name": "Matthew Zipkin",
"author_login": "pinheadmz",
"committed_at": "2026-06-22T09:46:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08a25a7231341e7da54eae468d7411c2c85ced19",
"body": "394e473d42ba1383dfec45a3eafa8a73a09dbe8b coins: compact chainstate in background (Lőrinc)\naa021b26f39fd231b2a3aac5780d5113a4aea639 validation: randomly compact chainstate (Lőrinc)\nb10889d10752c5d5e4954af2959f7bdff47bd67c coins: test chainstate flush baseline (Lőrinc)\n\nPull request description:\n\n **\n[…]\nsedited:\n ACK 394e473d42ba1383dfec45a3eafa8a73a09dbe8b\n\nTree-SHA512: 536a298f86ca7d87a2dd5428354b05b693931c090c7a4afd4d09b95ce53e2bd8319e01c940489a1520d8cb1010a7ea9724d2c18d2e12887bd5ec70cb68c03517",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35465: coins: compact chainstate regularly",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-22T09:32:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27262a28841d7ab7d9f13f189feb4afe4aaa7ffd",
"body": "… to FakeSteadyClock\n\n855a3fee8829447ca580d01fb96bff8d4eaf30db scripted-diff: Rename SteadyClockContext to FakeSteadyClock (Hao Xu)\n\nPull request description:\n\n See: https://github.com/bitcoin/bitcoin/pull/35536#issuecomment-4715945494\n\n `SteadyClockContext` and `FakeNodeClock` are both LimitOne R\n[…]\nsedited:\n ACK 855a3fee8829447ca580d01fb96bff8d4eaf30db\n\nTree-SHA512: 72fd8dd3217d19f4b9f587e379a0aea2b7760ca6d61be6c363e7c06757cba40487df8b40cf3d62f9f9256fb4d0373610dd6f62c6e9ef3edde02265fc967a6bdf",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35559: scripted-diff: Rename SteadyClockContext…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-22T08:59:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9e6546c517cd8e97ca6f64bba812dec9257e0b89",
"body": "`feature_reindex.py` mines a long chain before restarting during reindex.\nBump its local RPC timeout to avoid client timeouts in parallel debug-mode runs.",
"is_bot": false,
"headline": "test: raise reindex mining RPC timeout",
"author_name": "Lőrinc",
"author_login": "l0rinc",
"committed_at": "2026-06-21T17:28:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea626c268add060c207809c5b22c0e11f284f232",
"body": "…cceed (take 2)\n\nfab2874269c865c9e8e2e347159fb17650efd83c lint: Require scripted-diff script to succeed (MarcoFalke)\n\nPull request description:\n\n Currently, scripted diffs may silently pass with errors.\n\n Fix this issue by calling the script from a Bash instance with error checking enabled: `bash \n[…]\nsedited:\n ACK fab2874269c865c9e8e2e347159fb17650efd83c\n\nTree-SHA512: e3e8167e150be45a096d4883057640eb5624456f21b134cfa901fe490e5afb192855e55a752cb6121399314f65db155544a60645a101c39a084a62de4af23298",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35560: lint: Require scripted-diff script to su…",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-21T13:47:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c0922f78af9e63a29b44efa08a9dfd810b418bb1",
"body": "8f0354995b627d81150aead40d412a5c39bd2a6d depends: latest config.guess & config.sub (fanquake)\n\nPull request description:\n\n Pull the latest versions from upstream.\n\nACKs for top commit:\n hebasto:\n ACK 8f0354995b627d81150aead40d412a5c39bd2a6d, verified using the upstream [repo](https://cgit.git.savannah.gnu.org/cgit/config.git).\n\nTree-SHA512: 6ea7ce70a7db614d32f0aea47006892766f6abb41e31fef25cadd4423a0f6e42f8500f03ea70a3990c2628ad1b534b7c52c19914289375f87289ca34349075b2",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35567: depends: latest config.guess & config.sub",
"author_name": "Hennadii Stepanov",
"author_login": "hebasto",
"committed_at": "2026-06-21T12:53:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b552f1713add4d14c8b940a8175b6bbe19bea846",
"body": "This was inadvertently broken in #35441",
"is_bot": false,
"headline": "ci: use warp docker buildkit cache",
"author_name": "will",
"author_login": "willcl-ark",
"committed_at": "2026-06-20T08:14:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a2523e901a6c7c876c8a0817601e77d83f394b9",
"body": "…d limits\n\n735b25519aad2d3c24345c2d6f69c30d1040f473 support: clamp RLIMIT_MEMLOCK to size_t (Sjors Provoost)\n8ab4b9fc856433ebcaaefb31524cb71ef8ff8089 init: clamp fd limits to int (Sjors Provoost)\n4afbabdcef86c095b19b3b42b70a2483db8cab4a Fix startup failure with RLIM_INFINITY fd limits (Sjors Provoos\n[…]\nnheadmz:\n ACK 735b25519aad2d3c24345c2d6f69c30d1040f473\n\nTree-SHA512: 0ce0292ecd61456bdec6943b06cbb9ecfc5180ee6dce850f8496ef54af22c1fae6ea473085202f5ba6f72e4dc51a29247620c9a0eae31e96658adc77b293129f",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34937: Fix startup failure with RLIM_INFINITY f…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-19T22:57:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5883ba77ead6ba8077dec5baf7499675af5f6456",
"body": "…licit result fields\n\n2447385f47a99e8a9c08c20ff98b7147fe08b7df rpc: remove unused RPCResult::Type::ELISION (satsfy (Renato Britto))\n7a851180058facf7824903cc46a1948beb944ed5 rpc: expand decodepsbt output script with explicit fields (satsfy (Renato Britto))\n88e2a6ae89a224f53422ec33734b3243f64d63c0 rpc\n[…]\nlcl-ark:\n ACK 2447385f47a99e8a9c08c20ff98b7147fe08b7df\n\nTree-SHA512: 8dc03c45c388ebdb4f8f1613af2576fc127a8d5425efe518cd0d0ed2439a38b2ed1236413471672c85f52ee22c4a17677c18fd4689bc6570496fc3af4cd4112f",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#34764: rpc: replace ELISION references with exp…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-19T22:19:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f6939fd13d502c27041cb0c45479d2618000c0ac",
"body": "1f3f0a4e2200dbf84a7ca0cae2b0073dfcb5013a Squashed 'src/secp256k1/' changes from 7262adb4b4..bd0287d650 (fanquake)\n\nPull request description:\n\n Includes:\n * https://github.com/bitcoin-core/secp256k1/pull/1846\n * https://github.com/bitcoin-core/secp256k1/pull/1848\n * https://github.com/bitcoin-cor\n[…]\nrewtoth:\n ACK 9caae506829db8a05e09e0606bc5d0cbc1bdc434\n\nTree-SHA512: 187e76d7f7ed603d81b7c355abfb184f37658fdb5109a2c78f72c615cdf862dfc9c3e2ff4556eb047d59348ba1a7030ca38342682c56dbfdb51610d2cc1de405",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35564: Update secp256k1 subtree to latest master",
"author_name": "merge-script",
"author_login": "sedited",
"committed_at": "2026-06-19T19:56:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "61c754ae994c8e1e1ddcd7f1dc028778d794efd9",
"body": "…letRescanReserver reserve function\n\n2818a171c0057d1775d4148b7d76b1fbbbdbb88a test: add abortscan unit test (Pol Espinasa)\nbc30e9516324d82bd8540a82544085553a58aabc wallet: move fAbortRescan reset into WalletRescanReserver reserve() (Pol Espinasa)\n\nPull request description:\n\n Follow-up of https://gi\n[…]\nnheadmz:\n ACK 2818a171c0057d1775d4148b7d76b1fbbbdbb88a\n\nTree-SHA512: 5b64b9a16a209dd145ccf7b2d7c3a7205038b3b214b02c3d9f1cbda75a6a1c9a41ad5c42cbeda43af6141793965613c47e44300d758149be9bfdf458e85a5520",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35512: wallet: move fAbortRescan reset into Wal…",
"author_name": "Ava Chow",
"author_login": "achow101",
"committed_at": "2026-06-19T19:44:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "794befd4b06dcace1adbdb15e65bba1667f9bc15",
"body": "…ng settings.json\n\n0654511e1b935d22fe6c88e3f5d5c7b336516222 util: Check write failures before renaming settings.json (Shrey)\n\nPull request description:\n\n This PR Fixes #35373.\n The error message was updated from: \"This is probably caused by disk corruption or a crash\" to: \"This is probably caused \n[…]\nmmit message and error message improved since last review\n\nTree-SHA512: d7b49860f2081a5a9d1d44917b0cf372a77f10cf21773c9b3291871c788a122ec5dde063fdf9e1052cf45b8d2667e15585b952e9f037e84f98fb41546bdd1fa9",
"is_bot": false,
"headline": "Merge bitcoin/bitcoin#35384: util: Check write failures before renami…",
"author_name": "Ryan Ofsky",
"author_login": "ryanofsky",
"committed_at": "2026-06-19T11:38:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d2a03d50acbf4bffc11048ef2cabb1b42ea78989",
"body": null,
"is_bot": false,
"headline": "test: add extendedkey.py unit tests by using BIP32 test vectors",
"author_name": "rkrux",
"author_login": "rkrux",
"committed_at": "2026-06-19T10:39:43Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 36,
"commits_last_year": 3267,
"latest_release_at": "2017-11-06T08:46:24Z",
"latest_release_tag": "v0.15.1",
"releases_from_tags": true,
"days_since_last_push": 26,
"active_weeks_last_year": 49,
"days_since_latest_release": 3184,
"mean_days_between_releases": 69.8
},
"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": 1,
"stars": 7,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2020-10-19",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_forks": 1
},
"star_history": null,
"open_issues_and_prs": 2
},
"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": 1996,
"oversized_source_files": 128,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [],
"dependencies": [],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 2,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 3
},
"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": 5355,
"avatar_url": "https://avatars.githubusercontent.com/u/863730?v=4"
},
{
"type": "User",
"login": "achow101",
"commits": 2431,
"avatar_url": "https://avatars.githubusercontent.com/u/3782274?v=4"
},
{
"type": "User",
"login": "sipa",
"commits": 2389,
"avatar_url": "https://avatars.githubusercontent.com/u/548488?v=4"
},
{
"type": "User",
"login": "hebasto",
"commits": 2196,
"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": 916,
"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.196
},
"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": "3c76bd435681ee2ebaa1f407ac23736d9c3b331b",
"ran_at": "2026-07-26T17:27:09Z",
"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-06-30T08:43:58Z",
"oldest_open_prs": [
{
"number": 4,
"created_at": "2020-08-31T19:26:54Z",
"last_comment_at": "2025-09-26T12:49:15Z",
"last_comment_author": "vasild"
},
{
"number": 5,
"created_at": "2020-08-31T19:29:59Z",
"last_comment_at": "2022-05-08T06:01:16Z",
"last_comment_author": "vasild"
}
],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/vasild/bitcoin",
"host": "github.com",
"name": "bitcoin",
"owner": "vasild"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"security": 47,
"vitality": 71,
"community": 19,
"governance": 53,
"engineering": 73
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 71,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 91,
"inputs": {
"commits_last_year": 3267,
"human_commit_share": 1,
"days_since_last_push": 26,
"active_weeks_last_year": 49
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 26 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "49/52 weeks with commits",
"points": 33.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 49
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "3267 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 3267
}
}
],
"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": "at_risk",
"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": 40,
"inputs": {
"releases_count": 36,
"latest_release_tag": "v0.15.1",
"releases_from_tags": true,
"days_since_latest_release": 3184,
"mean_days_between_releases": 69.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "36 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 36
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 3184 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "release_recency",
"params": {
"days": 3184
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~69.8 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 69.8
}
}
],
"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": 27,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 27 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 27
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 19,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"forks": 1,
"stars": 7,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "7 stars",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 7
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 1
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "2 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 2
}
}
],
"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": "moderate",
"name": "Sustainability & Governance",
"value": 53,
"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.196
},
"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 20% of commits",
"points": 18.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 20
}
}
],
"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": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 3
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "0/3 decided PRs merged",
"points": 0,
"status": "missed",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 0,
"decided": 3
}
}
],
"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": "moderate",
"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": 64,
"inputs": {
"followers": 274,
"owner_type": "User",
"is_verified": null,
"owner_login": "vasild",
"public_repos": 36,
"account_age_days": 5924
},
"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": "274 followers of vasild",
"points": 17.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 274,
"login": "vasild"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "36 public repos, account ~16 yr old",
"points": 23.4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 36
}
},
{
"code": "account_age_years",
"params": {
"years": 16
}
}
],
"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": [],
"has_wiki": true,
"homepage": "https://bitcoin.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://bitcoin.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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 47,
"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": "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": 10
},
"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.92,
"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": "92 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"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": 1996,
"oversized_source_files": 128
},
"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": "128/1996 source files over 60KB",
"points": 51.5,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1996,
"oversized": 128
}
}
],
"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",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-26T17:27:29.574615Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/vasild/bitcoin.svg",
"full_name": "vasild/bitcoin",
"license_state": "standard",
"license_spdx": "MIT"
}