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

flori / gem_hadar

Library providing a bunch of rake tasks for handling gems

RubyВласна ліцензія★ 4 зірки⑂ 1 форкз лип. 2011 р.Переглянути на GitHub ↗

flori/gem_hadar має індекс здоров’я 53 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (82/100), найнижчий — AI Readiness (34/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконує один учасник.

53
загалом / 100
Помірний

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

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

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

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

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

Власність

Florian FrankОсобистий обліковий запис
136 підписників124 публічні репозиторіїз лип. 2008 р.

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

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

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

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

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

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

82Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 0 дн. тому
11.1/36Ритм комітів — 16/52 тижнів із комітами
18/18Обсяг комітів — 129 комітів за останній рік
5/10OpenSSF Scorecard: Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Використані вхідні дані
commits_last_year129
human_commit_share1
days_since_last_push0
active_weeks_last_year16
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 38 релізів
36/36Свіжість релізів — останній реліз 0 дн. тому
27/27Ритм релізів — реліз кожні ~23,8 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count38
latest_release_tagv2.18.0
releases_from_tagsні
days_since_latest_release0
mean_days_between_releases23,8
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

36У зоні ризику · 18% загального індексу
Як обчислюється оцінка
7.7/60Зірки — 4 зірок
0/25Форки — 1 форків
0/15Спостерігачі — 1 спостерігачів
Використані вхідні дані
forks1
stars4
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

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

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ні
Як обчислюється оцінка
55.9/80Сумарні завантаження — 239 436 завантажень за весь час у rubygems
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesgem_hadar
dependents
ecosystemsrubygems
total_downloads239 436
monthly_downloads
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

41У зоні ризику · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.1/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
2.7/13.5Широта контриб’юторів — 2 контриб’юторів
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Використані вхідні дані
bus_factor1
contributors_sampled2
top_contributor_share0,996
Як обчислюється оцінка
0/46.8Вирішення issue — немає issue або даних
0/38.3Прийняття PR — злито 0/1 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Виключено з оцінювання (немає даних або не застосовно): Вирішення issue. Залишкові ваги перенормовано.
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
15.4/25Охоплення власника — 136 підписників у flori
25/25Послужний список — 124 публічних репозиторіїв, вік облікового запису ~18 р.
Використані вхідні дані
followers136
owner_typeUser
is_verified
owner_loginflori
public_repos124
account_age_days6 595
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

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

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

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

56Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 1 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — немає даних
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: CI-Tests. Залишкові ваги перенормовано.

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

50Помірний
Як обчислюється оцінка
30/30README
0/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirні
has_descriptionтак

Безпека

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

44У зоні ризику · 16% загального індексу

Стан безпеки

44У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — немає даних
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Ліцензія — license file detected
3.8/7.5Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4,4
Виключено з оцінювання (немає даних або не застосовно): ci_tests, packaging, signed_releases. Залишкові ваги перенормовано.

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

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

34У зоні ризику · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 85 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,85
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
0/11Статична перевірка типів
0/10Відтворюване середовище
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
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
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
0/45Типізований код — Ruby без конфігурації перевірки типів
51.8/55Керовані розміри файлів — 1/17 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageRuby
largest_source_bytes85 708
source_files_sampled17
oversized_source_files1

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

4зірок GitHub
2контриб'юторів
129комітів за останні 12 місяців
0днів від останнього пушу
38релізів
1бас-фактор
0відкритих issue
RubyGemsпакетних екосистем

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

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Докладніше

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

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
н/дCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
5Maintained7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Усі залежності 0

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

РеєстрПакетВерсіяЗв'язок
Сповіщення про залежності не оцінено

Звірка сповіщень не відбулася для цього звіту: No resolved dependencies to assess

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 393,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 1503,
        "Ruby": 152966
      },
      "pushed_at": "2026-07-25T12:33:57Z",
      "created_at": "2011-07-15T20:23:56Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T12:34:02Z",
      "description": "Library providing a bunch of rake tasks for handling gems",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Ruby",
      "significant_languages": [
        "Ruby"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Florian Frank",
      "type": "User",
      "login": "flori",
      "company": null,
      "location": "Berlin, Germany",
      "followers": 136,
      "avatar_url": "https://avatars.githubusercontent.com/u/15918?v=4",
      "created_at": "2008-07-03T14:17:21Z",
      "is_verified": null,
      "public_repos": 124,
      "account_age_days": 6595
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.18.0",
          "kind": "minor",
          "published_at": "2026-07-25T12:34:23Z"
        },
        {
          "tag": "v2.17.1",
          "kind": "patch",
          "published_at": "2026-04-29T14:25:46Z"
        },
        {
          "tag": "v2.17.0",
          "kind": "minor",
          "published_at": "2026-01-15T12:19:10Z"
        },
        {
          "tag": "v2.16.3",
          "kind": "patch",
          "published_at": "2025-12-24T13:33:37Z"
        },
        {
          "tag": "v2.16.2",
          "kind": "patch",
          "published_at": "2025-12-23T02:22:56Z"
        },
        {
          "tag": "v2.16.1",
          "kind": "patch",
          "published_at": "2025-12-23T01:21:31Z"
        },
        {
          "tag": "v2.16.0",
          "kind": "minor",
          "published_at": "2025-12-23T00:23:41Z"
        },
        {
          "tag": "v2.15.0",
          "kind": "minor",
          "published_at": "2025-12-23T00:03:35Z"
        },
        {
          "tag": "v2.14.1",
          "kind": "patch",
          "published_at": "2025-12-22T23:48:29Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2025-12-22T22:42:47Z"
        },
        {
          "tag": "v2.13.1",
          "kind": "patch",
          "published_at": "2025-12-21T20:48:29Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2025-12-21T20:24:23Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2025-12-21T16:40:12Z"
        },
        {
          "tag": "v2.11.0",
          "kind": "minor",
          "published_at": "2025-12-21T15:11:10Z"
        },
        {
          "tag": "v2.10.0",
          "kind": "minor",
          "published_at": "2025-12-19T16:20:39Z"
        },
        {
          "tag": "v2.9.0",
          "kind": "minor",
          "published_at": "2025-12-19T13:19:05Z"
        },
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2025-10-09T13:07:37Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2025-09-26T01:41:38Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2025-09-12T22:39:50Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2025-09-12T18:09:36Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2025-09-11T10:09:44Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2025-09-09T19:27:59Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2025-08-29T00:39:48Z"
        },
        {
          "tag": "v2.1.1",
          "kind": "patch",
          "published_at": "2025-08-19T19:39:33Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2025-08-19T12:48:29Z"
        },
        {
          "tag": "v2.0.5",
          "kind": "patch",
          "published_at": "2025-08-14T02:41:33Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2025-08-13T18:44:14Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2025-08-13T13:21:27Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2025-08-13T02:13:25Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2025-08-13T02:07:22Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2025-08-12T20:06:03Z"
        },
        {
          "tag": "v1.28.0",
          "kind": "minor",
          "published_at": "2025-08-12T19:58:50Z"
        },
        {
          "tag": "v1.27.0",
          "kind": "minor",
          "published_at": "2025-08-06T23:26:49Z"
        },
        {
          "tag": "v1.26.0",
          "kind": "minor",
          "published_at": "2025-08-06T20:29:34Z"
        },
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2025-08-04T21:09:18Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2025-08-04T16:35:31Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2025-07-30T14:40:30Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2025-07-30T14:36:02Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "09f6f810b622465a4c4207a2cd9ebf726258e92d",
          "body": "- Update project version from **2.17.1** to **2.18.0** in `VERSION`,\n  `gem_hadar.gemspec`, and `lib/gem_hadar/version.rb`.",
          "is_bot": false,
          "headline": "Bump `gem_hadar` version to **2.18.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-07-25T12:33:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92a6530036f157a1177220e4fa1054db511ff16d",
          "body": "- Add `coverage` to `.gitignore` and `Rakefile` ignore lists\n- Update `tins` dependency to `~> 1.56` in `Rakefile` and\n  `gem_hadar.gemspec`\n- Update `rubygems_version` to **4.0.17** in `gem_hadar.gemspec`\n- Update `gem_hadar` development dependency to `**>= 2.17.1**` in\n  `gem_hadar.gemspec`\n- Implement defensive check for `SimpleCov#skip` in\n  `lib/gem_hadar/simplecov.rb`",
          "is_bot": false,
          "headline": "Fix `SimpleCov` deprecation and update dependencies",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-07-25T12:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ca960966aad14a17f7ad1586e9ae547840590b6",
          "body": "- Updated the version to **2.17.1** in `VERSION`.\n- Updated the version to **2.17.1** in `gem_hadar.gemspec`.\n- Updated the `VERSION` constant to **2.17.1** in `lib/gem_hadar/version.rb`.",
          "is_bot": false,
          "headline": "Bump version to 2.17.1",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-29T14:21:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27bfee2897fabef8e66877c06ddf1a19f14f25d2",
          "body": "- Added a \"**Human-in-the-Loop Review**\" section describing how\n  `gem_hadar` uses the `EDITOR` to review AI-generated content during\n  `rake github:release` and `rake changes:add`.\n- Updated the `developing` flag description to highlight its role as a\n  safety brake that disables `gem push` operations.\n- Added a note that the tool handles version strings such as **v1.2.3**\n  and **1.2.3** interchangeably.\n- Refined text formatting and line wrapping in `README.md`.",
          "is_bot": false,
          "headline": "Enhance README with AI review and safety details",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-29T14:07:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d29ffe965d10503f562e18ba41bb909a19ce42d",
          "body": "- Update `actions/checkout` from **v4** to **v6** in\n  `lib/gem_hadar/github_workflows/static.yml.erb`\n- Update `actions/configure-pages` from **v5** to **v6** in\n  `lib/gem_hadar/github_workflows/static.yml.erb`\n- Update `actions/upload-pages-artifact` from **v3** to **v5** in\n  `lib/gem_hadar/github_workflows/static.yml.erb`\n- Update `actions/deploy-pages` from **v4** to **v5** in\n  `lib/gem_hadar/github_workflows/static.yml.erb`",
          "is_bot": false,
          "headline": "Update GitHub Actions versions in static template",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-29T12:49:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63af8b61259b55df288378d02935597ed304b030",
          "body": "- Update `actions/checkout` from **v4** to **v6** in\n  `.github/workflows/static.yml`\n- Update `actions/configure-pages` from **v5** to **v6** in\n  `.github/workflows/static.yml`\n- Update `actions/upload-pages-artifact` from **v3** to **v5** in\n  `.github/workflows/static.yml`\n- Update `actions/deploy-pages` from **v4** to **v5** in\n  `.github/workflows/static.yml`",
          "is_bot": false,
          "headline": "Update GitHub Actions versions in static workflow",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-29T12:48:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f67257ace96c8660e31540aacee460b9a5cde4b0",
          "body": "- Update `ruby-version` to **4.0** in `.github/workflows/static.yml` and\n  `lib/gem_hadar/github_workflows/static.yml.erb`\n- Update `rubygems_version` in `gem_hadar.gemspec` from **4.0.10** to\n  **4.0.6**",
          "is_bot": false,
          "headline": "Update Ruby and RubyGems versions",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-29T12:41:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "936164cbce977fa00bc24dc9c3e3074de01529b6",
          "body": "- Remove `require 'pathname'` from `lib/gem_hadar/simplecov.rb`\n- Remove `require 'pathname'` from `lib/gem_hadar/utils.rb`",
          "is_bot": false,
          "headline": "Remove unused pathname requirement",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-04-08T14:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9897b567765d7b02aaee34ca136b293ecb78f8f",
          "body": "- Updated `VERSION` file to **2.17.0**\n- Updated `gem_hadar.gemspec` to reflect version **2.17.0** and updated\n  development dependency requirement to >= **2.16.3**\n- Updated `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.17.0**",
          "is_bot": false,
          "headline": "Bump version to **2.17.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-01-15T12:17:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30ede1d20d3d650454ffb683318124050140acc6",
          "body": "- Added `:force` namespace to `gem:push` task to allow pushing in\n  development mode\n- Extracted core push logic into dedicated `gem_push` method\n- Enhanced force mode to validate remote tag existence before pushing\n- Maintained existing development mode skip behavior for normal\n  `gem:push` task\n- Updated `gem:push` task to use `gem_push` method for consistent logic\n- Task structure now supports `rake gem:push` (skips in dev) and `rake\n  gem:force:push` (force push)",
          "is_bot": false,
          "headline": "Force push mode for gem publishing",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-01-15T12:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "362a26aa3f5b454b47e2ed623a0d79bd1a813464",
          "body": "- This updates the Ruby version to the final 4.0 release instead of the\n  release candidate",
          "is_bot": false,
          "headline": "Update Ruby version from 4.0-rc to 4.0 for Alpine image",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2026-01-01T23:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0d458aa2c5ca6957dede66afbd68f8940db391b",
          "body": "- Updated `VERSION` file to reflect new version **2.16.3**\n- Modified `gem_hadar.gemspec` to set version to **2.16.3**\n- Changed `lib/gem_hadar/version.rb` to update `VERSION` constant to **2.16.3**",
          "is_bot": false,
          "headline": "Update gem version to **2.16.3**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-24T13:32:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e583c63a50b35304c7acfb0acb9b784bc35430bf",
          "body": "- Updated `s.rubygems_version` from **4.0.2** to **4.0.3**\n- Updated `s.add_development_dependency` for `gem_hadar` from **>= 2.16.0** to **>= 2.16.2**",
          "is_bot": false,
          "headline": "Update gem_hadar version and rubygems version",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-24T13:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db2113c266d3853b72d47085ffb5a62b3c6f7d5b",
          "body": "- Replace simple `ENV.fetch` with enhanced logic that checks if editor\n  exists\n- Add fallback to `vim` and `vi` when `EDITOR` environment variable is\n  not set or invalid\n- Introduce `memoize` method to cache editor detection result\n- Use `which` command to locate editors when `EDITOR` is set but invalid\n- Handle cases where `EDITOR` points to non-existent files",
          "is_bot": false,
          "headline": "Improve editor detection logic and add memoization",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-24T13:31:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9881838802f73ad904ceac83cf61b791241aef12",
          "body": "- Updated `VERSION` file to reflect new version **2.16.2**\n- Updated `gem_hadar.gemspec` to specify version **2.16.2** and adjusted\n  development dependency requirement from **>= 2.16.1** to **>= 2.16.0**\n- Updated `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.16.2**",
          "is_bot": false,
          "headline": "Bump version to **2.16.2**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T02:22:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3055665972a02826bde7dd33f8cad7e525f59c11",
          "body": "- Updated `default_git_release_prompt` to exclude version information\n  from generated changelogs\n- This change ensures release notes are more focused on changes rather\n  than version numbers",
          "is_bot": false,
          "headline": "Improved changelog generation by removing version mentions",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T02:19:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ab1cd8a782dcbfff7701c13049c7bf180a033db",
          "body": null,
          "is_bot": false,
          "headline": "Update gem_hadar development dependency to version **2.16.1**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T01:21:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "000abcab78491b994c9130f765d443df9bb21d43",
          "body": "- Updated `VERSION` file to reflect new version **2.16.1**\n- Modified `gem_hadar.gemspec` to specify version **2.16.1** and updated\n  development dependency requirement for `gem_hadar` to be at least\n  **2.16.0**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.16.1**",
          "is_bot": false,
          "headline": "Bump version to **2.16.1** for maintenance release",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T01:20:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40ab4585432fc8188e0084e39a4a7672ba849cf4",
          "body": null,
          "is_bot": false,
          "headline": "Improved error message formatting for changelog updates",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T01:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9b36a17bc0ad3f05e0899a1a4e3b073854f4560",
          "body": "- Bump version number in `VERSION` file from **2.15.1** to **2.16.0**\n- Update version specification in `gem_hadar.gemspec` from **2.15.1** to\n  **2.16.0**\n- Modify `VERSION` constant in `lib/gem_hadar/version.rb` from\n  **2.15.1** to **2.16.0**",
          "is_bot": false,
          "headline": "Update gem version to **2.16.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:22:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbbc94f757413f22b26016cb5dcb73cc6441a1ef",
          "body": null,
          "is_bot": false,
          "headline": "Corrected typo in the error message output",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:21:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d73533f81facbfb292ab581f9378ce40af25224",
          "body": "- Bump `VERSION` file from **2.15.0** to **2.15.1**\n- Update `gem_hadar.gemspec` to reflect version **2.15.1** and change\n  development dependency requirement for `gem_hadar` from \"~> 2.14\" to\n  \">= 2.15.0\"\n- Update `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.15.1**",
          "is_bot": false,
          "headline": "Update gem version to **2.15.1**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:14:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f5fd8a2afa65041ace5ce65fc1fbf936ff4236c",
          "body": "- Enhanced error message for undocumented versions in changelog files to\n  include a clear instruction on how to update the changelog using `rake\n  changes:update`",
          "is_bot": false,
          "headline": "Improve changelog validation error messages with actionable instructions",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:13:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a806149fb6b3b75144418e9712bfade168b721e2",
          "body": "- Updated gem version from **2.14.1** to **2.15.0** in all relevant files\n- Modified `VERSION` file to reflect new version number\n- Updated `gem_hadar.gemspec` version declaration\n- Changed `lib/gem_hadar/version.rb` VERSION constant to **2.15.0**",
          "is_bot": false,
          "headline": "Bump version to **2.15.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:02:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cfec7946e90ad4af0300e7ec499c249050713c5",
          "body": "- Allows flexibility to use newer versions during development and testing",
          "is_bot": false,
          "headline": "Update gem_hadar dependency constraint to allow >= **1.2.3**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-23T00:01:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "894e6654fe4932267540d173c9b245fedf2e44d1",
          "body": "- Updated `VERSION` file to reflect new patch version **2.14.1**\n- Modified `gem_hadar.gemspec` to specify version **2.14.1** in gem\n  specification\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.14.1**",
          "is_bot": false,
          "headline": "Update gem version to **2.14.1**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T23:47:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a9031a11254bfb74292da158089e379d7a7a5f3",
          "body": "`@gem_hadar.changelog.filename` property.",
          "is_bot": false,
          "headline": "Updated changelog filename access to use standardized",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T23:46:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12f7010f0bacb8a7a6729d01c28a8aebf5592cf1",
          "body": "- Updated the development dependency for `gem_hadar` from version\n  **2.13** to **2.14**",
          "is_bot": false,
          "headline": "Update gem_hadar dependency to version **2.14**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T22:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9281e5b99f3d43e8c6b3ffea9ce5d30cbedfbe10",
          "body": "- Updated `VERSION` file to **2.14.0**\n- Updated `gem_hadar.gemspec` to reflect version **2.14.0** and updated\n  file listings in `s.extra_rdoc_files` and `s.files`\n- Updated `lib/gem_hadar/version.rb` to set `VERSION` to **2.14.0**",
          "is_bot": false,
          "headline": "Bump version to 2.14.0 with updated file listings",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T21:55:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1bc7157405a6e8ce3640be921b09dad5f231532",
          "body": "- Replace simple `changelog_filename` string with `ChangelogConfig` class\n- Add `changelog` method that accepts block configuration\n- Introduce `changelog.filename` and `changelog.commit_message` accessors\n- Update all changelog Rake tasks to use new configuration system\n- Add `rake changes:update` \n[…]\next` for graceful missing file handling\n- Add default commit message **'Add to changes'**\n- Support block syntax configuration in gem DSL\n- Add `changelog_config.rb` file with new class implementation",
          "is_bot": false,
          "headline": "Refactor changelog configuration system",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T21:20:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4a29e31d454d35de84aada789079973acdc90044",
          "body": "and document it.\n\n- Add `infobar.newline` call in changelog generation flow",
          "is_bot": false,
          "headline": "Return changelog entry count from add_to_file",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T21:17:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab8d91d41166140acf2265dfc52e98be6036fa83",
          "body": "- Improved example initialization syntax\n- Expanded template and output examples\n- Clarified method descriptions",
          "is_bot": false,
          "headline": "Update documentation for `GemHadar::TemplateCompiler` class",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T01:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ea5693bf09ed4b620e967db2647eda37adfa548",
          "body": "- Move `edit_temp_file` and related editor logic from `GemHadar` class\n  to new `GemHadar::Editor` module\n- Add `require 'gem_hadar/editor'` and `include GemHadar::Editor` to\n  `GemHadar` class\n- Replace inline `edit_temp_file` implementation with module-based\n  approach\n- Introduce `find_editor`, `\n[…]\ny file handling with automatic cleanup\n- Handle editor invocation using `system` with proper error checking and warnings\n- Default to `vi` editor if `EDITOR` environment variable is not set or invalid",
          "is_bot": false,
          "headline": "Extract editor logic into dedicated module",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-22T01:11:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33b5e052986b0539d4a2a68a9024b2674c53fead",
          "body": "- Enhanced documentation for **GitHub Workflows** configuration\n- Added detailed guide for **Template System** usage\n- Documented all **changes:** namespace tasks for changelog generation\n- Included **Advanced Usage Patterns** with CI/CD integration examples\n- Added **Troubleshooting** section for A\n[…]\nion from **2.13.0** to **2.13.1** in VERSION, gemspec, and\n  version.rb files\n- Improved README organization with better heading structure\n- Added practical examples for all new documentation sections",
          "is_bot": false,
          "headline": "Update README with comprehensive documentation and",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:46:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6dcf77b8d024cc022806777b2d0acf9ebb37a5b9",
          "body": "- Updated the `gem_hadar` development dependency from version **2.12** to **2.13**",
          "is_bot": false,
          "headline": "Update gem_hadar development dependency to version **2.13**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:43:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffed26cda4b4fd1dd646fd98da45011e51435e85",
          "body": "- Changed the `gem_hadar` development dependency version from **2.13** to **2.12**",
          "is_bot": false,
          "headline": "Update gem_hadar development dependency version",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04eff4027875e80e4c1fdd3e0cc81316fd2ab041",
          "body": "- Removed display of `FORCE` environment variable setting from the\n  GemHadar output",
          "is_bot": false,
          "headline": "Remove force operations display from GemHadar",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:33:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40156a7bb7f24736a8d25f794f67e87d530161f1",
          "body": "- Updated `VERSION` file to reflect new version **2.13.0**\n- Modified `gem_hadar.gemspec` to specify version **2.13.0** in gem\n  specification\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to\n  **2.13.0**",
          "is_bot": false,
          "headline": "Bump version to **2.13.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:23:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43bf8cde91973289ce50418015d049913a449e09",
          "body": "- Added `changelog_filename` DSL accessor to configure custom changelog\n  file names\n- Enhanced `version:tag` task to depend on `:modified` task for safety\n- Created reusable `modified` task to check for uncommitted changes\n- Implemented `changes:added` task to validate changelog entries before\n  re\n[…]\nplace \"# Changes\" header at beginning of\n  changelog\n- Added `changelog_exist?` and `changelog_version_added?` methods to\n  `ChangelogGenerator`\n- Enhanced error messages with clear guidance for users",
          "is_bot": false,
          "headline": "Add changelog validation to release workflow",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T20:21:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5501a17ae50202e26fd345e1d61e3dcab3344b98",
          "body": "- Replace complex retry logic in `version_tag_task` with simple remote\n  tag check\n- Add `version_tag_local` and `version_tag_remote` helper methods with\n  memoization\n- Use `abort` instead of `warn` + `exit` for consistent error handling\n- Update error messages to show remote tag commit hashes\n- Ch\n[…]\n`warn` method color from **208** to **220** for better visibility\n- Change `abort` method color from **196** to **208** for consistent failure highlighting\n- Add proper git status check before tagging",
          "is_bot": false,
          "headline": "Simplify version tag task with better safety",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T19:25:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f9ec59b40e687045e7faed75e91d7a02b9d23d7",
          "body": "- Updated the `gem_hadar` development dependency from version **2.11** to **2.12**",
          "is_bot": false,
          "headline": "Update gem_hadar development dependency to version **2.12**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T19:14:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14b5ddaf30e6d15c125cbc526a9ccf83afe2d8bf",
          "body": "- Bump version number in `VERSION` file from **2.11.0** to **2.12.0**\n- Update version specification in `gem_hadar.gemspec` from **2.11.0** to\n  **2.12.0**\n- Modify `VERSION` constant in `lib/gem_hadar/version.rb` from\n  **2.11.0** to **2.12.0**",
          "is_bot": false,
          "headline": "Update gem version to **2.12.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T16:34:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dde167f880a9fc3aca6d13c46b24f5bca39df740",
          "body": "- Updated the development dependency for `gem_hadar` from version\n  **2.10** to **2.11**\n- This ensures compatibility with the latest features and bug fixes in\n  the gem_hadar library\n- Maintains backward compatibility while providing access to newer functionality",
          "is_bot": false,
          "headline": "Update gem_hadar dependency to version **2.11**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T16:33:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddf83273fa9963ed27e523e9e41a2c97940bb844",
          "body": "- Replace ad-hoc version string manipulation with consistent\n  `GemHadar::VersionSpec` object usage throughout the codebase\n- Remove redundant `version_tag` and `version_untag` helper methods\n- Add `Comparable`, `eql?`, and `hash` methods to\n  `GemHadar::VersionSpec` for proper version operations\n- \n[…]\ndate changelog generator to use `VersionSpec` objects for all\n  version operations\n- Ensure all version operations maintain proper **v** prefix handling\n  for tags while supporting **HEAD** references",
          "is_bot": false,
          "headline": "Refactor version handling to use VersionSpec consistently",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T16:32:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64efaf21f4886b4e375bef44620436788c0c6b78",
          "body": "- Update version to **2.11.0** across all relevant files\n- Introduce new `changes_task` with hierarchical Rake tasks for generating changelogs:\n  - `changes:pending` - Show changes since last version tag\n  - `changes:current` - Show changes between two latest version tags\n  - `changes:range` - Show \n[…]\nrieving and sorting semantic version tags\n- Enhance `gemspec` method to use `version_untag` for proper version formatting\n- Add comprehensive documentation and examples for new changelog functionality",
          "is_bot": false,
          "headline": "Add AI-powered changelog generation and refactor core components",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-21T13:55:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3aa30141ffbc9fdf05f70e365d4e3fefcdcdd66",
          "body": "- Added `cscope.out` to `.gitignore` file to prevent it from being\n  tracked by git",
          "is_bot": false,
          "headline": "Add cscope.out to gitignore and rakefile ignore list",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-20T23:04:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4ad3c50b5fea8f37e6a1434376c841af49a926c",
          "body": "- Added `infobar` dependency with version **0.11** to both `Rakefile`\n  and `gem_hadar.gemspec`\n- Updated development dependency version for `gem_hadar` from **2.9** to\n  **2.10** in `gem_hadar.gemspec`\n- Added `lib/gem_hadar/changelog_generator.rb` and\n  `lib/gem_hadar/version_spec.rb` to `s.files` and `s.extra_rdoc_files`\n  in `gem_hadar.gemspec`",
          "is_bot": false,
          "headline": "Add infobar dependency and update gem version",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-20T23:04:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0f1572296d84e8bbc6e4b99e469ca6d12d0ffb7",
          "body": "- Enabled `ruby:4.0-rc-alpine` image build in `.all_images.yml`",
          "is_bot": false,
          "headline": "Enable ruby 4.0-rc-alpine image build",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-20T01:47:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ebf5c63754f3194250f94f55c28e6d51b920934",
          "body": "- Updated `VERSION` file to **2.10.0**\n- Updated `gem_hadar.gemspec` version to **2.10.0**\n- Updated `lib/gem_hadar/version.rb` VERSION constant to **2.10.0**",
          "is_bot": false,
          "headline": "Update version to **2.10.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-19T16:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bebf1e7c360e0784a0778cae5febece8950ae968",
          "body": "- Comment out `ruby:4.0-rc-alpine` image in `.all_images.yml`\n- Update `ollama-ruby` dependency from version **1.7** to **1.17** in\n  `Rakefile` and `gem_hadar.gemspec`\n- Update `gem_hadar` development dependency from version **2.8** to\n  **2.9** in `gem_hadar.gemspec`\n- Remove `pathname` and `set` runtime dependencies in\n  `gem_hadar.gemspec`\n- Remove `pathname` development dependency in `Rakefile`",
          "is_bot": false,
          "headline": "Update dependencies and comment out Ruby 4.0 image",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-19T16:13:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fc606e957d693d7571af2d1403930ced5135b8b",
          "body": "- Updated `VERSION` file from **2.8.0** to **2.9.0**\n- Updated `gem_hadar.gemspec` to reflect version **2.9.0** and updated dependencies\n- Added `lib/gem_hadar/rvm_config.rb` to `extra_rdoc_files` and `files` lists\n- Changed `bundle update` to `bundle update --all` in `.all_images.yml`\n- Added `ruby\n[…]\nms_version` from **3.6.9** to **4.0.2**\n- Updated development dependency on `gem_hadar` from \"~> 2.7\" to \"~> 2.8\"\n- Updated `VERSION` constant in `lib/gem_hadar/version.rb` from **2.8.0** to **2.9.0**",
          "is_bot": false,
          "headline": "Update to version 2.9.0 with bundle update and new Ruby image support",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-12-19T13:17:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f781127bf510f74b34f21edc761f3a55fbd09a09",
          "body": "- Move `RvmConfig` class implementation from `lib/gem_hadar.rb` to new\n  file `lib/gem_hadar/rvm_config.rb`\n- Update `lib/gem_hadar.rb` to require the new `rvm_config.rb` file\n- Maintain same functionality with `dsl_accessor` and `DSLKit` integration\n- `RvmConfig` class now properly nested within `GemHadar` namespace\n- Class maintains `use` and `gemset` accessors with default values\n- Improves code organization and separation of concerns",
          "is_bot": false,
          "headline": "Refactor RVM configuration into separate file",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-10-16T22:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "090c0b61eed4853fa9d7914aa419b8359aebe0a8",
          "body": "- Updated `VERSION` file to reflect new version **2.8.0**\n- Modified `gem_hadar.gemspec` to use version **2.8.0**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.8.0**",
          "is_bot": false,
          "headline": "Update gem version from 2.7.0 to 2.8.0 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-10-09T12:57:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ee5ff89cb37f73b91135599d2f595131623bb6c",
          "body": "- Declare **openssl** >= **3.3.1** as runtime dependency. This fixes SSL\n  certificate verification issues with OpenSSL 3.6.0 by explicitly\n  declaring runtime dependencies and ensuring proper certificate\n  handling\n- Declare **net-http** as runtime dependency\n- Declare **json** ~> **2.0** as runtim\n[…]\nl_images.yml` in gem files\n- Update **tins** dependency to ~> **1.0**\n- Remove direct requires for `tins/secure_write` and `dslkit/polite`\n- Standardize dependency declarations in gemspec and Rakefile",
          "is_bot": false,
          "headline": "Update dependencies and gemspec for explicit runtime requirements",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-10-09T12:56:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f0ae56b2ef3612fa10b195de47395faead528b2",
          "body": null,
          "is_bot": false,
          "headline": "Add documentation comments to GitHub module",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-10-01T21:28:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "322f164d5defeb6c8652eae8cd2535b39157f7f2",
          "body": "- Added a documentation section to `README.md` pointing to GitHub.io API docs\n- Updated version from **2.6.0** to **2.7.0** in multiple files:\n  - `VERSION` file\n  - `gem_hadar.gemspec`\n  - `lib/gem_hadar/version.rb`\n- Included new workflow file `.github/workflows/static.yml` in gemspec `s.files`\n- Updated development dependency from `~> 2.5` to `~> 2.6` for `gem_hadar` in gemspec",
          "is_bot": false,
          "headline": "Update gem version to 2.7.0 and add documentation link",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-26T01:40:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72e41dbf028617e9f7db04263903dfa8daf612f8",
          "body": null,
          "is_bot": false,
          "headline": "Fix indentation in GitHub Actions workflow configuration files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-26T01:37:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3fe602fd5c4cb3c78ab036ed04963422c31ea8c",
          "body": "- Introduce new workflow file `.github/workflows/static.yml`\n- Configure deployment to GitHub Pages on pushes to **master** branch\n- Set up Ruby **3.4** environment using `ruby/setup-ruby@v1`\n- Install `gem_hadar` and run `bundle install` before generating docs\n- Generate documentation with `rake doc` task\n- Upload artifacts from `doc` directory\n- Deploy to GitHub Pages using `actions/deploy-pages@v4`",
          "is_bot": false,
          "headline": "Add GitHub Actions workflow for static site deployment",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-26T01:35:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9e77ed595b2441306584aa9305d5f9459fea7f6",
          "body": "- Add `github_workflows` DSL accessor for configuring workflow templates\n- Implement `github_workflows_task` to generate YAML files from ERB\n  templates\n- Introduce `static.yml` ERB template for static content deployment\n- Update `template` method to support explicit destination paths and ERB\n  trimming\n- Configure Rake tasks under `:github` namespace with `:workflows` and\n  `:workflows:clean`\n- Add `github_workflows_variables` accessor for template variable management",
          "is_bot": false,
          "headline": "Add GitHub Actions workflow generation support",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-26T01:35:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f29ea6d476008fcfe47347d56281ab39acbb7b5",
          "body": null,
          "is_bot": false,
          "headline": "Add detailed documentation comments to ReleaseCreator methods",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-26T01:35:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e67ba86fe09977ba35bbce7aa497c252468791c",
          "body": "- Replace simple array appending with directory-aware logic\n- Use `FileList` to recursively include all files in directories\n- Maintain existing behavior for non-directory arguments\n- Update variable name from `a` to `arg` for clarity\n- Update gem version from 2.5.0 to 2.6.0\n- Updated `VERSION` file\n[…]\n*\n- Modified `gem_hadar.gemspec` to bump version to **2.6.0** and update\n  development dependency on `gem_hadar` to \"~> 2.5\"\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.6.0**",
          "is_bot": false,
          "headline": "Handle directory arguments in package ignore files logic",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T22:37:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "143898a7b739bf4651d4442764bffd2b2ca276b6",
          "body": "and config_task methods\n\n- Split long comment lines into multiple shorter lines for better\n  readability\n- Added `yard_doc_task` method with comprehensive YARD documentation\n  generation\n- Added `config_task` method to display current GemHadar configuration\n- Updated `@return` comment for `ollama_client` method to wrap long line\n- Minor formatting adjustments to existing documentation comments",
          "is_bot": false,
          "headline": "Update documentation comments and add new yard_doc_task",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T21:32:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abf62ac0643895378666312c630ecdd5eb72826a",
          "body": "instead of `select` with regex.",
          "is_bot": false,
          "headline": "Updated documentation file selection to use `grep`",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T21:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d400e336066a84355ff9077165d991ce1dac0337",
          "body": "- Updated `VERSION` file to reflect new version **2.5.0**\n- Modified `gem_hadar.gemspec` to use version **2.5.0**\n- Changed `lib/gem_hadar/version.rb` to set VERSION constant to **2.5.0**",
          "is_bot": false,
          "headline": "Update gem version from 2.4.0 to 2.5.0 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T18:08:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97bfa8fcc0fb6ee5273cf107f309574ff83382f5",
          "body": "- Included `doc` in the `ignore` list within `Rakefile` for GemHadar\n  configuration\n- Added `doc` directory to `.gitignore` file",
          "is_bot": false,
          "headline": "Add doc directory to gitignore and rakefile",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T18:07:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af85172e50479d8d39fc48fd3d2e8003b1cbdad5",
          "body": "- Introduce **doc_code_files** DSL accessor for fine-grained control\n  over Ruby source files used in documentation generation\n- Change **files** accessor to return `FileList` instead of plain array\n  for better pattern matching capabilities\n- Update **yard_doc_task** to use `doc_code_files` instead\n[…]\nrd compatibility while providing more expressive\n  configuration options for **gem** packaging and **YARD** documentation\n- Default **doc_code_files** to use all files (preserving existing\n  behavior)",
          "is_bot": false,
          "headline": "Enhance YARD documentation file configuration with FileList support",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T18:06:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1d2727707c9fd79d70082e05abcff763fefbc7f",
          "body": null,
          "is_bot": false,
          "headline": "Update gem_hadar development dependency version to **2.4**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-12T17:50:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8a4443ef173117b6c9bfaf1c4dc06a156aed992",
          "body": "- Update `VERSION` file from **2.3.0** to **2.4.0**\n- Update `gem_hadar.gemspec` to reflect version **2.4.0**\n- Change `tins` dependency from `~> 1.0` to `~> 1` in `Rakefile`\n- Update development dependency on `gem_hadar` to `~> 2.3` in `gem_hadar.gemspec`\n- Update runtime dependency on `tins` to `~> 1` in `gem_hadar.gemspec`\n- Update `VERSION` constant in `lib/gem_hadar/version.rb` from **2.3.0** to **2.4.0**",
          "is_bot": false,
          "headline": "Update gem version to 2.4.0 and relax tins dependency",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-11T10:08:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "960266a69be9937021427d28cb71126aca0dd5b7",
          "body": "- Updated `VERSION` file to reflect new version **2.3.0**\n- Modified `gem_hadar.gemspec` to use version **2.3.0**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.3.0**",
          "is_bot": false,
          "headline": "Update gem version from 2.2.0 to 2.3.0 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-09T19:27:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bc60dfea01dc94eaa48bc79d8cb11885241db06",
          "body": "- Updated `ollama-ruby` dependency version from **1.0** to **1.7** in\n  both `Rakefile` and `gem_hadar.gemspec`\n- Updated development dependency version for `gem_hadar` from **2.1** to\n  **2.2** in `gem_hadar.gemspec`",
          "is_bot": false,
          "headline": "Update ollama-ruby dependency from version **1.0** to **1.7**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-09-09T19:26:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd16853478944b413e30da55d54df536e10c6550",
          "body": "- Updated `VERSION` file to reflect new version **2.2.0**\n- Modified `gem_hadar.gemspec` to use version **2.2.0**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.2.0**",
          "is_bot": false,
          "headline": "Update gem version from 2.1.1 to 2.2.0",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-29T00:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c42c902b58b8435b4e3f4d60fc517bb502fba538",
          "body": "- Add **RSpec** (**3.13**) as development dependency\n- Introduce `spec` directory for tests\n- Update gemspec to include test files\n- Refactor `GemHadar::SimpleCov` to use configurable `default_block`\n- Modify `SimpleCov.start` to accept optional block parameter\n- Add `test_dir` configuration to Rakefile\n- Add `package_ignore` for `.gitignore` and `VERSION` files\n- Update `s.files` in gemspec to include spec files",
          "is_bot": false,
          "headline": "Add RSpec testing and improve SimpleCov configuration",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-29T00:34:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef4655c34a0822dd26158e07e6105c25a55a64db",
          "body": "- Updated `VERSION` file to reflect new version **2.1.1**\n- Modified `gem_hadar.gemspec` to bump version to **2.1.1** and update\n  development dependency to \"~> 2.1\"\n- Changed `lib/gem_hadar/version.rb` to set VERSION constant to **2.1.1**",
          "is_bot": false,
          "headline": "Update gem version from 2.1.0 to 2.1.1",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-19T19:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6d830200047b23ccb96855f920320c806ccaa7b",
          "body": "- Removed `require 'gem_hadar/changes'` from `lib/gem_hadar.rb`",
          "is_bot": false,
          "headline": "Remove unused changes module requirement",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-19T19:37:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6fed5c272b24024815fddf98f28bc9d46a061e6",
          "body": "- Updated `VERSION` file to reflect new version **2.1.0**\n- Modified `gem_hadar.gemspec` to bump version number from **2.0.5** to **2.1.0**\n- Added `lib/gem_hadar/warn.rb` to both `extra_rdoc_files` and `files` lists\n- Updated `version.rb` to set `VERSION` constant to **2.1.0**",
          "is_bot": false,
          "headline": "Update gem version from 2.0.5 to 2.1.0",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-19T12:47:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7029e01fc1200b67eba11ea17e082ba1aef1cf6",
          "body": "- Wrap `result.least_covered_file` in a rescue clause to return `nil` if an error occurs in simplecov filelists.\n- This prevents crashes when the attribute is not accessible or raises an exception\n- Maintains backward compatibility by providing a fallback value of `nil`",
          "is_bot": false,
          "headline": "Handle potential errors when accessing least_covered_file attribute",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-19T12:44:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01080a64e589a4110929b13a3a43353f3b6c6ab6",
          "body": "- Remove inline `warn` and `fail` method definitions from `GemHadar`\n  class\n- Add `fail` method to `GemHadar::Warn` module for consistent error\n  handling\n- Enhance `warn` method in `GemHadar::Warn` to handle non-string objects\n  gracefully\n- Update `fail` method in `GemHadar::Warn` to handle non-s\n[…]\ncts\n  gracefully\n- Both methods now use `respond_to?(:to_str)` check before color\n  formatting\n- Preserve original behavior for string objects while maintaining\n  compatibility with other object types",
          "is_bot": false,
          "headline": "Move warn and fail methods to GemHadar::Warn module",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-18T20:26:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d32ab631f90d4c715d628500392a6f0802cf3e40",
          "body": "- Extract `GemHadar::SimpleCov::WarnModule` into new `GemHadar::Warn` module\n- Update `GemHadar::SimpleCov` to include `GemHadar::Warn` instead of `WarnModule`\n- Add `require 'gem_hadar/warn'` to `lib/gem_hadar.rb`\n- Add `require 'gem_hadar/warn'` to `lib/gem_hadar/simplecov.rb`\n- Move `Term::ANSIColor` require into `gem_hadar/warn.rb`\n- Update class name from `GemHadar::SimpleCov::WarnModule` to `GemHadar::Warn`",
          "is_bot": false,
          "headline": "Refactor warning functionality into shared GemHadar::Warn module",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-18T20:18:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7e2201765cb14ce13756022a335801e5a2ac855",
          "body": "- Updated `VERSION` file to reflect new version **2.0.5**\n- Modified `gem_hadar.gemspec` to use version **2.0.5**\n- Changed `lib/gem_hadar/version.rb` to set VERSION constant to **2.0.5**",
          "is_bot": false,
          "headline": "Update gem version from 2.0.4 to 2.0.5 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-14T02:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f8e4f03f091611cf477a44d7645f0406c754292",
          "body": null,
          "is_bot": false,
          "headline": "Include Term::ANSIColor in WarnModule for colored output support.",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-14T02:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9f49f373ab198aec09544cf90ccd208ad60f2ef",
          "body": "- Updated `VERSION` file to reflect new version **2.0.4**\n- Modified `gem_hadar.gemspec` to use version **2.0.4**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.0.4**",
          "is_bot": false,
          "headline": "Update gem version from 2.0.3 to 2.0.4 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T18:43:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28b14e1e5c46897cd4e50a19c9ca4d0eef90dee9",
          "body": "Add detailed RDoc comments to all DSL accessors explaining purpose, return types, and exceptions",
          "is_bot": false,
          "headline": "Document GemHadar DSL accessors a bit",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T18:23:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f08adf4f5fad4c5c0742529ca76cb0c36035b720",
          "body": "- Add extensive YARD-style documentation throughout the codebase for\n  improved API clarity\n- Introduce detailed class and method comments for `GemHadar`,\n  `RvmConfig`, `ReleaseCreator`\n- Add documentation for `SimpleCov` module with formatter and warning\n  enhancements\n- Include setup documentatio\n[…]\n documentation for RVM and GitHub integration features\n- Update `template` helper method documentation with usage examples\n- Add prompt template documentation for AI-assisted versioning\n  capabilities",
          "is_bot": false,
          "headline": "Add comprehensive documentation to GemHadar",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T14:59:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b3e9d36c101d2a8af9a969fb54e5e5cf9109ddd",
          "body": "- Updated `VERSION` file to reflect new version **2.0.3**\n- Modified `gem_hadar.gemspec` to use version **2.0.3**\n- Changed `lib/gem_hadar/version.rb` to set `VERSION` constant to **2.0.3**",
          "is_bot": false,
          "headline": "Update gem version from 2.0.2 to 2.0.3 across all version files",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T13:20:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af0ecf93b27559ed61e8d4253a6950ccb2a2f82d",
          "body": "suffix and improve\n\n- Use `Tempfile.new(%w[ changelog .md ])` instead of\n  `Tempfile.new('changelog.md')` for explicit suffix handling\n- Add comprehensive documentation for the method including parameter and\n  return value descriptions",
          "is_bot": false,
          "headline": "Update edit_temp_file to use proper temporary file",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T13:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "884e909c9d0d0272508ffd0e81b8305c7e4b4816",
          "body": "- Updated `VERSION` file to reflect new version **2.0.2**\n- Modified `gem_hadar.gemspec` to set version to **2.0.2**\n- Changed `lib/gem_hadar/version.rb` to update `VERSION` constant to **2.0.2**",
          "is_bot": false,
          "headline": "Bump version from 2.0.1 to 2.0.2",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T02:11:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3863ef009e5e8150e6a2bc596982fd8fe5c95d30",
          "body": "- Change temporary file extension from `changelog` to `changelog.md`\n- Switches vim filetype detection from unknown to `markdown`\n- Improves editor integration and syntax highlighting\n- Maintains same functionality while enhancing developer experience\n- Affects `Tempfile` creation in changelog generation process",
          "is_bot": false,
          "headline": "Update tempfile extension to .md for proper filetype detection",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T02:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f062d2bfe406e72ff8de535a9ee845c5fd7e219d",
          "body": "- Updated `VERSION` file from **2.0.0** to **2.0.1**\n- Updated gemspec version from **2.0.0** to **2.0.1**\n- Updated `GemHadar::VERSION` constant from **2.0.0** to **2.0.1**\n- Changed development dependency on `gem_hadar` from \"~> 1.27\" to \"~> 2.0\"",
          "is_bot": false,
          "headline": "Update gem version to **2.0.1**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T02:06:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1a4d3d7e6c717e7fd28375363d58ebfc1ac0a3b",
          "body": "- Replace error condition with git log from root to first version\n- Use `git log -p` directly for **first** version case instead of failing\n- Maintain existing behavior for non-first versions\n- Method `version_log_diff` now returns early for first version scenarios",
          "is_bot": false,
          "headline": "Handle first version diff gracefully",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-13T02:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec2399227b6ca9e6f252d6b0af239b61af3a0160",
          "body": "- Updated `VERSION` file to reflect new version **2.0.0**\n- Modified `gem_hadar.gemspec` to set version to **2.0.0**\n- Changed `lib/gem_hadar/version.rb` to update `VERSION` constant to **2.0.0**",
          "is_bot": false,
          "headline": "Bump gem version to **2.0.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-12T20:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79efe305cd08707d2f1e48e5511f8197f40f7d9e",
          "body": "- Removed the `start_simplecov` method from the `GemHadar` class\n- This method was used to initialize and configure SimpleCov for code coverage",
          "is_bot": false,
          "headline": "Remove deprecated start_simplecov method",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-12T20:00:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "565bf954494fc709953a0af0c813ad7e6d2c72a1",
          "body": "- Updated `VERSION` file from **1.27.0** to **1.28.0**\n- Updated `gem_hadar.gemspec` version from **1.27.0** to **1.28.0**\n- Added `lib/gem_hadar/simplecov.rb` to `extra_rdoc_files` and `files` lists\n- Updated `VERSION` constant in `lib/gem_hadar/version.rb` from **1.27.0** to **1.28.0**",
          "is_bot": false,
          "headline": "Update gem version to **1.28.0**",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-12T19:49:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a4502ee68fce43d333dff1f761b0058df670b8b",
          "body": "- Add detailed instructions for integrating `simplecov` with `GemHadar`\n- Include steps for installing dependencies, initializing coverage, and\n  running tests\n- Document HTML and JSON report generation paths\n- Add tip about using `START_SIMPLECOV=1` environment variable",
          "is_bot": false,
          "headline": "Update README with SimpleCov integration instructions",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-12T19:40:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6640fa8cf761b17c22f3927e84daf4be67dfbf6b",
          "body": "- Introduce `GemHadar::SimpleCov` module for code coverage reporting\n- Add `ContextFormatter` to generate detailed JSON reports including\n  line and branch coverage statistics\n- Implement `WarnModule` with orange-colored warning messages using\n  `Term::ANSIColor`\n- Support conditional initialization\n[…]\nissing `simplecov` gem with install instructions\n- Filter coverage data based on caller's directory to exclude test files\n- Add fallback to `'unknown'` version string when **VERSION** file is\n  absent",
          "is_bot": false,
          "headline": "Add SimpleCov integration with context formatter and colorized warnings",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-12T19:36:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "934ee3ed8e64b94d4c8234218a5204323002f125",
          "body": "- Updated the gem name reference from `gem_hadar` to `gem_hadar` in `README.md`\n- Bumped development dependency version from **1.25** to **1.27** in `gem_hadar.gemspec`",
          "is_bot": false,
          "headline": "Update gem name and version in documentation and spec",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T23:34:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e529504aff2ba8764b0c86ee813f2d45cfbafd4",
          "body": "- Enhanced documentation for all DSL accessors in README.md\n- Added comprehensive coverage of core required attributes mapped to gemspec\n- Documented build and package configuration settings\n- Improved documentation for computed properties `path_name`, `path_module`,\n  and `module_type`\n- Added clea\n[…]\ntion section with proper syntax highlighting\n- Added Configuration Flags section explaining developing mode behavior\n- All changes align DSL accessors with standard RubyGems specification\n  attributes",
          "is_bot": false,
          "headline": "Documentation improvements for GemHadar DSL accessors",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T23:20:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0c3aff7d053ce04db2f811b6624a4eec89ca866",
          "body": "- Added detailed environment variable configuration table to README.md\n- Implemented `rake gem_hadar:config` task to display current\n  configuration\n- Added documentation Ollama AI integration with configurable model,\n  host, and options\n- Included RubyGems API key setup instructions in README.md\n- \n[…]\nuse new client and model methods\n- Replaced some direct ENV access with proper helper methods throughout\n  gem_hadar.rb\n- Simplified `xdg_config_filename` to use new `xdg_config_home` utility\n  method",
          "is_bot": false,
          "headline": "Add comprehensive configuration documentation",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T22:19:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6c081b5dee6c26d1368a80d1735a1afe4aea9ff",
          "body": "- Added new \"Configuration\" section with GitHub API setup instructions\n- Included steps for generating personal access token with `repo` scope\n- Documented setting `GITHUB_API_TOKEN` environment variable\n- Added security note about not committing tokens to version control\n- Mentioned usage with `rake github:release` task for AI-generated changelogs",
          "is_bot": false,
          "headline": "Add GitHub API configuration section to README",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T20:51:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03ab34d59155efab26bc216715be47bde251324b",
          "body": "- Updated `VERSION` file to reflect new version **1.27.0**\n- Modified `gem_hadar.gemspec` to set version to **1.27.0**\n- Adjusted development dependency in `gem_hadar.gemspec` to use \"~> 1.25\"\n- Updated `lib/gem_hadar/version.rb` to set `VERSION` constant to **1.27.0**",
          "is_bot": false,
          "headline": "Bump version to **1.27.0** for gem_hadar",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T20:35:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9351884d7f97a1a8b09e6d5762ac7b306f00130b",
          "body": "- Updated `gem_hadar` development dependency from version **1.25** to **1.26**",
          "is_bot": false,
          "headline": "Update gem_hadar development dependency version",
          "author_name": "Florian Frank",
          "author_login": "flori",
          "committed_at": "2025-08-06T20:31:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 38,
      "commits_last_year": 129,
      "latest_release_at": "2026-07-25T12:34:23Z",
      "latest_release_tag": "v2.18.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 16,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 23.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "gem_hadar",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/gem_hadar",
          "is_deprecated": false,
          "latest_version": "2.18.0",
          "repository_url": "https://github.com/flori/gem_hadar",
          "versions_count": 97,
          "total_downloads": 239436,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2011-07-15T20:24:45.062000Z",
          "latest_published_at": "2026-07-25T12:34:08.811000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 4,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2024-04-05",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 85708,
      "source_files_sampled": 17,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Gemfile"
      ],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "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": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "rubygems"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "flori",
          "commits": 236,
          "avatar_url": "https://avatars.githubusercontent.com/u/15918?v=4"
        },
        {
          "type": "User",
          "login": "fwolfst",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/219373?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.996
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "static.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": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 5,
            "reason": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
            "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": "no SAST tool detected",
            "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": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "09f6f810b622465a4c4207a2cd9ebf726258e92d",
        "ran_at": "2026-07-25T12:35:36Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-25T12:33:57Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/flori/gem_hadar",
    "host": "github.com",
    "name": "gem_hadar",
    "owner": "flori"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 53,
      "inputs": {
        "security": 44,
        "vitality": 82,
        "community": 36,
        "governance": 41,
        "engineering": 56
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 129,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 16
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "16/52 weeks with commits",
                "points": 11.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "129 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 129
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "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": 38,
              "latest_release_tag": "v2.18.0",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 23.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "38 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~23.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 23.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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 1,
              "stars": 4,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "packages": [
                "gem_hadar"
              ],
              "dependents": null,
              "ecosystems": "rubygems",
              "total_downloads": 239436,
              "monthly_downloads": null
            },
            "components": [
              {
                "key": "total_downloads",
                "name": "Total downloads",
                "detail": "239,436 downloads all-time across rubygems",
                "points": 55.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_total",
                    "params": {
                      "count": 239436,
                      "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 41,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.996
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "0/1 decided PRs merged",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 0,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 63,
            "inputs": {
              "followers": 136,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "flori",
              "public_repos": 124,
              "account_age_days": 6595
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "136 followers of flori",
                "points": 15.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 136,
                      "login": "flori"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "124 public repos, account ~18 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 124
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 18
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "gem_hadar"
              ],
              "ecosystems": "rubygems",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "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 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "97 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 56,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 4.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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "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": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.85,
              "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": "85 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 85,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "primary_language": "Ruby",
              "largest_source_bytes": 85708,
              "source_files_sampled": 17,
              "oversized_source_files": 1
            },
            "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": "1/17 source files over 60KB",
                "points": 51.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 17,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T12:35:41.189031Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/flori/gem_hadar.svg",
  "full_name": "flori/gem_hadar",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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