公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-26 17:27 UTC

vasild / bitcoin

Bitcoin Core integration/staging tree

C++ · Python · CMIT★ 7 星标⑂ 1 复刻始于 2018年2月复刻在 GitHub 上查看 ↗

vasild/bitcoin 的健康指数为 100 分中的 54 分,处于「中等」区间。 其得分最高的类别是Engineering Quality(73/100),最低的是Community & Adoption(19/100)。 最近一次更新在 26 天前。 近期的大部分工作由 5 位贡献者完成。

54
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

54
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

Vasil Dimov个人账户
274 关注者36 个公开仓库始于 2010年5月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

71良好 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 26 天前
33.9/36提交节奏 — 52 周中有 49 周有提交
18/18提交量 — 最近一年 3,267 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year3,267
human_commit_share1
days_since_last_push26
active_weeks_last_year49

发布纪律

40存在风险
评分方式
16.2/27有发布版本 — 36 个版本标签(无 GitHub 发布版本)
0/36发布时效 — 最近一次发布版本于 3,184 天前
19.8/27发布节奏 — 约每 69.8 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count36
latest_release_tagv0.15.1
releases_from_tags
days_since_latest_release3,184
mean_days_between_releases69.8
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

19危急 · 占总体的 18%
评分方式
12.6/60星标 — 7 个星标
0/25复刻 — 1 个复刻
0/15关注者 — 2 位关注者
所用输入
forks1
stars7
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

25危急
评分方式
0/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

53中等 · 占总体的 24%
评分方式
45.9/54巴士系数 — 5 位贡献者贡献了半数提交
18.1/22.5提交分布 — 头号贡献者编写了 20% 的提交
13.5/13.5贡献者广度 — 100 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 17 contributing companies or organizations
所用输入
bus_factor5
contributors_sampled100
top_contributor_share0.196
评分方式
0/46.8议题解决 — 没有议题或无数据
0/38.3PR 接受 — 已裁定的 PR 中 0/3 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs3
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
17.5/25所有者影响力 — vasild 有 274 位关注者
23.4/25既往记录 — 36 个公开仓库,账户约 16 年
所用输入
followers274
owner_typeUser
is_verified
owner_loginvasild
public_repos36
account_age_days5,924
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。

工程质量

基础的工程与文档实践是否到位?

73良好 · 占总体的 20%

工程实践

88优秀
评分方式
24/24CI 工作流 — 1 个工作流
24/24存在测试
16/16Linter 配置 — ruff.toml
0/9.6Pre-commit 钩子
6.4/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 无数据
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
已排除计分(无数据或不适用):OpenSSF Scorecard:CI-Tests。 其余权重已重新归一化。

文档

50中等
评分方式
0/30README
25/25文档目录
15/15文档 / 主页站点 — https://bitcoin.org/en/download
0/10仓库描述
0/10主题标签
10/10Wiki
所用输入
topics
has_wiki
homepagehttps://bitcoin.org/en/download
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

47存在风险 · 占总体的 16%

安全态势

47存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 17 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4.7
已排除计分(无数据或不适用):ci_tests, packaging, signed_releases。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

61中等 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 92 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.92
agent_instruction_files
agent_instruction_max_bytes
评分方式
18/18一条命令的引导启动 — depends/Makefile
22/22自动化测试
11/11Lint / 格式化配置 — ruff.toml
11/11静态类型检查 — C++(静态类型)
10/10可复现环境 — Nix, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesCargo.lock
has_dockerfile
typed_language
bootstrap_filesdepends/Makefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestscontrib/devtools/deterministic-fuzz-coverage/Cargo.toml, contrib/devtools/deterministic-unittest-coverage/Cargo.toml, test/lint/test_runner/Cargo.toml
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — C++(静态类型)
51.5/55可控的文件大小 — 采样的 1,996 个源文件中有 128 个超过 60KB
所用输入
primary_languageC++
largest_source_bytes2,409,168
source_files_sampled1,996
oversized_source_files128

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — example, examples
所用输入
example_dirsexample, examples
has_mcp_signal
api_schema_files

关键数据

7GitHub 星标
100贡献者
3,267最近 12 个月提交数
26距最近推送天数
36发布版本数
5巴士系数(bus factor)
0开放议题
软件包生态系统数

数据采集警告

  • 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

更多细节

OpenSSF Scorecard 4.7 / 10
4.7综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-26 17:27 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 17 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

原始 JSON 报告 机器可读
{
  "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"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计.