Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 138,
"has_wiki": true,
"homepage": null,
"languages": {
"Rust": 148325
},
"pushed_at": "2026-07-06T08:23:57Z",
"created_at": "2019-07-05T16:08:12Z",
"owner_type": "User",
"updated_at": "2026-07-05T18:42:26Z",
"description": "An updated version of linked-hash-map and friends",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Rust",
"significant_languages": [
"Rust"
]
},
"owner": {
"blog": "https://dirkjan.ochtman.nl/",
"name": "Dirkjan Ochtman",
"type": "User",
"login": "djc",
"company": null,
"location": "Bilthoven",
"followers": 1548,
"avatar_url": "https://avatars.githubusercontent.com/u/158471?v=4",
"created_at": "2009-11-26T12:00:10Z",
"is_verified": null,
"public_repos": 246,
"account_age_days": 6087
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.12.1",
"kind": "patch",
"published_at": "2026-07-06T08:24:15Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2026-06-05T15:00:23Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2026-06-05T13:48:10Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2025-10-26T12:42:35Z"
},
{
"tag": "v0.10",
"kind": "other",
"published_at": "2024-12-09T11:49:51Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2024-05-12T00:35:57Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2024-01-09T01:33:13Z"
},
{
"tag": "v0.8.4",
"kind": "patch",
"published_at": "2023-08-28T18:58:24Z"
}
],
"recent_commits": [
{
"oid": "d1f0b937edf52e731447465818575eb3c86812ec",
"body": null,
"is_bot": false,
"headline": "bump version to 0.12.1",
"author_name": "Alexander Schuetz",
"author_login": "AlexanderSchuetz97",
"committed_at": "2026-07-05T18:42:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f998f87feae53495900361eed4de2f6333bc691",
"body": "- insert_entry to RawVacantEntryMut and VacantEntry\n- front_entry/back_entry to map -> Option<RawOccupiedEntryMut>\n- current_entry to CursorMut -> Option<RawOccupiedEntryMut>",
"is_bot": false,
"headline": "add various missing utility functions",
"author_name": "Alexander Schuetz",
"author_login": "AlexanderSchuetz97",
"committed_at": "2026-07-02T07:40:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "677c871346ea65bf952d3b50e4f11775d2d8c36f",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.12",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T14:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4a5abc4e13bb5e976f919a98e96263bf700bbec",
"body": null,
"is_bot": false,
"headline": "Upgrade hashbrown to 0.17",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T14:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39e1d4ab1074d9f3cc6f873245c4225b4c29d46f",
"body": null,
"is_bot": false,
"headline": "Upgrade to 2024 edition",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T14:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00a792002624671c3347540be0785d137ffc4674",
"body": null,
"is_bot": false,
"headline": "Bump MSRV to 1.85",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T14:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe151cc410a22009eb56157ce9ec101daad174ae",
"body": null,
"is_bot": false,
"headline": "Bump edition to 2021",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T13:46:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1da438fded16d95158b944c7d6d26a93f355c18",
"body": null,
"is_bot": false,
"headline": "Update Cargo metadata",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T13:46:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "73ecf345cc6110ff07c9c9769acfebdb5860175b",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.11.1",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T13:46:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f273cb217179d5b6eb557d487476a905999d397b",
"body": null,
"is_bot": false,
"headline": "Fix UB in retain_with_order()",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T12:27:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b55034b0446b3c6d5c64bdb8940d589b712651f",
"body": null,
"is_bot": false,
"headline": "Fix UB when in LinkedHashMap::clear()",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T12:10:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76719900ee0429cc57ce90db5d9dd2f9b3538428",
"body": null,
"is_bot": false,
"headline": "Replace CircleCI badge with GH Actions badge",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T11:56:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1584970f6b953f1284f4ac6ad206aec71423fb2",
"body": null,
"is_bot": false,
"headline": "Drop CircleCI config",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T11:56:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61072bd94eaa5debb2ff03db241714a0cfbfeafd",
"body": null,
"is_bot": false,
"headline": "Port Miri and sanitizer checks from CircleCI to Actions workflow",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T11:56:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e208f889c3492d09d668e7091f7be40d637356a7",
"body": null,
"is_bot": false,
"headline": "Add basic GH Actions CI setup",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T11:41:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c27c1dfc22828c756ace18fc077c6fccfc83471c",
"body": null,
"is_bot": false,
"headline": "Start versioning Cargo.lock",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2026-06-05T11:41:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5b2fe08490e7ed93e01d9e9e8f58a889edb5d94",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.11.0",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2025-10-15T15:45:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69439728a9e3eea2b068f472a3b7e9809fa62dbc",
"body": null,
"is_bot": false,
"headline": "Upgrade to hashbrown 0.16",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2025-10-15T15:45:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0001962e62cbadf4ee7ea71061c89c59cca15601",
"body": null,
"is_bot": false,
"headline": "remove forced inclusion of hashbrown/inline-more feature flag",
"author_name": "Joel Wejdenstål",
"author_login": "xacrimon",
"committed_at": "2025-10-15T15:17:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4bb6840bb5fd9249933238f2d9ecf8495f2c1bb",
"body": null,
"is_bot": false,
"headline": "Ignore ABI mismatch for rustdoc builds",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2025-10-15T15:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5eaff9bd3af372298b681d14091f5b7449709d0",
"body": null,
"is_bot": false,
"headline": "Remove authors from metadata (see RFC 3052)",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2025-10-15T15:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb8285d0f1ba3514a6091a9aac0adf9655bde3d7",
"body": null,
"is_bot": false,
"headline": "Fix warnings about missing lifetimes in return types",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2025-10-15T15:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d12ae660333c39ead333c48974b575488bbb06a",
"body": "Add LruCache::retain",
"is_bot": false,
"headline": "Merge pull request #33 from peterthejohnston/lrucache-retain",
"author_name": "Catherine West",
"author_login": "kyren",
"committed_at": "2025-04-11T06:09:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0d82a10c568438a3befed61581a25c339c34c37",
"body": "The method is just a direct passthrough to LinkedHashMap::retain.",
"is_bot": false,
"headline": "Add LruCache::retain",
"author_name": "Peter Johnston",
"author_login": "peterthejohnston",
"committed_at": "2025-04-04T17:58:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1fe8bf6fe8e417af96f2029a6861415621e3888",
"body": "Fix unsound Send impls.",
"is_bot": false,
"headline": "Merge pull request #32 from Icerath/fix_unsound_send_impls",
"author_name": "Catherine West",
"author_login": "kyren",
"committed_at": "2025-03-07T04:29:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56818180003ed8dc55ff14e2de6209d9f8b59561",
"body": null,
"is_bot": false,
"headline": "remove RawEntryBuilder(mut) impls and fix Iter impl.",
"author_name": "Dorje Gilfillan",
"author_login": "Icerath",
"committed_at": "2025-02-28T21:09:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11088cb368f93e1f61fc42e696b4ab89158ae70d",
"body": "Remove the `foldhash` direct dependency",
"is_bot": false,
"headline": "Merge pull request #31 from kyren/remove-foldhash",
"author_name": "Catherine West",
"author_login": "kyren",
"committed_at": "2024-12-06T15:21:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6914a29f4542049e8a7b311a33d81cd791dd926a",
"body": "Instead, just refer to whatever hashbrown is using directly.",
"is_bot": false,
"headline": "Remove the `foldhash` direct dependency",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-12-06T15:06:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa273440833371a7e14e22590234814496d27ada",
"body": "Upgrade to hashbrown 0.15",
"is_bot": false,
"headline": "Merge pull request #30 from djc/hashbrown-0.15",
"author_name": "Catherine West",
"author_login": "kyren",
"committed_at": "2024-12-06T14:20:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d938a2423b90db30fd21116e38e81e4a15ec15d8",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.10.0",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:58:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b870a0f62a1eadf2c776bbbf1771e5d3913a8caf",
"body": null,
"is_bot": false,
"headline": "Wrap hashbrown hash builder",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:58:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "722c81432434de35a38c011698a4b8c85039acf3",
"body": null,
"is_bot": false,
"headline": "Upgrade to rustc-hash 2",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:57:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ded0c5f54db6dfcfe58e1fc62193cac62e68907",
"body": null,
"is_bot": false,
"headline": "Upgrade to hashbrown 0.15",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:57:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d508e25760dda8ead5303cce4466d02a8524b11",
"body": null,
"is_bot": false,
"headline": "Apply suggestions from clippy 1.83",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:57:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c7e688537944c7670a285f1f7cf2767c6752cc9",
"body": null,
"is_bot": false,
"headline": "Set rust-version in Cargo metadata",
"author_name": "Dirkjan Ochtman",
"author_login": "djc",
"committed_at": "2024-12-06T13:57:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29bf1c5a98bd612d48e3667a490e7051fad8b19e",
"body": "The test was supposed to check for *real* equality with the replaced\nvalue but it wasn't due to the overridden `Eq`. Also fixes an unused\nvariable warning due to not checking the second field for equality.",
"is_bot": false,
"headline": "Fix bad `test_replace` for `LinkedHashSet`",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-12-06T13:53:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "006dc69b81f65259c5acef95d829989b31587cc8",
"body": null,
"is_bot": false,
"headline": "prepare for 0.9.1 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-05-12T00:23:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "039c9b54362c406bfecb5c04045bf3fa8ff94262",
"body": null,
"is_bot": false,
"headline": "move CursorMut declaration closer to impl",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-05-12T00:15:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6097a7ed9e1b9cc11af1bef98e59b056f4a4deb",
"body": "build: remove unnecessary `allocator-api2` dep.",
"is_bot": false,
"headline": "Merge pull request #28 from ErichDonGubler/no-allocator-api2",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-05-07T00:34:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf20dc2d7141cb55989219840a0e3d1696a51cf8",
"body": null,
"is_bot": false,
"headline": "build: remove unnecessary `allocator-api2` dep.",
"author_name": "Erich Gubler",
"author_login": "ErichDonGubler",
"committed_at": "2024-05-02T18:31:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24b87fe2ad8ada29fe3e92066fdebd5c4cbc8455",
"body": "feat: add `CursorMut`",
"is_bot": false,
"headline": "Merge pull request #25 from olebedev/oleg/add-cursors",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-04-22T05:33:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83c137eb0a9d05dd71eb1d12445ea6670e01242b",
"body": null,
"is_bot": false,
"headline": "make `LruCache::contains_key` take &self, not move entry, fixes #27",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-04-22T05:25:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4b9a7ffe12bfab58397db9b759d3c71063bdc58",
"body": null,
"is_bot": false,
"headline": "address nitpicks",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-18T10:06:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a520781ae59ceee958e5272772036a73cd775507",
"body": null,
"is_bot": false,
"headline": "handle the corner-case when inserting before itself",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T07:13:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6bcf27c9778497631d8a4a5f7c1599ba4c6763de",
"body": null,
"is_bot": false,
"headline": "remove unnecessary closures",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:57:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db0b2244701312de89a35fdbb5ea6164f6931d5f",
"body": null,
"is_bot": false,
"headline": "attach node before insert",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:46:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41a3ab1dfed1fd5f0ab8aa4cf469142d7ebba7f1",
"body": null,
"is_bot": false,
"headline": "tuple -> key, value",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:45:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b325d8b8a6229be355b0c2221c558f2ccb3ff0c4",
"body": null,
"is_bot": false,
"headline": "remove comment",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:38:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57e0876a1e2285f8ab7e9bf96a2ddf0489b2fa6a",
"body": null,
"is_bot": false,
"headline": "cursor_mut -> cursor_{front,back}_mut",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:37:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80f55b3d75986d0046a495704d74dba9b85a0817",
"body": null,
"is_bot": false,
"headline": "revert upgrade of rust on ci",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:25:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b55ef0bb2a371587900c53888744bc96a0d022c",
"body": null,
"is_bot": false,
"headline": "remove move_at fn",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-04-14T06:23:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7119924ff56d621b23503e561dd67f0860b923d8",
"body": "Bump hashbrown dependency to fix downstream vulnerability in zerocopy",
"is_bot": false,
"headline": "Merge pull request #26 from singe/master",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-04-07T01:38:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d11d0057e5129a173755d22b6f3ceedf0c17415",
"body": null,
"is_bot": false,
"headline": "Bump hashbrown dependency to fix downstream vulnerability in zerocopy",
"author_name": "Dominic White",
"author_login": "singe",
"committed_at": "2024-03-19T11:49:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b45428b52b43602279eb9a74e9b714aee2f6218",
"body": null,
"is_bot": false,
"headline": "fn signature: move_at(K) -> move_at(&K)",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-02-29T09:38:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41d96a04dd0f15d7a55fc02aa9f130d147409382",
"body": null,
"is_bot": false,
"headline": "remove unreachable! in favor of None",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-02-25T21:54:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09b5ecc06d8aec00690dfe948e8d27f857c48f8d",
"body": "Also, improve documentation, for consistency.",
"is_bot": false,
"headline": "add `LinkedHashMap::cursor_mut` method",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-02-25T06:19:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bb1fe4da59545c424f5da303f263e07f192fc13",
"body": null,
"is_bot": false,
"headline": "feat: add `CursorMut`",
"author_name": "Oleg Lebedev",
"author_login": "olebedev",
"committed_at": "2024-02-25T05:34:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68e9d118e1822411142442f8469b2c95df1b35e7",
"body": null,
"is_bot": false,
"headline": "prepare for 0.9.0 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-01-09T01:27:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "634a63cd0ecaf6ec0fff23008c6cc30c48e036e7",
"body": "Fixes some clippy errors",
"is_bot": false,
"headline": "Make some Clone impls defer to Copy",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-01-09T01:01:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db2d2303ff02aa2edf379f0aee4a0c5bae1e08b6",
"body": "Convert to `hashbrown::HashTable`",
"is_bot": false,
"headline": "Merge pull request #21 from cuviper/hash-table",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2024-01-09T00:55:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df848f8d8da906f28c6aaf01f1f95bcb0e71695e",
"body": null,
"is_bot": false,
"headline": "Convert to `hashbrown::HashTable`",
"author_name": "Josh Stone",
"author_login": "cuviper",
"committed_at": "2024-01-07T01:34:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d415cbee46871ae13756a63450eb84c70c6983c2",
"body": null,
"is_bot": false,
"headline": "prepare for 0.8.4 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-08-28T18:56:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "736642f0fcf54cd735e302d2253a8278783557f8",
"body": null,
"is_bot": false,
"headline": "rename default_features -> default-features",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-08-28T18:51:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0858a0afb08e7d52545c69e857128fc9c5f85ea5",
"body": "Depend on serde using `default_features = false`, which makes the\ndependency no_std compatible.",
"is_bot": false,
"headline": "no_std compatible serde support",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-06-28T21:26:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a5ba404e6c01357996db4765e82947bbfb531f9",
"body": "Add no_std Support",
"is_bot": false,
"headline": "Merge pull request #17 from leesum1/no_std",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-06-28T20:53:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8b77a0a4121dbdc2a7161a780192c6f8866b01b8",
"body": null,
"is_bot": false,
"headline": "Add no_std Support",
"author_name": "leesum",
"author_login": "leesum1",
"committed_at": "2023-06-28T16:57:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cd8c097a619847b785ab60e255aebabb22a7f48",
"body": "…lated at all",
"is_bot": false,
"headline": "swap repo location away from triplehex, since it's not really game re…",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-06-20T09:05:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5eed8c59ab87f54d2fde9852d9d467303d034623",
"body": null,
"is_bot": false,
"headline": "prepare for 0.8.3 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-06-11T22:46:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f744723529003a70e179f5c16013281573a3960",
"body": null,
"is_bot": false,
"headline": "actually bump Cargo.toml version",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-05-15T06:53:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f6cd7dd43bf9664fd980612c8a60d0df79db973",
"body": null,
"is_bot": false,
"headline": "use rustc-hash in dev-dependencies just because it's more common now",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-05-15T06:52:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ad17e8d1337bc29d9cdc8e9e4951e17804e1f94",
"body": null,
"is_bot": false,
"headline": "Drop minor version of hashbrown and add changelong entry for it",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-05-15T06:52:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e44ad45bd4602daa491cb4962a599417376776f6",
"body": null,
"is_bot": false,
"headline": "use a more recent rust compiler in CI",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-05-15T06:45:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db29e4a81e2ba38935295735e6530df4584bb6d5",
"body": "Upgrade to the latest version of hashbrown.",
"is_bot": false,
"headline": "Merge pull request #15 from jfgoog/update-dep",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2023-05-15T06:36:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "613484ff7f4e47f491038ce538b27591d06fea14",
"body": null,
"is_bot": false,
"headline": "Upgrade to the latest version of hashbrown.",
"author_name": "James Farrell",
"author_login": "jfgoog",
"committed_at": "2023-05-10T18:29:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "684ce98553c07c773af062605a5f4cbd9aa4dcd7",
"body": null,
"is_bot": false,
"headline": "(cargo-release) version 0.8.1",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:38:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba8df5a6ee92d16622dc943337539a543071dee0",
"body": null,
"is_bot": false,
"headline": "prepare for 0.8.1 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:38:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e569cc0078b45843e436258ff1aa29ec320ec10b",
"body": null,
"is_bot": false,
"headline": "silence warnings about dropping with",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:26:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08775271df1157af292484ae30a85d871e7fa071",
"body": null,
"is_bot": false,
"headline": "Point at the right circle-ci location",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:21:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91ebfaf60e69b2db775251ca056cdd2c387263f7",
"body": "…th_order`",
"is_bot": false,
"headline": "Don't have a mutable and immutable reference to the key in `retain_wi…",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:19:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63a15b4b4a484cb277c1677d925d2c4d955564d2",
"body": "feat: retain with inserting order",
"is_bot": false,
"headline": "Merge pull request #11 from quake/retain-order",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-09-17T17:02:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0362026acaa894ef8d9704f959ee97ffa426069",
"body": null,
"is_bot": false,
"headline": "chore: apply review comment",
"author_name": "quake",
"author_login": "quake",
"committed_at": "2022-03-22T07:40:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2bf866c372f185edb9c18ff740874094c49e2c3a",
"body": null,
"is_bot": false,
"headline": "feat: retain with inserting order",
"author_name": "quake",
"author_login": "quake",
"committed_at": "2022-03-22T07:26:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5846ec3ff06865a204114bd710253e7e67e4498",
"body": null,
"is_bot": false,
"headline": "Actually bump version to 0.8.0",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T19:19:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f96c385aa56b355d6fbebe34531dcb2734cd7b3",
"body": null,
"is_bot": false,
"headline": "prepare for 0.8.0 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T19:16:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65018634695fed7ad5ec6acca9e77d84010f50b4",
"body": "…versioning",
"is_bot": false,
"headline": "re-implement the single re-export from hashbrown to decouple the API …",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T19:15:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b720753ae3b9645e3813e7d565a9b28dde05dfd",
"body": null,
"is_bot": false,
"headline": "`HashMap::clear` does not actually reduce capacity.",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T19:07:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc7e1c1319fcb95d381c87b00597f1f8eb13be78",
"body": null,
"is_bot": false,
"headline": "Bump internal hashbrown version",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T18:54:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a61267e2572cd9ab3e25d21b607b58f90ecca99e",
"body": "Inner map type `shrink_to_fit` requires `K: Hash + Eq` for a *reason*, it may\nneed to rebuild the inner map and rehash all of the values in it.\n\nSince we provide a fake inner hasher, we must reimplement `shrink_to_fit`\nourselves in the same manner, by clearing the map and refilling the contents\nusing the proper hasher.",
"is_bot": false,
"headline": "Fix `shrink_to_fit` with non-empty container sizes, fixes #12",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2022-03-14T18:51:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c036a055e61334b26cb45c218a826388fba44171",
"body": "Acts as a more convenient \"insert or update\" that does not move the entry in the\ninternal linked list if the key already existed.\n\nAlso adds some comments to insert / replace methods on map and set, to avoid\nconfusion (since their behavior is unfortunately not obvious at a glance).",
"is_bot": false,
"headline": "Adds `LinkedHashMap::replace`",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-23T04:37:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21593253753b275f8c5787be94767be3d0bcbb98",
"body": null,
"is_bot": false,
"headline": "Fix changelog formatting, add missing changelog entry for 0.7",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-04T00:00:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fadc94d07ff730e62e817207a9c153c500765b04",
"body": null,
"is_bot": false,
"headline": "(cargo-release) start next development iteration 0.7.1-alpha.0",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:57:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "491feb0b3f9805f7548a459ac32ab24914e12db2",
"body": null,
"is_bot": false,
"headline": "(cargo-release) version 0.7.0",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:57:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c860accda2edc6d53846a1f1f2b4aa86d8769071",
"body": null,
"is_bot": false,
"headline": "Actually test all features with circle-ci",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:53:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7575ca693432cb5376968e717d9ce42ff9b4ce1",
"body": null,
"is_bot": false,
"headline": "Prepare for 0.7 release",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:48:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5daeea983840248191194182dae40edfbee2cf2d",
"body": null,
"is_bot": false,
"headline": "Make `LinkedHashSet` deserialize also generic on the BuildHasher type.",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:44:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b42ad075d54d67286183b2421ff39c9cca4571c",
"body": "Making the deserialization for LinkedHashMap generic for build hasher type",
"is_bot": false,
"headline": "Merge pull request #7 from robinbernon/generic_hashmap_deserialization",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:34:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b283e8bfe313af592f31bdbb1c7915a17e8a5fc7",
"body": null,
"is_bot": false,
"headline": "Depend on hashbrown 0.11",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-05-03T23:23:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fb1b6df94219f0905dcff584c93d9aa558b698d",
"body": "`LinkedHashSet`'s `PartialEq` / `Eq` implementation is now consistent with\n`LinkedHashMap`'s implementation, it is order dependent.\n\nAdd some simple tests for this property.",
"is_bot": false,
"headline": "API Breaking: Equality tests on `LinkedHashSet` should be consistent",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-04-25T22:12:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b0ee5d97c54f9a581a1a1f42ea74a5310849fdc",
"body": null,
"is_bot": false,
"headline": "Add `LinkedHashMap::to_front` and `LinkedHashMap::to_back` entries.",
"author_name": "kyren",
"author_login": "kyren",
"committed_at": "2021-04-22T20:59:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64467560f56e1dcbcef455e919e65e9b0c6ccdc7",
"body": null,
"is_bot": false,
"headline": "Correcting test",
"author_name": "Robin Bernon",
"author_login": "robinbernon",
"committed_at": "2021-04-01T11:14:31Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 8,
"commits_last_year": 21,
"latest_release_at": "2026-07-06T08:24:15Z",
"latest_release_tag": "v0.12.1",
"releases_from_tags": false,
"days_since_last_push": 21,
"active_weeks_last_year": 5,
"days_since_latest_release": 21,
"mean_days_between_releases": 148.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "hashlink",
"exists": true,
"license": "MIT OR Apache-2.0",
"keywords": [
"data-structures",
"no_std"
],
"ecosystem": "crates",
"matches_repo": true,
"registry_url": "https://crates.io/crates/hashlink",
"is_deprecated": false,
"latest_version": "0.12.1",
"repository_url": "https://github.com/djc/hashlink",
"versions_count": 21,
"total_downloads": 274515719,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 25105852,
"first_published_at": "2019-07-06T10:17:21.361009Z",
"latest_published_at": "2026-07-06T08:23:21.895353Z",
"latest_version_yanked": false,
"days_since_latest_publish": 21
}
]
},
"popularity": {
"forks": 28,
"stars": 140,
"watchers": 6,
"fork_history": {
"days": [
{
"date": "2020-04-16",
"count": 1
},
{
"date": "2020-06-29",
"count": 1
},
{
"date": "2021-03-30",
"count": 1
},
{
"date": "2021-04-02",
"count": 1
},
{
"date": "2021-06-19",
"count": 1
},
{
"date": "2021-06-20",
"count": 1
},
{
"date": "2022-12-27",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-05-10",
"count": 1
},
{
"date": "2023-06-27",
"count": 1
},
{
"date": "2023-06-28",
"count": 1
},
{
"date": "2023-08-21",
"count": 1
},
{
"date": "2023-09-03",
"count": 1
},
{
"date": "2024-01-07",
"count": 1
},
{
"date": "2024-02-11",
"count": 1
},
{
"date": "2024-02-29",
"count": 1
},
{
"date": "2024-03-19",
"count": 1
},
{
"date": "2024-05-02",
"count": 1
},
{
"date": "2025-02-28",
"count": 1
},
{
"date": "2025-04-04",
"count": 1
},
{
"date": "2025-04-24",
"count": 1
},
{
"date": "2025-06-08",
"count": 1
},
{
"date": "2025-11-15",
"count": 1
},
{
"date": "2026-01-06",
"count": 1
},
{
"date": "2026-01-29",
"count": 1
},
{
"date": "2026-04-24",
"count": 1
},
{
"date": "2026-06-05",
"count": 1
},
{
"date": "2026-07-05",
"count": 1
}
],
"complete": true,
"collected": 28,
"total_forks": 28
},
"star_history": null,
"open_issues_and_prs": 8
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"Cargo.toml"
],
"largest_source_bytes": 68655,
"source_files_sampled": 9,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Cargo.toml"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 11,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"crates"
],
"dependencies": [
{
"name": "hashbrown",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.17"
},
{
"name": "serde",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "hashbrown",
"direct": true,
"version": "0.17.1",
"ecosystem": "crates"
},
{
"name": "serde",
"direct": true,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "foldhash",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "proc-macro2",
"direct": false,
"version": "1.0.106",
"ecosystem": "crates"
},
{
"name": "quote",
"direct": false,
"version": "1.0.45",
"ecosystem": "crates"
},
{
"name": "rustc-hash",
"direct": false,
"version": "2.1.2",
"ecosystem": "crates"
},
{
"name": "serde_core",
"direct": false,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "serde_derive",
"direct": false,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "serde_test",
"direct": false,
"version": "1.0.177",
"ecosystem": "crates"
},
{
"name": "syn",
"direct": false,
"version": "2.0.117",
"ecosystem": "crates"
},
{
"name": "unicode-ident",
"direct": false,
"version": "1.0.24",
"ecosystem": "crates"
}
],
"collected": true,
"truncated": false,
"total_count": 11,
"direct_count": 2,
"indirect_count": 9
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 26,
"open_issues": 4,
"closed_ratio": 0.733,
"closed_issues": 11,
"closed_unmerged_prs": 7
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "kyren",
"commits": 125,
"avatar_url": "https://avatars.githubusercontent.com/u/1538607?v=4"
},
{
"type": "User",
"login": "djc",
"commits": 25,
"avatar_url": "https://avatars.githubusercontent.com/u/158471?v=4"
},
{
"type": "User",
"login": "olebedev",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/848535?v=4"
},
{
"type": "User",
"login": "rastertail",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/8082305?v=4"
},
{
"type": "User",
"login": "AlexanderSchuetz97",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/66277940?v=4"
},
{
"type": "User",
"login": "robinbernon",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/33977466?v=4"
},
{
"type": "User",
"login": "quake",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/8990?v=4"
},
{
"type": "User",
"login": "singe",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1150684?v=4"
},
{
"type": "User",
"login": "Icerath",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/68323306?v=4"
},
{
"type": "User",
"login": "ErichDonGubler",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/658538?v=4"
}
],
"contributors_sampled": 16,
"top_contributor_share": 0.687
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Cargo.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 3,
"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": 6,
"reason": "10 out of 15 merged PRs checked by a CI test -- score normalized to 6",
"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": 4,
"reason": "Found 7/15 approved changesets -- score normalized to 4",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 9 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "16 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "d1f0b937edf52e731447465818575eb3c86812ec",
"ran_at": "2026-07-28T08:09:04Z",
"aggregate_score": 4.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-05T18:43:54Z",
"oldest_open_prs": [
{
"number": 16,
"created_at": "2023-06-27T16:37:13Z",
"last_comment_at": "2023-06-27T20:13:50Z",
"last_comment_author": "Jupeyy"
},
{
"number": 20,
"created_at": "2023-09-03T02:28:34Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 35,
"created_at": "2025-04-26T03:19:54Z",
"last_comment_at": "2025-10-16T16:32:01Z",
"last_comment_author": "xacrimon"
},
{
"number": 36,
"created_at": "2025-04-26T04:07:34Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-05T18:42:22Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 6,
"created_at": "2021-03-26T18:57:59Z",
"last_comment_at": "2021-04-13T00:26:46Z",
"last_comment_author": "dtolnay"
},
{
"number": 13,
"created_at": "2021-07-03T02:41:45Z",
"last_comment_at": "2022-03-14T18:53:45Z",
"last_comment_author": "kyren"
},
{
"number": 29,
"created_at": "2024-08-16T22:30:04Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 37,
"created_at": "2025-06-26T19:07:14Z",
"last_comment_at": "2026-07-06T08:27:25Z",
"last_comment_author": "djc"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/djc/hashlink",
"host": "github.com",
"name": "hashlink",
"owner": "djc"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 62 is calibrated to 69 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 62,
"calibrated": 69,
"calibration": "2026-08-02"
}
}
],
"value": 69,
"inputs": {
"security": 58,
"vitality": 66,
"community": 63,
"governance": 67,
"calibration": "2026-08-02",
"engineering": 56,
"ai_readiness": 47,
"weighted_overall_raw": 62
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 66,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"commits_last_year": 21,
"human_commit_share": 1,
"days_since_last_push": 21,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 21 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 21
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "21 commits in the last year",
"points": 12.1,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 21
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "16 commit(s) and 2 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": 84,
"inputs": {
"releases_count": 8,
"latest_release_tag": "v0.12.1",
"releases_from_tags": false,
"days_since_latest_release": 21,
"mean_days_between_releases": 148.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "8 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 8
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 21 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 21
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~148.9 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 148.9
}
}
],
"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": "exceptional",
"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": 30,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 30 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 30
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 63,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"forks": 28,
"stars": 140,
"watchers": 6,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "140 stars",
"points": 34.8,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 140
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "28 forks",
"points": 11.9,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 28
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "6 watchers",
"points": 3.9,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 6
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "exceptional",
"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": 100,
"inputs": {
"packages": [
"hashlink"
],
"dependents": null,
"ecosystems": "crates",
"total_downloads": 274515719,
"monthly_downloads": 25105852
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "25,105,852 downloads/month across crates",
"points": 80,
"status": "met",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 25105852,
"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": 67,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "weak",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 16,
"top_contributor_share": 0.687
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 69% of commits",
"points": 7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 69
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "16 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 16
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 9 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 69,
"inputs": {
"merged_prs": 26,
"open_issues": 4,
"closed_issues": 11,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.733,
"closed_unmerged_prs": 7,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "73% of issues closed",
"points": 30.8,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 73
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "26/33 decided PRs merged",
"points": 23.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 26,
"decided": 33
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 7/15 approved changesets -- score normalized to 4",
"points": 6,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"followers": 1548,
"owner_type": "User",
"is_verified": null,
"owner_login": "djc",
"public_repos": 246,
"account_age_days": 6087
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1,548 followers of djc",
"points": 22.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1548,
"login": "djc"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "246 public repos, account ~16 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 246
}
},
{
"code": "account_age_years",
"params": {
"years": 16
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"hashlink"
],
"ecosystems": "crates",
"any_deprecated": false,
"min_days_since_publish": 21
},
"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 21 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 21
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "21 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 21
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 56,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 60,
"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": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": 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 15 merged PRs checked by a CI test -- score normalized to 6",
"points": 12,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"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": 0,
"status": "missed",
"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": "moderate",
"name": "Security",
"value": 58,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"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": 48,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.8
},
"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": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "10 out of 15 merged PRs checked by a CI test -- score normalized to 6",
"points": 1.5,
"status": "partial",
"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 7/15 approved changesets -- score normalized to 4",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 9 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "16 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 11 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 11
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 11,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 11,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 12
},
"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": "weak",
"name": "AI Readiness",
"value": 47,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 12,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.23,
"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": "23 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 12.3,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 23,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Cargo.lock"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"Cargo.toml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Cargo.toml (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "Cargo.toml"
}
}
],
"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": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 94,
"inputs": {
"primary_language": "Rust",
"largest_source_bytes": 68655,
"source_files_sampled": 9,
"oversized_source_files": 1
},
"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": "1/9 source files over 60KB",
"points": 48.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 9,
"oversized": 1
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"top": [
"library"
],
"labels": [
"library"
],
"scores": {
"library": 6
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:crates",
"weight": 6
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": true
},
"metrics_version": "2.5.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-28T08:09:25.081083Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/djc/hashlink.svg",
"full_name": "djc/hashlink",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}