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

Expensify / react-native-onyx

Persistent, offline-first state management solution for React Native. Easy to use with minimal config and boilerplate.

TypeScriptMIT★ 231 зірка⑂ 96 форківз лист. 2020 р.Переглянути на GitHub ↗
ТипБібліотекаяк це визначено

Expensify/react-native-onyx має індекс здоров’я 88 зі 100, що відповідає смузі «Відмінний». Найвищий показник — Vitality (95/100), найнижчий — Security (46/100). Останнє оновлення було 4 дні тому. Більшість нещодавньої роботи виконують 8 учасників.

88
загалом / 100
Відмінний

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

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

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

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

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

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

Власність

Expensify, IncОрганізація
1 013 підписників66 публічних репозиторіївз лист. 2010 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npmreact-native-onyx3.0.9438 9623664 дні томуreact-nativereactpersistent-storagepub-sub

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

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

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

95Винятковий · 21% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 4 дн. тому
34.6/36Ритм комітів — 50/52 тижнів із комітами
18/18Обсяг комітів — 927 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year927
human_commit_share0,72
days_since_last_push4
active_weeks_last_year50
Як обчислюється оцінка
16.2/27Випускає релізи — 100 тегів версій (без релізів GitHub)
36/36Свіжість релізів — останній реліз 4 дн. тому
27/27Ритм релізів — реліз кожні ~5 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count100
latest_release_tag3.0.94
releases_from_tagsтак
days_since_latest_release4
mean_days_between_releases5
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

64Помірний · 17% загального індексу
Як обчислюється оцінка
38.3/60Зірки — 231 зірок
16.5/25Форки — 96 форків
8.3/15Спостерігачі — 32 спостерігачів
Використані вхідні дані
forks96
stars231
watchers32
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
readme_badges
has_contributingні
has_issue_templateні
has_code_of_conductні
readme_badge_services
has_pull_request_templateтак
Як обчислюється оцінка
61.2/80Щомісячні завантаження — 38 962 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesreact-native-onyx
dependents
ecosystemsnpm
total_downloads
monthly_downloads38 962
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

84Відмінний · 23% загального індексу
Як обчислюється оцінка
54/54Бас-фактор — на 8 контриб’ютор(ів) припадає половина всіх комітів
19.2/22.5Розподіл комітів — головний контриб’ютор — автор 15% комітів
13.5/13.5Широта контриб’юторів — 98 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 10 contributing companies or organizations
Використані вхідні дані
bus_factor8
contributors_sampled98
top_contributor_share0,148
Як обчислюється оцінка
25.5/42Вирішення issue — закрито 61% issue
25.7/30Прийняття PR — злито 630/734 вирішених PR
0/13Newcomer PR acceptance — за 30 дн. не вирішено жодного PR від новачка
3/15OpenSSF Scorecard: Code-Review — Found 5/17 approved changesets -- score normalized to 2
Використані вхідні дані
merged_prs630
open_issues20
closed_issues31
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0,608
closed_unmerged_prs104
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Виключено з оцінювання (немає даних або не застосовно): newcomer_pr_acceptance. Залишкові ваги перенормовано.
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
21.6/25Охоплення власника — 1 013 підписників у Expensify
25/25Послужний список — 66 публічних репозиторіїв, вік облікового запису ~15 р.
Використані вхідні дані
followers1 013
owner_typeOrganization
is_verified
owner_loginExpensify
public_repos66
account_age_days5 738

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

100Винятковий
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 4 дн. тому
20/20Історія версій — 366 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesreact-native-onyx
ecosystemsnpm
any_deprecatedні
min_days_since_publish4

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

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

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

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

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

Безпека

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

46Слабкий · 16% загального індексу

Стан безпеки

46Слабкий
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
4.5/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 5/17 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 10 contributing companies or organizations
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 — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 70 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,6
Виключено з оцінювання (немає даних або не застосовно): packaging, signed_releases. Залишкові ваги перенормовано.

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

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

60Помірний · 4% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
26.7/40Читабельна історія комітів — намір зазначено у 36 з 72 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,5
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — eslint.config.mjs
11/11Статична перевірка типів — tsconfig.json
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 6 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
8/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configstsconfig.json
agent_commit_share0,06
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
51.1/55Керовані розміри файлів — 7/100 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes1 135 705
source_files_sampled100
oversized_source_files7

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

231зірок GitHub
98контриб'юторів
927комітів за останні 12 місяців
4днів від останнього пушу
100релізів
8бас-фактор
20відкритих issue
npmпакетних екосистем

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

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:react-native-onyx@3.0.94; advisories assessed against the repository dependency graph instead

Докладніше

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

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

0204060801009242020-122023-102026-07
Мажорні 0Мінорні 0Патчі 97

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

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

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

10Binary-Artifactsno binaries found in the repo
6Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 5/17 approved changesets -- score normalized to 2
10Contributorsproject has 10 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities70 existing vulnerabilities detected
Прямі залежності 7
РеєстрПакетОбмеження версіїМаніфест
npmascii-table0.0.9package.json
npmfast-equals^4.0.3package.json
npmlodash.bindall^4.4.0package.json
npmlodash.clone^4.5.0package.json
npmlodash.pick^4.4.0package.json
npmlodash.transform^4.6.0package.json
npmunderscore^1.13.6package.json
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 30202,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 7544,
        "TypeScript": 893350
      },
      "pushed_at": "2026-07-24T09:22:05Z",
      "created_at": "2020-11-03T23:55:52Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T10:05:04Z",
      "description": "Persistent, offline-first state management solution for React Native. Easy to use with minimal config and boilerplate.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://use.expensify.com",
      "name": "Expensify, Inc",
      "type": "Organization",
      "login": "Expensify",
      "company": null,
      "location": "San Francisco, Ironwood, Denver, London, Berlin, Melbourne, Portland",
      "followers": 1013,
      "avatar_url": "https://avatars.githubusercontent.com/u/476779?v=4",
      "created_at": "2010-11-11T03:59:16Z",
      "is_verified": null,
      "public_repos": 66,
      "account_age_days": 5738
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "3.0.94",
          "kind": "patch",
          "published_at": "2026-07-24T09:22:03Z"
        },
        {
          "tag": "3.0.93",
          "kind": "patch",
          "published_at": "2026-07-22T20:25:39Z"
        },
        {
          "tag": "3.0.92",
          "kind": "patch",
          "published_at": "2026-07-22T15:46:59Z"
        },
        {
          "tag": "3.0.91",
          "kind": "patch",
          "published_at": "2026-07-07T17:51:34Z"
        },
        {
          "tag": "3.0.90",
          "kind": "patch",
          "published_at": "2026-06-30T17:43:43Z"
        },
        {
          "tag": "3.0.89",
          "kind": "patch",
          "published_at": "2026-06-30T14:50:57Z"
        },
        {
          "tag": "3.0.88",
          "kind": "patch",
          "published_at": "2026-06-26T16:19:51Z"
        },
        {
          "tag": "3.0.87",
          "kind": "patch",
          "published_at": "2026-06-11T22:27:47Z"
        },
        {
          "tag": "3.0.86",
          "kind": "patch",
          "published_at": "2026-06-11T00:47:13Z"
        },
        {
          "tag": "3.0.85",
          "kind": "patch",
          "published_at": "2026-06-09T13:51:08Z"
        },
        {
          "tag": "3.0.84",
          "kind": "patch",
          "published_at": "2026-06-01T17:43:00Z"
        },
        {
          "tag": "3.0.83",
          "kind": "patch",
          "published_at": "2026-05-29T23:14:36Z"
        },
        {
          "tag": "3.0.82",
          "kind": "patch",
          "published_at": "2026-05-29T18:11:55Z"
        },
        {
          "tag": "3.0.81",
          "kind": "patch",
          "published_at": "2026-05-29T17:37:25Z"
        },
        {
          "tag": "3.0.80",
          "kind": "patch",
          "published_at": "2026-05-27T17:34:12Z"
        },
        {
          "tag": "3.0.79",
          "kind": "patch",
          "published_at": "2026-05-25T13:59:18Z"
        },
        {
          "tag": "3.0.78",
          "kind": "patch",
          "published_at": "2026-05-22T12:16:32Z"
        },
        {
          "tag": "3.0.77",
          "kind": "patch",
          "published_at": "2026-05-19T20:11:29Z"
        },
        {
          "tag": "3.0.76",
          "kind": "patch",
          "published_at": "2026-05-19T18:35:23Z"
        },
        {
          "tag": "3.0.75",
          "kind": "patch",
          "published_at": "2026-05-18T13:42:14Z"
        },
        {
          "tag": "3.0.74",
          "kind": "patch",
          "published_at": "2026-05-11T16:10:57Z"
        },
        {
          "tag": "3.0.73",
          "kind": "patch",
          "published_at": "2026-05-11T10:14:50Z"
        },
        {
          "tag": "3.0.72",
          "kind": "patch",
          "published_at": "2026-05-06T17:46:11Z"
        },
        {
          "tag": "3.0.71",
          "kind": "patch",
          "published_at": "2026-04-29T11:31:27Z"
        },
        {
          "tag": "3.0.70",
          "kind": "patch",
          "published_at": "2026-04-22T14:57:58Z"
        },
        {
          "tag": "3.0.69",
          "kind": "patch",
          "published_at": "2026-04-17T18:32:01Z"
        },
        {
          "tag": "3.0.68",
          "kind": "patch",
          "published_at": "2026-04-16T16:57:39Z"
        },
        {
          "tag": "3.0.67",
          "kind": "patch",
          "published_at": "2026-04-16T12:03:14Z"
        },
        {
          "tag": "3.0.66",
          "kind": "patch",
          "published_at": "2026-04-15T22:32:10Z"
        },
        {
          "tag": "3.0.65",
          "kind": "patch",
          "published_at": "2026-04-15T19:36:07Z"
        },
        {
          "tag": "3.0.64",
          "kind": "patch",
          "published_at": "2026-04-13T20:00:10Z"
        },
        {
          "tag": "3.0.63",
          "kind": "patch",
          "published_at": "2026-04-10T22:14:38Z"
        },
        {
          "tag": "3.0.62",
          "kind": "patch",
          "published_at": "2026-04-10T20:58:24Z"
        },
        {
          "tag": "3.0.61",
          "kind": "patch",
          "published_at": "2026-04-02T15:52:46Z"
        },
        {
          "tag": "3.0.60",
          "kind": "patch",
          "published_at": "2026-04-01T18:24:33Z"
        },
        {
          "tag": "3.0.59",
          "kind": "patch",
          "published_at": "2026-04-01T09:54:41Z"
        },
        {
          "tag": "3.0.58",
          "kind": "patch",
          "published_at": "2026-03-31T23:12:16Z"
        },
        {
          "tag": "3.0.57",
          "kind": "patch",
          "published_at": "2026-03-30T15:10:49Z"
        },
        {
          "tag": "3.0.56",
          "kind": "patch",
          "published_at": "2026-03-30T14:26:11Z"
        },
        {
          "tag": "3.0.55",
          "kind": "patch",
          "published_at": "2026-03-30T12:57:46Z"
        },
        {
          "tag": "3.0.54",
          "kind": "patch",
          "published_at": "2026-03-26T16:14:37Z"
        },
        {
          "tag": "3.0.53",
          "kind": "patch",
          "published_at": "2026-03-23T22:12:28Z"
        },
        {
          "tag": "3.0.52",
          "kind": "patch",
          "published_at": "2026-03-23T18:29:34Z"
        },
        {
          "tag": "3.0.51",
          "kind": "patch",
          "published_at": "2026-03-23T18:24:27Z"
        },
        {
          "tag": "3.0.50",
          "kind": "patch",
          "published_at": "2026-03-20T20:23:07Z"
        },
        {
          "tag": "3.0.49",
          "kind": "patch",
          "published_at": "2026-03-20T16:54:37Z"
        },
        {
          "tag": "3.0.48",
          "kind": "patch",
          "published_at": "2026-03-16T15:43:41Z"
        },
        {
          "tag": "3.0.47",
          "kind": "patch",
          "published_at": "2026-03-15T23:18:19Z"
        },
        {
          "tag": "3.0.46",
          "kind": "patch",
          "published_at": "2026-03-12T16:11:41Z"
        },
        {
          "tag": "3.0.45",
          "kind": "patch",
          "published_at": "2026-03-06T18:24:52Z"
        },
        {
          "tag": "3.0.44",
          "kind": "patch",
          "published_at": "2026-03-06T00:02:01Z"
        },
        {
          "tag": "3.0.43",
          "kind": "patch",
          "published_at": "2026-03-03T23:45:39Z"
        },
        {
          "tag": "3.0.42",
          "kind": "patch",
          "published_at": "2026-02-26T21:20:26Z"
        },
        {
          "tag": "3.0.41",
          "kind": "patch",
          "published_at": "2026-02-26T16:42:04Z"
        },
        {
          "tag": "3.0.40",
          "kind": "patch",
          "published_at": "2026-02-23T22:02:13Z"
        },
        {
          "tag": "3.0.39",
          "kind": "patch",
          "published_at": "2026-02-19T18:57:48Z"
        },
        {
          "tag": "3.0.38",
          "kind": "patch",
          "published_at": "2026-02-19T15:58:45Z"
        },
        {
          "tag": "3.0.37",
          "kind": "patch",
          "published_at": "2026-02-17T17:22:36Z"
        },
        {
          "tag": "3.0.36",
          "kind": "patch",
          "published_at": "2026-02-13T18:54:25Z"
        },
        {
          "tag": "3.0.35",
          "kind": "patch",
          "published_at": "2026-02-13T09:36:07Z"
        },
        {
          "tag": "3.0.34",
          "kind": "patch",
          "published_at": "2026-02-06T18:18:30Z"
        },
        {
          "tag": "3.0.33",
          "kind": "patch",
          "published_at": "2026-02-04T14:38:25Z"
        },
        {
          "tag": "3.0.32",
          "kind": "patch",
          "published_at": "2026-01-24T18:05:05Z"
        },
        {
          "tag": "3.0.31",
          "kind": "patch",
          "published_at": "2026-01-20T16:58:10Z"
        },
        {
          "tag": "3.0.30",
          "kind": "patch",
          "published_at": "2026-01-12T15:44:03Z"
        },
        {
          "tag": "3.0.29",
          "kind": "patch",
          "published_at": "2026-01-09T21:50:23Z"
        },
        {
          "tag": "3.0.28",
          "kind": "patch",
          "published_at": "2026-01-09T19:11:04Z"
        },
        {
          "tag": "3.0.27",
          "kind": "patch",
          "published_at": "2025-12-29T16:01:22Z"
        },
        {
          "tag": "3.0.26",
          "kind": "patch",
          "published_at": "2025-12-23T13:40:11Z"
        },
        {
          "tag": "3.0.25",
          "kind": "patch",
          "published_at": "2025-12-17T14:36:18Z"
        },
        {
          "tag": "3.0.24",
          "kind": "patch",
          "published_at": "2025-12-11T18:29:10Z"
        },
        {
          "tag": "3.0.23",
          "kind": "patch",
          "published_at": "2025-12-11T08:26:07Z"
        },
        {
          "tag": "3.0.22",
          "kind": "patch",
          "published_at": "2025-12-09T15:21:20Z"
        },
        {
          "tag": "3.0.21",
          "kind": "patch",
          "published_at": "2025-12-08T17:40:57Z"
        },
        {
          "tag": "3.0.20",
          "kind": "patch",
          "published_at": "2025-12-08T14:22:51Z"
        },
        {
          "tag": "3.0.19",
          "kind": "patch",
          "published_at": "2025-12-03T11:58:10Z"
        },
        {
          "tag": "3.0.18",
          "kind": "patch",
          "published_at": "2025-12-02T22:48:21Z"
        },
        {
          "tag": "3.0.17",
          "kind": "patch",
          "published_at": "2025-11-20T03:17:50Z"
        },
        {
          "tag": "3.0.16",
          "kind": "patch",
          "published_at": "2025-11-19T20:22:41Z"
        },
        {
          "tag": "3.0.15",
          "kind": "patch",
          "published_at": "2025-11-14T13:21:32Z"
        },
        {
          "tag": "3.0.14",
          "kind": "patch",
          "published_at": "2025-11-11T12:55:31Z"
        },
        {
          "tag": "3.0.13",
          "kind": "patch",
          "published_at": "2025-11-06T14:57:02Z"
        },
        {
          "tag": "3.0.12",
          "kind": "patch",
          "published_at": "2025-11-05T22:41:57Z"
        },
        {
          "tag": "3.0.11",
          "kind": "patch",
          "published_at": "2025-11-04T21:17:08Z"
        },
        {
          "tag": "3.0.10",
          "kind": "patch",
          "published_at": "2025-11-03T16:00:36Z"
        },
        {
          "tag": "3.0.9",
          "kind": "patch",
          "published_at": "2025-10-31T19:58:43Z"
        },
        {
          "tag": "3.0.8",
          "kind": "patch",
          "published_at": "2025-10-23T15:37:20Z"
        },
        {
          "tag": "3.0.7",
          "kind": "patch",
          "published_at": "2025-10-23T00:55:09Z"
        },
        {
          "tag": "3.0.6",
          "kind": "patch",
          "published_at": "2025-10-10T17:38:33Z"
        },
        {
          "tag": "3.0.5",
          "kind": "patch",
          "published_at": "2025-10-10T16:51:36Z"
        },
        {
          "tag": "3.0.4",
          "kind": "patch",
          "published_at": "2025-10-09T04:54:35Z"
        },
        {
          "tag": "3.0.3",
          "kind": "patch",
          "published_at": "2025-10-06T19:03:06Z"
        },
        {
          "tag": "3.0.2",
          "kind": "patch",
          "published_at": "2025-10-03T12:57:13Z"
        },
        {
          "tag": "3.0.1",
          "kind": "patch",
          "published_at": "2025-09-25T18:54:40Z"
        },
        {
          "tag": "2.0.141",
          "kind": "patch",
          "published_at": "2025-09-25T00:35:10Z"
        },
        {
          "tag": "2.0.140",
          "kind": "patch",
          "published_at": "2025-09-10T12:22:23Z"
        },
        {
          "tag": "2.0.139",
          "kind": "patch",
          "published_at": "2025-09-02T14:18:16Z"
        },
        {
          "tag": "2.0.138",
          "kind": "patch",
          "published_at": "2025-08-28T21:00:11Z"
        },
        {
          "tag": "2.0.137",
          "kind": "patch",
          "published_at": "2025-08-27T10:56:05Z"
        },
        {
          "tag": "2.0.136",
          "kind": "patch",
          "published_at": "2025-08-26T17:05:22Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ec42979e16ea24662974aadf021a2590e12f3add",
          "body": "…-blobs-invalid-data\n\nClassify \"Failed to write blobs\" IDB errors as INVALID_DATA (never retry)",
          "is_bot": false,
          "headline": "Merge pull request #814 from callstack-internal/eliran/classify-write…",
          "author_name": "Brandon Stites",
          "author_login": "stitesExpensify",
          "committed_at": "2026-07-27T20:11:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcfaf4e83d5c9b45c2cbfb7d5a0e3f085970ad80",
          "body": "A File/Blob whose backing bytes are gone (source file modified or\ndeleted after being picked) fails structured clone at write time as\nInvalidBlob (Windows) or IOError (macOS). Retrying re-reads the same\ndead blob, so the UNKNOWN bounded-retry path can never succeed —\npromote the error into the never-retriable INVALID_DATA class.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Classify \"Failed to write blobs\" IDB errors as INVALID_DATA",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-07-24T11:59:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1eac2fe96041ca3eb4f22e5e3295158c4acc9419",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.94",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-24T09:22:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27bc8e26dd17cc792e9e95a236db2fd772568568",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.94",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-24T09:22:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b70a835378f9fb60efb9c4fbf4ac6e62738fcdec",
          "body": "…a-empty-object",
          "is_bot": false,
          "headline": "Merge pull request #812 from callstack-internal/perf/getcollectiondat…",
          "author_name": "Vit Horacek",
          "author_login": "mountiny",
          "committed_at": "2026-07-24T09:21:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bdc36a2756871f4bca9007a4b763c3447b50036",
          "body": null,
          "is_bot": false,
          "headline": "test: cover non-empty to empty collection transition",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-23T07:54:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "856bcb78f0710d839b6b845c0032d9e6289bf69d",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.93",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-22T20:25:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de0f55b52531da7a867a3502b26f70135d416fb6",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.93",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-22T20:25:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa71e47b2a1f82f2e3dfe40cf8371fff7b232432",
          "body": "…shallowequal\n\nMemoize shallowEqual verdicts by object identity in useOnyx",
          "is_bot": false,
          "headline": "Merge pull request #810 from callstack-internal/perf/memoize-useonyx-…",
          "author_name": "Youssef Lourayad",
          "author_login": "youssef-lr",
          "committed_at": "2026-07-22T20:24:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13ad6fa4de8239bde002ddffcd76ac641a8d7a1a",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.92",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-22T15:46:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccf8b7685d577029dfbbfbcf042c88c3999fe479",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.92",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-22T15:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b7dbe0922c188e2d56770cef8101f8eff63364e",
          "body": "…iables-error\n\nfeat: Split queries with many parameters into multiple queries to avoid `too many SQL variables` error",
          "is_bot": false,
          "headline": "Merge pull request #804 from margelo/@chrispader/fix-too-many-sql-var…",
          "author_name": "Vit Horacek",
          "author_login": "mountiny",
          "committed_at": "2026-07-22T15:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90c8957ba6418ecba76d1031f87c62980b000c9e",
          "body": "…onData",
          "is_bot": false,
          "headline": "perf: detect empty collections via shared empty object in getCollecti…",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-22T12:07:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51bdc1b9e33f8a6cd5d330332c9881055c545e7a",
          "body": null,
          "is_bot": false,
          "headline": "Use 'should' pattern for test descriptions",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-22T07:02:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2a846532f11a6207f52bc716610e0a042f516a6",
          "body": null,
          "is_bot": false,
          "headline": "Extract memoizedShallowEqual to separate file and add unit tests",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-21T10:33:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9073e9711d62714297f21015503f035b18a43792",
          "body": null,
          "is_bot": false,
          "headline": "fix prettier",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-21T10:24:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94767fa76f02d5009bca408a52fd5d8bc01445ba",
          "body": null,
          "is_bot": false,
          "headline": "Memoize shallowEqual verdicts by object identity in useOnyx",
          "author_name": "Tomasz Misiukiewicz",
          "author_login": "TMisiukiewicz",
          "committed_at": "2026-07-21T10:23:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6b1c1c4da7efb73c9769bc101f668817d6009a9",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.91",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-07T17:51:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05deae33a63c6bfc2fd5b9d8f3fb7e4c4d72a220",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.91",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-07-07T17:51:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "335fb74ecea2389a996acf39203f46d8819c3925",
          "body": "…with-json-aggregation\n\nPerf/optimize get all with json aggregation",
          "is_bot": false,
          "headline": "Merge pull request #805 from callstack-internal/perf/optimize-getAll-…",
          "author_name": "Rory Abraham",
          "author_login": "roryabraham",
          "committed_at": "2026-07-07T17:50:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "492160a7e981a90ab458978dce5d1624938cb16c",
          "body": null,
          "is_bot": false,
          "headline": "adjust order by",
          "author_name": "Tomasz Lesniakiewicz",
          "author_login": "rinej",
          "committed_at": "2026-07-07T17:18:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbf2c70695b73cf1ef3a024ded4357919db440a7",
          "body": null,
          "is_bot": false,
          "headline": "tests: add unit tests",
          "author_name": "Tomasz Lesniakiewicz",
          "author_login": "rinej",
          "committed_at": "2026-07-07T16:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c4d39425422bfbcf0cec1e46a2c76754cf027c9",
          "body": null,
          "is_bot": false,
          "headline": "perf: optimize getAll with json aggregation",
          "author_name": "Tomasz Lesniakiewicz",
          "author_login": "rinej",
          "committed_at": "2026-07-07T16:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33471571097ecc7f2d7354f228d95689c457310f",
          "body": null,
          "is_bot": false,
          "headline": "refactor: use NitroSQLite types instead of custom ones",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-07-02T10:38:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a97bdf6b883e4017d78a84be318bdd3cc01db55",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.90",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-30T17:43:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "865941dbfdb5feac1fbe6f58238560c1b8671eff",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.90",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-30T17:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ac99b45c6a14f493eb4dd1959f9d8cf3f4d32c",
          "body": "Remove `sourceValue` from Onyx",
          "is_bot": false,
          "headline": "Merge pull request #801 from callstack-internal/feature/onyx-store-pr-2",
          "author_name": "Issa Nimaga",
          "author_login": "inimaga",
          "committed_at": "2026-06-30T17:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a836a7a9993670c2d84802fcb5ab2037a37fd10b",
          "body": null,
          "is_bot": false,
          "headline": "fix: sqlite mock does not respect single row params in `executeBatch`",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T17:14:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f280dbec7b33a0df36fb036d9fe6f3024ed9123",
          "body": null,
          "is_bot": false,
          "headline": "fix: improve readability of `multiSet`",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T17:12:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "912e73576c2a634d519decfa69750b2553935d7b",
          "body": null,
          "is_bot": false,
          "headline": "test: add unit tests for new `query splitting` logic",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T16:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a03bad7f1bc171ab00c3e4de8f7d6186f04a245",
          "body": null,
          "is_bot": false,
          "headline": "test: add unit tests for chunkArray utility function",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T15:45:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b450c3dafadbf388fce122bf9a8a216a7db05f3e",
          "body": null,
          "is_bot": false,
          "headline": "fix: don't use non-null-assertion",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T15:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c154ed4e8f69411af1f3740f71e0a162fce06cb9",
          "body": "…e-pr-2",
          "is_bot": false,
          "headline": "Merge branch 'feature/onyx-store-poc-baseline' into feature/onyx-stor…",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-30T15:36:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3fc3b6550df75356ab7f26deeef93e6e2105e4e",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.89",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-30T14:50:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34625d8204ee3e4eb81654fe3ebd267f8c3a4026",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.89",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-30T14:50:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cc7acc500ea7fc0bb8ff992ba300014aeffc463",
          "body": "Remove waitForCollectionCallback from Onyx",
          "is_bot": false,
          "headline": "Merge pull request #799 from callstack-internal/feature/onyx-store-pr-1",
          "author_name": "Vit Horacek",
          "author_login": "mountiny",
          "committed_at": "2026-06-30T14:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e760085b47c5faf827dd20c3fb0a7a8c5998d963",
          "body": null,
          "is_bot": false,
          "headline": "fix: pass keys chunk correctly to delete batch query",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T11:20:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2023d77aa92adb2738f80de08b506f5061336e3a",
          "body": null,
          "is_bot": false,
          "headline": "refactor: optimize batch deletion of key-value pairs in SQLiteProvider",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T10:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6ea41a34f3c39e38f315164a15e6cd73a8ff0d5",
          "body": null,
          "is_bot": false,
          "headline": "feat: get `MAX_VARIABLE_NUMBER` dynamically at startup",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T09:37:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f81fbd11ce361ea6b21f460cb4c013a2dbffdf9",
          "body": "…e options",
          "is_bot": false,
          "headline": "feat: dynamically adjust maximum SQL variables based on SQLite compil…",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T09:32:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c1f2da65f91ae209f49fac2ecdd537e20fa6185",
          "body": "…s' error",
          "is_bot": false,
          "headline": "feat: split big queries into multiple to avoid 'too many sql variable…",
          "author_name": "Christoph Pader",
          "author_login": "chrispader",
          "committed_at": "2026-06-30T08:49:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2217ee0c77191185752028a490c26c98f35f3793",
          "body": null,
          "is_bot": false,
          "headline": "Update docs",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-30T08:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "456a19f21ed31477603ca44ef663ccb717636dda",
          "body": "…e-pr-2",
          "is_bot": false,
          "headline": "Merge branch 'feature/onyx-store-poc-baseline' into feature/onyx-stor…",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-30T08:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "721d95bbd9547d35e651e3ba6f3fd596c4595733",
          "body": "…e-pr-1",
          "is_bot": false,
          "headline": "Merge branch 'feature/onyx-store-poc-baseline' into feature/onyx-stor…",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-29T10:37:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d77980b983e1838e932dd5e5af03bbb9833d168",
          "body": null,
          "is_bot": false,
          "headline": "Add try/catch to fireCallbacks()",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-29T10:17:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4049c5887ccda694c81c64d26cd9b6581af5ee4e",
          "body": null,
          "is_bot": false,
          "headline": "Improve docs and types",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-29T10:17:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "608da63ade9c712606924e54f7d463bbc794c5c3",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.88",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-26T16:19:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3913c5c8aef87e6901bb67c0d3deed522a896e2f",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.88",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-26T16:19:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5004071de24df4838ac9f2476cc1a3815c8bf44d",
          "body": "…chanism\n\nRetry mechanism with retry braking system",
          "is_bot": false,
          "headline": "Merge pull request #797 from callstack-internal/feat/revised-retry-me…",
          "author_name": "Rory Abraham",
          "author_login": "roryabraham",
          "committed_at": "2026-06-26T16:19:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d17d79c52a791782b1df4d1bbfa0d7a9ecbc1e95",
          "body": null,
          "is_bot": false,
          "headline": "fix comment about half-open state",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-26T12:31:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8150b3ca3803355102d8ce66c0ecbb976b6262a0",
          "body": null,
          "is_bot": false,
          "headline": "refactor StorageCircuitBreaker.ts",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-25T12:33:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d515eea64aa03310d9fb46e72ce35ad76328ad8",
          "body": null,
          "is_bot": false,
          "headline": "refactor StorageCircuitBreaker.ts",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-25T10:43:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b6f496fe62f586ae23ab499a072ba6170c5d154",
          "body": null,
          "is_bot": false,
          "headline": "remove StorageErrorClassValue type",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-25T07:18:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7986a4b0ed31137fbb38bde7fc7f3cfcd9e2b15",
          "body": null,
          "is_bot": false,
          "headline": "move recordEviction after remove",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-25T07:12:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77f93d10588079413ea987edea2de6d79ec311fa",
          "body": null,
          "is_bot": false,
          "headline": "Cleanup",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-24T14:23:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1845718bcd62c38aff3d12d28b610f7758d25ce",
          "body": null,
          "is_bot": false,
          "headline": "Update docs",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-24T13:36:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bec806d53aa8d6bbd0a16dd0c82244b0ef8d234",
          "body": "…e-pr-1",
          "is_bot": false,
          "headline": "Merge branch 'feature/onyx-store-poc-baseline' into feature/onyx-stor…",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-24T13:35:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edc6ec8dbbe23a44d5f941b4ad2ed3af3366a9ca",
          "body": null,
          "is_bot": false,
          "headline": "API docs",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-22T12:50:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50a3ec6f7d9d740fbfcb094c6d6e681b87c5486a",
          "body": null,
          "is_bot": false,
          "headline": "prettier fixes",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-22T12:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd11e1cfd46efdb181d809311b470a9825bd9f30",
          "body": null,
          "is_bot": false,
          "headline": "record write success",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-22T10:36:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23bc519d72335bcd25c6c504eb9e8049e472ac88",
          "body": null,
          "is_bot": false,
          "headline": "move error classification to providers",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-22T09:51:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "406de5582feddf0f2d13f21cc073b78a3902bb60",
          "body": "# Conflicts:\n#\tlib/OnyxUtils.ts\n#\tlib/storage/providers/IDBKeyValProvider/createStore.ts",
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/revised-retry-mechanism",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-16T08:41:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01704211bf9363641843f2ecb826bc0633fdce07",
          "body": "Collection-root subscriptions (via Onyx.connect or useOnyx) now always\ndeliver the whole collection snapshot to the callback. The legacy\nper-member delivery mode for collection-root subscribers is removed;\nconsumers needing per-member processing subscribe to a single member key.\n\nCollapses the Defau\n[…]\ns the\noption from useOnyx's internal connect. Per-member-mode tests were migrated\nto assert snapshot delivery rather than deleted.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove the waitForCollectionCallback connect option",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-12T16:28:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c1073b4c116a245a9128172953153b9ebac4c538",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.87",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-11T22:27:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "224cd0d4a7828b42e339e65de6b7498150d3d6de",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.87",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-11T22:27:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "595d9444ec9289a06a7673953dd7ade135fb7bab",
          "body": "…nge-probe-v2\n\nfeat: add visibilitychange probe for proactive IDB health check",
          "is_bot": false,
          "headline": "Merge pull request #798 from callstack-internal/fix/idb-visibilitycha…",
          "author_name": "Jules",
          "author_login": "Julesssss",
          "committed_at": "2026-06-11T22:27:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa7a8d54eb66dfa38035dea3e72a51b1f5de8708",
          "body": "Drop the optional 3rd `sourceValue` argument from collection connect\ncallbacks and the `sourceValue` field from useOnyx's result metadata.\n`ResultMetadata` becomes non-generic (`{status}`); `UseOnyxResult` and the\nperf-test usages follow. Consumers that need \"what changed\" should diff\nagainst a previous value (e.g. usePrevious) — structural sharing makes that\nO(1) per member.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove the sourceValue callback parameter",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-11T15:01:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d91ec72d1810b11de062de217b893700c43a0c9a",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.86",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-11T00:47:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ea64678d77e33bc0a6763e3fb1d2fc0d98aa619",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.86",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-11T00:47:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64493ad5e99fd6bad705cdc39eace579f6d6723f",
          "body": "…y-side-effects-idempotency\n\n[Do Not Merge] Avoid subscriber re-fire when storage writes retry",
          "is_bot": false,
          "headline": "Merge pull request #792 from callstack-internal/elirangoshen/fix/retr…",
          "author_name": "Jules",
          "author_login": "Julesssss",
          "committed_at": "2026-06-11T00:46:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "397f98ed3a35b29f09e65680bea0131808b34f41",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.85",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-09T13:51:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a963e33b56114cada6b103824c1a3ca5ee759a6",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.85",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-09T13:51:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b191085de5bbb2e6496cf53a829f98ad8af8df8c",
          "body": "…ansactions\n\nUnify how merge and set handles AbortErrors",
          "is_bot": false,
          "headline": "Merge pull request #796 from callstack-internal/fix/handle-aborted-tr…",
          "author_name": "Nicolás Bonet",
          "author_login": "NicolasBonet",
          "committed_at": "2026-06-09T13:50:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bc993cafd23c8980d9274333a38bb335f28c244",
          "body": null,
          "is_bot": false,
          "headline": "prettier fix",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T14:06:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ffe796da6393fb674075810c51f85090ddb4f12",
          "body": null,
          "is_bot": false,
          "headline": "updated api doc",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T14:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "624cd666f9d920209baa81ea4aff2830dc38b615",
          "body": null,
          "is_bot": false,
          "headline": "introduce storage circuit breaker",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T13:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7570164e5374567d66431e3765ee24b3f8708b6",
          "body": null,
          "is_bot": false,
          "headline": "update comment",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T09:54:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aa0d40811bba19b880bf10be4e40b7655e6d678",
          "body": null,
          "is_bot": false,
          "headline": "add solution to removeItem",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T09:48:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d3c80e2aaa040d980d27b1c0b3477af6151f667",
          "body": null,
          "is_bot": false,
          "headline": "fix test names",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-08T09:41:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32b493a197f1bc55136e8747081cfa54af7ec48f",
          "body": null,
          "is_bot": false,
          "headline": "Remove redundant comment in retryOperation",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-05T14:26:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ac9c50ac0b853e09bf7ffe8e5299ea410edf069",
          "body": "The visibilitychange probe adds a separate .then branch off the cached\nopen promise. If the tab becomes visible while dbp is still a pending\nindexedDB.open() that later rejects, that branch rejected with no handler,\nsurfacing an unhandled rejection on foregrounding. Add a .catch on the\nprobe chain (cacheOpenPromise already clears dbp on its own branch).\n\nAddresses PR #788 review (chatgpt-codex-connector).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: handle probe promise rejection to avoid unhandled rejection",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-05T13:54:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3a8cc5d00f097657649e1ebaa88cf538ec755d0",
          "body": "- Remove the `typeof document !== 'undefined'` guard; IDBKeyValProvider\n  runs on web only, where document is always defined.\n- Drop the App-specific \"ReconnectApp\" reference from the probe comment.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: address review - remove document guard and ReconnectApp mention",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-05T09:29:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "02787c2512618bdd47a197c089e01e7c582bf70d",
          "body": null,
          "is_bot": false,
          "headline": "retry mechanism with retry breaking system",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-03T14:24:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e67599c52d7680d406e3dc38258888d70238ceb",
          "body": "…t transactions and related AbortErrors",
          "is_bot": false,
          "headline": "add promisifyWriteTransaction to unify how merge and set actions trea…",
          "author_name": "Hubert Sosinski",
          "author_login": "sosek108",
          "committed_at": "2026-06-03T10:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ff3bacc39ccd3b9b2f3fc4b3c0d600aebd5ffd6",
          "body": "…-internal/react-native-onyx into fix/idb-visibilitychange-probe",
          "is_bot": false,
          "headline": "Merge branch 'fix/idb-visibilitychange-probe' of github.com:callstack…",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-03T10:21:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af905f9caf5224528f13d5d69b5e8e0ad833a02b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/idb-visibilitychange-probe",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-03T10:19:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b001767d783c016403d892d27c6fb099927471e7",
          "body": "…w-key comment\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: don't evict in-flight keys on retry; correct stale multiMerge-ne…",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-03T07:28:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bfb3c289d33a8a5dca720bb8d174069c8d7f75fc",
          "body": "…y-side-effects-idempotency\n\n# Conflicts:\n#\ttests/unit/onyxUtilsTest.ts",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main' into elirangoshen/fix/retr…",
          "author_name": "eliran goshen",
          "author_login": "elirangoshen",
          "committed_at": "2026-06-02T13:20:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14be5b844a3054acf82fd66d27ea0bd96aba025b",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.84",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-01T17:43:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20be15615ca806f5909031a4d98d0b80eaa3e67b",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.84",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-06-01T17:42:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94bc6cf172ec06065689de2c0882f79cc5f35bf4",
          "body": "…tect-and-heal\n\nfix: add IDB healing mechanism for backing store corruption and connection lost errors",
          "is_bot": false,
          "headline": "Merge pull request #780 from callstack-internal/fix/idb-corruption-de…",
          "author_name": "Jules",
          "author_login": "Julesssss",
          "committed_at": "2026-06-01T17:42:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcd8abcbd8329e84397f1a7f0b7af7a261e31ef3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/idb-corruption-detect-and-heal",
          "author_name": "Fábio Henriques",
          "author_login": "fabioh8010",
          "committed_at": "2026-06-01T09:43:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b1f80828df563a6a203823ee34cac98debc31c5",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.83",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T23:14:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6315daeee61a9c182dcf5045cab68cef2c99f121",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.83",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T23:14:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a29889a829bee5773b4a9e1e24d53950a8806498",
          "body": "…-logs\n\nAdd usage details to reported usage quota log",
          "is_bot": false,
          "headline": "Merge pull request #795 from callstack-internal/onyx-additional-usage…",
          "author_name": "Neil Marcellini",
          "author_login": "neil-marcellini",
          "committed_at": "2026-05-29T23:13:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c2eaf77857bd6da37e8000147a8023d433ed493",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.82",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T18:11:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b14bb14c7e471e5a5df15494e0d4d1feda91460d",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.82",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T18:11:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c02aa64a9a89f519ab17f68d5ddaf3bf4ae9675",
          "body": "…ration\n\n[No QA] Node-integration SQLite tests via better-sqlite3",
          "is_bot": false,
          "headline": "Merge pull request #794 from callstack-internal/sqlite-poc-node-integ…",
          "author_name": "Jules",
          "author_login": "Julesssss",
          "committed_at": "2026-05-29T18:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33164eb8d8ee711f0bccbc26ee3c68ef17509c57",
          "body": null,
          "is_bot": true,
          "headline": "Update package.json version to 3.0.81",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T17:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01c84a63d80fe25dc4f3b50d3d49c3412c7fd2ce",
          "body": null,
          "is_bot": true,
          "headline": "Update package-lock.json version to 3.0.81",
          "author_name": "os-botify[bot]",
          "author_login": "os-botify[bot]",
          "committed_at": "2026-05-29T17:37:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 927,
      "latest_release_at": "2026-07-24T09:22:03Z",
      "latest_release_tag": "3.0.94",
      "releases_from_tags": true,
      "days_since_last_push": 4,
      "active_weeks_last_year": 50,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "react-native-onyx",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "React Native",
            "React",
            "Persistent storage",
            "Pub/Sub"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/react-native-onyx",
          "is_deprecated": false,
          "latest_version": "3.0.94",
          "repository_url": "https://github.com/Expensify/react-native-onyx",
          "versions_count": 366,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 38962,
          "first_published_at": "2022-05-23T22:26:02.369000Z",
          "latest_published_at": "2026-07-24T09:22:26.495000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 96,
      "stars": 231,
      "watchers": 32,
      "fork_history": {
        "days": [
          {
            "date": "2020-12-23",
            "count": 1
          },
          {
            "date": "2021-04-05",
            "count": 1
          },
          {
            "date": "2021-05-12",
            "count": 1
          },
          {
            "date": "2021-05-17",
            "count": 1
          },
          {
            "date": "2021-08-10",
            "count": 1
          },
          {
            "date": "2022-01-17",
            "count": 1
          },
          {
            "date": "2022-02-20",
            "count": 1
          },
          {
            "date": "2022-03-21",
            "count": 1
          },
          {
            "date": "2022-09-28",
            "count": 1
          },
          {
            "date": "2022-10-06",
            "count": 1
          },
          {
            "date": "2022-10-13",
            "count": 1
          },
          {
            "date": "2022-11-22",
            "count": 1
          },
          {
            "date": "2023-01-04",
            "count": 1
          },
          {
            "date": "2023-01-05",
            "count": 1
          },
          {
            "date": "2023-01-14",
            "count": 1
          },
          {
            "date": "2023-02-13",
            "count": 1
          },
          {
            "date": "2023-02-15",
            "count": 1
          },
          {
            "date": "2023-02-24",
            "count": 1
          },
          {
            "date": "2023-02-28",
            "count": 1
          },
          {
            "date": "2023-03-17",
            "count": 1
          },
          {
            "date": "2023-03-21",
            "count": 1
          },
          {
            "date": "2023-03-22",
            "count": 1
          },
          {
            "date": "2023-05-15",
            "count": 2
          },
          {
            "date": "2023-05-24",
            "count": 1
          },
          {
            "date": "2023-05-25",
            "count": 1
          },
          {
            "date": "2023-05-30",
            "count": 1
          },
          {
            "date": "2023-06-19",
            "count": 1
          },
          {
            "date": "2023-06-22",
            "count": 1
          },
          {
            "date": "2023-06-26",
            "count": 1
          },
          {
            "date": "2023-07-24",
            "count": 2
          },
          {
            "date": "2023-07-26",
            "count": 1
          },
          {
            "date": "2023-08-17",
            "count": 1
          },
          {
            "date": "2023-08-22",
            "count": 1
          },
          {
            "date": "2023-08-30",
            "count": 1
          },
          {
            "date": "2023-09-07",
            "count": 1
          },
          {
            "date": "2023-09-09",
            "count": 1
          },
          {
            "date": "2023-09-14",
            "count": 1
          },
          {
            "date": "2023-09-26",
            "count": 1
          },
          {
            "date": "2023-10-05",
            "count": 1
          },
          {
            "date": "2023-10-09",
            "count": 1
          },
          {
            "date": "2023-10-10",
            "count": 2
          },
          {
            "date": "2023-10-13",
            "count": 1
          },
          {
            "date": "2023-10-17",
            "count": 1
          },
          {
            "date": "2023-11-21",
            "count": 1
          },
          {
            "date": "2023-12-04",
            "count": 2
          },
          {
            "date": "2023-12-30",
            "count": 1
          },
          {
            "date": "2024-01-08",
            "count": 1
          },
          {
            "date": "2024-02-14",
            "count": 1
          },
          {
            "date": "2024-02-27",
            "count": 1
          },
          {
            "date": "2024-03-03",
            "count": 1
          },
          {
            "date": "2024-04-17",
            "count": 1
          },
          {
            "date": "2024-04-30",
            "count": 1
          },
          {
            "date": "2024-05-13",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 1
          },
          {
            "date": "2024-06-04",
            "count": 1
          },
          {
            "date": "2024-07-04",
            "count": 1
          },
          {
            "date": "2024-07-23",
            "count": 1
          },
          {
            "date": "2024-08-20",
            "count": 1
          },
          {
            "date": "2024-08-27",
            "count": 1
          },
          {
            "date": "2024-10-15",
            "count": 1
          },
          {
            "date": "2024-11-01",
            "count": 1
          },
          {
            "date": "2024-12-02",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-02-14",
            "count": 1
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-05-08",
            "count": 1
          },
          {
            "date": "2025-05-13",
            "count": 1
          },
          {
            "date": "2025-06-10",
            "count": 1
          },
          {
            "date": "2025-06-22",
            "count": 1
          },
          {
            "date": "2025-07-30",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 1
          },
          {
            "date": "2025-09-25",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-10-30",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 1
          },
          {
            "date": "2025-12-08",
            "count": 1
          },
          {
            "date": "2025-12-22",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 2
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-23",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 92,
        "total_forks": 96
      },
      "star_history": null,
      "open_issues_and_prs": 46
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 1135705,
      "source_files_sampled": 100,
      "oversized_source_files": 7,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "ascii-table",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.9"
        },
        {
          "name": "fast-equals",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.3"
        },
        {
          "name": "lodash.bindall",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "lodash.clone",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.5.0"
        },
        {
          "name": "lodash.pick",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "lodash.transform",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.6.0"
        },
        {
          "name": "underscore",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.13.6"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 26,
        "merged_prs": 630,
        "open_issues": 20,
        "closed_ratio": 0.608,
        "closed_issues": 31,
        "closed_unmerged_prs": 104
      },
      "bus_factor": 8,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "fabioh8010",
          "commits": 482,
          "avatar_url": "https://avatars.githubusercontent.com/u/20051562?v=4"
        },
        {
          "type": "User",
          "login": "kidroca",
          "commits": 221,
          "avatar_url": "https://avatars.githubusercontent.com/u/12156624?v=4"
        },
        {
          "type": "User",
          "login": "OSBotify",
          "commits": 216,
          "avatar_url": "https://avatars.githubusercontent.com/u/76178356?v=4"
        },
        {
          "type": "User",
          "login": "tgolen",
          "commits": 214,
          "avatar_url": "https://avatars.githubusercontent.com/u/1228807?v=4"
        },
        {
          "type": "User",
          "login": "marcaaron",
          "commits": 192,
          "avatar_url": "https://avatars.githubusercontent.com/u/32969087?v=4"
        },
        {
          "type": "User",
          "login": "blazejkustra",
          "commits": 183,
          "avatar_url": "https://avatars.githubusercontent.com/u/46095609?v=4"
        },
        {
          "type": "User",
          "login": "TMisiukiewicz",
          "commits": 123,
          "avatar_url": "https://avatars.githubusercontent.com/u/13985840?v=4"
        },
        {
          "type": "User",
          "login": "hannojg",
          "commits": 101,
          "avatar_url": "https://avatars.githubusercontent.com/u/16821682?v=4"
        },
        {
          "type": "User",
          "login": "VickyStash",
          "commits": 100,
          "avatar_url": "https://avatars.githubusercontent.com/u/23176449?v=4"
        },
        {
          "type": "User",
          "login": "roryabraham",
          "commits": 85,
          "avatar_url": "https://avatars.githubusercontent.com/u/47436092?v=4"
        }
      ],
      "contributors_sampled": 98,
      "top_contributor_share": 0.148
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "cla.yml",
        "lint.yml",
        "pr-checklist.yml",
        "publish.yml",
        "reassurePerfTests.yml",
        "require-tests.yml",
        "test.yml",
        "typecheck.yml",
        "validateDocs.yml",
        "validateGithubActions.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 6,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 5/17 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 10 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 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": "30 commit(s) and 0 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": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "70 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ec42979e16ea24662974aadf021a2590e12f3add",
        "ran_at": "2026-07-28T15:36:27Z",
        "aggregate_score": 4.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-28T15:17:55Z",
      "oldest_open_prs": [
        {
          "number": 449,
          "created_at": "2024-01-17T15:59:04Z",
          "last_comment_at": "2024-03-28T14:36:08Z",
          "last_comment_author": "tgolen"
        },
        {
          "number": 528,
          "created_at": "2024-04-07T11:40:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 603,
          "created_at": "2024-11-27T20:23:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 619,
          "created_at": "2025-02-24T17:32:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 628,
          "created_at": "2025-04-15T08:56:20Z",
          "last_comment_at": "2025-04-15T08:56:34Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 650,
          "created_at": "2025-06-30T18:54:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 679,
          "created_at": "2025-08-21T00:27:37Z",
          "last_comment_at": "2025-08-21T00:28:00Z",
          "last_comment_author": "chuckdries"
        },
        {
          "number": 682,
          "created_at": "2025-09-04T19:59:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 691,
          "created_at": "2025-10-20T11:51:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 695,
          "created_at": "2025-10-28T23:52:47Z",
          "last_comment_at": "2026-03-13T14:06:43Z",
          "last_comment_author": "fabioh8010"
        },
        {
          "number": 721,
          "created_at": "2026-01-13T11:25:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 726,
          "created_at": "2026-01-27T13:36:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 747,
          "created_at": "2026-03-04T13:29:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 751,
          "created_at": "2026-03-11T17:25:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 773,
          "created_at": "2026-04-16T14:51:46Z",
          "last_comment_at": "2026-04-21T17:22:00Z",
          "last_comment_author": "fabioh8010"
        },
        {
          "number": 775,
          "created_at": "2026-04-17T11:59:46Z",
          "last_comment_at": "2026-05-15T15:52:36Z",
          "last_comment_author": "fabioh8010"
        },
        {
          "number": 776,
          "created_at": "2026-04-17T20:19:01Z",
          "last_comment_at": "2026-05-18T12:02:35Z",
          "last_comment_author": "sosek108"
        },
        {
          "number": 789,
          "created_at": "2026-05-21T08:20:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 800,
          "created_at": "2026-06-19T10:03:18Z",
          "last_comment_at": "2026-07-01T07:35:58Z",
          "last_comment_author": "fabioh8010"
        },
        {
          "number": 802,
          "created_at": "2026-06-19T18:14:39Z",
          "last_comment_at": "2026-07-10T01:12:13Z",
          "last_comment_author": "roryabraham"
        }
      ],
      "last_merged_pr_at": "2026-07-24T09:21:22Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 84,
          "created_at": "2021-07-06T08:24:54Z",
          "last_comment_at": "2023-08-31T06:47:16Z",
          "last_comment_author": "hannojg"
        },
        {
          "number": 87,
          "created_at": "2021-07-12T19:10:52Z",
          "last_comment_at": "2021-10-26T20:17:46Z",
          "last_comment_author": "marcaaron"
        },
        {
          "number": 108,
          "created_at": "2021-10-27T03:50:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 109,
          "created_at": "2021-10-27T18:50:30Z",
          "last_comment_at": "2021-10-28T21:01:00Z",
          "last_comment_author": "kidroca"
        },
        {
          "number": 115,
          "created_at": "2022-01-20T22:45:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 119,
          "created_at": "2022-02-23T02:59:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 144,
          "created_at": "2022-05-27T01:32:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 176,
          "created_at": "2022-09-13T19:38:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 180,
          "created_at": "2022-09-21T18:15:53Z",
          "last_comment_at": "2022-09-21T18:57:21Z",
          "last_comment_author": "marcaaron"
        },
        {
          "number": 181,
          "created_at": "2022-09-21T18:24:51Z",
          "last_comment_at": "2022-12-20T18:47:50Z",
          "last_comment_author": "marcaaron"
        },
        {
          "number": 281,
          "created_at": "2023-07-17T18:22:29Z",
          "last_comment_at": "2023-08-16T01:24:05Z",
          "last_comment_author": "marcaaron"
        },
        {
          "number": 297,
          "created_at": "2023-08-10T08:52:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 313,
          "created_at": "2023-08-23T03:57:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 391,
          "created_at": "2023-10-05T19:29:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 514,
          "created_at": "2024-03-19T09:14:58Z",
          "last_comment_at": "2024-03-19T09:19:52Z",
          "last_comment_author": "paultsimura"
        },
        {
          "number": 516,
          "created_at": "2024-03-20T16:43:27Z",
          "last_comment_at": "2024-03-25T15:29:04Z",
          "last_comment_author": "chrispader"
        },
        {
          "number": 529,
          "created_at": "2024-04-16T08:49:18Z",
          "last_comment_at": "2024-04-16T14:30:00Z",
          "last_comment_author": "tgolen"
        },
        {
          "number": 568,
          "created_at": "2024-07-18T13:00:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 571,
          "created_at": "2024-07-22T06:54:16Z",
          "last_comment_at": "2024-07-22T06:56:37Z",
          "last_comment_author": "hannojg"
        },
        {
          "number": 595,
          "created_at": "2024-11-07T07:04:02Z",
          "last_comment_at": "2025-09-17T13:50:09Z",
          "last_comment_author": "etCoderDysto"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Expensify/react-native-onyx",
    "host": "github.com",
    "name": "react-native-onyx",
    "owner": "Expensify"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "excellent",
      "name": "Overall health",
      "note": "The weighted overall 74 is calibrated to 88 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 74,
            "calibrated": 88,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 88,
      "inputs": {
        "security": 46,
        "vitality": 95,
        "community": 64,
        "governance": 84,
        "calibration": "2026-08-02",
        "engineering": 74,
        "ai_readiness": 60,
        "weighted_overall_raw": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "exceptional",
        "name": "Vitality",
        "value": 95,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "exceptional",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "commits_last_year": 927,
              "human_commit_share": 0.72,
              "days_since_last_push": 4,
              "active_weeks_last_year": 50
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "50/52 weeks with commits",
                "points": 34.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 50
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "927 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 927
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "3.0.94",
              "releases_from_tags": true,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "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": 6,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 6 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 64,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "forks": 96,
              "stars": 231,
              "watchers": 32,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "231 stars",
                "points": 38.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 231
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "96 forks",
                "points": 16.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 96
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "32 watchers",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": null,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "readme_badge_services": [],
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "packages": [
                "react-native-onyx"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 38962
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "38,962 downloads/month across npm",
                "points": 61.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 38962,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "excellent",
        "name": "Sustainability & Governance",
        "value": 84,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "exceptional",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "bus_factor": 8,
              "contributors_sampled": 98,
              "top_contributor_share": 0.148
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "8 contributor(s) cover half of all commits",
                "points": 54,
                "status": "met",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 15% of commits",
                "points": 19.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 15
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "98 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 98
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "merged_prs": 630,
              "open_issues": 20,
              "closed_issues": 31,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.608,
              "closed_unmerged_prs": 104,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "61% of issues closed",
                "points": 25.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 61
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "630/734 decided PRs merged",
                "points": 25.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 630,
                      "decided": 734
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/17 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "followers": 1013,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Expensify",
              "public_repos": 66,
              "account_age_days": 5738
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,013 followers of Expensify",
                "points": 21.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1013,
                      "login": "Expensify"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "66 public repos, account ~15 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 66
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "react-native-onyx"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "366 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 366
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 74,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "weak",
        "name": "Security",
        "value": 46,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 5/17 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "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": "30 commit(s) and 0 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 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "70 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 8
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 60,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 27,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.5,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "36 of 72 human commits state their intent (structured subject or explanatory body)",
                "points": 26.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 36,
                      "sampled": 72
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.06,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "6 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 6,
                      "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 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 1135705,
              "source_files_sampled": 100,
              "oversized_source_files": 7
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "7/100 source files over 60KB",
                "points": 51.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 100,
                      "oversized": 7
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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": {
      "labels": [
        "library"
      ],
      "scores": {
        "library": 6
      },
      "primary": "library",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": false,
      "consumed_by_code": true
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:react-native-onyx@3.0.94; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T15:36:53.535438Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/Expensify/react-native-onyx.svg",
  "full_name": "Expensify/react-native-onyx",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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