Методологія версіонується як єдине ціле. Будь-яка зміна формули, ваги чи порога діапазону підвищує версію метрик, і кожен опублікований звіт фіксує версію, за якою його було створено (metrics.metrics_version). Це робить результати придатними до аудиту в часі: історичне значення можна вивести заново за точними правилами, які його породили.
Поточна версія — 1.13.0.
Кожен запис визначає точну зміну, її обсяг і те, чи залишаються наявні результати порівнянними. Дати є частиною публічного методологічного запису.
Історія версій
1.13.0 — 2026-07-22
Дві правки, обидві спричинені першою знахідкою шкідливої залежності, яку цей реєстр коли-небудь опублікував.
Тривожні сигнали більше не накопичуються. Кожна політика множила те, що залишила попередня, тож репозиторій із двома опинявся на добутку обох. Один проєкт перейшов зі зваженої 50 до 18 під множником шкідливих залежностей, а далі до 11 під покинутістю — число, якого не обрала жодна політика і на жодну з яких не можна вказати, щоб його пояснити. Множник заявляє, наскільки серйозна знахідка; він не є витратою, яку слід підсумовувати. Тепер керує сама лише найсуворіша політика, а решта повідомляються, не зсуваючи оцінку вдруге. За цією зміною оцінки можуть лише зростати, і лише для репозиторіїв, що несуть більше ніж один сигнал.
Відкликаний пакет більше не оцінюється як живе шкідливе програмне забезпечення. Кожна знахідка шкідливості тепер питає реєстр, чи віддає він досі саме цю версію. Якщо ні, нічого придатного до встановлення не лишається: знахідка лишається у звіті, бо проєкт залежить від імені, яке було скомпрометоване, але вона не піднімає сигналу і не коштує балів.
Перевірка питає про резолвлену версію, а не про найновішу версію пакета, і ця відмінність вирішує реальні випадки. Після вилучення npm лишає реліз-заглушку як найновішу версію пакета, що захищає всіх, хто резолвить діапазон версій, і нікого з тих, хто закріпив погану версію точно. Читання найновішої версії виправдало б саме той репозиторій, на якому ця знахідка спрацювала вперше, — він закріплює скомпрометований пакет саме на тій версії, яку реєстр досі віддає. Там, де відповіді дістати взагалі неможливо, знахідка оцінюється так, ніби пакет лишається доступним: неспроможність достукатися до реєстру не є свідченням того, що шкідливе програмне забезпечення відкликано.
1.12.0 — 2026-07-22
Рівень заявлено Політики покинутості спрацьовував надто часто на реєстрових свідченнях, які не належали репозиторію, про який ішлося.
Цей рівень існує, щоб цитувати мейнтейнера, а не робити висновки: проєкт вважається заявлено несупроводжуваним, коли його архівовано або коли кожен пакет, який він публікує, знято з обігу. Два дефекти його розширили. Пакет зараховувався як власний пакет проєкту, доки реєстр прямо не стверджував протилежного, — а це впускало записи, які взагалі не заявляють жодного репозиторію, тобто рівно ту форму, якої набуває захоплене ім'я. І відкликаний найновіший реліз зараховувався як зняття з обігу, хоча відкликання релізу зазвичай означає невдалу збірку, за якою одразу йде виправлення.
Разом вони звели проєкт з оцінкою 68 до 27 на підставі заглушки в PyPI, якої він не публікує. Тепер пакет має заявляти цей репозиторій і бути прямо позначеним застарілим; відкликаний реліз більше не робить внеску. Із 403 репозиторіїв на рівні заявлено 391 спирався на власний прапорець архівування GitHub і ніколи не був під сумнівом.
1.11.0 — 2026-07-21
Покинутість стає тривожним сигналом для всього звіту.
Кожен інструмент у цій галузі відповідає на питання «чи цей проєкт мертвий?» кількістю днів від останнього коміта, і кожен помиляється щодо тих самих проєктів: невелика завершена бібліотека, якій три роки не потрібен був жоден коміт, — завершена, а не покинута. Позначити її мертвою означає для публічного реєстру втратити довіру рівно на тому програмному забезпеченні, яке заслуговує найбільшої впевненості.
Тому оцінка спирається на інше питання: покинутість — це невиконане зобов'язання, а не відсутність шуму. Тиша вимірюється від останнього людського коміта й ніколи не є підставою сама по собі; вона стає підставою лише тоді, коли робота очевидно надходить, а нею ніхто не займається: черга внесків без відповіді, ішюси, на які жоден мейнтейнер так і не відповів, невиправлена вразливість у прямій залежності, зупинка релізів, виміряна за власною каденцією проєкту, зламана або річної давності CI, єдиний мейнтейнер, відсутній протягом усього вікна. Прочитання, які пояснюють тишу, утримують результат на позначці сплячий, що не тягне жодного штрафу: тиша вже врахована в активності розробки, і брати за неї плату двічі означало б карати саме ті завершені бібліотеки, задля захисту яких ця відмінність і існує.
Знахідки множать індекс здоров'я: 85% у зоні ризику, 60% ймовірно покинутий із межею «У зоні ризику» на рівні 49, 40% заявлено з межею «Критично» на рівні 29. Заявлено — це власне твердження мейнтейнера, процитоване, а не виведене: репозиторій архівовано або кожен пакет, який він публікує, позначено застарілим чи відкликано. Репозиторії, які неможливо оцінити, читаються як не перевірено і не караються. Див. покинутість.
Порівнянність: значення можуть лише падати відносно 1.10.0, і лише для репозиторіїв, де посуху підтверджують невиконані зобов'язання. Тихі, добре доглянуті проєкти не зачеплені за побудовою.
1.10.0 — 2026-07-21
Залежності, про які повідомлено як про шкідливі пакети, стають окремим тривожним сигналом безпеки, відділеним від сповіщень про вразливості.
Свідчення надходили й раніше. OSV.dev віддає корпус шкідливих пакетів OpenSSF поряд зі звичайними сповіщеннями — тим самим запитом, який цей реєстр уже робив, — але повідомлення про шкідливий пакет не несе ані оцінки критичності, ані виправленої версії, тож воно провалювалося до «невідомої критичності» й оцінювалося як помірна вразливість. Пакет, визнаний шкідливим програмним забезпеченням, важив трохи менше за середній CVE.
Тепер шкідливі пакети вилучено зі знахідок за сповіщеннями й оцінено за власними правилами: множник 35% до стану безпеки і до зваженого індексу здоров'я, з межею «Критично» на рівні 29 для обох. Це на один діапазон суворіше за межу для юрисдикцій високого ризику, бо шкідлива залежність — це підтверджена компрометація, а не наражання на ризик. Прямі й непрямі залежності рахуються однаково: корисне навантаження, що виконується під час встановлення, спрацьовує на будь-якій глибині резолвленого графа.
Очікується, що знахідка буде рідкісною: прогін перед випуском на вибірці з 300 репозиторіїв, що охоплювала 46 889 резолвлених залежностей, не знайшов нічого. Реєстри вилучають шкідливі пакети протягом днів, тож lock-файл, який досі резолвиться в такий пакет, — річ незвична. Див. шкідливі залежності.
Порівнянність: без змін для кожного репозиторію без шкідливої залежності, а таких майже всі. Там, де її знайдено, Безпека та індекс здоров'я не порівнянні з жодною попередньою версією.
1.9.0 — 2026-07-21
Фактор людського авторства, запроваджений у 1.6.0, більше не спрацьовує на проєктах, які просто добре автоматизовані.
Сама лише інтенсивна автоматизація виявилася поганим сигналом. Серед репозиторіїв, де більшість комітів створюють машини, найздоровіші за самою лише часткою не відрізнялися від покинутих: проєкт із 59 000 зірок проводить близько трьох чвертей своїх комітів через бота залежностей, а людський коміт мав два дні тому, а реєстр пакетів, чиє призначення повністю зводиться до автоматичного підвищення версій, працює на 93%. Обидва отримували зниження.
Тепер дисконт вимагає другої умови: машини мають ще й комітити наодинці понад 90 днів. Проміжок вимірюється всередині вибраного вікна комітів, а не за годинником, тож збережений звіт завжди переоцінюється в те саме значення. Репозиторії з нещодавнім людським комітом більше не зачеплені за жодного рівня автоматизації; проєкти, які справді тримаються на автоматизації, зберігають свій дисконт.
Порівнянність: значення можуть лише зрости відносно 1.8.0, і лише у Життєздатності.
1.8.0 — 2026-07-21
Сигнал відкликано. Сплеск до появи релізів в автентичності росту стверджував, що сплеск, який надійшов до першого релізу проєкту, є свідченням чогось. За вимірюванням на 795 звичайних репозиторіях він спрацював у кожній з п'яти знахідок, які дала політика, — і кожна з цих п'яти була звичайним запуском. Опублікувати, привернути увагу, випустити реліз згодом — так працюють проєкти.
Порівняння було хибним і з другого боку. Перелік релізів, який несе звіт, обмежено 100 найновішими записами, тож для будь-якого проєкту поза цією межею найраніший запис не є його першим релізом, і кожен сплеск видається таким, що передує йому.
Те, що приходить на заміну, — немає жодного релізу — залишає лише абсолютний випадок: проєкт ніколи не публікував жодного релізу. Він свідомо слабший і радше підкріплює, ніж вирішує. Кількість знахідок на звичайній популяції повертається до нуля, а обидві підтверджені знахідки в оцінювальній вибірці зберігаються.
Опублікована методологія, яка не здатна відкликати сигнал, що його вона більше не може обстояти, — не методологія. Саме для цього існує історія версій.
1.7.0 — 2026-07-21
Автентичність росту отримує п'ятий сигнал — концентрацію зірок: п'ять найактивніших днів містять 80% або більше всіх зірок, які зібрало сканування.
Його додано після першого практичного випробування політики, яке показало її точною, але майже сліпою: серед 714 звичайних репозиторіїв вона не позначила жодного, а серед 45, дібраних за формою, яку лишає куплена увага, — один. Поріг зчитано з реальних даних, а не обрано наперед: серед 502 звичайних репозиторіїв у діапазоні 100–1 500 зірок медіанний має 6.9% своїх зірок у п'яти найактивніших днях, і жоден не сягнув 80%.
Сигнал підкріплює сплеск, але ніколи не вирішує сам. Легітимний реліз, рушієм якого стало оголошення, наближається до тієї самої форми — реліз дослідницької моделі показав 73.7%, — а сигнал, який не здатен їх розрізнити, не повинен вирішувати самотужки.
За цією зміною оцінки можуть лише знизитися й лише для репозиторіїв, які вже показували сплеск. Більше нічого не змінюється.
1.6.0 — 2026-07-21
Вхідні дані, які можна накрутити, більше не зараховуються за номіналом.
Додано автентичність росту. Поденна історія зірок і форків, що збирається для кожного звіту, тепер читається на предмет росту, форми якого органічна увага не породжує, а Політика неорганічного росту дисконтує компоненти зірок і форків у популярності на 40% за одне підтверджене вікно і на 70% за більшу їх кількість. Сам собою сплеск ніколи не є знахідкою: для підтвердження потрібні щонайменше два незалежні сигнали, що підкріплюють один одного, тож запуски та дні на головних сторінках читаються як органічні. Репозиторії, зібрана історія яких не дає відповіді на це питання, читаються як не перевірено і не караються. Політика не має власної адитивної ваги, тож чиста історія ніколи не може підвищити оцінку.
Активність розробки отримує коефіцієнт людського авторства над компонентами ритму та обсягу комітів. Проєкт, який тримається винятково на власних роботах, більше не читається як такий, що активно розробляється; повний бал діє від 40% людської частки й вище, тож інтенсивна, але справжня автоматизація на результат не впливає. Стійкість мейнтейнерів тепер рахує лише людей — раніше автоматизовані облікові записи потрапляли до переліку мейнтейнерів проєкту, що лестило саме тим проєктам, які автоматизують найбільше.
Наявні значення лишаються порівнюваними, окрім Спільноти та впровадження для репозиторіїв із підтвердженою знахідкою щодо росту, а також Життєздатності та Стійкості й врядування для репозиторіїв, чий перелік контриб'юторів складається переважно з автоматизації. За цими змінами оцінки можуть лише знизитися й ніколи не зростають.
1.5.0 — 2026-07-20
Додано сповіщення про залежності. Резолвлений набір залежностей, який і так збирався для кожного звіту — прямі залежності плюс транзитивне замикання — тепер звіряється з базою сповіщень OSV, а уражені пакети подаються з рівнем критичності та версією, у якій кожне виправлено.
Безпека стає зваженим середнім стану безпеки з вагою 80% і нової метрики з вагою 20%. Множник Політики юрисдикцій високого ризику не змінюється: він так само застосовується до стану безпеки й до зваженого загального балу і не має власної адитивної ваги.
Нова метрика виключається з перенормуванням залишкової ваги щоразу, коли граф залежностей або запит сповіщень були недоступні — репозиторій ніколи не карається за вимкнений граф залежностей. Наявні значення лишаються порівнюваними, окрім Безпеки: будь-який репозиторій із графом залежностей тепер оцінюється за свідченнями, які раніше не враховувалися.
1.4.0 — 2026-07-19
Додано пов’язаність із юрисдикціями високого ризику для high-confidence самозаявлених локацій Росії, Ірану або Північної Кореї. Це ієрархічний множник: owner 20%, top contributor 50%, публічна організаційна афіліація 75%. Збіг множить і обмежує 49 Security posture, а після зважування — загальну оцінку. Security відображає скоригований posture без повторного множення. Відсутні, неоднозначні або безпечні локації не штрафують. Сигнал спрямовує залежність на посилену перевірку; він не визначає національність, санкції, наміри чи надійність людини.
1.3.0 — 2026-07-18
Ліцензійний сигнал у здоров'ї спільноти став трирівневим — стандартна, власна або відсутня — замість єдиної перевірки «наявна/відсутня». Репозиторій, файл ліцензії якого існує, але текст якого не є визнаною ліцензією, тепер отримує три чверті ліцензійної ваги, а не або повне зарахування, або нуль.
Змінилося й виявлення: стан визначається за всіма трьома джерелами ліцензії разом (метадані ліцензії репозиторію, профіль спільноти GitHub і перевірка License від Scorecard), а не з перевагою самому лише Scorecard. Наявність є логічним АБО, тож файл, який бачить будь-яке одне джерело, зараховується. Джерела розходяться приблизно на 1% репозиторіїв.
Власні ліцензії вже до цієї версії оцінювалися дещо нижче за стандартні, оскільки Scorecard оцінює їх у 9 балів із 10, а не в 10. Цей розрив був успадкований від інструмента, а не заявлений як позиція; тепер він навмисний і задокументований.
Порівнянність: наявні результати переобчислено за версією 1.3.0 з даних, уже збережених у кожному звіті — жоден репозиторій не сканувався заново, тож ніщо не змінилося з інших причин, окрім цієї зміни. Зрушення незначне: ліцензійний рядок становить 22.5 зі 100 балів у межах здоров'я спільноти, яке саме є 35% Спільноти та впровадження, що становить 18% індексу.
1.2.0 — 2026-07-14
Додано адаптери реєстрів опублікованих пакетів для Go (проксі модулів), Maven Central та NuGet, а ідентифікацію пакетів PyPI розширено на застарілі маніфести setup.py. Репозиторії, що публікують у цих екосистемах, тепер мають реєстрові докази в супроводі пакетів — свіжість публікацій, історія версій, стан застарілості — а NuGet додатково живить впровадження в екосистемі через свій сумарний показник завантажень за весь час. Go та Maven Central не публікують жодної статистики завантажень, тож вони не додають сигналу впровадження. Формули та ваги не змінилися — лише те, для яких репозиторіїв доступні реєстрові докази.
1.1.0 — 2026-07-14
Здоров'я спільноти тепер виявляє ліцензію один раз. Раніше метрика мала два перекривні ліцензійні компоненти — прапорець community profile GitHub та окрему картку спільного доказу License. Їх злито в єдиний рядок License, який виявляється перевіркою License від OpenSSF Scorecard; прапорець community profile збережено лише як резервний варіант для репозиторіїв без Scorecard. Власна перевірка License від Scorecard залишається повноцінним компонентом стану безпеки. Злиття усуває подвійне врахування й надає перевагу надійнішому виявленню Scorecard там, де два джерела розходяться. Цей реліз змінює зачеплені значення community_health; звіти залишаються відтворюваними завдяки зафіксованій у них metrics_version.
1.0.0 — 2026-07-13
Перевірки OpenSSF Scorecard тепер надають спільні докази там, де практика безпеки обґрунтовує ще й інший вимір здоров'я. Scorecard залишається повністю зваженим за ризиком у стані безпеки; сім обраних перевірок додатково отримують невеликі, задокументовані ваги у своїх цільових метриках: Maintained, Signed-Releases, Contributors, Code-Review, License, CI-Tests та Pinned-Dependencies.
Це навмисний міжкатегорійний вплив, а не повторне використання безпекових ваг Scorecard. Перевірка зі статусом n/a або недоступні дані Scorecard виключаються з цільової метрики, а решта її компонентів перенормовується. Цей реліз змінює зачеплені значення репозиторіїв; звіти залишаються відтворюваними завдяки зафіксованій у них metrics_version.
0.9.0 — 2026-07-07
Резервний механізм стану безпеки перестав вважати відсутність файлу блокування залежностей недоліком для опублікованих бібліотек. Файли блокування — практика рівня застосунків; багато бібліотек і gem-ів слушно їх не мають. Для таких репозиторіїв резервний компонент тепер виключається, а решта компонентів перенормовується. Шлях через OpenSSF Scorecard не змінився.
0.8.0 — 2026-06-30
Додано категорію Готовність до ШІ з чотирма метриками (контекст для агентів, цикл верифікації, читабельність коду, інтерфейси), що оцінюють, чи підтримує репозиторій надійну розробку за допомогою ШІ. Категорія має вагу 0.0: це незалежний, додатковий бейдж, який ніколи не змінює загального індексу здоров'я. Наявні формули для репозиторіїв не змінилися.
0.7.0 — 2026-06-20
Розширено підтримувані екосистеми. Впровадження в екосистемі відкочується до сумарних завантажень за весь час, коли реєстр не публікує щомісячної цифри (RubyGems), тож пакети Ruby та Hex тепер отримують значення впровадження. Додано адаптери реєстрів RubyGems і Hex; розбір оголошених залежностей розширено на Go, Maven, RubyGems, NuGet та Hex. Див. підтримувані екосистеми.
0.6.0 — 2026-06-09
Стан безпеки перебудовано на основі OpenSSF Scorecard: незалежні від інструментів, зважені за ризиком перевірки, що більше не штрафують проєкти за використання інструментарію поза GitHub; непереконливі перевірки виключаються, а не зараховуються як нуль. Грубі перевірки за деревом файлів залишилися як резервний механізм. Зачеплено лише категорію Безпеки.
0.5.0 — 2026-05-29
Додано метрики пакетних екосистем: впровадження в екосистемі (завантаження з реєстрів) у Спільноті та впровадженні й супровід пакетів (свіжість публікацій, застарілість) у Сталості та врядуванні. Обидві дорівнюють null для репозиторіїв, що не публікують пакетів. Внутрішні ваги категорій перебалансовано; ваги категорій та інші формули не змінилися.
0.4.0 — 2026-05-18
Метрики перегруповано в п'ять зважених категорій зі згорнутими значеннями. Чотири нові метрики репозиторію: дисципліна релізів, популярність, опіка та документація. activity перейменовано на активність розробки. Загальний індекс тепер згортає категорії, а не окремі метрики.
0.3.0 — 2026-05-06
Додано метрики організацій — повнота профілю, активність портфеля, охоплення спільноти та загальний індекс організації (див. оцінювання організацій). Формули для репозиторіїв не змінилися.
0.2.0 — 2026-04-25
До кожної метрики додано результати за компонентами, тож звіт показує, які саме критерії виконано, виконано частково або виключено. Формули, ваги та пороги діапазонів не змінилися відносно 0.1.0.
0.1.0 — 2026-04-15
Початкова методологія.
Що гарантує версіонування
- Відтворюваність — звіт разом із зафіксованою в ньому версією повністю визначає, як було обчислено кожне значення.
- Порівнянність — два репозиторії, проінспектовані за однією версією, вимірюються ідентичними правилами.
- Підзвітність — зміни методології публічні, датовані й пояснені; тихих коригувань не існує.
Дивіться також: індекс здоров'я · діапазони рейтингу · конфігурація сканування