Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-26 23:35 UTC

bitcoindevkit / bdk_wallet

A modern, lightweight, descriptor-based wallet library written in Rust!

RustEigene Lizenz★ 54 Sterne⑂ 95 Forksseit Apr. 2025Auf GitHub ansehen ↗

bitcoindevkit/bdk_wallet erreicht einen Gesundheitsindex von 79 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (98/100) ab, am schwächsten bei AI Readiness (57/100). Zuletzt vor 3 Tagen aktualisiert. 3 Mitwirkende tragen den Großteil der jüngsten Arbeit.

79
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

79
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Bitcoin Dev KitOrganisation
736 Follower46 öffentliche Reposseit März 2020

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.iobdk_wallet3.1.0116.89223vor 42 Tagenbitcoindescriptorpsbtwallet

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

98Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 3 Tagen
31.8/36Commit-Rhythmus — 46/52 Wochen mit Commits
18/18Commit-Volumen — 240 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year240
human_commit_share0,96
days_since_last_push3
active_weeks_last_year46

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 13 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 42 Tagen
27/27Release-Rhythmus — ein Release etwa alle 42,3 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count13
latest_release_tagv3.1.0
releases_from_tagsnein
days_since_latest_release42
mean_days_between_releases42,3
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

66Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
28/60Stars — 54 Stars
16.4/25Forks — 95 Forks
6/15Watcher — 13 Watcher
Verwendete Eingangsdaten
forks95
stars54
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
16.9/22.5Lizenz — Lizenzdatei vorhanden, keine anerkannte Lizenz
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja
Wie die Bewertung erfolgt
67.6/80Downloads pro Monat — 116.892 Downloads/Monat über crates
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesbdk_wallet
dependents
ecosystemscrates
total_downloads1.079.408
monthly_downloads116.892
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

77Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
36/54Bus-Faktor — 3 Beitragende decken die Hälfte aller Commits ab
17.6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 22 % der Commits
13.5/13.5Breite der Beitragenden — 98 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 40 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor3
contributors_sampled98
top_contributor_share0,22
Wie die Bewertung erfolgt
21.1/46.8Issue-Lösungsquote — 45 % der Issues geschlossen
28.2/38.3PR-Annahme — 134/182 entschiedene PRs gemergt
10.5/15OpenSSF Scorecard: Code-Review — Found 5/7 approved changesets -- score normalized to 7
Verwendete Eingangsdaten
merged_prs134
open_issues154
closed_issues127
issue_closed_ratio0,452
closed_unmerged_prs48
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
20.6/25Reichweite des Inhabers — 736 Follower von bitcoindevkit
24.2/25Kontohistorie — 46 öffentliche Repos, Kontoalter ca. 6 Jahre
Verwendete Eingangsdaten
followers736
owner_typeOrganization
is_verified
owner_loginbitcoindevkit
public_repos46
account_age_days2.309

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf crates
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 42 Tagen
20/20Versionshistorie — 23 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesbdk_wallet
ecosystemscrates
any_deprecatednein
min_days_since_publish42

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

71Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 5 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 10 out of 10 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

79Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 10 out of 10 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
5.2/7.5Code-Review — Found 5/7 approved changesets -- score normalized to 7
2.5/2.5Contributors — project has 40 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate7,9
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

57Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 96 von 96 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — examples/justfile, justfile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
0/10Reproduzierbare Umgebung
2/10Belegte Agentenpraxis — 1 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 4 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_filesexamples/justfile, justfile
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,01
toolchain_manifestsCargo.toml
dependency_bot_commit_share0,04
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
50.1/55Handhabbare Dateigrößen — 4/45 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes165.781
source_files_sampled45
oversized_source_files4
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

54GitHub-Sterne
98Mitwirkende
240Commits, letzte 12 Monate
3Tage seit letztem Push
13Releases
3Bus-Faktor
154offene Issues
crates.ioPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 95 ⇿
0Sterne
95Forks
13Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0204060801009532025-042025-112026-07
Major 1Minor 1Patch 0

Jeder Punkt umfasst 2 Tage.

OpenSSF Scorecard 7.9 / 10
7.9Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-26 23:35 UTC

10Binary-Artifactsno binaries found in the repo
4Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests10 out of 10 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
7Code-ReviewFound 5/7 approved changesets -- score normalized to 7
10Contributorsproject has 40 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 11
RegistryPaketVersionsvorgabeManifest
crates.iobdk_chain0.23.3Cargo.toml
crates.iobdk_tx0.2.0Cargo.toml
crates.iobitcoin0.32.8Cargo.toml
crates.iominiscript12.3.5Cargo.toml
crates.iorand_core0.6.4Cargo.toml
crates.ioserde_json1Cargo.toml
crates.ioserde1Cargo.toml
crates.ioanyhow1Cargo.toml
crates.iobdk_file_store0.22.0Cargo.toml
crates.iobip392.2.2Cargo.toml
crates.iotempfile3.26.0Cargo.toml
Alle Abhängigkeiten 19

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 11 direkte und 8 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
crates.ioanyhowdirekt
crates.iobdk_chaindirekt
crates.iobdk_file_storedirekt
crates.iobdk_txdirekt
crates.iobip39direkt
crates.iobitcoindirekt
crates.iominiscriptdirekt
crates.iorand_coredirekt
crates.ioserdedirekt
crates.ioserde_jsondirekt
crates.iotempfiledirekt
crates.ioassert_matchesindirekt
crates.iobdk_bitcoind_rpcindirekt
crates.iobdk_electrumindirekt
crates.iobdk_esploraindirekt
crates.ioclapindirekt
crates.ioctrlcindirekt
crates.iorandindirekt
crates.iotokioindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 7606,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Just": 2008,
        "Rust": 1089283,
        "Shell": 1103
      },
      "pushed_at": "2026-07-23T18:08:22Z",
      "created_at": "2025-04-03T18:21:58Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T16:04:06Z",
      "description": "A modern, lightweight, descriptor-based wallet library written in Rust! ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://bitcoindevkit.org/",
      "name": "Bitcoin Dev Kit",
      "type": "Organization",
      "login": "bitcoindevkit",
      "company": null,
      "location": null,
      "followers": 736,
      "avatar_url": "https://avatars.githubusercontent.com/u/62867074?v=4",
      "created_at": "2020-03-30T04:10:49Z",
      "is_verified": null,
      "public_repos": 46,
      "account_age_days": 2309
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2026-06-14T03:57:03Z"
        },
        {
          "tag": "wallet-2.4.0",
          "kind": "other",
          "published_at": "2026-04-28T19:29:26Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-04-13T14:18:50Z"
        },
        {
          "tag": "v3.0.0-rc.2",
          "kind": "prerelease",
          "published_at": "2026-03-26T00:28:03Z"
        },
        {
          "tag": "v3.0.0-rc.1",
          "kind": "prerelease",
          "published_at": "2026-03-10T23:25:24Z"
        },
        {
          "tag": "wallet-2.3.0",
          "kind": "other",
          "published_at": "2025-12-04T16:58:34Z"
        },
        {
          "tag": "wallet-2.2.0",
          "kind": "other",
          "published_at": "2025-10-01T15:14:47Z"
        },
        {
          "tag": "wallet-2.1.0",
          "kind": "other",
          "published_at": "2025-08-07T15:00:52Z"
        },
        {
          "tag": "wallet-2.0.0",
          "kind": "other",
          "published_at": "2025-06-04T23:48:19Z"
        },
        {
          "tag": "wallet-2.0.0-beta.0",
          "kind": "other",
          "published_at": "2025-05-29T12:51:59Z"
        },
        {
          "tag": "wallet-1.2.0",
          "kind": "other",
          "published_at": "2025-04-17T03:14:12Z"
        },
        {
          "tag": "wallet-1.1.0",
          "kind": "other",
          "published_at": "2025-04-17T03:15:19Z"
        },
        {
          "tag": "wallet-1.0.0",
          "kind": "other",
          "published_at": "2025-04-17T03:16:20Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e6e3ddfa3cbb5b551dcbe4268602ff8242d5ea42",
          "body": "…rom 10.3.0 to 10.4.0\n\nbc83556686ff5ba8f728672f068e8a47b55ec269 build(deps): bump actions/stale from 10.3.0 to 10.4.0 (dependabot[bot])\n\nPull request description:\n\n  Bumps [actions/stale](https://github.com/actions/stale) from 10.3.0 to 10.4.0.\n  <details>\n  <summary>Release notes</summary>\n  <p><em\n[…]\ndMammal:\n    ACK bc83556686ff5ba8f728672f068e8a47b55ec269\n\nTree-SHA512: 94aa27f54f779a6251d07f998e43a3d9ddc5cc3408875e663e071253199979884184701d6d919e7309ee2281d3ed880b8077d1c66232c3ea459bad56592ab8b1",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#515: build(deps): bump actions/stale f…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-23T16:03:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "752d7b5390f0f085176af50ec58ea13ff2476f64",
          "body": "…t from 6 to 7\n\nd2817aba9d9f76e77bcdd6a56679e6d00a4d65db build(deps): bump actions/checkout from 6 to 7 (dependabot[bot])\n\nPull request description:\n\n  Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n  <details>\n  <summary>Release notes</summary>\n  <p><em>Sourced from <a h\n[…]\ndMammal:\n    ACK d2817aba9d9f76e77bcdd6a56679e6d00a4d65db\n\nTree-SHA512: d9c3844c0dd85f55a76dba25e453a77323fd97376c385cdeb1f89793324bdce373d57d0d105f9e65adc9f4e8439e984c7c4ea5dd2f39db1296df2714178f0633",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#504: build(deps): bump actions/checkou…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-23T15:48:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0007794daec74d8136de7ded40d3611ef9ca3dd3",
          "body": "…-action from 6.0.0 to 7.0.0\n\n83bf7c3b75f36698b6ecab0701f9341a41141b97 build(deps): bump codecov/codecov-action from 6.0.0 to 7.0.0 (dependabot[bot])\n\nPull request description:\n\n  Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6.0.0 to 7.0.0.\n  <details>\n  <summary>Re\n[…]\ndMammal:\n    ACK 83bf7c3b75f36698b6ecab0701f9341a41141b97\n\nTree-SHA512: 2d367d6ddc382c55ed262e5676890349cb802b33c1e2ee0327d11cecba5b64649abcdeee9a492b0c20ee0f05cafa0070c333a7a73fede60e29495fe76d2116cd",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#498: build(deps): bump codecov/codecov…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-23T15:32:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b71129ead46dab634fc8a4ac7bc5933903fda2ae",
          "body": "…431 rule 2\n\n7982b6e8fe0b47984d0b148b325f8b4bd9e44481 test(wallet): add test for bip-431 rule 2 (Leonardo Lima)\n589e76aab8a9fc806cee78bd70cf97e1fbcf9429 fix(wallet): add filter for bip-431 rule 2 (Leonardo Lima)\n\nPull request description:\n\n  partially addresses #477\n  supersedes #442\n\n  ### Descript\n[…]\n nymius:\n    ACK 7982b6e8fe0b47984d0b148b325f8b4bd9e44481\n\nTree-SHA512: bc17a1dd1f413dbe8f15ada6be1e4f61afd7e961aadc72424bc399783098db7ebf838c09b279951d8235758e4c2e7ad9d4c8d8cd3b1b1cfb97c486d358c83049",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#478: fix(wallet): add support for bip-…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-23T15:06:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b01f2f61ca9a1625131b914f080be77c86c17e65",
          "body": "a150344179d667ed5ef1c76223aacdaede3d5f14 docs(examples): Add create_psbt and rbf examples (valued mammal)\n0b681a6ae14eca50c41f02dcb7fc8413c9b4cfbe test: Add create_psbt functional integration coverage (valued mammal)\nb9942464588293d1e8e06195fccf3780d6af81e3 feat(wallet,psbt): Add bdk-tx create_psbt \n[…]\nlet/blob/master/CONTRIBUTING.md)\n\nTop commit has no ACKs.\n\nTree-SHA512: 61dd4b632d2a5bdb0737a7a8e670065d93a1fba11340e5563bac1f4ac34acbb4a13eea68b59597430c808049438e7e2c6b6fe8d6e72a7c2821df93cbbb256d4f",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#516: feat: Add Wallet::create_psbt",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-22T14:51:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a150344179d667ed5ef1c76223aacdaede3d5f14",
          "body": null,
          "is_bot": false,
          "headline": "docs(examples): Add create_psbt and rbf examples",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-22T13:53:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b681a6ae14eca50c41f02dcb7fc8413c9b4cfbe",
          "body": null,
          "is_bot": false,
          "headline": "test: Add create_psbt functional integration coverage",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-22T13:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9942464588293d1e8e06195fccf3780d6af81e3",
          "body": "Introduce the unstable create_psbt and replace_by_fee APIs behind\nthe bdk-tx feature and --cfg bdk_wallet_unstable.\n\nThis adds PsbtParams and SelectionStrategy, integrates bdk_tx into\nwallet PSBT/RBF construction, re-exports bdk_tx when enabled, and\nincludes supporting error types needed by the new flow.",
          "is_bot": false,
          "headline": "feat(wallet,psbt): Add bdk-tx create_psbt API surface",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-22T13:53:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f28bb02354e73b4584a7a62659acae568b0173b",
          "body": "Prepare the repository for upcoming unstable-gated API commits by\nproving the cfg workflow end-to-end before any new surface is added.\n\nThis change wires bdk_wallet_unstable into CI coverage, testing,\nlinting, and docs checks, while keeping no-default-features and no_std\nbuilds validated in a stable lane. It also splits local just tasks into\nstable and unstable paths so pre-push validation correctly exercises\nboth.",
          "is_bot": false,
          "headline": "build(ci): Wire unstable cfg into local and CI workflows",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-22T13:53:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7982b6e8fe0b47984d0b148b325f8b4bd9e44481",
          "body": "- introduce `test_create_and_spend_from_tx` to exercise BIP-431 rule-2\n  filtering in-memory, not relying on `bdk_testenv`/`bdk_electrum`.\n\nNOTE: I asked Claude to remove the `bdk_testenv` dependency, keeping\nthe test behavior in-memory.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(wallet): add test for bip-431 rule 2",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-07-14T18:10:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "589e76aab8a9fc806cee78bd70cf97e1fbcf9429",
          "body": "- add new step in `filter_utxos` to validate BIP-431 rule 2, which\n  validates the proper usage of unconfirmed TRUC/non-TRUC ancestor in a\n  TRUC/non-TRUC tx.\n- update docs explaining the manual selection caveat when building\n  non-TRUC/TRUC txs.",
          "is_bot": false,
          "headline": "fix(wallet): add filter for bip-431 rule 2",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-07-14T18:10:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc83556686ff5ba8f728672f068e8a47b55ec269",
          "body": "Bumps [actions/stale](https://github.com/actions/stale) from 10.3.0 to 10.4.0.\n- [Release notes](https://github.com/actions/stale/releases)\n- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/stale/compare/eb5cf3af3ac0a1aa4c9c45633dd1ae542a27\n[…]\n:\n- dependency-name: actions/stale\n  dependency-version: 10.4.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/stale from 10.3.0 to 10.4.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T03:53:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "75e0d30aa9d8aaa3dfe19d9661e5127d6f7886db",
          "body": "…e_psbt outcomes\n\n72261ced00fd0ce71a3377395de6d72b9d241e43 docs(wallet): Format code comment (valued mammal)\nec3a683f0d9247c6e533914e84d83b68ad09d3ce refactor: clarify try_finalize_psbt timelock inputs (Matthew)\n8a7b5de61946fef9cd0c586bc4e0cdc1a5372ac4 docs: clarify try_finalize_psbt behavior (Matth\n[…]\ndMammal:\n    ACK 72261ced00fd0ce71a3377395de6d72b9d241e43\n\nTree-SHA512: 0b2573f4b1f24e4e464b9d5ded936d5602cdc9500072ff3d4cdb0fded9cee6935888d82d6db70212018bdba010db6631d22bb16834c991e1af592a0275912293",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#433: feat: expose detailed try_finaliz…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-08T15:46:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72261ced00fd0ce71a3377395de6d72b9d241e43",
          "body": null,
          "is_bot": false,
          "headline": "docs(wallet): Format code comment",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-08T15:34:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec4d68bf23d7e5935dc3bd555079aee3c65ad198",
          "body": "… workflow\n\nedc5e1fa04934067416158497e671cfe06391fab chore(ci): add stale issue and pr automation (Rishit Modi)\n\nPull request description:\n\n  ### Description\n  Part of #410\n  Closes #386\n\n  Adds `.github/workflows/stale.yml` using `actions/stale@v10` to automatically label and close inactive issues \n[…]\ndMammal:\n    ACK edc5e1fa04934067416158497e671cfe06391fab\n\nTree-SHA512: 900dee08631134f8d5ade996fb1e1ef25b1ca8bc6f946012d451679f40ce8570640119a29980337257fbd1807e6451cf4dffb770d1b3b135bcd4e25f31a8cb1a",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#497: chore(ci): add stale issue triage…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-08T14:27:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "275406e1ec6759efbf1c2fc2dabb2882cc4cb1e8",
          "body": "…LoadParams::two_path_descriptor\n\na06e0a8dd60d52dfad53ed6a05071e758411a8f0 chore: bump rust-toolchain to 1.96.0 (Listener)\n77a727d16c13967bc5a78688768f83c556856c10 docs(wallet,params): Fix doc for LoadParams::two_path_descriptor (Listener)\n\nPull request description:\n\n  ### Description\n\n  Fix incorre\n[…]\ndMammal:\n    ACK a06e0a8dd60d52dfad53ed6a05071e758411a8f0\n\nTree-SHA512: c5098cad750a59bd175d959b22c037598b87eb765f4f163c81149b14f624294756889a0b7b64f3751e46cb1202fe9905afc5cb3d955f0eef750421b819f1ae71",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#510: docs(wallet,params): Fix doc for …",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-07-06T15:11:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a06e0a8dd60d52dfad53ed6a05071e758411a8f0",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump rust-toolchain to 1.96.0",
          "author_name": "Listener",
          "author_login": "bladed-operative",
          "committed_at": "2026-07-06T14:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77a727d16c13967bc5a78688768f83c556856c10",
          "body": null,
          "is_bot": false,
          "headline": "docs(wallet,params): Fix doc for LoadParams::two_path_descriptor",
          "author_name": "Listener",
          "author_login": "bladed-operative",
          "committed_at": "2026-07-06T14:18:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edc5e1fa04934067416158497e671cfe06391fab",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): add stale issue and pr automation",
          "author_name": "Rishit Modi",
          "author_login": "EliteCoder18",
          "committed_at": "2026-07-01T21:45:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec3a683f0d9247c6e533914e84d83b68ad09d3ce",
          "body": null,
          "is_bot": false,
          "headline": "refactor: clarify try_finalize_psbt timelock inputs",
          "author_name": "Matthew",
          "author_login": "reez",
          "committed_at": "2026-06-22T16:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a7b5de61946fef9cd0c586bc4e0cdc1a5372ac4",
          "body": null,
          "is_bot": false,
          "headline": "docs: clarify try_finalize_psbt behavior",
          "author_name": "Matthew",
          "author_login": "reez",
          "committed_at": "2026-06-22T16:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f8cbcaf394cd0a1c1c934203c3298e000092d47",
          "body": null,
          "is_bot": false,
          "headline": "fix: preserve output metadata in try_finalize_psbt",
          "author_name": "Matthew",
          "author_login": "reez",
          "committed_at": "2026-06-22T16:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50a1a0f55ce5a6e1d15ef7dc2515807fd69ba7a3",
          "body": null,
          "is_bot": false,
          "headline": "fix: preserve opaque psbt input fields on finalize",
          "author_name": "Matthew",
          "author_login": "reez",
          "committed_at": "2026-06-22T16:24:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6afd006737e3cc689db177617f9626b0055436d1",
          "body": null,
          "is_bot": false,
          "headline": "feat: expose detailed try_finalize_psbt outcomes",
          "author_name": "Matthew",
          "author_login": "reez",
          "committed_at": "2026-06-22T16:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2817aba9d9f76e77bcdd6a56679e6d00a4d65db",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T03:53:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58fe631177047ef1c49947ff453110f47138adcd",
          "body": "2a04e3b0727c64ef6063d70610c79c1145f31ed8 chore: Bump version to 3.1.0 (valued mammal)\n6f5912ef06bc82d0d0acb5ac0f6b09592c045664 chore: Update CHANGELOG.md (valued mammal)\n\nPull request description:\n\n  Update `CHANGELOG.md` in preparation for release and bump the version to 3.1.0 in `Cargo.toml`.\n\n  Close #500\n\nTop commit has no ACKs.\n\nTree-SHA512: 9c563df1a955da550a537b08c2af1e49bddba2a2caacf0ec4cc803df309fa152fe0e30377dfc15638cee8c0cb9b59fa9dbbf5a61b46c37e43f9dacf4fe1ab3ee",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#501: Release 3.1.0",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-06-14T03:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a04e3b0727c64ef6063d70610c79c1145f31ed8",
          "body": "Signed-off-by: valued mammal <valuedmammal@protonmail.com>",
          "is_bot": false,
          "headline": "chore: Bump version to 3.1.0",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-06-14T03:25:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5912ef06bc82d0d0acb5ac0f6b09592c045664",
          "body": "Signed-off-by: valued mammal <valuedmammal@protonmail.com>",
          "is_bot": false,
          "headline": "chore: Update CHANGELOG.md",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-06-14T03:24:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8181e847e9a0cef8e63136ab0fd623e2ffc88a60",
          "body": "…th_signers\n\n35f753f357b5b80859d56bd3f03b39e73ead35e1 test(wallet): cover sign_with_signers (Noah Joeris)\n62cd294d6796b8f0f862abfc70c49875eab6c33b feat(wallet): add sign_with_signers (Noah Joeris)\n\nPull request description:\n\n  ### Description\n\n  Adds `Wallet::sign_with_signers`, allowing callers to \n[…]\nolima:\n    utACK 35f753f357b5b80859d56bd3f03b39e73ead35e1\n\nTree-SHA512: 4a0802d87de4150fdf132e7b650610e3ee6bb87b55531ae1d49cd26b1c9743ef668c4f266185e5240b079b2b6776674e4befa3ea284c5f5d331fdd96f5e89cbf",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#490: feat(wallet): add Wallet::sign_wi…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-06-09T15:15:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "83bf7c3b75f36698b6ecab0701f9341a41141b97",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6.0.0 to 7.0.0.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/c\n[…]\nndency-name: codecov/codecov-action\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump codecov/codecov-action from 6.0.0 to 7.0.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-08T03:53:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35f753f357b5b80859d56bd3f03b39e73ead35e1",
          "body": null,
          "is_bot": false,
          "headline": "test(wallet): cover sign_with_signers",
          "author_name": "Noah Joeris",
          "author_login": "noahjoeris",
          "committed_at": "2026-06-05T11:49:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62cd294d6796b8f0f862abfc70c49875eab6c33b",
          "body": null,
          "is_bot": false,
          "headline": "feat(wallet): add sign_with_signers",
          "author_name": "Noah Joeris",
          "author_login": "noahjoeris",
          "committed_at": "2026-06-04T17:16:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8e006f0b2fbac5ae56e84990fbeab6337c160e3",
          "body": "…klist items to contributing guide\n\n879b9865b2ebf2d0e4a2a2c6a7f843cb4581af6e docs: move PR checklist to contributing guide (Noah Joeris)\n\nPull request description:\n\n  ### Description\n\n  Suggests moving most pull request checklist items from the PR template into `CONTRIBUTING.md`, keeping checklist m\n[…]\ndMammal:\n    ACK 879b9865b2ebf2d0e4a2a2c6a7f843cb4581af6e\n\nTree-SHA512: 1f03e3534adf5709d856c41992e1ca78da07c856c9d2321c4b4781b876f2da6bbbbdd0778f308243f253422d523539198606110447ea4dbe2ed45d4300a1c8d5",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#492: docs: suggest moving most PR chec…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-06-04T15:56:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "879b9865b2ebf2d0e4a2a2c6a7f843cb4581af6e",
          "body": null,
          "is_bot": false,
          "headline": "docs: move PR checklist to contributing guide",
          "author_name": "Noah Joeris",
          "author_login": "noahjoeris",
          "committed_at": "2026-06-03T07:59:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39de6ed387af67b23a37c874edd0cd4f1daf8044",
          "body": "…ghashes in SignerWrapper::sign_input\n\n9e45c56246f1dacb0e3ffdea293eb8cdf85fe5e3 fix(signer): respect allow_all_sighashes in sign_input (Muhammad)\n\nPull request description:\n\n  <!-- You can erase any parts of this template not applicable to your Pull Request. -->\n\n  ### Description\n  `SignOptions::al\n[…]\n6246f1dacb0e3ffdea293eb8cdf85fe5e3; ran the tests locally\n\nTree-SHA512: 1f1b5ac699d028f70287c0d38e3d1740e92232000b75c437bad03e6b13fcce9b655e7f4094fbcba5b4b14a019f43abaede4fe8a644ae509aab9cd36809ad7a8b",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#476: fix(signer): respect allow_all_si…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-26T21:54:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2356e6e86f31f7e138d3e43a93b892f81114d9ee",
          "body": "…xo fee rounding\n\ndaf8d810a7e2bddd1bee5c1cedf38e9292f92bf5 fix(coin_selection): avoid per-utxo fee rounding (benthecarman)\n\nPull request description:\n\n  select_sorted_utxos computed fee_rate * weight per utxo and summed\n  the results. Because FeeRate * Weight ceils to whole sats, each\n  input added \n[…]\nll/479/commits/daf8d810a7e2bddd1bee5c1cedf38e9292f92bf5).\n\nTree-SHA512: 06a302ca0bbdce836901348f26da20d9576fc4e505d7b38d444aad8b0ede7f47f16b34cf05c9cf314f95c28e7f1236f21686b4898cb4740b6253802c817fcaa7",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#479: fix(coin_selection): avoid per-ut…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-26T21:35:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd164ad1e414541c5509c180f171f754cf19d86f",
          "body": "… explicit public descriptor checksum\n\n687c4153ef3d6627bc1d4428841baddfb4f87c5e docs(wallet): Improve docs for `wallet_name_from_descriptor` (valued mammal)\nc932b98a4566cf9dc5658b1acb2b653991bdf862 test(wallet): Add assertion for wallet name with change descriptor (valued mammal)\n18ea7eea45a9160d99e\n[…]\ndMammal:\n    ACK 687c4153ef3d6627bc1d4428841baddfb4f87c5e\n\nTree-SHA512: 02b50495136ae73226de5e6db446913b611c3d17cb9ba5f433ebca4af7144f7bc420e84db59d7a9eb5727277bd334f9bb0d58119cb36799126a8ff2518cdcd8d",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#482: Fix wallet name generation to use…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-26T17:30:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "687c4153ef3d6627bc1d4428841baddfb4f87c5e",
          "body": null,
          "is_bot": false,
          "headline": "docs(wallet): Improve docs for `wallet_name_from_descriptor`",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-26T17:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c932b98a4566cf9dc5658b1acb2b653991bdf862",
          "body": null,
          "is_bot": false,
          "headline": "test(wallet): Add assertion for wallet name with change descriptor",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-26T17:14:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18ea7eea45a9160d99e5557f6889b0b32792f7d8",
          "body": "…or checksums\n\n- Update `wallet_name_from_descriptor` to compute descriptor checksum explicitly\n- Remove reliance on `to_string()` implicitly containing `#checksum`\n- Clarify that wallet name is defined by public descriptor checksums\n- Add regression test for equivalent xpub/xprv wallet names",
          "is_bot": false,
          "headline": "feat(wallet): derive wallet_name_from_descriptor from public descript…",
          "author_name": "AmosOO7",
          "author_login": "AmosOO7",
          "committed_at": "2026-05-17T17:26:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dca318c9d29bec5bedfed27a6d36a21e6bc8204",
          "body": "…s in Utxo::txout for Foreign variant\n\nedb0f523da584cccf4a98a45fd4da707f19f8ade fix(types): avoid reachable panics in Utxo::txout for Foreign variant (Muhammad)\n\nPull request description:\n\n  ### Description\n\n  `Utxo::txout()` contained two reachable panics for the `Foreign` variant:\n\n  1. `prev_tx.o\n[…]\ndMammal:\n    ACK edb0f523da584cccf4a98a45fd4da707f19f8ade\n\nTree-SHA512: de4f81c355c0933843492ecf79610544192fbc3cd4c69de6148e64101658bdadd855fc983f8b4cae797ccfb6ea5cf2ca83a6d9d2ec034934674d88c122f0ab88",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#487: fix(types): avoid reachable panic…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-13T13:30:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edb0f523da584cccf4a98a45fd4da707f19f8ade",
          "body": null,
          "is_bot": false,
          "headline": "fix(types): avoid reachable panics in Utxo::txout for Foreign variant",
          "author_name": "Muhammad",
          "author_login": "muhahahmad68",
          "committed_at": "2026-05-13T11:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e45c56246f1dacb0e3ffdea293eb8cdf85fe5e3",
          "body": null,
          "is_bot": false,
          "headline": "fix(signer): respect allow_all_sighashes in sign_input",
          "author_name": "Muhammad",
          "author_login": "muhahahmad68",
          "committed_at": "2026-05-08T22:43:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b612f52f9a81333c88fa44bbd2e95d2f1840458",
          "body": "…validation for psbt\n\n217dd85509af0b00bfd957f932eefc7fc8c274f7 fix(psbt): add non-witness-utxo validation for get_utxo_for (Muhammad)\n\nPull request description:\n\n  <!-- You can erase any parts of this template not applicable to your Pull Request. -->\n\n  ### Description\n\n  This PR fixes a security vu\n[…]\ndMammal:\n    ACK 217dd85509af0b00bfd957f932eefc7fc8c274f7\n\nTree-SHA512: 78fe5f38c62818bdc83eb81fef40c0414cc46957299b8b661f92d8312d1212258f7f469d70326841111e8a7e554df397d0975fdd6605ad1c8906ba53e2d609b4",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#471: fix(audit): add non-witness-utxo …",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-08T19:22:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4532b7b6c345b42cbdf7f697f50e7a14f35771a",
          "body": "…acking in `combinations()` function\n\nd6bbe77a1fbf12fb28d23e4d53d0bd3f1691a2a6 fix(descriptor): correct index tracking in `combinations()` function (Elias Rohrer)\n\nPull request description:\n\n  ### Description\n\n  The combinations function was pushing `new_index` (the enumerate index relative to the s\n[…]\n7a1fbf12fb28d23e4d53d0bd3f1691a2a6; ran the tests locally\n\nTree-SHA512: f141296afe439d32c784780abea1978f44244b21d2951a68bdc167224deda48fa53c0ec931e223335e1b1d1d63fa9e5e0d5870c9d9fed59de5517941bd51cabb",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#453: fix(descriptor): correct index tr…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-08T19:11:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "daf8d810a7e2bddd1bee5c1cedf38e9292f92bf5",
          "body": "select_sorted_utxos computed fee_rate * weight per utxo and summed\nthe results. Because FeeRate * Weight ceils to whole sats, each\ninput added up to 0.999 sats of fractional fee. The error grew\nlinearly with the input count: at 1 sat/vb on 271-wu inputs\n(67.75 sat each), four inputs overpay by 1 sat\n[…]\nghing\nthe finished transaction and never exceeds the requested fee rate\nby more than one sat over the whole transaction.\n\nThis was found when comparing fee calculation differences between LDK\nand BDK.",
          "is_bot": false,
          "headline": "fix(coin_selection): avoid per-utxo fee rounding",
          "author_name": "benthecarman",
          "author_login": "benthecarman",
          "committed_at": "2026-05-08T18:26:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "217dd85509af0b00bfd957f932eefc7fc8c274f7",
          "body": null,
          "is_bot": false,
          "headline": "fix(psbt): add non-witness-utxo validation for get_utxo_for",
          "author_name": "Muhammad",
          "author_login": "muhahahmad68",
          "committed_at": "2026-05-08T14:02:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5fee0793cf03d6b95e21de6fa6e3ac7bb386959",
          "body": "…vation paths in PSBT key origins\n\n507f08a981e69a6c381f487b715c6a324638ea6b fix: avoid panic on hardened derivation paths in PSBT key origins (Elias Rohrer)\n\nPull request description:\n\n  ### Description\n  The verify_key closure in derive_from_psbt_key_origins called .expect() on xpub.derive_pub(), w\n[…]\na981e69a6c381f487b715c6a324638ea6b; ran the tests locally\n\nTree-SHA512: 4d796ff404f99fb86a49dcc0fce83c5e69499723a3f1ac447bb77518fd85bb45c7c84df4e9cfdc4840d010f2ec4d23cc841e735ee995014e6d88afc3bcf129d9",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#458: fix: avoid panic on hardened deri…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-05-05T18:47:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6fe715b7b8cde4cf46e3af7c7aa12dabfe90f52",
          "body": "67fa46eb0530bea7d755448b628788aae15c2191 feat(doc): add `SECURITY.md` (Luis Schwab)\n\nPull request description:\n\n  Closes #435\n\n  ## Changelog\n  ```\n  - Add `SECURITY.md` listing the PGP key to be used for vulnerability disclosures\n  ```\n\nACKs for top commit:\n  notmandatory:\n    tACK 67fa46eb0530bea7\n[…]\nrdolima:\n    ACK 67fa46eb0530bea7d755448b628788aae15c2191\n\nTree-SHA512: b1df75ecaf0e33667836a68c039339c16a30d997312e63232ca49e6a0b3eef64e8c134221eea8132feecc36c3f5e6a5ea6e1c119f6a4e5b3e12cae72232cb188",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#437: Add `SECURITY.md`",
          "author_name": "merge-script",
          "author_login": "oleonardolima",
          "committed_at": "2026-05-05T13:54:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6bbe77a1fbf12fb28d23e4d53d0bd3f1691a2a6",
          "body": "The combinations function was pushing `new_index` (the enumerate index\nrelative to the skipped iterator) instead of `index + 1 + new_index`\n(the absolute index in the original vec). This caused duplicate and\nincorrect combinations to be generated for inputs larger than trivial\nsizes.\n\nCo-Authored-By: HAL 9000\nSigned-off-by: Elias Rohrer <dev@tnull.de>",
          "is_bot": false,
          "headline": "fix(descriptor): correct index tracking in `combinations()` function",
          "author_name": "Elias Rohrer",
          "author_login": "tnull",
          "committed_at": "2026-05-01T00:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9ad3b958e5c44768095ab85d33a3ea37a9b7d79",
          "body": "…n network kind detection and fixup\n\nda6c61d50b6360b09352b04086e0ed6916c5a50d fix: handle MultiXPrv/MultiXPub in network kind detection and fixup (Elias Rohrer)\n\nPull request description:\n\n  ### Description\n\n  The IntoDescriptorKey impl for DescriptorSecretKey was missing a MultiXPrv match arm, caus\n[…]\nsschwab:\n    ACK da6c61d50b6360b09352b04086e0ed6916c5a50d\n\nTree-SHA512: 1aa30d45d04ee0d287c069ca1599fa417e1dfcc20e157e9f68b9b5e051a3b3ecbcea2f9dd3fb9cbc00373a9bf6d89a1e4d8147e2f571071aca392816dac6b2e3",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#459: fix: handle MultiXPrv/MultiXPub i…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-30T21:07:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "46f3ba0188eaea3ab572a6ea41c21b872ad821ee",
          "body": "…utxo in add_foreign_utxo\n\nf0302e9760b63565c81aaae86af407f1d9a7074a fix: always validate non_witness_utxo in add_foreign_utxo (Elias Rohrer)\n\nPull request description:\n\n  ### Description\n  Previously, non_witness_utxo was only validated when witness_utxo was None. An attacker could supply both a val\n[…]\nolima:\n    utACK f0302e9760b63565c81aaae86af407f1d9a7074a\n\nTree-SHA512: 953527cafc898ba9ea955bfbddcf58605a84d70e712f93e3b07753a41bf358dbdcc00c815483cf5f41169632f28773a74d1f6c44bc14517903092e2fd15f15b9",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#461: fix: always validate non_witness_…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-30T20:25:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db1eab42db6c75c1d15641825511115c7dbbc248",
          "body": "….2.1`\n\nd3fe261679caa76a604ed950c248b7e7982408ef fix(ci): pin `idna_adapter` to `1.2.1` (Leonardo Lima)\n\nPull request description:\n\n  ### Description\n\n  It fixes the MSRV CI by pining `idna_adapter`.\n\n  ### Notes to the reviewers\n\n  I noticed it's broken after merging #441, this PR should fix it.\n\n \n[…]\nsschwab:\n    ACK d3fe261679caa76a604ed950c248b7e7982408ef\n\nTree-SHA512: 92526486fd4719715e8a63eed007701094d5369afa51b98ebf5d5f98a3c043c9360b9f8ac82c234bbed402e4b89d53a8c49dd523b8663d4033bf6067179f13a5",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#466: fix(ci): pin `idna_adapter` to `1…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-28T04:29:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3fe261679caa76a604ed950c248b7e7982408ef",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): pin `idna_adapter` to `1.2.1`",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-04-27T19:17:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ec014604265fad4367747cd8041c08303057afc",
          "body": "…alpha.0\n\nc55875d5483261e99a9e417c04276ce3999b68dc chore: bump rust-toolchain to 1.95.0 (valued mammal)\ned044de800c855459de49b40f621169f543c6546 chore: bump dev version to 3.1.0-alpha.0 (valued mammal)\n\nPull request description:\n\n  ### Description\n\n  This PR bumps the package version in `Cargo.toml`\n[…]\nrdolima:\n    ACK c55875d5483261e99a9e417c04276ce3999b68dc\n\nTree-SHA512: 4cfa1e9bb4c9318a6eb5f883776e5eb5a00386f4488e68369052d85517fb65b2e5a6fc0d6e88b81db94908abf094824bbc0d7cf804f5cf2e15e15ff23640a694",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#441: chore: bump dev version to 3.1.0-…",
          "author_name": "merge-script",
          "author_login": "oleonardolima",
          "committed_at": "2026-04-27T19:01:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c55875d5483261e99a9e417c04276ce3999b68dc",
          "body": "Clean up unused code in `test_get_funded_wallet_sent_and_received`.",
          "is_bot": false,
          "headline": "chore: bump rust-toolchain to 1.95.0",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-27T11:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f44b7af09b776499773703453cd5960b06456396",
          "body": "…ides\n\n68dccaff28fa2a92ca158d1ac95b41b3221e326c chore: allow local justfile overrides (Saad Hassan)\n\nPull request description:\n\n  ### Description\n\n  Closes #401\n\n  Adds support for local justfile overrides by including an optional `justfile.local` import at the top of the repository justfiles.\n\n  Th\n[…]\nCK 68dccaff28fa2a92ca158d1ac95b41b3221e326c. Works great!\n\nTree-SHA512: a4720c33749df587ba9671c254c6114ef8ea0e0170e607a770cc0f00a690a0db9dc3bdc4566441d654b8c2aeef75f9c8f21112313a7592e8e37e51b0c8858d54",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#460: chore: allow local justfile overr…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-24T21:12:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed044de800c855459de49b40f621169f543c6546",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump dev version to 3.1.0-alpha.0",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-24T16:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0217d85764b6c682c50f8b23ef475fbb81612445",
          "body": "… binding names in `l:` and `u:` fragment modifiers\n\n5d158a4e064a00b1d15090cfa2e548be01c71a85 fix(descriptor): correct variable binding names in `l:` and `u:` fragment modifiers (Elias Rohrer)\n\nPull request description:\n\n  ### Description\n  The `l:` arm bound `a_networks_kinds` but referenced `a_net\n[…]\n4e064a00b1d15090cfa2e548be01c71a85; ran the tests locally\n\nTree-SHA512: b69f2832a077dd798e488962ff7bbd44ef660704941e40b2ad82d9c91629627740842e3393d82e317ab537c0afe4ef7674a3ee18b63337674fc24808f0145959",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#454: fix(descriptor): correct variable…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-24T16:08:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d158a4e064a00b1d15090cfa2e548be01c71a85",
          "body": "…ment modifiers\n\nThe `l:` arm bound `a_networks_kinds` but referenced `a_network_kinds`,\nand the `u:` arm bound `a_networks` but referenced `a_network_kinds`.\nBoth closures silently captured the wrong variable from an outer scope,\nwhich could produce incorrect network kind filtering results.\n\nCo-Authored-By: HAL 9000\nSigned-off-by: Elias Rohrer <dev@tnull.de>",
          "is_bot": false,
          "headline": "fix(descriptor): correct variable binding names in `l:` and `u:` frag…",
          "author_name": "Elias Rohrer",
          "author_login": "tnull",
          "committed_at": "2026-04-24T14:59:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0302e9760b63565c81aaae86af407f1d9a7074a",
          "body": "Previously, non_witness_utxo was only validated when witness_utxo was\nNone. An attacker could supply both a valid witness_utxo and a\nnon_witness_utxo with the wrong txid, bypassing the txid/outpoint\nchecks entirely.\n\nRestructure the validation so non_witness_utxo is always checked when\npresent, regardless of whether witness_utxo is also set. Only require\nat least one of the two to exist.\n\nCo-Authored-By: HAL 9000\nSigned-off-by: Elias Rohrer <dev@tnull.de>",
          "is_bot": false,
          "headline": "fix: always validate non_witness_utxo in add_foreign_utxo",
          "author_name": "Elias Rohrer",
          "author_login": "tnull",
          "committed_at": "2026-04-24T07:54:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da6c61d50b6360b09352b04086e0ed6916c5a50d",
          "body": "The IntoDescriptorKey impl for DescriptorSecretKey was missing a\nMultiXPrv match arm, causing mainnet MultiXPrv keys to fall through\nto the catch-all and receive test_network_kind() instead of\nmainnet_network_kind().\n\nAlso add MultiXPub/MultiXPrv handling to the network fixup code in\ndescriptor/mod.rs, which previously only fixed up XPub/XPrv pairs.\n\nCo-Authored-By: HAL 9000\nSigned-off-by: Elias Rohrer <dev@tnull.de>",
          "is_bot": false,
          "headline": "fix: handle MultiXPrv/MultiXPub in network kind detection and fixup",
          "author_name": "Elias Rohrer",
          "author_login": "tnull",
          "committed_at": "2026-04-24T07:52:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "507f08a981e69a6c381f487b715c6a324638ea6b",
          "body": "The verify_key closure in derive_from_psbt_key_origins called\n.expect() on xpub.derive_pub(), which panics when the derivation\npath contains hardened steps. Since PSBT data is untrusted, a\nmaliciously crafted bip32_derivation entry with hardened steps could\ncrash the application.\n\nReplace the panic with graceful error handling by returning false\non derivation failure.\n\nCo-Authored-By: HAL 9000\nSigned-off-by: Elias Rohrer <dev@tnull.de>",
          "is_bot": false,
          "headline": "fix: avoid panic on hardened derivation paths in PSBT key origins",
          "author_name": "Elias Rohrer",
          "author_login": "tnull",
          "committed_at": "2026-04-24T07:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68dccaff28fa2a92ca158d1ac95b41b3221e326c",
          "body": null,
          "is_bot": false,
          "headline": "chore: allow local justfile overrides",
          "author_name": "Saad Hassan",
          "author_login": "Shgit29",
          "committed_at": "2026-04-24T07:50:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35a87f3fd9a40d8882c15e2cb96517fb54a5e77f",
          "body": "…FeeRate::from_sat_per_vb_unchecked\n\nbe710a80c694391428a853eee61fe3967ed05034 chore(tests): replace deprecated FeeRate::from_sat_per_vb_unchecked (none34829)\n\nPull request description:\n\n  ### Description\n\n  `bitcoin-units 0.1.3` deprecated `FeeRate::from_sat_per_vb_unchecked` in favor of `FeeRate::f\n[…]\ndMammal:\n    ACK be710a80c694391428a853eee61fe3967ed05034\n\nTree-SHA512: b2354fcf6e39228bc5796f92af4d3692fbdb750267c2c5a7d814fc5c84f4af64b746562fda7e01dac282ba04acb17ff7bf5c7ef0155a3d6f302974003baf0629",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#455: chore(tests): replace deprecated …",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-23T20:50:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be710a80c694391428a853eee61fe3967ed05034",
          "body": null,
          "is_bot": false,
          "headline": "chore(tests): replace deprecated FeeRate::from_sat_per_vb_unchecked",
          "author_name": "none34829",
          "author_login": "none34829",
          "committed_at": "2026-04-23T20:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44abb689042ca3fb9b6a182bdeb9eaccd682fff6",
          "body": "…s_result` returns the required UTXOs first\n\n8a5e76309b54443c65d7a89aa36ab2fa9b8d3e3a test(tx_builder): Add `test_add_utxo_final_outpoint_retained` (valued mammal)\n0b5d92702b0666f9f5aa2a57a8f77b9f67228dcb test(wallet): Add `test_tx_ordering_untouched_preserves_insertion_ordering_bnb_success` (valued\n[…]\nll/390/commits/8a5e76309b54443c65d7a89aa36ab2fa9b8d3e3a).\n\nTree-SHA512: 4ebf33f7d1fe6e6dcfff89e218aeefcec92ae8ae78c2589d7f496b433991122f48100be38ffa52b8fc2d67feb679d567a707dea8681810167eac1a6a04f9dcc0",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#390: fix(coin_selection): `calculate_c…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-22T20:18:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbf803a6bb4aa8a1d097ef6673acfbf1a1c612ba",
          "body": "…comment in `create_tx`\n\n76a8cc6da25fcc40dc17cd29b4ca5677d47a604f docs(wallet): fix misleading RBF comment in `create_tx` (Vadim Anufriev)\n\nPull request description:\n\n  ### Description\n\n  Fix misleading comment in `create_tx` regarding empty tx output logic. This addresses a documentation nitpick br\n[…]\nsschwab:\n    ACK 76a8cc6da25fcc40dc17cd29b4ca5677d47a604f\n\nTree-SHA512: 6a788ffafbf195da2b6ef39b605319aec480dea8896dedc38a0244e3902e7f697611725ddfe81ca25204916802b4a6c5784d96ee1e78d21a003acdd3d8ef081f",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#422: docs(wallet): fix misleading RBF …",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-14T22:52:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f5a4c3856acd7095f5af7cab6c399fb5f15cefe1",
          "body": "…o_path_descriptor` method\n\nc4dbe422cd703c02cf3842264d140772be9575b2 feat(wallet): add `LoadParams::two_path_descriptor` method (Yuki Kishimoto)\n\nPull request description:\n\n  ### Description\n\n  Added `LoadParams::two_path_descriptor` to validate that both the external and internal wallet descriptors\n[…]\n Dmenec:\n    ACK c4dbe422cd703c02cf3842264d140772be9575b2\n\nTree-SHA512: 7afe2cf7b6752fa7e52f5f47b5066e8ea5af894dbcb1df9c0cdfecf7eaffa43158b2cd5fc225d7892ec01933ea88e0dadd8700de92688911809727ad5283bb6f",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#418: feat(wallet): add `LoadParams::tw…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-14T22:26:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf543ff6abace57bb3a2d023efd8ac4af9a4f690",
          "body": "…nection` persister to transaction persister\n\nb8dfff80fbc24872aae01ac5be62da5e8e680de3 refactor: Delegate Connection persister to transaction persister (shinigami-777)\n\nPull request description:\n\n  Fixes #279\n\n  ### Description\n\n  The `WalletPersister` implementations for `rusqlite::Connection` and \n[…]\ndMammal:\n    ACK b8dfff80fbc24872aae01ac5be62da5e8e680de3\n\nTree-SHA512: 0bf12f10f6173a77f3e204ae01d05b3b87926dff3ec0cc4e4dd1a3d2eb6b6885900c52cf272ac1953ad6038722515c532b29ba8b3f5e5271fa635f1ac59cf06c",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#421: refactor: Delegate `rusqlite::Con…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-14T22:15:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b8dfff80fbc24872aae01ac5be62da5e8e680de3",
          "body": null,
          "is_bot": false,
          "headline": "refactor: Delegate Connection persister to transaction persister",
          "author_name": "shinigami-777",
          "author_login": "shinigami-777",
          "committed_at": "2026-04-14T21:33:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5df32ca707e859506e8198f1f102aed87a837bf0",
          "body": "34931fc9be059ec14d7bf101d9d16e04633d324a chore: Release 3.0.0 (valued mammal)\n8a9faa8bb77550b9303601232dbc4c1b3203f7a6 chore: Update CHANGELOG.md (valued mammal)\n42c34d4883dffc9a54ff1fe3d7ff4772f4448e4f deps: Update bdk dependencies (valued mammal)\n\nPull request description:\n\n  ### Description\n\n  Th\n[…]\nsschwab:\n    ACK 34931fc9be059ec14d7bf101d9d16e04633d324a\n\nTree-SHA512: 2b05fc555a0c40ebcc256615e408164fc3ce1644fd0def40ac2460e2fab22ee97d7c179612fedde56db40d5ac8c36d9ba2c3cf1e0883afb31d44d4f3a0889633",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#432: chore: Release 3.0.0",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-13T01:29:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67fa46eb0530bea7d755448b628788aae15c2191",
          "body": "Add a `SECURITY.md` listing the security PGP key to be used for disclosures:",
          "is_bot": false,
          "headline": "feat(doc): add `SECURITY.md`",
          "author_name": "Luis Schwab",
          "author_login": "luisschwab",
          "committed_at": "2026-04-10T19:24:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76a8cc6da25fcc40dc17cd29b4ca5677d47a604f",
          "body": "- Replace incorrect RBF example with sweeping UTXOs\n- Reorder comment items to match the code's condition order",
          "is_bot": false,
          "headline": "docs(wallet): fix misleading RBF comment in `create_tx`",
          "author_name": "Vadim Anufriev",
          "author_login": null,
          "committed_at": "2026-04-07T11:43:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34931fc9be059ec14d7bf101d9d16e04633d324a",
          "body": null,
          "is_bot": false,
          "headline": "chore: Release 3.0.0",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-06T19:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a9faa8bb77550b9303601232dbc4c1b3203f7a6",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update CHANGELOG.md",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-06T19:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42c34d4883dffc9a54ff1fe3d7ff4772f4448e4f",
          "body": "`bdk_chain` 0.23.2 -> 0.23.3\n`bdk_file_store` 0.21.1 -> 0.22.0\n`bdk_bitcoind_rpc` 0.21.0 -> 0.22.0",
          "is_bot": false,
          "headline": "deps: Update bdk dependencies",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-06T18:44:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb7681ab83634dd7cc71b4908b385e38b8db6bef",
          "body": "8b4a51ec9408b238184b353415a118b62a223e4d fix(docs): use correct `intra-doc-links` (Leonardo Lima)\ndbf3d8e5f1ebe55dbb2cd92c41e08decfd24421d ci: add job to check `cargo doc` (Leonardo Lima)\n2f2346e58ed10e4b0865940b4db6ff7a3cbb933a fix(ci): pin required `icu_*` dependencies (Leonardo Lima)\n\nPull reques\n[…]\nsschwab:\n    ACK 8b4a51ec9408b238184b353415a118b62a223e4d\n\nTree-SHA512: 9fbe0190776c348867b13c06ec6f2c272fe5ee41995f3ff5898b7d149affc5e602d8afa06669702af7a04ad15bb2a7c940110830cd7e11116c4974ceda423877",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#416: ci: add docs check job",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-04-02T17:03:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b4a51ec9408b238184b353415a118b62a223e4d",
          "body": null,
          "is_bot": false,
          "headline": "fix(docs): use correct `intra-doc-links`",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-04-02T14:47:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbf3d8e5f1ebe55dbb2cd92c41e08decfd24421d",
          "body": null,
          "is_bot": false,
          "headline": "ci: add job to check `cargo doc`",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-04-02T14:47:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f2346e58ed10e4b0865940b4db6ff7a3cbb933a",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): pin required `icu_*` dependencies",
          "author_name": "Leonardo Lima",
          "author_login": "oleonardolima",
          "committed_at": "2026-04-02T14:47:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a5e76309b54443c65d7a89aa36ab2fa9b8d3e3a",
          "body": "Check that for repeated calls to `add_utxo`, given the same outpoint,\nthe final insertion takes effect.\n\nConsolidate `use` statements in `tx_builder::test` mod.\n\nCo-authored-by: codingp110 <codingp110@gmail.com>",
          "is_bot": false,
          "headline": "test(tx_builder): Add `test_add_utxo_final_outpoint_retained`",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T17:32:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b5d92702b0666f9f5aa2a57a8f77b9f67228dcb",
          "body": "…ering_bnb_success`\n\nThe test is set up in such a way that BnB can find a solution\nand demonstrates that `calculate_cs_result` correctly places\nrequired UTXOs before selected ones.",
          "is_bot": false,
          "headline": "test(wallet): Add `test_tx_ordering_untouched_preserves_insertion_ord…",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T17:32:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e020391c8e7f2feb4e74ceae4652db9006afb778",
          "body": "… first\n\nPreviously `calculate_cs_result` produced a CoinSelectionResult by\nappending the required utxos onto the selected ones, which changed\nthe order of transaction inputs when TxOrdering::Untouched was\nspecified. The intended behavior is for the order of the inputs\nto match the order in which the utxos were added to the TxBuilder.\nWe fix this by extending the required_utxos Vec with the\nselected_utxos before returning the CoinSelectionResult.",
          "is_bot": false,
          "headline": "fix(coin_selection): `calculate_cs_result` returns the required UTXOs…",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T17:32:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "826b19f59086b954cc300c0378f372720be4fab9",
          "body": "…-action from 5.5.2 to 6.0.0\n\nf3dfc2d706b435326d1271c00105f723df9e3462 build(deps): bump codecov/codecov-action from 5.5.2 to 6.0.0 (dependabot[bot])\n\nPull request description:\n\n  Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.2 to 6.0.0.\n  <details>\n  <summary>Re\n[…]\ndMammal:\n    ACK f3dfc2d706b435326d1271c00105f723df9e3462\n\nTree-SHA512: 35ace2b145609ae439323ae8666cf1ed8180bb91a1b9b3604e750de733507f5a9bbbeb81db93cf3be0b3713159d763144283ac28b5628da31fd7c1870beae8ea",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#424: build(deps): bump codecov/codecov…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T16:34:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ad0a5d14dea0d66c0eaf54be26b22de459e6c7b6",
          "body": "…ache from 2.8.2 to 2.9.1\n\n2c637ae58ce42dfebcc8758a5d5dd31e7286d5c9 build(deps): bump Swatinem/rust-cache from 2.8.2 to 2.9.1 (dependabot[bot])\n\nPull request description:\n\n  Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.8.2 to 2.9.1.\n  <details>\n  <summary>Release notes<\n[…]\ndMammal:\n    ACK 2c637ae58ce42dfebcc8758a5d5dd31e7286d5c9\n\nTree-SHA512: 0d6f5141adea83969a93cfeded1b15d491b61e22c0116e7c774bb2a1f2b55e4aeb20b1d3d8710070b59b6c282c47e4926fe29e60086cf21d8bae86aa76ecf445",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#406: build(deps): bump Swatinem/rust-c…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T16:07:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea9d1e54fce5f8812d0b51f58d4baca381881eb5",
          "body": "…artifact from 6 to 7\n\ne941d06ea2dd5fb357719855f790893c32dd8a72 build(deps): bump actions/upload-artifact from 6 to 7 (dependabot[bot])\n\nPull request description:\n\n  Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.\n  <details>\n  <summary>Release notes</summary\n[…]\ndMammal:\n    ACK e941d06ea2dd5fb357719855f790893c32dd8a72\n\nTree-SHA512: de417542392d54d29e6ef1c0e7016b34ae09fc1ffe42759cb48e526da63b43ccd2dc67c5b473a9da6e6b0b0b2a546719243ad87c4d3f8792b8ec128e7d0feea9",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#389: build(deps): bump actions/upload-…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T15:37:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf547c8d029e1304cfb323f40c2110bb8d4329c2",
          "body": "…ble (1.94.0)\n\nd16fa8c5ea9b67d9e4950d86722626912fa6f3d7 build: Bump Rust compiler version to stable (1.94.0) (thunderbiscuit)\n\nPull request description:\n\n  This is just a bump of the default compiler version specified in `rust-toolchain.toml` to [1.94.0, the latest stable](https://releases.rs/).\n\nAC\n[…]\ndMammal:\n    ACK d16fa8c5ea9b67d9e4950d86722626912fa6f3d7\n\nTree-SHA512: daa1f073e3b1c722efea1aa2e8d11fefb47451e2569ca106457baebcac3820340222d4a8292bd7e7a164d9604752f32b33c2f377018365e1ed866bdb0ab94517",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#407: Bump Rust compiler version to sta…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-30T13:36:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3dfc2d706b435326d1271c00105f723df9e3462",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.2 to 6.0.0.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/c\n[…]\nndency-name: codecov/codecov-action\n  dependency-version: 6.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump codecov/codecov-action from 5.5.2 to 6.0.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-30T03:55:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4dbe422cd703c02cf3842264d140772be9575b2",
          "body": "Signed-off-by: Yuki Kishimoto <yukikishimoto@protonmail.com>",
          "is_bot": false,
          "headline": "feat(wallet): add `LoadParams::two_path_descriptor` method",
          "author_name": "Yuki Kishimoto",
          "author_login": "yukibtc",
          "committed_at": "2026-03-28T08:01:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e202c8c6f376dbe00c3c38623670f2e6f1fd44a",
          "body": "79783c5e6fa2cb1914d80122acf787d659c15af7 chore: bump version to `3.0.0-rc.2` (valued mammal)\nd8f6fa38fe3950a9efb72e2502de278c0dc48e41 chore: Update `CHANGELOG.md` (valued mammal)\n\nPull request description:\n\n  ### Description\n\n  Update the `CHANGELOG.md` with merged PRs since `3.0.0-rc.1` ([compare](\n[…]\nrdolima:\n    ACK 79783c5e6fa2cb1914d80122acf787d659c15af7\n\nTree-SHA512: b62dc2d549540da9a8f8c3a2f4c4f91ef6fe691638007bd8083476998d71cbb8c6cbf0145b711b8b21f875a2a70883563e46ed9c838907c25076b1ebd981fe17",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#417: chore: bump version to `3.0.0-rc.2`",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-25T23:51:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79783c5e6fa2cb1914d80122acf787d659c15af7",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to `3.0.0-rc.2`",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-25T17:00:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8f6fa38fe3950a9efb72e2502de278c0dc48e41",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update `CHANGELOG.md`",
          "author_name": "valued mammal",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-25T17:00:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb2c7edca80f32c7aeb443684367eaec3146f69d",
          "body": "…et_keychains migration helper\n\nc73097363aa1ed801bf10fea3bf54742ea68b70c fix(rusqlite): fix get_pre_v1_wallet_keychains migration helper (Steve Myers)\n\nPull request description:\n\n  ### Description\n\n  While working on bitcoindevkit/book-of-bdk#141 I found some very rough edges with how I'd implemente\n[…]\ndolima:\n    tACK c73097363aa1ed801bf10fea3bf54742ea68b70c\n\nTree-SHA512: bcc4f51522cb2260a4d393c65091a931d90a5b910906d967d660104be3805677b6afb4976bd23f9f2da209d879d7031f9b11ddb5d1e9b6f8136b344f16cc324d",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#411: fix(rusqlite): fix get_pre_1_wall…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-23T22:34:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c73097363aa1ed801bf10fea3bf54742ea68b70c",
          "body": "- add PreV1MigrationError\n- rename Pre1WalletKeychain to PreV1WalletKeychain\n- rename get_pre_1_wallet_keychains to get_pre_v1_wallet_keychains\n- change PreV1WalletKeychain::keychain to KeychainKind\n- change PreV1WalletKeychain::checksum to String\n- refactored and expanded migration tests with LLM 🤖\n- style: require `rusqlite` feature in migration mod\n- apply `[cfg(feature = \"rusqlite\")] for `migration` module instead of\n  having multiple ones in `migration.rs`.",
          "is_bot": false,
          "headline": "fix(rusqlite): fix get_pre_v1_wallet_keychains migration helper",
          "author_name": "Steve Myers",
          "author_login": "notmandatory",
          "committed_at": "2026-03-23T20:34:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d4adae088068076d5a8b57e29a764e199b7c36d",
          "body": "…Time` without panicking\n\n6980403a77788f2e131dfe625049a8ed429e889b fix(dsl): handle invalid AbsLockTime without panicking (AmosOO7)\n\nPull request description:\n\n  ## Summary\n  This PR fixes a potential panic in the descriptor! DSL macro when provided with an invalid absolute locktime. Previously, the\n[…]\ndMammal:\n    ACK 6980403a77788f2e131dfe625049a8ed429e889b\n\nTree-SHA512: aa0b90261a90c55ce9777dc4ec8009701a42716a4a5b6d46d94005185e9a85d904f70b2cbcab2f464e42e3e6360c4eec1b306f1cce887ce6d36638ced43b8a83",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#409: fix(dsl): handle invalid `AbsLock…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-20T06:09:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6980403a77788f2e131dfe625049a8ed429e889b",
          "body": "Previously, the `after()` macro in the descriptor DSL used `.expect()`\nwhen calling `AbsLockTime::from_consensus()`. This caused the macro to\npanic and crash the program if an invalid value was provided.\n\nThis commit:\n- Updates the `after()` macro rule to handle `Result` from `from_consensus`.\n- Map\n[…]\nAdds comprehensive unit tests for valid heights, timestamps, and\ninvalid boundary values.\n\nFixes a potential panic when using the `descriptor!` macro with untrusted\nor out-of-range absolute locktimes.",
          "is_bot": false,
          "headline": "fix(dsl): handle invalid AbsLockTime without panicking",
          "author_name": "AmosOO7",
          "author_login": "AmosOO7",
          "committed_at": "2026-03-20T06:03:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9104442a62ad20f242af4134d97c8ca58ddc7c1",
          "body": "…Time` without panicking\n\ne101b9ee43b9826aba96feee60b0018a0796ef8f fix(dsl): handle invalid RelLockTime without panicking (AmosOO7)\n\nPull request description:\n\n  ## Summary\n\n  This PR fixes a panic that occurred when the `descriptor!` DSL macro was invoked with an out-of-range relative locktime valu\n[…]\ndMammal:\n    ACK e101b9ee43b9826aba96feee60b0018a0796ef8f\n\nTree-SHA512: 5003ed99ef55582f1444611e987314af4e7df3d485fbf14088c6df3299ca52d3e62333d5d002f8e01068b90b2b65c91d4bccf78505a4f303ebbfbc30aaee9cff",
          "is_bot": false,
          "headline": "Merge bitcoindevkit/bdk_wallet#404: fix(dsl): handle invalid `RelLock…",
          "author_name": "merge-script",
          "author_login": "ValuedMammal",
          "committed_at": "2026-03-20T05:28:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e101b9ee43b9826aba96feee60b0018a0796ef8f",
          "body": "The `descriptor!` DSL previously used `.expect(\"valid RelLockTime\")`\nwhen converting an integer into `miniscript::RelLockTime`, causing a\npanic for out-of-range values (e.g. values with the high bit set).\n\nThis change returns\n`DescriptorError::Miniscript(Error::RelativeLockTimeError)` for\ninvalid values, so callers can handle errors cleanly instead of\ncrashing.\n\nIncludes new tests verifying valid/invalid values and ensuring the\nmacro no longer panics.\n\nRan cargo fmt and cargo clippy, and just p",
          "is_bot": false,
          "headline": "fix(dsl): handle invalid RelLockTime without panicking",
          "author_name": "AmosOO7",
          "author_login": "AmosOO7",
          "committed_at": "2026-03-20T05:16:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d16fa8c5ea9b67d9e4950d86722626912fa6f3d7",
          "body": null,
          "is_bot": false,
          "headline": "build: Bump Rust compiler version to stable (1.94.0)",
          "author_name": "thunderbiscuit",
          "author_login": "thunderbiscuit",
          "committed_at": "2026-03-16T14:05:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 240,
      "latest_release_at": "2026-06-14T03:57:03Z",
      "latest_release_tag": "v3.1.0",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 46,
      "days_since_latest_release": 42,
      "mean_days_between_releases": 42.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "bdk_wallet",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "bitcoin",
            "descriptor",
            "psbt",
            "wallet"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/bdk_wallet",
          "is_deprecated": false,
          "latest_version": "3.1.0",
          "repository_url": "https://github.com/bitcoindevkit/bdk_wallet",
          "versions_count": 23,
          "total_downloads": 1079408,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 116892,
          "first_published_at": "2024-02-06T15:26:35.643118Z",
          "latest_published_at": "2026-06-14T03:51:37.668443Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 42
        }
      ]
    },
    "popularity": {
      "forks": 95,
      "stars": 54,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2025-04-03",
            "count": 3
          },
          {
            "date": "2025-04-05",
            "count": 1
          },
          {
            "date": "2025-04-06",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-04-08",
            "count": 2
          },
          {
            "date": "2025-04-09",
            "count": 1
          },
          {
            "date": "2025-04-10",
            "count": 1
          },
          {
            "date": "2025-04-12",
            "count": 1
          },
          {
            "date": "2025-04-17",
            "count": 2
          },
          {
            "date": "2025-04-24",
            "count": 3
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2025-05-02",
            "count": 2
          },
          {
            "date": "2025-05-09",
            "count": 2
          },
          {
            "date": "2025-05-19",
            "count": 1
          },
          {
            "date": "2025-05-31",
            "count": 1
          },
          {
            "date": "2025-06-02",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-06-11",
            "count": 1
          },
          {
            "date": "2025-06-27",
            "count": 1
          },
          {
            "date": "2025-07-02",
            "count": 1
          },
          {
            "date": "2025-07-04",
            "count": 1
          },
          {
            "date": "2025-07-20",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 1
          },
          {
            "date": "2025-08-05",
            "count": 1
          },
          {
            "date": "2025-08-06",
            "count": 1
          },
          {
            "date": "2025-08-11",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 1
          },
          {
            "date": "2025-10-02",
            "count": 2
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2025-10-29",
            "count": 1
          },
          {
            "date": "2025-11-06",
            "count": 1
          },
          {
            "date": "2025-11-11",
            "count": 1
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-26",
            "count": 2
          },
          {
            "date": "2025-12-31",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 1
          },
          {
            "date": "2026-01-15",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-08",
            "count": 2
          },
          {
            "date": "2026-02-11",
            "count": 1
          },
          {
            "date": "2026-02-20",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 1
          },
          {
            "date": "2026-02-25",
            "count": 1
          },
          {
            "date": "2026-03-01",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-03-07",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 2
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 3
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 1
          },
          {
            "date": "2026-04-23",
            "count": 2
          },
          {
            "date": "2026-04-24",
            "count": 2
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 2
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-12",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-26",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 95,
        "total_forks": 95
      },
      "star_history": null,
      "open_issues_and_prs": 194
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "examples/justfile",
        "justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml"
      ],
      "largest_source_bytes": 165781,
      "source_files_sampled": 45,
      "oversized_source_files": 4,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "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": 19,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "bdk_chain",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.23.3"
        },
        {
          "name": "bdk_tx",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.0"
        },
        {
          "name": "bitcoin",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.32.8"
        },
        {
          "name": "miniscript",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "12.3.5"
        },
        {
          "name": "rand_core",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.6.4"
        },
        {
          "name": "serde_json",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "anyhow",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "bdk_file_store",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22.0"
        },
        {
          "name": "bip39",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.2.2"
        },
        {
          "name": "tempfile",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.26.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "anyhow",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_chain",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_file_store",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_tx",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bip39",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bitcoin",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "miniscript",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rand_core",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde_json",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tempfile",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "assert_matches",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_bitcoind_rpc",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_electrum",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bdk_esplora",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "clap",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "ctrlc",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rand",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 19,
        "direct_count": 11,
        "indirect_count": 8
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 40,
        "merged_prs": 134,
        "open_issues": 154,
        "closed_ratio": 0.452,
        "closed_issues": 127,
        "closed_unmerged_prs": 48
      },
      "bus_factor": 3,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "notmandatory",
          "commits": 593,
          "avatar_url": "https://avatars.githubusercontent.com/u/4724730?v=4"
        },
        {
          "type": "User",
          "login": "afilini",
          "commits": 451,
          "avatar_url": "https://avatars.githubusercontent.com/u/3058409?v=4"
        },
        {
          "type": "User",
          "login": "evanlinjin",
          "commits": 422,
          "avatar_url": "https://avatars.githubusercontent.com/u/14065705?v=4"
        },
        {
          "type": "User",
          "login": "ValuedMammal",
          "commits": 293,
          "avatar_url": "https://avatars.githubusercontent.com/u/95981133?v=4"
        },
        {
          "type": "User",
          "login": "danielabrozzoni",
          "commits": 175,
          "avatar_url": "https://avatars.githubusercontent.com/u/25042473?v=4"
        },
        {
          "type": "User",
          "login": "LLFourn",
          "commits": 151,
          "avatar_url": "https://avatars.githubusercontent.com/u/3734083?v=4"
        },
        {
          "type": "User",
          "login": "RCasatta",
          "commits": 92,
          "avatar_url": "https://avatars.githubusercontent.com/u/6470319?v=4"
        },
        {
          "type": "User",
          "login": "luisschwab",
          "commits": 49,
          "avatar_url": "https://avatars.githubusercontent.com/u/97608688?v=4"
        },
        {
          "type": "User",
          "login": "tcharding",
          "commits": 49,
          "avatar_url": "https://avatars.githubusercontent.com/u/12626037?v=4"
        },
        {
          "type": "User",
          "login": "oleonardolima",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/16902160?v=4"
        }
      ],
      "contributors_sampled": 98,
      "top_contributor_share": 0.22
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "audit.yml",
        "code_coverage.yml",
        "cont_integration.yml",
        "stale.yml",
        "zizmor.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": 4,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
            "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": 7,
            "reason": "Found 5/7 approved changesets -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 40 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": 10,
            "reason": "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": 9,
            "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 15 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": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "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": 9,
            "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": "e6e3ddfa3cbb5b551dcbe4268602ff8242d5ea42",
        "ran_at": "2026-07-26T23:35:33Z",
        "aggregate_score": 7.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T02:00:53Z",
      "oldest_open_prs": [
        {
          "number": 206,
          "created_at": "2025-04-10T14:42:59Z",
          "last_comment_at": "2025-12-23T17:11:18Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 216,
          "created_at": "2025-04-24T13:08:00Z",
          "last_comment_at": "2026-07-13T12:03:46Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 222,
          "created_at": "2025-04-29T08:08:55Z",
          "last_comment_at": "2026-02-19T16:41:44Z",
          "last_comment_author": "Musab1258"
        },
        {
          "number": 229,
          "created_at": "2025-05-09T15:28:05Z",
          "last_comment_at": "2026-01-28T05:22:46Z",
          "last_comment_author": "evanlinjin"
        },
        {
          "number": 271,
          "created_at": "2025-06-24T14:31:12Z",
          "last_comment_at": "2026-03-06T16:55:58Z",
          "last_comment_author": "oleonardolima"
        },
        {
          "number": 276,
          "created_at": "2025-07-08T18:44:52Z",
          "last_comment_at": "2026-07-13T12:03:53Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 318,
          "created_at": "2025-09-24T18:10:08Z",
          "last_comment_at": "2026-07-17T19:29:25Z",
          "last_comment_author": "ValuedMammal"
        },
        {
          "number": 334,
          "created_at": "2025-10-28T11:58:02Z",
          "last_comment_at": "2025-12-04T19:29:52Z",
          "last_comment_author": "GideonBature"
        },
        {
          "number": 343,
          "created_at": "2025-11-07T21:09:46Z",
          "last_comment_at": "2026-05-05T14:35:21Z",
          "last_comment_author": "ValuedMammal"
        },
        {
          "number": 355,
          "created_at": "2025-12-15T15:04:51Z",
          "last_comment_at": "2026-07-21T16:40:30Z",
          "last_comment_author": "busayo-OD"
        },
        {
          "number": 360,
          "created_at": "2025-12-28T20:50:37Z",
          "last_comment_at": "2025-12-28T20:53:04Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 368,
          "created_at": "2026-01-16T22:52:38Z",
          "last_comment_at": "2026-02-18T18:55:55Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 370,
          "created_at": "2026-01-19T13:06:30Z",
          "last_comment_at": "2026-03-11T19:26:14Z",
          "last_comment_author": "aagbotemi"
        },
        {
          "number": 380,
          "created_at": "2026-02-08T10:40:09Z",
          "last_comment_at": "2026-02-23T19:20:15Z",
          "last_comment_author": "gyanranjanpanda"
        },
        {
          "number": 396,
          "created_at": "2026-03-04T23:44:57Z",
          "last_comment_at": "2026-03-04T23:48:08Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 414,
          "created_at": "2026-03-23T18:55:27Z",
          "last_comment_at": "2026-03-24T14:34:45Z",
          "last_comment_author": "Leeyah-123"
        },
        {
          "number": 423,
          "created_at": "2026-03-28T14:53:45Z",
          "last_comment_at": "2026-03-28T15:13:31Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 425,
          "created_at": "2026-03-31T19:35:51Z",
          "last_comment_at": "2026-03-31T19:39:19Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 427,
          "created_at": "2026-04-01T09:17:46Z",
          "last_comment_at": "2026-07-08T12:40:04Z",
          "last_comment_author": "noahjoeris"
        },
        {
          "number": 428,
          "created_at": "2026-04-01T15:38:54Z",
          "last_comment_at": "2026-05-28T17:04:42Z",
          "last_comment_author": "ValuedMammal"
        }
      ],
      "last_merged_pr_at": "2026-07-23T16:03:24Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 195,
          "created_at": "2020-10-22T12:04:35Z",
          "last_comment_at": "2026-07-13T12:01:22Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 193,
          "created_at": "2020-12-23T09:59:10Z",
          "last_comment_at": "2026-07-13T12:01:24Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 190,
          "created_at": "2021-02-26T03:23:02Z",
          "last_comment_at": "2026-01-28T16:31:52Z",
          "last_comment_author": "luisschwab"
        },
        {
          "number": 189,
          "created_at": "2021-07-14T18:36:46Z",
          "last_comment_at": "2026-07-13T12:01:26Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 188,
          "created_at": "2021-11-30T06:51:33Z",
          "last_comment_at": "2026-07-13T12:01:27Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 187,
          "created_at": "2022-01-11T23:59:46Z",
          "last_comment_at": "2022-09-05T06:40:41Z",
          "last_comment_author": "LLFourn"
        },
        {
          "number": 185,
          "created_at": "2022-02-16T02:15:27Z",
          "last_comment_at": "2026-07-13T12:01:29Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 184,
          "created_at": "2022-06-03T01:11:23Z",
          "last_comment_at": "2026-07-13T12:01:30Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 183,
          "created_at": "2022-06-28T02:38:54Z",
          "last_comment_at": "2026-07-13T12:01:32Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 182,
          "created_at": "2022-07-06T12:40:08Z",
          "last_comment_at": "2026-07-13T12:01:34Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 181,
          "created_at": "2022-07-07T19:03:54Z",
          "last_comment_at": "2026-07-13T12:01:36Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 180,
          "created_at": "2022-07-20T20:57:02Z",
          "last_comment_at": "2026-07-14T17:09:35Z",
          "last_comment_author": "ValuedMammal"
        },
        {
          "number": 420,
          "created_at": "2022-08-04T08:44:39Z",
          "last_comment_at": "2025-09-24T23:39:15Z",
          "last_comment_author": "notmandatory"
        },
        {
          "number": 178,
          "created_at": "2022-08-09T03:07:50Z",
          "last_comment_at": "2026-07-13T12:01:39Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 177,
          "created_at": "2022-08-10T18:02:12Z",
          "last_comment_at": "2026-07-13T12:01:41Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 176,
          "created_at": "2022-08-26T21:29:18Z",
          "last_comment_at": "2026-07-13T12:01:42Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 175,
          "created_at": "2022-08-30T08:58:08Z",
          "last_comment_at": "2026-07-13T12:01:44Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 173,
          "created_at": "2022-10-01T03:40:51Z",
          "last_comment_at": "2026-07-13T12:01:46Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 170,
          "created_at": "2023-01-10T19:53:54Z",
          "last_comment_at": "2026-07-13T12:10:06Z",
          "last_comment_author": "nvk"
        },
        {
          "number": 168,
          "created_at": "2023-01-18T15:21:40Z",
          "last_comment_at": "2026-07-08T00:25:38Z",
          "last_comment_author": "ValuedMammal"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/bitcoindevkit/bdk_wallet",
    "host": "github.com",
    "name": "bdk_wallet",
    "owner": "bitcoindevkit"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 79,
      "inputs": {
        "security": 79,
        "vitality": 98,
        "community": 66,
        "governance": 77,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 98,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "commits_last_year": 240,
              "human_commit_share": 0.96,
              "days_since_last_push": 3,
              "active_weeks_last_year": 46
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "46/52 weeks with commits",
                "points": 31.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 46
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "240 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 240
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "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": 100,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v3.1.0",
              "releases_from_tags": false,
              "days_since_latest_release": 42,
              "mean_days_between_releases": 42.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 42 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 42
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~42.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 42.3
                    }
                  }
                ],
                "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": 3,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 3 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 66,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "forks": 95,
              "stars": 54,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "54 stars",
                "points": 28,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 54
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "95 forks",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 95
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "packages": [
                "bdk_wallet"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 1079408,
              "monthly_downloads": 116892
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "116,892 downloads/month across crates",
                "points": 67.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 116892,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 77,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 98,
              "top_contributor_share": 0.22
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 22% of commits",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 22
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "98 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 98
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 40 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "merged_prs": 134,
              "open_issues": 154,
              "closed_issues": 127,
              "issue_closed_ratio": 0.452,
              "closed_unmerged_prs": 48
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "45% of issues closed",
                "points": 21.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 45
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "134/182 decided PRs merged",
                "points": 28.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 134,
                      "decided": 182
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/7 approved changesets -- score normalized to 7",
                "points": 10.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "followers": 736,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "bitcoindevkit",
              "public_repos": 46,
              "account_age_days": 2309
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "736 followers of bitcoindevkit",
                "points": 20.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 736,
                      "login": "bitcoindevkit"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "46 public repos, account ~6 yr old",
                "points": 24.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 46
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "bdk_wallet"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 42
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 42 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 42
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "23 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 79,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 7.9
            },
            "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 is not maximal on development and all release branches",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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 5/7 approved changesets -- score normalized to 7",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 40 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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 15 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 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "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": 6.8,
                "status": "partial",
                "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": 57,
        "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": 1,
              "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": "96 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "examples/justfile",
                "justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "Cargo.toml"
              ],
              "dependency_bot_commit_share": 0.04
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "examples/justfile, justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/justfile, justfile"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "4 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 95,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 165781,
              "source_files_sampled": 45,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "4/45 source files over 60KB",
                "points": 50.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 45,
                      "oversized": 4
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "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": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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",
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T23:35:58.864201Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/bitcoindevkit/bdk_wallet.svg",
  "full_name": "bitcoindevkit/bdk_wallet",
  "license_state": "custom",
  "license_spdx": null
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikencrates.io.