Raw JSON report machine-readable
{
"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
}