Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-26 23:35 UTC

bitcoindevkit / bdk_wallet

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

RustВласна ліцензія★ 54 зірки⑂ 95 форківз квіт. 2025 р.Переглянути на GitHub ↗

bitcoindevkit/bdk_wallet має індекс здоров’я 79 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (98/100), найнижчий — AI Readiness (57/100). Останнє оновлення було 3 дні тому. Більшість нещодавньої роботи виконують 3 учасники.

79
загалом / 100
Добрий

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

79
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Bitcoin Dev KitОрганізація
736 підписників46 публічних репозиторіївз бер. 2020 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
crates.iobdk_wallet3.1.0116 8922342 дні томуbitcoindescriptorpsbtwallet

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

98Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 3 дн. тому
31.8/36Ритм комітів — 46/52 тижнів із комітами
18/18Обсяг комітів — 240 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year240
human_commit_share0,96
days_since_last_push3
active_weeks_last_year46
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 13 релізів
36/36Свіжість релізів — останній реліз 42 дн. тому
27/27Ритм релізів — реліз кожні ~42,3 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count13
latest_release_tagv3.1.0
releases_from_tagsні
days_since_latest_release42
mean_days_between_releases42,3
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

66Помірний · 18% загального індексу
Як обчислюється оцінка
28/60Зірки — 54 зірок
16.4/25Форки — 95 форків
6/15Спостерігачі — 13 спостерігачів
Використані вхідні дані
forks95
stars54
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
16.9/22.5Ліцензія — файл ліцензії наявний, не є визнаною ліцензією
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак
Як обчислюється оцінка
67.6/80Щомісячні завантаження — 116 892 завантажень/місяць у crates
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesbdk_wallet
dependents
ecosystemscrates
total_downloads1 079 408
monthly_downloads116 892
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

77Добрий · 24% загального індексу
Як обчислюється оцінка
36/54Бас-фактор — на 3 контриб’ютор(ів) припадає половина всіх комітів
17.6/22.5Розподіл комітів — головний контриб’ютор — автор 22% комітів
13.5/13.5Широта контриб’юторів — 98 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 40 contributing companies or organizations
Використані вхідні дані
bus_factor3
contributors_sampled98
top_contributor_share0,22
Як обчислюється оцінка
21.1/46.8Вирішення issue — закрито 45% issue
28.2/38.3Прийняття PR — злито 134/182 вирішених PR
10.5/15OpenSSF Scorecard: Code-Review — Found 5/7 approved changesets -- score normalized to 7
Використані вхідні дані
merged_prs134
open_issues154
closed_issues127
issue_closed_ratio0,452
closed_unmerged_prs48
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
20.6/25Охоплення власника — 736 підписників у bitcoindevkit
24.2/25Послужний список — 46 публічних репозиторіїв, вік облікового запису ~6 р.
Використані вхідні дані
followers736
owner_typeOrganization
is_verified
owner_loginbitcoindevkit
public_repos46
account_age_days2 309

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у crates
35/35Свіжість публікацій — остання публікація 42 дн. тому
20/20Історія версій — 23 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesbdk_wallet
ecosystemscrates
any_deprecatedні
min_days_since_publish42

Інженерна якість

Чи наявні базові інженерні практики та документація?

71Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 5 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 10 out of 10 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

79Добрий · 16% загального індексу
Як обчислюється оцінка
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.5Ліцензія — 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 — немає даних
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 — немає даних
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate7,9
Виключено з оцінювання (немає даних або не застосовно): packaging, signed_releases. Залишкові ваги перенормовано.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

57Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 96 з 96 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
18/18Розгортання однією командою — examples/justfile, justfile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Rust (статично типізована)
0/10Відтворюване середовище
2/10Підтверджена практика роботи з агентами — 1 з останніх 100 комітів створено агентом або з його зазначенням
8/8Автоматизоване супроводження — 4 з останніх 100 комітів — автоматичні оновлення залежностей
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Використані вхідні дані
has_nixні
has_testsтак
lockfiles
has_dockerfileні
typed_languageтак
bootstrap_filesexamples/justfile, justfile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0,01
toolchain_manifestsCargo.toml
dependency_bot_commit_share0,04
Як обчислюється оцінка
45/45Типізований код — Rust (статично типізована)
50.1/55Керовані розміри файлів — 4/45 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageRust
largest_source_bytes165 781
source_files_sampled45
oversized_source_files4
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

Ключові факти

54зірок GitHub
98контриб'юторів
240комітів за останні 12 місяців
3днів від останнього пушу
13релізів
3бас-фактор
154відкритих issue
crates.ioпакетних екосистем

Попередження щодо збору даних

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

Докладніше

Історія зірок і форків 0 ★ / 95 ⇿
0Зірки
95Форки
13Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0204060801009532025-042025-112026-07
Мажорні 1Мінорні 1Патчі 0

Кожна точка охоплює 2 днів.

OpenSSF Scorecard 7.9 / 10
7.9сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/д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
н/дSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 11
РеєстрПакетОбмеження версіїМаніфест
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
Усі залежності 19

Повний розв'язаний набір залежностей із графа залежностей GitHub: 11 прямих і 8 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
crates.ioanyhowпряма
crates.iobdk_chainпряма
crates.iobdk_file_storeпряма
crates.iobdk_txпряма
crates.iobip39пряма
crates.iobitcoinпряма
crates.iominiscriptпряма
crates.iorand_coreпряма
crates.ioserdeпряма
crates.ioserde_jsonпряма
crates.iotempfileпряма
crates.ioassert_matchesнепряма
crates.iobdk_bitcoind_rpcнепряма
crates.iobdk_electrumнепряма
crates.iobdk_esploraнепряма
crates.ioclapнепряма
crates.ioctrlcнепряма
crates.iorandнепряма
crates.iotokioнепряма
Сповіщення про залежності не оцінено

Звірка сповіщень не відбулася для цього звіту: No resolved dependencies carried a version and a supported ecosystem

Звіт у форматі JSON машиночитний
{
  "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
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаcrates.io.