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

ruby / json

JSON implementation for Ruby

Ruby · Java · CВласна ліцензія★ 780 зірок⑂ 371 форкз серп. 2009 р.Переглянути на GitHub ↗

ruby/json має індекс здоров’я 75 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (96/100), найнижчий — AI Readiness (34/100). Останнє оновлення було 6 днів тому. Більшість нещодавньої роботи виконують 2 учасники.

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

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

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

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

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

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

Власність

The Ruby Programming LanguageОрганізація
2 077 підписників190 публічних репозиторіївз лют. 2010 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
RubyGemsjson2.21.1-2378 днів тому

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

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

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

96Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 6 дн. тому
29.8/36Ритм комітів — 43/52 тижнів із комітами
18/18Обсяг комітів — 362 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year362
human_commit_share0,98
days_since_last_push6
active_weeks_last_year43
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 100 релізів
36/36Свіжість релізів — останній реліз 9 дн. тому
27/27Ритм релізів — реліз кожні ~12,8 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count100
latest_release_tagv2.21.0
releases_from_tagsні
days_since_latest_release9
mean_days_between_releases12,8
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

72Добрий · 18% загального індексу
Як обчислюється оцінка
46.9/60Зірки — 780 зірок
21.4/25Форки — 371 форків
9.6/15Спостерігачі — 55 спостерігачів
Використані вхідні дані
forks371
stars780
watchers55
growth_stateorganic
growth_factor_pct100

Здоров'я спільноти

44У зоні ризику
Як обчислюється оцінка
22.5/22.5README
16.9/22.5Ліцензія — файл ліцензії наявний, не є визнаною ліцензією
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні
Як обчислюється оцінка
80/80Сумарні завантаження — 1 327 605 661 завантажень за весь час у rubygems
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesjson
dependents
ecosystemsrubygems
total_downloads1 327 605 661
monthly_downloads
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

80Добрий · 24% загального індексу
Як обчислюється оцінка
25.2/54Бас-фактор — на 2 контриб’ютор(ів) припадає половина всіх комітів
15.5/22.5Розподіл комітів — головний контриб’ютор — автор 31% комітів
13.5/13.5Широта контриб’юторів — 98 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 74 contributing companies or organizations
Використані вхідні дані
bus_factor2
contributors_sampled98
top_contributor_share0,31
Як обчислюється оцінка
45.9/46.8Вирішення issue — закрито 98% issue
31/38.3Прийняття PR — злито 526/648 вирішених PR
6/15OpenSSF Scorecard: Code-Review — Found 13/28 approved changesets -- score normalized to 4
Використані вхідні дані
merged_prs526
open_issues7
closed_issues391
issue_closed_ratio0,982
closed_unmerged_prs122
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
23.9/25Охоплення власника — 2 077 підписників у ruby
25/25Послужний список — 190 публічних репозиторіїв, вік облікового запису ~16 р.
Використані вхідні дані
followers2 077
owner_typeOrganization
is_verified
owner_loginruby
public_repos190
account_age_days5 990

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у rubygems
35/35Свіжість публікацій — остання публікація 8 дн. тому
20/20Історія версій — 237 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesjson
ecosystemsrubygems
any_deprecatedні
min_days_since_publish8

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

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

66Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 2 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 19 out of 21 merged PRs checked by a CI test -- score normalized to 9
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

65Помірний
Як обчислюється оцінка
30/30README
0/25Каталог документації
15/15Сайт документації / домашня сторінка — https://docs.ruby-lang.org/en/master/JSON.html
10/10Опис репозиторію
10/10Теми — 3 тем
0/10Wiki
Використані вхідні дані
topicsjson, json-parser, ruby
has_wikiні
homepagehttps://docs.ruby-lang.org/en/master/JSON.html
has_readmeтак
has_docs_dirні
has_descriptionтак

Безпека

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

54Помірний · 16% загального індексу

Стан безпеки

54Помірний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.2/2.5CI-Tests — 19 out of 21 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
3/7.5Code-Review — Found 13/28 approved changesets -- score normalized to 4
2.5/2.5Contributors — project has 74 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,4
Виключено з оцінювання (немає даних або не застосовно): packaging, signed_releases. Залишкові ваги перенормовано.

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

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

34У зоні ризику · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
17.4/40Читабельна історія комітів — намір зазначено у 32 з 98 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,327
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
0/11Статична перевірка типів
0/10Відтворюване середовище
10/10Підтверджена практика роботи з агентами — 11 з останніх 100 комітів створено агентом або з його зазначенням
8/8Автоматизоване супроводження — 1 з останніх 100 комітів — автоматичні оновлення залежностей
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfiles
has_dockerfileні
typed_languageні
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0,11
toolchain_manifests
dependency_bot_commit_share0,01
Як обчислюється оцінка
0/45Типізований код — Ruby без конфігурації перевірки типів
53.4/55Керовані розміри файлів — 2/70 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageRuby
largest_source_bytes99 096
source_files_sampled70
oversized_source_files2

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

780зірок GitHub
98контриб'юторів
362комітів за останні 12 місяців
6днів від останнього пушу
100релізів
2бас-фактор
7відкритих issue
RubyGemsпакетних екосистем

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

  • No resolved dependencies carried a version and a supported ecosystem

Докладніше

Історія зірок і форків 780 ★ / 371 ⇿
780Зірки
371Форки
99Релізи

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

02004006008007803461262009-082018-012026-07
Мажорні 1Мінорні 24Патчі 69

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

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

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-22 00:26 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests19 out of 21 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
4Code-ReviewFound 13/28 approved changesets -- score normalized to 4
10Contributorsproject has 74 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 5
РеєстрПакетОбмеження версіїМаніфест
RubyGemsnet-httpGemfile
RubyGemsuriGemfile
RubyGemsbenchmark-ipsGemfile
RubyGemsojGemfile
RubyGemsrapidjsonGemfile
Усі залежності 13

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

РеєстрПакетВерсіяЗв'язок
RubyGemsbenchmark-ipsпряма
RubyGemsnet-httpпряма
RubyGemsojпряма
RubyGemsrapidjsonпряма
RubyGemsuriпряма
RubyGemsbigdecimalнепряма
RubyGemsostructнепряма
RubyGemspower_assertнепряма
RubyGemsrakeнепряма
RubyGemsrake-compilerнепряма
RubyGemssimplecovнепряма
RubyGemstest-unitнепряма
RubyGemstest-unit-ruby-coreнепряма
Сповіщення про залежності не оцінено

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "json",
        "json-parser",
        "ruby"
      ],
      "is_fork": false,
      "size_kb": 5916,
      "has_wiki": false,
      "homepage": "https://docs.ruby-lang.org/en/master/JSON.html",
      "languages": {
        "C": 180610,
        "C++": 4397,
        "Java": 190319,
        "Ruby": 275730
      },
      "pushed_at": "2026-07-15T10:53:51Z",
      "created_at": "2009-08-24T22:21:39Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-16T08:18:16Z",
      "description": "JSON implementation for Ruby",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Ruby",
      "significant_languages": [
        "Ruby",
        "Java",
        "C"
      ]
    },
    "owner": {
      "blog": "https://www.ruby-lang.org/",
      "name": "The Ruby Programming Language",
      "type": "Organization",
      "login": "ruby",
      "company": null,
      "location": "Japan",
      "followers": 2077,
      "avatar_url": "https://avatars.githubusercontent.com/u/210414?v=4",
      "created_at": "2010-02-25T03:48:00Z",
      "is_verified": null,
      "public_repos": 190,
      "account_age_days": 5990
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.21.0",
          "kind": "minor",
          "published_at": "2026-07-12T06:58:15Z"
        },
        {
          "tag": "v2.20.0",
          "kind": "minor",
          "published_at": "2026-06-23T14:24:02Z"
        },
        {
          "tag": "v2.19.9",
          "kind": "patch",
          "published_at": "2026-06-11T18:49:11Z"
        },
        {
          "tag": "v2.19.8",
          "kind": "patch",
          "published_at": "2026-06-11T18:48:31Z"
        },
        {
          "tag": "v2.19.7",
          "kind": "patch",
          "published_at": "2026-05-28T10:05:47Z"
        },
        {
          "tag": "v2.19.6",
          "kind": "patch",
          "published_at": "2026-05-28T07:03:50Z"
        },
        {
          "tag": "v2.19.5",
          "kind": "patch",
          "published_at": "2026-05-04T04:58:07Z"
        },
        {
          "tag": "v2.19.4",
          "kind": "patch",
          "published_at": "2026-04-18T21:09:18Z"
        },
        {
          "tag": "v2.19.3",
          "kind": "patch",
          "published_at": "2026-03-25T11:04:18Z"
        },
        {
          "tag": "v2.15.2.1",
          "kind": "other",
          "published_at": "2026-03-18T17:49:27Z"
        },
        {
          "tag": "v2.17.1.2",
          "kind": "other",
          "published_at": "2026-03-18T17:46:20Z"
        },
        {
          "tag": "v2.19.2",
          "kind": "patch",
          "published_at": "2026-03-18T17:28:01Z"
        },
        {
          "tag": "v2.19.1",
          "kind": "patch",
          "published_at": "2026-03-08T09:16:10Z"
        },
        {
          "tag": "v2.19.0",
          "kind": "minor",
          "published_at": "2026-03-06T08:14:41Z"
        },
        {
          "tag": "v2.18.1",
          "kind": "patch",
          "published_at": "2026-02-03T07:48:52Z"
        },
        {
          "tag": "v2.18.0",
          "kind": "minor",
          "published_at": "2025-12-11T11:04:51Z"
        },
        {
          "tag": "v2.17.1",
          "kind": "patch",
          "published_at": "2025-12-11T11:04:29Z"
        },
        {
          "tag": "v2.17.0",
          "kind": "minor",
          "published_at": "2025-12-03T15:25:59Z"
        },
        {
          "tag": "v2.16.0",
          "kind": "minor",
          "published_at": "2025-11-07T09:14:52Z"
        },
        {
          "tag": "v2.15.2",
          "kind": "patch",
          "published_at": "2025-10-25T09:00:34Z"
        },
        {
          "tag": "v2.15.1",
          "kind": "patch",
          "published_at": "2025-10-07T08:32:50Z"
        },
        {
          "tag": "v2.15.0",
          "kind": "minor",
          "published_at": "2025-09-22T10:05:33Z"
        },
        {
          "tag": "v2.14.1",
          "kind": "patch",
          "published_at": "2025-09-18T14:32:34Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2025-09-18T09:29:12Z"
        },
        {
          "tag": "v2.13.2",
          "kind": "patch",
          "published_at": "2025-07-28T07:05:23Z"
        },
        {
          "tag": "v2.13.1",
          "kind": "patch",
          "published_at": "2025-07-24T12:09:13Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2025-07-17T08:29:56Z"
        },
        {
          "tag": "v2.12.2",
          "kind": "patch",
          "published_at": "2025-05-23T15:11:34Z"
        },
        {
          "tag": "v2.12.1",
          "kind": "patch",
          "published_at": "2025-05-23T15:11:04Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2025-05-23T15:10:22Z"
        },
        {
          "tag": "v2.11.3",
          "kind": "patch",
          "published_at": "2025-05-05T12:40:35Z"
        },
        {
          "tag": "v2.11.2",
          "kind": "patch",
          "published_at": "2025-05-05T12:39:16Z"
        },
        {
          "tag": "v2.11.1",
          "kind": "patch",
          "published_at": "2025-04-24T13:12:20Z"
        },
        {
          "tag": "v2.11.0",
          "kind": "minor",
          "published_at": "2025-04-24T08:13:01Z"
        },
        {
          "tag": "v2.10.2",
          "kind": "patch",
          "published_at": "2025-03-12T13:12:19Z"
        },
        {
          "tag": "v2.10.1",
          "kind": "patch",
          "published_at": "2025-02-12T11:12:00Z"
        },
        {
          "tag": "v2.10.0",
          "kind": "minor",
          "published_at": "2025-02-10T11:05:20Z"
        },
        {
          "tag": "v2.9.1",
          "kind": "patch",
          "published_at": "2024-12-18T23:01:17Z"
        },
        {
          "tag": "v2.9.0",
          "kind": "minor",
          "published_at": "2024-12-03T08:26:10Z"
        },
        {
          "tag": "v2.8.2",
          "kind": "patch",
          "published_at": "2024-11-14T13:58:24Z"
        },
        {
          "tag": "v2.8.1",
          "kind": "patch",
          "published_at": "2024-11-06T17:37:25Z"
        },
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2024-11-06T16:08:27Z"
        },
        {
          "tag": "v2.7.6",
          "kind": "patch",
          "published_at": "2024-11-04T13:28:25Z"
        },
        {
          "tag": "v2.7.5",
          "kind": "patch",
          "published_at": "2024-10-30T11:18:02Z"
        },
        {
          "tag": "v2.7.4",
          "kind": "patch",
          "published_at": "2024-10-25T11:12:51Z"
        },
        {
          "tag": "v2.7.3",
          "kind": "patch",
          "published_at": "2024-10-24T08:25:14Z"
        },
        {
          "tag": "v2.7.3.rc1",
          "kind": "other",
          "published_at": "2024-10-23T08:23:32Z"
        },
        {
          "tag": "v2.7.2",
          "kind": "patch",
          "published_at": "2024-04-04T03:33:21Z"
        },
        {
          "tag": "v2.7.1",
          "kind": "patch",
          "published_at": "2023-12-05T04:13:30Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2023-12-01T06:38:27Z"
        },
        {
          "tag": "v2.6.3",
          "kind": "patch",
          "published_at": "2022-12-05T11:10:54Z"
        },
        {
          "tag": "v2.6.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:45Z"
        },
        {
          "tag": "v2.6.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:44Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:42Z"
        },
        {
          "tag": "v2.5.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:41Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:40Z"
        },
        {
          "tag": "v2.4.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:39Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:38Z"
        },
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:36Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:35Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:34Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:33Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:31Z"
        },
        {
          "tag": "v1.8.6",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:26Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:30Z"
        },
        {
          "tag": "v1.8.5",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:25Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:29Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:28Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2022-11-17T12:21:27Z"
        },
        {
          "tag": "v1.8.3",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:24Z"
        },
        {
          "tag": "v1.8.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:22Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:21Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:20Z"
        },
        {
          "tag": "v1.7.7",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:19Z"
        },
        {
          "tag": "v1.6.8",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:11Z"
        },
        {
          "tag": "v1.5.5",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:01Z"
        },
        {
          "tag": "v1.7.6",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:18Z"
        },
        {
          "tag": "v1.7.5",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:17Z"
        },
        {
          "tag": "v1.7.4",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:16Z"
        },
        {
          "tag": "v1.7.3",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:15Z"
        },
        {
          "tag": "v1.7.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:14Z"
        },
        {
          "tag": "v1.7.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:13Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:12Z"
        },
        {
          "tag": "v1.6.7",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:09Z"
        },
        {
          "tag": "v1.6.6",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:08Z"
        },
        {
          "tag": "v1.6.5",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:07Z"
        },
        {
          "tag": "v1.6.4",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:06Z"
        },
        {
          "tag": "v1.6.3",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:05Z"
        },
        {
          "tag": "v1.6.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:04Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:21:03Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:21:02Z"
        },
        {
          "tag": "v1.5.4",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:59Z"
        },
        {
          "tag": "v1.5.3",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:58Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:57Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:55Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2022-11-17T12:20:54Z"
        },
        {
          "tag": "v1.4.6-java",
          "kind": "prerelease",
          "published_at": "2022-11-17T12:20:53Z"
        },
        {
          "tag": "v1.4.6",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:52Z"
        },
        {
          "tag": "v1.4.5",
          "kind": "patch",
          "published_at": "2022-11-17T12:20:51Z"
        },
        {
          "tag": "v1.4.4-java",
          "kind": "prerelease",
          "published_at": "2022-11-17T12:20:50Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "fd61def38b9bb859fee7eec8e7d3143600e5b347",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.21.1",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-07-13T07:43:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db70b1432157d1c01b556c1367babe72a6a1fe21",
          "body": "We don't need to perform out own checks.\n\nFix: https://github.com/ruby/json/pull/1052",
          "is_bot": false,
          "headline": "Rely on Ruby's HAVE_BUILTIN___BUILTIN_CLZLL",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-07-13T07:26:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9be0e8ed39c29f08ad9c72eabdb8aa0851bfa990",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.21.0",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-07-12T06:55:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1299d42ac3042f6756af7673ab4ca76178f2d65",
          "body": "`JSON::ResumableParser` re-decodes an incomplete number on every chunk it\nreceives, so a long number delivered in small chunks is disproportionately slow\nto parse -- the work is quadratic (a bit worse in practice) in the number's\nlength.\n\n## Background\n\nWhen the parser reads a number that reaches th\n[…]\ntegers and floats split across feeds still decode to the correct\nvalue.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01PpeQSEFkF1X1Uuzjx9BsYe",
          "is_bot": false,
          "headline": "Avoid re-decoding an incomplete number on every ResumableParser chunk",
          "author_name": "Masataka Pocke Kuwabara",
          "author_login": "pocke",
          "committed_at": "2026-07-09T09:41:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cc010c46889c8516a9a357336b262ce35779985f",
          "body": "When a feed boundary fell right after a consumed token -- a `,` or an opening\n`[` / `{` -- whose effect was not yet committed to the parser's persistent\nstate, the token was dropped on resume, producing parse errors or silently\nwrong values.\n\n## Reproduction\n\n```ruby\nrequire \"json\"\n\ndef parse_in_two\n[…]\numed in the same\norder, and error positions still point at the comment.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01PpeQSEFkF1X1Uuzjx9BsYe",
          "is_bot": false,
          "headline": "Fix ResumableParser losing tokens before a feed-boundary suspension",
          "author_name": "Masataka Pocke Kuwabara",
          "author_login": "pocke",
          "committed_at": "2026-07-09T05:56:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0864e83701500ded4db0bece0dd3c78b5f819656",
          "body": "There was no single API answering \"does the stream end in the middle of\na document?\" once all parseable fed bytes have been consumed. Callers\nhad to combine two complementary APIs:\n\n  !parser.rest.empty? || !parser.partial_value.nil?\n\n`rest` only reflects unconsumed tokenizer bytes, so it is empty w\n[…]\nsition of the three\nunderlying predicates so its definition doubles as documentation:\n\n  def empty?\n    eos? && !partial_value? && !value?\n  end\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add JSON::ResumableParser#partial_value? and #empty?",
          "author_name": "Shizuo Fujita",
          "author_login": "Watson1978",
          "committed_at": "2026-07-03T09:24:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9dbfeb83dfcdbd64af7c87c3511a3ff96b352a0b",
          "body": "A `//` line comment split across a feed boundary was treated as fully\nconsumed, so comment body delivered in a later chunk leaked out as parsed\nJSON values.\n\n## Reproduction\n\n```ruby\nrequire \"json\"\n\nparser = JSON::ResumableParser.new(allow_comments: true)\ndocuments = []\n\"[1]//[999]\\n[3]\".each_char d\n[…]\n number is only considered complete once a\nfollowing separator is seen.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01PpeQSEFkF1X1Uuzjx9BsYe",
          "is_bot": false,
          "headline": "Fix ResumableParser treating unterminated line comments as complete",
          "author_name": "Masataka Pocke Kuwabara",
          "author_login": "pocke",
          "committed_at": "2026-07-03T09:22:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ea008e82fed43316fb0672bf84774818e788f022",
          "body": "Fix: https://github.com/ruby/json/issues/976\n\nCo-Authored-By: Jean Boussier <byroot@ruby-lang.org>",
          "is_bot": false,
          "headline": "Add a `sort_keys` option to the generator.",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-07-02T09:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94c1af25b568dd97abe3fcc8a61662019aef3b7c",
          "body": "partial_value rebuilds the open containers on a scratch copy of the value\nstack. Folding an empty innermost container pops nothing and pushes its\nresult, so head climbs one past the live size; the scratch buffer was sized\nto exactly the live size, so the push triggered rvalue_stack_grow which\nreallo\n[…]\ny at most one -- either for the missing-value placeholder or for an\nempty innermost fold, never both. Size the buffer to capa + 1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix ResumableParser#partial_value SEGV on incomplete nested containers",
          "author_name": "tompng",
          "author_login": "tompng",
          "committed_at": "2026-06-30T06:59:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "faa5572b6c8b6d266cbafafbb568f658bbfe0d16",
          "body": null,
          "is_bot": false,
          "headline": "Fix a few inconsistencies in readme",
          "author_name": "Andrey Sobolev",
          "author_login": "duffuniverse",
          "committed_at": "2026-06-27T06:18:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "724eddaeaa8ff5f0704e994b2d268bb3a6da461f",
          "body": "When parsing JSON floats with extremely negative exponents (like\n123.456e-789 or 123e-10000000), the parser would fall back to\nrb_cstr_to_dbl which internally calls strtod. When strtod returns\nERANGE due to underflow to 0.0, Ruby emits a \"Float out of range\"\nwarning, causing noise in the test output\n[…]\nto_dbl, avoiding the spurious warning.\n\nThis fixes warnings introduced by JSONMinefieldParserTest tests\n(test_i_number_double_huge_neg_exp and test_i_number_real_underflow)\nadded in commit 6507a836c5.",
          "is_bot": true,
          "headline": "Avoid Float out of range warning for clearly underflowing numbers",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-06-27T06:15:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "168095ccb80b21c2a1db2c6d0b6bf5682ef64ad9",
          "body": null,
          "is_bot": false,
          "headline": "Fix unused-but-set-global warnings in clang-23",
          "author_name": "Nobuyoshi Nakada",
          "author_login": "nobu",
          "committed_at": "2026-06-25T08:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa69e94b666bac2cc64110bba9d1eb1b24375418",
          "body": "Ref: https://github.com/ruby/ruby/pull/17395",
          "is_bot": false,
          "headline": "Declare types as RUBY_TYPED_THREAD_SAFE_FREE",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-25T06:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1ee4b0e223955f56429ea4390b1af6dcd8200e1",
          "body": null,
          "is_bot": false,
          "headline": "Fix wrong call-seq for `JSON::ResumableParser#eos?`",
          "author_name": "Sutou Kouhei",
          "author_login": "kou",
          "committed_at": "2026-06-25T06:34:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13162921b89c4f662aa018771403457f069f7e26",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.20.0",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-23T10:45:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1443265cd178fcacfea41ba531b770c2dbf7feef",
          "body": null,
          "is_bot": false,
          "headline": "Remove useless executable bits",
          "author_name": "Nobuyoshi Nakada",
          "author_login": "nobu",
          "committed_at": "2026-06-23T00:41:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "532065c259a87c78a0a2af1e6ea0177aeca85539",
          "body": "…ffer\n\n`JSON::ResumableParser#<<` raises `Encoding::CompatibilityError` when the\nfirst chunk is a frozen multibyte UTF-8 string and more data is fed after a\npartial parse.\n\n## Reproduction\n\n```ruby\nrequire \"json\"\n\nparser = JSON::ResumableParser.new\nparser << '{\"message\":\"日本'.freeze   # frozen + mult\n[…]\ne's\n`frozen_string_literal` magic comment is ever removed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01PpeQSEFkF1X1Uuzjx9BsYe",
          "is_bot": false,
          "headline": "Preserve UTF-8 encoding when reallocating a frozen ResumableParser bu…",
          "author_name": "Masataka Pocke Kuwabara",
          "author_login": "pocke",
          "committed_at": "2026-06-22T07:51:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c8af4b9ef509f6d989a0da1d1cdfdd7650ae10b",
          "body": null,
          "is_bot": false,
          "headline": "Update extconf.rb guard to use RUBY_ENGINE_VERSION",
          "author_name": "Benoit Daloze",
          "author_login": "eregon",
          "committed_at": "2026-06-21T12:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2afd1a9a61de2e58ff5a65c724de22d91c37db2e",
          "body": "Followup: https://github.com/ruby/json/pull/1031\n\nNow that the bug has been fixed upstream, we can only apply\nit on unpatched version.\n\nAlso refactor the workaround to expose the exact same API\nas `rb_catch_obj`, making it easier to ignore and remove later.",
          "is_bot": false,
          "headline": "Cleanup the `rb_catch_obj` workaround",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-21T08:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98925145d2ac1f87a6bb3e5add1fb5dd2a9901f8",
          "body": null,
          "is_bot": false,
          "headline": "Simplify parser_config_init",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-20T13:23:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b30a8f852dada93093a215b1519cc3bde526316c",
          "body": "No point to wait for the next call to `<<` to remove the reference.",
          "is_bot": false,
          "headline": "ResumableParser: eagerly drop the buffer when reaching EOS",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T14:20:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f08c66338cd0155a44dbda81d889f6db9ba4d205",
          "body": "Fix: https://github.com/ruby/json/pull/1016#issuecomment-4744487710\n\n`json` takes option hashes across the board, mostly because its API\npredates the introduction of keyword arguments.\n\nI'd like to change that to only take keyword arguments and error\nwhen an unknown argument is passed, but I'm not yet sure of the\nbackward compatibility consequences, so it might wait for the next\nmajor.\n\nBut in the meantime, `ResumableParser` being a new API, it can\nsafely use keyword arguments.",
          "is_bot": false,
          "headline": "ResumableParser: accept only keyword arguments",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T12:15:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d8efcb08b90b1543765e50783efaabc6f921ad6",
          "body": "Somehow on TruffleRuby `rb_catch_obj` straight out doesn't call\nthe passed function, acting as a noop.",
          "is_bot": false,
          "headline": "Workaround TruffleRuby buggy `rb_catch_obj` implementation",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T11:36:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bd1e9bce64c82b6e829f4583a62bab485529a00",
          "body": "Since the exception will be swallowed, building a message and\nbacktrace is just a waste of time.",
          "is_bot": false,
          "headline": "ResumableParser: use throw rather than raise for handled EOS",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T11:36:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "181396ca3d89d3247454ec698fc9a438580e2514",
          "body": null,
          "is_bot": false,
          "headline": "Don't omit `test_parse_error_snippet` on TruffleRuby",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T11:30:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2372115afeeb6cef346db131c3819f5e309f449",
          "body": "Fix: https://github.com/ruby/json/issues/1022\n\nThey can't always be accurate because we don't always keep the\nfull document in the buffer. As such it's better never to compute\nthem than to sometimes provide wrong coordinates.\n\nIn theory we could keep the number of lines since the start\nof the parse, but that's more book keeping for little utility.\n\nAnyway, these are useful to find a syntax error in a file,\nnot so much in a stream of documents.",
          "is_bot": false,
          "headline": "ResumableParser: Don't compute lines and columns on parse error",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T08:45:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21c2bbea1c57de3b5e4e24288684044d5cbcf7de",
          "body": "This is intended to make it easier to securely parse untrusted\ninputs.",
          "is_bot": false,
          "headline": "Implement ResumableParser#parsed_bytes",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T08:23:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97b2eee92cd15f0f487c887588701a2a38171c3c",
          "body": null,
          "is_bot": false,
          "headline": "Remove reference to ragel",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-19T07:30:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e954a6fe4eb9fc9d8b1ae9c5fe6268ace8ffcd07",
          "body": "…he new JRuby\n\nparser successfully parsed those files.",
          "is_bot": false,
          "headline": "Update the json_minefield_parser_test.rb to remove JRUBY_PENDING as t…",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a842a5c1f6eab272d75c76a466128f48b0842252",
          "body": "…with JRuby versions.",
          "is_bot": false,
          "headline": "Undo the pre-sizing of the RubyHash in decodeObject for compatablity …",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05bfcb8eb831860a04e86f5a4b18971976749d7a",
          "body": null,
          "is_bot": false,
          "headline": "Simplify the fast-path plain string building.",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbe22dbaaa0f877bbbaba1ce400abfcb5185013d",
          "body": null,
          "is_bot": false,
          "headline": "Add Ryu.class to the jar file.",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85ab2784e60016594ceb304d8a6a9772bde57c6f",
          "body": null,
          "is_bot": false,
          "headline": "Use jruby_new_parser parseNumbers",
          "author_name": "Thomas E. Enebo",
          "author_login": "enebo",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "525ffbc98c10e603c71694f3490dfcdb1d28b8b9",
          "body": null,
          "is_bot": false,
          "headline": "Presize the RubyHash when decoding an object.",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c76e3a45912fe1a3b5d01fa7a79944e2171701e",
          "body": "…n ragel.",
          "is_bot": false,
          "headline": "Ported the parser.c to the java extension and remove the dependency o…",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-19T07:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1676fc015f77b248b47a1635db9e5e7255a67871",
          "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-19T07:16:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "46aa46d3dad627899af1ab6485ee2baf487fbec9",
          "body": null,
          "is_bot": false,
          "headline": "Read ASCII-incompatible strings in binary mode",
          "author_name": "Nobuyoshi Nakada",
          "author_login": "nobu",
          "committed_at": "2026-06-19T01:35:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "004a5c1faa113a97ef2aeef695c62fe068dcb927",
          "body": "Stop updating stack handles, we don't actually need them as we're\nstarting heap allocated. Add an assertion to prove it.\n\nUse a dedicated field for storing the parser reference to be\nused for marking EOS errors. Also stop marking EOS errors when\nnot in resumable mode.",
          "is_bot": false,
          "headline": "Refactor ResumableParser",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-18T22:18:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3650e2bf4139f982323a15e972e4116fa5e430c4",
          "body": "An incomplete document is buffered in full with no size limit, so reading from an\nuntrusted source can grow memory without bound. Note in the rdoc that bounding the\ninput is the caller's responsibility.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Document that JSON::ResumableParser does not bound its buffer size",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T19:37:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "65549acb9cc49e64efc8cdc6028fafceacffa5c8",
          "body": "Fix: https://github.com/ruby/json/issues/1024#issuecomment-4745232736\n\nCo-Authored-By: Yusuke Endoh <mame@ruby-lang.org>",
          "is_bot": false,
          "headline": "ResumableParser#parse: don't swallow other parsers errors",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-18T19:31:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82b6b21354e9c35351b7699bd9050614dadd9223",
          "body": "cursor_position consumed the newline ending the previous line (post-decrement)\nbefore counting lines, so any error past the first line was reported one line\ntoo low (e.g. \"[1,\\n@\" reported '@' at line 1 instead of line 2). Count that\nnewline when the column loop breaks on it.\n\nCo-Authored-By: Jean Boussier <jean.boussier@gmail.com>",
          "is_bot": false,
          "headline": "Fix off-by-one line number in parse error messages",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T18:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56d16deb46f81345ed7215ef91ce1a18b0a31fe1",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reset all per-parse state in JSON::ResumableParser#clear",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T17:27:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d91b370b1e84bf6940c00bac8480824ab7c7f8a9",
          "body": "Co-Authored-By: Jean Boussier <jean.boussier@gmail.com>",
          "is_bot": false,
          "headline": "Fix JSON::ResumableParser stalling on a NUL byte",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T17:24:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "489b8c13b99149d64350cbc87a8643dfb738e18d",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Forbid JSON::ResumableParser#<< while the parser is in use",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T17:16:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3927c5ca4cb2465e34e9544de0a3cf62a817441a",
          "body": "…uffer\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix JSON::ResumableParser#parse leaking the in_use lock on an empty b…",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T16:01:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e5fa06aa426f8c39519924f0d94393dd82a51acf",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix heap-use-after-free in JSON::ResumableParser#partial_value",
          "author_name": "Yusuke Endoh",
          "author_login": "mame",
          "committed_at": "2026-06-18T16:01:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5973ecf23eef37070d8019f396e3670a09e273ee",
          "body": "It's only testing if we run into a parsing error or not, not\ntesting the actual parsed value, but that's still useful to\nhelp ensure we're not changing behavior on dark corners of the\nspec.",
          "is_bot": false,
          "headline": "Vendor tests from https://github.com/nst/JSONTestSuite",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-18T08:49:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11ed69439ff9b418d505a3d167de45361cb1973a",
          "body": "Fix: https://github.com/ruby/json/issues/1013\n\nThe string may be shared.",
          "is_bot": false,
          "headline": "ResumableParser#<<: call rb_str_modify before shrinking the buffer",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-17T06:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdad7dfb2679cda8aff992c270030049e3b10674",
          "body": null,
          "is_bot": false,
          "headline": "fast_float_parser.h: fix GCC 8 support",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T13:42:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97dda6509670d7ef5ca4d6f63ab41b8757c4580a",
          "body": null,
          "is_bot": false,
          "headline": "fast_float_parser.h: handle `__has_builtin` not being defined",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T12:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2203b8dce29154d1a167904feb1f9225f57ac213",
          "body": null,
          "is_bot": false,
          "headline": "fast_float_parser.h: copy `nlz_int64` from the bigdecimal gem",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T12:24:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d2a1ff57d9cd742481c235eb3fb79c8adf92bb5",
          "body": "Inspired by bigdecimal",
          "is_bot": false,
          "headline": "fast_float_parser.h: handle more environments",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T11:01:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34bc289d6916a81edda46fa3adb12a0d3f4f4ccd",
          "body": null,
          "is_bot": false,
          "headline": "fast_float_parser.h: handle `__has_builtin` not being defined",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T10:09:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c171e349393f5691785dbe219e4aad63ee8090e0",
          "body": "Required for Windows support.",
          "is_bot": false,
          "headline": "fast_float_parser.h: add portable __builtin_clzll",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T07:41:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4185ef1a7b034e065b6667d7bbc8fadd0667f982",
          "body": "Contrary to Ryu, it remains correct up to 18 mantissa digits,\nmeaning we don't have to fallback as much to Ruby's much slower\n`rb_cstr_to_dbl`.\n\nOn `canada.json`, the most number heavy benchmark, `ffp_s2d` is less\nthan 5% of total runtime. Most of the time is actually sent parsing,\nnot decoding.\n\nTh\n[…]\n--------------------------------\n               after    353.130 (± 0.3%) i/s    (2.83 ms/i) -      1.785k in   5.054791s\n\nComparison:\nbefore:      323.1 i/s\n after:      353.1 i/s - 1.09x  faster\n```",
          "is_bot": false,
          "headline": "Replace Ryu with a C99 port of fast_float",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T07:41:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "27009f624f57c3cd55044dbd3bc77c4954c6ee69",
          "body": null,
          "is_bot": false,
          "headline": "parser.c: Refactor `start` pointers",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T07:15:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24a2b083d72ed1d6d0bf3b703cb99b7998b6d310",
          "body": "Fix: https://github.com/ruby/json/issues/1008\n\nI'm unfortunately unable to turn the reproduction script into\na test case there, I don't understand what is causing `err_info`\nto be re-raised in the repro that doesn't work in test-unit.\n\n```ruby\nrequire 'json'\nparser = JSON::ResumableParser.new({})\n['\n[…]\nage\": \"hello ', 'world\"}', '[1,2]'].each do |chunk|\n  parser << chunk\n  begin\n    while parser.parse\n      p parser.value\n    end\n  rescue JSON::ParserError => e\n    p e\n    parser.clear\n  end\nend\n```",
          "is_bot": false,
          "headline": "ResumableParser: Reset err_info on EOS errors",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T06:15:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "68bcf605eb2a588184e12c95848cc603ff6afb04",
          "body": null,
          "is_bot": false,
          "headline": "Update Changelog",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-16T05:55:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02346d82c756cde1b7892e26982d9fe1f2021014",
          "body": "Fix: https://github.com/ruby/json/issues/1005\n\n`parser.state.frames` and `parser.state.value_stack` need to\nbe updated to point to the copy.",
          "is_bot": false,
          "headline": "ResumableParser#partial_value avoid mutating the stacks",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-15T14:08:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b908f6f267a6719d705f0a8254c23537d71eb45",
          "body": "Only available on MRI for now.",
          "is_bot": false,
          "headline": "Implement JSON::ResumableParser",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-15T10:27:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53f9d990bb627914baeda347bb3a705b880f1b9a",
          "body": null,
          "is_bot": false,
          "headline": "Merge 2.19.9 changes",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-11T18:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "996bac686d64e4e3aaeae03b14a7f9ee9695ebdb",
          "body": "It was never intended to be initialized with a stack buffer\nin that case, as when dumping into an IO we want larger chunks.",
          "is_bot": false,
          "headline": "generator.c: don't start with a stack buffer in IO case",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-11T18:46:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8144d4cb3473b9b48f10716a6ea7fcc83300e826",
          "body": "Suppres it for now because JRuby version does not support it yet.",
          "is_bot": false,
          "headline": "Suppres the warning for comment in JSON",
          "author_name": "Nobuyoshi Nakada",
          "author_login": "nobu",
          "committed_at": "2026-06-08T03:23:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8972c6da6e5db480f399410fc82fef16619b56b0",
          "body": null,
          "is_bot": false,
          "headline": "parser.c: Precompute JSON::ParserError and ivar IDs",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-07T19:14:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "138b9a2c4932ad2df1024ce3af18a5cc3ae9e901",
          "body": "Add the `allow_comments: true` parsing option.",
          "is_bot": false,
          "headline": "Deprecate default support of JavaScript comments in the parser",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-07T17:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbcf0a3254037f6e3a024707475b1c109e58cf4f",
          "body": "This makes it much easier to debug.",
          "is_bot": false,
          "headline": "Compile UNREACHABLE_RETURN into `rb_bug` when in debug mode",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-07T08:13:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d7f975b012054c1c8073b4444c6f533ce6d0e8b",
          "body": "It already implictly is on recent rubies because it has no\nmark function, but might as well make it explicit.",
          "is_bot": false,
          "headline": "Mark JSON_Parser_frame_stack_type as WB protected",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-07T08:11:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6444417670cd765604b4eab44e4e36180d2cafdf",
          "body": null,
          "is_bot": false,
          "headline": "Add note explaining why rvalue_stack is not WB_PROTECTED",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-06T08:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad6b9cff9eea22bd4b28b87f47a12a973feded27",
          "body": "Each phase now takes care of dispatching to the next one.",
          "is_bot": false,
          "headline": "json_parse_any: eliminate the loop and switch",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-06T07:46:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b284d4c1d5aa0d13685b66ec90dfb88f4f9ba46",
          "body": null,
          "is_bot": false,
          "headline": "ALWAYS_INLINE for json_match_keyword()",
          "author_name": "Benoit Daloze",
          "author_login": "eregon",
          "committed_at": "2026-06-05T21:38:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65904e8825cf31bc682a28adbdf7e09206b1e0b8",
          "body": "Makes each case simpler, but also more consistent.",
          "is_bot": false,
          "headline": "parser.c: refactor json_push_value / json_value_completed",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-05T19:19:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b07f74bd732d0a4b424341279575323b3cee426f",
          "body": "Extracted from: https://github.com/ruby/json/pull/994\n\nModern compilers shouldn't have problem computing `strlen` at\ncompile time and generating the same code.",
          "is_bot": false,
          "headline": "parser.c: Extract json_match_keyword",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-05T16:33:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "887274e642c6e0f0445d0ad4995e3fc29a025692",
          "body": "… transition from a JSON_PHASE_VALUE to the next phase.",
          "is_bot": false,
          "headline": "Reorder the json_frame_type and json_frame_phase enum to simplify the…",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-06-05T15:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84fbc08bc9688bf0e41fe173ef87e87b20e69f41",
          "body": "…stack",
          "is_bot": false,
          "headline": "Implement GC compaction for JSON_ParserConfig and JSON_Parser_rvalue_…",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-05T09:28:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1a0891cc3d2f063c7e8300cb8cf8bfb34f95a6e",
          "body": "We shouldn't report the size of the embedded struct.",
          "is_bot": false,
          "headline": "Fix memsize function for embedded types",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-05T07:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "500f0eabf3c1efb0fe0b77b349c63c461dcb8651",
          "body": "Generate very sligthly better code (one less instruction...).\n\nAlso extract `json_on_duplicate_key` as `NOINLINE`.",
          "is_bot": false,
          "headline": "parser.c: Mark some paths as unreacheable",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-04T14:41:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "216e0ffd27c80d343bfdf402e2df7a305fa23dae",
          "body": "We've been faster on all benchmarks for a while now.\nAll these notes have been addressed a long time ago.",
          "is_bot": false,
          "headline": "Reove outdated benchmark notes",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-04T06:59:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a760d9ae9bf30c785fcb5d5ba79a445f01dc2c43",
          "body": "As opposed to a recursive loop. We do this by keeping a stack of\nframes (very similar to how the stack of values was already\nstored). Each frame represents the state of a container. Since\nthere are only 2 in JSON, it doesn't have to get too complex.\n\nEach frame in the iterative parser now holds an e\n[…]\nst cases.\n\n`JSON_ParserState.stack` was renamed into `.value_stack`,\nas with the introduction of the frames stack, the naming became\nconfusing.\n\nCo-Authored-By: Jean Boussier <jean.boussier@gmail.com>",
          "is_bot": false,
          "headline": "Make the JSON parse loop iterative",
          "author_name": "Kevin Newton",
          "author_login": "kddnewton",
          "committed_at": "2026-06-04T06:58:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52c9d9bdf2af835061d081481a88aa9560b1ae45",
          "body": null,
          "is_bot": false,
          "headline": "Coverage: ignore test/*",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-03T07:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec47912123966edd7a80074cdc8df68bbda39149",
          "body": "Avoid warning on newer rubies",
          "is_bot": false,
          "headline": "Add bigdecimal in Gemfile",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-03T07:36:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90354007ea5b6e576bef37e0eed29c058cc456d4",
          "body": "Ensure that buffer sizes have been properly tracked when running\nin debug mode, and appease the GC slightly when running in release\nmode.\n\nRef: https://bugs.ruby-lang.org/issues/21861",
          "is_bot": false,
          "headline": "Integrate with Ruby 4.1 `ruby_sized_xfree`",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-03T07:32:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7fe86ea6929493b9a6f9802dc6761ae89af1ec9",
          "body": "Comments shouldn't be present in performance sensitive\ndocuments, so it's best not to inline it to make space\nfor more important code.",
          "is_bot": false,
          "headline": "parser.c: noinline `json_eat_comments`",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-03T06:50:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5233dd9b851a4924f793aec1a1658ed8b66a34c7",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.19.8",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-06-03T06:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f44b26cf34f37e97065ff37f5eaecac69d5f28e",
          "body": "When reaching EOS right after an escape the cursor is\none byte too far.\n\nReported-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "Prevent buffer over-read when generating EOF error",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-29T08:01:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be8d068a8eb1124fdc2273e102dc986edf1140f7",
          "body": "Co-Authored-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "Handle invalid types passed as `max_nesting` option",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-29T06:40:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59501c07de4257714d94a2d5bd44f08fad1a4a4c",
          "body": null,
          "is_bot": false,
          "headline": "Get rid of all_images gem",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-29T06:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7a7b2be6f20e52439f4fdc5263e9b539fc6ad6c",
          "body": null,
          "is_bot": false,
          "headline": "Add a security note in README",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T12:01:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab6c8f2cdbc9cfa6079f5d0679afbc407a227c6d",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.19.7",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T10:03:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f033b9d3421c450108913d724810938e2d055e84",
          "body": "Co-Authored-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "Fix some more edge cases with out of range floats",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T09:57:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ca8a67f52be73f68b7cd3b1f62809e3118c9d36",
          "body": "Reported-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "parser.c: Ensure the user provided string can't be mutated",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T08:52:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dba1d885eae95ad2ca2b1986192ffd4397196525",
          "body": "Reported-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "generator.c: trigger write barriers in cState_init_copy",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T08:01:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8800cb0c58cf8ecda0943f94cbf63606cdca13b",
          "body": "Co-Authored-By: Yuhang Wu <yuhang@depthfirst.com>",
          "is_bot": false,
          "headline": "Further validate generator `depth` config",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T07:41:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e276ebb793437065ce741113a3eadc1a52847c0",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.19.6",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-28T07:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96966221b8c5df24454ba6030a95c6e1c37f86d7",
          "body": null,
          "is_bot": false,
          "headline": "Add ruby-asan to CI",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-12T07:50:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d644602ac8efff874c7b36ac0c21a19790692988",
          "body": "Reported-by: Lexterl33t <paraghostsociety@gmail.com>",
          "is_bot": false,
          "headline": "generator.c: Handle stupidly large depth",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-12T07:50:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab6972d797a17487a16f30195fb0e745858a54a2",
          "body": "This couldn't possibly lead to a crash unless you'd mess\nwith GC.stress or `send(:initialize)` on an old object.\n\nBut for correctness, it should be there.",
          "is_bot": false,
          "headline": "Add missing write barrier in ParserConfig",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-12T06:24:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a1a4a4861255014b125f3c0c52b968ee7f5bcfe",
          "body": null,
          "is_bot": false,
          "headline": "Release 2.19.5",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-04T04:49:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6ca597cb1dca96d68206c60bd1a1fd1c954fecd",
          "body": null,
          "is_bot": false,
          "headline": "Avoid spamming too many deprecations while parsing",
          "author_name": "Jean Boussier",
          "author_login": "byroot",
          "committed_at": "2026-05-01T05:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa0671ccee70fd6653057df75a97b1ea3334ea87",
          "body": null,
          "is_bot": false,
          "headline": "Test TruffleRuby release in CI for improved stability",
          "author_name": "Benoit Daloze",
          "author_login": "eregon",
          "committed_at": "2026-04-27T01:22:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfbe356b4f9ecef22d5c934628e3ec9b227796f6",
          "body": "And move the encoding convertion logic in another function with NOINLINE.\n\nThe overwelming majority of strings are correctly encoded, so we\nwant to inline the very cheap check, however we don't want to\ninline the much larger piece of code required to re-encode the string.\n\nCo-Authored-By: Jean Boussier <jean.boussier@gmail.com>",
          "is_bot": false,
          "headline": "Force ensure_valid_encoding to be inlined.",
          "author_name": "Scott Myron",
          "author_login": "samyron",
          "committed_at": "2026-04-20T12:56:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 362,
      "latest_release_at": "2026-07-12T06:58:15Z",
      "latest_release_tag": "v2.21.0",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 43,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 12.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "json",
          "exists": true,
          "license": "Ruby",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/json",
          "is_deprecated": false,
          "latest_version": "2.21.1",
          "repository_url": "https://github.com/ruby/json",
          "versions_count": 237,
          "total_downloads": 1327605661,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2009-07-25T18:11:33Z",
          "latest_published_at": "2026-07-13T07:44:54.958000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 371,
      "stars": 780,
      "watchers": 55,
      "fork_history": {
        "days": [
          {
            "date": "2009-09-01",
            "count": 1
          },
          {
            "date": "2009-10-05",
            "count": 1
          },
          {
            "date": "2009-11-27",
            "count": 1
          },
          {
            "date": "2009-11-29",
            "count": 1
          },
          {
            "date": "2010-01-11",
            "count": 1
          },
          {
            "date": "2010-04-25",
            "count": 1
          },
          {
            "date": "2010-05-21",
            "count": 1
          },
          {
            "date": "2010-06-09",
            "count": 1
          },
          {
            "date": "2010-06-29",
            "count": 1
          },
          {
            "date": "2010-07-14",
            "count": 1
          },
          {
            "date": "2010-08-03",
            "count": 1
          },
          {
            "date": "2010-08-10",
            "count": 1
          },
          {
            "date": "2010-10-12",
            "count": 1
          },
          {
            "date": "2010-10-28",
            "count": 1
          },
          {
            "date": "2011-02-07",
            "count": 1
          },
          {
            "date": "2011-02-26",
            "count": 1
          },
          {
            "date": "2011-03-07",
            "count": 1
          },
          {
            "date": "2011-04-03",
            "count": 1
          },
          {
            "date": "2011-05-08",
            "count": 1
          },
          {
            "date": "2011-05-13",
            "count": 1
          },
          {
            "date": "2011-06-15",
            "count": 1
          },
          {
            "date": "2011-07-02",
            "count": 1
          },
          {
            "date": "2011-08-26",
            "count": 1
          },
          {
            "date": "2011-09-23",
            "count": 1
          },
          {
            "date": "2011-10-01",
            "count": 1
          },
          {
            "date": "2011-11-18",
            "count": 1
          },
          {
            "date": "2011-12-05",
            "count": 1
          },
          {
            "date": "2011-12-26",
            "count": 1
          },
          {
            "date": "2012-01-06",
            "count": 1
          },
          {
            "date": "2012-02-14",
            "count": 1
          },
          {
            "date": "2012-03-03",
            "count": 1
          },
          {
            "date": "2012-03-22",
            "count": 1
          },
          {
            "date": "2012-05-01",
            "count": 1
          },
          {
            "date": "2012-07-30",
            "count": 1
          },
          {
            "date": "2012-08-01",
            "count": 1
          },
          {
            "date": "2012-08-06",
            "count": 1
          },
          {
            "date": "2012-08-14",
            "count": 1
          },
          {
            "date": "2012-09-05",
            "count": 2
          },
          {
            "date": "2012-09-09",
            "count": 1
          },
          {
            "date": "2012-11-09",
            "count": 1
          },
          {
            "date": "2012-11-20",
            "count": 1
          },
          {
            "date": "2012-11-23",
            "count": 1
          },
          {
            "date": "2012-12-13",
            "count": 2
          },
          {
            "date": "2012-12-15",
            "count": 1
          },
          {
            "date": "2012-12-24",
            "count": 1
          },
          {
            "date": "2013-01-15",
            "count": 1
          },
          {
            "date": "2013-01-21",
            "count": 1
          },
          {
            "date": "2013-02-05",
            "count": 1
          },
          {
            "date": "2013-02-14",
            "count": 1
          },
          {
            "date": "2013-02-24",
            "count": 1
          },
          {
            "date": "2013-02-26",
            "count": 1
          },
          {
            "date": "2013-03-22",
            "count": 1
          },
          {
            "date": "2013-04-28",
            "count": 1
          },
          {
            "date": "2013-08-02",
            "count": 1
          },
          {
            "date": "2013-08-30",
            "count": 1
          },
          {
            "date": "2013-09-04",
            "count": 1
          },
          {
            "date": "2013-09-13",
            "count": 1
          },
          {
            "date": "2013-09-21",
            "count": 1
          },
          {
            "date": "2013-09-28",
            "count": 1
          },
          {
            "date": "2013-11-01",
            "count": 1
          },
          {
            "date": "2013-11-16",
            "count": 1
          },
          {
            "date": "2013-11-25",
            "count": 1
          },
          {
            "date": "2013-12-01",
            "count": 1
          },
          {
            "date": "2013-12-10",
            "count": 1
          },
          {
            "date": "2013-12-29",
            "count": 1
          },
          {
            "date": "2014-01-03",
            "count": 1
          },
          {
            "date": "2014-01-23",
            "count": 1
          },
          {
            "date": "2014-03-07",
            "count": 1
          },
          {
            "date": "2014-04-02",
            "count": 1
          },
          {
            "date": "2014-04-08",
            "count": 1
          },
          {
            "date": "2014-05-04",
            "count": 1
          },
          {
            "date": "2014-06-17",
            "count": 1
          },
          {
            "date": "2014-08-26",
            "count": 1
          },
          {
            "date": "2014-09-19",
            "count": 1
          },
          {
            "date": "2014-10-12",
            "count": 1
          },
          {
            "date": "2014-10-20",
            "count": 1
          },
          {
            "date": "2014-11-01",
            "count": 1
          },
          {
            "date": "2014-11-16",
            "count": 1
          },
          {
            "date": "2014-11-18",
            "count": 2
          },
          {
            "date": "2014-12-16",
            "count": 1
          },
          {
            "date": "2014-12-26",
            "count": 1
          },
          {
            "date": "2014-12-28",
            "count": 1
          },
          {
            "date": "2015-01-08",
            "count": 1
          },
          {
            "date": "2015-01-19",
            "count": 1
          },
          {
            "date": "2015-01-26",
            "count": 1
          },
          {
            "date": "2015-02-09",
            "count": 1
          },
          {
            "date": "2015-03-11",
            "count": 1
          },
          {
            "date": "2015-03-13",
            "count": 1
          },
          {
            "date": "2015-04-01",
            "count": 1
          },
          {
            "date": "2015-04-12",
            "count": 1
          },
          {
            "date": "2015-05-11",
            "count": 1
          },
          {
            "date": "2015-05-12",
            "count": 1
          },
          {
            "date": "2015-06-12",
            "count": 2
          },
          {
            "date": "2015-06-23",
            "count": 1
          },
          {
            "date": "2015-07-08",
            "count": 1
          },
          {
            "date": "2015-08-07",
            "count": 1
          },
          {
            "date": "2015-09-06",
            "count": 1
          },
          {
            "date": "2015-09-24",
            "count": 1
          },
          {
            "date": "2015-09-25",
            "count": 1
          },
          {
            "date": "2015-10-14",
            "count": 1
          },
          {
            "date": "2015-11-09",
            "count": 1
          },
          {
            "date": "2015-11-30",
            "count": 1
          },
          {
            "date": "2015-12-13",
            "count": 1
          },
          {
            "date": "2015-12-23",
            "count": 1
          },
          {
            "date": "2015-12-31",
            "count": 1
          },
          {
            "date": "2016-01-11",
            "count": 1
          },
          {
            "date": "2016-02-28",
            "count": 1
          },
          {
            "date": "2016-03-23",
            "count": 1
          },
          {
            "date": "2016-04-25",
            "count": 1
          },
          {
            "date": "2016-05-13",
            "count": 1
          },
          {
            "date": "2016-06-22",
            "count": 1
          },
          {
            "date": "2016-06-25",
            "count": 1
          },
          {
            "date": "2016-06-27",
            "count": 1
          },
          {
            "date": "2016-07-05",
            "count": 1
          },
          {
            "date": "2016-07-12",
            "count": 1
          },
          {
            "date": "2016-08-01",
            "count": 1
          },
          {
            "date": "2016-08-30",
            "count": 2
          },
          {
            "date": "2016-09-13",
            "count": 1
          },
          {
            "date": "2016-10-19",
            "count": 1
          },
          {
            "date": "2016-11-23",
            "count": 1
          },
          {
            "date": "2016-12-07",
            "count": 1
          },
          {
            "date": "2017-01-05",
            "count": 1
          },
          {
            "date": "2017-01-08",
            "count": 1
          },
          {
            "date": "2017-01-12",
            "count": 1
          },
          {
            "date": "2017-01-23",
            "count": 1
          },
          {
            "date": "2017-02-03",
            "count": 1
          },
          {
            "date": "2017-02-08",
            "count": 1
          },
          {
            "date": "2017-02-11",
            "count": 1
          },
          {
            "date": "2017-02-13",
            "count": 1
          },
          {
            "date": "2017-02-15",
            "count": 1
          },
          {
            "date": "2017-03-13",
            "count": 1
          },
          {
            "date": "2017-03-24",
            "count": 1
          },
          {
            "date": "2017-04-04",
            "count": 1
          },
          {
            "date": "2017-04-05",
            "count": 1
          },
          {
            "date": "2017-05-12",
            "count": 1
          },
          {
            "date": "2017-05-26",
            "count": 1
          },
          {
            "date": "2017-05-27",
            "count": 1
          },
          {
            "date": "2017-05-31",
            "count": 1
          },
          {
            "date": "2017-06-01",
            "count": 1
          },
          {
            "date": "2017-06-08",
            "count": 1
          },
          {
            "date": "2017-06-17",
            "count": 1
          },
          {
            "date": "2017-06-27",
            "count": 1
          },
          {
            "date": "2017-06-29",
            "count": 1
          },
          {
            "date": "2017-07-15",
            "count": 1
          },
          {
            "date": "2017-08-18",
            "count": 1
          },
          {
            "date": "2017-09-07",
            "count": 1
          },
          {
            "date": "2017-09-11",
            "count": 1
          },
          {
            "date": "2017-10-09",
            "count": 1
          },
          {
            "date": "2018-01-20",
            "count": 1
          },
          {
            "date": "2018-02-27",
            "count": 1
          },
          {
            "date": "2018-03-08",
            "count": 1
          },
          {
            "date": "2018-03-19",
            "count": 1
          },
          {
            "date": "2018-03-23",
            "count": 2
          },
          {
            "date": "2018-04-12",
            "count": 1
          },
          {
            "date": "2018-06-01",
            "count": 1
          },
          {
            "date": "2018-06-05",
            "count": 1
          },
          {
            "date": "2018-06-07",
            "count": 1
          },
          {
            "date": "2018-07-01",
            "count": 1
          },
          {
            "date": "2018-08-29",
            "count": 1
          },
          {
            "date": "2018-12-02",
            "count": 2
          },
          {
            "date": "2018-12-05",
            "count": 1
          },
          {
            "date": "2018-12-09",
            "count": 1
          },
          {
            "date": "2018-12-24",
            "count": 1
          },
          {
            "date": "2019-01-07",
            "count": 1
          },
          {
            "date": "2019-02-08",
            "count": 1
          },
          {
            "date": "2019-03-03",
            "count": 1
          },
          {
            "date": "2019-03-04",
            "count": 1
          },
          {
            "date": "2019-03-19",
            "count": 1
          },
          {
            "date": "2019-03-21",
            "count": 1
          },
          {
            "date": "2019-04-15",
            "count": 1
          },
          {
            "date": "2019-05-05",
            "count": 1
          },
          {
            "date": "2019-05-07",
            "count": 1
          },
          {
            "date": "2019-05-17",
            "count": 1
          },
          {
            "date": "2019-07-05",
            "count": 1
          },
          {
            "date": "2019-08-21",
            "count": 1
          },
          {
            "date": "2019-08-23",
            "count": 1
          },
          {
            "date": "2019-08-29",
            "count": 1
          },
          {
            "date": "2019-09-11",
            "count": 1
          },
          {
            "date": "2019-10-29",
            "count": 1
          },
          {
            "date": "2019-11-24",
            "count": 1
          },
          {
            "date": "2019-12-12",
            "count": 1
          },
          {
            "date": "2019-12-15",
            "count": 1
          },
          {
            "date": "2019-12-16",
            "count": 1
          },
          {
            "date": "2019-12-20",
            "count": 1
          },
          {
            "date": "2020-01-06",
            "count": 1
          },
          {
            "date": "2020-01-07",
            "count": 1
          },
          {
            "date": "2020-01-12",
            "count": 1
          },
          {
            "date": "2020-01-16",
            "count": 1
          },
          {
            "date": "2020-03-17",
            "count": 1
          },
          {
            "date": "2020-05-10",
            "count": 1
          },
          {
            "date": "2020-05-26",
            "count": 1
          },
          {
            "date": "2020-06-03",
            "count": 1
          },
          {
            "date": "2020-06-19",
            "count": 1
          },
          {
            "date": "2020-06-25",
            "count": 1
          },
          {
            "date": "2020-07-03",
            "count": 1
          },
          {
            "date": "2020-07-28",
            "count": 1
          },
          {
            "date": "2020-08-02",
            "count": 1
          },
          {
            "date": "2020-08-13",
            "count": 1
          },
          {
            "date": "2020-08-19",
            "count": 1
          },
          {
            "date": "2020-09-28",
            "count": 2
          },
          {
            "date": "2020-10-01",
            "count": 1
          },
          {
            "date": "2020-10-07",
            "count": 1
          },
          {
            "date": "2020-10-23",
            "count": 1
          },
          {
            "date": "2020-12-16",
            "count": 1
          },
          {
            "date": "2020-12-19",
            "count": 1
          },
          {
            "date": "2020-12-23",
            "count": 1
          },
          {
            "date": "2020-12-26",
            "count": 1
          },
          {
            "date": "2021-01-07",
            "count": 1
          },
          {
            "date": "2021-01-13",
            "count": 1
          },
          {
            "date": "2021-02-05",
            "count": 1
          },
          {
            "date": "2021-02-23",
            "count": 1
          },
          {
            "date": "2021-03-07",
            "count": 1
          },
          {
            "date": "2021-03-15",
            "count": 1
          },
          {
            "date": "2021-03-21",
            "count": 2
          },
          {
            "date": "2021-03-30",
            "count": 1
          },
          {
            "date": "2021-04-13",
            "count": 1
          },
          {
            "date": "2021-04-17",
            "count": 1
          },
          {
            "date": "2021-04-25",
            "count": 1
          },
          {
            "date": "2021-05-08",
            "count": 1
          },
          {
            "date": "2021-05-26",
            "count": 1
          },
          {
            "date": "2021-06-24",
            "count": 1
          },
          {
            "date": "2021-07-20",
            "count": 1
          },
          {
            "date": "2021-08-15",
            "count": 1
          },
          {
            "date": "2021-08-17",
            "count": 1
          },
          {
            "date": "2021-09-19",
            "count": 1
          },
          {
            "date": "2021-09-25",
            "count": 1
          },
          {
            "date": "2021-10-03",
            "count": 1
          },
          {
            "date": "2021-10-21",
            "count": 1
          },
          {
            "date": "2021-11-08",
            "count": 1
          },
          {
            "date": "2021-12-19",
            "count": 1
          },
          {
            "date": "2021-12-22",
            "count": 1
          },
          {
            "date": "2021-12-30",
            "count": 1
          },
          {
            "date": "2022-01-21",
            "count": 1
          },
          {
            "date": "2022-02-01",
            "count": 1
          },
          {
            "date": "2022-03-13",
            "count": 1
          },
          {
            "date": "2022-03-15",
            "count": 1
          },
          {
            "date": "2022-04-01",
            "count": 1
          },
          {
            "date": "2022-04-20",
            "count": 1
          },
          {
            "date": "2022-04-28",
            "count": 1
          },
          {
            "date": "2022-05-05",
            "count": 1
          },
          {
            "date": "2022-05-14",
            "count": 1
          },
          {
            "date": "2022-06-02",
            "count": 1
          },
          {
            "date": "2022-08-26",
            "count": 1
          },
          {
            "date": "2022-09-12",
            "count": 1
          },
          {
            "date": "2022-10-03",
            "count": 1
          },
          {
            "date": "2022-11-10",
            "count": 1
          },
          {
            "date": "2023-01-12",
            "count": 1
          },
          {
            "date": "2023-01-17",
            "count": 1
          },
          {
            "date": "2023-01-23",
            "count": 1
          },
          {
            "date": "2023-01-25",
            "count": 1
          },
          {
            "date": "2023-01-29",
            "count": 1
          },
          {
            "date": "2023-01-30",
            "count": 1
          },
          {
            "date": "2023-03-05",
            "count": 1
          },
          {
            "date": "2023-04-08",
            "count": 1
          },
          {
            "date": "2023-04-18",
            "count": 1
          },
          {
            "date": "2023-04-27",
            "count": 1
          },
          {
            "date": "2023-06-27",
            "count": 1
          },
          {
            "date": "2023-07-12",
            "count": 1
          },
          {
            "date": "2023-08-14",
            "count": 1
          },
          {
            "date": "2023-10-01",
            "count": 1
          },
          {
            "date": "2023-10-20",
            "count": 1
          },
          {
            "date": "2023-11-10",
            "count": 1
          },
          {
            "date": "2023-12-01",
            "count": 2
          },
          {
            "date": "2023-12-04",
            "count": 1
          },
          {
            "date": "2023-12-31",
            "count": 1
          },
          {
            "date": "2024-01-28",
            "count": 1
          },
          {
            "date": "2024-02-02",
            "count": 1
          },
          {
            "date": "2024-02-14",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-02-22",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 1
          },
          {
            "date": "2024-03-04",
            "count": 1
          },
          {
            "date": "2024-03-09",
            "count": 1
          },
          {
            "date": "2024-03-21",
            "count": 1
          },
          {
            "date": "2024-05-04",
            "count": 1
          },
          {
            "date": "2024-06-08",
            "count": 1
          },
          {
            "date": "2024-07-09",
            "count": 1
          },
          {
            "date": "2024-09-02",
            "count": 1
          },
          {
            "date": "2024-09-25",
            "count": 1
          },
          {
            "date": "2024-10-03",
            "count": 1
          },
          {
            "date": "2024-10-07",
            "count": 1
          },
          {
            "date": "2024-10-08",
            "count": 1
          },
          {
            "date": "2024-10-11",
            "count": 1
          },
          {
            "date": "2024-10-13",
            "count": 1
          },
          {
            "date": "2024-10-16",
            "count": 1
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-10-24",
            "count": 1
          },
          {
            "date": "2024-10-30",
            "count": 1
          },
          {
            "date": "2024-11-06",
            "count": 1
          },
          {
            "date": "2024-11-07",
            "count": 2
          },
          {
            "date": "2024-12-02",
            "count": 1
          },
          {
            "date": "2024-12-04",
            "count": 1
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2024-12-18",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-01-17",
            "count": 1
          },
          {
            "date": "2025-01-24",
            "count": 1
          },
          {
            "date": "2025-01-29",
            "count": 1
          },
          {
            "date": "2025-02-14",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-02-21",
            "count": 1
          },
          {
            "date": "2025-02-25",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 1
          },
          {
            "date": "2025-05-29",
            "count": 1
          },
          {
            "date": "2025-06-02",
            "count": 1
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-08-13",
            "count": 1
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 1
          },
          {
            "date": "2025-09-01",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 1
          },
          {
            "date": "2025-10-16",
            "count": 2
          },
          {
            "date": "2025-10-26",
            "count": 1
          },
          {
            "date": "2025-10-31",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 2
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-01-29",
            "count": 2
          },
          {
            "date": "2026-02-19",
            "count": 1
          },
          {
            "date": "2026-03-05",
            "count": 2
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 346,
        "total_forks": 371
      },
      "star_history": {
        "days": [
          {
            "date": "2009-08-24",
            "count": 124
          },
          {
            "date": "2009-08-30",
            "count": 1
          },
          {
            "date": "2009-09-01",
            "count": 1
          },
          {
            "date": "2009-09-23",
            "count": 1
          },
          {
            "date": "2009-10-02",
            "count": 1
          },
          {
            "date": "2009-10-06",
            "count": 1
          },
          {
            "date": "2009-10-10",
            "count": 1
          },
          {
            "date": "2009-10-17",
            "count": 1
          },
          {
            "date": "2009-11-15",
            "count": 1
          },
          {
            "date": "2009-11-16",
            "count": 1
          },
          {
            "date": "2009-11-21",
            "count": 1
          },
          {
            "date": "2009-11-24",
            "count": 1
          },
          {
            "date": "2009-12-02",
            "count": 1
          },
          {
            "date": "2009-12-05",
            "count": 1
          },
          {
            "date": "2009-12-10",
            "count": 1
          },
          {
            "date": "2009-12-20",
            "count": 1
          },
          {
            "date": "2009-12-22",
            "count": 2
          },
          {
            "date": "2009-12-23",
            "count": 1
          },
          {
            "date": "2010-01-05",
            "count": 1
          },
          {
            "date": "2010-01-15",
            "count": 2
          },
          {
            "date": "2010-02-01",
            "count": 1
          },
          {
            "date": "2010-02-05",
            "count": 1
          },
          {
            "date": "2010-02-07",
            "count": 1
          },
          {
            "date": "2010-02-23",
            "count": 1
          },
          {
            "date": "2010-03-10",
            "count": 3
          },
          {
            "date": "2010-03-26",
            "count": 1
          },
          {
            "date": "2010-03-31",
            "count": 1
          },
          {
            "date": "2010-04-11",
            "count": 1
          },
          {
            "date": "2010-04-12",
            "count": 1
          },
          {
            "date": "2010-04-14",
            "count": 1
          },
          {
            "date": "2010-04-19",
            "count": 1
          },
          {
            "date": "2010-05-09",
            "count": 1
          },
          {
            "date": "2010-06-09",
            "count": 1
          },
          {
            "date": "2010-06-10",
            "count": 1
          },
          {
            "date": "2010-07-16",
            "count": 1
          },
          {
            "date": "2010-07-23",
            "count": 1
          },
          {
            "date": "2010-08-19",
            "count": 1
          },
          {
            "date": "2010-08-20",
            "count": 1
          },
          {
            "date": "2010-09-08",
            "count": 1
          },
          {
            "date": "2010-09-17",
            "count": 1
          },
          {
            "date": "2010-09-20",
            "count": 1
          },
          {
            "date": "2010-09-21",
            "count": 1
          },
          {
            "date": "2010-10-09",
            "count": 1
          },
          {
            "date": "2010-10-16",
            "count": 2
          },
          {
            "date": "2010-10-21",
            "count": 1
          },
          {
            "date": "2010-11-26",
            "count": 1
          },
          {
            "date": "2010-12-16",
            "count": 1
          },
          {
            "date": "2010-12-18",
            "count": 1
          },
          {
            "date": "2010-12-19",
            "count": 1
          },
          {
            "date": "2011-01-22",
            "count": 1
          },
          {
            "date": "2011-02-02",
            "count": 1
          },
          {
            "date": "2011-02-08",
            "count": 1
          },
          {
            "date": "2011-02-10",
            "count": 1
          },
          {
            "date": "2011-04-06",
            "count": 1
          },
          {
            "date": "2011-04-08",
            "count": 1
          },
          {
            "date": "2011-04-12",
            "count": 1
          },
          {
            "date": "2011-04-20",
            "count": 1
          },
          {
            "date": "2011-04-22",
            "count": 1
          },
          {
            "date": "2011-04-27",
            "count": 1
          },
          {
            "date": "2011-05-10",
            "count": 1
          },
          {
            "date": "2011-05-19",
            "count": 1
          },
          {
            "date": "2011-06-01",
            "count": 1
          },
          {
            "date": "2011-06-16",
            "count": 1
          },
          {
            "date": "2011-06-20",
            "count": 1
          },
          {
            "date": "2011-06-26",
            "count": 1
          },
          {
            "date": "2011-07-03",
            "count": 1
          },
          {
            "date": "2011-07-20",
            "count": 1
          },
          {
            "date": "2011-07-28",
            "count": 1
          },
          {
            "date": "2011-08-11",
            "count": 1
          },
          {
            "date": "2011-08-22",
            "count": 1
          },
          {
            "date": "2011-10-05",
            "count": 1
          },
          {
            "date": "2011-10-16",
            "count": 1
          },
          {
            "date": "2011-10-24",
            "count": 1
          },
          {
            "date": "2011-11-02",
            "count": 2
          },
          {
            "date": "2011-12-10",
            "count": 1
          },
          {
            "date": "2011-12-24",
            "count": 1
          },
          {
            "date": "2012-02-14",
            "count": 1
          },
          {
            "date": "2012-03-12",
            "count": 1
          },
          {
            "date": "2012-05-04",
            "count": 1
          },
          {
            "date": "2012-05-05",
            "count": 1
          },
          {
            "date": "2012-05-08",
            "count": 1
          },
          {
            "date": "2012-06-08",
            "count": 1
          },
          {
            "date": "2012-06-19",
            "count": 1
          },
          {
            "date": "2013-02-12",
            "count": 3
          },
          {
            "date": "2013-02-13",
            "count": 1
          },
          {
            "date": "2013-02-25",
            "count": 1
          },
          {
            "date": "2013-03-05",
            "count": 1
          },
          {
            "date": "2013-03-17",
            "count": 1
          },
          {
            "date": "2013-03-20",
            "count": 1
          },
          {
            "date": "2013-03-31",
            "count": 1
          },
          {
            "date": "2013-04-05",
            "count": 1
          },
          {
            "date": "2013-04-17",
            "count": 1
          },
          {
            "date": "2013-04-28",
            "count": 1
          },
          {
            "date": "2013-05-27",
            "count": 1
          },
          {
            "date": "2013-05-28",
            "count": 1
          },
          {
            "date": "2013-05-31",
            "count": 1
          },
          {
            "date": "2013-06-16",
            "count": 1
          },
          {
            "date": "2013-06-25",
            "count": 1
          },
          {
            "date": "2013-06-26",
            "count": 2
          },
          {
            "date": "2013-07-08",
            "count": 1
          },
          {
            "date": "2013-07-18",
            "count": 1
          },
          {
            "date": "2013-07-20",
            "count": 1
          },
          {
            "date": "2013-07-26",
            "count": 1
          },
          {
            "date": "2013-08-17",
            "count": 1
          },
          {
            "date": "2013-08-26",
            "count": 1
          },
          {
            "date": "2013-08-28",
            "count": 1
          },
          {
            "date": "2013-08-30",
            "count": 1
          },
          {
            "date": "2013-09-04",
            "count": 2
          },
          {
            "date": "2013-09-11",
            "count": 1
          },
          {
            "date": "2013-09-23",
            "count": 2
          },
          {
            "date": "2013-09-24",
            "count": 1
          },
          {
            "date": "2013-10-10",
            "count": 1
          },
          {
            "date": "2013-10-12",
            "count": 1
          },
          {
            "date": "2013-10-15",
            "count": 1
          },
          {
            "date": "2013-10-16",
            "count": 1
          },
          {
            "date": "2013-11-09",
            "count": 1
          },
          {
            "date": "2013-11-11",
            "count": 1
          },
          {
            "date": "2013-11-16",
            "count": 1
          },
          {
            "date": "2013-11-23",
            "count": 1
          },
          {
            "date": "2013-12-02",
            "count": 1
          },
          {
            "date": "2013-12-03",
            "count": 1
          },
          {
            "date": "2013-12-19",
            "count": 1
          },
          {
            "date": "2014-01-06",
            "count": 1
          },
          {
            "date": "2014-01-09",
            "count": 1
          },
          {
            "date": "2014-01-14",
            "count": 1
          },
          {
            "date": "2014-01-17",
            "count": 1
          },
          {
            "date": "2014-01-22",
            "count": 1
          },
          {
            "date": "2014-01-30",
            "count": 1
          },
          {
            "date": "2014-02-12",
            "count": 1
          },
          {
            "date": "2014-02-28",
            "count": 2
          },
          {
            "date": "2014-03-29",
            "count": 1
          },
          {
            "date": "2014-05-05",
            "count": 2
          },
          {
            "date": "2014-05-16",
            "count": 1
          },
          {
            "date": "2014-05-19",
            "count": 1
          },
          {
            "date": "2014-05-28",
            "count": 1
          },
          {
            "date": "2014-05-31",
            "count": 1
          },
          {
            "date": "2014-06-03",
            "count": 1
          },
          {
            "date": "2014-06-10",
            "count": 1
          },
          {
            "date": "2014-06-20",
            "count": 1
          },
          {
            "date": "2014-07-02",
            "count": 1
          },
          {
            "date": "2014-07-16",
            "count": 1
          },
          {
            "date": "2014-07-23",
            "count": 1
          },
          {
            "date": "2014-08-01",
            "count": 1
          },
          {
            "date": "2014-08-03",
            "count": 1
          },
          {
            "date": "2014-08-06",
            "count": 2
          },
          {
            "date": "2014-08-15",
            "count": 1
          },
          {
            "date": "2014-08-27",
            "count": 1
          },
          {
            "date": "2014-09-01",
            "count": 1
          },
          {
            "date": "2014-09-02",
            "count": 1
          },
          {
            "date": "2014-09-03",
            "count": 1
          },
          {
            "date": "2014-09-05",
            "count": 1
          },
          {
            "date": "2014-09-11",
            "count": 1
          },
          {
            "date": "2014-09-24",
            "count": 1
          },
          {
            "date": "2014-10-09",
            "count": 1
          },
          {
            "date": "2014-10-12",
            "count": 1
          },
          {
            "date": "2014-10-14",
            "count": 1
          },
          {
            "date": "2014-11-11",
            "count": 1
          },
          {
            "date": "2014-11-16",
            "count": 1
          },
          {
            "date": "2014-12-02",
            "count": 1
          },
          {
            "date": "2014-12-17",
            "count": 1
          },
          {
            "date": "2014-12-24",
            "count": 1
          },
          {
            "date": "2014-12-30",
            "count": 1
          },
          {
            "date": "2015-01-05",
            "count": 1
          },
          {
            "date": "2015-01-14",
            "count": 1
          },
          {
            "date": "2015-01-21",
            "count": 1
          },
          {
            "date": "2015-01-29",
            "count": 2
          },
          {
            "date": "2015-01-30",
            "count": 1
          },
          {
            "date": "2015-02-01",
            "count": 1
          },
          {
            "date": "2015-02-12",
            "count": 1
          },
          {
            "date": "2015-02-13",
            "count": 1
          },
          {
            "date": "2015-02-20",
            "count": 1
          },
          {
            "date": "2015-03-05",
            "count": 1
          },
          {
            "date": "2015-03-06",
            "count": 1
          },
          {
            "date": "2015-03-26",
            "count": 1
          },
          {
            "date": "2015-04-01",
            "count": 1
          },
          {
            "date": "2015-04-06",
            "count": 1
          },
          {
            "date": "2015-04-13",
            "count": 1
          },
          {
            "date": "2015-04-21",
            "count": 1
          },
          {
            "date": "2015-05-05",
            "count": 1
          },
          {
            "date": "2015-05-11",
            "count": 1
          },
          {
            "date": "2015-05-14",
            "count": 1
          },
          {
            "date": "2015-06-06",
            "count": 1
          },
          {
            "date": "2015-06-12",
            "count": 1
          },
          {
            "date": "2015-06-13",
            "count": 2
          },
          {
            "date": "2015-06-15",
            "count": 3
          },
          {
            "date": "2015-06-18",
            "count": 1
          },
          {
            "date": "2015-06-19",
            "count": 1
          },
          {
            "date": "2015-07-02",
            "count": 1
          },
          {
            "date": "2015-07-15",
            "count": 1
          },
          {
            "date": "2015-07-16",
            "count": 1
          },
          {
            "date": "2015-07-22",
            "count": 1
          },
          {
            "date": "2015-07-31",
            "count": 1
          },
          {
            "date": "2015-08-05",
            "count": 1
          },
          {
            "date": "2015-08-07",
            "count": 1
          },
          {
            "date": "2015-08-10",
            "count": 1
          },
          {
            "date": "2015-09-06",
            "count": 3
          },
          {
            "date": "2015-09-20",
            "count": 1
          },
          {
            "date": "2015-10-10",
            "count": 1
          },
          {
            "date": "2015-10-14",
            "count": 2
          },
          {
            "date": "2015-11-04",
            "count": 1
          },
          {
            "date": "2015-11-18",
            "count": 1
          },
          {
            "date": "2015-12-07",
            "count": 1
          },
          {
            "date": "2015-12-09",
            "count": 1
          },
          {
            "date": "2015-12-16",
            "count": 1
          },
          {
            "date": "2015-12-24",
            "count": 1
          },
          {
            "date": "2015-12-29",
            "count": 1
          },
          {
            "date": "2016-01-02",
            "count": 1
          },
          {
            "date": "2016-01-07",
            "count": 1
          },
          {
            "date": "2016-01-15",
            "count": 1
          },
          {
            "date": "2016-01-18",
            "count": 1
          },
          {
            "date": "2016-01-23",
            "count": 1
          },
          {
            "date": "2016-01-26",
            "count": 1
          },
          {
            "date": "2016-02-04",
            "count": 1
          },
          {
            "date": "2016-02-18",
            "count": 1
          },
          {
            "date": "2016-02-29",
            "count": 1
          },
          {
            "date": "2016-04-06",
            "count": 1
          },
          {
            "date": "2016-04-08",
            "count": 1
          },
          {
            "date": "2016-04-12",
            "count": 1
          },
          {
            "date": "2016-04-19",
            "count": 1
          },
          {
            "date": "2016-04-20",
            "count": 1
          },
          {
            "date": "2016-04-23",
            "count": 1
          },
          {
            "date": "2016-04-30",
            "count": 1
          },
          {
            "date": "2016-06-12",
            "count": 1
          },
          {
            "date": "2016-06-13",
            "count": 1
          },
          {
            "date": "2016-06-29",
            "count": 1
          },
          {
            "date": "2016-06-30",
            "count": 1
          },
          {
            "date": "2016-07-02",
            "count": 1
          },
          {
            "date": "2016-07-05",
            "count": 2
          },
          {
            "date": "2016-07-06",
            "count": 1
          },
          {
            "date": "2016-07-29",
            "count": 1
          },
          {
            "date": "2016-08-12",
            "count": 1
          },
          {
            "date": "2016-08-22",
            "count": 1
          },
          {
            "date": "2016-09-06",
            "count": 1
          },
          {
            "date": "2016-09-10",
            "count": 1
          },
          {
            "date": "2016-09-15",
            "count": 1
          },
          {
            "date": "2016-10-08",
            "count": 1
          },
          {
            "date": "2016-10-09",
            "count": 1
          },
          {
            "date": "2016-11-03",
            "count": 1
          },
          {
            "date": "2016-11-22",
            "count": 1
          },
          {
            "date": "2016-12-08",
            "count": 2
          },
          {
            "date": "2016-12-18",
            "count": 1
          },
          {
            "date": "2016-12-26",
            "count": 2
          },
          {
            "date": "2016-12-28",
            "count": 2
          },
          {
            "date": "2016-12-30",
            "count": 1
          },
          {
            "date": "2017-01-01",
            "count": 2
          },
          {
            "date": "2017-01-04",
            "count": 1
          },
          {
            "date": "2017-01-06",
            "count": 1
          },
          {
            "date": "2017-01-07",
            "count": 1
          },
          {
            "date": "2017-01-10",
            "count": 1
          },
          {
            "date": "2017-01-11",
            "count": 3
          },
          {
            "date": "2017-01-19",
            "count": 1
          },
          {
            "date": "2017-01-20",
            "count": 1
          },
          {
            "date": "2017-01-26",
            "count": 1
          },
          {
            "date": "2017-01-28",
            "count": 1
          },
          {
            "date": "2017-01-31",
            "count": 1
          },
          {
            "date": "2017-02-03",
            "count": 1
          },
          {
            "date": "2017-02-04",
            "count": 1
          },
          {
            "date": "2017-02-05",
            "count": 1
          },
          {
            "date": "2017-02-21",
            "count": 1
          },
          {
            "date": "2017-03-10",
            "count": 1
          },
          {
            "date": "2017-03-15",
            "count": 1
          },
          {
            "date": "2017-03-18",
            "count": 1
          },
          {
            "date": "2017-03-22",
            "count": 1
          },
          {
            "date": "2017-03-27",
            "count": 2
          },
          {
            "date": "2017-04-05",
            "count": 1
          },
          {
            "date": "2017-04-10",
            "count": 1
          },
          {
            "date": "2017-04-12",
            "count": 1
          },
          {
            "date": "2017-05-02",
            "count": 1
          },
          {
            "date": "2017-05-03",
            "count": 1
          },
          {
            "date": "2017-05-12",
            "count": 1
          },
          {
            "date": "2017-05-23",
            "count": 1
          },
          {
            "date": "2017-06-03",
            "count": 1
          },
          {
            "date": "2017-06-20",
            "count": 1
          },
          {
            "date": "2017-06-23",
            "count": 1
          },
          {
            "date": "2017-06-25",
            "count": 1
          },
          {
            "date": "2017-06-26",
            "count": 1
          },
          {
            "date": "2017-06-27",
            "count": 2
          },
          {
            "date": "2017-06-28",
            "count": 1
          },
          {
            "date": "2017-06-29",
            "count": 1
          },
          {
            "date": "2017-07-05",
            "count": 1
          },
          {
            "date": "2017-07-10",
            "count": 2
          },
          {
            "date": "2017-07-14",
            "count": 2
          },
          {
            "date": "2017-07-18",
            "count": 1
          },
          {
            "date": "2017-07-21",
            "count": 1
          },
          {
            "date": "2017-07-27",
            "count": 1
          },
          {
            "date": "2017-07-28",
            "count": 1
          },
          {
            "date": "2017-08-17",
            "count": 1
          },
          {
            "date": "2017-08-21",
            "count": 1
          },
          {
            "date": "2017-08-27",
            "count": 1
          },
          {
            "date": "2017-08-29",
            "count": 2
          },
          {
            "date": "2017-09-01",
            "count": 1
          },
          {
            "date": "2017-09-22",
            "count": 1
          },
          {
            "date": "2017-10-10",
            "count": 1
          },
          {
            "date": "2017-11-08",
            "count": 1
          },
          {
            "date": "2017-11-11",
            "count": 1
          },
          {
            "date": "2017-11-23",
            "count": 2
          },
          {
            "date": "2017-12-08",
            "count": 1
          },
          {
            "date": "2017-12-18",
            "count": 1
          },
          {
            "date": "2017-12-19",
            "count": 1
          },
          {
            "date": "2018-01-01",
            "count": 1
          },
          {
            "date": "2018-01-27",
            "count": 1
          },
          {
            "date": "2018-01-30",
            "count": 1
          },
          {
            "date": "2018-02-23",
            "count": 1
          },
          {
            "date": "2018-02-26",
            "count": 1
          },
          {
            "date": "2018-02-27",
            "count": 1
          },
          {
            "date": "2018-03-02",
            "count": 1
          },
          {
            "date": "2018-03-12",
            "count": 1
          },
          {
            "date": "2018-03-22",
            "count": 1
          },
          {
            "date": "2018-03-24",
            "count": 1
          },
          {
            "date": "2018-04-04",
            "count": 1
          },
          {
            "date": "2018-04-09",
            "count": 1
          },
          {
            "date": "2018-04-12",
            "count": 1
          },
          {
            "date": "2018-04-20",
            "count": 1
          },
          {
            "date": "2018-04-24",
            "count": 1
          },
          {
            "date": "2018-04-25",
            "count": 2
          },
          {
            "date": "2018-05-06",
            "count": 1
          },
          {
            "date": "2018-05-08",
            "count": 1
          },
          {
            "date": "2018-05-15",
            "count": 1
          },
          {
            "date": "2018-05-31",
            "count": 1
          },
          {
            "date": "2018-06-01",
            "count": 1
          },
          {
            "date": "2018-06-08",
            "count": 1
          },
          {
            "date": "2018-07-02",
            "count": 1
          },
          {
            "date": "2018-07-14",
            "count": 1
          },
          {
            "date": "2018-07-24",
            "count": 1
          },
          {
            "date": "2018-08-06",
            "count": 1
          },
          {
            "date": "2018-08-10",
            "count": 2
          },
          {
            "date": "2018-08-27",
            "count": 1
          },
          {
            "date": "2018-09-02",
            "count": 1
          },
          {
            "date": "2018-10-22",
            "count": 1
          },
          {
            "date": "2018-11-01",
            "count": 1
          },
          {
            "date": "2018-11-17",
            "count": 1
          },
          {
            "date": "2018-11-27",
            "count": 1
          },
          {
            "date": "2018-12-13",
            "count": 1
          },
          {
            "date": "2018-12-26",
            "count": 1
          },
          {
            "date": "2019-01-03",
            "count": 1
          },
          {
            "date": "2019-01-09",
            "count": 1
          },
          {
            "date": "2019-01-11",
            "count": 1
          },
          {
            "date": "2019-02-13",
            "count": 1
          },
          {
            "date": "2019-02-15",
            "count": 1
          },
          {
            "date": "2019-02-17",
            "count": 1
          },
          {
            "date": "2019-02-27",
            "count": 1
          },
          {
            "date": "2019-02-28",
            "count": 1
          },
          {
            "date": "2019-03-18",
            "count": 1
          },
          {
            "date": "2019-03-20",
            "count": 1
          },
          {
            "date": "2019-05-02",
            "count": 1
          },
          {
            "date": "2019-05-11",
            "count": 1
          },
          {
            "date": "2019-05-17",
            "count": 1
          },
          {
            "date": "2019-06-04",
            "count": 1
          },
          {
            "date": "2019-06-05",
            "count": 1
          },
          {
            "date": "2019-07-16",
            "count": 1
          },
          {
            "date": "2019-07-21",
            "count": 1
          },
          {
            "date": "2019-07-26",
            "count": 2
          },
          {
            "date": "2019-08-01",
            "count": 1
          },
          {
            "date": "2019-08-06",
            "count": 1
          },
          {
            "date": "2019-08-27",
            "count": 1
          },
          {
            "date": "2019-10-02",
            "count": 1
          },
          {
            "date": "2019-10-05",
            "count": 1
          },
          {
            "date": "2019-11-11",
            "count": 1
          },
          {
            "date": "2019-11-23",
            "count": 1
          },
          {
            "date": "2019-11-24",
            "count": 1
          },
          {
            "date": "2019-12-11",
            "count": 1
          },
          {
            "date": "2019-12-13",
            "count": 1
          },
          {
            "date": "2019-12-17",
            "count": 1
          },
          {
            "date": "2019-12-18",
            "count": 1
          },
          {
            "date": "2019-12-21",
            "count": 1
          },
          {
            "date": "2020-01-06",
            "count": 1
          },
          {
            "date": "2020-01-15",
            "count": 1
          },
          {
            "date": "2020-01-16",
            "count": 2
          },
          {
            "date": "2020-01-21",
            "count": 1
          },
          {
            "date": "2020-01-23",
            "count": 1
          },
          {
            "date": "2020-03-19",
            "count": 1
          },
          {
            "date": "2020-03-27",
            "count": 1
          },
          {
            "date": "2020-04-02",
            "count": 1
          },
          {
            "date": "2020-04-07",
            "count": 1
          },
          {
            "date": "2020-05-07",
            "count": 1
          },
          {
            "date": "2020-05-14",
            "count": 1
          },
          {
            "date": "2020-05-19",
            "count": 1
          },
          {
            "date": "2020-05-27",
            "count": 1
          },
          {
            "date": "2020-06-24",
            "count": 1
          },
          {
            "date": "2020-07-03",
            "count": 3
          },
          {
            "date": "2020-07-05",
            "count": 1
          },
          {
            "date": "2020-07-07",
            "count": 1
          },
          {
            "date": "2020-07-22",
            "count": 1
          },
          {
            "date": "2020-07-23",
            "count": 1
          },
          {
            "date": "2020-07-28",
            "count": 3
          },
          {
            "date": "2020-08-14",
            "count": 1
          },
          {
            "date": "2020-08-27",
            "count": 1
          },
          {
            "date": "2020-09-22",
            "count": 1
          },
          {
            "date": "2020-11-01",
            "count": 1
          },
          {
            "date": "2020-12-01",
            "count": 1
          },
          {
            "date": "2020-12-03",
            "count": 1
          },
          {
            "date": "2020-12-17",
            "count": 1
          },
          {
            "date": "2020-12-26",
            "count": 1
          },
          {
            "date": "2021-01-06",
            "count": 1
          },
          {
            "date": "2021-01-09",
            "count": 1
          },
          {
            "date": "2021-01-16",
            "count": 1
          },
          {
            "date": "2021-01-25",
            "count": 1
          },
          {
            "date": "2021-01-27",
            "count": 1
          },
          {
            "date": "2021-01-28",
            "count": 1
          },
          {
            "date": "2021-02-08",
            "count": 1
          },
          {
            "date": "2021-02-18",
            "count": 1
          },
          {
            "date": "2021-03-06",
            "count": 1
          },
          {
            "date": "2021-03-11",
            "count": 1
          },
          {
            "date": "2021-03-17",
            "count": 1
          },
          {
            "date": "2021-04-05",
            "count": 2
          },
          {
            "date": "2021-04-12",
            "count": 1
          },
          {
            "date": "2021-04-17",
            "count": 1
          },
          {
            "date": "2021-04-26",
            "count": 1
          },
          {
            "date": "2021-04-29",
            "count": 1
          },
          {
            "date": "2021-05-28",
            "count": 1
          },
          {
            "date": "2021-06-01",
            "count": 1
          },
          {
            "date": "2021-06-03",
            "count": 1
          },
          {
            "date": "2021-06-14",
            "count": 1
          },
          {
            "date": "2021-07-09",
            "count": 1
          },
          {
            "date": "2021-07-12",
            "count": 1
          },
          {
            "date": "2021-07-13",
            "count": 2
          },
          {
            "date": "2021-07-21",
            "count": 1
          },
          {
            "date": "2021-07-22",
            "count": 1
          },
          {
            "date": "2021-08-03",
            "count": 1
          },
          {
            "date": "2021-08-05",
            "count": 1
          },
          {
            "date": "2021-09-01",
            "count": 2
          },
          {
            "date": "2021-09-02",
            "count": 1
          },
          {
            "date": "2021-09-27",
            "count": 1
          },
          {
            "date": "2021-10-19",
            "count": 1
          },
          {
            "date": "2021-11-01",
            "count": 1
          },
          {
            "date": "2021-11-24",
            "count": 1
          },
          {
            "date": "2021-11-29",
            "count": 1
          },
          {
            "date": "2021-12-11",
            "count": 1
          },
          {
            "date": "2021-12-19",
            "count": 1
          },
          {
            "date": "2022-01-17",
            "count": 1
          },
          {
            "date": "2022-01-29",
            "count": 1
          },
          {
            "date": "2022-04-03",
            "count": 1
          },
          {
            "date": "2022-04-20",
            "count": 1
          },
          {
            "date": "2022-07-04",
            "count": 1
          },
          {
            "date": "2022-07-23",
            "count": 1
          },
          {
            "date": "2022-08-17",
            "count": 1
          },
          {
            "date": "2022-08-29",
            "count": 1
          },
          {
            "date": "2022-08-31",
            "count": 1
          },
          {
            "date": "2022-09-12",
            "count": 1
          },
          {
            "date": "2022-09-16",
            "count": 1
          },
          {
            "date": "2022-09-29",
            "count": 1
          },
          {
            "date": "2022-10-06",
            "count": 1
          },
          {
            "date": "2022-10-19",
            "count": 1
          },
          {
            "date": "2022-10-21",
            "count": 1
          },
          {
            "date": "2022-11-20",
            "count": 1
          },
          {
            "date": "2022-11-28",
            "count": 1
          },
          {
            "date": "2022-12-12",
            "count": 1
          },
          {
            "date": "2023-01-23",
            "count": 2
          },
          {
            "date": "2023-01-31",
            "count": 1
          },
          {
            "date": "2023-02-06",
            "count": 1
          },
          {
            "date": "2023-03-04",
            "count": 1
          },
          {
            "date": "2023-03-22",
            "count": 1
          },
          {
            "date": "2023-03-29",
            "count": 1
          },
          {
            "date": "2023-04-27",
            "count": 1
          },
          {
            "date": "2023-04-30",
            "count": 1
          },
          {
            "date": "2023-05-02",
            "count": 1
          },
          {
            "date": "2023-06-23",
            "count": 1
          },
          {
            "date": "2023-06-24",
            "count": 1
          },
          {
            "date": "2023-07-03",
            "count": 1
          },
          {
            "date": "2023-07-20",
            "count": 2
          },
          {
            "date": "2023-07-21",
            "count": 1
          },
          {
            "date": "2023-07-26",
            "count": 1
          },
          {
            "date": "2023-08-11",
            "count": 2
          },
          {
            "date": "2023-09-28",
            "count": 1
          },
          {
            "date": "2023-10-06",
            "count": 1
          },
          {
            "date": "2023-10-11",
            "count": 2
          },
          {
            "date": "2023-12-01",
            "count": 1
          },
          {
            "date": "2023-12-05",
            "count": 1
          },
          {
            "date": "2024-01-16",
            "count": 1
          },
          {
            "date": "2024-02-01",
            "count": 1
          },
          {
            "date": "2024-02-10",
            "count": 1
          },
          {
            "date": "2024-02-12",
            "count": 2
          },
          {
            "date": "2024-03-04",
            "count": 1
          },
          {
            "date": "2024-03-25",
            "count": 1
          },
          {
            "date": "2024-03-31",
            "count": 1
          },
          {
            "date": "2024-04-16",
            "count": 1
          },
          {
            "date": "2024-04-28",
            "count": 1
          },
          {
            "date": "2024-04-29",
            "count": 1
          },
          {
            "date": "2024-05-05",
            "count": 1
          },
          {
            "date": "2024-05-12",
            "count": 1
          },
          {
            "date": "2024-06-11",
            "count": 1
          },
          {
            "date": "2024-06-18",
            "count": 1
          },
          {
            "date": "2024-08-04",
            "count": 1
          },
          {
            "date": "2024-09-09",
            "count": 1
          },
          {
            "date": "2024-09-16",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 1
          },
          {
            "date": "2024-10-02",
            "count": 1
          },
          {
            "date": "2024-10-07",
            "count": 1
          },
          {
            "date": "2024-10-11",
            "count": 1
          },
          {
            "date": "2024-10-17",
            "count": 1
          },
          {
            "date": "2024-10-18",
            "count": 1
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-10-27",
            "count": 2
          },
          {
            "date": "2024-10-28",
            "count": 1
          },
          {
            "date": "2024-11-03",
            "count": 2
          },
          {
            "date": "2024-11-05",
            "count": 1
          },
          {
            "date": "2024-11-06",
            "count": 4
          },
          {
            "date": "2024-11-07",
            "count": 9
          },
          {
            "date": "2024-11-08",
            "count": 1
          },
          {
            "date": "2024-11-09",
            "count": 1
          },
          {
            "date": "2024-11-10",
            "count": 1
          },
          {
            "date": "2024-11-13",
            "count": 1
          },
          {
            "date": "2024-11-14",
            "count": 2
          },
          {
            "date": "2024-11-19",
            "count": 1
          },
          {
            "date": "2024-12-18",
            "count": 2
          },
          {
            "date": "2024-12-20",
            "count": 1
          },
          {
            "date": "2024-12-21",
            "count": 1
          },
          {
            "date": "2024-12-26",
            "count": 1
          },
          {
            "date": "2024-12-27",
            "count": 1
          },
          {
            "date": "2024-12-31",
            "count": 1
          },
          {
            "date": "2025-01-13",
            "count": 1
          },
          {
            "date": "2025-01-14",
            "count": 1
          },
          {
            "date": "2025-01-18",
            "count": 1
          },
          {
            "date": "2025-01-22",
            "count": 1
          },
          {
            "date": "2025-01-23",
            "count": 1
          },
          {
            "date": "2025-02-02",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 1
          },
          {
            "date": "2025-03-26",
            "count": 2
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2025-04-02",
            "count": 1
          },
          {
            "date": "2025-04-04",
            "count": 1
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2025-05-22",
            "count": 1
          },
          {
            "date": "2025-06-17",
            "count": 1
          },
          {
            "date": "2025-06-29",
            "count": 1
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-07-27",
            "count": 1
          },
          {
            "date": "2025-08-13",
            "count": 2
          },
          {
            "date": "2025-08-18",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 1
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-17",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-29",
            "count": 2
          },
          {
            "date": "2025-11-01",
            "count": 1
          },
          {
            "date": "2025-11-03",
            "count": 1
          },
          {
            "date": "2025-11-26",
            "count": 1
          },
          {
            "date": "2025-12-14",
            "count": 1
          },
          {
            "date": "2025-12-25",
            "count": 1
          },
          {
            "date": "2026-01-29",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 1
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "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-02",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-23",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 11
          },
          {
            "date": "2026-07-15",
            "count": 8
          }
        ],
        "complete": true,
        "collected": 780,
        "total_stars": 780
      },
      "open_issues_and_prs": 9
    },
    "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": 99096,
      "source_files_sampled": 70,
      "oversized_source_files": 2,
      "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": 13,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "net-http",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "uri",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "benchmark-ips",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "oj",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rapidjson",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "benchmark-ips",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "net-http",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "oj",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rapidjson",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "uri",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "bigdecimal",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "ostruct",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "power_assert",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rake",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rake-compiler",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "test-unit",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "test-unit-ruby-core",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 13,
        "direct_count": 5,
        "indirect_count": 8
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 526,
        "open_issues": 7,
        "closed_ratio": 0.982,
        "closed_issues": 391,
        "closed_unmerged_prs": 122
      },
      "bus_factor": 2,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "byroot",
          "commits": 596,
          "avatar_url": "https://avatars.githubusercontent.com/u/44640?v=4"
        },
        {
          "type": "User",
          "login": "flori",
          "commits": 534,
          "avatar_url": "https://avatars.githubusercontent.com/u/15918?v=4"
        },
        {
          "type": "User",
          "login": "hsbt",
          "commits": 258,
          "avatar_url": "https://avatars.githubusercontent.com/u/12301?v=4"
        },
        {
          "type": "User",
          "login": "nobu",
          "commits": 91,
          "avatar_url": "https://avatars.githubusercontent.com/u/16700?v=4"
        },
        {
          "type": "User",
          "login": "etiennebarrie",
          "commits": 45,
          "avatar_url": "https://avatars.githubusercontent.com/u/3535?v=4"
        },
        {
          "type": "User",
          "login": "headius",
          "commits": 42,
          "avatar_url": "https://avatars.githubusercontent.com/u/10135?v=4"
        },
        {
          "type": "User",
          "login": "samyron",
          "commits": 34,
          "avatar_url": "https://avatars.githubusercontent.com/u/381509?v=4"
        },
        {
          "type": "User",
          "login": "mame",
          "commits": 27,
          "avatar_url": "https://avatars.githubusercontent.com/u/21557?v=4"
        },
        {
          "type": "User",
          "login": "eregon",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/168854?v=4"
        },
        {
          "type": "User",
          "login": "mrkn",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/3959?v=4"
        }
      ],
      "contributors_sampled": 98,
      "top_contributor_share": 0.31
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "sync-ruby.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": 9,
            "reason": "19 out of 21 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 4,
            "reason": "Found 13/28 approved changesets -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 74 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fd61def38b9bb859fee7eec8e7d3143600e5b347",
        "ran_at": "2026-07-22T00:26:55Z",
        "aggregate_score": 5.4,
        "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-21T03:03:48Z",
      "oldest_open_prs": [
        {
          "number": 848,
          "created_at": "2025-08-29T11:59:42Z",
          "last_comment_at": "2025-08-29T12:03:33Z",
          "last_comment_author": "byroot"
        },
        {
          "number": 1034,
          "created_at": "2026-06-21T02:17:06Z",
          "last_comment_at": "2026-07-13T21:43:53Z",
          "last_comment_author": "headius"
        }
      ],
      "last_merged_pr_at": "2026-07-13T07:26:01Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 138,
          "created_at": "2012-05-31T14:15:32Z",
          "last_comment_at": "2024-10-18T13:30:31Z",
          "last_comment_author": "headius"
        },
        {
          "number": 252,
          "created_at": "2015-07-14T13:11:56Z",
          "last_comment_at": "2015-08-12T13:43:33Z",
          "last_comment_author": "sproot"
        },
        {
          "number": 707,
          "created_at": "2024-11-20T22:48:16Z",
          "last_comment_at": "2024-12-03T20:34:50Z",
          "last_comment_author": "headius"
        },
        {
          "number": 817,
          "created_at": "2025-06-20T17:13:40Z",
          "last_comment_at": "2025-06-23T16:50:19Z",
          "last_comment_author": "raelik"
        },
        {
          "number": 954,
          "created_at": "2026-03-18T04:14:06Z",
          "last_comment_at": "2026-03-18T22:12:51Z",
          "last_comment_author": "byroot"
        },
        {
          "number": 1038,
          "created_at": "2026-06-24T08:51:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1041,
          "created_at": "2026-06-25T06:47:30Z",
          "last_comment_at": "2026-06-27T15:50:56Z",
          "last_comment_author": "byroot"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ruby/json",
    "host": "github.com",
    "name": "json",
    "owner": "ruby"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 75,
      "inputs": {
        "security": 54,
        "vitality": 96,
        "community": 72,
        "governance": 80,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "commits_last_year": 362,
              "human_commit_share": 0.98,
              "days_since_last_push": 6,
              "active_weeks_last_year": 43
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "43/52 weeks with commits",
                "points": 29.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 43
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "362 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 362
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v2.21.0",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 12.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~12.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 12.8
                    }
                  }
                ],
                "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": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 72,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "forks": 371,
              "stars": 780,
              "watchers": 55,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "780 stars",
                "points": 46.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 780
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "371 forks",
                "points": 21.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 371
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "55 watchers",
                "points": 9.6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 55
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "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": [
                "json"
              ],
              "dependents": null,
              "ecosystems": "rubygems",
              "total_downloads": 1327605661,
              "monthly_downloads": null
            },
            "components": [
              {
                "key": "total_downloads",
                "name": "Total downloads",
                "detail": "1,327,605,661 downloads all-time across rubygems",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_total",
                    "params": {
                      "count": 1327605661,
                      "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": 80,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 98,
              "top_contributor_share": 0.31
            },
            "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 31% of commits",
                "points": 15.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 31
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "98 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 98
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 74 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 526,
              "open_issues": 7,
              "closed_issues": 391,
              "issue_closed_ratio": 0.982,
              "closed_unmerged_prs": 122
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "98% of issues closed",
                "points": 45.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "526/648 decided PRs merged",
                "points": 31,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 526,
                      "decided": 648
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 13/28 approved changesets -- score normalized to 4",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "followers": 2077,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ruby",
              "public_repos": 190,
              "account_age_days": 5990
            },
            "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": "2,077 followers of ruby",
                "points": 23.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2077,
                      "login": "ruby"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "190 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 190
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "json"
              ],
              "ecosystems": "rubygems",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "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 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "237 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 237
                    }
                  }
                ],
                "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": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 66,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "19 out of 21 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "json",
                "json-parser",
                "ruby"
              ],
              "has_wiki": false,
              "homepage": "https://docs.ruby-lang.org/en/master/JSON.html",
              "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": "https://docs.ruby-lang.org/en/master/JSON.html",
                "points": 15,
                "status": "met",
                "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": 54,
        "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": 54,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.4
            },
            "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": "19 out of 21 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "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 13/28 approved changesets -- score normalized to 4",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 74 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "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": 31
            },
            "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": 34,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.327,
              "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": "32 of 98 human commits state their intent (structured subject or explanatory body)",
                "points": 17.4,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 32,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 40,
            "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.11,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.01
            },
            "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": "11 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 11,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "1 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 1,
                      "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": 53,
            "inputs": {
              "primary_language": "Ruby",
              "largest_source_bytes": 99096,
              "source_files_sampled": 70,
              "oversized_source_files": 2
            },
            "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": "2/70 source files over 60KB",
                "points": 53.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 70,
                      "oversized": 2
                    }
                  }
                ],
                "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": [
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T00:27:20.877552Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/ruby/json.svg",
  "full_name": "ruby/json",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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