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

stickies-v / bitcoin

Bitcoin Core integration/staging tree

C++ · Python · CMIT★ 5 星标⑂ 1 复刻始于 2021年11月复刻在 GitHub 上查看 ↗

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

54
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

stickies-v个人账户
116 关注者28 个公开仓库始于 2020年7月

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

按类别列示的指标

活力

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

68中等 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 16 天前
29.8/36提交节奏 — 52 周中有 43 周有提交
18/18提交量 — 最近一年 2,739 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year2,739
human_commit_share1
days_since_last_push16
active_weeks_last_year43

发布纪律

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

社区与采用

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

17危急 · 占总体的 18%
评分方式
9.8/60星标 — 5 个星标
0/25复刻 — 1 个复刻
0/15关注者 — 2 位关注者
所用输入
forks1
stars5
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

可持续性与治理

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

59中等 · 占总体的 24%
评分方式
45.9/54巴士系数 — 5 位贡献者贡献了半数提交
18/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.198
评分方式
0/46.8议题解决 — 没有议题或无数据
12.8/38.3PR 接受 — 已裁定的 PR 中 1/3 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs2
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
14.9/25所有者影响力 — stickies-v 有 116 位关注者
22.6/25既往记录 — 28 个公开仓库,账户约 5 年
所用输入
followers116
owner_typeUser
is_verified
owner_loginstickies-v
public_repos28
account_age_days2,186
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。

工程质量

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

69中等 · 占总体的 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。 其余权重已重新归一化。

文档

40存在风险
评分方式
0/30README
25/25文档目录
15/15文档 / 主页站点 — https://bitcoincore.org/en/download
0/10仓库描述
0/10主题标签
0/10Wiki
所用输入
topics
has_wiki
homepagehttps://bitcoincore.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 次人类提交中有 90 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.9
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,986 个源文件中有 128 个超过 60KB
所用输入
primary_languageC++
largest_source_bytes2,409,168
source_files_sampled1,986
oversized_source_files128

机器可读接口

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

关键数据

5GitHub 星标
100贡献者
2,739最近 12 个月提交数
16距最近推送天数
30发布版本数
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:28 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": 307567,
      "has_wiki": false,
      "homepage": "https://bitcoincore.org/en/download",
      "languages": {
        "C": 2658873,
        "M4": 55007,
        "C++": 14279093,
        "Nix": 3651,
        "HTML": 21831,
        "Rust": 41211,
        "Sage": 59880,
        "CMake": 275996,
        "Shell": 190048,
        "Python": 4171250,
        "Scheme": 18316,
        "Assembly": 28405,
        "Makefile": 109214,
        "Dockerfile": 5092,
        "Cap'n Proto": 14451,
        "Objective-C++": 5506
      },
      "pushed_at": "2026-07-10T14:37:29Z",
      "created_at": "2021-11-24T22:26:41Z",
      "owner_type": "User",
      "updated_at": "2026-06-22T06:07:49Z",
      "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": null,
      "type": "User",
      "login": "stickies-v",
      "company": null,
      "location": "London, UK",
      "followers": 116,
      "avatar_url": "https://avatars.githubusercontent.com/u/69010457?v=4",
      "created_at": "2020-07-30T17:31:04Z",
      "is_verified": null,
      "public_repos": 28,
      "account_age_days": 2186
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.21.2",
          "kind": "patch",
          "published_at": "2021-09-23T10:07:49Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2021-04-29T19:31:20Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2021-01-13T21:52:34Z"
        },
        {
          "tag": "v0.20.2",
          "kind": "patch",
          "published_at": "2021-10-18T12:41:02Z"
        },
        {
          "tag": "v0.20.1",
          "kind": "patch",
          "published_at": "2020-07-31T12:02:21Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2020-06-02T07:43:04Z"
        },
        {
          "tag": "v0.19.2",
          "kind": "patch",
          "published_at": "2021-01-07T18:57:57Z"
        },
        {
          "tag": "v0.19.1",
          "kind": "patch",
          "published_at": "2020-03-04T12:14:49Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2019-11-08T20:15:52Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2019-08-02T20:33:05Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2019-04-30T11:52:08Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2019-09-14T08:54:07Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2018-12-06T23:29:45Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2018-10-01T10:04:33Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2018-09-17T23:55:20Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2018-07-20T12:54:20Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2018-06-13T12:32:11Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2018-02-22T19:20:48Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2018-09-19T11:49:47Z"
        },
        {
          "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.3",
          "kind": "patch",
          "published_at": "2018-09-20T16:32:52Z"
        },
        {
          "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.11.3",
          "kind": "patch",
          "published_at": "2017-03-09T19:49:36Z"
        },
        {
          "tag": "v0.10.5",
          "kind": "patch",
          "published_at": "2017-03-09T19:48:56Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b2a3ca3df901dcc19b07f7dcf3115d8f7835b931",
          "body": "b6c367044288f83ab61c1a77ad34c33adf39ecf6 i2p: clean up SAM error logging (takeshikurosawaa)\n\nPull request description:\n\n  Clean up the I2P SAM error path.\n\n  `SESSION CREATE` may contain the private key, so the generic SAM reply\n  error path now reports the redacted request text instead of the full\n\n[…]\n vasild:\n    ACK b6c367044288f83ab61c1a77ad34c33adf39ecf6\n\nTree-SHA512: 204c8b64c6d3dd2f94f92cdc6d3daefd7773c42066984b9da859ebc2912c2ed38079d9e82a2d1f09d8d720750047114a80189e688929d7a0af5da2c2ee4a88da",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35117: i2p: clean up SESSION CREATE error logging",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-18T13:19:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7802e578c3f1e9a5d9b57fb003349d0e032bb43b",
          "body": "…hts, drop include_dummy_extranonce\n\n8544537f41df568e6e1cb94eeab9e699b9190427 mining: drop unused include_dummy_extranonce option (Sjors Provoost)\n58eeab790d9825a777f907e3e912a2da78cbc76d mining: only pad with OP_0 at heights <= 16 (Sjors Provoost)\n00d22328b0560bf9773417495123ae68bb89e4d1 mining: pa\n[…]\nited:\n    Re-ACK 8544537f41df568e6e1cb94eeab9e699b9190427\n\nTree-SHA512: a01d48842bf4bcc1a9c51a89ef9d750766db7d04edb4dcd6b3a8bf195c6b4fa07445256a49367ff0db00ab489a52a3d7ff6a5c3ab9290ecb1fcb82f532552e9b",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34860: mining: always pad scriptSig at low heig…",
          "author_name": "Ryan Ofsky",
          "author_login": "ryanofsky",
          "committed_at": "2026-05-17T17:26:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed1795aa17205db6ac15fa7ea1645357740b26ac",
          "body": "096bb0b5c05965222c31d84fe96900157187f89d bench: add benchmark for GetMappedAS() (0xb10c)\n\nPull request description:\n\n  With #28792 merged, we can use the embedded ASMap file to benchmark the IP -> ASN lookups. Before, this would have been cumbersome as it required having a real, external ASMap file.\n[…]\nchow101:\n    ACK 096bb0b5c05965222c31d84fe96900157187f89d\n\nTree-SHA512: 417427fd546fe7ec0903dde6f1a6557479a2e353eaf26be61dacc0031adae1a9970263b143fe9e2b83f489da01031cc83eff8e11ccedb00f5852e44c40189da2",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35285: bench: add benchmark for GetMappedAS()",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-15T23:59:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "379b9fbf036e2f214c4fce2a1ba086def4abac65",
          "body": "…PartialSig}` functions to `musig.{h,cpp}` module\n\n8ba5f68b1df99350aa037a644041034cf46842dc refactor, key: move `CreateMuSig2PartialSig` to `musig.{h,cpp}` module (Sebastian Falbesoner)\nd087f266fc24145e3a34a9f2e8f08c583f806aad refactor, key: move `CreateMuSig2Nonce` to `musig.{h,cpp}` module (Sebast\n[…]\n furszy:\n    ACK 8ba5f68b1df99350aa037a644041034cf46842dc\n\nTree-SHA512: 95fcaa5d7a09037a0dce0053b8c640a7372a1251a2a3615c565f4dacc5aad5cf0ee8bfc43aa0d0def628465c16330d69f6ea9fcc07bbadc971863248f60d1878",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34225: refactor, key: move `CreateMuSig2{Nonce,…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-15T23:42:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "096bb0b5c05965222c31d84fe96900157187f89d",
          "body": "With #28792 merged, we can use the embedded ASMap file to benchmark\nthe IP -> ASN lookups. Before, this would have been cumbersome as it\nrequired having a real, external ASMap file. We want to benchmark\nagainst a real file, as a smaller test file has significantly faster\nlookups.\n\nThe benchmarks cov\n[…]\n`\n|               65.19 |       15,339,680.04 |    0.1% |      5.51 | `ASMapGetMappedASUnmappedv6`\n```\n\nCo-authored-by: Fabian Jahr <fjahr@protonmail.com>\nCo-authored-by: Lőrinc <pap.lorinc@gmail.com>",
          "is_bot": false,
          "headline": "bench: add benchmark for GetMappedAS()",
          "author_name": "0xb10c",
          "author_login": "0xB10C",
          "committed_at": "2026-05-15T13:11:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6c367044288f83ab61c1a77ad34c33adf39ecf6",
          "body": "SESSION CREATE requests can contain the I2P private key. Keep using the redacted request text in error messages, and avoid echoing raw SAM replies in the generic reply error path.\n\nThis keeps the error useful while avoiding logging either the private-key-bearing request or unescaped router-controlled reply bytes. No network behavior change is intended.",
          "is_bot": false,
          "headline": "i2p: clean up SAM error logging",
          "author_name": "takeshikurosawaa",
          "author_login": "kenji-yamam0to",
          "committed_at": "2026-05-15T12:48:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddb94fd3e1061c465e425629d6c7d4b292301da5",
          "body": "004a7e3cfbc5b2118536651d2201cf8b72c87736 fuzz: Fix txorphan timeout by limiting block weight (marcofleon)\n\nPull request description:\n\n  The `EraseForBlock` branch in the `txorphan` harness could produce a block with 1000 transactions in it, each with potentially up to 200,000 inputs, resulting in wa\n[…]\nsedited:\n    ACK 004a7e3cfbc5b2118536651d2201cf8b72c87736\n\nTree-SHA512: 465504402358e1bed629104b21e05301139f1590884de21e77d566a45e422eef6d4380c5714692f33f5398e4e299b8c9f84b82f58c56a98e410c5c841184aee5",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35289: fuzz: Fix timeout in `txorphan`",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-14T15:25:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3cab711d69572431af78b0071fb721496f0241d7",
          "body": "…to silence DEBUG_LOCKORDER\n\n801d36f55b6d421f26d2376327699a04bd22e602 fuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDER (Eugene Siegel)\n\nPull request description:\n\n  DEBUG_LOCKORDER was reporting a false positive deadlock with the cmpctblock fuzz harness when using ImmediateTaskRunn\n[…]\nsedited:\n    ACK 801d36f55b6d421f26d2376327699a04bd22e602\n\nTree-SHA512: 5e1f27354c484a90ffd74a1a11e5fed68d7b38d95c06dd39529217f07d535eb9a5b7befb42b2829d79c52b5eb43542bd1079c81d6eb0e56476352ffe98e0177e",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35284: fuzz: use ImmediateBackgroundTaskRunner …",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-14T12:21:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "004a7e3cfbc5b2118536651d2201cf8b72c87736",
          "body": null,
          "is_bot": false,
          "headline": "fuzz: Fix txorphan timeout by limiting block weight",
          "author_name": "marcofleon",
          "author_login": "marcofleon",
          "committed_at": "2026-05-14T11:32:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cad5f5604582eac95bcfbf08cca8af1c186c36eb",
          "body": "…to wallets via new `unused(KEY)` descriptor\n\na39cc16b434de7f2d1a7098e4526b7d3e82930be doc: Release note for addhdkey (Ava Chow)\n89b9a01b4ea6355c1ecacb1d42d85252cfcb2a77 wallet, rpc: Disallow importing unused() to wallets without privkeys (Ava Chow)\n35bbee63746b567c867bb6d2c3db6f6670286826 wallet, r\n[…]\nux:\n    lgtm ACK a39cc16b434de7f2d1a7098e4526b7d3e82930be\n\nTree-SHA512: c1288c792ab01ca2eaddd24b0e7d11c259cd59e79042465d0d1eb656fd559c1200dc19750b4d84acc762b5b599935a06df214c18226e662087842ea91ec3011b",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#29136: wallet: `addhdkey` RPC to add just keys …",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-14T09:40:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9961229360cbf34ab114b831341e7760a58a4edd",
          "body": "…nmergeable transactions\n\n6d86184a8bcc34186d217cc7cfbf7acc21af7ca4 rpc: combinerawtransaction now rejects unmergeable transactions (Adam Andrews)\n\nPull request description:\n\n  Previously, combinerawtransaction would silently return the first tx when asked to combine unrelated txs. Now, it will check\n[…]\nl/31298/commits/6d86184a8bcc34186d217cc7cfbf7acc21af7ca4)\n\nTree-SHA512: 5caf983c5ab618a000f40b9ad698439d3e6217ec2dc593740443f47d90f8804a895f3054dd29bbcecdb48a61992b0d0afda7ec89591d768a44918648bbb6e20d",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#31298: rpc: combinerawtransaction now rejects u…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-13T23:07:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c680cfe343647f36f97c5ab1d70ecf6981cd1d75",
          "body": "…hain scanning methods\n\ndc84a3101430cdc0353f610835966f4e4942ff03 wallet: remove fUpdate argument from AddToWalletIfInvolvingMe (rkrux)\n94845df073abfcb4a65f6f058a4de5671327a404 wallet: remove update_tx argument from SyncTransaction (rkrux)\n6e796e1f473c57eae356f1e6fa508958113eaf09 wallet: remove fUpda\n[…]\n code review ACK dc84a3101430cdc0353f610835966f4e4942ff03\n\nTree-SHA512: dfee793c88cc94d4a5b554e29710133ec4ad5e49455413245c7d7004ef71b618b0b2f821fa085415c34d80aeccd182c98e55223d84afbe8b408f64acac0571bb",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35123: wallet: remove outdated arguments from c…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-13T21:34:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a145fa881a2705a7bed4fe9c6dad589eb1a238d1",
          "body": "…ffers\n\n032223f403d320c3c47c7d5932e333f306efcdc3 dbwrapper: reuse iterator scratch stream (Lőrinc)\n7403c0f907df694af8c9ee7d43dc65041242ca21 dbwrapper: guard `CDBBatch` scratch streams (Lőrinc)\ncb1ab0a716802dae31c395691c4b2f3e4e5d4cb7 test: cover repeated dbwrapper stream use (Lőrinc)\n31ce729b28ec7b1\n[…]\nsedited:\n    ACK 032223f403d320c3c47c7d5932e333f306efcdc3\n\nTree-SHA512: 6ed51d1a492ca216108b10c01668b01f986260641714951da1d282f1dacf87f0df2b312108f24c06151d3b81eaa4ca6eb4e9ab4e2d829346b0e8f07d0c569a1e",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35156: dbwrapper: reuse scratch `DataStream` bu…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-13T21:27:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04003e1fa3754b7557255d82c9b6d7ce309b11c8",
          "body": "… build_fuzz_nosan dir\n\n0065f354a7e9435fbc64f2bdc7b2b695df90cf4c doc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dir (ImMike)\n\nPull request description:\n\n  Adds a clarifying note next to the first mention of the `libfuzzer-nosan` preset in the Quickstart, pointing out that it uses a differ\n[…]\nsedited:\n    ACK 0065f354a7e9435fbc64f2bdc7b2b695df90cf4c\n\nTree-SHA512: d73901112d259cec58746dff50fe3f9409e5b9826f0759f45478fe039bca851eb163036c60bdb215bfc66be79428b790742bbe8bc32b1ceaa2d6f80c17faf6d0",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35274: doc: clarify libfuzzer-nosan preset uses…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-13T18:59:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5309c90542276f5357a75f0335cad949ae515d42",
          "body": "…guides\n\nca93ab808c488324990eb91ed8297a37dd10d580 doc: mention -DWITH_ZMQ=ON in BSD build guides (junbyjun1238)\n\nPull request description:\n\n  The BSD build guides currently state:\n\n  > If the package is installed, support will be compiled in.\n\n  Since `WITH_ZMQ` defaults to `OFF`, this is inaccurate\n[…]\nsedited:\n    ACK ca93ab808c488324990eb91ed8297a37dd10d580\n\nTree-SHA512: d07b1b9748d8b6aa555c992608f8659b7e93d6587bbbb2170352342003e90a81592ddfa2abf3a26b8ebf1341142d8628cfc3faba0c4759655a91446afa5fc22a",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35283: doc: mention -DWITH_ZMQ=ON in BSD build …",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-13T18:56:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8544537f41df568e6e1cb94eeab9e699b9190427",
          "body": "The previous commit made CreateNewBlock() ignore the\ninclude_dummy_extranonce flag (OP_0 is now appended only at heights\n<= 16 to satisfy bad-cb-length, regardless of caller-supplied options).\n\nRemove the now-unused field from BlockCreateOptions and clean up all\nthe call sites that still set it (RPC, bench, fuzz, test setups).",
          "is_bot": false,
          "headline": "mining: drop unused include_dummy_extranonce option",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-13T16:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58eeab790d9825a777f907e3e912a2da78cbc76d",
          "body": "Drop the include_dummy_extranonce branch from the OP_0 padding\ncondition in CreateNewBlock(), so that the dummy extraNonce is\nonly appended when consensus actually requires it (heights <= 16,\nwhere the BIP34 height push alone would yield a 1-byte scriptSig\nand trigger bad-cb-length).\n\nThe include_du\n[…]\naf6a55448c003b3f7f3021955fbb351caa\n  - case 4: the corruption byte is swapped from \\x82 to \\x83\n            because \\x82 happened to be the actual value at that\n            offset in the new snapshot.",
          "is_bot": false,
          "headline": "mining: only pad with OP_0 at heights <= 16",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-13T16:27:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00d22328b0560bf9773417495123ae68bb89e4d1",
          "body": "Since #32420, createNewBlock has thrown `bad-cb-length` errors when called at\nlow block heights because `OP_0` padding stopped being added to coinbase\ntransactions. (#32420 did add an `include_dummy_extranonce` option which could\nbypass this, but it was not exposed to IPC clients.) Fix the problem b\n[…]\n IPC clients could never set\nthe option to true, and are expected to add their own nonces in any case.\n\nThis also improves documentation about the `script_sig_prefix` field and\n`getCoinbaseTx` method.",
          "is_bot": false,
          "headline": "mining: pad coinbase to fix createNewBlock at heights <=16",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-13T16:27:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "801d36f55b6d421f26d2376327699a04bd22e602",
          "body": "DEBUG_LOCKORDER was reporting a false positive deadlock with the\ncmpctblock fuzz harness when using ImmediateTaskRunner. Since it is\nsingle-threaded, ImmediateTaskRunner callbacks added LockOrders that\ncould never happen outside of a fuzz test.\n\nFirst a block would get connected:\n* LOCK(mempool.cs)\n\n[…]\n positive deadlock. Normally, the BlockConnected\ncallback would run in a different thread and no deadlock is reported.\n\nFix this by launching a thread that runs the callback and is\nimmediately joined.",
          "is_bot": false,
          "headline": "fuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDER",
          "author_name": "Eugene Siegel",
          "author_login": "Crypt-iQ",
          "committed_at": "2026-05-13T16:00:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca93ab808c488324990eb91ed8297a37dd10d580",
          "body": "The FreeBSD, NetBSD, and OpenBSD build guides state that ZMQ support is compiled in when the package is installed. Since WITH_ZMQ defaults to OFF, update the wording to mention the required CMake option.",
          "is_bot": false,
          "headline": "doc: mention -DWITH_ZMQ=ON in BSD build guides",
          "author_name": "junbyjun1238",
          "author_login": "junbyjun1238",
          "committed_at": "2026-05-13T15:30:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "605ff37403f0b50c5664bb4e2d6eaf84022d53e4",
          "body": "On new regtest / signet chains (heights <= 16), createBlock() fails\ninternally with bad-cb-length. Since mining.capnp does not expose\ninclude_dummy_extranonce, IPC clients can't work around this.\n\nAdd a functional test to illustrate this issue and use RPC to\nwork around it. The next commit introduces a fix.",
          "is_bot": false,
          "headline": "test: bad-cb-length for createNewBlock() at low heights",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-13T14:44:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1966621b76885257b4b4e44aab4712e9f84313e6",
          "body": "Needed in a later commit to correctly derive the BIP34 prefix\nfor heights <= 16.\n\nAdd a padding parameter to script_BIP34_coinbase_height() that\ncontrols whether the OP_0 dummy extranonce is appended for\nheights <= 16.\n\nUse this helper with padding=False in the IPC mining test's\nbuild_coinbase_test().",
          "is_bot": false,
          "headline": "test: refactor IPC mining test to use script_BIP34_coinbase_height",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-13T14:43:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ba5f68b1df99350aa037a644041034cf46842dc",
          "body": "Compared to `CreateMuSig2Nonce`, creating a partial signature\nhas a stronger link to the secret key used, but for consistency\nreasons it still makes sense to move all functionality that call\nthe secp256k1 musig API functions to the `musig.{h,cpp}` module\nfor consistency.\n\nCan be reviewed via the git option `--color-moved=dimmed-zebra`.",
          "is_bot": false,
          "headline": "refactor, key: move `CreateMuSig2PartialSig` to `musig.{h,cpp}` module",
          "author_name": "Sebastian Falbesoner",
          "author_login": "theStack",
          "committed_at": "2026-05-13T14:17:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d087f266fc24145e3a34a9f2e8f08c583f806aad",
          "body": "Nonce creation is mainly derived by randomness, and the secret\nkey merely serves as (optional) additional data for increasing\nmisuse-resistance, rather than being a central part that would\njustify an own CKey method, so move it to the musig.cpp module.\n\nCan be reviewed via the git option `--color-moved=dimmed-zebra`.",
          "is_bot": false,
          "headline": "refactor, key: move `CreateMuSig2Nonce` to `musig.{h,cpp}` module",
          "author_name": "Sebastian Falbesoner",
          "author_login": "theStack",
          "committed_at": "2026-05-13T14:17:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f36d89f4363a25f7948a0f7096201ef8e15045d8",
          "body": "This is needed in order to move the `CreateMuSig2{Nonce,PartialSig}`\nfunctions to the musig.cpp modules, see next two commits.",
          "is_bot": false,
          "headline": "key: add `GetSecp256k1SignContext` access function",
          "author_name": "w0xlt",
          "author_login": "w0xlt",
          "committed_at": "2026-05-13T14:01:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0065f354a7e9435fbc64f2bdc7b2b695df90cf4c",
          "body": "The fuzzing quickstart documents the libfuzzer preset with build_fuzz\nas the build directory, then mentions libfuzzer-nosan as an alternative\nwithout noting that this preset uses a different binary directory\n(build_fuzz_nosan, per CMakePresets.json line 54). A reader following\nthe quickstart with --preset=libfuzzer-nosan and then running\n'cmake --build build_fuzz' as shown will operate against the wrong\n(or empty) directory.\n\nAdd a clarifying note at the first mention in the Quickstart.",
          "is_bot": false,
          "headline": "doc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dir",
          "author_name": "ImMike",
          "author_login": "ImMike",
          "committed_at": "2026-05-13T12:49:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82733e61deea24cfd344aed36020675a15cc672e",
          "body": "…ter checks\n\nfa9c919678c0d4926ff735eecf12562d99a7e691 refactor: Use ignore-list over verbose select-list (MarcoFalke)\nfa9b01adecce7d2e2f0091a363bcf98cf5d5c378 ci: Enable ruff ambiguous-unicode-character checks (MarcoFalke)\n\nPull request description:\n\n  Ambiguous unicode chars are unused and confusin\n[…]\nlcl-ark:\n    ACK fa9c919678c0d4926ff735eecf12562d99a7e691\n\nTree-SHA512: de226ec2feaf65a0a8b15606708cc390296be4492f41221f8a49f034b16e8fb62125342c6993f9d5c76bd4ae2db7343851b252a1b9140e27d6777f19a0b1605e",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35277: ci: Enable ruff ambiguous-unicode-charac…",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-13T11:19:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe2bb43e437b5a1627a1c7e1c378dc43d31717d2",
          "body": "…bt()\n\n701bc2dc02f73a10498ecf70c5d3523e0bb6b953 contrib: Fix NameError in signet miner gbt() (Torkel Rogstad)\n\nPull request description:\n\n  The logging.warning call referenced `bci[\"bestblockhash\"]`, a variable from the calling scope `do_generate()` that is not available inside the `Generate.gbt()` \n[…]\nsedited:\n    ACK 701bc2dc02f73a10498ecf70c5d3523e0bb6b953\n\nTree-SHA512: 53764db954dd40b68d2f92279fd609732402fdbac4a1838aeee81d366b2b7fbc8da86b07f6f05cee62cb8ecdc514f6e0af1e59c65380eec38cbeaa58ec3c10ed",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35044: contrib: Fix NameError in signet miner g…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-13T10:34:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa9c919678c0d4926ff735eecf12562d99a7e691",
          "body": "This refactor makes the ruff.toml easier to read, because it lists the\nignored checks instead of having to enumerate all checks to select in a\nlarge collection of rules.",
          "is_bot": false,
          "headline": "refactor: Use ignore-list over verbose select-list",
          "author_name": "MarcoFalke",
          "author_login": null,
          "committed_at": "2026-05-13T10:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa9b01adecce7d2e2f0091a363bcf98cf5d5c378",
          "body": null,
          "is_bot": false,
          "headline": "ci: Enable ruff ambiguous-unicode-character checks",
          "author_name": "MarcoFalke",
          "author_login": null,
          "committed_at": "2026-05-13T08:33:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09a9bb3536718d0dffa6f797ddff907df6ef94f9",
          "body": "2424e5283672e10bc45cdbca1a8851308716b50c lint: doc: detail lint tool install methods (will)\n5fefa5a654e2a1146c8abc9673e72d7bcbf2f757 Don't pin Python patch version (Sjors Provoost)\nfd15b55c2ef607525d45f26ab3e7f3fc600e29af lint: use requirements.txt (will)\n5f4d3383daa064d188ef8c6b1d9adbad3a67bcb6 lin\n[…]\nsedited:\n    ACK 2424e5283672e10bc45cdbca1a8851308716b50c\n\nTree-SHA512: 32ef989c1e241cebe5f13da10abd23f6f63306591fd1f81880d688b886082bca17987591dc592c41fbb72278eba57b3cc6e786de7cfa80eb490ab34465d0119b",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34547: lint: modernise lint tooling",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-13T08:27:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "10ca73c02cbff59f2134c0c7da3b8d0a7e727475",
          "body": "ac1ccc5bd912bd8ffa9816513b3129fa3d802aad build: Add CTAD feature check (Pol Espinasa)\n9f273f1c1c51d44db455dc7a655825c0692ad65d build: Add path to doc recommended versions for CLANG, GCC and MSVC (Pol Espinasa)\n\nPull request description:\n\n  Adds a compiler features check. If failed, it returns a fata\n[…]\nmpiler versions, and glad this PR is in better shape now.\n\nTree-SHA512: 15a12f56016846427ed8273406c3e9a52a6435bf7033c8fef82bb0e6c9fd75d40a62c79d33f9dd6da8717500f21a629da07620f160b3d43368dd7579f773b4bc",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34580: build: Add a compiler minimum feature check",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-11T22:29:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1af8e0c4e895ebd159304ed86ac059bebeced1f8",
          "body": "…eployments.taproot\n\nf24a7b5f759920f62db1a131a9a9d31408edd0b2 doc: recommend script_flags instead of deployments.taproot (Sjors Provoost)\n\nPull request description:\n\n  #26201 removed `taproot` from `getdeploymentinfo` (not yet in a release, slated for v32), which it turns out Lnd relies on: https://\n[…]\nsedited:\n    ACK f24a7b5f759920f62db1a131a9a9d31408edd0b2\n\nTree-SHA512: 5c21300ce3140eb1dd122e007b2f2cfafa3de83db4fb7c699312d6886d4c8fea56d9602390c1931fc640bf9364b2274dde85b38da4957311ddc07721cbc924a7",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35183: doc: recommend script_flags instead of d…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-11T09:52:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f24a7b5f759920f62db1a131a9a9d31408edd0b2",
          "body": "Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>",
          "is_bot": false,
          "headline": "doc: recommend script_flags instead of deployments.taproot",
          "author_name": "Sjors Provoost",
          "author_login": "Sjors",
          "committed_at": "2026-05-11T09:30:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccbd00ab87c09779e9edc589af6df5c967687a2f",
          "body": "…gmas\n\nd084bc88bebe75484e319e0cdbf72a656edebfa3 doc: clarify IWYU workflow (Lőrinc)\n7c7cec45678347c9793fd6bc1d3082b1a5e22c57 ci: update IWYU patch reference (Lőrinc)\n\nPull request description:\n\n  ### Problem\n\n  This was prompted by https://github.com/bitcoin/bitcoin/pull/34435#discussion_r3123255248\n[…]\nsedited:\n    ACK d084bc88bebe75484e319e0cdbf72a656edebfa3\n\nTree-SHA512: 0aac42d468a1fdfa9f4a3856372e05fb43ec9f0973aeb3a4194fff948fc61e8e72e3b280cde10e74b8da88b6cff93962b3a7f7390eb042113ef92aa6b51d6d8f",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35152: doc: clarify local IWYU workflow and pra…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-10T17:24:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88bfe89793d2fd043a6a6d5742adbf076a48d7b0",
          "body": "…ing migration\n\ne2b0984f99519f76423ce26ce9077ca765b2b30b wallet: check BDB last page LSN (Lőrinc)\n\nPull request description:\n\n  ### Problem\n\n  Legacy wallet migration uses the read-only BDB parser to verify that every page LSN is reset before reading records without BDB log files.\n\n  The BDB `last_p\n[…]\nsedited:\n    ACK e2b0984f99519f76423ce26ce9077ca765b2b30b\n\nTree-SHA512: 26fade6cdb4747d299b6e620646aa14751cd91fbb7e40ab6e35c1ca796fb589a2340d66108b812611f2924136a8f12c4f911efe6346fffaf04b2d3d288101cda",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35227: wallet: check the final BDB page LSN dur…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-10T10:02:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21599ea612ec8d6d069d3bbaa8a19ce051cad87f",
          "body": "…r CDash Nightly pipelines\n\n4defc466a2232f2e60587d4127eefc356d957ac1 cmake: Set `CTEST_NIGHTLY_START_TIME` for CDash Nightly pipelines (Hennadii Stepanov)\n\nPull request description:\n\n  This PR follows up on https://github.com/bitcoin/bitcoin/pull/35222.\n\n  According to the [CMake documentation](http\n[…]\neKarrot:\n    ACK 4defc466a2232f2e60587d4127eefc356d957ac1\n\nTree-SHA512: 7d3f5dc9f9f1336fc03f565d36750c66bdbae5a3916dabf4ab02c3c2584fc7135a8839e94d7fa08bcbb530913cf0eea31fc402dbdc1c22e207402c991dac044d",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35241: cmake: Set `CTEST_NIGHTLY_START_TIME` fo…",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-05-10T08:01:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d406cffafdd111b34dc613b4cb82b4f0a264d225",
          "body": "…en_id` script\n\n9f7a2293c48f8afb5e87765a327a0c89fd21fa56 depends: Unset `SOURCE_DATE_EPOCH` in `gen_id` script (Hennadii Stepanov)\n\nPull request description:\n\n  When performing Guix builds for `{x86_64,arm64}-apple-darwin` hosts across different commits, all packages in `depends` are rebuilt even if\n[…]\nanquake:\n    ACK 9f7a2293c48f8afb5e87765a327a0c89fd21fa56\n\nTree-SHA512: d5fa90100edfd88024ad949a9d75c8af274a054c0926ae4ddea6ecf1c38fae833670b360c56c740a7565cf393a92597823749fe75c85a27ae1ebebead4093853",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34228: depends: Unset `SOURCE_DATE_EPOCH` in `g…",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-08T10:09:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4defc466a2232f2e60587d4127eefc356d957ac1",
          "body": null,
          "is_bot": false,
          "headline": "cmake: Set `CTEST_NIGHTLY_START_TIME` for CDash Nightly pipelines",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-05-08T09:09:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f28ed6b6af93bc669acf041ba8318c6060ae89a",
          "body": "….sh to maintainer tools repo\n\n888857c55140e5cb1ec80837e9dec79d1362d04a mv contrib/verify-commits/pre-push-hook.sh to maintainer tools repo (MarcoFalke)\n\nPull request description:\n\n  To https://github.com/bitcoin-core/bitcoin-maintainer-tools/pull/198\n\nACKs for top commit:\n  achow101:\n    ACK 888857\n[…]\n code review ACK 888857c55140e5cb1ec80837e9dec79d1362d04a\n\nTree-SHA512: 9dac8fcaa393d3ff175b30cf53f5f074eeb4d1e51517ba545933282862020db3b00830e03a2c8b27a31f47b91d3f07e47d3aa1aafb8eb42f38eaf73c3c19ff81",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35235: contrib: mv verify-commits/pre-push-hook…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-08T08:36:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8396b7f2a3be4be7bb2ffc152f87b4cab95dd84e",
          "body": "d9b57eecadfc112fb3b07c4bd5ccc8ea6a2f0ad6 doc: fix whitespace in build-osx.md (Philips Ucheolisah .N)\ne7d4a7e3f9a21cb5dbc93a042ba87ea171e6bdab doc: fix stale autotools reference and SQLite typo (taboger)\n\nPull request description:\n\nACKs for top commit:\n  kevkevinpal:\n    ACK [d9b57ee](https://github.\n[…]\nebasto:\n    ACK d9b57eecadfc112fb3b07c4bd5ccc8ea6a2f0ad6.\n\nTree-SHA512: 2159a358e3a2e301a44ea6c2f4031bbb52eac9b90dae6bef8daa790336801651b2ca3760fe739ae338b10358588df7e94ad12f3701011ca789d7cbacf78112ba",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35236: doc: typo roundup",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-05-07T15:14:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b7f5914c427f58deb92d52b9ffc4cbee72bc3a3",
          "body": "086894098ecc40172abd15244803c426efda1d19 cmake: add CTestConfig.cmake (will)\n\nPull request description:\n\n  Add a `CTestConfig.cmake` file with the CDash submission URL for Bitcoin Core at the project root.\n\n  This lets developers use CTest’s built-in dashboard support to upload local configure, buil\n[…]\nebasto:\n    ACK 086894098ecc40172abd15244803c426efda1d19.\n\nTree-SHA512: 5d0e2e174773de3f56af80252a62330fc313f394e1a868ac0d2a83c6610c2f734f6e6938bfced710879c00f64f09e17030da594b24940d77c984e46698d37647",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35222: cmake: add CTestConfig.cmake",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-05-07T12:23:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "888857c55140e5cb1ec80837e9dec79d1362d04a",
          "body": null,
          "is_bot": false,
          "headline": "mv contrib/verify-commits/pre-push-hook.sh to maintainer tools repo",
          "author_name": "MarcoFalke",
          "author_login": null,
          "committed_at": "2026-05-07T10:19:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9b57eecadfc112fb3b07c4bd5ccc8ea6a2f0ad6",
          "body": "Remove an extra space before `.zip` in the deploy section.",
          "is_bot": false,
          "headline": "doc: fix whitespace in build-osx.md",
          "author_name": "Philips Ucheolisah .N",
          "author_login": "sudophils",
          "committed_at": "2026-05-07T10:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7d4a7e3f9a21cb5dbc93a042ba87ea171e6bdab",
          "body": "Suggested-by: hebasto",
          "is_bot": false,
          "headline": "doc: fix stale autotools reference and SQLite typo",
          "author_name": "taboger",
          "author_login": "GerardoTaboada",
          "committed_at": "2026-05-07T10:17:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f9c55426a12a16bd11de6dec139c4df58788360",
          "body": "…ask to alpine task\n\nfad61896e869fe004cb1ebdacbd124ce587e6efc ci: Move --usecli --extended from i386 task to alpine task (MarcoFalke)\n\nPull request description:\n\n  The i386 task is getting increasingly tedious to maintain:\n\n  * It is using deprecated (disabled by default) syscalls, see commit 999e9d\n[…]\nsedited:\n    ACK fad61896e869fe004cb1ebdacbd124ce587e6efc\n\nTree-SHA512: a406347aa06de7edbfe8c7d3d082983fa54f5c266c1b2344102cd6cd59dc5b9f46da5e15edfaa7655edf1a2ff8d70da18bae4c8297dfb0cf2c783098d8a46c30",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35230: ci: Move --usecli --extended from i386 t…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-07T09:24:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fad61896e869fe004cb1ebdacbd124ce587e6efc",
          "body": null,
          "is_bot": false,
          "headline": "ci: Move --usecli --extended from i386 task to alpine task",
          "author_name": "MarcoFalke",
          "author_login": null,
          "committed_at": "2026-05-07T07:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c84a2bdb1625a759d2e8597d5c48415d4d9bfeb",
          "body": "0651a1fc1540fcb4d6152a65c68a3c1c93bb5d42 doc: Add Niklas Goegge's key to SECURITY.md (dergoegge)\n\nPull request description:\n\n  Same as https://github.com/bitcoin-core/bitcoincore.org/pull/1244\n\nACKs for top commit:\n  achow101:\n    ACK 0651a1fc1540fcb4d6152a65c68a3c1c93bb5d42\n  stickies-v:\n    ACK 06\n[…]\nsedited:\n    ACK 0651a1fc1540fcb4d6152a65c68a3c1c93bb5d42\n\nTree-SHA512: 1ded3b9c7e2c2a8cecef8d1b4ccb7caac4d8162f5b83e2e02a0e7367f3f2bac688c9672e6d02e631fa55e07e34f55af05743e84323150e959c661d2bf9ea1a10",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35219: doc: Add my key to SECURITY.md",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-06T23:36:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf5c962a39fceb5105f30e758d98970d8fed2400",
          "body": "…n using --usecli\n\na49bc1e24e69ac43beecbdc9c39da3d02160034e ci: add --extended when using --usecli (Pol Espinasa)\n5603ae0ffa3f0be3d22e8a09008e46c5d48ae12f test: fix send_batch_request to pass callables when using --usecli (Pol Espinasa)\n\nPull request description:\n\n  **First commit**\n\n  This commit f\n[…]\nited:\n    Re-ACK a49bc1e24e69ac43beecbdc9c39da3d02160034e\n\nTree-SHA512: 75fca26cf120638ced1fe38e86d8e3efa7addb6d97fc801e34783efd2cf6417f4ded2ec6247b6dcbcdb3cf4f48c4858f0932cbaa3e836a973d53581e75470a3f",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34991: test: fix feature_index_prune.py bug whe…",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-06T23:35:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6690117c7ac456b53b8c8691b6cd773b8f7099d5",
          "body": "…uzz target\n\nac58e6c53c262e08584cb809daf3fbc8dd4d3732 test: fix P2SH output in coins cache fuzz (Lőrinc)\n\nPull request description:\n\n  ### Problem\n  `coinscache_sim` manually constructs a 23-byte P2SH `scriptPubKey`, but placed `OP_EQUAL` at byte index 12.\n  That index is inside the 20-byte script h\n[…]\nsedited:\n    ACK ac58e6c53c262e08584cb809daf3fbc8dd4d3732\n\nTree-SHA512: 1f909dd25d9df87a923e6496145da0ada2b1fa6511b61fb2d203db4c7724f2341c898862a15e7051b952bca834e6654c70fba64a7bf223bfd6d399b3b5d9e59b",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35218: test: fix `P2SH` script in coins cache f…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-06T22:06:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b11108145c6a5196773656454125153a8b0a630",
          "body": "…ttle integral casts (take 3)\n\nfa864b937e1b36f5a8fe989467360988a03637ec refactor: [rpc] Remove confusing and brittle integral casts (take 3) (MarcoFalke)\n\nPull request description:\n\n  This one cast is harmless, but confusing. Also, in the past they have been brittle to the extend of triggering bugs.\n[…]\nsedited:\n    ACK fa864b937e1b36f5a8fe989467360988a03637ec\n\nTree-SHA512: 78407b97964c144f4d94cd445af4f57e29e460912ae9178898224d71f3d5237e5db88a981f7636193a6b7a22be8ad4fd833eb0efa9507284c10f87d9da0ec81b",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35223: refactor: [rpc] Remove confusing and bri…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-06T21:55:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2b0984f99519f76423ce26ce9077ca765b2b30b",
          "body": "The BDB metadata field `last_page` stores the last valid page number, not the number of pages.\nThe read-only wallet migration parser currently checks reset LSNs with a half-open loop, so it skips the final page and may accept a database whose last page still depends on BDB log files.",
          "is_bot": false,
          "headline": "wallet: check BDB last page LSN",
          "author_name": "Lőrinc",
          "author_login": "l0rinc",
          "committed_at": "2026-05-06T21:13:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa864b937e1b36f5a8fe989467360988a03637ec",
          "body": null,
          "is_bot": false,
          "headline": "refactor: [rpc] Remove confusing and brittle integral casts (take 3)",
          "author_name": "MarcoFalke",
          "author_login": null,
          "committed_at": "2026-05-06T15:35:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f7a2293c48f8afb5e87765a327a0c89fd21fa56",
          "body": null,
          "is_bot": false,
          "headline": "depends: Unset `SOURCE_DATE_EPOCH` in `gen_id` script",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-05-06T14:04:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "086894098ecc40172abd15244803c426efda1d19",
          "body": "Add a `CTestConfig.cmake` file with the CDash submission URL for Bitcoin\nCore.\n\nThis lets developers use CTest’s built-in dashboard support to upload\nlocal configure, build, and test results to CDash. With this a developer\ncan use their own CTest dashboard script or manual `ctest` workflow and\nuploa\n[…]\noard submission, making it easier to inspect\nfailures and compare behavior across environments.\n\nThe file only defines the CDash upload location. It does not change the\ndefault build or test behavior.",
          "is_bot": false,
          "headline": "cmake: add CTestConfig.cmake",
          "author_name": "will",
          "author_login": "willcl-ark",
          "committed_at": "2026-05-06T12:16:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0651a1fc1540fcb4d6152a65c68a3c1c93bb5d42",
          "body": null,
          "is_bot": false,
          "headline": "doc: Add Niklas Goegge's key to SECURITY.md",
          "author_name": "dergoegge",
          "author_login": "dergoegge",
          "committed_at": "2026-05-06T07:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac58e6c53c262e08584cb809daf3fbc8dd4d3732",
          "body": "The `coinscache_sim` fuzz target builds a 23-byte P2SH scriptPubKey manually.\nPlace `OP_EQUAL` at index 22, after `OP_HASH160`, the 20-byte push opcode, and the 20-byte script hash.\nThis matches `CScript::IsPayToScriptHash()`, which checks byte 22 for `OP_EQUAL`, see src/script/script.cpp#L229",
          "is_bot": false,
          "headline": "test: fix P2SH output in coins cache fuzz",
          "author_name": "Lőrinc",
          "author_login": "l0rinc",
          "committed_at": "2026-05-06T07:39:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa1d0d7cd7355ab5154d44d831513f7fbc5028a2",
          "body": "…ted tx data\n\n1ed799fb21db51a12cbd5579420a61b9b5b3ee7d validation: correct lifetime of precomputed tx data (Antoine Poinsot)\n\nPull request description:\n\n  This is a cleanup that fixes the root cause of CVE-2024-52911, which was covertly fixed in #31112 (first released in 29.0).\n\n  Security advisory \n[…]\nptout21:\n    ACK 1ed799fb21db51a12cbd5579420a61b9b5b3ee7d\n\nTree-SHA512: 904fb71d95b8486b7ceb5a014bc39b1e09c42e254357d663b6da247e49c69041945119f8339724ddbef22f4e8aa4b53f72bdac8fdf7daab62aa31edc52b612e6",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35209: validation: correct lifetime of precompu…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-06T07:32:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d7ed2840acc0f065620fdd3d45480169f06a266c",
          "body": "9fa4076b20a55fc1c142ffde891ca76f5cd416e6 test: Test merging implicit PSBTv0 with explicit PSBTv0 (w0xlt)\n1660c18232a5563b999b08aab91239bb1221fe87 doc: Release notes for psbtv2 (Ava Chow)\n470e52a5f8158845c48209c6a4d5ebe55c6d90ba fuzz: Enforce additional version invariants in PSBT fuzzer (Antoine Poin\n[…]\n  w0xlt:\n    ACK 9fa4076b20a55fc1c142ffde891ca76f5cd416e6\n\nTree-SHA512: ab0a5ada4fa5fca27ba9ec9c291a44b30e69d6db11971957572d86c58c71c4caa4557dc25f403e1170ba4fac751306d074cc582defefc6e2fdd37be51c3d9dd0",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#21283: Implement BIP 370 PSBTv2",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-05T12:43:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ed799fb21db51a12cbd5579420a61b9b5b3ee7d",
          "body": "This makes sure `txsdata` always outlives the Script check queue (since local\nobjects are destructed in reverse order of construction).\n\nThis is the root cause for a security vulnerability reported by Cory Fields in\n2024 that could be exploited by crafting an invalid block to cause nodes to\nread freed memory. The vulnerability was covertly fixed in commit\n`492e1f09943fcb6145c21d470299305a19e17d8b`.\n\nSee security advisory for CVE-2024-52911 for more details.",
          "is_bot": false,
          "headline": "validation: correct lifetime of precomputed tx data",
          "author_name": "Antoine Poinsot",
          "author_login": "darosior",
          "committed_at": "2026-05-05T11:52:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c89c8ddbb3657c6b53991c16faaf00e923cbc852",
          "body": "c8d688f41ccb218f301adde4120f2094d13b739a fuzz: send blocktxn messages in cmpctblock harness (Eugene Siegel)\nd0333bfe9909ab40379fe637e1b298f561076af0 fuzz: send compact blocks in cmpctblock harness (Eugene Siegel)\n3c58efe2acf0e7fbf1daaadd8bff2e0cfd3761e1 fuzz: mine blocks and send headers for them in\n[…]\ncofleon:\n    ACK c8d688f41ccb218f301adde4120f2094d13b739a\n\nTree-SHA512: d904066921211b32eb75c9602908929f46ecd25482c518db36ed9f30e012b350b38a2df382f0faa21decd43bc2cabcc859193207da34be76010a32df1d9ac5c8",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#33300: fuzz: compact block harness",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-04T21:28:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4bf1701f58b949dbef0c0adcda0f779b59874dd7",
          "body": "…sus validation function\n\nbfbf1a7ef3ee64a345dc2b2c6cf4f85c3a739fae kernel: Expose btck_transaction_check consensus function (w0xlt)\n\nPull request description:\n\n  This PR exposes the consensus-level `CheckTransaction` function through the libbitcoinkernel C API and adds a corresponding C++ wrapper.\n\n\n[…]\n janb84:\n    ACK bfbf1a7ef3ee64a345dc2b2c6cf4f85c3a739fae\n\nTree-SHA512: fe9ba555564af3258d9ccaea1b208df0aa2a4bf2fe74a8f861b3a3b3b891f2990ffc0e3b763d14f15568e977b70ee7337a5dc7d469c63098e0b43adc2ad80e3c",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#33796: kernel: Expose `CheckTransaction` consen…",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-04T21:19:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "999e9dbfb43e7e38f72e9b38fb3743022c2b9f80",
          "body": "11c9ef92a8daf030f75f88f324396b2248c65a64 ci: unconfine seccomp for i686 no IPC (Lőrinc)\n\nPull request description:\n\n  Fixes https://github.com/bitcoin/bitcoin/issues/35199.\n\n  ### Problem\n  The `i686, no IPC` job [fails](https://github.com/bitcoin/bitcoin/actions/runs/25275669000/job/74105140405#ste\n[…]\nn/bitcoin/commit/11c9ef92a8daf030f75f88f324396b2248c65a64\n\nTree-SHA512: 8db87ad1e93144a58282ecf3e16a0bf7ae9d685f339b31bc8369a2ed6ecd28d87b48730e4db87baf8cb4dad088acb38ab676582ccba74cd4cbe3913bfbee3e0c",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35202: ci: restore sockets in `i686, no IPC` job",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-04T20:51:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "224120bf1299392deaa59ab71c895a1e6264f205",
          "body": "11713c9fa91ca583063750cc826d0138b3a611f6 net: make CConnman::m_nodes_mutex non-recursive (Vasil Dimov)\naec4fa2de0030f035d41874b2db7efdbf93bba24 net: drop the only recursive usage of CConnman::m_nodes_mutex (Vasil Dimov)\n\nPull request description:\n\n  The only case of a recursive lock was a nested `Fo\n[…]\nsedited:\n    ACK 11713c9fa91ca583063750cc826d0138b3a611f6\n\nTree-SHA512: 5c626423b5041bfecd8487e2201bfa29443aa2ebe955aa7dc6680e1ee4a094296c9034a6ad70d4d63046627edeeda87f73bd27059e08ae4fe20653d8ae380b71",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#32394: net: make m_nodes_mutex non-recursive",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-04T09:01:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "11c9ef92a8daf030f75f88f324396b2248c65a64",
          "body": "Docker 29.4.2 blocks `socketcall(2)` in the default seccomp profile:\nhttps://docs.docker.com/engine/release-notes/29/#2942\nhttps://github.com/moby/profiles/releases/tag/seccomp%2Fv0.2.2\nhttps://github.com/moby/moby/pull/52501\n\nThat affects the `i686, no IPC` job because it runs 32-bit Linux test bin\n[…]\ndy appends to `docker run`.\n\nThis restores socket availability for the 32-bit test binaries throughout the job:\nhttps://docs.docker.com/engine/security/seccomp/#run-without-the-default-seccomp-profile",
          "is_bot": false,
          "headline": "ci: unconfine seccomp for i686 no IPC",
          "author_name": "Lőrinc",
          "author_login": "l0rinc",
          "committed_at": "2026-05-03T15:26:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f4a3ba8972dae9412ba975a040cea22c227f983",
          "body": "… from `add_boost_if_needed`\n\ne2ef54b8ba8de7ce1d7b1b04c3e28b08c3fa3816 cmake: Remove NetBSD-specific workaround from `add_boost_if_needed` (Hennadii Stepanov)\n\nPull request description:\n\n  The patched package [`boost-1.90.0`](https://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/boost/index.htm\n[…]\nanquake:\n    ACK e2ef54b8ba8de7ce1d7b1b04c3e28b08c3fa3816\n\nTree-SHA512: d6c78d874c80daaaaddea93215dab32c254bcdca60d42613105c231c92847b7a049b87e419c764cb58ea3aa456f02ddffc9e94d23bc709f3109f621f909872b6",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35165: cmake: Remove NetBSD-specific workaround…",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-05-02T10:18:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1ff4773ba73bd55f86d25f6a87b404c66dc2797",
          "body": "…aths including `..` and `.` elements\n\need7af666b6670badc9f58d200b77dc973786c60 doc: Add release note for disallowing some wallet path names (David Gumberg)\n3d7f0e4ed5ac1fea0529fb25662cf0ea9a397cee wallettool: Use GetWalletPath to determine the wallet path (Ava Chow)\n2b0dc0d2280b48960a3510b1dfda05a1\n[…]\nejula27:\n    ACK eed7af666b6670badc9f58d200b77dc973786c60\n\nTree-SHA512: bec5e54369061eb630d9afb94701badce09e8beb63686cf714016466fc01653d4841030fc10fcd14d44e6b1022c0994cb32253d80533807704d9e11eda2423ff",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34544: wallet: Disallow wallet names that are p…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-02T08:58:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db98e357d3ea4ca2b8ca881d7af20eda49efb4f1",
          "body": "… wallet benchmarks, and remove DuplicateMockDatabase\n\n1d1ae6f0c4f2f60f5ceb2d60e8a52662e542e21d wallet, test: Remove DuplicateMockDatabase (Ava Chow)\n57820c472b4e1b10fc0d2cc5b60c4783338edc7c bench: Utilize setup() for WalletLoading and use a real database (Ava Chow)\n9a7604fd257c4a549d0f22f28a36fef60\n[…]\nsedited:\n    ACK 1d1ae6f0c4f2f60f5ceb2d60e8a52662e542e21d\n\nTree-SHA512: 41130144972b759b401f990820eaf524d1f17f47d81bf1afea4a529d15a21d253521838a9e31df8f424996582b718a92634ab255204c6fce703b7e47a1d23670",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35018: wallet, bench: Use Nanobench setup() for…",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-02T08:27:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18d003c3dcc96197ee382b2209e2ca548a729167",
          "body": "…anpages.py\n\n758f208cc179425eae206f26a4b46bdbd2e5f3d9 contrib: override system locale in gen-manpages.py (Sjors Provoost)\n\nPull request description:\n\n  `bitcoin-qt --help` emits a translation of \"version\", which creates a diff when updating or verifying man pages.\n\n  The script aborts earlier howeve\n[…]\nebasto:\n    ACK 758f208cc179425eae206f26a4b46bdbd2e5f3d9.\n\nTree-SHA512: 0947391b85a637ae6d1d0cf4b8de4ab74b42e772bf7d70991cf2b4e035c2cb99f0f46c6cb2cd8aac9cc1be22a9e8329594536688622d3bacab22289c8151e89d",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34916: contrib: override system locale in gen-m…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-02T00:38:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "567ff2b6d69c46703f07c85f3d2921bb3ea5e10b",
          "body": "…oundary\n\n938312d7a6dcf06cb401a16651e80320f36ee4db docs: clarify RPC credentials security boundary (crStiv)\n\nPull request description:\n\n  Explicitly states that RPC credentials grant full administrative access to the node and filesystem resources accessible by bitcoind. Adds a new section in JSON-RP\n[…]\nsedited:\n    ACK 938312d7a6dcf06cb401a16651e80320f36ee4db\n\nTree-SHA512: 54db0651cfe4a92d700d09c822db5cb68f60f17a4634eb8f132939294e7a0ca2aea15ddc4d581610976158f7546e9c4463cfe113de9500162a0f107e168833cd",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#33196: docs: clarify RPC credentials security b…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-05-02T00:34:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c2646eacc1b1fbaf8b9398051a791b126e6a455",
          "body": "2104282ddde8e7a86965a149f82cd3c3ac35c014 fuzz: Add tests for CCoinControl methods (Chandra Pratap)\n43b09b993d0a5a8178d70a0149a5301aed82bb8d fuzz: Improve oracle for existing CCoinControl tests (Chandra Pratap)\n\nPull request description:\n\n  The `ccoincontrol` fuzzer misses tests for a number of `CCoi\n[…]\nited:\n    Re-ACK 2104282ddde8e7a86965a149f82cd3c3ac35c014\n\nTree-SHA512: bfc8c9a51fca94437332056c476840d841a5b42dd6749cb34105b7ae78215ec9c3eb0f407e1a5f51b3ac20d7abb97cae7c21ad2146d5be9409edbc2cd2c568ee",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34026: fuzz: Add tests for `CCoinControl` methods",
          "author_name": "merge-script",
          "author_login": "sedited",
          "committed_at": "2026-05-01T20:42:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bfbf1a7ef3ee64a345dc2b2c6cf4f85c3a739fae",
          "body": "Add btck_transaction_check() to the libbitcoinkernel C API, exposing\ncontext-free transaction consensus validation (consensus/tx_check.h).\n\nIntroduces btck_TxValidationState with introspection and lifecycle\nfunctions. btck_TxValidationResult is exposed for compatibility with\nexisting validation-stat\n[…]\ns, though btck_transaction_check currently\nreaches only UNSET and CONSENSUS.\n\nIncludes C++ wrapper and test coverage for btck_transaction_check using\ntest vectors from tx_valid.json / tx_invalid.json.",
          "is_bot": false,
          "headline": "kernel: Expose btck_transaction_check consensus function",
          "author_name": "w0xlt",
          "author_login": "w0xlt",
          "committed_at": "2026-05-01T00:39:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "404470505a8b574b5e4b0e1ffc481ed3fc8caf77",
          "body": "…ure_bind_extra` on macOS & BSD\n\n1950da94fce864d1add43c3196007e4c56607d24 test: enable `rpc_bind` on macOS and BSD (Lőrinc)\n7236a05503516603f024f1383491b8c99ef9a1a2 test: enable `feature_bind_extra` on macOS and BSD (Lőrinc)\n\nPull request description:\n\n  ### Problem\n\n  Some functional tests are show\n[…]\ncl-ark:\n    tACK 1950da94fce864d1add43c3196007e4c56607d24\n\nTree-SHA512: 4cecc88852623f3fe3a7dccceb0e71932824c1ed7f1d4ab89b953ff6b7991afbd0b016c819c17e966bed53082dd623a832752b8847711861009cd5ffc4677367",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34256: test: support `get_bind_addrs` and `feat…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-30T21:06:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25100fc28da1c8ec85ef9fd73b3b404dc6e8c0a4",
          "body": "d28179bac902cd35ca4b2ceafa9cb6da19936190 util, iwyu: Add missed header (Hennadii Stepanov)\n\nPull request description:\n\n  This PR amends https://github.com/bitcoin/bitcoin/pull/34669 and fixes the [CI](https://github.com/bitcoin/bitcoin/actions/runs/25182795747/job/73832160104).\n\nACKs for top commit:\n[…]\nrunoerg:\n    ACK d28179bac902cd35ca4b2ceafa9cb6da19936190\n\nTree-SHA512: 09c79d489d7903ae6b6b9d86c18ba176acf2cdabde5b73bcbd76a219958e5234327ca943ab13ea17a921ff501b0ebef0de68113571e9a8bf511b5ac3f8ca9f4a",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#35186: util, iwyu: Add missed header",
          "author_name": "merge-script",
          "author_login": "fanquake",
          "committed_at": "2026-04-30T20:02:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d28179bac902cd35ca4b2ceafa9cb6da19936190",
          "body": null,
          "is_bot": false,
          "headline": "util, iwyu: Add missed header",
          "author_name": "Hennadii Stepanov",
          "author_login": "hebasto",
          "committed_at": "2026-04-30T19:42:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32e479f7a5a464c4c2a8d7da40e4f93234d7cfd5",
          "body": "…,>>} for sorted wrappers\n\n1aa78cdab6bc8ecd4448b1b75ee3181ee8f3f519 clusterlin: adopt STL ranges algorithms (refactor) (Pieter Wuille)\n747da2536092804f9c488e34977ffbb054edabc8 feefrac: drop comparison and operator{<<,>>} for sorted wrappers (Pieter Wuille)\n\nPull request description:\n\n  Instead of ha\n[…]\najtowns:\n    ACK 1aa78cdab6bc8ecd4448b1b75ee3181ee8f3f519\n\nTree-SHA512: d76657b15f6d745e5ca01c67fd5b101fdc418e6301646d14e575b6564bfa2fe0eb40a95a7ff95a4420624ef6b67224d35e4713aa5bbc0d293e08fe44c0cc6db0",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34669: feefrac: drop comparison and operator{<<…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-30T18:35:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "11713c9fa91ca583063750cc826d0138b3a611f6",
          "body": "This change includes `s/RecursiveMutex/Mutex/` and a pile of\nannotations to keep the compiler happy after the type change.\n\nPartially resolves: https://github.com/bitcoin/bitcoin/issues/19303",
          "is_bot": false,
          "headline": "net: make CConnman::m_nodes_mutex non-recursive",
          "author_name": "Vasil Dimov",
          "author_login": "vasild",
          "committed_at": "2026-04-30T11:41:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aec4fa2de0030f035d41874b2db7efdbf93bba24",
          "body": "The only recursive usage of `CConnman::m_nodes_mutex` is from\n`PeerManagerImpl::MaybeSetPeerAsAnnouncingHeaderAndIDs()` which uses\nnested calls to `CConnman::ForNode()` to trim the size of\n`lNodesAnnouncingHeaderAndIDs` to `<= 3`. This need not be nested, so\ntake it out.\n\nBefore:\n```\nfornode(newnode\n[…]\n\n    push back newnode\nif (size > 3)\n    fornode(front) handle removal of front\n    pop front\n```\n\n`lNodesAnnouncingHeaderAndIDs` is protected by `cs_main` which is locked\nduring the entire operation.",
          "is_bot": false,
          "headline": "net: drop the only recursive usage of CConnman::m_nodes_mutex",
          "author_name": "Vasil Dimov",
          "author_login": "vasild",
          "committed_at": "2026-04-30T11:21:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eed7af666b6670badc9f58d200b77dc973786c60",
          "body": null,
          "is_bot": false,
          "headline": "doc: Add release note for disallowing some wallet path names",
          "author_name": "David Gumberg",
          "author_login": "davidgumberg",
          "committed_at": "2026-04-29T23:23:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d7f0e4ed5ac1fea0529fb25662cf0ea9a397cee",
          "body": "Instead of computing the path separately, use GetWalletPath to use the\nbehavior and error checking of the typical wallet path computation.",
          "is_bot": false,
          "headline": "wallettool: Use GetWalletPath to determine the wallet path",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T23:23:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef499680c8d426ac04f3a5d4ad67cbb3426e0e21",
          "body": "…b directories\n\n08925d5ee75c15712f523bacbdcfd44257f9c8ac test: add coverage for loading a wallet in a non-writable directory (furszy)\n0218966c0dceb8b9c25a26c92eb6902faa56fbd9 test: add coverage for wallet creation in non-writable directory (furszy)\nbc0090f1d60652ebbfd8fd1477b9b17cb9ade239 wallet: ha\n[…]\n:\n    Tested ACK 08925d5ee75c15712f523bacbdcfd44257f9c8ac\n\nTree-SHA512: e480eab329a1d595fe0b191e83c97956e3ff1d1e335ada8ac6fe72bc4b2bb9b13b0d49db0254d34ad75f816db06d9cd0c21d3063d7d8ee6687a7ea2324c36288",
          "is_bot": false,
          "headline": "Merge bitcoin/bitcoin#34176: wallet: crash fix, handle non-writable d…",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:53:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a39cc16b434de7f2d1a7098e4526b7d3e82930be",
          "body": null,
          "is_bot": false,
          "headline": "doc: Release note for addhdkey",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89b9a01b4ea6355c1ecacb1d42d85252cfcb2a77",
          "body": null,
          "is_bot": false,
          "headline": "wallet, rpc: Disallow importing unused() to wallets without privkeys",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35bbee63746b567c867bb6d2c3db6f6670286826",
          "body": null,
          "is_bot": false,
          "headline": "wallet, rpc: Disallow import of unused() if key already exists",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3f8bcbd1df3d66d640885a47fa12308d7b1485c",
          "body": null,
          "is_bot": false,
          "headline": "wallet: Add addhdkey RPC",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:11:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fa4076b20a55fc1c142ffde891ca76f5cd416e6",
          "body": null,
          "is_bot": false,
          "headline": "test: Test merging implicit PSBTv0 with explicit PSBTv0",
          "author_name": "w0xlt",
          "author_login": "w0xlt",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1660c18232a5563b999b08aab91239bb1221fe87",
          "body": null,
          "is_bot": false,
          "headline": "doc: Release notes for psbtv2",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "470e52a5f8158845c48209c6a4d5ebe55c6d90ba",
          "body": null,
          "is_bot": false,
          "headline": "fuzz: Enforce additional version invariants in PSBT fuzzer",
          "author_name": "Antoine Poinsot",
          "author_login": "darosior",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bd0579c09c0998cc1c35472a43ce5fb5fe621e6",
          "body": null,
          "is_bot": false,
          "headline": "test: Tests for PSBT AddInput and AddOutput",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8b6e7f0c291df7c49d5f56e3583efb2cb1d6594",
          "body": null,
          "is_bot": false,
          "headline": "tests: Add PSBT unit test for ComputeTimeLock",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bc1c2e50847325f6b2fb59bb5545957dda6985c",
          "body": null,
          "is_bot": false,
          "headline": "tests: Add test vectors from BIP 370",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0e4dbdeb5c863afe0453f12062ac93cf1cb25cd",
          "body": null,
          "is_bot": false,
          "headline": "psbt: Change default psbt version to 2",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcc1dca77b30706b4f53d04a7384a7a71a520bbe",
          "body": "walletcreatefundedpsbt, createpsbt, converttopsbt, and psbtbumpfee take\na psbt_version argument to set the version of the PSBT that they\nproduce. The default psbt_version is 2.",
          "is_bot": false,
          "headline": "Add psbt_version to PSBT RPCs and default to v2",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab38c301953da3e14c5e979d59e44ed736f89717",
          "body": null,
          "is_bot": false,
          "headline": "Implement PSBTv2 field merging",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93e339e29ff51ed56c5a784d5e7dbc7ba48a029a",
          "body": null,
          "is_bot": false,
          "headline": "Implement PSBTv2 AddInput and AddOutput",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b39c86ae60663df683ce8101d27e1ce292996ebe",
          "body": "The constructor will create the PSBT of the specified version, as long\nas it is 0 or 2.",
          "is_bot": false,
          "headline": "Allow specifying PSBT version in constructor",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcc9a3c8dfdab1558a95b60831e573bcf907fefa",
          "body": null,
          "is_bot": false,
          "headline": "Implement PSBTv2 in decodepsbt",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5770dbd39fc2f0f183ba8ea2674858d6701b9da3",
          "body": "Function to compute the lock time for the transaction",
          "is_bot": false,
          "headline": "Add PSBT::ComputeLockTime()",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "863cf47b33e65bf88720ea78a04d0c1522980b30",
          "body": null,
          "is_bot": false,
          "headline": "Update test_framework/psbt.py for PSBTv2",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "925161eaf0cb8710d335602f7e87c0dab149a7f5",
          "body": null,
          "is_bot": false,
          "headline": "Implement PSBTv2 fields de/ser",
          "author_name": "Ava Chow",
          "author_login": "achow101",
          "committed_at": "2026-04-29T22:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 30,
      "commits_last_year": 2739,
      "latest_release_at": "2021-10-18T12:41:02Z",
      "latest_release_tag": "v0.20.2",
      "releases_from_tags": true,
      "days_since_last_push": 16,
      "active_weeks_last_year": 43,
      "days_since_latest_release": 1742,
      "mean_days_between_releases": 89.7
    },
    "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": 5,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2024-06-13",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "example",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "depends/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "contrib/devtools/deterministic-fuzz-coverage/Cargo.toml",
        "contrib/devtools/deterministic-unittest-coverage/Cargo.toml",
        "test/lint/test_runner/Cargo.toml"
      ],
      "largest_source_bytes": 2409168,
      "source_files_sampled": 1986,
      "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": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 2
      },
      "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": 5266,
          "avatar_url": "https://avatars.githubusercontent.com/u/863730?v=4"
        },
        {
          "type": "User",
          "login": "achow101",
          "commits": 2395,
          "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": 2157,
          "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": 909,
          "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.198
    },
    "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": "b2a3ca3df901dcc19b07f7dcf3115d8f7835b931",
        "ran_at": "2026-07-26T17:28:19Z",
        "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-05-18T17:01:14Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2022-10-26T10:19:01Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/stickies-v/bitcoin",
    "host": "github.com",
    "name": "bitcoin",
    "owner": "stickies-v"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 47,
        "vitality": 68,
        "community": 17,
        "governance": 59,
        "engineering": 69
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 87,
            "inputs": {
              "commits_last_year": 2739,
              "human_commit_share": 1,
              "days_since_last_push": 16,
              "active_weeks_last_year": 43
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 16 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "43/52 weeks with commits",
                "points": 29.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 43
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "2739 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 2739
                    }
                  }
                ],
                "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": 30,
              "latest_release_tag": "v0.20.2",
              "releases_from_tags": true,
              "days_since_latest_release": 1742,
              "mean_days_between_releases": 89.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "30 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1742 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1742
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~89.7 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 89.7
                    }
                  }
                ],
                "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": 69,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 69 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 69
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 17,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "forks": 1,
              "stars": 5,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "5 stars",
                "points": 9.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 87,
            "inputs": {
              "bus_factor": 5,
              "contributors_sampled": 100,
              "top_contributor_share": 0.198
            },
            "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,
                "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": 24,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 2
            },
            "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": "1/3 decided PRs merged",
                "points": 12.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "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": 59,
            "inputs": {
              "followers": 116,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "stickies-v",
              "public_repos": 28,
              "account_age_days": 2186
            },
            "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": "116 followers of stickies-v",
                "points": 14.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 116,
                      "login": "stickies-v"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "28 public repos, account ~5 yr old",
                "points": 22.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 28
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 69,
        "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": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://bitcoincore.org/en/download",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://bitcoincore.org/en/download",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "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": 11
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.9,
              "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": "90 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 90,
                      "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": 1986,
              "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/1986 source files over 60KB",
                "points": 51.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1986,
                      "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:28:38.153272Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/stickies-v/bitcoin.svg",
  "full_name": "stickies-v/bitcoin",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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