Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 39,
"has_wiki": true,
"homepage": null,
"languages": {
"Ruby": 4373
},
"pushed_at": "2026-07-01T21:32:31Z",
"created_at": "2014-02-13T14:56:16Z",
"owner_type": "Organization",
"updated_at": "2026-07-01T21:32:34Z",
"description": "Shared JSON related functionality for fog",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Ruby",
"significant_languages": [
"Ruby"
]
},
"owner": {
"blog": "https://fog.github.io/",
"name": "fog",
"type": "Organization",
"login": "fog",
"company": null,
"location": null,
"followers": 16,
"avatar_url": "https://avatars.githubusercontent.com/u/991149?v=4",
"created_at": "2011-08-19T14:16:43Z",
"is_verified": null,
"public_repos": 61,
"account_age_days": 5456
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-07-01T21:32:26Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-04-21T23:04:00Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2018-06-22T08:26:58Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2018-01-08T20:29:01Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2015-05-30T13:27:03Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2015-04-07T17:12:33Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2014-02-13T12:28:01Z"
}
],
"recent_commits": [
{
"oid": "d6371492a43612bf3003a54b337f17f6582f7514",
"body": null,
"is_bot": false,
"headline": "v1.4.0",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2026-07-01T21:32:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45c14779571c66a217c3167b200aea71364920b4",
"body": "Replace `multi_json` gem with standard Ruby `json` gem",
"is_bot": false,
"headline": "Merge pull request #25 from larouxn/farewell_multi_json",
"author_name": "Wesley Beary",
"author_login": "geemus",
"committed_at": "2026-07-01T21:28:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b7809ae156a4ad14059232ce1a55ff33be7e2d6",
"body": null,
"is_bot": false,
"headline": "Replace multi_json gem with standard Ruby json gem",
"author_name": "Nicholas La Roux",
"author_login": "larouxn",
"committed_at": "2026-06-19T20:13:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b87662091cf9996ad25eb3921900dfa571427c2",
"body": null,
"is_bot": false,
"headline": "v1.3.0",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2026-04-21T23:04:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e44588d635f3e1ab137ff6df0046cd1187d51051",
"body": "…iases\n\nReplace deprecated MultiJson.encode/decode with dump/load",
"is_bot": false,
"headline": "Merge pull request #24 from mikevoets/replace-deprecated-multijson-al…",
"author_name": "Wesley Beary",
"author_login": "geemus",
"committed_at": "2026-04-21T23:02:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f316f5d58d4972954c0ff7461d5e0dc7166b96b",
"body": null,
"is_bot": false,
"headline": "fix to use assert_nil for decode test",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2026-04-21T22:57:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7521f5ca2c6f8a7b905d565e42e8378a1f174dda",
"body": null,
"is_bot": false,
"headline": "update nil decode test to reflect current multijson behavior",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2026-04-21T22:56:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1851fd6032627610181eb4caa9185d7ede5885aa",
"body": null,
"is_bot": false,
"headline": "bump to fog ci workflow v1.6.0",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2026-04-21T22:53:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc787d8cb850be83d50178a9c7db0122e1ad3980",
"body": "MultiJson.encode and MultiJson.decode are deprecated aliases and\nscheduled for removal in MultiJson 2.0. Call the canonical MultiJson.dump\nand MultiJson.load methods so downstream users do not see deprecation\nwarnings (which can escalate to errors when Ruby's warning handler is\nconfigured to raise, e.g. via Bugsnag).",
"is_bot": false,
"headline": "Replace deprecated MultiJson.encode/decode with dump/load",
"author_name": "Mike Voets",
"author_login": "mikevoets",
"committed_at": "2026-04-21T04:11:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35c8ca9fdf57ebb6dab7fd598058334dcc81c2a9",
"body": null,
"is_bot": false,
"headline": "remove stale action",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-21T15:54:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "464d3ab7b2cfd19ae131ba1ce8c90201c531d600",
"body": null,
"is_bot": false,
"headline": "add permissions info to ci action",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-21T15:23:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8165356fe17c954648bc1e61d44d5a16843039ac",
"body": null,
"is_bot": false,
"headline": "update ci workflow",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-21T15:09:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7907c839d83ec1e90dd0e10e4e0f934bf455adb3",
"body": null,
"is_bot": false,
"headline": "add security policy",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-21T14:13:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12507978fa3150eb6a73f907700267a9abd9a091",
"body": null,
"is_bot": false,
"headline": "bump dependabot from daily to weekly",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-20T15:54:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e437257e6d41d2c447012f210fd7ede8bd90ac3f",
"body": null,
"is_bot": false,
"headline": "add tidelift/funding info",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2024-01-17T22:53:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "586d5841d4b06d531719806f2b71e4051987f8c4",
"body": null,
"is_bot": false,
"headline": "update to shared actions setup",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2022-01-30T13:15:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4bc1b06f65453c1ca08cabf7b3c1f3fe49cc14fa",
"body": null,
"is_bot": false,
"headline": "drop travis config in favor of github actions",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2021-04-11T12:30:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8419f291087661a950adb3d74bb0c3a0a821032",
"body": null,
"is_bot": false,
"headline": "loosen bundler dependency",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2021-04-11T12:28:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "285da43b67d004d735ce767b207447ef5cd07f47",
"body": null,
"is_bot": false,
"headline": "update ruby actions config to latest",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2021-04-11T12:26:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbcbfa9f5d9c0e3a580402b8b0383153687b58e8",
"body": null,
"is_bot": false,
"headline": "add github config/workflows",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2021-04-11T12:24:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "626333a6fa9ddded3504c2c7eae2d5ada084890b",
"body": null,
"is_bot": false,
"headline": "drop ruby gemset and version dotfiles",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2021-04-11T12:22:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a388c005a349f52231a9b29a97ecba47f73d63d3",
"body": null,
"is_bot": false,
"headline": "v1.2.0",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2018-06-22T08:26:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5e92d950c253e880cccb1e72697eb22b1483f7b",
"body": "Remove `fog-core` version dependency",
"is_bot": false,
"headline": "Merge pull request #15 from fog/relax_core_version",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2018-06-22T08:19:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "159d9706467e1f917bb6f4d8adc7f7c4e172b7cd",
"body": "The pessimistic `~> 2.0` version dependency is conflicting with `fog 2.0`\nwhich has a pessimistic `~> 1.45` so dependencies fail to resolve.\n\nThe only inherited behaviour is using `Fog::Errors::Error` as the basis\nfor the errors raised when encoding/decoding fails.",
"is_bot": false,
"headline": "Remove `fog-core` version dependency",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2018-06-22T08:11:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6fe9ec70201d784498ff36bd51ff44a6affd2451",
"body": "Fix build",
"is_bot": false,
"headline": "Merge pull request #14 from fog/build",
"author_name": "Paulo Henrique Lopes Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2018-03-31T13:09:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3b9244e5bcc712f5f503429d4007ba2365d4904",
"body": null,
"is_bot": false,
"headline": "Fix broken tests",
"author_name": "Paulo Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2018-03-31T12:58:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8d9b455bf6fd364aa41adb2bd1dd5ab17000d72",
"body": "fixes #7",
"is_bot": false,
"headline": "Remove Duplicated License",
"author_name": "Paulo Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2018-03-31T12:53:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04ea63ec15bb3a889fdf709a4a0a181b49aca1c3",
"body": null,
"is_bot": false,
"headline": "Fix build",
"author_name": "Paulo Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2018-03-31T12:50:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a9685a869272a4065b21091e04db0c71fa94ba3",
"body": "Fix time parsing issue",
"is_bot": false,
"headline": "Merge pull request #13 from fog/icco-patch-1",
"author_name": "Paulo Henrique Lopes Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2018-03-30T21:50:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "801cc4dcfff51253f143b9c4f03cbef1db006f34",
"body": "This fixes https://github.com/fog/fog-json/issues/12",
"is_bot": false,
"headline": "Fix time parsing issue",
"author_name": "Nat Welch",
"author_login": "icco",
"committed_at": "2018-03-30T19:49:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10062fbf070eec6948232851b5c38c0c4af255f6",
"body": null,
"is_bot": false,
"headline": "v1.1.0",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2018-01-08T20:29:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70a9e47bcbd65d006ba9ba5aea5102258a82ce7a",
"body": "closes #11",
"is_bot": false,
"headline": "bump fog-core dep",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2018-01-08T20:27:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fb54a9781e7b24af4a771603ac1f790004a481a",
"body": null,
"is_bot": false,
"headline": "v1.0.2",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2015-05-30T13:27:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03ffa8f75330cf681feb461d1cc48cdb5e568754",
"body": "Loosen multi_json requirement",
"is_bot": false,
"headline": "Merge pull request #9 from datapimp/patch-1",
"author_name": "Paulo Henrique Lopes Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2015-05-29T15:15:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75b468b1f93289562f15c52fd956cf8f1fca02a5",
"body": "This reverts commit 31d215ce627aa845e6534dee38fdc656a82eb7b5.",
"is_bot": false,
"headline": "Revert \"Update version.rb\"",
"author_name": "Jonathan Soeder",
"author_login": "datapimp",
"committed_at": "2015-05-29T15:13:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31d215ce627aa845e6534dee38fdc656a82eb7b5",
"body": "Version bump; loosened multi_json dependency",
"is_bot": false,
"headline": "Update version.rb",
"author_name": "Jonathan Soeder",
"author_login": "datapimp",
"committed_at": "2015-05-29T05:25:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e48a7abc063635b93e8456a0f2b82764d9d7a13",
"body": "The tests pass.",
"is_bot": false,
"headline": "Loosen multi_json requirement",
"author_name": "Jonathan Soeder",
"author_login": "datapimp",
"committed_at": "2015-05-29T05:22:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbb9c0253eb564e76bafd1f475acec32965824e7",
"body": null,
"is_bot": false,
"headline": "Release v1.0.1",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2015-04-07T17:12:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0416fc81d4cf167b2f6a27013098e49bc5ad509d",
"body": null,
"is_bot": false,
"headline": "Update CONTRIBUTORS",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2015-04-07T17:10:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a25b618c6046bddc03d4fe84516a7a7f7ef477f",
"body": "Using Relative paths",
"is_bot": false,
"headline": "Merge pull request #8 from plribeiro3000/fix-loading-time",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2015-04-07T16:05:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03b8cf789489928fefd385e5d2c55ccf2c55fa7f",
"body": null,
"is_bot": false,
"headline": "Using Relative paths",
"author_name": "Paulo Henrique Lopes Ribeiro",
"author_login": "plribeiro3000",
"committed_at": "2015-03-30T02:37:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1b96c732854151d9f7e030656991b5c294f3700",
"body": "Mitigate testing issues\r\n\r\nCloses #3",
"is_bot": false,
"headline": "Merge pull request #6 from fog/skip_testing_2_0",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-08T21:20:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24538fdf1638f32215471d5a8f385a297aa8b974",
"body": "1.8.7 is also picking up a JSON lib that is also stubborned refusing to\nerror when rubbish is passed in.",
"is_bot": false,
"headline": "Also skip Ruby 1.8.7",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-08T20:53:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c6a55ee2b25af5efd52458b9e4ec231ffd5922b",
"body": "Ruby 2.0.0 seems to happily handle any malformed JSON so the test is not\npassing. The wrapper around MultiJson shouldn't really need to worry\nabout the same tests.",
"is_bot": false,
"headline": "Skip test for Ruby 2.0.0",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-08T20:38:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b450cda4f74d85e06c4734eb57087c0541d8e14",
"body": "Later versions of 1.8.7 store hashes in random order so decoding to a\nHash means that the key ordering may not match and so the test fails\nsometimes.\n\nIt's not really the focus of the tests to duplicate MultiJson so broken\nthe test apart.",
"is_bot": false,
"headline": "Fix testing for 1.8.7",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-08T20:34:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bce15dc9ffe3e208201ec451c9d720132cbab57",
"body": null,
"is_bot": false,
"headline": "Update .gitignore to skip other Gemfile.locks",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-08T19:25:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6045bdc5e58773d0d422a4970a51c1ecce2681e9",
"body": null,
"is_bot": false,
"headline": "[GH2] Fix 1.8.7 tests by limiting Rake",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-07T17:32:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7703fe6eefc670c7fc9d8927bd6b620d92f663b",
"body": null,
"is_bot": false,
"headline": "Use 1.8.7 specific Gemfile for Travis",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-07T17:27:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a5b64398551b95cc2e3ed8142aceb3ca2265bd3",
"body": "Depend on fog-core for errors",
"is_bot": false,
"headline": "Merge pull request #4 from fog/correct_testing",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-07T17:01:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2efedba941d81addbb09871bb1fee8cd0bb8a969",
"body": "Ideally fog-json would be a simple wrapper around common JSON functions\nbut currently the errors raised are based on fog-core's `Error`. So to\nkeep inheritance correct we are depending on fog-core.",
"is_bot": false,
"headline": "Depend on fog-core for errors",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-04-04T15:15:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4910884f77f974d52cc9e20d9bf36ca9b9d90d9a",
"body": null,
"is_bot": false,
"headline": "Also add JRuby to Travis (kicking off build)",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T15:18:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9805f81eb81ae8139830bd620e07157098447a9c",
"body": null,
"is_bot": false,
"headline": "Add Travis CI configuration",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T15:14:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4367453ea9445c576a0cdceb4d35d949fd7ab1f",
"body": null,
"is_bot": false,
"headline": "add license/contributing/contributor stuff",
"author_name": "geemus",
"author_login": "geemus",
"committed_at": "2014-02-13T15:04:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c31c3a7d6f3e28dfa32d0ebdd33d768a0818d11c",
"body": null,
"is_bot": false,
"headline": "Update README",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T12:28:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51f2c9936fdf0f245d482c40260f7c846ec80c96",
"body": null,
"is_bot": false,
"headline": "MultiJSON uses SemVer so we can track sensibly",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T12:01:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27b4cf320d8f6ae1f3180c142c17ed20e5054f69",
"body": "The code is very much in use as part of fog so does not really need a\nversion number hinting it is alpha stage.",
"is_bot": false,
"headline": "Bump release version to v1.0.0",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T12:01:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0945de661493103227d645a4764625bd351f99d1",
"body": null,
"is_bot": false,
"headline": "Add minitest and test extracted code works",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T11:49:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a5c54071ce582ed2f04fdb246804a58995948dd",
"body": "This is an extraction of `lib/fog/json.rb` from fog@ee091cc\n\nGem details updated and code cleaned up slightly.",
"is_bot": false,
"headline": "Create Fog::JSON",
"author_name": "Paul Thornthwaite",
"author_login": "tokengeek",
"committed_at": "2014-02-13T11:48:26Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 7,
"commits_last_year": 9,
"latest_release_at": "2026-07-01T21:32:26Z",
"latest_release_tag": "v1.4.0",
"releases_from_tags": true,
"days_since_last_push": 26,
"active_weeks_last_year": 3,
"days_since_latest_release": 26,
"mean_days_between_releases": 753.6
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "fog-json",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "rubygems",
"matches_repo": true,
"registry_url": "https://rubygems.org/gems/fog-json",
"is_deprecated": false,
"latest_version": "1.4.0",
"repository_url": "http://github.com/fog/fog-json",
"versions_count": 7,
"total_downloads": 183404143,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2014-02-13T12:37:29.893000Z",
"latest_published_at": "2026-07-01T21:33:02.483000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 26
}
]
},
"popularity": {
"forks": 10,
"stars": 2,
"watchers": 20,
"fork_history": {
"days": [
{
"date": "2014-02-25",
"count": 1
},
{
"date": "2014-12-15",
"count": 1
},
{
"date": "2015-03-30",
"count": 1
},
{
"date": "2015-10-05",
"count": 1
},
{
"date": "2017-10-17",
"count": 1
},
{
"date": "2018-05-09",
"count": 1
},
{
"date": "2020-12-16",
"count": 1
},
{
"date": "2022-02-17",
"count": 1
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-06-17",
"count": 1
}
],
"complete": true,
"collected": 10,
"total_forks": 10
},
"star_history": null,
"open_issues_and_prs": 0
},
"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": 1116,
"source_files_sampled": 5,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Gemfile"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 5,
"direct_affected_count": 0
},
"ecosystems": [
"rubygems"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "bundler",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "fog-core",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "json",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "minitest",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rake",
"direct": false,
"version": null,
"ecosystem": "rubygems"
}
],
"collected": true,
"truncated": false,
"total_count": 5,
"direct_count": 0,
"indirect_count": 5
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 9,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 8,
"closed_unmerged_prs": 8
},
"bus_factor": 2,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "geemus",
"commits": 23,
"avatar_url": "https://avatars.githubusercontent.com/u/4138?v=4"
},
{
"type": "User",
"login": "tokengeek",
"commits": 22,
"avatar_url": "https://avatars.githubusercontent.com/u/4485?v=4"
},
{
"type": "User",
"login": "plribeiro3000",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/672952?v=4"
},
{
"type": "User",
"login": "datapimp",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/42960?v=4"
},
{
"type": "User",
"login": "mikevoets",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/4422159?v=4"
},
{
"type": "User",
"login": "icco",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/20201?v=4"
},
{
"type": "User",
"login": "larouxn",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1557529?v=4"
}
],
"contributors_sampled": 7,
"top_contributor_share": 0.397
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"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": 4,
"reason": "2 out of 5 merged PRs checked by a CI test -- score normalized to 4",
"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": 1,
"reason": "Found 3/23 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 8 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": 2,
"reason": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
"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": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"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": "d6371492a43612bf3003a54b337f17f6582f7514",
"ran_at": "2026-07-28T14:01:11Z",
"aggregate_score": 5.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-27T03:51:56Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-01T21:28:53Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/fog/fog-json",
"host": "github.com",
"name": "fog-json",
"owner": "fog"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"security": 58,
"vitality": 51,
"community": 56,
"governance": 70,
"engineering": 54
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 51,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 42,
"inputs": {
"commits_last_year": 9,
"human_commit_share": 1,
"days_since_last_push": 26,
"active_weeks_last_year": 3
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 26 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "3/52 weeks with commits",
"points": 2.1,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 3
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "9 commits in the last year",
"points": 9,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 9
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
"points": 2,
"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": 64,
"inputs": {
"releases_count": 7,
"latest_release_tag": "v1.4.0",
"releases_from_tags": true,
"days_since_latest_release": 26,
"mean_days_between_releases": 753.6
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "7 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 7
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 26 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~753.6 days",
"points": 5.4,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 753.6
}
}
],
"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": 26,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 26 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 26
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 56,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"forks": 10,
"stars": 2,
"watchers": 20,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "10 forks",
"points": 8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 10
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "20 watchers",
"points": 7.1,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 20
}
}
],
"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": [
"fog-json"
],
"dependents": null,
"ecosystems": "rubygems",
"total_downloads": 183404143,
"monthly_downloads": null
},
"components": [
{
"key": "total_downloads",
"name": "Total downloads",
"detail": "183,404,143 downloads all-time across rubygems",
"points": 80,
"status": "met",
"details": [
{
"code": "downloads_total",
"params": {
"count": 183404143,
"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": "good",
"name": "Sustainability & Governance",
"value": 70,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 7,
"top_contributor_share": 0.397
},
"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 40% of commits",
"points": 13.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 40
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "7 contributors",
"points": 9.5,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 7
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 8 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"merged_prs": 9,
"open_issues": 0,
"closed_issues": 8,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 8
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "9/17 decided PRs merged",
"points": 20.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 9,
"decided": 17
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 3/23 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"followers": 16,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "fog",
"public_repos": 61,
"account_age_days": 5456
},
"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": "16 followers of fog",
"points": 8.8,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 16,
"login": "fog"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "61 public repos, account ~14 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 61
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"fog-json"
],
"ecosystems": "rubygems",
"any_deprecated": false,
"min_days_since_publish": 26
},
"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 26 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 26
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "7 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 7
}
}
],
"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": 54,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "2 out of 5 merged PRs checked by a CI test -- score normalized to 4",
"points": 8,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 58,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"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": 58,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 5.8
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "2 out of 5 merged PRs checked by a CI test -- score normalized to 4",
"points": 1,
"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 3/23 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 8 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": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
"points": 1.5,
"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 detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 14
},
"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": "critical",
"name": "AI Readiness",
"value": 28,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 16,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.293,
"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": "17 of 58 human commits state their intent (structured subject or explanatory body)",
"points": 15.6,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 17,
"sampled": 58
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "critical",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 27,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "no agent-authored commits among the last 58",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 58
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "dependency automation configured, none observed in the sampled commits",
"points": 5,
"status": "partial",
"details": [
{
"code": "dependency_bot_config_only",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Ruby",
"largest_source_bytes": 1116,
"source_files_sampled": 5,
"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/5 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 5,
"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": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-07-28T14:01:23.329306Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/fog/fog-json.svg",
"full_name": "fog/fog-json",
"license_state": "standard",
"license_spdx": "MIT"
}