原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"ruby",
"hash-extensions",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 1301,
"has_wiki": false,
"homepage": null,
"languages": {
"Ruby": 284794,
"Shell": 138
},
"pushed_at": "2026-06-22T17:22:24Z",
"created_at": "2009-11-12T14:12:00Z",
"owner_type": "Organization",
"updated_at": "2026-07-06T16:12:03Z",
"description": "Hashie is a collection of classes and mixins that make Ruby hashes more powerful.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Ruby",
"significant_languages": [
"Ruby"
]
},
"owner": {
"blog": null,
"name": "hashie",
"type": "Organization",
"login": "hashie",
"company": null,
"location": null,
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/6098971?v=4",
"created_at": "2013-12-03T20:42:41Z",
"is_verified": null,
"public_repos": 1,
"account_age_days": 4613
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2025-12-24T23:26:52Z"
},
{
"tag": "v5.0.0",
"kind": "major",
"published_at": "2022-09-19T14:45:15Z"
},
{
"tag": "v4.1.0",
"kind": "minor",
"published_at": "2020-02-01T14:47:32Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2019-10-30T18:45:27Z"
}
],
"recent_commits": [
{
"oid": "fde8e03a0a19da626576415223e4b002fc373967",
"body": "…/checkout-7\n\nBump actions/checkout from 6 to 7",
"is_bot": false,
"headline": "Merge pull request #594 from hashie/dependabot/github_actions/actions…",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2026-06-22T17:22:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e37215127e04a68d368e55411bf062a1e6cb11f1",
"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": "Bump actions/checkout from 6 to 7",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-22T14:52:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3988742ebc7edb0500c67c4463ce54cd318d7af9",
"body": "* Fix Trash subclasses changing superclass transformers\n\nWhen a Trash gets subclassed and the subclass re-defines the same property\nwith a different transformer, the superclass's transformer gets replaced\nbecause how ::Hash.dup works in ruby\n\nTo keep these isolated we need to deep_dup the translatio\n[…]\n_hash\nin inherited hook\n\n* Update CHANGELOG.md\n\nAs instructed here https://github.com/hashie/hashie/pull/593#issuecomment-3935603275\n\n---------\n\nCo-authored-by: David Szabo <david.szabo@betvictor.com>",
"is_bot": false,
"headline": "Fix Trash subclasses changing superclass transformers (#593)",
"author_name": "complex857",
"author_login": "complex857",
"committed_at": "2026-02-22T16:09:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2be306fd903bce762cda8e25feb07f172099ef11",
"body": "Add Ruby 4.0 support",
"is_bot": false,
"headline": "Merge pull request #592 from dblock/ruby-4.0-support",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-30T17:56:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0297747edfecb112eb71a5383c705740c53c6174",
"body": "🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add Ruby 4.0 to CI test matrix.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-30T17:53:32Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7e40fb6db64bf82a726db865508ede05d33f44cf",
"body": "Migrate Danger to use danger-pr-comment workflow",
"is_bot": false,
"headline": "Merge pull request #591 from dblock/migrate-danger-pr-comment",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-30T17:44:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d3c4a90941c6d097ddc27ae6c4930faebd2aabb",
"body": "🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Migrate Danger to use danger-pr-comment workflow.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-30T17:42:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "df6334d6f9adcd8ecebb6325a9ca710775bccd8f",
"body": null,
"is_bot": false,
"headline": "Preparing for next developer iteration, 5.1.1.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-24T23:25:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce222626968829c865731d474fdcec46bda2c779",
"body": null,
"is_bot": false,
"headline": "Preparing for release, 5.1.0.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-24T23:23:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db140622ace52adff224f74cbd3dd23fc041d4ed",
"body": null,
"is_bot": false,
"headline": "Fixup RELEASING.md.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-24T23:23:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0dd1b84aaa53c95cf004c4a487dcb2c2904fe46",
"body": "…/checkout-6\n\nBump actions/checkout from 4 to 6",
"is_bot": false,
"headline": "Merge pull request #588 from hashie/dependabot/github_actions/actions…",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-12-22T20:25:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb62aa84f13f699f71aa163740337ba931887358",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\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/v4...v6)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n dependency-version: '6'\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": "Bump actions/checkout from 4 to 6",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-12-22T20:23:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "777c7e9ca8f2498ab58dab6df8c4295a684b1067",
"body": "* The `Metrics/LineLength` cop has been moved to `Layout/LineLength`\n\nref.\n\n* https://github.com/rubocop/rubocop/releases/tag/v0.78.0\n* https://github.com/rubocop/rubocop/pull/7542\n\n* Bump rubocop\n\n* Workaround for Ruby < 2.7\n\n* Requires Ruby 2.7+\n\n* Fix formatting in CHANGELOG.md\n\n* Lock version of RuboCop.\n\n---------\n\nCo-authored-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>",
"is_bot": false,
"headline": "Requires Ruby 2.7+ and upgraded Rubocop to 1.82.0 (#589)",
"author_name": "Go Sueyoshi",
"author_login": "sue445",
"committed_at": "2025-12-22T20:22:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d9ad8cb32d16d0ce48a50d0ec796f0c3e6dc228",
"body": "Add logger as a runtime dependency.",
"is_bot": false,
"headline": "Add logger as a runtime dependency (#583)",
"author_name": "Earlopain",
"author_login": "Earlopain",
"committed_at": "2025-01-30T09:11:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "73510552ba580867e9882fe092568916cbcd810b",
"body": "Add Ruby 3.3 & 3.4 to the CI matrix",
"is_bot": false,
"headline": "Merge pull request #582 from btalayeminaei/test-with-ruby-3.3",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2025-01-05T02:15:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd3db28a409887104566e8312cd02f50280f1657",
"body": null,
"is_bot": false,
"headline": "Test with Ruby 3.4",
"author_name": "Beshad Talayeminaei",
"author_login": "btalayeminaei",
"committed_at": "2025-01-04T22:41:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd2f2e078f5a85f783b6ea24ea902b726ac4f274",
"body": null,
"is_bot": false,
"headline": "Test with Ruby 3.3",
"author_name": "Beshad Talayeminaei",
"author_login": "btalayeminaei",
"committed_at": "2025-01-04T22:26:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d07b2a3a9fcb22e11a7af0fb19b436fa673dd5fe",
"body": "Fix typos",
"is_bot": false,
"headline": "Merge pull request #580 from kianmeng/fix-typos",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2024-04-11T14:19:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a842ef9ec8271d96a3e169fa30f1ff39f26988c",
"body": null,
"is_bot": false,
"headline": "Fix: integration tests in CI.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2024-04-11T14:18:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53d9a682c7492697237af610e69e24ceab59f201",
"body": "Found via `typos --format brief`",
"is_bot": false,
"headline": "Fix typos",
"author_name": "Kian-Meng Ang",
"author_login": "kianmeng",
"committed_at": "2024-04-08T09:02:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36c74f7e13477a870e52f14603ea1e84865436c1",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.\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/v3...v4)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\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": "Bump actions/checkout from 3 to 4",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2023-09-05T02:46:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b3120ad4a6f54990dfec5b10f5769e3714ab1e8",
"body": "* Adds Ruby 3.2 to the CI matrix\r\n\r\n* Use object_id rather than trust, as trust is no longer a method on Object in Ruby 3.2. Condition checked on Psych error based on version of Psych.\r\n\r\n* Update danger token\r\n\r\n* Add CHANGELOG entry\r\n\r\n* Add use of Gem::Version for version comparison",
"is_bot": false,
"headline": "Add Ruby 3.2 to the CI matrix (#571)",
"author_name": "Peter Goldstein",
"author_login": "petergoldstein",
"committed_at": "2023-01-13T18:53:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6fabbfd31af5952f363a8dc573bfa2059e41371d",
"body": "…… (#569)",
"is_bot": false,
"headline": "new integration spec for rails 7 exhibiting failure when executing de…",
"author_name": "Abe Flansburg",
"author_login": "aflansburg",
"committed_at": "2022-12-06T14:58:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ccee824b27f5faa956472bc2c0903e875e5c95e5",
"body": "Fix: Make Danger happy with the CHANGELOG.",
"is_bot": false,
"headline": "Merge pull request #570 from dblock/fix-changelog",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2022-12-06T14:53:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d26757f87fe6f9845c8dd914064aabf2ccdaf5a",
"body": null,
"is_bot": false,
"headline": "Fix: Make Danger happy with the CHANGELOG.",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2022-12-06T14:52:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "639859e6423c8f0843d0f1ac12398c6c0a9ab4f0",
"body": "…/checkout-3\n\nBump actions/checkout from 2 to 3",
"is_bot": false,
"headline": "Merge pull request #565 from hashie/dependabot/github_actions/actions…",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2022-06-27T15:26:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9601a8a864d69d8cd0d1ff3d540d06f2fa0ac50e",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.\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/v2...v3)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\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": "Bump actions/checkout from 2 to 3",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2022-06-24T20:48:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ff4741d78039dd78e85abe3a8518e9f4cc614f3",
"body": "…r_github_actions\n\nAdd dependabot for GitHub Actions",
"is_bot": false,
"headline": "Merge pull request #564 from petergoldstein/feature/add_dependabot_fo…",
"author_name": "Daniel (dB.) Doubrovkine",
"author_login": "dblock",
"committed_at": "2022-06-24T20:48:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c6334c675e116a068ac1f083c47ba49a7448888",
"body": "This will ensure that GitHub Actions stay up to date. As the checkout action is currently out of date, Dependabot should open a PR to update it after this PR is merged.",
"is_bot": false,
"headline": "Add dependabot for GitHub Actions",
"author_name": "Peter Goldstein",
"author_login": "petergoldstein",
"committed_at": "2022-06-24T06:28:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c297afb13bec5cefa69f75f905e6db9879a44a2e",
"body": "Run CI on all branches.",
"is_bot": false,
"headline": "Merge pull request #561 from dblock/ci-all-branches",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2022-03-26T16:57:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "92dc0845c567c851ef11edc7af734fce3ad4867b",
"body": null,
"is_bot": false,
"headline": "Fix: TOC.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2022-03-26T16:55:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f326db495a7690e3ae6db447b196c4d2f9a9079a",
"body": null,
"is_bot": false,
"headline": "Use a public PAT.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2022-03-26T16:49:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a9c4a7d41fc57d7b323b5556988e5d2b482af28",
"body": null,
"is_bot": false,
"headline": "Move danger into its own workflow file.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2022-03-25T14:03:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43b476a34265648d86339874e6d41234fa015e06",
"body": null,
"is_bot": false,
"headline": "Run CI on all branches.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2022-03-24T16:42:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e57eb531f2d028cb56cd1ddab9bb07c70b93abf",
"body": "* Add Ruby 3.1 to CI\r\n\r\nUpdate Rubocop for recent Rubies\r\nDisable Rubocop run for Rubies before Ruby 2.4\r\nQuote '3.0' in the CI configuration to ensure it loads a 3.0.x Ruby\r\nSet RUBYOPT=\"--disable_error_highlight\" so Ruby 3.1 error matchers pass\r\n\r\n* Add CHANGELOG.md entry\r\n\r\n* Re-add deleted line \n[…]\n supported Ruby version to 2.4.\r\n\r\nRemove a number of code bits designed to support Rubies below version 2.4\r\n\r\n* Bump version. Remove unneeded require from Gemfile. Add require to spec/support file",
"is_bot": false,
"headline": "Add Ruby 3.1 to CI (#558)",
"author_name": "Peter Goldstein",
"author_login": "petergoldstein",
"committed_at": "2022-01-28T02:59:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4dc015eb522abfaa2323c36024bc214ab8ccb9cc",
"body": "Include example of Dash's lazy evaluation feature",
"is_bot": false,
"headline": "Merge pull request #557 from njakobsen/patch-1",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2021-12-11T04:08:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39a1acccf20a6108f179342ab6a20248c27cb068",
"body": "This was added in https://github.com/hashie/hashie/pull/34/commits/d20eed6540b7cc264583244088344f73436292b7 but was never documented.",
"is_bot": false,
"headline": "Include example of Dash's lazy evaluation feature",
"author_name": "Nicholas Jakobsen",
"author_login": "njakobsen",
"committed_at": "2021-12-10T00:06:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e201d4006d6b4b1146930707a388254e80e8675e",
"body": null,
"is_bot": false,
"headline": "Preparing for next development iteration, 5.0.1.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T19:47:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "02b528a0e39a869edc786db17dee8dd2aa9a0fd7",
"body": null,
"is_bot": false,
"headline": "Preparing for release, 5.0.0.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T19:45:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31dced911c3fc99ade28a18a9f1772610bbe10cc",
"body": "Added Ruby 3.0 to CI.",
"is_bot": false,
"headline": "Merge pull request #555 from dblock/ruby-3.0",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2021-11-08T03:34:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9009d13bb258673640aee8bd8734df7b67a49810",
"body": "Signed-off-by: dblock <dblock@dblock.org>",
"is_bot": false,
"headline": "Test with Ruby 3.0.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T03:32:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f682d663d7cc740f0c5575fe2435f1750d6d7957",
"body": "Michaelherold dash nil keys",
"is_bot": false,
"headline": "Merge pull request #554 from dblock/michaelherold-dash-nil-keys",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2021-11-08T03:23:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25a3ff6e0498234d25de6a02bdbd3e508ade5898",
"body": "…ie into michaelherold-dash-nil-keys",
"is_bot": false,
"headline": "Merge branch 'dash-nil-keys' of https://github.com/michaelherold/hash…",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T03:21:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "796f9446fe3313685fe1a5c74052e1e942d170a2",
"body": "Add #except under Ruby 3",
"is_bot": false,
"headline": "Merge pull request #545 from jackjennings/master",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2021-11-08T03:20:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e9c577161b09bb1915c55a9045cbcc1435cb69a8",
"body": null,
"is_bot": false,
"headline": "Use ruby/setup-ruby and reset fetch depth.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T03:15:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04cc1781353916f58dea1327ad17981e76c54834",
"body": "Signed-off-by: dblock <dblock@dblock.org>",
"is_bot": false,
"headline": "Fix: lock elasticsearch version in integration specs.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2021-11-08T03:10:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a979d7234ef1588a0a70ed48fe26c990725be8f6",
"body": "Fixed issue where a source hash key can be used in translating multip…",
"is_bot": false,
"headline": "Merge pull request #547 from danwa5/issue-546-trash-properties",
"author_name": "Daniel Doubrovkine (dB.)",
"author_login": "dblock",
"committed_at": "2021-11-08T02:14:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ba96e03a8b5baa098c7ac6841e4c021b02f1910",
"body": "Ruby 3 adds the Hash#except method, which should return the correct\nHashie object instance when called on a Mash or object using the\nHashie::Extensions::IndifferentAccess mixin.",
"is_bot": false,
"headline": "Add #except under Ruby 3",
"author_name": "Jack Jennings",
"author_login": null,
"committed_at": "2021-11-02T19:57:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16eb591205092dab88d87673263ddf02014a350a",
"body": null,
"is_bot": false,
"headline": "Fix CHANGELOG formatting",
"author_name": "Jack Jennings",
"author_login": null,
"committed_at": "2021-11-02T19:57:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf61c298c5a146bacdb255d823d42445033c7cbd",
"body": "Use GitHub actions instead of TravisCI",
"is_bot": false,
"headline": "Merge pull request #543 from hashie/create-github-action",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2021-07-08T00:59:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "509865dfc2bd17685988627bf07e21982a8e50e9",
"body": "This was always meant to be a temporary fix. Let's track actual releases\nbecause GitHub Actions is choking on it.",
"is_bot": false,
"headline": "Track Omniauth official releases",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2021-06-28T03:48:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e7497c3468b62d5fc02e2cb62e58083fbc389be",
"body": "We want to make sure none of our popular downstream integrations break.\nThis ports our old Travis setup over to GitHub Actions.",
"is_bot": false,
"headline": "Add integration tests to CI harness",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2021-06-28T03:48:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8819816be56e92e583f09a33e48a39ae51e85fd",
"body": "Using YAML lists over pseudo-JSON lists makes for easier diffs. Breaking\nblocks apart with an empty line helps readability. Avoiding strings\ndelimeters when you don't need them helps with readability. The name of\nthe workflow should describe its purpose. Multithreading bundle installs\nleads to faster builds. And we need to update the badge to our new CI\nlocation.",
"is_bot": false,
"headline": "Lint the CI configuration and update badge",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2021-06-28T03:48:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da421967765e7766136f2547b4074043f957c297",
"body": "We don't really care about the metrics it gives and we can't access\nconfiguration for it anymore for some reason, so let's end it.",
"is_bot": false,
"headline": "Remove mention and configuration of CodeClimate",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2021-06-28T03:33:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e295a0df579525ab1574a8ff6539a6c5a109fb2c",
"body": "…le properties",
"is_bot": false,
"headline": "Fixed issue where a source hash key can be used in translating multip…",
"author_name": "Daniel Lee",
"author_login": "danwa5",
"committed_at": "2021-06-17T21:17:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b7c893cbb7af25b9c1aff0eb5d9a83b3bf1053d",
"body": null,
"is_bot": false,
"headline": "Remove travis.yml",
"author_name": "Bobby McDonald",
"author_login": "BobbyMcWho",
"committed_at": "2020-12-07T20:37:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a92038f71b119f5697d810a7640a566d5ad66ece",
"body": null,
"is_bot": false,
"headline": "Create initial action",
"author_name": "Bobby McDonald",
"author_login": "BobbyMcWho",
"committed_at": "2020-12-07T19:29:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae55d8ed7502ed677b78a4d75cb52231d4f14c23",
"body": "No need to include Hashie::Extensions::PrettyInspect into Hashie::Mash",
"is_bot": false,
"headline": "Merge pull request #541 from amatsuda/uninclude_pretty_inspect",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-11-05T02:40:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "564f020cce8c782d943ddfc554c7b4ea7bee5fcf",
"body": "…ashie::Hash",
"is_bot": false,
"headline": "Hashie::Mash already includes Hashie::Extensions::PrettyInspect via H…",
"author_name": "Akira Matsuda",
"author_login": "amatsuda",
"committed_at": "2020-11-04T13:15:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75410a6657090348de7bff3e5eab8aa684e49c38",
"body": "Fix inconsistencies with Dash defaults",
"is_bot": false,
"headline": "Merge pull request #537 from michaelherold/dash-consistency",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-30T00:49:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "59d04c851e8ae80d82e93d82059e591eaa7718a7",
"body": "* Run 2.7 tests once",
"is_bot": false,
"headline": "Merge pull request #539 from anakinj/run-27-ci-only-once",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-30T00:41:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14e923d899183595abb5ee096c29e1de707fcc04",
"body": "Drop testing for JRuby 9.0",
"is_bot": false,
"headline": "Merge pull request #538 from michaelherold/drop-testing-for-old-rubies",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-10-27T13:06:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88dabceddf4eaa9d5ccbf9fd8c5a9fd817a2d4bd",
"body": "Per the [JRuby security policy][1], JRuby 9.2 is supported, but 9.0 is\nnot any longer.\n\nJRuby 9.0 has been flaky on builds, so it's now causing a maintenance\nburden.\n\nThis isn't a declaration that we won't support this version, but I\ndon't think it makes sense to test on them any more. In the next major\nrelease, I would like to define a support policy.\n\n[1]: https://github.com/jruby/jruby/blob/4fd5e619f9d1f36d7bbca8f0013bb55e4ad57e8f/SECURITY.md",
"is_bot": false,
"headline": "Drop testing for unsupported Rubies",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-27T01:46:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc41edde9ecb1876b4f97dcf05399bdcacdb046c",
"body": null,
"is_bot": false,
"headline": "Drop jruby-9.0.5.0 from build matrix",
"author_name": "Joakim Antman",
"author_login": "anakinj",
"committed_at": "2020-10-26T16:34:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96b42eab08ff46aa75c769ef7730f6f80a17e12f",
"body": null,
"is_bot": false,
"headline": "Run 2.7 tests once",
"author_name": "Joakim Antman",
"author_login": "anakinj",
"committed_at": "2020-10-26T07:16:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f152e25912d0b93ff08b8964eb757200ad4b6f32",
"body": "The normal behavior of Dash with respect to property defaults differed\nfrom the behavior of a Dash/Trash with IgnoreUndeclared mixed in. This\nis because some situations called the defaults and some did not.\n\nThis change normalizes the behavior so that all situations where the\ndefaults should be used to override unset values behave consistently,\nas well as all situations where the default should not override a `nil`\nvalue.",
"is_bot": false,
"headline": "Fix inconsistencies with Dash defaults",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-24T02:57:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b741e5d7064fffd1ca4c5a6ca05b1ea6d87109ce",
"body": "…different\n\nAllow exporting a normal, not-indifferent Hash",
"is_bot": false,
"headline": "Merge pull request #536 from michaelherold/export-normal-hash-from-in…",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-10-23T13:16:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7d57c921dd9a3e99aff95bcae685f831cade7f9",
"body": "Following the conventions in `activesupport` and the semantics of the\n`#to_hash` method in Ruby's standard library, the `#to_hash` method for\na hash that has mixed in `IndifferentAccess` will now export the hash as\na normal, not-indifferent hash.",
"is_bot": false,
"headline": "Allow exporting a normal, not-indifferent Hash",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-23T03:11:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98df995e2f0433d3d1abe46efd732bc8e20e31cc",
"body": "When exporting a Dash via `#to_h` or `#to_hash`, we expect all\nproperties to be exported whether or not they are set. However, in the\nchange that allows codependent properties to be nilified, we regressed\nthe behavior of exporting all properties.\n\nThere is a gotcha here, which I note in the tests fo\n[…]\navior of double-splat within MRI.\n\nCurrently, JRuby also follows this behavior, but it's not guaranteed\nthat other Rubies will.\n\n[1]: https://github.com/hashie/hashie/issues/353#issuecomment-363294886",
"is_bot": false,
"headline": "Ensure all properties are set on exported Dash",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-23T02:07:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b9a93916f538bfab57815a1d48740c826715ca5d",
"body": "In some cases --- like writing meta-extensions of `IndifferentAccess`\n--- we need access to the ability to convert a key for the purposes of\n`IndifferentAccess`. Exposing this behavior as a module function makes\nthis possible.",
"is_bot": false,
"headline": "Expose `IndifferentAccess` conversion internally",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-23T02:00:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac2444c3c9d020b2d0ef1b011b5bdb37d2b4af62",
"body": "The check here doesn't make sense because it's testing the behavior of\nanother method. The best way to check identity is but checking the\n`#object_id` of an object - thus, this check actually does what the test\nsays it does.",
"is_bot": false,
"headline": "Fix an imprecise spec for `Dash#replace`",
"author_name": "Michael Herold",
"author_login": "michaelherold",
"committed_at": "2020-10-23T01:51:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09581e249729cd7a962b4df47837247c79d4e7ea",
"body": "Fix typo in README for PredefinedValues",
"is_bot": false,
"headline": "Merge pull request #534 from voke/patch-1",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-10-16T23:43:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44fefac209f558b3e60c55236ab5e948180abfa2",
"body": null,
"is_bot": false,
"headline": "Fix typo in README for PredefinedValues",
"author_name": "Gustav",
"author_login": "voke",
"committed_at": "2020-10-16T16:06:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "097ad42b2d3c533dcb411ce5dafae06a9c14fb8a",
"body": "require json at spec_helper to fix #532",
"is_bot": false,
"headline": "Merge pull request #533 from gnomex/fix-json-specs-error",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-10-05T13:37:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4759e049ae8f73eae4e45ec3a0b1691510fe0e27",
"body": null,
"is_bot": false,
"headline": "require json at spec_helper to fix #532",
"author_name": "kenner kliemann",
"author_login": "gnomex",
"committed_at": "2020-10-05T13:10:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "792714b91c3c0393997d13ef43876b1c3c62f64a",
"body": null,
"is_bot": false,
"headline": "Add hash slice using IndifferentAccess.",
"author_name": "kenner kliemann",
"author_login": "gnomex",
"committed_at": "2020-10-03T12:57:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a30327a40b032767b5f61e7b22ec15ac1645cb76",
"body": "Hashie::Extensions::Dash::PredefinedValues",
"is_bot": false,
"headline": "Merge pull request #530 from caalberts/dash-allowed-values",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-09-24T18:47:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4cd2844357adfe9321e31c02b76c9945baaeffe4",
"body": "Extends a Dash with the ability to\naccept only predefined values on a property.\n\n#61",
"is_bot": false,
"headline": "Add Hashie::Extensions::Dash::AllowList",
"author_name": "Albert Salim",
"author_login": "caalberts",
"committed_at": "2020-09-20T03:26:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b24d6dca2c545637bc3cc3ac4d89f565fc27a9d0",
"body": "Updated Copyright to 2020.",
"is_bot": false,
"headline": "Merge pull request #527 from dblock/copyright-2020",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-06-13T02:10:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "daf68c3868b8ff2468d0149ab74d76727d802255",
"body": null,
"is_bot": false,
"headline": "Updated Copyright to (c) 2009-2020 Intridea, Inc., and Contributors.",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2020-06-11T11:45:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f1efdb14cf586880e7fd1b6ed1d608256889c30",
"body": "Small amendments for Hash#merge with IndifferentAccess",
"is_bot": false,
"headline": "Merge pull request #525 from yogeshjain999/indifferent-convert-change",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-06-11T11:36:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b206fb8a79b626d8c4f6edf15caf0eda37e6845c",
"body": "1. Use `indifferent_writer` in `convert!` so that when\n`indifferent_writer`, `convert_key` or `indifferent_value` is\noverridden in included class, `merge` can use those.\n\n2. `convert!` was calling twice if `other` hash was lacking\nindifference. `IndifferentAccess.inject!` already does conversion.",
"is_bot": false,
"headline": "Small amendments for Hash#merge with IndifferentAccess",
"author_name": "Yogesh Khater",
"author_login": "yogeshjain999",
"committed_at": "2020-06-10T05:54:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "694f2e7e3899330b3a699ae8188c6f34ff75ba20",
"body": "Test with Ruby 2.7",
"is_bot": false,
"headline": "Merge pull request #524 from aried3r/patch-2",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-05-29T12:09:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "caa8631f21644b6aed4fc09d69b30f5cf36e1b3b",
"body": "Report success even before allowed_failures finish",
"is_bot": false,
"headline": "Set fast_finish: true",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T09:19:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c52bd997ede2b359ce9ade6611a3acea4bd001b4",
"body": null,
"is_bot": false,
"headline": "Run danger, integration with Ruby 2.7",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:59:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fb8cdbdd32bf338e787523ddd5cad639ed76e36",
"body": null,
"is_bot": false,
"headline": "Rest with TruffleRuby, allow failure",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:58:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ea5e6a54947aa8183f2d9ac75239a3b84dd377d",
"body": null,
"is_bot": false,
"headline": "Try testing JRuby 9.0 on xenial",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:57:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24800c87943292a2ff26d73c6b3910234464adb3",
"body": null,
"is_bot": false,
"headline": "Add changelog entry",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:46:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f824000e3c263999aac45cd54de960214502513f",
"body": "Also switch testing jruby-head from EOL Ubuntu to Travis default (xenial).",
"is_bot": false,
"headline": "Test with JRuby 9.2",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:42:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0862e95fb2eb09cffc02b3393c1b0a78df643d25",
"body": "`sudo: false` is deprecated.\r\n\r\nhttps://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration",
"is_bot": false,
"headline": "Test with Ruby 2.7",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-05-29T08:38:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56bbb28a301b4c37c25f1f41d21f88431ab09e43",
"body": "Added TOC and upgraded danger-changelog to verify the keep-a-changelog formatted CHANGELOG.",
"is_bot": false,
"headline": "Merge pull request #523 from dblock/danger-toc",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-05-11T19:50:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b605a2e8d42c4f199e9ac6534831cb6ac3515c9f",
"body": "…g formatted CHANGELOG.",
"is_bot": false,
"headline": "Added TOC and upgraded danger-changelog to verify the keep-a-changelo…",
"author_name": "dblock",
"author_login": "dblock",
"committed_at": "2020-05-08T21:53:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c2cb9affec78fa13134096d4dd85266c8336335",
"body": null,
"is_bot": false,
"headline": "Hashie mascot (#522)",
"author_name": "Caroline Artz",
"author_login": "carolineartz",
"committed_at": "2020-05-08T18:32:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0bca9255a6234606cbdd98880ccc241f192cfdae",
"body": null,
"is_bot": false,
"headline": "Changes to `Mash` initialization key string conversion. (#521)",
"author_name": "Caroline Artz",
"author_login": "carolineartz",
"committed_at": "2020-05-05T01:15:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c066135a4bd6c75cd19fe342f768d2213df9e684",
"body": null,
"is_bot": false,
"headline": "Elasticsearch integration spec fix (#520)",
"author_name": "Jitendra Rajpurohit",
"author_login": "jitendra1998",
"committed_at": "2020-04-12T21:10:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fe396e3ce4818c951485336ed95187562221bfd",
"body": "Correct link to PR in CHANGELOG.md",
"is_bot": false,
"headline": "Merge pull request #517 from aried3r/patch-1",
"author_name": "Daniel Doubrovkine (dB.) @dblockdotorg",
"author_login": "dblock",
"committed_at": "2020-04-10T13:24:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d151486e8dc26a5ccddf7351151a11b947ebe0f0",
"body": null,
"is_bot": false,
"headline": "Correct link to PR in CHANGELOG.md",
"author_name": "Anton Rieder",
"author_login": "aried3r",
"committed_at": "2020-02-28T21:24:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bfd3e9cde1aa52437a14717f9240a6e1af375e2f",
"body": null,
"is_bot": false,
"headline": "Remove text I missed during release",
"author_name": "Bobby McDonald",
"author_login": "BobbyMcWho",
"committed_at": "2020-02-01T14:49:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1a8b0b2f87b9dbabef8c74f824de5aac8c6036b",
"body": null,
"is_bot": false,
"headline": "Preparing for next development iteration, 4.1.1.",
"author_name": "Bobby McDonald",
"author_login": "BobbyMcWho",
"committed_at": "2020-02-01T14:42:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc2453260ce46dc3aea657e91732bc3f66cf3514",
"body": null,
"is_bot": false,
"headline": "Preparing for release, 4.1.0",
"author_name": "Bobby McDonald",
"author_login": "BobbyMcWho",
"committed_at": "2020-02-01T14:31:56Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 4,
"commits_last_year": 13,
"latest_release_at": "2025-12-24T23:26:52Z",
"latest_release_tag": "v5.1.0",
"releases_from_tags": false,
"days_since_last_push": 29,
"active_weeks_last_year": 4,
"days_since_latest_release": 209,
"mean_days_between_releases": 749.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "hashie",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "rubygems",
"matches_repo": true,
"registry_url": "https://rubygems.org/gems/hashie",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/hashie/hashie",
"versions_count": 50,
"total_downloads": 471040706,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2009-11-12T17:12:37.513000Z",
"latest_published_at": "2025-12-24T23:23:57.596000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 209
}
]
},
"popularity": {
"forks": 315,
"stars": 3037,
"watchers": 37,
"fork_history": {
"days": [
{
"date": "2010-01-20",
"count": 1
},
{
"date": "2010-02-18",
"count": 1
},
{
"date": "2010-05-19",
"count": 1
},
{
"date": "2010-06-03",
"count": 1
},
{
"date": "2010-06-15",
"count": 1
},
{
"date": "2010-07-19",
"count": 1
},
{
"date": "2010-07-28",
"count": 1
},
{
"date": "2010-07-29",
"count": 2
},
{
"date": "2010-08-01",
"count": 1
},
{
"date": "2010-08-16",
"count": 1
},
{
"date": "2010-09-24",
"count": 1
},
{
"date": "2010-10-20",
"count": 1
},
{
"date": "2011-01-13",
"count": 1
},
{
"date": "2011-03-24",
"count": 1
},
{
"date": "2011-04-05",
"count": 1
},
{
"date": "2011-04-06",
"count": 1
},
{
"date": "2011-07-24",
"count": 1
},
{
"date": "2011-08-19",
"count": 1
},
{
"date": "2011-09-17",
"count": 1
},
{
"date": "2011-09-22",
"count": 1
},
{
"date": "2011-10-05",
"count": 1
},
{
"date": "2011-10-24",
"count": 1
},
{
"date": "2011-11-22",
"count": 1
},
{
"date": "2011-12-19",
"count": 1
},
{
"date": "2012-01-03",
"count": 1
},
{
"date": "2012-01-11",
"count": 1
},
{
"date": "2012-02-07",
"count": 1
},
{
"date": "2012-02-13",
"count": 1
},
{
"date": "2012-02-25",
"count": 1
},
{
"date": "2012-02-29",
"count": 1
},
{
"date": "2012-03-05",
"count": 1
},
{
"date": "2012-03-25",
"count": 2
},
{
"date": "2012-03-30",
"count": 1
},
{
"date": "2012-04-02",
"count": 1
},
{
"date": "2012-04-06",
"count": 1
},
{
"date": "2012-04-16",
"count": 1
},
{
"date": "2012-05-08",
"count": 1
},
{
"date": "2012-05-12",
"count": 1
},
{
"date": "2012-05-16",
"count": 1
},
{
"date": "2012-05-17",
"count": 1
},
{
"date": "2012-05-24",
"count": 1
},
{
"date": "2012-06-04",
"count": 1
},
{
"date": "2012-06-05",
"count": 1
},
{
"date": "2012-06-06",
"count": 2
},
{
"date": "2012-06-12",
"count": 1
},
{
"date": "2012-06-14",
"count": 1
},
{
"date": "2012-06-22",
"count": 1
},
{
"date": "2012-07-03",
"count": 1
},
{
"date": "2012-08-03",
"count": 1
},
{
"date": "2012-08-13",
"count": 1
},
{
"date": "2012-09-08",
"count": 1
},
{
"date": "2012-09-20",
"count": 1
},
{
"date": "2012-09-28",
"count": 1
},
{
"date": "2012-10-02",
"count": 1
},
{
"date": "2012-10-03",
"count": 1
},
{
"date": "2012-10-12",
"count": 1
},
{
"date": "2012-10-17",
"count": 1
},
{
"date": "2012-10-30",
"count": 1
},
{
"date": "2012-11-04",
"count": 1
},
{
"date": "2012-12-03",
"count": 1
},
{
"date": "2012-12-22",
"count": 1
},
{
"date": "2013-01-06",
"count": 1
},
{
"date": "2013-01-12",
"count": 1
},
{
"date": "2013-01-13",
"count": 1
},
{
"date": "2013-01-29",
"count": 1
},
{
"date": "2013-02-13",
"count": 1
},
{
"date": "2013-02-18",
"count": 1
},
{
"date": "2013-02-26",
"count": 2
},
{
"date": "2013-03-07",
"count": 1
},
{
"date": "2013-03-14",
"count": 1
},
{
"date": "2013-04-07",
"count": 1
},
{
"date": "2013-04-22",
"count": 1
},
{
"date": "2013-05-08",
"count": 1
},
{
"date": "2013-05-10",
"count": 1
},
{
"date": "2013-05-14",
"count": 1
},
{
"date": "2013-05-25",
"count": 1
},
{
"date": "2013-05-29",
"count": 1
},
{
"date": "2013-06-18",
"count": 1
},
{
"date": "2013-06-21",
"count": 1
},
{
"date": "2013-06-24",
"count": 1
},
{
"date": "2013-06-28",
"count": 1
},
{
"date": "2013-07-08",
"count": 1
},
{
"date": "2013-07-15",
"count": 1
},
{
"date": "2013-07-17",
"count": 1
},
{
"date": "2013-07-28",
"count": 1
},
{
"date": "2013-08-06",
"count": 1
},
{
"date": "2013-10-04",
"count": 1
},
{
"date": "2013-10-05",
"count": 1
},
{
"date": "2013-10-21",
"count": 1
},
{
"date": "2013-10-22",
"count": 1
},
{
"date": "2013-10-25",
"count": 1
},
{
"date": "2013-10-31",
"count": 1
},
{
"date": "2013-12-02",
"count": 1
},
{
"date": "2013-12-03",
"count": 1
},
{
"date": "2013-12-17",
"count": 1
},
{
"date": "2014-01-06",
"count": 1
},
{
"date": "2014-01-15",
"count": 1
},
{
"date": "2014-01-19",
"count": 1
},
{
"date": "2014-01-20",
"count": 1
},
{
"date": "2014-02-03",
"count": 1
},
{
"date": "2014-02-04",
"count": 1
},
{
"date": "2014-02-12",
"count": 1
},
{
"date": "2014-02-26",
"count": 1
},
{
"date": "2014-03-07",
"count": 1
},
{
"date": "2014-03-18",
"count": 1
},
{
"date": "2014-03-27",
"count": 1
},
{
"date": "2014-04-04",
"count": 1
},
{
"date": "2014-04-08",
"count": 2
},
{
"date": "2014-04-12",
"count": 1
},
{
"date": "2014-04-23",
"count": 1
},
{
"date": "2014-05-03",
"count": 1
},
{
"date": "2014-05-15",
"count": 1
},
{
"date": "2014-05-21",
"count": 1
},
{
"date": "2014-06-01",
"count": 1
},
{
"date": "2014-06-04",
"count": 1
},
{
"date": "2014-06-09",
"count": 1
},
{
"date": "2014-06-12",
"count": 1
},
{
"date": "2014-06-25",
"count": 1
},
{
"date": "2014-06-26",
"count": 1
},
{
"date": "2014-06-27",
"count": 1
},
{
"date": "2014-07-06",
"count": 1
},
{
"date": "2014-07-22",
"count": 1
},
{
"date": "2014-08-07",
"count": 1
},
{
"date": "2014-08-10",
"count": 1
},
{
"date": "2014-08-11",
"count": 1
},
{
"date": "2014-08-31",
"count": 1
},
{
"date": "2014-09-04",
"count": 1
},
{
"date": "2014-09-16",
"count": 1
},
{
"date": "2014-09-22",
"count": 1
},
{
"date": "2014-10-09",
"count": 1
},
{
"date": "2014-10-21",
"count": 1
},
{
"date": "2014-11-18",
"count": 1
},
{
"date": "2014-11-25",
"count": 1
},
{
"date": "2014-11-29",
"count": 1
},
{
"date": "2014-12-05",
"count": 1
},
{
"date": "2014-12-09",
"count": 1
},
{
"date": "2014-12-11",
"count": 2
},
{
"date": "2014-12-29",
"count": 1
},
{
"date": "2015-01-08",
"count": 1
},
{
"date": "2015-01-12",
"count": 1
},
{
"date": "2015-01-19",
"count": 1
},
{
"date": "2015-02-04",
"count": 2
},
{
"date": "2015-02-16",
"count": 1
},
{
"date": "2015-03-02",
"count": 1
},
{
"date": "2015-03-03",
"count": 1
},
{
"date": "2015-03-27",
"count": 1
},
{
"date": "2015-03-29",
"count": 1
},
{
"date": "2015-03-30",
"count": 1
},
{
"date": "2015-04-15",
"count": 1
},
{
"date": "2015-05-20",
"count": 1
},
{
"date": "2015-05-27",
"count": 1
},
{
"date": "2015-05-31",
"count": 1
},
{
"date": "2015-08-28",
"count": 1
},
{
"date": "2015-09-06",
"count": 1
},
{
"date": "2015-10-18",
"count": 1
},
{
"date": "2015-11-02",
"count": 1
},
{
"date": "2015-11-09",
"count": 1
},
{
"date": "2015-12-01",
"count": 2
},
{
"date": "2015-12-15",
"count": 1
},
{
"date": "2015-12-17",
"count": 1
},
{
"date": "2015-12-19",
"count": 1
},
{
"date": "2016-01-01",
"count": 1
},
{
"date": "2016-01-21",
"count": 4
},
{
"date": "2016-01-23",
"count": 1
},
{
"date": "2016-01-26",
"count": 1
},
{
"date": "2016-01-31",
"count": 1
},
{
"date": "2016-02-02",
"count": 1
},
{
"date": "2016-02-06",
"count": 2
},
{
"date": "2016-02-12",
"count": 1
},
{
"date": "2016-03-09",
"count": 1
},
{
"date": "2016-03-10",
"count": 1
},
{
"date": "2016-03-21",
"count": 1
},
{
"date": "2016-06-10",
"count": 1
},
{
"date": "2016-06-26",
"count": 1
},
{
"date": "2016-08-01",
"count": 1
},
{
"date": "2016-08-15",
"count": 1
},
{
"date": "2016-08-17",
"count": 1
},
{
"date": "2016-08-25",
"count": 1
},
{
"date": "2016-09-07",
"count": 1
},
{
"date": "2016-09-16",
"count": 2
},
{
"date": "2016-09-19",
"count": 1
},
{
"date": "2016-10-17",
"count": 1
},
{
"date": "2016-10-25",
"count": 1
},
{
"date": "2016-10-26",
"count": 1
},
{
"date": "2016-11-16",
"count": 1
},
{
"date": "2016-12-07",
"count": 2
},
{
"date": "2016-12-08",
"count": 1
},
{
"date": "2017-01-05",
"count": 1
},
{
"date": "2017-01-13",
"count": 1
},
{
"date": "2017-01-17",
"count": 1
},
{
"date": "2017-02-03",
"count": 1
},
{
"date": "2017-02-06",
"count": 1
},
{
"date": "2017-02-07",
"count": 1
},
{
"date": "2017-02-10",
"count": 1
},
{
"date": "2017-02-13",
"count": 1
},
{
"date": "2017-02-15",
"count": 1
},
{
"date": "2017-02-20",
"count": 1
},
{
"date": "2017-02-27",
"count": 1
},
{
"date": "2017-03-20",
"count": 1
},
{
"date": "2017-03-22",
"count": 1
},
{
"date": "2017-05-06",
"count": 1
},
{
"date": "2017-08-01",
"count": 1
},
{
"date": "2017-09-25",
"count": 1
},
{
"date": "2017-11-12",
"count": 1
},
{
"date": "2017-11-21",
"count": 1
},
{
"date": "2017-12-06",
"count": 1
},
{
"date": "2017-12-18",
"count": 1
},
{
"date": "2018-01-29",
"count": 1
},
{
"date": "2018-02-06",
"count": 1
},
{
"date": "2018-02-07",
"count": 1
},
{
"date": "2018-04-09",
"count": 1
},
{
"date": "2018-06-26",
"count": 1
},
{
"date": "2018-07-17",
"count": 1
},
{
"date": "2018-08-03",
"count": 1
},
{
"date": "2018-08-15",
"count": 1
},
{
"date": "2018-08-30",
"count": 1
},
{
"date": "2018-09-18",
"count": 1
},
{
"date": "2018-09-22",
"count": 1
},
{
"date": "2018-09-30",
"count": 1
},
{
"date": "2018-10-11",
"count": 1
},
{
"date": "2018-10-16",
"count": 1
},
{
"date": "2018-11-04",
"count": 1
},
{
"date": "2018-11-18",
"count": 1
},
{
"date": "2018-11-28",
"count": 1
},
{
"date": "2019-01-02",
"count": 1
},
{
"date": "2019-01-12",
"count": 1
},
{
"date": "2019-03-21",
"count": 1
},
{
"date": "2019-03-25",
"count": 1
},
{
"date": "2019-03-29",
"count": 1
},
{
"date": "2019-04-11",
"count": 1
},
{
"date": "2019-05-15",
"count": 1
},
{
"date": "2019-05-25",
"count": 1
},
{
"date": "2019-06-08",
"count": 1
},
{
"date": "2019-07-16",
"count": 1
},
{
"date": "2019-09-26",
"count": 2
},
{
"date": "2019-10-28",
"count": 1
},
{
"date": "2019-11-25",
"count": 1
},
{
"date": "2019-12-03",
"count": 2
},
{
"date": "2020-01-12",
"count": 1
},
{
"date": "2020-01-22",
"count": 1
},
{
"date": "2020-01-29",
"count": 1
},
{
"date": "2020-02-07",
"count": 1
},
{
"date": "2020-02-12",
"count": 1
},
{
"date": "2020-02-28",
"count": 1
},
{
"date": "2020-03-06",
"count": 1
},
{
"date": "2020-04-05",
"count": 1
},
{
"date": "2020-04-23",
"count": 1
},
{
"date": "2020-04-30",
"count": 1
},
{
"date": "2020-05-01",
"count": 1
},
{
"date": "2020-05-04",
"count": 1
},
{
"date": "2020-07-23",
"count": 1
},
{
"date": "2020-09-10",
"count": 1
},
{
"date": "2020-09-15",
"count": 1
},
{
"date": "2020-10-01",
"count": 1
},
{
"date": "2020-10-16",
"count": 1
},
{
"date": "2020-10-25",
"count": 2
},
{
"date": "2020-12-02",
"count": 1
},
{
"date": "2020-12-15",
"count": 1
},
{
"date": "2020-12-31",
"count": 1
},
{
"date": "2021-02-02",
"count": 1
},
{
"date": "2021-04-07",
"count": 1
},
{
"date": "2021-06-17",
"count": 1
},
{
"date": "2021-07-02",
"count": 1
},
{
"date": "2021-07-23",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-08-18",
"count": 1
},
{
"date": "2021-08-19",
"count": 1
},
{
"date": "2021-10-02",
"count": 1
},
{
"date": "2021-11-15",
"count": 1
},
{
"date": "2021-12-09",
"count": 1
},
{
"date": "2022-03-04",
"count": 1
},
{
"date": "2022-03-16",
"count": 1
},
{
"date": "2022-03-24",
"count": 1
},
{
"date": "2022-09-06",
"count": 2
},
{
"date": "2022-10-02",
"count": 1
},
{
"date": "2022-10-20",
"count": 1
},
{
"date": "2022-10-22",
"count": 1
},
{
"date": "2022-11-04",
"count": 1
},
{
"date": "2022-11-09",
"count": 1
},
{
"date": "2024-02-14",
"count": 1
},
{
"date": "2024-04-08",
"count": 1
},
{
"date": "2024-06-08",
"count": 1
},
{
"date": "2024-11-06",
"count": 1
},
{
"date": "2024-12-27",
"count": 1
},
{
"date": "2025-01-04",
"count": 1
},
{
"date": "2025-01-28",
"count": 1
},
{
"date": "2025-07-17",
"count": 1
},
{
"date": "2025-08-12",
"count": 1
},
{
"date": "2025-08-30",
"count": 1
},
{
"date": "2025-12-18",
"count": 1
},
{
"date": "2026-02-15",
"count": 1
},
{
"date": "2026-07-19",
"count": 3
}
],
"complete": true,
"collected": 312,
"total_forks": 315
},
"star_history": {
"days": [
{
"date": "2017-01-28",
"count": 1
},
{
"date": "2017-01-29",
"count": 1
},
{
"date": "2017-01-31",
"count": 1
},
{
"date": "2017-02-01",
"count": 1
},
{
"date": "2017-02-02",
"count": 2
},
{
"date": "2017-02-03",
"count": 1
},
{
"date": "2017-02-04",
"count": 1
},
{
"date": "2017-02-06",
"count": 3
},
{
"date": "2017-02-10",
"count": 1
},
{
"date": "2017-02-12",
"count": 1
},
{
"date": "2017-02-14",
"count": 1
},
{
"date": "2017-02-17",
"count": 1
},
{
"date": "2017-02-18",
"count": 1
},
{
"date": "2017-02-20",
"count": 1
},
{
"date": "2017-02-22",
"count": 1
},
{
"date": "2017-02-25",
"count": 2
},
{
"date": "2017-03-01",
"count": 1
},
{
"date": "2017-03-02",
"count": 1
},
{
"date": "2017-03-04",
"count": 1
},
{
"date": "2017-03-07",
"count": 1
},
{
"date": "2017-03-09",
"count": 1
},
{
"date": "2017-03-10",
"count": 3
},
{
"date": "2017-03-11",
"count": 1
},
{
"date": "2017-03-16",
"count": 1
},
{
"date": "2017-03-17",
"count": 1
},
{
"date": "2017-03-18",
"count": 2
},
{
"date": "2017-03-22",
"count": 1
},
{
"date": "2017-03-27",
"count": 1
},
{
"date": "2017-03-28",
"count": 1
},
{
"date": "2017-03-29",
"count": 1
},
{
"date": "2017-03-30",
"count": 1
},
{
"date": "2017-04-02",
"count": 2
},
{
"date": "2017-04-04",
"count": 1
},
{
"date": "2017-04-06",
"count": 1
},
{
"date": "2017-04-07",
"count": 1
},
{
"date": "2017-04-13",
"count": 2
},
{
"date": "2017-04-14",
"count": 1
},
{
"date": "2017-04-16",
"count": 2
},
{
"date": "2017-04-18",
"count": 1
},
{
"date": "2017-04-19",
"count": 1
},
{
"date": "2017-04-20",
"count": 1
},
{
"date": "2017-04-21",
"count": 2
},
{
"date": "2017-04-26",
"count": 1
},
{
"date": "2017-05-01",
"count": 1
},
{
"date": "2017-05-02",
"count": 3
},
{
"date": "2017-05-03",
"count": 1
},
{
"date": "2017-05-04",
"count": 2
},
{
"date": "2017-05-06",
"count": 1
},
{
"date": "2017-05-08",
"count": 1
},
{
"date": "2017-05-10",
"count": 1
},
{
"date": "2017-05-12",
"count": 1
},
{
"date": "2017-05-14",
"count": 1
},
{
"date": "2017-05-15",
"count": 1
},
{
"date": "2017-05-18",
"count": 2
},
{
"date": "2017-05-27",
"count": 1
},
{
"date": "2017-05-29",
"count": 1
},
{
"date": "2017-05-30",
"count": 2
},
{
"date": "2017-05-31",
"count": 1
},
{
"date": "2017-06-01",
"count": 2
},
{
"date": "2017-06-03",
"count": 1
},
{
"date": "2017-06-04",
"count": 1
},
{
"date": "2017-06-06",
"count": 1
},
{
"date": "2017-06-09",
"count": 1
},
{
"date": "2017-06-10",
"count": 1
},
{
"date": "2017-06-14",
"count": 2
},
{
"date": "2017-06-16",
"count": 1
},
{
"date": "2017-06-23",
"count": 1
},
{
"date": "2017-06-27",
"count": 3
},
{
"date": "2017-07-05",
"count": 1
},
{
"date": "2017-07-06",
"count": 1
},
{
"date": "2017-07-09",
"count": 1
},
{
"date": "2017-07-10",
"count": 1
},
{
"date": "2017-07-13",
"count": 1
},
{
"date": "2017-07-14",
"count": 1
},
{
"date": "2017-07-18",
"count": 1
},
{
"date": "2017-07-20",
"count": 2
},
{
"date": "2017-07-22",
"count": 2
},
{
"date": "2017-07-24",
"count": 1
},
{
"date": "2017-07-25",
"count": 1
},
{
"date": "2017-07-27",
"count": 1
},
{
"date": "2017-07-28",
"count": 2
},
{
"date": "2017-08-01",
"count": 1
},
{
"date": "2017-08-03",
"count": 2
},
{
"date": "2017-08-05",
"count": 1
},
{
"date": "2017-08-07",
"count": 1
},
{
"date": "2017-08-08",
"count": 2
},
{
"date": "2017-08-09",
"count": 2
},
{
"date": "2017-08-19",
"count": 2
},
{
"date": "2017-08-20",
"count": 1
},
{
"date": "2017-08-21",
"count": 2
},
{
"date": "2017-08-30",
"count": 2
},
{
"date": "2017-09-02",
"count": 1
},
{
"date": "2017-09-06",
"count": 2
},
{
"date": "2017-09-12",
"count": 3
},
{
"date": "2017-09-13",
"count": 1
},
{
"date": "2017-09-21",
"count": 1
},
{
"date": "2017-09-22",
"count": 1
},
{
"date": "2017-09-23",
"count": 1
},
{
"date": "2017-09-26",
"count": 3
},
{
"date": "2017-09-27",
"count": 1
},
{
"date": "2017-09-28",
"count": 1
},
{
"date": "2017-10-03",
"count": 1
},
{
"date": "2017-10-05",
"count": 2
},
{
"date": "2017-10-06",
"count": 1
},
{
"date": "2017-10-09",
"count": 2
},
{
"date": "2017-10-16",
"count": 1
},
{
"date": "2017-10-18",
"count": 1
},
{
"date": "2017-10-20",
"count": 1
},
{
"date": "2017-10-24",
"count": 2
},
{
"date": "2017-10-25",
"count": 3
},
{
"date": "2017-10-26",
"count": 2
},
{
"date": "2017-10-28",
"count": 1
},
{
"date": "2017-11-02",
"count": 2
},
{
"date": "2017-11-08",
"count": 2
},
{
"date": "2017-11-09",
"count": 1
},
{
"date": "2017-11-10",
"count": 1
},
{
"date": "2017-11-16",
"count": 1
},
{
"date": "2017-11-19",
"count": 1
},
{
"date": "2017-11-20",
"count": 1
},
{
"date": "2017-11-22",
"count": 1
},
{
"date": "2017-12-02",
"count": 1
},
{
"date": "2017-12-05",
"count": 1
},
{
"date": "2017-12-18",
"count": 1
},
{
"date": "2017-12-19",
"count": 1
},
{
"date": "2017-12-21",
"count": 2
},
{
"date": "2017-12-27",
"count": 2
},
{
"date": "2017-12-28",
"count": 1
},
{
"date": "2018-01-05",
"count": 1
},
{
"date": "2018-01-06",
"count": 1
},
{
"date": "2018-01-07",
"count": 1
},
{
"date": "2018-01-09",
"count": 2
},
{
"date": "2018-01-13",
"count": 1
},
{
"date": "2018-01-15",
"count": 1
},
{
"date": "2018-01-18",
"count": 2
},
{
"date": "2018-01-21",
"count": 1
},
{
"date": "2018-01-22",
"count": 1
},
{
"date": "2018-01-26",
"count": 1
},
{
"date": "2018-01-29",
"count": 1
},
{
"date": "2018-02-02",
"count": 1
},
{
"date": "2018-02-03",
"count": 1
},
{
"date": "2018-02-06",
"count": 1
},
{
"date": "2018-02-07",
"count": 1
},
{
"date": "2018-02-08",
"count": 1
},
{
"date": "2018-02-11",
"count": 1
},
{
"date": "2018-02-13",
"count": 1
},
{
"date": "2018-02-16",
"count": 1
},
{
"date": "2018-02-18",
"count": 1
},
{
"date": "2018-03-03",
"count": 1
},
{
"date": "2018-03-13",
"count": 1
},
{
"date": "2018-03-19",
"count": 1
},
{
"date": "2018-03-20",
"count": 1
},
{
"date": "2018-03-21",
"count": 1
},
{
"date": "2018-03-22",
"count": 2
},
{
"date": "2018-03-26",
"count": 1
},
{
"date": "2018-03-28",
"count": 1
},
{
"date": "2018-03-29",
"count": 2
},
{
"date": "2018-03-30",
"count": 1
},
{
"date": "2018-04-03",
"count": 3
},
{
"date": "2018-04-04",
"count": 1
},
{
"date": "2018-04-05",
"count": 2
},
{
"date": "2018-04-12",
"count": 1
},
{
"date": "2018-04-22",
"count": 2
},
{
"date": "2018-04-26",
"count": 2
},
{
"date": "2018-04-28",
"count": 1
},
{
"date": "2018-05-04",
"count": 1
},
{
"date": "2018-05-06",
"count": 1
},
{
"date": "2018-05-09",
"count": 1
},
{
"date": "2018-05-15",
"count": 2
},
{
"date": "2018-05-17",
"count": 1
},
{
"date": "2018-05-23",
"count": 1
},
{
"date": "2018-05-29",
"count": 1
},
{
"date": "2018-05-31",
"count": 2
},
{
"date": "2018-06-04",
"count": 1
},
{
"date": "2018-06-05",
"count": 1
},
{
"date": "2018-06-06",
"count": 1
},
{
"date": "2018-06-08",
"count": 1
},
{
"date": "2018-06-12",
"count": 2
},
{
"date": "2018-06-13",
"count": 1
},
{
"date": "2018-06-14",
"count": 1
},
{
"date": "2018-06-16",
"count": 1
},
{
"date": "2018-06-19",
"count": 2
},
{
"date": "2018-06-22",
"count": 1
},
{
"date": "2018-07-03",
"count": 1
},
{
"date": "2018-07-05",
"count": 2
},
{
"date": "2018-07-06",
"count": 1
},
{
"date": "2018-07-13",
"count": 1
},
{
"date": "2018-07-18",
"count": 1
},
{
"date": "2018-07-19",
"count": 1
},
{
"date": "2018-07-26",
"count": 1
},
{
"date": "2018-07-27",
"count": 1
},
{
"date": "2018-08-03",
"count": 2
},
{
"date": "2018-08-09",
"count": 1
},
{
"date": "2018-08-13",
"count": 1
},
{
"date": "2018-08-14",
"count": 1
},
{
"date": "2018-08-16",
"count": 2
},
{
"date": "2018-08-23",
"count": 1
},
{
"date": "2018-08-28",
"count": 1
},
{
"date": "2018-09-03",
"count": 1
},
{
"date": "2018-09-04",
"count": 2
},
{
"date": "2018-09-06",
"count": 1
},
{
"date": "2018-09-11",
"count": 1
},
{
"date": "2018-09-14",
"count": 1
},
{
"date": "2018-09-18",
"count": 1
},
{
"date": "2018-09-19",
"count": 1
},
{
"date": "2018-09-21",
"count": 2
},
{
"date": "2018-09-26",
"count": 1
},
{
"date": "2018-09-29",
"count": 1
},
{
"date": "2018-10-05",
"count": 1
},
{
"date": "2018-10-08",
"count": 1
},
{
"date": "2018-10-12",
"count": 1
},
{
"date": "2018-10-17",
"count": 1
},
{
"date": "2018-10-18",
"count": 1
},
{
"date": "2018-10-21",
"count": 1
},
{
"date": "2018-10-24",
"count": 2
},
{
"date": "2018-10-29",
"count": 2
},
{
"date": "2018-10-30",
"count": 1
},
{
"date": "2018-11-01",
"count": 2
},
{
"date": "2018-11-02",
"count": 1
},
{
"date": "2018-11-07",
"count": 1
},
{
"date": "2018-11-09",
"count": 1
},
{
"date": "2018-11-12",
"count": 2
},
{
"date": "2018-11-13",
"count": 1
},
{
"date": "2018-11-14",
"count": 1
},
{
"date": "2018-11-15",
"count": 1
},
{
"date": "2018-11-16",
"count": 1
},
{
"date": "2018-11-18",
"count": 1
},
{
"date": "2018-11-21",
"count": 1
},
{
"date": "2018-11-23",
"count": 4
},
{
"date": "2018-11-28",
"count": 1
},
{
"date": "2018-12-09",
"count": 1
},
{
"date": "2018-12-10",
"count": 1
},
{
"date": "2018-12-11",
"count": 4
},
{
"date": "2018-12-12",
"count": 2
},
{
"date": "2018-12-13",
"count": 3
},
{
"date": "2018-12-14",
"count": 1
},
{
"date": "2018-12-15",
"count": 1
},
{
"date": "2018-12-20",
"count": 1
},
{
"date": "2018-12-21",
"count": 1
},
{
"date": "2018-12-22",
"count": 1
},
{
"date": "2018-12-23",
"count": 1
},
{
"date": "2018-12-27",
"count": 1
},
{
"date": "2018-12-31",
"count": 1
},
{
"date": "2019-01-02",
"count": 1
},
{
"date": "2019-01-04",
"count": 1
},
{
"date": "2019-01-06",
"count": 4
},
{
"date": "2019-01-07",
"count": 1
},
{
"date": "2019-01-09",
"count": 1
},
{
"date": "2019-01-13",
"count": 1
},
{
"date": "2019-01-16",
"count": 1
},
{
"date": "2019-01-17",
"count": 1
},
{
"date": "2019-01-23",
"count": 1
},
{
"date": "2019-01-24",
"count": 1
},
{
"date": "2019-01-26",
"count": 1
},
{
"date": "2019-02-04",
"count": 2
},
{
"date": "2019-02-10",
"count": 1
},
{
"date": "2019-02-12",
"count": 1
},
{
"date": "2019-02-14",
"count": 1
},
{
"date": "2019-02-15",
"count": 1
},
{
"date": "2019-02-26",
"count": 1
},
{
"date": "2019-02-28",
"count": 1
},
{
"date": "2019-03-04",
"count": 1
},
{
"date": "2019-03-07",
"count": 2
},
{
"date": "2019-03-11",
"count": 1
},
{
"date": "2019-03-13",
"count": 1
},
{
"date": "2019-03-20",
"count": 2
},
{
"date": "2019-03-21",
"count": 3
},
{
"date": "2019-03-25",
"count": 1
},
{
"date": "2019-03-26",
"count": 1
},
{
"date": "2019-03-27",
"count": 2
},
{
"date": "2019-03-31",
"count": 2
},
{
"date": "2019-04-05",
"count": 2
},
{
"date": "2019-04-15",
"count": 1
},
{
"date": "2019-04-16",
"count": 1
},
{
"date": "2019-04-18",
"count": 1
},
{
"date": "2019-04-19",
"count": 1
},
{
"date": "2019-04-20",
"count": 1
},
{
"date": "2019-04-21",
"count": 1
},
{
"date": "2019-04-25",
"count": 1
},
{
"date": "2019-05-06",
"count": 1
},
{
"date": "2019-05-08",
"count": 3
},
{
"date": "2019-05-13",
"count": 1
},
{
"date": "2019-05-24",
"count": 1
},
{
"date": "2019-05-27",
"count": 1
},
{
"date": "2019-05-28",
"count": 1
},
{
"date": "2019-05-29",
"count": 1
},
{
"date": "2019-06-05",
"count": 2
},
{
"date": "2019-06-07",
"count": 1
},
{
"date": "2019-06-09",
"count": 1
},
{
"date": "2019-06-12",
"count": 1
},
{
"date": "2019-06-14",
"count": 1
},
{
"date": "2019-06-15",
"count": 1
},
{
"date": "2019-06-16",
"count": 1
},
{
"date": "2019-06-23",
"count": 1
},
{
"date": "2019-06-25",
"count": 2
},
{
"date": "2019-07-14",
"count": 1
},
{
"date": "2019-07-18",
"count": 1
},
{
"date": "2019-07-20",
"count": 2
},
{
"date": "2019-07-28",
"count": 1
},
{
"date": "2019-07-29",
"count": 3
},
{
"date": "2019-07-30",
"count": 1
},
{
"date": "2019-08-01",
"count": 1
},
{
"date": "2019-08-02",
"count": 1
},
{
"date": "2019-08-04",
"count": 1
},
{
"date": "2019-08-07",
"count": 1
},
{
"date": "2019-08-10",
"count": 1
},
{
"date": "2019-08-13",
"count": 1
},
{
"date": "2019-08-19",
"count": 1
},
{
"date": "2019-08-20",
"count": 1
},
{
"date": "2019-08-22",
"count": 2
},
{
"date": "2019-08-29",
"count": 1
},
{
"date": "2019-09-09",
"count": 1
},
{
"date": "2019-09-11",
"count": 1
},
{
"date": "2019-09-26",
"count": 1
},
{
"date": "2019-10-01",
"count": 1
},
{
"date": "2019-10-03",
"count": 1
},
{
"date": "2019-10-22",
"count": 1
},
{
"date": "2019-10-23",
"count": 2
},
{
"date": "2019-10-25",
"count": 2
},
{
"date": "2019-10-30",
"count": 2
},
{
"date": "2019-10-31",
"count": 13
},
{
"date": "2019-11-01",
"count": 5
},
{
"date": "2019-11-02",
"count": 3
},
{
"date": "2019-11-03",
"count": 2
},
{
"date": "2019-11-04",
"count": 3
},
{
"date": "2019-11-05",
"count": 2
},
{
"date": "2019-11-06",
"count": 1
},
{
"date": "2019-11-14",
"count": 2
},
{
"date": "2019-11-15",
"count": 1
},
{
"date": "2019-11-17",
"count": 1
},
{
"date": "2019-11-22",
"count": 1
},
{
"date": "2019-11-23",
"count": 3
},
{
"date": "2019-11-28",
"count": 2
},
{
"date": "2019-12-01",
"count": 1
},
{
"date": "2019-12-02",
"count": 2
},
{
"date": "2019-12-03",
"count": 2
},
{
"date": "2019-12-04",
"count": 2
},
{
"date": "2019-12-05",
"count": 1
},
{
"date": "2019-12-06",
"count": 1
},
{
"date": "2019-12-09",
"count": 1
},
{
"date": "2019-12-26",
"count": 1
},
{
"date": "2020-01-19",
"count": 1
},
{
"date": "2020-01-21",
"count": 1
},
{
"date": "2020-01-29",
"count": 1
},
{
"date": "2020-01-30",
"count": 1
},
{
"date": "2020-02-04",
"count": 1
},
{
"date": "2020-02-05",
"count": 1
},
{
"date": "2020-02-07",
"count": 2
},
{
"date": "2020-02-11",
"count": 1
},
{
"date": "2020-02-16",
"count": 1
},
{
"date": "2020-02-18",
"count": 1
},
{
"date": "2020-02-21",
"count": 1
},
{
"date": "2020-02-22",
"count": 1
},
{
"date": "2020-02-26",
"count": 1
},
{
"date": "2020-02-28",
"count": 1
},
{
"date": "2020-03-02",
"count": 1
},
{
"date": "2020-03-06",
"count": 1
},
{
"date": "2020-03-12",
"count": 1
},
{
"date": "2020-03-13",
"count": 1
},
{
"date": "2020-03-19",
"count": 1
},
{
"date": "2020-03-21",
"count": 1
},
{
"date": "2020-03-24",
"count": 1
},
{
"date": "2020-03-29",
"count": 1
},
{
"date": "2020-03-31",
"count": 1
},
{
"date": "2020-04-05",
"count": 1
},
{
"date": "2020-04-06",
"count": 1
},
{
"date": "2020-04-07",
"count": 2
},
{
"date": "2020-04-13",
"count": 1
},
{
"date": "2020-04-17",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-04-23",
"count": 1
},
{
"date": "2020-04-26",
"count": 1
},
{
"date": "2020-04-28",
"count": 1
},
{
"date": "2020-05-03",
"count": 1
},
{
"date": "2020-05-04",
"count": 1
},
{
"date": "2020-05-13",
"count": 1
},
{
"date": "2020-05-14",
"count": 1
},
{
"date": "2020-05-21",
"count": 1
},
{
"date": "2020-05-29",
"count": 2
},
{
"date": "2020-06-06",
"count": 1
},
{
"date": "2020-06-09",
"count": 2
},
{
"date": "2020-06-12",
"count": 1
},
{
"date": "2020-06-20",
"count": 1
},
{
"date": "2020-06-21",
"count": 1
},
{
"date": "2020-06-23",
"count": 1
},
{
"date": "2020-06-24",
"count": 1
},
{
"date": "2020-06-29",
"count": 1
},
{
"date": "2020-07-01",
"count": 1
},
{
"date": "2020-07-02",
"count": 1
},
{
"date": "2020-07-04",
"count": 1
},
{
"date": "2020-07-07",
"count": 1
},
{
"date": "2020-07-09",
"count": 1
},
{
"date": "2020-07-14",
"count": 1
},
{
"date": "2020-07-16",
"count": 1
},
{
"date": "2020-07-18",
"count": 2
},
{
"date": "2020-07-22",
"count": 1
},
{
"date": "2020-07-23",
"count": 2
},
{
"date": "2020-08-02",
"count": 2
},
{
"date": "2020-08-03",
"count": 1
},
{
"date": "2020-08-04",
"count": 1
},
{
"date": "2020-08-07",
"count": 1
},
{
"date": "2020-08-11",
"count": 1
},
{
"date": "2020-08-13",
"count": 1
},
{
"date": "2020-08-20",
"count": 1
},
{
"date": "2020-08-21",
"count": 1
},
{
"date": "2020-09-10",
"count": 1
},
{
"date": "2020-09-24",
"count": 1
},
{
"date": "2020-09-29",
"count": 1
},
{
"date": "2020-10-02",
"count": 1
},
{
"date": "2020-10-05",
"count": 1
},
{
"date": "2020-10-06",
"count": 1
},
{
"date": "2020-10-08",
"count": 1
},
{
"date": "2020-10-09",
"count": 1
},
{
"date": "2020-10-10",
"count": 1
},
{
"date": "2020-10-13",
"count": 1
},
{
"date": "2020-10-30",
"count": 1
},
{
"date": "2020-11-02",
"count": 1
},
{
"date": "2020-11-04",
"count": 1
},
{
"date": "2020-11-05",
"count": 3
},
{
"date": "2020-11-08",
"count": 1
},
{
"date": "2020-11-12",
"count": 1
},
{
"date": "2020-11-14",
"count": 1
},
{
"date": "2020-11-18",
"count": 1
},
{
"date": "2020-11-25",
"count": 1
},
{
"date": "2020-12-04",
"count": 1
},
{
"date": "2020-12-06",
"count": 1
},
{
"date": "2020-12-08",
"count": 1
},
{
"date": "2020-12-15",
"count": 1
},
{
"date": "2020-12-16",
"count": 2
},
{
"date": "2020-12-17",
"count": 1
},
{
"date": "2020-12-18",
"count": 1
},
{
"date": "2020-12-19",
"count": 3
},
{
"date": "2020-12-23",
"count": 1
},
{
"date": "2020-12-29",
"count": 1
},
{
"date": "2020-12-30",
"count": 1
},
{
"date": "2021-01-03",
"count": 2
},
{
"date": "2021-01-04",
"count": 1
},
{
"date": "2021-01-07",
"count": 1
},
{
"date": "2021-01-11",
"count": 1
},
{
"date": "2021-01-15",
"count": 1
},
{
"date": "2021-01-16",
"count": 1
},
{
"date": "2021-01-18",
"count": 1
},
{
"date": "2021-01-20",
"count": 1
},
{
"date": "2021-01-22",
"count": 1
},
{
"date": "2021-01-28",
"count": 1
},
{
"date": "2021-01-29",
"count": 1
},
{
"date": "2021-02-01",
"count": 1
},
{
"date": "2021-02-07",
"count": 1
},
{
"date": "2021-02-08",
"count": 1
},
{
"date": "2021-02-17",
"count": 1
},
{
"date": "2021-02-19",
"count": 1
},
{
"date": "2021-02-20",
"count": 1
},
{
"date": "2021-02-23",
"count": 2
},
{
"date": "2021-02-26",
"count": 1
},
{
"date": "2021-03-02",
"count": 1
},
{
"date": "2021-03-03",
"count": 1
},
{
"date": "2021-03-06",
"count": 1
},
{
"date": "2021-03-10",
"count": 1
},
{
"date": "2021-03-14",
"count": 1
},
{
"date": "2021-03-18",
"count": 3
},
{
"date": "2021-03-20",
"count": 1
},
{
"date": "2021-03-30",
"count": 1
},
{
"date": "2021-03-31",
"count": 1
},
{
"date": "2021-04-02",
"count": 1
},
{
"date": "2021-04-03",
"count": 1
},
{
"date": "2021-04-05",
"count": 1
},
{
"date": "2021-04-08",
"count": 1
},
{
"date": "2021-04-11",
"count": 1
},
{
"date": "2021-04-26",
"count": 1
},
{
"date": "2021-04-28",
"count": 1
},
{
"date": "2021-05-02",
"count": 1
},
{
"date": "2021-05-08",
"count": 1
},
{
"date": "2021-05-10",
"count": 1
},
{
"date": "2021-05-11",
"count": 1
},
{
"date": "2021-05-12",
"count": 1
},
{
"date": "2021-05-21",
"count": 2
},
{
"date": "2021-05-23",
"count": 1
},
{
"date": "2021-05-25",
"count": 1
},
{
"date": "2021-05-26",
"count": 1
},
{
"date": "2021-05-29",
"count": 1
},
{
"date": "2021-05-30",
"count": 1
},
{
"date": "2021-05-31",
"count": 1
},
{
"date": "2021-06-01",
"count": 2
},
{
"date": "2021-06-05",
"count": 1
},
{
"date": "2021-06-06",
"count": 1
},
{
"date": "2021-06-14",
"count": 1
},
{
"date": "2021-06-16",
"count": 1
},
{
"date": "2021-06-29",
"count": 1
},
{
"date": "2021-06-30",
"count": 2
},
{
"date": "2021-07-02",
"count": 2
},
{
"date": "2021-07-06",
"count": 1
},
{
"date": "2021-07-07",
"count": 1
},
{
"date": "2021-07-10",
"count": 1
},
{
"date": "2021-07-12",
"count": 1
},
{
"date": "2021-07-19",
"count": 1
},
{
"date": "2021-07-22",
"count": 1
},
{
"date": "2021-07-25",
"count": 1
},
{
"date": "2021-07-26",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-07-28",
"count": 1
},
{
"date": "2021-07-30",
"count": 1
},
{
"date": "2021-07-31",
"count": 1
},
{
"date": "2021-08-15",
"count": 1
},
{
"date": "2021-08-17",
"count": 1
},
{
"date": "2021-08-20",
"count": 1
},
{
"date": "2021-08-22",
"count": 1
},
{
"date": "2021-09-02",
"count": 1
},
{
"date": "2021-09-04",
"count": 1
},
{
"date": "2021-09-10",
"count": 2
},
{
"date": "2021-09-19",
"count": 2
},
{
"date": "2021-09-21",
"count": 1
},
{
"date": "2021-10-07",
"count": 1
},
{
"date": "2021-10-12",
"count": 1
},
{
"date": "2021-10-15",
"count": 2
},
{
"date": "2021-10-22",
"count": 1
},
{
"date": "2021-11-05",
"count": 1
},
{
"date": "2021-11-06",
"count": 2
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2021-11-13",
"count": 1
},
{
"date": "2021-11-20",
"count": 1
},
{
"date": "2021-11-21",
"count": 1
},
{
"date": "2021-11-24",
"count": 1
},
{
"date": "2021-11-27",
"count": 1
},
{
"date": "2021-12-08",
"count": 1
},
{
"date": "2021-12-15",
"count": 1
},
{
"date": "2021-12-29",
"count": 1
},
{
"date": "2022-01-05",
"count": 1
},
{
"date": "2022-01-06",
"count": 1
},
{
"date": "2022-01-10",
"count": 2
},
{
"date": "2022-01-16",
"count": 1
},
{
"date": "2022-01-26",
"count": 1
},
{
"date": "2022-01-29",
"count": 1
},
{
"date": "2022-02-01",
"count": 2
},
{
"date": "2022-02-02",
"count": 1
},
{
"date": "2022-02-09",
"count": 1
},
{
"date": "2022-02-13",
"count": 2
},
{
"date": "2022-03-03",
"count": 1
},
{
"date": "2022-03-11",
"count": 1
},
{
"date": "2022-03-16",
"count": 1
},
{
"date": "2022-03-17",
"count": 1
},
{
"date": "2022-03-20",
"count": 1
},
{
"date": "2022-03-21",
"count": 1
},
{
"date": "2022-03-24",
"count": 1
},
{
"date": "2022-03-25",
"count": 1
},
{
"date": "2022-03-26",
"count": 1
},
{
"date": "2022-03-28",
"count": 1
},
{
"date": "2022-03-29",
"count": 1
},
{
"date": "2022-03-30",
"count": 1
},
{
"date": "2022-03-31",
"count": 2
},
{
"date": "2022-04-04",
"count": 2
},
{
"date": "2022-04-08",
"count": 1
},
{
"date": "2022-04-12",
"count": 3
},
{
"date": "2022-04-13",
"count": 1
},
{
"date": "2022-04-14",
"count": 1
},
{
"date": "2022-04-15",
"count": 1
},
{
"date": "2022-04-16",
"count": 1
},
{
"date": "2022-04-19",
"count": 1
},
{
"date": "2022-04-21",
"count": 1
},
{
"date": "2022-04-23",
"count": 2
},
{
"date": "2022-04-24",
"count": 1
},
{
"date": "2022-05-04",
"count": 2
},
{
"date": "2022-05-06",
"count": 1
},
{
"date": "2022-05-21",
"count": 1
},
{
"date": "2022-05-26",
"count": 1
},
{
"date": "2022-05-27",
"count": 1
},
{
"date": "2022-06-04",
"count": 1
},
{
"date": "2022-06-16",
"count": 1
},
{
"date": "2022-06-24",
"count": 2
},
{
"date": "2022-06-29",
"count": 1
},
{
"date": "2022-07-05",
"count": 1
},
{
"date": "2022-07-06",
"count": 2
},
{
"date": "2022-07-07",
"count": 1
},
{
"date": "2022-07-08",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-07-16",
"count": 1
},
{
"date": "2022-07-18",
"count": 1
},
{
"date": "2022-07-22",
"count": 2
},
{
"date": "2022-07-25",
"count": 1
},
{
"date": "2022-07-31",
"count": 1
},
{
"date": "2022-08-10",
"count": 1
},
{
"date": "2022-08-11",
"count": 1
},
{
"date": "2022-08-27",
"count": 1
},
{
"date": "2022-09-01",
"count": 1
},
{
"date": "2022-09-03",
"count": 1
},
{
"date": "2022-09-07",
"count": 1
},
{
"date": "2022-09-12",
"count": 2
},
{
"date": "2022-09-13",
"count": 1
},
{
"date": "2022-09-15",
"count": 2
},
{
"date": "2022-09-30",
"count": 1
},
{
"date": "2022-10-01",
"count": 1
},
{
"date": "2022-10-04",
"count": 1
},
{
"date": "2022-10-07",
"count": 1
},
{
"date": "2022-10-10",
"count": 1
},
{
"date": "2022-10-19",
"count": 1
},
{
"date": "2022-10-20",
"count": 1
},
{
"date": "2022-10-22",
"count": 1
},
{
"date": "2022-10-25",
"count": 1
},
{
"date": "2022-11-05",
"count": 1
},
{
"date": "2022-11-10",
"count": 1
},
{
"date": "2022-11-15",
"count": 2
},
{
"date": "2022-11-25",
"count": 1
},
{
"date": "2022-11-30",
"count": 1
},
{
"date": "2022-12-01",
"count": 1
},
{
"date": "2022-12-02",
"count": 1
},
{
"date": "2022-12-05",
"count": 1
},
{
"date": "2022-12-06",
"count": 1
},
{
"date": "2022-12-13",
"count": 1
},
{
"date": "2022-12-14",
"count": 1
},
{
"date": "2022-12-15",
"count": 1
},
{
"date": "2022-12-23",
"count": 1
},
{
"date": "2022-12-29",
"count": 1
},
{
"date": "2023-01-01",
"count": 2
},
{
"date": "2023-01-02",
"count": 1
},
{
"date": "2023-01-08",
"count": 1
},
{
"date": "2023-01-09",
"count": 1
},
{
"date": "2023-01-14",
"count": 1
},
{
"date": "2023-01-15",
"count": 1
},
{
"date": "2023-01-16",
"count": 1
},
{
"date": "2023-01-20",
"count": 1
},
{
"date": "2023-01-22",
"count": 1
},
{
"date": "2023-01-30",
"count": 2
},
{
"date": "2023-02-06",
"count": 1
},
{
"date": "2023-02-07",
"count": 1
},
{
"date": "2023-02-10",
"count": 1
},
{
"date": "2023-02-13",
"count": 4
},
{
"date": "2023-02-14",
"count": 1
},
{
"date": "2023-02-20",
"count": 2
},
{
"date": "2023-02-23",
"count": 2
},
{
"date": "2023-03-02",
"count": 1
},
{
"date": "2023-03-06",
"count": 1
},
{
"date": "2023-03-09",
"count": 1
},
{
"date": "2023-03-13",
"count": 1
},
{
"date": "2023-03-17",
"count": 1
},
{
"date": "2023-03-26",
"count": 1
},
{
"date": "2023-04-02",
"count": 1
},
{
"date": "2023-04-03",
"count": 1
},
{
"date": "2023-04-06",
"count": 1
},
{
"date": "2023-04-12",
"count": 1
},
{
"date": "2023-04-13",
"count": 1
},
{
"date": "2023-04-17",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-21",
"count": 1
},
{
"date": "2023-04-22",
"count": 1
},
{
"date": "2023-04-29",
"count": 1
},
{
"date": "2023-04-30",
"count": 1
},
{
"date": "2023-05-05",
"count": 3
},
{
"date": "2023-05-07",
"count": 1
},
{
"date": "2023-05-12",
"count": 1
},
{
"date": "2023-05-16",
"count": 1
},
{
"date": "2023-05-17",
"count": 1
},
{
"date": "2023-05-24",
"count": 1
},
{
"date": "2023-05-31",
"count": 1
},
{
"date": "2023-06-01",
"count": 1
},
{
"date": "2023-06-10",
"count": 1
},
{
"date": "2023-06-14",
"count": 1
},
{
"date": "2023-06-22",
"count": 1
},
{
"date": "2023-07-06",
"count": 1
},
{
"date": "2023-07-08",
"count": 1
},
{
"date": "2023-07-10",
"count": 1
},
{
"date": "2023-07-13",
"count": 1
},
{
"date": "2023-07-14",
"count": 1
},
{
"date": "2023-07-23",
"count": 1
},
{
"date": "2023-07-26",
"count": 1
},
{
"date": "2023-09-05",
"count": 4
},
{
"date": "2023-09-06",
"count": 1
},
{
"date": "2023-09-07",
"count": 1
},
{
"date": "2023-09-08",
"count": 2
},
{
"date": "2023-09-13",
"count": 1
},
{
"date": "2023-09-14",
"count": 1
},
{
"date": "2023-09-18",
"count": 1
},
{
"date": "2023-09-30",
"count": 1
},
{
"date": "2023-10-02",
"count": 1
},
{
"date": "2023-10-03",
"count": 1
},
{
"date": "2023-10-04",
"count": 1
},
{
"date": "2023-10-08",
"count": 1
},
{
"date": "2023-10-10",
"count": 1
},
{
"date": "2023-10-17",
"count": 1
},
{
"date": "2023-10-18",
"count": 1
},
{
"date": "2023-10-24",
"count": 1
},
{
"date": "2023-10-31",
"count": 2
},
{
"date": "2023-11-01",
"count": 1
},
{
"date": "2023-11-09",
"count": 1
},
{
"date": "2023-11-10",
"count": 1
},
{
"date": "2023-11-11",
"count": 1
},
{
"date": "2023-11-16",
"count": 1
},
{
"date": "2023-12-01",
"count": 1
},
{
"date": "2023-12-05",
"count": 1
},
{
"date": "2023-12-14",
"count": 1
},
{
"date": "2023-12-20",
"count": 1
},
{
"date": "2023-12-23",
"count": 1
},
{
"date": "2023-12-29",
"count": 1
},
{
"date": "2024-01-10",
"count": 1
},
{
"date": "2024-01-11",
"count": 1
},
{
"date": "2024-01-17",
"count": 1
},
{
"date": "2024-01-20",
"count": 1
},
{
"date": "2024-02-02",
"count": 1
},
{
"date": "2024-02-05",
"count": 1
},
{
"date": "2024-02-06",
"count": 1
},
{
"date": "2024-02-08",
"count": 1
},
{
"date": "2024-02-17",
"count": 1
},
{
"date": "2024-03-12",
"count": 1
},
{
"date": "2024-03-13",
"count": 1
},
{
"date": "2024-03-19",
"count": 1
},
{
"date": "2024-03-30",
"count": 1
},
{
"date": "2024-03-31",
"count": 1
},
{
"date": "2024-04-06",
"count": 1
},
{
"date": "2024-04-16",
"count": 1
},
{
"date": "2024-04-18",
"count": 2
},
{
"date": "2024-04-20",
"count": 1
},
{
"date": "2024-04-22",
"count": 1
},
{
"date": "2024-04-24",
"count": 1
},
{
"date": "2024-05-08",
"count": 1
},
{
"date": "2024-05-15",
"count": 1
},
{
"date": "2024-05-29",
"count": 1
},
{
"date": "2024-05-30",
"count": 1
},
{
"date": "2024-05-31",
"count": 1
},
{
"date": "2024-06-03",
"count": 1
},
{
"date": "2024-06-06",
"count": 1
},
{
"date": "2024-06-07",
"count": 1
},
{
"date": "2024-06-10",
"count": 1
},
{
"date": "2024-06-12",
"count": 1
},
{
"date": "2024-06-22",
"count": 1
},
{
"date": "2024-06-26",
"count": 2
},
{
"date": "2024-07-09",
"count": 1
},
{
"date": "2024-07-25",
"count": 1
},
{
"date": "2024-07-28",
"count": 1
},
{
"date": "2024-08-12",
"count": 1
},
{
"date": "2024-08-19",
"count": 1
},
{
"date": "2024-09-16",
"count": 1
},
{
"date": "2024-09-17",
"count": 1
},
{
"date": "2024-09-18",
"count": 1
},
{
"date": "2024-09-24",
"count": 1
},
{
"date": "2024-10-03",
"count": 1
},
{
"date": "2024-11-04",
"count": 1
},
{
"date": "2024-11-06",
"count": 1
},
{
"date": "2024-11-07",
"count": 1
},
{
"date": "2024-11-21",
"count": 1
},
{
"date": "2024-12-01",
"count": 1
},
{
"date": "2024-12-02",
"count": 1
},
{
"date": "2024-12-14",
"count": 1
},
{
"date": "2024-12-18",
"count": 1
},
{
"date": "2024-12-21",
"count": 1
},
{
"date": "2024-12-27",
"count": 1
},
{
"date": "2025-01-08",
"count": 1
},
{
"date": "2025-01-09",
"count": 1
},
{
"date": "2025-01-11",
"count": 1
},
{
"date": "2025-01-12",
"count": 1
},
{
"date": "2025-01-16",
"count": 1
},
{
"date": "2025-01-18",
"count": 1
},
{
"date": "2025-01-21",
"count": 1
},
{
"date": "2025-02-03",
"count": 2
},
{
"date": "2025-02-10",
"count": 1
},
{
"date": "2025-02-14",
"count": 1
},
{
"date": "2025-02-18",
"count": 1
},
{
"date": "2025-02-24",
"count": 1
},
{
"date": "2025-02-26",
"count": 1
},
{
"date": "2025-02-27",
"count": 2
},
{
"date": "2025-03-04",
"count": 1
},
{
"date": "2025-03-16",
"count": 2
},
{
"date": "2025-04-03",
"count": 1
},
{
"date": "2025-04-07",
"count": 1
},
{
"date": "2025-04-13",
"count": 1
},
{
"date": "2025-04-19",
"count": 1
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-05",
"count": 1
},
{
"date": "2025-06-08",
"count": 1
},
{
"date": "2025-06-11",
"count": 1
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-16",
"count": 1
},
{
"date": "2025-06-17",
"count": 1
},
{
"date": "2025-07-27",
"count": 1
},
{
"date": "2025-08-12",
"count": 2
},
{
"date": "2025-08-20",
"count": 1
},
{
"date": "2025-08-23",
"count": 1
},
{
"date": "2025-08-29",
"count": 2
},
{
"date": "2025-08-30",
"count": 1
},
{
"date": "2025-09-17",
"count": 1
},
{
"date": "2025-09-18",
"count": 1
},
{
"date": "2025-10-21",
"count": 1
},
{
"date": "2025-10-23",
"count": 1
},
{
"date": "2025-10-28",
"count": 1
},
{
"date": "2025-11-03",
"count": 2
},
{
"date": "2025-11-05",
"count": 1
},
{
"date": "2025-11-10",
"count": 1
},
{
"date": "2025-11-12",
"count": 1
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-06",
"count": 1
},
{
"date": "2025-12-18",
"count": 1
},
{
"date": "2025-12-24",
"count": 1
},
{
"date": "2025-12-25",
"count": 1
},
{
"date": "2026-01-02",
"count": 2
},
{
"date": "2026-01-03",
"count": 1
},
{
"date": "2026-01-05",
"count": 1
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-02-13",
"count": 1
},
{
"date": "2026-02-20",
"count": 1
},
{
"date": "2026-03-01",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-05-23",
"count": 2
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-05-25",
"count": 7
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-27",
"count": 1
},
{
"date": "2026-06-28",
"count": 1
}
],
"complete": false,
"collected": 1000,
"total_stars": 3037
},
"open_issues_and_prs": 39
},
"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": [],
"largest_source_bytes": 35841,
"source_files_sampled": 97,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Gemfile"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 1,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 26,
"direct_affected_count": 0
},
"ecosystems": [
"rubygems"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "activesupport",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "benchmark-ips",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "benchmark-memory",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "bundler",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "danger-changelog",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "danger-pr-comment",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "danger-toc",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "elasticsearch-api",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "elasticsearch-model",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "guard",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "guard-rspec",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "guard-yield",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "hashie",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "logger",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "mutex_m",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "omniauth",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "omniauth-oauth2",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "pry",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rack-test",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rake",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rspec",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rspec-pending_for",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rspec-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rubocop",
"direct": false,
"version": "1.82.0",
"ecosystem": "rubygems"
},
{
"name": "simplecov",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "sinatra",
"direct": false,
"version": null,
"ecosystem": "rubygems"
}
],
"collected": true,
"truncated": false,
"total_count": 27,
"direct_count": 0,
"indirect_count": 27
}
},
"maintainership": {
"issues": {
"open_prs": 14,
"merged_prs": 263,
"open_issues": 25,
"closed_ratio": 0.887,
"closed_issues": 196,
"closed_unmerged_prs": 93
},
"bus_factor": 2,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "dblock",
"commits": 286,
"avatar_url": "https://avatars.githubusercontent.com/u/542335?v=4"
},
{
"type": "User",
"login": "michaelherold",
"commits": 121,
"avatar_url": "https://avatars.githubusercontent.com/u/424833?v=4"
},
{
"type": "User",
"login": "BobbyMcWho",
"commits": 34,
"avatar_url": "https://avatars.githubusercontent.com/u/6934825?v=4"
},
{
"type": "User",
"login": "jch",
"commits": 21,
"avatar_url": "https://avatars.githubusercontent.com/u/19874?v=4"
},
{
"type": "User",
"login": "maxlinc",
"commits": 15,
"avatar_url": "https://avatars.githubusercontent.com/u/896878?v=4"
},
{
"type": "User",
"login": "gregory",
"commits": 15,
"avatar_url": "https://avatars.githubusercontent.com/u/167488?v=4"
},
{
"type": "User",
"login": "jimeh",
"commits": 11,
"avatar_url": "https://avatars.githubusercontent.com/u/39563?v=4"
},
{
"type": "User",
"login": "marshall-lee",
"commits": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/3194530?v=4"
},
{
"type": "User",
"login": "mbleigh",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/1022?v=4"
},
{
"type": "User",
"login": "aried3r",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/1301152?v=4"
}
],
"contributors_sampled": 99,
"top_contributor_share": 0.41
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"danger-comment.yml",
"danger.yml",
"test.yml"
],
"has_docs_dir": false,
"linter_configs": [
".rubocop.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"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": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 3,
"reason": "6 out of 17 merged PRs checked by a CI test -- score normalized to 3",
"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": 5,
"reason": "Found 8/16 approved changesets -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 56 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": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 1,
"reason": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"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": "fde8e03a0a19da626576415223e4b002fc373967",
"ran_at": "2026-07-22T00:43:23Z",
"aggregate_score": 4.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T14:52:50Z",
"oldest_open_prs": [
{
"number": 109,
"created_at": "2013-08-06T04:48:28Z",
"last_comment_at": "2014-07-06T19:15:35Z",
"last_comment_author": "dblock"
},
{
"number": 235,
"created_at": "2014-10-13T19:38:09Z",
"last_comment_at": "2015-01-13T23:22:08Z",
"last_comment_author": "dblock"
},
{
"number": 253,
"created_at": "2014-12-11T20:19:48Z",
"last_comment_at": "2015-04-08T23:45:35Z",
"last_comment_author": "michaelherold"
},
{
"number": 262,
"created_at": "2015-01-09T04:26:05Z",
"last_comment_at": "2015-04-08T23:47:38Z",
"last_comment_author": "michaelherold"
},
{
"number": 363,
"created_at": "2016-08-01T16:48:11Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 379,
"created_at": "2016-10-25T19:59:18Z",
"last_comment_at": "2016-10-30T09:07:44Z",
"last_comment_author": "dblock"
},
{
"number": 382,
"created_at": "2016-11-11T06:50:34Z",
"last_comment_at": "2023-01-30T17:25:59Z",
"last_comment_author": "mculp"
},
{
"number": 421,
"created_at": "2017-07-17T00:37:10Z",
"last_comment_at": "2020-04-10T13:26:42Z",
"last_comment_author": "dblock"
},
{
"number": 470,
"created_at": "2018-11-04T17:15:59Z",
"last_comment_at": "2020-01-18T12:53:25Z",
"last_comment_author": "michaelherold"
},
{
"number": 472,
"created_at": "2019-01-02T22:52:21Z",
"last_comment_at": "2019-11-18T02:51:21Z",
"last_comment_author": "michaelherold"
},
{
"number": 518,
"created_at": "2020-04-05T09:36:19Z",
"last_comment_at": "2020-10-03T12:59:02Z",
"last_comment_author": "dblock"
},
{
"number": 528,
"created_at": "2020-07-23T05:03:21Z",
"last_comment_at": "2020-10-30T00:57:56Z",
"last_comment_author": "michaelherold"
},
{
"number": 566,
"created_at": "2022-09-06T21:21:37Z",
"last_comment_at": "2023-01-30T17:19:28Z",
"last_comment_author": "mculp"
},
{
"number": 586,
"created_at": "2025-08-13T10:06:47Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-06-22T17:22:18Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 60,
"created_at": "2012-10-18T17:57:26Z",
"last_comment_at": "2020-06-11T18:01:21Z",
"last_comment_author": "betesh"
},
{
"number": 61,
"created_at": "2012-10-26T21:27:25Z",
"last_comment_at": "2020-09-18T01:18:46Z",
"last_comment_author": "caalberts"
},
{
"number": 158,
"created_at": "2014-05-15T18:34:54Z",
"last_comment_at": "2014-09-09T04:33:08Z",
"last_comment_author": "lsegal"
},
{
"number": 222,
"created_at": "2014-09-02T14:26:55Z",
"last_comment_at": "2014-09-08T01:36:40Z",
"last_comment_author": "michaelherold"
},
{
"number": 227,
"created_at": "2014-09-10T15:08:36Z",
"last_comment_at": "2014-09-11T17:31:18Z",
"last_comment_author": "michaelherold"
},
{
"number": 229,
"created_at": "2014-09-30T18:46:21Z",
"last_comment_at": "2014-09-30T18:51:51Z",
"last_comment_author": "dblock"
},
{
"number": 239,
"created_at": "2014-11-12T23:04:56Z",
"last_comment_at": "2016-10-17T20:40:52Z",
"last_comment_author": "dblock"
},
{
"number": 263,
"created_at": "2015-01-09T16:00:00Z",
"last_comment_at": "2015-01-09T19:02:02Z",
"last_comment_author": "dblock"
},
{
"number": 265,
"created_at": "2015-01-15T11:48:51Z",
"last_comment_at": "2015-10-25T20:04:09Z",
"last_comment_author": "dblock"
},
{
"number": 276,
"created_at": "2015-02-03T22:12:13Z",
"last_comment_at": "2018-09-04T21:43:55Z",
"last_comment_author": "dblock"
},
{
"number": 300,
"created_at": "2015-05-11T21:20:39Z",
"last_comment_at": "2015-08-23T17:09:56Z",
"last_comment_author": "dblock"
},
{
"number": 338,
"created_at": "2015-12-30T23:41:28Z",
"last_comment_at": "2016-01-02T14:59:37Z",
"last_comment_author": "dblock"
},
{
"number": 347,
"created_at": "2016-02-01T20:18:40Z",
"last_comment_at": "2016-02-07T19:31:38Z",
"last_comment_author": "dblock"
},
{
"number": 390,
"created_at": "2017-01-17T18:24:28Z",
"last_comment_at": "2018-02-04T14:50:37Z",
"last_comment_author": "michaelherold"
},
{
"number": 445,
"created_at": "2018-04-27T21:21:53Z",
"last_comment_at": "2018-11-26T13:49:02Z",
"last_comment_author": "anew-bhav"
},
{
"number": 450,
"created_at": "2018-06-13T13:09:04Z",
"last_comment_at": "2019-03-14T19:35:58Z",
"last_comment_author": "magynhard"
},
{
"number": 453,
"created_at": "2018-07-02T09:30:56Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 514,
"created_at": "2020-01-24T17:02:27Z",
"last_comment_at": "2020-04-05T04:14:45Z",
"last_comment_author": "jitendra1998"
},
{
"number": 559,
"created_at": "2022-03-23T15:58:57Z",
"last_comment_at": "2022-12-06T15:01:03Z",
"last_comment_author": "dblock"
},
{
"number": 572,
"created_at": "2023-04-06T11:26:06Z",
"last_comment_at": "2023-04-07T15:42:40Z",
"last_comment_author": "apotonick"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/hashie/hashie",
"host": "github.com",
"name": "hashie",
"owner": "hashie"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"security": 57,
"vitality": 47,
"community": 84,
"governance": 67,
"engineering": 62
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 47,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 43,
"inputs": {
"commits_last_year": 13,
"human_commit_share": 0.96,
"days_since_last_push": 29,
"active_weeks_last_year": 4
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 29 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 29
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "4/52 weeks with commits",
"points": 2.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 4
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "13 commits in the last year",
"points": 10.3,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 13
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"points": 1,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "moderate",
"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": 54,
"inputs": {
"releases_count": 4,
"latest_release_tag": "v5.1.0",
"releases_from_tags": false,
"days_since_latest_release": 209,
"mean_days_between_releases": 749.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "4 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 4
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 209 days ago",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 209
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~749.1 days",
"points": 5.4,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 749.1
}
}
],
"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": 29,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 29 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 29
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 84,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "excellent",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"forks": 315,
"stars": 3037,
"watchers": 37,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "3,037 stars",
"points": 56.5,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 3037
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "315 forks",
"points": 20.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 315
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "37 watchers",
"points": 8.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 37
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"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 (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "excellent",
"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": [
"hashie"
],
"dependents": null,
"ecosystems": "rubygems",
"total_downloads": 471040706,
"monthly_downloads": null
},
"components": [
{
"key": "total_downloads",
"name": "Total downloads",
"detail": "471,040,706 downloads all-time across rubygems",
"points": 80,
"status": "met",
"details": [
{
"code": "downloads_total",
"params": {
"count": 471040706,
"ecosystems": "rubygems"
}
}
],
"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": "moderate",
"name": "Sustainability & Governance",
"value": 67,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 99,
"top_contributor_share": 0.41
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 41% of commits",
"points": 13.3,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 41
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "99 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 99
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 56 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"merged_prs": 263,
"open_issues": 25,
"closed_issues": 196,
"issue_closed_ratio": 0.887,
"closed_unmerged_prs": 93
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "89% of issues closed",
"points": 41.5,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 89
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "263/356 decided PRs merged",
"points": 28.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 263,
"decided": 356
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 8/16 approved changesets -- score normalized to 5",
"points": 7.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"followers": 0,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "hashie",
"public_repos": 1,
"account_age_days": 4613
},
"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": "0 followers of hashie",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "hashie"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "1 public repos, account ~12 yr old",
"points": 14.2,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 1
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 91,
"inputs": {
"packages": [
"hashie"
],
"ecosystems": "rubygems",
"any_deprecated": false,
"min_days_since_publish": 209
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on rubygems",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "rubygems"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 209 days ago",
"points": 26,
"status": "partial",
"details": [
{
"code": "publish_recency",
"params": {
"days": 209
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "50 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 50
}
}
],
"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": 62,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"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": ".rubocop.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".rubocop.yml"
}
}
],
"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": "6 out of 17 merged PRs checked by a CI test -- score normalized to 3",
"points": 6,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [
"ruby",
"hash-extensions",
"hacktoberfest"
],
"has_wiki": false,
"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": "3 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 3
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 57,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"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": 46,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "6 out of 17 merged PRs checked by a CI test -- score normalized to 3",
"points": 0.8,
"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 8/16 approved changesets -- score normalized to 5",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 56 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.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"points": 0.8,
"status": "partial",
"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": "excellent",
"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 1 resolved dependencies against OSV; 26 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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": 1
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 26
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 1,
"unassessed_packages": 26,
"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": "excellent",
"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": 1,
"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": "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": 17
},
"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": "at_risk",
"name": "AI Readiness",
"value": 42,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 31,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.583,
"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": "56 of 96 human commits state their intent (structured subject or explanatory body)",
"points": 31.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 56,
"sampled": 96
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 45,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.02,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.04
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": ".rubocop.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".rubocop.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "2 of the last 100 commits agent-authored or agent-credited",
"points": 4,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 2,
"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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Ruby",
"largest_source_bytes": 35841,
"source_files_sampled": 97,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Ruby without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Ruby"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/97 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 97,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"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": [],
"report_type": "repository",
"generated_at": "2026-07-22T00:43:49.467811Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hashie/hashie.svg",
"full_name": "hashie/hashie",
"license_state": "standard",
"license_spdx": "MIT"
}