Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.31.0 · метрики 2.5.0 · 2026-08-06 02:40 UTC

fktn-k / fkYAML

A C++ header-only YAML library

C++MIT★ 151 зірка⑂ 20 форківз серп. 2023 р.Переглянути на GitHub ↗

fktn-k/fkYAML має індекс здоров’я 71 зі 100, що відповідає смузі «Добрий». Найвищий показник — Engineering Quality (81/100), найнижчий — Sustainability & Governance (41/100). Останнє оновлення було 7 днів тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

71
Винятковий93-100Верхній щабель реєстру (≈ топ-5%); відповідає практично всім перевіреним критеріям
Відмінний80-92Сильний за всіма напрямами; незначні прогалини
Добрий65-79Здоровий; прогалини обмежені та керовані
Помірний50-64Прийнятний, але з помітними прогалинами; рекомендовано перевірку
Слабкий35-49Суттєві недоліки в кількох сферах
У зоні ризику20-34Суттєві слабкі місця; впровадження потребує обережності
Критичний1-19Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

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

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

Зважений загальний бал 63 калібровано до 71 за шкалою опублікованого індексу (калібрування реєстру 2026-08-02).

Власність

fktnОсобистий обліковий запис
7 підписників2 публічні репозиторіїз серп. 2023 р.

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

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

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

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

70Добрий · 21% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 7 дн. тому
2.8/36Ритм комітів — 4/52 тижнів із комітами
11.9/18Обсяг комітів — 20 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year20
human_commit_share1
days_since_last_push7
active_weeks_last_year4
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 29 релізів
36/36Свіжість релізів — останній реліз 18 дн. тому
19.8/27Ритм релізів — реліз кожні ~85,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count29
latest_release_tagv0.4.3
releases_from_tagsні
days_since_latest_release18
mean_days_between_releases85,1

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

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

70Добрий · 17% загального індексу
Як обчислюється оцінка
35.3/60Зірки — 151 зірок
10.7/25Форки — 20 форків
3.9/15Спостерігачі — 6 спостерігачів
Використані вхідні дані
forks20
stars151
watchers6
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
readme_badges11
has_contributingтак
has_issue_templateні
has_code_of_conductтак
readme_badge_servicesapp.codacy.com, coveralls.io, github.com, shields.io
has_pull_request_templateтак

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

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

41Слабкий · 23% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.6/22.5Розподіл комітів — головний контриб’ютор — автор 97% комітів
9.5/13.5Широта контриб’юторів — 7 контриб’юторів
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Використані вхідні дані
bus_factor1
contributors_sampled7
top_contributor_share0,972
Як обчислюється оцінка
41.5/42Вирішення issue — закрито 99% issue
29.4/30Прийняття PR — злито 321/327 вирішених PR
0/13Newcomer PR acceptance — злито 0/1 PR від новачків за 30 дн.
6/15OpenSSF Scorecard: Code-Review — Found 13/30 approved changesets -- score normalized to 4
Використані вхідні дані
merged_prs321
open_issues1
closed_issues85
prs_merged_7d0
prs_decided_7d0
prs_merged_30d9
prs_decided_30d11
issue_closed_ratio0,988
closed_unmerged_prs6
first_time_authors_30d1
first_time_prs_merged_30d0
first_time_prs_decided_30d1

Власність та опіка

32У зоні ризику
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
6.5/25Охоплення власника — 7 підписників у fktn-k
9.5/25Послужний список — 2 публічних репозиторіїв, вік облікового запису ~3 р.
Використані вхідні дані
followers7
owner_typeUser
is_verified
owner_loginfktn-k
public_repos2
account_age_days1 096
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

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

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

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

100Винятковий
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://fktn-k.github.io/fkYAML/
10/10Опис репозиторію
10/10Теми — 13 тем
10/10Wiki
Використані вхідні дані
topicscmake, cpp, cpp11, cpp14, cpp17, cpp20, header-only, header-only-library, yaml, yaml-parser, fkyaml, cpp23, single-header
has_wikiтак
homepagehttps://fktn-k.github.io/fkYAML/
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

46Слабкий
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — немає даних
1.8/2.5CI-Tests — 19 out of 25 merged PRs checked by a CI test -- score normalized to 7
0.5/2.5CII-Best-Practices — badge detected: InProgress
3/7.5Code-Review — Found 13/30 approved changesets -- score normalized to 4
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
4.5/5SAST — SAST tool detected but not run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 34 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,6
Виключено з оцінювання (немає даних або не застосовно): branch_protection, packaging. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
0/40Немає задавнених сповіщень — жодне сповіщення не має дати публікації
Використані вхідні дані
sourceosv
advisories55
affected_packages9
assessed_packages34
unassessed_packages0
affected_by_severitycritical 1, high 4, moderate 3, low 1
direct_affected_packages0
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень, Немає задавнених сповіщень. Залишкові ваги перенормовано. Звірено 34 резолвлених залежностей із OSV. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

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

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Має свідомо малу вагу (4%): агентний інструментарій — реальний сигнал супроводу, але репозиторій без нього все одно може отримати 100/100.

67Добрий · 4% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — .github/copilot-instructions.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 75 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,75
agent_instruction_files.github/copilot-instructions.md
agent_instruction_max_bytes4 619
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile, docs/Makefile, tools/natvis_generator/Makefile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — C++ (статично типізована)
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_filesMakefile, docs/Makefile, tools/natvis_generator/Makefile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — C++ (статично типізована)
53.1/55Керовані розміри файлів — 7/198 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageC++
largest_source_bytes613 567
source_files_sampled198
oversized_source_files7
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

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

151зірок GitHub
7контриб'юторів
20комітів за останні 12 місяців
7днів від останнього пушу
29релізів
1бас-фактор
1відкритих issue
PyPIпакетних екосистем

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

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

Докладніше

Історія зірок і форків 0 ★ / 20 ⇿
0Зірки
20Форки
16Релізи

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

0481216202022024-032025-042026-06
Мажорні 0Мінорні 1Патчі 15

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

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

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

10Binary-Artifactsno binaries found in the repo
н/дBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
7CI-Tests19 out of 25 merged PRs checked by a CI test -- score normalized to 7
2CII-Best-Practicesbadge detected: InProgress
4Code-ReviewFound 13/30 approved changesets -- score normalized to 4
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
9SASTSAST tool detected but not run on all commits
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities34 existing vulnerabilities detected
Усі залежності 34

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

РеєстрПакетВерсіяЗв'язок
PyPIbabel2.16.0непряма
PyPIcertifi2024.12.14непряма
PyPIcharset-normalizer3.4.0непряма
PyPIclick8.1.7непряма
PyPIcolorama0.4.6непряма
PyPIghp-import2.1.0непряма
PyPIgitdb4.0.11непряма
PyPIgitpython3.1.43непряма
PyPIidna3.10непряма
PyPIjinja23.1.4непряма
PyPImarkdown3.7непряма
PyPImarkupsafe3.0.2непряма
PyPImergedeep1.3.4непряма
PyPImkdocs1.6.1непряма
PyPImkdocs-get-deps0.2.0непряма
PyPImkdocs-git-revision-date-localized-plugin1.3.0непряма
PyPImkdocs-material9.5.49непряма
PyPImkdocs-material-extensions1.3.1непряма
PyPIpackaging24.2непряма
PyPIpaginate0.5.7непряма
PyPIpathspec0.12.1непряма
PyPIplatformdirs4.3.6непряма
PyPIpygments2.18.0непряма
PyPIpymdown-extensions10.12непряма
PyPIpython-dateutil2.9.0.post0непряма
PyPIpytz2024.2непряма
PyPIpyyaml6.0.2непряма
PyPIpyyaml-env-tag0.1непряма
PyPIregex2024.11.6непряма
PyPIrequests2.32.3непряма
PyPIsix1.17.0непряма
PyPIsmmap5.0.1непряма
PyPIurllib32.2.3непряма
PyPIwatchdog6.0.0непряма
Сповіщення про залежності 9

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

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
gitpython3.1.43непрямакритична203.1.57
click8.1.7непрямависока18.3.3
jinja23.1.4непрямависока63.1.6
markdown3.7непрямависока23.8.1
urllib32.2.3непрямависока122.7.0
idna3.10непрямапомірна23.15
pymdown-extensions10.12непрямапомірна611.0.0
requests2.32.3непрямапомірна42.33.0
pygments2.18.0непряманизька22.20.0

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "data": {
    "icon": {
      "bytes": 1870,
      "width": 48,
      "height": 48,
      "rejected": [],
      "collected": true,
      "media_type": "image/png",
      "source_url": "https://fktn-k.github.io/fkYAML/assets/images/favicon.png",
      "source_type": "homepage",
      "content_hash": "023854c43fc4b25b795ee4951c8019e3de0593ffeb6f918b5d1f2a9b47a57cfe",
      "candidates_considered": 1
    },
    "repo": {
      "topics": [
        "cmake",
        "cpp",
        "cpp11",
        "cpp14",
        "cpp17",
        "cpp20",
        "header-only",
        "header-only-library",
        "yaml",
        "yaml-parser",
        "fkyaml",
        "cpp23",
        "single-header"
      ],
      "is_fork": false,
      "size_kb": 3457,
      "has_wiki": true,
      "homepage": "https://fktn-k.github.io/fkYAML/",
      "languages": {
        "C++": 1994846,
        "CMake": 26326,
        "Jinja": 2820,
        "Shell": 2721,
        "Python": 10835,
        "Makefile": 8909,
        "Batchfile": 2219
      },
      "pushed_at": "2026-07-29T22:23:12Z",
      "created_at": "2023-08-05T19:06:46Z",
      "owner_type": "User",
      "updated_at": "2026-07-31T19:59:21Z",
      "description": "A C++ header-only YAML library",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "develop",
      "license_spdx_raw": "MIT",
      "primary_language": "C++",
      "significant_languages": [
        "C++"
      ]
    },
    "owner": {
      "blog": null,
      "name": "fktn",
      "type": "User",
      "login": "fktn-k",
      "company": null,
      "location": "Japan",
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/141519741?v=4",
      "created_at": "2023-08-05T18:40:16Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 1096
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-07-18T16:30:34Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2025-01-25T15:10:22Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2025-01-11T01:56:41Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2024-12-10T15:28:12Z"
        },
        {
          "tag": "v0.3.14",
          "kind": "patch",
          "published_at": "2024-11-16T15:10:12Z"
        },
        {
          "tag": "v0.3.13",
          "kind": "patch",
          "published_at": "2024-10-14T07:37:06Z"
        },
        {
          "tag": "v0.3.12",
          "kind": "patch",
          "published_at": "2024-09-21T08:31:31Z"
        },
        {
          "tag": "v0.3.11",
          "kind": "patch",
          "published_at": "2024-08-24T03:51:30Z"
        },
        {
          "tag": "v0.3.10",
          "kind": "patch",
          "published_at": "2024-08-18T07:27:14Z"
        },
        {
          "tag": "v0.3.9",
          "kind": "patch",
          "published_at": "2024-06-12T14:05:10Z"
        },
        {
          "tag": "v0.3.8",
          "kind": "patch",
          "published_at": "2024-06-01T02:49:15Z"
        },
        {
          "tag": "v0.3.7",
          "kind": "patch",
          "published_at": "2024-05-16T15:24:01Z"
        },
        {
          "tag": "v0.3.6",
          "kind": "patch",
          "published_at": "2024-05-02T08:13:36Z"
        },
        {
          "tag": "v0.3.5",
          "kind": "patch",
          "published_at": "2024-04-27T14:35:58Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2024-04-20T13:25:10Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2024-03-31T10:54:53Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2024-03-17T11:19:16Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2023-12-21T14:37:37Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2023-12-10T16:31:29Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2023-12-03T05:20:50Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2023-11-27T13:45:14Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2023-11-19T05:53:59Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2023-11-06T23:01:18Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2023-10-21T13:08:02Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2023-10-18T17:08:54Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2023-10-15T06:54:31Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2023-10-15T06:41:50Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2023-10-06T13:13:59Z"
        },
        {
          "tag": "v0.0.0",
          "kind": "major",
          "published_at": "2023-10-01T08:37:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b0a41e859c0c0b77ef718d95c2959a9cc21401fa",
          "body": "* Migrated from Catch2 to doctest (v2.5.3)\n\n* Removed the embedded Catch2 sources\n\n* Replaced Catch2 with doctest in the documentations\n\n* Fixed build errors with Clang and old GCC compilers",
          "is_bot": false,
          "headline": "Migrate to doctest (#535)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-29T22:23:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f44392f5b7090b9236e684325557b25593b0316c",
          "body": "* Harden input adapter against truncated encoded input\n\nFix UTF-16 buffer handling so incomplete surrogate pairs cannot underflow the\nencoded buffer size, addressing the issue #492 report.\n\nAlso reject truncated UTF-8, UTF-16, and UTF-32 input consistently across\niterator, FILE, and stream adapters \n[…]\naves the encoded buffer empty. This prevents valid standalone CR input from being reported as invalid encoding.\n\n* Fix ci_test_clang_tidy (static_cast)\n\n* Exclude defensive UTF-16 guards from coverage",
          "is_bot": false,
          "headline": "Harden input adapter against truncated encoded input (#533)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-25T17:08:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e626a228d180d6e4e55f4f94064c1733d0b661c",
          "body": "Use --merge-copyrights when annotating sources and remove the deprecated --copyright-style option",
          "is_bot": false,
          "headline": "Harden SPDX copyright against duplicate entries (#534)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-20T00:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "772607306fdb2c831385924b0eaa7281c795a77a",
          "body": "fkYAML version 0.4.3",
          "is_bot": false,
          "headline": "Merge tag 'v0.4.3' into develop",
          "author_name": "fktn-k",
          "author_login": "fktn-k",
          "committed_at": "2026-07-18T16:32:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65a386270e0144899eaffe725ce370ef177dfee9",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.4.3'",
          "author_name": "fktn-k",
          "author_login": "fktn-k",
          "committed_at": "2026-07-18T15:59:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf58ba0dc12a013e10b38e74d63d1e8112a41f67",
          "body": null,
          "is_bot": false,
          "headline": "bump version to 0.4.3",
          "author_name": "fktn-k",
          "author_login": "fktn-k",
          "committed_at": "2026-07-18T04:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bb9a5c20eccade52a97c7b6b36ab280e6131a63",
          "body": "* added node::remove method\n\n* Changed remove method to erase\n\n* Add tests and documentation for basic_node::erase\n\n- Cover existing, missing, node, and alias mapping keys\n- Verify type errors for non-mapping nodes\n- Add API documentation and a compilable example\n- Keep the regular and single-header APIs consistent\n\n* Return size_type from basic_node::erase\n\n---------\n\nCo-authored-by: flaviu22 <flaviu2@yahoo.com>",
          "is_bot": false,
          "headline": "Add `basic_node::erase` method (#530)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-18T00:33:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "979a13044ffd38807bc5ea405a63d468501fd4d3",
          "body": null,
          "is_bot": false,
          "headline": "Fix bugs in the format_check and coverage workflows (#529)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-15T18:17:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8cdd2474462c82012ef1804ba6517d5b383b0f3",
          "body": "…d (#527)\n\n* Fix tool directory typo\n\n* Add CMake policy version minimum for benchmark\n\n* Set benchmark CMake policy minimum internally\n\nWhen FK_YAML_RUN_BENCHMARK is enabled, set CMAKE_POLICY_VERSION_MINIMUM\nto 3.5 before adding the benchmark subdirectory. This avoids requiring\nusers to pass -DCMAKE_POLICY_VERSION_MINIMUM=3.5 manually when configuring\nbenchmark builds with newer CMake versions.\n\nAlso remove the now-unnecessary flag from the benchmark README.",
          "is_bot": false,
          "headline": "Fix `tool` directory typo and add CMake policy for the benchmark buil…",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-15T17:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4fdc5b070988504e534f0837b3713f642a062ea",
          "body": "* update coverage.yaml for the GitHub Actions\n\n* Modified test case to cover untested branches\n\n* Improve unsinged integer support & test coverage\n\n* Update the documentation with new APIs\n\n* Fixed clang-tidy warnings and add more tests for better coverage\n\n* Add more tests for better coverage",
          "is_bot": false,
          "headline": "Improve unsigned 64bit integer support (#526)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-13T04:58:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9d343dc1495ddff89526727fb4c1a3021c3c065",
          "body": "* Fix brace initialization of empty collection nodes\n\nPreserve the type of empty mapping and sequence nodes when they are passed\nthrough brace initialization, e.g. node{node::mapping()}.\n\nPreviously this form selected the initializer-list constructor and treated the\nsingle empty mapping node as a se\n[…]\ninitializer-list constructor can preserve empty collection nodes without\nallowing broader implicit conversions.\n\nUpdate the constructor documentation and add coverage for duplicate-anchor\ndestruction.",
          "is_bot": false,
          "headline": "Fix brace initialization of empty collection nodes (issue #502) (#524)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-08T07:39:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb458b0eedc62efde962b02ff91ea97471c236e2",
          "body": "* Handle empty mapping key separator as parse error (#514)\n\nReplace an assertion-only guard in KEY_SEPARATOR handling with a parse_error\nwhen the parser sees a mapping value separator without an active context.\n\nThis prevents malformed input such as `: foo` from aborting on\nFK_YAML_ASSERT(!m_context\n[…]\nith `\"\"` as the key, while\nleaving empty mapping keys inside block sequences unsupported for now.\n\nUpdate the key separator regression tests accordingly.\n\n* Clarify empty key sequence parse-error test",
          "is_bot": false,
          "headline": "Handle empty mapping key separator as parse error (#525)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-07T23:41:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f56b48ccd455dc4bfdc6dc841197186928562d6",
          "body": "* Fix serialization of strings that are invalid plain scalars\n\nQuote string scalars that cannot be safely emitted in YAML plain style,\nincluding values starting with directive/reserved/flow indicator characters\nsuch as `%`, `@`, `!`, `&`, and `{`.\n\nPreviously the serializer only quoted strings when \n[…]\ner a\nscalar is used as an implicit key or inside a flow collection, so this keeps the\nplain-scalar validation conservative.\n\nUpdate serializer tests for whitespace and mid-string flow indicator cases.",
          "is_bot": false,
          "headline": "Fix serialization of strings that are invalid plain scalars (#523)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-06T17:04:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "925dd2a353e597d292c81be598b7a484c2a535ef",
          "body": "* Support unsigned 64-bit integers (uint64_t) exceeding INT64_MAX\n\nLarge positive decimal scalars whose value exceeds INT64_MAX (e.g. xxHash digests, high-half UUID fields) were silently parsed as STRING nodes instead of INTEGER nodes. Calling as_int() on such a node then threw type_error, making th\n[…]\nevent get_value<uint64_t>() crash caused by as_int() throwing on uint_bit-marked nodes\n\n* Run amalgamation\n\n* Use explicit partial specialization for uint64_t in from_node_int_helper to fix MSVC build",
          "is_bot": false,
          "headline": "Support unsigned 64-bit integers (uint64_t) exceeding INT64_MAX (#513)",
          "author_name": "Thorek",
          "author_login": "sndth",
          "committed_at": "2026-07-05T10:42:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3a096bc51ea3dbd113d9b6bb9a34e6334374259",
          "body": "… (#522)",
          "is_bot": false,
          "headline": "Fix errors in checking out to a branch in a forked repository (part2)…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-05T10:21:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9037b1d9da71034b9881701b706975020a68ab8",
          "body": "Co-authored-by: fktn <fktn.dev@gmail.com>",
          "is_bot": false,
          "headline": "Fixes natvis path for non VS builds. (#512)",
          "author_name": "Sean Farrell",
          "author_login": "rioki",
          "committed_at": "2026-07-05T05:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9be87092f936af6bbcbc00dd98f2ec519c9032d6",
          "body": null,
          "is_bot": false,
          "headline": "Fix errors in checking out to a branch in a forked repository (#521)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-05T04:58:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99ccf3e60404589cd1d09f2c7f9b4e8f86f8c939",
          "body": null,
          "is_bot": false,
          "headline": "Update the format/amalgamation check by the GitHub Actions (#520)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-04T19:27:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec638106f1f72a80175c723b08f4d878fb801bf9",
          "body": null,
          "is_bot": false,
          "headline": "Update GitHub Actions workflows (#519)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-04T18:17:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79675673f1ac1c397778d80d9371c6602a05a348",
          "body": null,
          "is_bot": false,
          "headline": "Add copilot-instructions.md for GitHub Copilot integrations (#518)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2026-07-04T15:14:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08844ced6443a5aba0f4e82d55ecff5d641a362a",
          "body": "* resolved useless-cast & old-style-cast warnings from GCC compilers\n\n* fixed apt repository update error",
          "is_bot": false,
          "headline": "Resolve useless-cast & old-style-cast warnings (#499)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-07-21T10:03:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7773ea4517b617ca88df917242e528167a80c073",
          "body": "* dropped windows-2019 runner, added windows-2025 runner\n\n* updated supported compilers list",
          "is_bot": false,
          "headline": "Update CI workflows for windows (#500)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-07-21T08:29:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "721edb3e1a817e527fd9e1e18a3bea300822522e",
          "body": null,
          "is_bot": false,
          "headline": "Fix project compilation on GCC compilers (#497)",
          "author_name": "sndth",
          "author_login": "sndth",
          "committed_at": "2025-05-22T01:48:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a44af109d0624d2678a59c419e094a3067d8da3",
          "body": null,
          "is_bot": false,
          "headline": "[bot] run clang-format & amalgamation",
          "author_name": "sndth",
          "author_login": "sndth",
          "committed_at": "2025-05-15T06:01:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6787730975b5028a9c62ec94cb211c93f80bada4",
          "body": null,
          "is_bot": false,
          "headline": "Fix issue with separating comments using tab (#494) (#496)",
          "author_name": "sndth",
          "author_login": "sndth",
          "committed_at": "2025-05-15T05:59:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fb0b72fd78261c1da08a87597f3f1be687dbefc",
          "body": null,
          "is_bot": false,
          "headline": "[bot] run clang-format & amalgamation",
          "author_name": "Edmund Krain",
          "author_login": "edmundkrain",
          "committed_at": "2025-04-19T08:21:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f5a81313657007dee2fcf7aa1b4bd533ee528c",
          "body": "* Fix typo in source\n\n* Fix typos in docs\n\n* Fix pr template link",
          "is_bot": false,
          "headline": "Fix typos and pr-template link (#493)",
          "author_name": "Edmund Krain",
          "author_login": "edmundkrain",
          "committed_at": "2025-04-19T08:20:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b2f9a0c3974b34b4fff7f91f529597f4301e599",
          "body": "Co-authored-by: Your Name <you@example.com>",
          "is_bot": false,
          "headline": "Removing typo, extra `--config` in tutorial bash (#490)",
          "author_name": "mgodf7",
          "author_login": "mgodf7",
          "committed_at": "2025-03-21T14:35:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b36aac6a9907af2e921acf8ac12cc302b740977",
          "body": "…#488)\n\n* fix parsing block mapping entry after an empty block sequence entry\n\n* added note on a test case",
          "is_bot": false,
          "headline": "Fix parsing block mapping entry after an empty block sequence entry (…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-28T11:18:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16a1432281bf72f6120f41e27691813afa6abafc",
          "body": "* added get_value_or() in basic_node\n\n* added api reference page for get_value_or()\n\n* updated README",
          "is_bot": false,
          "headline": "Add get_value_or() (#485)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-16T14:44:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c093fc4a0b0d5fa76511031a752c7fcbb1228170",
          "body": "* improved the way of resolving anchor/alias node reference\n\n* renamed variables for internal node value storage\n\n* cleaned up unused/redundant custom type traits\n\n* silenced clang-tidy warnings since they are intentional\n\n* [bot] run clang-format & amalgamation",
          "is_bot": false,
          "headline": "Refactor node class implementation (#483)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-09T14:25:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06dec7b49774b8b04f910cfa74da632a72ec1367",
          "body": "* implemented as_xxx() in basic_node template class to replace get_value_ref()\n\n* replaced internal get_value_ref() calls with as_xxx()\n\n* added test cases for as_xxx() functions\n\n* added api references & examples for the new as_xxx() functions\n\n* improved migration guide from get_value_ref",
          "is_bot": false,
          "headline": "Replace getters for reference to node values (#481)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-05T23:57:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8a276dbc6e8758d11436778b9c271e5d275e6a4",
          "body": "* updated the contents in README\n\n* added missing links",
          "is_bot": false,
          "headline": "Update README.md (#479)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-02T14:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32381af23c43a8aad6dc4fed63c9afccade06228",
          "body": "* relaxed iterator requirements to LegacyInputIterator for deserialize\n\n* updated documents\n\n* consolidated contiguous iterator detection in input_adapter\n\n* cleaned up test code\n\n* modified the way of incrementing iterators",
          "is_bot": false,
          "headline": "Relax iterator requirements for deserialization (#478)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-02-02T02:25:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "954d8439821e51abe61c81842329274f3ed5affd",
          "body": "* removed the catch2 git submodule\n\n* removed the .gitmodules file\n\n* embed minimum necessary files from Catch2 v2.3.10 for tests\n\n* updated CMake build instructions\n\n* updated reuse configurations\n\n* removed the submodules option on checkout action calls in GitHub Actions workflows",
          "is_bot": false,
          "headline": "Embed minimum necessary Catch2 v2.3.10 sources (#475)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-27T12:18:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9552a7d5e100e334f0c8094881e02ecb81ad6ee0",
          "body": "fkYAML version 0.4.2",
          "is_bot": false,
          "headline": "Merge tag 'v0.4.2' into develop",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T15:12:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f042a1017ea2aa8075c9018cbd72913f1d27cd8b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.4.2'",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T14:54:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "679ac5dd65a358e2e7b6acf2a1bca9f6c8ee63c4",
          "body": null,
          "is_bot": false,
          "headline": "bump version to 0.4.2",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T14:54:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "137b57d43cd656453c000b355e77d22563ac395d",
          "body": "* fixed examples with misindented document markers\n\n* added a workflow job which checks example builds",
          "is_bot": false,
          "headline": "Fix example builds with incorrectly indented document markers (#473)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T14:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3616115b6e6405fb8240f680f4f7983a6d78307",
          "body": "* fixed document marker (--- and ...) detections\n\n* emit error if a document marker is found in a flow collection\n\n* run amalgamation",
          "is_bot": false,
          "headline": "Fix document marker detections (#472)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T03:29:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32c7d1a20e6aa14bc3b432f039995d8c97908e9c",
          "body": "* fixed segfault if the input stream has no contents\n\n* added test cases for empty inputs\n\n* modified not-maintained code in the input_adapter test source file\n\n* early returns an empty string view if an input is empty",
          "is_bot": false,
          "headline": "Fix error in parsing empty inputs (#471)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-25T00:05:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee9bd5a42757b17d8bcd85824a9be4b6c65d8711",
          "body": "* separate utf-8 validation based on char bytes by overloads\n\n* refactored line break normalization in iterator_input_adapter for char/char8_t\n\n* refactored line break normalization in file/stream_input_adapter for UTF-8\n\n* updated benchmark results",
          "is_bot": false,
          "headline": "Refactor UTF encode validation & line break normalization (#470)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-21T18:33:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d31189be91613b1d9c588d94a49c409761d06a47",
          "body": "* fixed comment prefix check in the lexer\n\n* added test cases for comments for the lexer",
          "is_bot": false,
          "headline": "Fix comment prefix check (#469)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-19T15:24:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "258b236760f03441c7aa28a8773d20c92b9c43c7",
          "body": "…y (#468)\n\n* allow ':' to be adjacent to a mapping value right after a JSON-like key\n\n* added test cases to improve coverage",
          "is_bot": false,
          "headline": "Allow ':' adjacent to a flow mapping value right after a JSON-like ke…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-19T09:36:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a087743a8a81522579e4197f27a70757a48b49fe",
          "body": "* fixed conversions from an empty tuple to a node\n\n* ensure a sequence node is converted to an empty tuple",
          "is_bot": false,
          "headline": "Fix conversions from empty tuples (#467)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-18T11:52:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b68ecfb0392d75540d7e121838ae83d8da5ba6fb",
          "body": null,
          "is_bot": false,
          "headline": "Disable the fail-fast option for GitHub Actions workflow jobs (#466)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-18T01:24:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "236acffa3120c53da5b7af3552a4a1ed24928b54",
          "body": "* extract create_object/destroy_object as utility functions\n\n* refactored external_node_constructor\n\n* added builtin to_node impls for sequence-like types\n\n* ensure cv-qualifiers and references are removed in detecting member types\n\n* added builtin to_node impls for mapping-like types\n\n* cleaned up \n[…]\n nodes\n\n* fixed typos in doxygen comments\n\n* add builtin to_node() impls for std::pair & std::tuple\n\n* run amalgamation\n\n* fixed compile errors with older gcc/clang versions\n\n* updated docs & examples",
          "is_bot": false,
          "headline": "Add to_node() implementations for STL container types (#465)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-14T17:59:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e04d463328be84d1e7222d0c025531ee25f81e98",
          "body": "* updated file header contents in the example source files\n\n* fixed missing build instruction for macro examples\n\n* fixed typos",
          "is_bot": false,
          "headline": "Fix example builds and typos in docs (#464)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-12T11:48:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e930dee2db3010ddf42f69fb008a52bf4d046a2e",
          "body": "* remove redundant string allocations for tag names\n\n* remove redundant string allocations for anchor names\n\n* addressed coverage loss",
          "is_bot": false,
          "headline": "Improve handling node properties in deserialization (#463)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-12T10:12:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77ba5efac1322f68112e9013faed7d6fe83c0fb6",
          "body": "fkYAML version 0.4.1",
          "is_bot": false,
          "headline": "Merge tag 'v0.4.1' into develop",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-11T03:02:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8517fb74859acd9afabf80f626f6b6431f8247d2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.4.1'",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-11T01:33:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d43eff4ca28416e039329c2be45b540f5224929",
          "body": null,
          "is_bot": false,
          "headline": "bump version to 0.4.1",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-11T01:33:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50f28a0cc088ea13023ace70258f50fcb4ed7f4a",
          "body": "* added test cases for serializing root empty collections\n\n* fixed path filtering in ubuntu.yml",
          "is_bot": false,
          "headline": "Add test cases for serializing root empty collections (#461)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-09T14:33:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d5f1ccc1082f47d552df151d8bcb562171d0e82",
          "body": null,
          "is_bot": false,
          "headline": "[bot] run clang-format & amalgamation",
          "author_name": "johan-gson",
          "author_login": "johan-gson",
          "committed_at": "2025-01-09T11:42:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6bae95fc8f2547b5390f3a8f013640726e777e1",
          "body": "* Fix: made sure that empty documents just serialize to [] or {}\n\n* fixed tabs\n\n* fixed tabs again, missed a few ones",
          "is_bot": false,
          "headline": "Fix: made sure that empty documents just serialize to [] or {} (#460)",
          "author_name": "johan-gson",
          "author_login": "johan-gson",
          "committed_at": "2025-01-09T11:31:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36ca93e245390952756f2bf23e9cf555c19c7940",
          "body": "* allow access to iterator member functions in range-based for loops\n\n* updated documentation for map_items API\n\n* modified impl for serializing mappings\n\n* fixed duplication error in CMake build target names\n\n* added doxygen comments\n\n* fixed ci errors\n\n* added doxygen comments again",
          "is_bot": false,
          "headline": "Mapping key/value access in range based for loops (#458)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-07T03:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71fa437ce59722684782f7d3b2092454bf6b5f3d",
          "body": "* added test cases for serializing empty collection nodes\n\n* modified serializer impl to address coverage loss",
          "is_bot": false,
          "headline": "Add test cases for serializing empty collection nodes (#457)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-06T17:30:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559f6a36cac3c3fc904c27efb5d25bc5f2b6440c",
          "body": null,
          "is_bot": false,
          "headline": "[bot] run clang-format & amalgamation",
          "author_name": "johan-gson",
          "author_login": "johan-gson",
          "committed_at": "2025-01-06T08:06:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c15d671ca1d87540c19c70be15887570b184bc82",
          "body": "…appings in a correct way (#456)\n\n* fix: Fixed a bug where serialize didn't write out empty vectors and mappings in a correct way. I have not added a test case, but I tested it in my code and it behaved as expected. Adding a test case at some point would be good.",
          "is_bot": false,
          "headline": "fix: Fixed a bug where serialize didn't write out empty vectors and m…",
          "author_name": "johan-gson",
          "author_login": "johan-gson",
          "committed_at": "2025-01-06T07:53:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "859389ef106a9dbd2389c0174a340d2505deda56",
          "body": "* fixed paths for publishing documentation\n\n* fixed filtering paths for workflow triggers\n\n* updated path for the reuse tool",
          "is_bot": false,
          "headline": "Fix invalid paths for documentation & other tools (#453)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-02T16:04:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8633c19deb1e1a7f256fe24e7d1b8e5b631246e8",
          "body": "* updated copyright year\n\n* rename: test -> tests, tool -> tools\n\n* moved files for documentation\n\n* moved project documentation files to the .github directory\n\n* fixed path for coverage\n\n* fixed paths in the script files",
          "is_bot": false,
          "headline": "Update copyright year and directory structure (#452)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2025-01-02T14:51:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08462e2015d9627e7937f29e225723d2454cceff",
          "body": "* detect bad indentation at block mapping entries\n\n* improved parse context management\n\n* detect error on too much indented block sequence entries\n\n* added test cases\n\n* fixed clang-tidy error\n\n* addressed coverage loss\n\n* run amalgamation\n\n* deleted unused lambda capture in the deserializer",
          "is_bot": false,
          "headline": "Fix bad indentation detection for block collection entries (#451)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-29T17:30:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d9e702a4a8f42078d37923ad7feb98ca10fb432",
          "body": "* emit errors if \":\" is missing after a mapping key\n\n* generalized codes to move back to a parent node with target indentation\n\n* disable clang-tidy check (bugprone-easily-swappable-parameters)\n\n* added test cases & addressed coverage loss",
          "is_bot": false,
          "headline": "Emit an error if \":\" is missing after a mapping key (#450)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-23T02:31:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43a18846bbe10ea5c45a7fc8cd6ce323b51122dc",
          "body": "* do not create a temporal, redundant lexical_token object\n\n* search plain scalar contents for flow indicators only within a flow context\n\n* modified validation of scalar contents\n\n* reduced redundant calls in lexer\n\n* updated benchmark results\n\n* fixed a clang-tidy error",
          "is_bot": false,
          "headline": "Optimize lexer implementation (#448)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-21T17:33:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b43c4cf9204a0c250211d2d2259a4f11ffb83a03",
          "body": "* update workflow jobs for release artifacts\n\n* change extension: tar.gz -> tgz",
          "is_bot": false,
          "headline": "Update workflow jobs for release artifacts (#447)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-18T20:36:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4361556b3d3d591b2abd22af2171837b05bc715d",
          "body": "* updated mkdocs-material & mkdocs-git-revision-date-localized-plugin\n\n* updated copyright year in the license files\n\n* restructured document pages\n\n* revised documentation contents in the API references section\n\n* organized structure of documentation contents in the API references section\n\n* added top page & reordered documentation pages in the API references section",
          "is_bot": false,
          "headline": "Revise the contents of API References (#445)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-17T15:45:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec133cda8d5172a8cb82e55cbea2b097bbb69bbf",
          "body": null,
          "is_bot": false,
          "headline": "support std::forward_list in from_node (#444)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-16T13:45:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aaa028ac0983fbb1805f73af9031bf5bdd6c208",
          "body": "* added get_value_inplace() to basic_node\n\n* updated API documentation contents\n\n* fixed some typos in doc\n\n* added link to the documentation page for get_value_inplace()\n\n* fixed error in building test suite with older compilers\n\n* added test case for get_value_inplace\n\n* fixed issue reported from codacy",
          "is_bot": false,
          "headline": "Add get_value_inplace API to basic_node (#443)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-15T18:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b8f92552218a25be01635eed80db78bd3530ef0",
          "body": null,
          "is_bot": false,
          "headline": "Resolve CMake deprecation warning (#442)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-13T15:07:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fdebe84dfdd0e840f065f72d2565b330fb1cd4a",
          "body": "fkYAML version 0.4.0",
          "is_bot": false,
          "headline": "Merge tag 'v0.4.0' into develop",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-10T15:46:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fdd76ec676c81ace1c9db98211916724f6f7a88",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.4.0'",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-10T15:15:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9e87ed442c54a4b5f107a99e4134f91fdec9682",
          "body": null,
          "is_bot": false,
          "headline": "set version to 0.4.0",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-10T15:15:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5e73da7c26d1ce846b9ac87881bd5d728c393c0",
          "body": "… (#439)",
          "is_bot": false,
          "headline": "Fix round-trip issue in float serialization using scientific notation…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-09T13:13:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d049cad4c9880abb7478f8c1ad697f5e68cf98a3",
          "body": "* implemented reverse iterator for container nodes\n\n* added functions in basic_node for reverse iterations\n\n* updated api documentation pages\n\n* fixed links to documentation pages\n\n* fixed segmentation violation signal errors",
          "is_bot": false,
          "headline": "Support reverse iterations over sequence/mapping nodes (#440)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-08T11:41:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02d8c660bdb0321560417dbbc8a713aa9117f033",
          "body": "…#438)\n\n* removed unnecessary tag dispatcher structs\n\n* added container types as basic_node's member types\n\n* minor fixes for iterator class implementation\n\n* make iterators constructible & comparable with value constness is different from each other\n\n* run amalgamation\n\n* added cbegin() & cend() functions to basic_node class",
          "is_bot": false,
          "headline": "Make node iterators compatible with different value type const-ness (…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-12-07T09:39:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f61110591dd24e8456101e556c4c400e531759ca",
          "body": "* fixed invalid parse result when input YAML begins with a newline\n\n* added missing includes in example cpp file for get_value()\n\n* resolved warnings in building examples\n\n* [bot] run clang-format & amalgamation",
          "is_bot": false,
          "headline": "Fix parsing input which begins with a newline & indentation (#437)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-30T15:05:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bfe1b339cd54296b499f532b7041ae7ca033af5",
          "body": "* added g++4.8, 5, 6 for CI\n\n* updated clang versions to use in ci\n\n* updated the supported compilers list",
          "is_bot": false,
          "headline": "Add more GCC & Clang versions to use in GitHub Actions workflows (#436)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-30T06:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3ada062834c7aff9bd3a6e8fe077af05f476c60",
          "body": "* separate block scalar content indent level into base and indicated indent levels in lexer\n\n* emit error if a following content line of a block scalar is less indented\n\n* emit error if a leading empty line is more indented than the first non-empty line in a block scalar\n\n* fixed parsing more-indented empty lines in block folded scalar contents in scalar_parser\n\n* fixed clang-tidy error",
          "is_bot": false,
          "headline": "Fixed bugs in parsing block scalars (#435)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-26T00:03:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca34fe9de249aebf60ad6dc905017b66807890c7",
          "body": null,
          "is_bot": false,
          "headline": "Emit error if an anchor is specified to an alias (#434)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-24T08:42:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d0542df1e78b3f0928d6a10acd7e82c37f868f1",
          "body": "* supported multiline plain scalars in lexer\n\n* support multiline plain scalars in scalar_parser\n\n* added more test cases for multiline plain scalars\n\n* silenced clang-tidy error\n\n* [bot] run clang-format & amalgamation\n\n* fixed clang-tidy errors",
          "is_bot": false,
          "headline": "Support parsing multiline plain scalars (#432)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-24T05:50:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39b4435139064da0b6fd169c4388001d2bc92ffe",
          "body": "… (#433)\n\n* updated Xcode versions to use with the macos-14 & macos-15 runner images\n\n* removed GA workflow jobs using the macos-12 runner image\n\n* updated the supported compilers list",
          "is_bot": false,
          "headline": "Update GitHub Actions workflow jobs using macOS related runner images…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-24T03:45:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b6ac149fee11eb624c2ac823329c1ad836af096",
          "body": "…f not forced with tag (#431)",
          "is_bot": false,
          "headline": "Stop throwing parse_error on string-to-int/float conversion failure i…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-20T15:25:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84f64db1b58e68df5bef61cfc3d955fdf120472c",
          "body": null,
          "is_bot": false,
          "headline": "Resolve the C4800 warning when compiled with MSVC (#430)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-19T02:08:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2233025ef8ca2c0a2fdecec10f7777a97712bd83",
          "body": "fkYAML version 0.3.14",
          "is_bot": false,
          "headline": "Merge tag 'v0.3.14' into develop",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T14:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05dc36dc5fdf7b7326a6824bc2e2e06b5595f85c",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.3.14'",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T14:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e34b19f6b250391157e985bacc7a19525687c90f",
          "body": null,
          "is_bot": false,
          "headline": "set version to 0.3.14",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T14:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd052ac5def74a4cdfd70494a8282dcd0c1e897c",
          "body": null,
          "is_bot": false,
          "headline": "Exclude detail::unreachable() from coverage target (#426)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T09:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "248dcba5354d0b9ddf58e3ba033898b07f0cff1e",
          "body": "… but necessary code (#425)\n\n* use std::unreachable() or the likes for dead but necessary codes like default case",
          "is_bot": false,
          "headline": "Use std::unreachable or similar compiler specific extensions for dead…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T08:51:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf79a865871fc843b7bbbce17df6c1e6247fee8e",
          "body": "* emit static_assertion errors on get_value() calls with reference, pointer and C-style array types\r\n\r\n* clarify type restrictions of get_value() and get_value_ref() APIs\r\n\r\n* run amalgamation",
          "is_bot": false,
          "headline": "Clarify type restrictions of get_value() & get_value_ref() APIs (#424)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-16T04:44:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f121341fb92c643919ca9d51bb28a006cf375872",
          "body": "…(#423)",
          "is_bot": false,
          "headline": "Fix duplicate include error if clang-tidy helper file already exists …",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-13T12:46:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f59b1371bae9a708727c5c93114c3f97be03b61",
          "body": "* added fkyaml_fwd.hpp to provide forward declarations\r\n\r\n* no include of cpp_config_macros.hpp in version_macros.hpp & added define_macros.hpp\r\n\r\n* updated amalgamation scripts and CONTRIBUTING.md\r\n\r\n* added descriptions about the header file for forward declarations",
          "is_bot": false,
          "headline": "Add forward declaration header (#422)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-12T13:14:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaaff43fc06bbf71054cc810982d837ae1aa591a",
          "body": "* support more STL container types in from_node functions\r\n\r\n* updated document page and example for get_value API\r\n\r\n* added tests for missing lines/branches\r\n\r\n* fixed compile & usan errors",
          "is_bot": false,
          "headline": "Support more STL types in from_node (#421)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-11-11T19:55:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b2490c9cde2c67075aca2aa58d3ee7d9d426ac3",
          "body": "* added internal numeric scalar conversions in from_node() functions\r\n\r\n* updated document/example for the basic_node::get_value() API\r\n\r\n* added node to uint64_t conversions",
          "is_bot": false,
          "headline": "Numeric scalar conversions inside basic_node::get_value API (#419)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-27T20:29:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f704b08801f2a9a50603ebcee5a70b31cadbee4",
          "body": "* fixed clang-tidy(14.0.0) warnings somehow shadowed in using 18.1.3\r\n\r\n* [bot] run clang-format & amalgamation",
          "is_bot": false,
          "headline": "Fix somehow shadowed clang-tidy warnings (#418)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-27T04:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b18b27af29473b7248059b717322b1d68fb054aa",
          "body": "* added newly added Xcode versions for macos-14 & macos-15 in macos.yml\r\n\r\n* updated supported compilers list",
          "is_bot": false,
          "headline": "GA workflow jobs with more AppleClang versions on macOS (#416)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-26T19:17:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f4f4ddb316d7ede43ed5e5c7b253bba20c7fe27",
          "body": "* added -Wdeprecated compile option to unit test app builds\r\n\r\n* disable -Wdeprecated-literal-operator if clang compiler is detected",
          "is_bot": false,
          "headline": "Disable -Wdeprecated-literal-operator warnings (#417)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-26T16:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2c442547dcaccc3313c2858dd5b67387b39706b",
          "body": "* use clang-tidy installed in ubuntu-24.04 runner image\r\n\r\n* updated clang-format version to 18.1.3 (same as ubuntu-24.04)\r\n\r\n* updated runner image tags for CI jobs in workflows/ubuntu.yml\r\n\r\n* updated CONTRIBUTING.md regarding clang-format tool version\r\n\r\n* fixed undefined reference link error and coverage loss\r\n\r\n* [bot] run clang-format & amalgamation\r\n\r\n* fixed coverage loss again",
          "is_bot": false,
          "headline": "Update GA workflow jobs for ubuntu24.04 (#415)",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-26T09:21:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31d375699beb0a354f96edf0f5b1fb69ba3916ba",
          "body": "… (#414)\n\n* fixed false error on floating point value with the exponent\r\n\r\n* fixed wrong scalar value type detections from some other floating point number formats",
          "is_bot": false,
          "headline": "Fix wrong scalar value type detection from floating point value token…",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-20T05:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac8a28a9021a66cc3d26f554592c51ec00a2072",
          "body": "fkYAML version 0.3.13",
          "is_bot": false,
          "headline": "Merge tag 'v0.3.13' into develop",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-14T08:07:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01662d9d939e9ce7d91523f1fc9fe06af34ce365",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'release/v0.3.13'",
          "author_name": "fktn",
          "author_login": "fktn-k",
          "committed_at": "2024-10-14T07:18:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 29,
      "commits_last_year": 20,
      "latest_release_at": "2026-07-18T16:30:34Z",
      "latest_release_tag": "v0.4.3",
      "releases_from_tags": false,
      "days_since_last_push": 7,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 18,
      "mean_days_between_releases": 85.1
    },
    "artifacts": {
      "collected": true,
      "structure": [],
      "declarations": []
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "readme_badges": {
        "hosts": [
          "app.codacy.com",
          "coveralls.io",
          "github.com",
          "shields.io"
        ],
        "total": 11,
        "header": 11,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 20,
      "stars": 151,
      "watchers": 6,
      "fork_history": {
        "days": [
          {
            "date": "2024-03-17",
            "count": 1
          },
          {
            "date": "2024-06-28",
            "count": 1
          },
          {
            "date": "2024-07-16",
            "count": 1
          },
          {
            "date": "2024-09-16",
            "count": 1
          },
          {
            "date": "2025-01-05",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2025-04-14",
            "count": 1
          },
          {
            "date": "2025-04-17",
            "count": 2
          },
          {
            "date": "2025-09-16",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-12-14",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-24",
            "count": 1
          },
          {
            "date": "2026-06-16",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 20,
        "total_forks": 20
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "docs/Makefile",
        "tools/natvis_generator/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 613567,
      "source_files_sampled": 198,
      "oversized_source_files": 7,
      "agent_instruction_files": [
        ".github/copilot-instructions.md"
      ],
      "agent_instruction_max_bytes": 4619
    },
    "dependencies": {
      "manifests": [
        "docs/requirements.txt"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "gitpython",
            "direct": false,
            "version": "3.1.43",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-2f96-g7mh-g2hx",
              "GHSA-3f7w-8rr8-f37f",
              "GHSA-3rp5-jjmw-4wv2",
              "GHSA-539m-9xh6-q6rr",
              "GHSA-6p8h-3wgx-97gf",
              "GHSA-7545-fcxq-7j24",
              "GHSA-94p4-4cq8-9g67",
              "GHSA-956x-8gvw-wg5v",
              "GHSA-fjr4-x663-mwxc",
              "GHSA-mv93-w799-cj2w"
            ],
            "fixed_version": "3.1.57",
            "advisory_count": 20,
            "oldest_advisory_days": 102
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.1.7",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.2,
            "advisory_ids": [
              "PYSEC-2026-2132"
            ],
            "fixed_version": "8.3.3",
            "advisory_count": 1,
            "oldest_advisory_days": 97
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8.8,
            "advisory_ids": [
              "GHSA-cpwx-vrp4-4pq7",
              "GHSA-gmj6-6f8f-6699",
              "GHSA-q2x7-8rv6-6q7h",
              "PYSEC-2026-1471",
              "PYSEC-2026-1472",
              "PYSEC-2026-1475"
            ],
            "fixed_version": "3.1.6",
            "advisory_count": 6,
            "oldest_advisory_days": 590
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.7",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-5wmx-573v-2qwq",
              "PYSEC-2026-89"
            ],
            "fixed_version": "3.8.1",
            "advisory_count": 2,
            "oldest_advisory_days": 153
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.2.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2xpw-w6gg-jr37",
              "GHSA-38jv-5279-wg99",
              "GHSA-48p4-8xcf-vxj5",
              "GHSA-gm62-xv2j-4w53",
              "GHSA-pq67-6m6q-mj2v",
              "GHSA-qccp-gfcp-xxvc",
              "PYSEC-2026-141",
              "PYSEC-2026-1994",
              "PYSEC-2026-1996",
              "PYSEC-2026-1997"
            ],
            "fixed_version": "2.7.0",
            "advisory_count": 12,
            "oldest_advisory_days": 413
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.10",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-65pc-fj4g-8rjx",
              "PYSEC-2026-215"
            ],
            "fixed_version": "3.15",
            "advisory_count": 2,
            "oldest_advisory_days": 78
          },
          {
            "name": "pymdown-extensions",
            "direct": false,
            "version": "10.12",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-62q4-447f-wv8h",
              "GHSA-9xwg-3r6f-jcx2",
              "GHSA-r6h4-mm7h-8pmq",
              "PYSEC-2026-1825",
              "PYSEC-2026-2999",
              "PYSEC-2026-3609"
            ],
            "fixed_version": "11.0.0",
            "advisory_count": 6,
            "oldest_advisory_days": 232
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.3",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.5,
            "advisory_ids": [
              "GHSA-9hjg-9r4m-mvj7",
              "GHSA-gc5v-m9x4-r6x2",
              "PYSEC-2026-1872",
              "PYSEC-2026-2275"
            ],
            "fixed_version": "2.33.0",
            "advisory_count": 4,
            "oldest_advisory_days": 422
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.18.0",
            "severity": "low",
            "ecosystem": "pypi",
            "cvss_score": 3.3,
            "advisory_ids": [
              "GHSA-5239-wwwm-4pmq",
              "PYSEC-2026-2987"
            ],
            "fixed_version": "2.20.0",
            "advisory_count": 2,
            "oldest_advisory_days": 136
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 4,
          "critical": 1,
          "moderate": 3
        },
        "advisory_count": 55,
        "affected_count": 9,
        "assessed_count": 34,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "babel",
            "direct": false,
            "version": "2.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2024.12.14",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.1.7",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "ghp-import",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gitdb",
            "direct": false,
            "version": "4.0.11",
            "ecosystem": "pypi"
          },
          {
            "name": "gitpython",
            "direct": false,
            "version": "3.1.43",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.10",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.7",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mergedeep",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-get-deps",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-git-revision-date-localized-plugin",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material",
            "direct": false,
            "version": "9.5.49",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material-extensions",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "24.2",
            "ecosystem": "pypi"
          },
          {
            "name": "paginate",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymdown-extensions",
            "direct": false,
            "version": "10.12",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": "2024.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml-env-tag",
            "direct": false,
            "version": "0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2024.11.6",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.3",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "smmap",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 34,
        "direct_count": 0,
        "indirect_count": 34
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 321,
        "open_issues": 1,
        "closed_ratio": 0.988,
        "closed_issues": 85,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "fktn-k",
          "commits": 948,
          "avatar_url": "https://avatars.githubusercontent.com/u/141519741?v=4"
        },
        {
          "type": "User",
          "login": "sndth",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/75499293?v=4"
        },
        {
          "type": "User",
          "login": "stephenwhittle",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/7070635?v=4"
        },
        {
          "type": "User",
          "login": "johan-gson",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/32481323?v=4"
        },
        {
          "type": "User",
          "login": "edmundkrain",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/154244309?v=4"
        },
        {
          "type": "User",
          "login": "rioki",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/130296?v=4"
        },
        {
          "type": "User",
          "login": "mgodf7",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/88255068?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.972
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codeql.yml",
        "coverage.yml",
        "format_check.yml",
        "macos.yml",
        "publish_docs.yml",
        "release_package.yml",
        "ubuntu.yml",
        "windows.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": true,
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 7,
            "reason": "19 out of 25 merged PRs checked by a CI test -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 2,
            "reason": "badge detected: InProgress",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 4,
            "reason": "Found 13/30 approved changesets -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 9,
            "reason": "SAST tool detected but not run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "34 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b0a41e859c0c0b77ef718d95c2959a9cc21401fa",
        "ran_at": "2026-08-06T02:40:34Z",
        "aggregate_score": 4.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 0,
        "decided_7d": 0,
        "merged_30d": 9,
        "authors_30d": 3,
        "decided_30d": 11,
        "sample_size": 60,
        "window_days": 30,
        "sample_exhausted": false,
        "authors_probed_30d": 3,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 0,
        "newcomer_authors_30d": 1,
        "newcomer_decided_30d": 1
      },
      "ci_last_run_at": "2026-08-03T02:33:53Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-29T22:23:00Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 404,
          "created_at": "2024-09-30T23:21:03Z",
          "last_comment_at": "2025-02-09T02:09:26Z",
          "last_comment_author": "fktn-k"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/fktn-k/fkYAML",
    "host": "github.com",
    "name": "fkYAML",
    "owner": "fktn-k"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 63 is calibrated to 71 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 63,
            "calibrated": 71,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 71,
      "inputs": {
        "security": 57,
        "vitality": 70,
        "community": 70,
        "governance": 41,
        "calibration": "2026-08-02",
        "engineering": 81,
        "ai_readiness": 67,
        "weighted_overall_raw": 63
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 70,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "commits_last_year": 20,
              "human_commit_share": 1,
              "days_since_last_push": 7,
              "active_weeks_last_year": 4
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "20 commits in the last year",
                "points": 11.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "releases_count": 29,
              "latest_release_tag": "v0.4.3",
              "releases_from_tags": false,
              "days_since_latest_release": 18,
              "mean_days_between_releases": 85.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "29 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 29
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 18 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~85.1 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 85.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 7,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 7 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 70,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "forks": 20,
              "stars": 151,
              "watchers": 6,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "151 stars",
                "points": 35.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 151
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "20 forks",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "6 watchers",
                "points": 3.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": 11,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [
                "app.codacy.com",
                "coveralls.io",
                "github.com",
                "shields.io"
              ],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "weak",
        "name": "Sustainability & Governance",
        "value": 41,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.972
            },
            "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 97% of commits",
                "points": 0.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 321,
              "open_issues": 1,
              "closed_issues": 85,
              "prs_merged_7d": 0,
              "prs_decided_7d": 0,
              "prs_merged_30d": 9,
              "prs_decided_30d": 11,
              "issue_closed_ratio": 0.988,
              "closed_unmerged_prs": 6,
              "first_time_authors_30d": 1,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "99% of issues closed",
                "points": 41.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "321/327 decided PRs merged",
                "points": 29.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 321,
                      "decided": 327
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "0/1 first-time contributors' PRs merged in 30d",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "newcomer_prs_merged",
                    "params": {
                      "days": 30,
                      "merged": 0,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 13/30 approved changesets -- score normalized to 4",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "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": 32,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "fktn-k",
              "public_repos": 2,
              "account_age_days": 1096
            },
            "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": "7 followers of fktn-k",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "fktn-k"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~3 yr old",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 81,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "8 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "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": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "19 out of 25 merged PRs checked by a CI test -- score normalized to 7",
                "points": 14,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "exceptional",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "cmake",
                "cpp",
                "cpp11",
                "cpp14",
                "cpp17",
                "cpp20",
                "header-only",
                "header-only-library",
                "yaml",
                "yaml-parser",
                "fkyaml",
                "cpp23",
                "single-header"
              ],
              "has_wiki": true,
              "homepage": "https://fktn-k.github.io/fkYAML/",
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://fktn-k.github.io/fkYAML/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "13 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 57,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "19 out of 25 merged PRs checked by a CI test -- score normalized to 7",
                "points": 1.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "badge detected: InProgress",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 13/30 approved changesets -- score normalized to 4",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "20 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool detected but not run on all commits",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "34 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 34 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 34
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 55,
              "affected_packages": 9,
              "assessed_packages": 34,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 4, moderate 3, low 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 34,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "exceptional",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 3
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 67,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.75,
              "agent_instruction_files": [
                ".github/copilot-instructions.md"
              ],
              "agent_instruction_max_bytes": 4619
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md"
                    }
                  }
                ],
                "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": "75 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 75,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "docs/Makefile",
                "tools/natvis_generator/Makefile"
              ],
              "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": "Makefile, docs/Makefile, tools/natvis_generator/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, docs/Makefile, tools/natvis_generator/Makefile"
                    }
                  }
                ],
                "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": "C++ (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "C++",
              "largest_source_bytes": 613567,
              "source_files_sampled": 198,
              "oversized_source_files": 7
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C++ (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "7/198 source files over 60KB",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 198,
                      "oversized": 7
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "weak",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [],
      "labels": [],
      "scores": {
        "library": 2
      },
      "primary": null,
      "evidence": [
        {
          "tier": "description",
          "label": "library",
          "source": "description:library",
          "weight": 2
        }
      ],
      "artifacts": [],
      "confidence": "none",
      "host_extension": false,
      "runs_as_process": false,
      "consumed_by_code": false
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-06T02:40:51.863768Z",
  "schema_version": "0.31.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/fktn-k/fkYAML.svg",
  "full_name": "fktn-k/fkYAML",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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