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

servo / stylo

CSS engine that powers Servo and Firefox

RustЛіцензію не виявлено★ 304 зірки⑂ 94 форкиз лют. 2024 р.Переглянути на GitHub ↗

servo/stylo має індекс здоров’я 70 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (100/100), найнижчий — Engineering Quality (46/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконують 8 учасників.

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

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

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

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

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

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

Власність

ServoОрганізація
1 251 підписник193 публічні репозиторіїз жовт. 2012 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
crates.iostylo0.19.046 3612223 дні тому
crates.ioto_shmem0.5.046 732623 дні тому
crates.ioselectors0.39.06 604 0216123 дні томуcssselectors
crates.ioservo_arc0.4.36 194 8027256 днів тому
crates.iostylo_dom0.19.046 4052023 дні томуcssstyle
crates.iostylo_atoms0.19.046 4272023 дні тому
crates.iostylo_derive0.19.045 8052023 дні тому
crates.iostylo_traits0.19.046 3992023 дні тому

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

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

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

100Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 0 дн. тому
36/36Ритм комітів — 52/52 тижнів із комітами
18/18Обсяг комітів — 1 063 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year1 063
human_commit_share1
days_since_last_push0
active_weeks_last_year52
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 18 релізів
36/36Свіжість релізів — останній реліз 25 дн. тому
27/27Ритм релізів — реліз кожні ~19,5 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count18
latest_release_tagv0.19.0
releases_from_tagsні
days_since_latest_release25
mean_days_between_releases19,5
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

59Помірний · 18% загального індексу
Як обчислюється оцінка
40.3/60Зірки — 304 зірок
16.4/25Форки — 94 форків
5/15Спостерігачі — 9 спостерігачів
Використані вхідні дані
forks94
stars304
watchers9
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
0/22.5Ліцензія — файлу ліцензії не виявлено
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseні
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні
Як обчислюється оцінка
80/80Щомісячні завантаження — 13 076 952 завантажень/місяць у crates
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesstylo, to_shmem, selectors, servo_arc, stylo_dom, stylo_atoms, stylo_derive, stylo_traits
dependents
ecosystemscrates
total_downloads114 753 542
monthly_downloads13 076 952
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

85Відмінний · 24% загального індексу
Як обчислюється оцінка
54/54Бас-фактор — на 8 контриб’ютор(ів) припадає половина всіх комітів
16.6/22.5Розподіл комітів — головний контриб’ютор — автор 26% комітів
13.5/13.5Широта контриб’юторів — 100 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 46 contributing companies or organizations
Використані вхідні дані
bus_factor8
contributors_sampled100
top_contributor_share0,264
Як обчислюється оцінка
30.6/46.8Вирішення issue — закрито 66% issue
32.2/38.3Прийняття PR — злито 276/328 вирішених PR
9/15OpenSSF Scorecard: Code-Review — Found 18/30 approved changesets -- score normalized to 6
Використані вхідні дані
merged_prs276
open_issues29
closed_issues55
issue_closed_ratio0,655
closed_unmerged_prs52
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
22.3/25Охоплення власника — 1 251 підписників у servo
25/25Послужний список — 193 публічних репозиторіїв, вік облікового запису ~13 р.
Використані вхідні дані
followers1 251
owner_typeOrganization
is_verified
owner_loginservo
public_repos193
account_age_days5 031

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 8 пакет(ів) у crates
35/35Свіжість публікацій — остання публікація 23 дн. тому
20/20Історія версій — 61 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesstylo, to_shmem, selectors, servo_arc, stylo_dom, stylo_atoms, stylo_derive, stylo_traits
ecosystemscrates
any_deprecatedні
min_days_since_publish23

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

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

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

Інженерні практики

44У зоні ризику
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
0/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 11 out of 11 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так

Безпека

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

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

Стан безпеки

48У зоні ризику
Як обчислюється оцінка
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — немає даних
2.5/2.5CI-Tests — 11 out of 11 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
4.5/7.5Code-Review — Found 18/30 approved changesets -- score normalized to 6
2.5/2.5Contributors — project has 46 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
0/2.5Ліцензія — license file not detected
7.5/7.5Maintained — 30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4,8
Виключено з оцінювання (немає даних або не застосовно): branch_protection, packaging, signed_releases. Залишкові ваги перенормовано.

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

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

47У зоні ризику · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 87 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,87
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — Cargo.toml, malloc_size_of/Cargo.toml, selectors/Cargo.toml (домовленість інструментарію, без раннера задач)
0/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Rust (статично типізована)
10/10Відтворюване середовище — Nix
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixтак
has_testsні
lockfiles
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, malloc_size_of/Cargo.toml, selectors/Cargo.toml, servo_arc/Cargo.toml, style/Cargo.toml, style_derive/Cargo.toml, style_traits/Cargo.toml, stylo_atoms/Cargo.toml, stylo_dom/Cargo.toml, stylo_static_prefs/Cargo.toml, to_shmem/Cargo.toml, to_shmem_derive/Cargo.toml
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Rust (статично типізована)
52.1/55Керовані розміри файлів — 18/347 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageRust
largest_source_bytes187 207
source_files_sampled347
oversized_source_files18

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

304зірок GitHub
100контриб'юторів
1 063комітів за останні 12 місяців
0днів від останнього пушу
18релізів
8бас-фактор
29відкритих issue
crates.ioпакетних екосистем

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

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

Докладніше

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

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

0204060801009232024-032025-052026-07
Мажорні 0Мінорні 18Патчі 0

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

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

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

8Binary-Artifactsbinaries present in source code
н/дBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
6Code-ReviewFound 18/30 approved changesets -- score normalized to 6
10Contributorsproject has 46 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 105
РеєстрПакетОбмеження версіїМаніфест
crates.ioapp_units0.7malloc_size_of/Cargo.toml
crates.iocssparser0.37malloc_size_of/Cargo.toml
crates.ioeuclid0.22malloc_size_of/Cargo.toml
crates.ioselectorsmalloc_size_of/Cargo.toml
crates.ioservo_arcmalloc_size_of/Cargo.toml
crates.iosmallbitvec2.3.0malloc_size_of/Cargo.toml
crates.iosmallvec1.13malloc_size_of/Cargo.toml
crates.iostring_cache0.9malloc_size_of/Cargo.toml
crates.iothin-vec0.2.13malloc_size_of/Cargo.toml
crates.iovoid1.0.2malloc_size_of/Cargo.toml
crates.iobitflags2selectors/Cargo.toml
crates.iocssparser0.37selectors/Cargo.toml
crates.ioderive_more2selectors/Cargo.toml
crates.iorustc-hash2.1.1selectors/Cargo.toml
crates.iolog0.4selectors/Cargo.toml
crates.iophf0.13selectors/Cargo.toml
crates.ioprecomputed-hash0.1selectors/Cargo.toml
crates.ioservo_arcselectors/Cargo.toml
crates.iosmallvec1.0selectors/Cargo.toml
crates.ioto_shmemselectors/Cargo.toml
crates.ioto_shmem_deriveselectors/Cargo.toml
crates.ionew_debug_unreachable1selectors/Cargo.toml
crates.ioserde1.0servo_arc/Cargo.toml
crates.iostable_deref_trait1.0.0servo_arc/Cargo.toml
crates.ioapp_units0.7.8style/Cargo.toml
crates.ioarrayvec0.7style/Cargo.toml
crates.ioatomic_refcell0.1style/Cargo.toml
crates.iobitflags2style/Cargo.toml
crates.iobyteorder1.0style/Cargo.toml
crates.iocssparser0.37style/Cargo.toml
crates.ioderive_more2style/Cargo.toml
crates.iodomstyle/Cargo.toml
crates.ionew_debug_unreachable1.0style/Cargo.toml
crates.ioencoding_rs0.8style/Cargo.toml
crates.ioeuclid0.22style/Cargo.toml
crates.iorustc-hash2.1.1style/Cargo.toml
crates.ioicu_segmenter>= 1.5, <= 2.*style/Cargo.toml
crates.ioindexmap2style/Cargo.toml
crates.ioitertools0.14style/Cargo.toml
crates.ioitoa1.0style/Cargo.toml
crates.iolog0.4style/Cargo.toml
crates.iomalloc_size_ofstyle/Cargo.toml
crates.iomalloc_size_of_derive0.1style/Cargo.toml
crates.ioweb_atoms0.2.0style/Cargo.toml
crates.iomime0.3.13style/Cargo.toml
crates.ionum_cpus1.1.0style/Cargo.toml
crates.ionum-integer0.1style/Cargo.toml
crates.ionum-traits0.2style/Cargo.toml
crates.ionum-derive0.4style/Cargo.toml
crates.ioparking_lot0.12style/Cargo.toml
crates.ioprecomputed-hash0.1.1style/Cargo.toml
crates.iorayon1style/Cargo.toml
crates.iorayon-core1style/Cargo.toml
crates.ioselectorsstyle/Cargo.toml
crates.ioserde1.0style/Cargo.toml
crates.ioservo_arcstyle/Cargo.toml
crates.iostylo_atomsstyle/Cargo.toml
crates.iosmallbitvec2.3.0style/Cargo.toml
crates.iosmallvec1.0style/Cargo.toml
crates.iostatic_assertions1.1style/Cargo.toml
crates.iostatic_prefsstyle/Cargo.toml
crates.iostring_cache0.9style/Cargo.toml
crates.iostrum0.28style/Cargo.toml
crates.iostrum_macros0.28style/Cargo.toml
crates.iostyle_derivestyle/Cargo.toml
crates.iostyle_traitsstyle/Cargo.toml
crates.ioto_shmemstyle/Cargo.toml
crates.ioto_shmem_derivestyle/Cargo.toml
crates.iothin-vec0.2.1style/Cargo.toml
crates.iouluru3.0style/Cargo.toml
crates.iovoid1.0.2style/Cargo.toml
crates.iourl2.5style/Cargo.toml
crates.iodarling0.20style_derive/Cargo.toml
crates.ioproc-macro21style_derive/Cargo.toml
crates.ioquote1style_derive/Cargo.toml
crates.iosyn2style_derive/Cargo.toml
crates.iosynstructure0.13style_derive/Cargo.toml
crates.ioapp_units0.7style_traits/Cargo.toml
crates.iobitflags2style_traits/Cargo.toml
crates.iocssparser0.37style_traits/Cargo.toml
crates.ioeuclid0.22style_traits/Cargo.toml
crates.iomalloc_size_ofstyle_traits/Cargo.toml
crates.iomalloc_size_of_derive0.1style_traits/Cargo.toml
crates.ioselectorsstyle_traits/Cargo.toml
crates.ioserde1.0style_traits/Cargo.toml
crates.ioservo_arcstyle_traits/Cargo.toml
crates.iostylo_atomsstyle_traits/Cargo.toml
crates.iothin-vec0.2style_traits/Cargo.toml
crates.ioto_shmemstyle_traits/Cargo.toml
crates.ioto_shmem_derivestyle_traits/Cargo.toml
crates.iourl2.5style_traits/Cargo.toml
crates.iostring_cache0.9stylo_atoms/Cargo.toml
crates.iobitflags2stylo_dom/Cargo.toml
crates.iomalloc_size_ofstylo_dom/Cargo.toml
crates.iocssparser0.37to_shmem/Cargo.toml
crates.ioservo_arcto_shmem/Cargo.toml
crates.iosmallbitvec2.3.0to_shmem/Cargo.toml
crates.iosmallvec1.13to_shmem/Cargo.toml
crates.iostring_cache0.9to_shmem/Cargo.toml
crates.iothin-vec0.2.1to_shmem/Cargo.toml
crates.iodarling0.20to_shmem_derive/Cargo.toml
crates.ioproc-macro21to_shmem_derive/Cargo.toml
crates.ioquote1to_shmem_derive/Cargo.toml
crates.iosyn2to_shmem_derive/Cargo.toml
crates.iosynstructure0.13to_shmem_derive/Cargo.toml
Усі залежності 52

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

РеєстрПакетВерсіяЗв'язок
crates.ioapp_unitsпряма
crates.ioarrayvecпряма
crates.ioatomic_refcellпряма
crates.iobitflagsпряма
crates.iobyteorderпряма
crates.iocssparserпряма
crates.iodarlingпряма
crates.ioderive_moreпряма
crates.ioencoding_rsпряма
crates.ioeuclidпряма
crates.ioicu_segmenterпряма
crates.ioindexmapпряма
crates.ioitertoolsпряма
crates.ioitoaпряма
crates.iologпряма
crates.iomalloc_size_of_deriveпряма
crates.iomimeпряма
crates.ionew_debug_unreachableпряма
crates.ionum-deriveпряма
crates.ionum-integerпряма
crates.ionum-traitsпряма
crates.ionum_cpusпряма
crates.ioparking_lotпряма
crates.iophfпряма
crates.ioprecomputed-hashпряма
crates.ioproc-macro2пряма
crates.ioquoteпряма
crates.iorayonпряма
crates.iorayon-coreпряма
crates.iorustc-hashпряма
crates.ioserdeпряма
crates.iosmallbitvecпряма
crates.iosmallvecпряма
crates.iostable_deref_traitпряма
crates.iostatic_assertionsпряма
crates.iostring_cacheпряма
crates.iostrumпряма
crates.iostrum_macrosпряма
crates.iosynпряма
crates.iosynstructureпряма
crates.iothin-vecпряма
crates.iouluruпряма
crates.iourlпряма
crates.iovoidпряма
crates.ioweb_atomsпряма
crates.iobindgenнепряма
crates.iomozbuildнепряма
crates.iophf_codegenнепряма
crates.ioregexнепряма
crates.iostring_cache_codegenнепряма
crates.iotomlнепряма
crates.iowalkdirнепряма
Сповіщення про залежності не оцінено

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 42994,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Nix": 201,
        "Mako": 1006,
        "Rust": 5316501,
        "Shell": 2707,
        "Python": 79464
      },
      "pushed_at": "2026-07-26T13:44:40Z",
      "created_at": "2024-02-07T05:11:50Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T20:50:11Z",
      "description": "CSS engine that powers Servo and Firefox",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://servo.org",
      "name": "Servo",
      "type": "Organization",
      "login": "servo",
      "company": null,
      "location": null,
      "followers": 1251,
      "avatar_url": "https://avatars.githubusercontent.com/u/2566135?v=4",
      "created_at": "2012-10-15T17:38:39Z",
      "is_verified": null,
      "public_repos": 193,
      "account_age_days": 5031
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-07-01T12:43:26Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-06-03T09:31:31Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-05-05T01:05:54Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-04-03T06:22:33Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-04-01T18:32:28Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-03-19T13:57:45Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-03-06T23:06:39Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-02-09T12:19:26Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-01-15T10:55:38Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-01-06T19:51:40Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-11-12T15:18:55Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2025-10-04T12:39:11Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2025-09-04T20:50:25Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2025-08-02T21:20:45Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2025-07-02T16:06:58Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2025-06-19T12:08:04Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2025-05-05T14:35:47Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2025-03-31T12:15:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "2d289c14fdf46952d52cabce63b1f0dc55b2ccde",
          "body": "… Blitz (#426)\n\nEnables `text-decoration-thickness`, `text-decoration-inset`,\n`text-underline-offset`, and `text-underline-position` for Servo builds\nof Stylo, behind the `layout.unimplemented` feature flag.\n\nThe shorthand `text-decoration` is updated to account for\n`text-decoration-thickness` being enabled (this aligns Servo's\nimplementation with Gecko's for this property).\n\nServo PR:\n\n- https://github.com/servo/servo/pull/46592\n\n---------\n\nSigned-off-by: Nico Burns <nico@nicoburns.com>",
          "is_bot": false,
          "headline": "Enable text-decoration-thickness; more text decoration properties for…",
          "author_name": "Nico Burns",
          "author_login": "nicoburns",
          "committed_at": "2026-07-23T20:47:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c757e5c0b851f8d6aabd5c68e5d167962a9c815",
          "body": "…` if delay changes (#422)\n\nIf the delay in an animation changes, we still might need to update the\n`Paused` state if the animation is moving from `Playing` to `Paused`.\n\nServo PR: servo/servo#46689\n\nSigned-off-by: Martin Robinson <mrobinson@igalia.com>",
          "is_bot": false,
          "headline": "Also update `AnimationState::Paused` in `Animation::update_from_other…",
          "author_name": "Martin Robinson",
          "author_login": "mrobinson",
          "committed_at": "2026-07-22T20:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "394aea737f0c9f85ee442898c29053de8abf68d8",
          "body": "Oddly enough the longhand itself was already enabled. Its not yet\nsupported in servo though.\n\nServo PR: https://github.com/servo/servo/pull/46618\n\nSigned-off-by: Simon Wülker <simon.wuelker@arcor.de>",
          "is_bot": false,
          "headline": "Enable font-language-override for servo (#429)",
          "author_name": "Simon Wülker",
          "author_login": "simonwuelker",
          "committed_at": "2026-07-19T15:11:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3de91cbac7bba38e159239b3c0a360783fce2ee",
          "body": "…o (#377)\n\nServo PR: https://github.com/servo/servo/pull/45308\n\n---------\n\nSigned-off-by: Simon Wülker <simon.wuelker@arcor.de>",
          "is_bot": false,
          "headline": "Support `font-variant-alternates` and `@font-feature-values` for serv…",
          "author_name": "Simon Wülker",
          "author_login": "simonwuelker",
          "committed_at": "2026-07-16T18:37:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5173fcd4455b99cc42777f81715a1bd68ed5b32c",
          "body": "Removes `engine = \"gecko\"` from 8 SVG-geometric properties to be enabled\nfor servo:\n\n- `x`\n- `y`\n- `cx`\n- `cy`\n- `rx`\n- `ry`\n- `r`\n- `d`\n\nServo [PR](https://github.com/servo/servo/pull/46558)\n\nSigned-off-by: Mohamed Mostafa <mu.mostafa98@gmail.com>",
          "is_bot": false,
          "headline": "Enable SVG geometric properties for Servo (#427)",
          "author_name": "Mohamed Mostafa",
          "author_login": "mu-mostafa98",
          "committed_at": "2026-07-16T11:55:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "219f722e8be7feceacd7a870e93b39f6c6d22b7c",
          "body": "Already landed upstream:\nhttps://phabricator.services.mozilla.com/D311004\n(71a8a43642f62f946fcd147e7ac01658e366113e)\n\nImporting it here early to prevent other PRs from adding new\nServo-specific derives due to copy-pasting.\n\nSigned-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Share Stylo's Servo-specific derives with Gecko (#423)",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-11T08:23:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "116ab95e7332c3d44f3d3f2e134f5c90909ff446",
          "body": "This is a partial revert of #340. Waiting for an available macOS runner\nfrequently takes very long, which makes it annoying when trying to land\nmultiple patches, since they need to also be coordinated with the\ncompanion patches in Servo.\n\nSo I think it's better to not wait for the macOS job after all. We will\nstill wait for the Linux and Windows ones.\n\nSigned-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Stop requiring CI jobs to pass on Mac (#424)",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-11T00:41:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a64923b5d5c67313c81c5056f5e30ec0babb04d6",
          "body": "Removes `engine = \"gecko\"` from 11 SVG-specific CSS properties to be\nenabled for servo:\n\n- **Fill (3):** `fill`, `fill-opacity`, `fill-rule`\n- **Stroke (8):** `stroke`, `stroke-width`, `stroke-linecap`,\n`stroke-linejoin`, `stroke-dasharray`, `stroke-dashoffset`,\n`stroke-miterlimit`, `stroke-opacity`\n[…]\n2) for the new\nfields.\n\nServo [PR](https://github.com/servo/servo/pull/45405)\n\n---------\n\nSigned-off-by: Mohamed Mostafa mu-mostafa98@gmail.com\nCo-authored-by: Mohamed Mostafa <mu-mostafa98@gmail.com>",
          "is_bot": false,
          "headline": "Enable basic SVG-related CSS properties for Servo (#383)",
          "author_name": "Mohamed Mostafa",
          "author_login": "mu-mostafa98",
          "committed_at": "2026-07-10T11:56:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f591fc2d6d6e5f1b1da510efcb38d6bfb22e9563",
          "body": "Corresponding servo PR is at https://github.com/servo/servo/pull/45492\n\nSigned-off-by: Psychpsyo (Cameron) <60073468+Psychpsyo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Enable box-decoration-break for Servo (#386)",
          "author_name": "Psychpsyo (Cameron)",
          "author_login": "Psychpsyo",
          "committed_at": "2026-07-10T09:37:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e90bb16403de93f469ae71665e0f047ddb00f9ed",
          "body": "Servo PR: https://github.com/servo/servo/pull/46118\n\nSigned-off-by: Simon Wülker <simon.wuelker@arcor.de>",
          "is_bot": false,
          "headline": "style: Implement iterator over all known non-custom properties (#406)",
          "author_name": "Simon Wülker",
          "author_login": "simonwuelker",
          "committed_at": "2026-07-08T10:19:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0151ab3bf0183dd2f802d32e4f7fb2140ccb3475",
          "body": "A couple more keyword/bitflag properties that I'm implementing in Blitz,\nand would like to enable behind the `layout.unimplemented` pref.\n\nSigned-off-by: Nico Burns <nico@nicoburns.com>",
          "is_bot": false,
          "headline": "Enable `scroll-behavior` and `overscroll-behavior` properties (#420)",
          "author_name": "Nico Burns",
          "author_login": "nicoburns",
          "committed_at": "2026-07-08T08:39:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0381f1838deeee0b0b7ad6b7f45cd1c2536c473",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D308885",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T19:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14e1a7972ecf6180b2a686d65b811509f89a4da1",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D308495",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T19:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acc35ea89ccfd8147b7f7bb87d5e689b2912246e",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D308250",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d646106e3ef21ab62cb6af2d14dbb3cff58b5571",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D306324",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d957b9281018113774dc883ab62265ba55221ac7",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D305186",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04ccd589ae351f38152225df9282f1e9136eed47",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D306635",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62a5138f68b6c45aa3bd63c19d8f7345520ebe98",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D302020",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23d00e56c01b7c2cb98c01914f55a4fb1ad5001d",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D304960",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd33772dbc0ff7ebe521241fd2c166405f477f5b",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D302701",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2872fb8b6a1faef1eb2ea6e62b134cfb50c0a067",
          "body": "Signed-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Fixup for https://phabricator.services.mozilla.com/D287695",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-07T00:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "929ddefe0ecf06a6f9efdf92f2d01d0a293f06e7",
          "body": "This is a rebase of 5685b276c8f2a1a3cf57439d7d70d9c2e3f84f3f\n\nSigned-off-by: Oriol Brufau <obrufau@igalia.com>",
          "is_bot": false,
          "headline": "Commit our changes on top of upstream Stylo",
          "author_name": "Delan Azabani",
          "author_login": "delan",
          "committed_at": "2026-07-07T00:08:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b328f200d5a3b6d48af022c50bc2954fe095b5ef",
          "body": "Any ancestors of this commit are from upstream mozilla-central, with\nsome filtering and renaming. Our patches and sync tooling start here.\n\nThe sync tooling has all been squashed into this commit, based on:\nhttps://github.com/servo/stylo/commits/64731e10dc8ef87ef52aa2fb9f988c3b2530f3a7",
          "is_bot": false,
          "headline": "Servo initial downstream commit",
          "author_name": "Delan Azabani",
          "author_login": "delan",
          "committed_at": "2026-07-01T23:39:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6958c7c5504493c4d0c858b137c80183dd7fa86",
          "body": "…-system-reviewers,dshin\n\nImplement the \"multiply two types\" algorithm.\n\nThis will be used by CSSNumericValue.type() and also allows the CSSMathProduct\nconstructor to validate the types of its values as the first consumer of this\nnew functionality.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309307",
          "is_bot": false,
          "headline": "Bug 2051216 - Implement multiplying two NumericTypes; r=firefox-style…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-07-01T11:20:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "449644a6f97cefa5ce193133ebf466ab3a2e949c",
          "body": "…158. r=firefox-style-system-reviewers,emilio\n\nThe logic in cascade.rs assumes the presence of various properties that\nwere only compiled for Gecko. So compile them also for Servo, disabled\nbehind a runtime flag.\nThis allows removing a few `#[cfg(feature = \"gecko\")]`.\nOn the other hand, various `#[cfg(feature = \"gecko\")]` have to be added.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309737",
          "is_bot": false,
          "headline": "Bug 2051770 - Let Stylo compile for Servo after the changes from D308…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-07-01T10:15:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50ae4a76250e160c8e1b4de06496bc88e1effcc1",
          "body": "…system-reviewers,emilio\n\nExcept for `get_attr()`, all methods have a definition that just needs\n`TElement`, nothing else is Gecko-specific.\n\nSo add a `get_attr()` into `TElement` with different definitions for\nGecko and Servo, and also add `get_tree_counting_result()` with a shared\ndefault implemen\n[…]\nation.\n\nThen the implementation of `ElementContext` for objects that also\nimplement `TElement` can just redirect to `TElement`.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309633",
          "is_bot": false,
          "headline": "Bug 2051667 - Share ElementContext logic with Servo. r=firefox-style-…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-30T20:24:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d84dd982fc40b5cc500f703306e5880bc018e26a",
          "body": "The test is rather tricky but I think fair enough.\n\nI wanted to make the \"decoding\" attribute map to this property, but we'd\nstill need the existing machinery for the src-animation stuff:\n\nhttps://searchfox.org/firefox-main/rev/6a252a86c5bb0fdd7a197d1c244f8a28e0827b3a/dom/base/nsImageLoadingContent.cpp#613-624\n\nSo for now left as is. I removed some redundant flag checks that are\nincluded already by the DL builder stuff.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309119",
          "is_bot": false,
          "headline": "Bug 2050819 - -moz-image-decoding property. r=tnikkel,layout-reviewers",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-30T17:46:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7e7a42a4bbbcae53188327701483701bb0e6b79",
          "body": "…rse(); r=emilio,firefox-style-system-reviewers\n\nExtend CSSNumericValue.parse() to support simple numbers, percentages, angles,\nand times in addition to the already-supported length values.\n\nAlso parse the whole input so strings with trailing tokens are rejected, and\nupdate WPT expectations for tests that now pass with the additional numeric\nvalue support.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309251",
          "is_bot": false,
          "headline": "Bug 2051120 - Support additional numeric values in CSSNumericValue.pa…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-30T11:03:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e35bb42a670923e032dbab9b735410338f455f98",
          "body": "…rts of Stylo shared with Servo. r=firefox-style-system-reviewers,dshin\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309431",
          "is_bot": false,
          "headline": "Bug 2051394 - Don't use Gecko-specific code for link parameters in pa…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-29T23:02:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d661814f1d81c966272a6f667f3c824e0e53e102",
          "body": "…rs,firefox-style-system-reviewers,firefox-svg-reviewers,dshin\n\nIt's unnecessary since bug 2031757.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309401",
          "is_bot": false,
          "headline": "Bug 2051345 - Remove line-height: -moz-block-height. r=layout-reviewe…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-29T17:11:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb5f9a40b914bfa66169e0682a753699b9fcb6b0",
          "body": "… r=emilio,firefox-style-system-reviewers\n\nAdd an unchecked MathSum constructor for sequences of numeric values whose\ntypes have already been validated as addable.\n\nUse it in `SumValue::to_units`, which is now guaranteed to be called only with\naddable units.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309022",
          "is_bot": false,
          "headline": "Bug 2046802 - Add unchecked MathSum constructor for validated values;…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-27T11:45:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab9a7649c7512128b0c5a93935bff36d8fd80043",
          "body": "…firefox-style-system-reviewers,layout-reviewers,emilio\n\nWe add an extra preference,\nlayout.css.text-decoration-inset-percentage.enabled, for the support of\npercentage. This patch only implements the syntax and parsing. We still\nhave to resolve the percentage part in the following patches.\n\nAlso, add the missing parsing tests in WPT.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308885",
          "is_bot": false,
          "headline": "Bug 2044602 - Parse <lenght-percentage> for text-decoration-inset. r=…",
          "author_name": "Boris Chiou",
          "author_login": "BorisChiou",
          "committed_at": "2026-06-27T00:11:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f33a69143ecf705f92a4ae7aa799773bd82256c",
          "body": "…tem-reviewers,emilio\n\nSigned-off-by: Oriol Brufau <obrufau@igalia.com>\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309031",
          "is_bot": false,
          "headline": "Bug 2050808 - Use property-counts in more places. r=firefox-style-sys…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-26T21:28:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1844beaf91f18f31dae3985aedd984f66ebe0e0",
          "body": "…system-reviewers\n\nMake `MathSum` a struct again and add a `NumericType` field, populating it when\nconstructing math sums.\n\nThis preserves the numeric type alongside the list of numeric values so\n`CSSNumericValue.type()` can report the expected type for reified `CSSMathSum`\nobjects.\n\nWPT coverage is added in a follow-up patch to avoid introducing many temporary\ntest failures.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309019",
          "is_bot": false,
          "headline": "Bug 2046802 - Store numeric types in MathSum; r=emilio,firefox-style-…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-26T15:50:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9950fbfa6722701259b354f55cb0cb8aeac7bc5f",
          "body": "Apply cargo fmt to existing code to reduce unrelated formatting changes in\nfollow-up patches.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309018",
          "is_bot": false,
          "headline": "Bug 2046802 - Apply cargo fmt; r=emilio,firefox-style-system-reviewers",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-26T11:01:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94b41d548b424e4a76331616ae1db702b77890da",
          "body": "…smatches. r=firefox-style-system-reviewers,emilio\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308700",
          "is_bot": false,
          "headline": "Bug 2050171 - Return 1 for sibling-index/sibling-count tree-scoped mi…",
          "author_name": "Sajid Anwar",
          "author_login": "kbhomes",
          "committed_at": "2026-06-25T12:30:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5bdfdb802a42b76a9a7a46172c0c744331b0d38",
          "body": "…rioritary properties. r=firefox-style-system-reviewers,dshin\n\nStore the dependencies between them in a PrioritaryPropertyIdSet (a u32,\neffectively), and document them better / reduce them as well.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308517",
          "is_bot": false,
          "headline": "Bug 2050047 - Improve the representation of the dependency graph of p…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T13:33:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bddd9a3965a850162443cb311ff92c4a7e1f003",
          "body": "…x-style-system-reviewers,dshin\n\nI wanted to reuse some of the iteration stuff without re-writing it.\n\nRust's const support is not amazing, otherwise could be even\nneater... But I think this is good enough.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308516",
          "is_bot": false,
          "headline": "Bug 2050047 - Generalize LonghandIdSet into a generic IdSet. r=firefo…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T13:33:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d07aa3592d065b509a63b969221ff1adc8f5a9c1",
          "body": "…yle-system-reviewers,dshin\n\nSome of the complexity in this code seems kind of gratuitious. We no\nlonger are avoiding the VarInfo clone (since we introduced the NonCustom\nstuff), so simplify this a little bit.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308497",
          "is_bot": false,
          "headline": "Bug 2050047 - Make loop handling easier to reason about. r=firefox-st…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T13:33:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "decb5be6fbbc5d21a055dabec78d1cd97aa007e6",
          "body": "…rebase / review comment fix-up.\n\nIt got caught by the \"Should've been handled earlier\" debug assertions.",
          "is_bot": false,
          "headline": "Bug 2021155 - Restore fast path that accidentally got removed during …",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T12:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d0097cde41ea128f319977767de81a1930a38c9",
          "body": "…ont-face. r=firefox-style-system-reviewers,emilio\n\n- Renames `font_face::FontStyle` to `FontStyleRange`, for consistency\n  with `FontWeightRange` and `FontStretchRange`, and to disambiguate it\n  from `values::computed::font::FontStyle`.\n- Renames `ComputedFontStyleDescriptor` to `ComputedFontStyleR\n[…]\nm `FontStyleRange::compute()`, but it's no longer necessary,\n  since `FontStyle::oblique()` already clamps the angle as needed.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308495",
          "is_bot": false,
          "headline": "Bug 2050001 - Simplify logic for computed font-style descriptor of @f…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-24T11:35:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5734d3c257a4ece80e57270dc0583862304aee8",
          "body": "…tution. r=firefox-style-system-reviewers,dshin\n\nWe don't need to do this anymore. Also avoid some registration lookups.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308238",
          "is_bot": false,
          "headline": "Bug 2021155 - Don't move around the custom property map during substi…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T11:33:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a0590d10dc3711f37a662cdc746e0f2bae8ade5",
          "body": "…ox-style-system-reviewers,dshin\n\nThis reuses some storage during property substitution. It still isn't a\nmerge between cycle detection and substitution but it addresses some of\nthe performance regressions seen from the previous patch and is fairly\nstraight-forward.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308225",
          "is_bot": false,
          "headline": "Bug 2021155 - Save some work in custom property substitution. r=firef…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T11:33:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ab9c6f5422da9f74711eca3d85041ebcc58288e",
          "body": "…rties. r=dshin,firefox-style-system-reviewers\n\nThis removes CustomPropertiesBuilder and moves custom property handling\ndirectly to cascade, so that we can deal with the interactions between\ncustom properties and non-custom properties in one place.\n\nThe keyframe stuff is still kinda gross (ugh, Anim\n[…]\n't).\n\n * It uses a SmallVec<&Atom> for cycles because that's generally pretty\n   cheap and it grows with custom property depth.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308158",
          "is_bot": false,
          "headline": "Bug 2021155 - Introduce a more proper property graph for custom prope…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-24T11:33:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c045d30e75119b1e79bc43e3be453f3d406ff18",
          "body": "…nt when appearance:base r=firefox-style-system-reviewers,emilio\" for causing failures at contain-size-select-elem-003.html.\n\nThis reverts commit 7fd8b2d4bd0d08fa1924920da941ff74dbc7c2f4.",
          "is_bot": false,
          "headline": "Revert \"Bug 2044275 - Wire up ::picker, showing instead of SelectPare…",
          "author_name": "Atila Butkovits",
          "author_login": null,
          "committed_at": "2026-06-24T10:54:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fd8b2d4bd0d08fa1924920da941ff74dbc7c2f4",
          "body": "…appearance:base r=firefox-style-system-reviewers,emilio\n\nThis implements the styles & machinery for ::picker to be shown as a\nanchor-pos popover, instead of the SelectParent - when in appearance base.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305622",
          "is_bot": false,
          "headline": "Bug 2044275 - Wire up ::picker, showing instead of SelectParent when …",
          "author_name": "Keith Cirkel",
          "author_login": "keithamus",
          "committed_at": "2026-06-24T09:30:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4d6cf70caf3734cdfbe1585d6b020faa73e4fe5",
          "body": "…r text-decoration-inset. r=firefox-style-system-reviewers,layout-reviewers,dshin\n\nDifferential Revision: https://phabricator.services.mozilla.com/D308250",
          "is_bot": false,
          "headline": "Bug 1997043 - Enable animating between 'auto' and explicit lengths fo…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-23T13:26:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79af21c3f8589a07816242fe81a68a87e55c76d8",
          "body": "…nt when appearance:base r=firefox-style-system-reviewers,emilio\" for causing wpt failures at accessibility-minimum-target-size.html\n\nThis reverts commit 3796944a181dfe299eabd8be1002d396effd77d9.",
          "is_bot": false,
          "headline": "Revert \"Bug 2044275 - Wire up ::picker, showing instead of SelectPare…",
          "author_name": "Silaghi",
          "author_login": null,
          "committed_at": "2026-06-23T10:11:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd18fa8095838525b01ec20e921c0b0cf55a666f",
          "body": "…ween color spaces. r=layout-reviewers,firefox-style-system-reviewers,emilio,nchevobbe\n\nPer spec, missing components used directly should be treated as 0. We\nalready keep track of none components during mixing using the flags,\nso NaN placeholders are not needed.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306997",
          "is_bot": false,
          "headline": "Bug 2045815 - Treat missing color components as 0 when converting bet…",
          "author_name": "Tiaan Louw",
          "author_login": "tiaanl",
          "committed_at": "2026-06-23T08:52:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3796944a181dfe299eabd8be1002d396effd77d9",
          "body": "…appearance:base r=firefox-style-system-reviewers,emilio\n\nThis implements the styles & machinery for ::picker to be shown as a\nanchor-pos popover, instead of the SelectParent - when in appearance base.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305622",
          "is_bot": false,
          "headline": "Bug 2044275 - Wire up ::picker, showing instead of SelectParent when …",
          "author_name": "Keith Cirkel",
          "author_login": "keithamus",
          "committed_at": "2026-06-23T08:37:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b4f6b7bb61cbd9e47f947c7231d13b29c2d2b28",
          "body": "…x-style-system-reviewers,emilio,dshin\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306324",
          "is_bot": false,
          "headline": "Bug 2047015 - Implement CSS progress() function behind pref. r=firefo…",
          "author_name": "Sajid Anwar",
          "author_login": "kbhomes",
          "committed_at": "2026-06-22T14:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "102d587b935e6fc17fc56f306d7c3a9aec757835",
          "body": "…ax. r=layout-reviewers,firefox-style-system-reviewers,dshin\n\nUse the modern `color(srgb ...)` storage path when any component is\n`none`, since legacy sRGB cannot represent `none` anyway.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307020",
          "is_bot": false,
          "headline": "Bug 1901991 - Preserve `none` components when parsing modern rgb synt…",
          "author_name": "Tiaan Louw",
          "author_login": "tiaanl",
          "committed_at": "2026-06-22T12:05:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3fc15a6d6585356defcd6373cfe46bbb6567af1",
          "body": "…ior with large arrays. r=firefox-style-system-reviewers,emilio\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307914",
          "is_bot": false,
          "headline": "Bug 2040731 - Optimize dedup_font_settings() to avoid quadratic behav…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-21T12:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52c120a20b1599fd092f69fd751111aa12e99853",
          "body": "…ection. r=dshin,sukil,firefox-style-system-reviewers\n\nThis fixes attr-cycle failures with my patch for bug 2048926.\n\nThere are two tweaks:\n\n * Change update_attributes_map to not look at type-less attributes\n   eagerly, since they don't introduce extra references.\n\n * Change the cycle code to look \n[…]\nituted.\n\nAdd a test that fails without this change even without that patch\n(basically the same but with the variables swapped).\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307865",
          "is_bot": false,
          "headline": "Bug 2049009 - Fix hash iteration order dependency in attr() cycle det…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-19T21:37:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6fff926a7967d28a1b59777fe17790b8b28ea997",
          "body": "…FixedPoint instead of f32. r=firefox-style-system-reviewers,emilio\n\nf32 prevents Servo from deriving Hash, and it ended up being converted anyway.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307743",
          "is_bot": false,
          "headline": "Bug 2048889 - Change ComputedFontStyleDescriptor to contain FontStyle…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-19T14:11:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08f1a1b064d4bbd6e1d082d84d312a4bf38ed099",
          "body": "…stead of f32. r=firefox-style-system-reviewers,dshin\n\nIt's simpler this way, and will allow Servo to derive Hash.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307599",
          "is_bot": false,
          "headline": "Bug 2048690 - Change ComputedFontWeightRange to contain FontWeight in…",
          "author_name": "Oriol Brufau",
          "author_login": "Loirooriol",
          "committed_at": "2026-06-18T18:13:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f05cb187c22395ba8b6e6928fa45a23486f7b3e8",
          "body": "…llipse() behind a nightly-only. r=Oriol,firefox-style-system-reviewers\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305186",
          "is_bot": false,
          "headline": "Bug 2045278 - Put farthest-corner and closest-corner parameters for e…",
          "author_name": "Diego Escalante",
          "author_login": "dcrescalante",
          "committed_at": "2026-06-18T18:07:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "373a4a9feeabe13b320553560d3182284d5fbdb9",
          "body": "… r=firefox-style-system-reviewers,dshin\n\nWe need to compute lengths / sibling-index() / origin colors, even if we\ndon't end up being able to turn the color into absolute, and preserve\nthat result if so.\n\nThe diff looks big but it's mostly moving code around.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307451",
          "is_bot": false,
          "headline": "Bug 1985452 - Split color computation from relative color resolution.…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-18T14:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1a42c945904165122e4a74edc4054a89b601f75",
          "body": "…dom\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\n\nWe do this by reducing precision proportionately to the value, rather than simply\nrounding to a certain number of decimals or similar, so that small sizes maintai\n[…]\n added, based on the\ntestcase in the report.\n\n(A few existing tests get minor adjustments to allow for the modified precision.)\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306131",
          "is_bot": false,
          "headline": "Bug 2042294 - Quantize font-size at computed-value time, so that \"ran…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-18T12:59:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f46ce138de16c0401523a2fba075501402f9cfd2",
          "body": "…hat \"random\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\" for causing wr failures at rule_cache.rs\n\nThis reverts commit e3087c7f29b2329989d439b734fbc2a83c75b05d.",
          "is_bot": false,
          "headline": "Revert \"Bug 2042294 - Quantize font-size at computed-value time, so t…",
          "author_name": "rperta",
          "author_login": "rperta",
          "committed_at": "2026-06-18T11:03:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3087c7f29b2329989d439b734fbc2a83c75b05d",
          "body": "…dom\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\n\nWe do this by reducing precision proportionately to the value, rather than simply\nrounding to a certain number of decimals or similar, so that small sizes maintai\n[…]\n added, based on the\ntestcase in the report.\n\n(A few existing tests get minor adjustments to allow for the modified precision.)\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306131",
          "is_bot": false,
          "headline": "Bug 2042294 - Quantize font-size at computed-value time, so that \"ran…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-18T10:36:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2286d9578bf13a402af2066dd6f562b2ba9cafc4",
          "body": "…tyle-system-reviewers\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306457",
          "is_bot": false,
          "headline": "Bug 2047198 - Make attr deferring less aggressive. r=emilio,firefox-s…",
          "author_name": "Swarup Ukil",
          "author_login": null,
          "committed_at": "2026-06-18T02:24:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59fbe024ca647c346ae234e4ee390dec344335e4",
          "body": "Differential Revision: https://phabricator.services.mozilla.com/D307310",
          "is_bot": false,
          "headline": "Bug 2048174 - Fix alpha serialization of relative colors. r=sajidanwar",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-17T21:56:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3974492d792d2d050c94762b8ac97e88c240c69",
          "body": "…nt when appearance:base r=firefox-style-system-reviewers,emilio\" for causin wr test failures at /css/css-contain/contain-size-select-elem-003.html\n\nThis reverts commit 3080c3904536b760cb0355e960df56b5431785a7.",
          "is_bot": false,
          "headline": "Revert \"Bug 2044275 - Wire up ::picker, showing instead of SelectPare…",
          "author_name": "Silaghi",
          "author_login": null,
          "committed_at": "2026-06-17T19:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3080c3904536b760cb0355e960df56b5431785a7",
          "body": "…appearance:base r=firefox-style-system-reviewers,emilio\n\nThis implements the styles & machinery for ::picker to be shown as a\nanchor-pos popover, instead of the SelectParent - when in appearance base.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305622",
          "is_bot": false,
          "headline": "Bug 2044275 - Wire up ::picker, showing instead of SelectParent when …",
          "author_name": "Keith Cirkel",
          "author_login": "keithamus",
          "committed_at": "2026-06-17T18:03:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9efbbe9a062294cd3401b93bfeddaa0d0ae3d6d0",
          "body": "…hat \"random\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\" for causing wr failures @rule_cache.rs.\n\nThis reverts commit b9ec8814664f0524530b13796b69b960c9bf5992.",
          "is_bot": false,
          "headline": "Revert \"Bug 2042294 - Quantize font-size at computed-value time, so t…",
          "author_name": "agoloman",
          "author_login": "agoloman",
          "committed_at": "2026-06-17T16:06:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59d7e5a81250f099e5e26791c4c1b2eb299949b8",
          "body": null,
          "is_bot": false,
          "headline": "Bug 2048212 - remove file-whitespace.",
          "author_name": "agoloman",
          "author_login": "agoloman",
          "committed_at": "2026-06-17T15:47:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38f691e97992477a3e28dc0103b4fad3bcc1ff67",
          "body": "…style-system-reviewers,dshin\n\nAnd use them for SimpleFilter as well. Inspired by a claudometer patch.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307250",
          "is_bot": false,
          "headline": "Bug 2048212 - Include local names in subtree bloom filter. r=firefox-…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-17T15:38:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ec8814664f0524530b13796b69b960c9bf5992",
          "body": "…dom\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\n\nWe do this by reducing precision proportionately to the value, rather than simply\nrounding to a certain number of decimals or similar, so that small sizes maintai\n[…]\n added, based on the\ntestcase in the report.\n\n(A few existing tests get minor adjustments to allow for the modified precision.)\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306131",
          "is_bot": false,
          "headline": "Bug 2042294 - Quantize font-size at computed-value time, so that \"ran…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-17T14:54:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a6b99d98aef92554c668bdc3a6b3ba62fb90e37",
          "body": "…le,arai,necko-reviewers,media-playback-reviewers,profiler-reviewers,alwu,canova,jesup,places-reviewers,Standard8\n\nHashing char by char is unnecessarily expensive, this hashes four bytes\nat a time for those.\n\nI did that rather than keeping size_t because HashBytes(uint64_t) ends\nup in two AddUint32T\n[…]\nd we rely on\nit matching:\n\n * HashUTF8AsUTF16()\n * JS atoms\n * xpcom atoms.\n\nUse constexpr to simplify the static atoms set up.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306312",
          "is_bot": false,
          "headline": "Bug 2046953 - Use HashBytes for hashing thin strings. r=sergesanspail…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-17T14:01:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d0d7e093011ad61c1e5980658e07a984d39ce563",
          "body": "…em-reviewers,dshin\n\nImplement the \"add two types\" algorithm, including the \"apply the percent hint\"\nalgorithm.\n\nThis will be used by CSSNumericValue.type() and also allows the CSSMathSum\nconstructor to validate the types of its values as the first consumer of this\nnew functionality.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306211",
          "is_bot": false,
          "headline": "Bug 2046802 - Implement adding two NumericTypes. r=firefox-style-syst…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-17T13:53:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96dd170a74da968b7a89a88e3202e2fdba156c9b",
          "body": "…m-reviewers,dshin\n\nAdd cached non-zero exponent counts and helper methods for reading, setting,\nand updating NumericType exponents.\n\nThese helpers are needed for implementing the \"add two types\" algorithm\nefficiently, and will also be useful for future numeric type matching checks\nsuch as \"A type matches <length>\".\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306209",
          "is_bot": false,
          "headline": "Bug 2046802 - Add NumericType exponent helpers. r=firefox-style-syste…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-17T13:53:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6da0348ac3fe40f25b34a2ef9afaec0a725edbd",
          "body": "They compute to a keyword. The spec is clear that the values should be\ncomputed, not resolved and currentColor computes to a keyword, see\nhttps://issues.chromium.org/issues/40137692 for the Chromium issue.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307058",
          "is_bot": false,
          "headline": "Bug 2047996 - Make computed currentcolor reify properly. r=janv",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-17T08:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a67401d2206fe757b60bfae8ebe1e10b3356e68",
          "body": "…nv\" for causing wpt failures in properties/logical.html\n\nThis reverts commit fa6f8cebce6e7ad445195829e686bf37bfab4a9b.",
          "is_bot": false,
          "headline": "Revert \"Bug 2047996 - Make computed currentcolor reify properly. r=ja…",
          "author_name": "Cristian Tuns",
          "author_login": null,
          "committed_at": "2026-06-17T01:17:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6b1b7cf58d16b1257ff6b556dd5063222b3493a",
          "body": "…ting between color spaces. r=layout-reviewers,firefox-style-system-reviewers,emilio\" for causing failures at test_color_to.html.\n\nThis reverts commit f413a6f06adc25c95b3f1f2169cb0172316b98dd.",
          "is_bot": false,
          "headline": "Revert \"Bug 2045815 - Treat missing color components as 0 when conver…",
          "author_name": "Atila Butkovits",
          "author_login": null,
          "committed_at": "2026-06-17T00:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f413a6f06adc25c95b3f1f2169cb0172316b98dd",
          "body": "…ween color spaces. r=layout-reviewers,firefox-style-system-reviewers,emilio\n\nPer spec, missing components used directly should be treated as 0. We\nalready keep track of none components during mixing using the flags,\nso NaN placeholders are not needed.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306997",
          "is_bot": false,
          "headline": "Bug 2045815 - Treat missing color components as 0 when converting bet…",
          "author_name": "Tiaan Louw",
          "author_login": "tiaanl",
          "committed_at": "2026-06-16T23:01:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3fe26763f7fb99d8ce067896debee7a76f8ccd4",
          "body": "…hat \"random\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\" for causing reftest failures in /color-1-ref.html\n\nThis reverts commit ae957f26de5b1fc4385826bd6ad7fd2c5ddc1c27.",
          "is_bot": false,
          "headline": "Revert \"Bug 2042294 - Quantize font-size at computed-value time, so t…",
          "author_name": "Cristian Tuns",
          "author_login": null,
          "committed_at": "2026-06-16T22:52:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4adf21bcb3a0fceed4cb3a2a68398074c2f83296",
          "body": "…sanspaille,arai,necko-reviewers,media-playback-reviewers,profiler-reviewers,alwu,canova,jesup\" for causing mochitest failures in test_beaconContentPolicy.html\n\nThis reverts commit dc4ec0bb8ca6362f9115a063483f14fb3eb083f8.",
          "is_bot": false,
          "headline": "Revert \"Bug 2046953 - Use HashBytes for hashing thin strings. r=serge…",
          "author_name": "Cristian Tuns",
          "author_login": null,
          "committed_at": "2026-06-16T21:21:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa6f8cebce6e7ad445195829e686bf37bfab4a9b",
          "body": "They compute to a keyword. The spec is clear that the values should be\ncomputed, not resolved and currentColor computes to a keyword, see\nhttps://issues.chromium.org/issues/40137692 for the Chromium issue.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307058",
          "is_bot": false,
          "headline": "Bug 2047996 - Make computed currentcolor reify properly. r=janv",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-16T19:09:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae957f26de5b1fc4385826bd6ad7fd2c5ddc1c27",
          "body": "…dom\" floating-point sizes don't overwhelm our caches. r=perftest-reviewers,firefox-style-system-reviewers,layout-reviewers,dshin,sparky\n\nWe do this by reducing precision proportionately to the value, rather than simply\nrounding to a certain number of decimals or similar, so that small sizes maintai\n[…]\n added, based on the\ntestcase in the report.\n\n(A few existing tests get minor adjustments to allow for the modified precision.)\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306131",
          "is_bot": false,
          "headline": "Bug 2042294 - Quantize font-size at computed-value time, so that \"ran…",
          "author_name": "Jonathan Kew",
          "author_login": "jfkthame",
          "committed_at": "2026-06-16T19:08:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "19a6f29d36713b1c3158640974f102ac914d947b",
          "body": "…rgb syntax. r=layout-reviewers,firefox-style-system-reviewers,dshin\" for causing failures at color-computed-rgb.html.\n\nThis reverts commit 1d5df57765e69f1de8199b7047f16f716eab18a8.",
          "is_bot": false,
          "headline": "Revert \"Bug 1901991 - Preserve `none` components when parsing modern …",
          "author_name": "Atila Butkovits",
          "author_login": null,
          "committed_at": "2026-06-16T18:48:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d5df57765e69f1de8199b7047f16f716eab18a8",
          "body": "…ax. r=layout-reviewers,firefox-style-system-reviewers,dshin\n\nUse the modern `color(srgb ...)` storage path when any component is\n`none`, since legacy sRGB cannot represent `none` anyway.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307020",
          "is_bot": false,
          "headline": "Bug 1901991 - Preserve `none` components when parsing modern rgb synt…",
          "author_name": "Tiaan Louw",
          "author_login": "tiaanl",
          "committed_at": "2026-06-16T17:17:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc4ec0bb8ca6362f9115a063483f14fb3eb083f8",
          "body": "…le,arai,necko-reviewers,media-playback-reviewers,profiler-reviewers,alwu,canova,jesup\n\nHashing char by char is unnecessarily expensive, this hashes four bytes\nat a time for those.\n\nI did that rather than keeping size_t because HashBytes(uint64_t) ends\nup in two AddUint32ToHash() anyways, and that w\n[…]\nd we rely on\nit matching:\n\n * HashUTF8AsUTF16()\n * JS atoms\n * xpcom atoms.\n\nUse constexpr to simplify the static atoms set up.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306312",
          "is_bot": false,
          "headline": "Bug 2046953 - Use HashBytes for hashing thin strings. r=sergesanspail…",
          "author_name": "Emilio Cobos Álvarez",
          "author_login": "emilio",
          "committed_at": "2026-06-16T14:51:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4bda1500d3a0ae9f7f0a42f22701f0c7d2ed35b",
          "body": "…pectorUtils.getComputationStepsSupportedCSSFunctions. r=layout-reviewers,firefox-style-system-reviewers,emilio.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306691",
          "is_bot": false,
          "headline": "Bug 2047495 - Properly serialize SiblingCount and SiblingIndex in Ins…",
          "author_name": "Nicolas Chevobbe",
          "author_login": "nchevobbe",
          "committed_at": "2026-06-16T06:46:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02148c2da04dbdf6a303bca2e17fac79a059db3a",
          "body": "…e-system-reviewers\n\nAdd a NumericType field to UnitValue and populate it when constructing unit\nvalues.\n\nThis preserves the numeric type alongside the value and unit string so\nCSSNumericValue.type() can report the expected type for reified CSSUnitValue\nobjects.\n\nWPT coverage is added in a follow-up patch to avoid introducing many temporary\ntest failures.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305909",
          "is_bot": false,
          "headline": "Bug 2045434 - Store numeric types in UnitValue. r=emilio,firefox-styl…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-15T16:44:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c431426426070c31874359c4378f769d1991e4ed",
          "body": "…irefox-style-system-reviewers\n\nRefactor NumericType::try_from_unit() to use dedicated constructors for the\nindividual base types.\n\nThese constructors can be used when the numeric type is already known from\ncontext, avoiding the need to derive it from a unit string. A follow-up patch\nwill use them when constructing UnitValue objects during reification.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305908",
          "is_bot": false,
          "headline": "Bug 2045434 - Add NumericType constructors for base types. r=emilio,f…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-15T16:44:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71503193fa98621ba058edefd79e5dc2d5c2dd77",
          "body": "…refox-style-system-reviewers\n\nStore a NumericType on CSSNumericValue and use it to expose the CSSNumericType\ndictionary from CSSNumericValue::Type().\n\nThe numeric type is initially empty for all numeric values. A follow-up patch\nwill initialize it when constructing CSSUnitValue.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305631",
          "is_bot": false,
          "headline": "Bug 2045434 - Add initial CSSNumericValue.type() support. r=emilio,fi…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-15T10:40:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52b2b0b970e41ba2a6868484e1c979e5e8e81454",
          "body": "…-style-system-reviewers,emilio\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306635",
          "is_bot": false,
          "headline": "Bug 2047437 - Implement alpha() color function behind pref. r=firefox…",
          "author_name": "Sajid Anwar",
          "author_login": "kbhomes",
          "committed_at": "2026-06-15T08:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "598e3f7f088e343de6ee2b701595a182b6e60dc9",
          "body": "…elative colors. r=firefox-style-system-reviewers,tlouw,emilio\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306373",
          "is_bot": false,
          "headline": "Bug 1925572 - Improve parsing and validation of channel keywords in r…",
          "author_name": "Sajid Anwar",
          "author_login": "kbhomes",
          "committed_at": "2026-06-14T21:07:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c6eeef4b228c86274667c52cd2a07260253b6f7",
          "body": "…irefox-style-system-reviewers,emilio)\" for causing build bustages\n\nThis reverts commit bc066288cd32b7285dc1a29c6bc8368b05f23c2a.\n\nRevert \"Bug 2042048: Make selectors dependency on cssparser default features optional (r=firefox-style-system-reviewers,emilio)\"\n\nThis reverts commit ae0e054a14222cfa22400fc1ae60b463f56d2482.\n\nRevert \"Bug 2042048: Eliminate derive_more dependency from selectors (r=firefox-style-system-reviewers,emilio)\"\n\nThis reverts commit a6a9fa253c9070f4e406f47a47447d45096cc49c.",
          "is_bot": false,
          "headline": "Revert \"Bug 2042048: Make selectors's dependency on phf optional (r=f…",
          "author_name": "Sandor Molnar",
          "author_login": "smolnar-sheriff",
          "committed_at": "2026-06-14T20:31:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59d2fb5aa1518c761596e69e2dae905b10ce7cf3",
          "body": null,
          "is_bot": false,
          "headline": "Merge mozilla-central to autoland",
          "author_name": "Lando",
          "author_login": null,
          "committed_at": "2026-06-14T20:21:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b76c3f4f56623300280e5838b87d997df624fdc",
          "body": "…ilio,firefox-style-system-reviewers\" for causing failures @ CSSNumericValue.cpp\n\nThis reverts commit c88ace4b856625e2308dcf8116a3994ff9633182.\n\nRevert \"Bug 2045434 - Validate units in CSSNumericValue.to(). r=emilio,firefox-style-system-reviewers\"\n\nThis reverts commit bfe4621a5bee360d6c6ba48ea2a4492\n[…]\nda2a774f1c0f3228c680cca97cb5.\n\nRevert \"Bug 2045434 - Add initial CSSNumericValue.type() support. r=emilio,firefox-style-system-reviewers\"\n\nThis reverts commit 6114a592d4f7c945e07e0b81c46b709caf2f1b75.",
          "is_bot": false,
          "headline": "Revert \"Bug 2045434 - Validate units in CSSNumericValue.toSum(). r=em…",
          "author_name": "Sandor Molnar",
          "author_login": "smolnar-sheriff",
          "committed_at": "2026-06-14T20:18:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ddd525528964781e24796b0bac51e3a70bb52e5a",
          "body": "…rds in relative colors. r=firefox-style-system-reviewers,tlouw,emilio\" for causing flag related failures.\n\nThis reverts commit ba966310fe2135005b6c8a2ecc1c273d490243aa.",
          "is_bot": false,
          "headline": "Revert \"Bug 1925572 - Improve parsing and validation of channel keywo…",
          "author_name": "Cosmin Sabou",
          "author_login": "CosminSabou",
          "committed_at": "2026-06-14T20:08:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc066288cd32b7285dc1a29c6bc8368b05f23c2a",
          "body": "…tyle-system-reviewers,emilio)\n\nSigned-off-by: Nico Burns <nico@nicoburns.com>\n\nDifferential Revision: https://phabricator.services.mozilla.com/D302243",
          "is_bot": false,
          "headline": "Bug 2042048: Make selectors's dependency on phf optional (r=firefox-s…",
          "author_name": "Nico Burns",
          "author_login": "nicoburns",
          "committed_at": "2026-06-14T20:02:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae0e054a14222cfa22400fc1ae60b463f56d2482",
          "body": "…optional (r=firefox-style-system-reviewers,emilio)\n\nSigned-off-by: Nico Burns <nico@nicoburns.com>\n\nDifferential Revision: https://phabricator.services.mozilla.com/D302242",
          "is_bot": false,
          "headline": "Bug 2042048: Make selectors dependency on cssparser default features …",
          "author_name": "Nico Burns",
          "author_login": "nicoburns",
          "committed_at": "2026-06-14T20:02:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6a9fa253c9070f4e406f47a47447d45096cc49c",
          "body": "…ox-style-system-reviewers,emilio)\n\nThis was only being used for 2 impls which are now hand-written.\n\nSigned-off-by: Nico Burns <nico@nicoburns.com>\n\nDifferential Revision: https://phabricator.services.mozilla.com/D302241",
          "is_bot": false,
          "headline": "Bug 2042048: Eliminate derive_more dependency from selectors (r=firef…",
          "author_name": "Nico Burns",
          "author_login": "nicoburns",
          "committed_at": "2026-06-14T20:02:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba966310fe2135005b6c8a2ecc1c273d490243aa",
          "body": "…elative colors. r=firefox-style-system-reviewers,tlouw,emilio\n\nDifferential Revision: https://phabricator.services.mozilla.com/D306373",
          "is_bot": false,
          "headline": "Bug 1925572 - Improve parsing and validation of channel keywords in r…",
          "author_name": "Sajid Anwar",
          "author_login": "kbhomes",
          "committed_at": "2026-06-14T19:54:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f2ddf462289a8abd22f5bfbcdb25cc53ef01267",
          "body": "…ilio,firefox-style-system-reviewers\" for causing failures @ CSSNumericValue.cpp\n\nThis reverts commit c88ace4b856625e2308dcf8116a3994ff9633182.\n\nRevert \"Bug 2045434 - Validate units in CSSNumericValue.to(). r=emilio,firefox-style-system-reviewers\"\n\nThis reverts commit bfe4621a5bee360d6c6ba48ea2a4492\n[…]\nda2a774f1c0f3228c680cca97cb5.\n\nRevert \"Bug 2045434 - Add initial CSSNumericValue.type() support. r=emilio,firefox-style-system-reviewers\"\n\nThis reverts commit 6114a592d4f7c945e07e0b81c46b709caf2f1b75.",
          "is_bot": false,
          "headline": "Revert \"Bug 2045434 - Validate units in CSSNumericValue.toSum(). r=em…",
          "author_name": "Sandor Molnar",
          "author_login": "smolnar-sheriff",
          "committed_at": "2026-06-14T18:23:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6114a592d4f7c945e07e0b81c46b709caf2f1b75",
          "body": "…refox-style-system-reviewers\n\nStore a NumericType on CSSNumericValue and use it to expose the CSSNumericType\ndictionary from CSSNumericValue::Type().\n\nThe numeric type is initially empty for all numeric values. A follow-up patch\nwill initialize it when constructing CSSUnitValue.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305631",
          "is_bot": false,
          "headline": "Bug 2045434 - Add initial CSSNumericValue.type() support. r=emilio,fi…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-14T07:44:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d4d2cc00ec53fe9315951cf5ca4e6d54b5eb6e7",
          "body": "…emilio,firefox-style-system-reviewers\n\nAdd the initial infrastructure for Numeric Value Typing and implement the\nalgorithm for creating a type from a string unit.\n\nThis will be used by CSSNumericValue.type() and also allows the CSSUnitValue\nconstructor to validate its unit argument.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D305100",
          "is_bot": false,
          "headline": "Bug 2045434 - Implement creating a NumericType from a unit string. r=…",
          "author_name": "Jan Varga",
          "author_login": "janvarga",
          "committed_at": "2026-06-13T16:17:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 18,
      "commits_last_year": 1063,
      "latest_release_at": "2026-07-01T12:43:26Z",
      "latest_release_tag": "v0.19.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 25,
      "mean_days_between_releases": 19.5
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "stylo",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/stylo",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 22,
          "total_downloads": 239417,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 46361,
          "first_published_at": "2024-04-29T22:57:24.925088Z",
          "latest_published_at": "2026-07-03T16:30:13.751128Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "to_shmem",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/to_shmem",
          "is_deprecated": false,
          "latest_version": "0.5.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 6,
          "total_downloads": 239123,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 46732,
          "first_published_at": "2023-02-15T08:05:37.470645Z",
          "latest_published_at": "2026-07-03T16:26:05.455090Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "selectors",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [
            "css",
            "selectors"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/selectors",
          "is_deprecated": false,
          "latest_version": "0.39.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 61,
          "total_downloads": 57870974,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 6604021,
          "first_published_at": "2014-12-29T15:42:13.431991Z",
          "latest_published_at": "2026-07-03T16:26:14.622378Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "servo_arc",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/servo_arc",
          "is_deprecated": false,
          "latest_version": "0.4.3",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 7,
          "total_downloads": 55457147,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 6194802,
          "first_published_at": "2018-01-12T23:13:18.094655Z",
          "latest_published_at": "2025-11-12T14:54:32.018040Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 256
        },
        {
          "name": "stylo_dom",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [
            "css",
            "style"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/stylo_dom",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 20,
          "total_downloads": 237169,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 46405,
          "first_published_at": "2024-10-12T13:25:25.286253Z",
          "latest_published_at": "2026-07-03T16:29:08.284433Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "stylo_atoms",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/stylo_atoms",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 20,
          "total_downloads": 237396,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 46427,
          "first_published_at": "2024-10-12T13:48:28.432740Z",
          "latest_published_at": "2026-07-03T16:28:45.290302Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "stylo_derive",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/stylo_derive",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 20,
          "total_downloads": 235295,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 45805,
          "first_published_at": "2024-10-12T14:51:41.683793Z",
          "latest_published_at": "2026-07-03T16:29:24.609425Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        },
        {
          "name": "stylo_traits",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/stylo_traits",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/servo/stylo",
          "versions_count": 20,
          "total_downloads": 237021,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 46399,
          "first_published_at": "2024-10-12T14:48:41.830394Z",
          "latest_published_at": "2026-07-03T16:29:41.554119Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 23
        }
      ]
    },
    "popularity": {
      "forks": 94,
      "stars": 304,
      "watchers": 9,
      "fork_history": {
        "days": [
          {
            "date": "2024-03-01",
            "count": 1
          },
          {
            "date": "2024-03-10",
            "count": 1
          },
          {
            "date": "2024-03-18",
            "count": 3
          },
          {
            "date": "2024-03-21",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-05-05",
            "count": 1
          },
          {
            "date": "2024-06-02",
            "count": 1
          },
          {
            "date": "2024-07-17",
            "count": 1
          },
          {
            "date": "2024-08-29",
            "count": 1
          },
          {
            "date": "2024-09-06",
            "count": 1
          },
          {
            "date": "2024-10-05",
            "count": 1
          },
          {
            "date": "2024-10-27",
            "count": 1
          },
          {
            "date": "2024-11-11",
            "count": 1
          },
          {
            "date": "2024-11-20",
            "count": 1
          },
          {
            "date": "2024-12-10",
            "count": 1
          },
          {
            "date": "2024-12-26",
            "count": 1
          },
          {
            "date": "2025-01-10",
            "count": 1
          },
          {
            "date": "2025-01-13",
            "count": 1
          },
          {
            "date": "2025-01-24",
            "count": 2
          },
          {
            "date": "2025-02-02",
            "count": 1
          },
          {
            "date": "2025-02-03",
            "count": 1
          },
          {
            "date": "2025-02-07",
            "count": 1
          },
          {
            "date": "2025-02-10",
            "count": 1
          },
          {
            "date": "2025-02-18",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-03-01",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 2
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-03-23",
            "count": 1
          },
          {
            "date": "2025-04-06",
            "count": 1
          },
          {
            "date": "2025-04-11",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-05-16",
            "count": 1
          },
          {
            "date": "2025-05-25",
            "count": 1
          },
          {
            "date": "2025-07-19",
            "count": 1
          },
          {
            "date": "2025-07-22",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 1
          },
          {
            "date": "2025-09-01",
            "count": 1
          },
          {
            "date": "2025-09-08",
            "count": 1
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-29",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2025-10-30",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-11-15",
            "count": 1
          },
          {
            "date": "2025-11-23",
            "count": 2
          },
          {
            "date": "2025-11-26",
            "count": 1
          },
          {
            "date": "2025-12-08",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-20",
            "count": 1
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-24",
            "count": 1
          },
          {
            "date": "2026-02-20",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-11",
            "count": 1
          },
          {
            "date": "2026-03-15",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 2
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-26",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 2
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 92,
        "total_forks": 94
      },
      "star_history": null,
      "open_issues_and_prs": 46
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "malloc_size_of/Cargo.toml",
        "selectors/Cargo.toml",
        "servo_arc/Cargo.toml",
        "style/Cargo.toml",
        "style_derive/Cargo.toml",
        "style_traits/Cargo.toml",
        "stylo_atoms/Cargo.toml",
        "stylo_dom/Cargo.toml",
        "stylo_static_prefs/Cargo.toml",
        "to_shmem/Cargo.toml",
        "to_shmem_derive/Cargo.toml"
      ],
      "largest_source_bytes": 187207,
      "source_files_sampled": 347,
      "oversized_source_files": 18,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "malloc_size_of/Cargo.toml",
        "selectors/Cargo.toml",
        "servo_arc/Cargo.toml",
        "style/Cargo.toml",
        "style_derive/Cargo.toml",
        "style_traits/Cargo.toml",
        "stylo_atoms/Cargo.toml",
        "stylo_dom/Cargo.toml",
        "stylo_static_prefs/Cargo.toml",
        "to_shmem/Cargo.toml",
        "to_shmem_derive/Cargo.toml"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 52,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "app_units",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "cssparser",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.37"
        },
        {
          "name": "euclid",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "selectors",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "servo_arc",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallbitvec",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.3.0"
        },
        {
          "name": "smallvec",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.13"
        },
        {
          "name": "string_cache",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "thin-vec",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.13"
        },
        {
          "name": "void",
          "manifest": "malloc_size_of/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0.2"
        },
        {
          "name": "bitflags",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "cssparser",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.37"
        },
        {
          "name": "derive_more",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "rustc-hash",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.1.1"
        },
        {
          "name": "log",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "phf",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "precomputed-hash",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "servo_arc",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "to_shmem",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "to_shmem_derive",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "new_debug_unreachable",
          "manifest": "selectors/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde",
          "manifest": "servo_arc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "stable_deref_trait",
          "manifest": "servo_arc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0.0"
        },
        {
          "name": "app_units",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7.8"
        },
        {
          "name": "arrayvec",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "atomic_refcell",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "bitflags",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "byteorder",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "cssparser",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.37"
        },
        {
          "name": "derive_more",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "dom",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "new_debug_unreachable",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "encoding_rs",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "euclid",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "rustc-hash",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.1.1"
        },
        {
          "name": "icu_segmenter",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": ">= 1.5, <= 2.*"
        },
        {
          "name": "indexmap",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "itertools",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        },
        {
          "name": "itoa",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "log",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "malloc_size_of",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "malloc_size_of_derive",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "web_atoms",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.0"
        },
        {
          "name": "mime",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3.13"
        },
        {
          "name": "num_cpus",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1.0"
        },
        {
          "name": "num-integer",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "num-traits",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "num-derive",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "parking_lot",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "precomputed-hash",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.1"
        },
        {
          "name": "rayon",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "rayon-core",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "selectors",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "servo_arc",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "stylo_atoms",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallbitvec",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.3.0"
        },
        {
          "name": "smallvec",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "static_assertions",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "static_prefs",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "string_cache",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "strum",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.28"
        },
        {
          "name": "strum_macros",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.28"
        },
        {
          "name": "style_derive",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "style_traits",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "to_shmem",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "to_shmem_derive",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thin-vec",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.1"
        },
        {
          "name": "uluru",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.0"
        },
        {
          "name": "void",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0.2"
        },
        {
          "name": "url",
          "manifest": "style/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.5"
        },
        {
          "name": "darling",
          "manifest": "style_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.20"
        },
        {
          "name": "proc-macro2",
          "manifest": "style_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "quote",
          "manifest": "style_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "syn",
          "manifest": "style_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "synstructure",
          "manifest": "style_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "app_units",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "bitflags",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "cssparser",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.37"
        },
        {
          "name": "euclid",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "malloc_size_of",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "malloc_size_of_derive",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "selectors",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "servo_arc",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "stylo_atoms",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thin-vec",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "to_shmem",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "to_shmem_derive",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "url",
          "manifest": "style_traits/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.5"
        },
        {
          "name": "string_cache",
          "manifest": "stylo_atoms/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "bitflags",
          "manifest": "stylo_dom/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "malloc_size_of",
          "manifest": "stylo_dom/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "cssparser",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.37"
        },
        {
          "name": "servo_arc",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallbitvec",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.3.0"
        },
        {
          "name": "smallvec",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.13"
        },
        {
          "name": "string_cache",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "thin-vec",
          "manifest": "to_shmem/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.1"
        },
        {
          "name": "darling",
          "manifest": "to_shmem_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.20"
        },
        {
          "name": "proc-macro2",
          "manifest": "to_shmem_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "quote",
          "manifest": "to_shmem_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "syn",
          "manifest": "to_shmem_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "synstructure",
          "manifest": "to_shmem_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "app_units",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "arrayvec",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "atomic_refcell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bitflags",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "byteorder",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "cssparser",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "darling",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "derive_more",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "encoding_rs",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "euclid",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "icu_segmenter",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "indexmap",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "itertools",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "itoa",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "log",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "malloc_size_of_derive",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "mime",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "new_debug_unreachable",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "num-derive",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "num-integer",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "num-traits",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "num_cpus",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "parking_lot",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "phf",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "precomputed-hash",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "proc-macro2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "quote",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rayon",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rayon-core",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rustc-hash",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "smallbitvec",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "smallvec",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "stable_deref_trait",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "static_assertions",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "string_cache",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "strum",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "strum_macros",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "synstructure",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "thin-vec",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "uluru",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "url",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "void",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "web_atoms",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bindgen",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "mozbuild",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "phf_codegen",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "regex",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "string_cache_codegen",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "toml",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "walkdir",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 52,
        "direct_count": 45,
        "indirect_count": 7
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 17,
        "merged_prs": 276,
        "open_issues": 29,
        "closed_ratio": 0.655,
        "closed_issues": 55,
        "closed_unmerged_prs": 52
      },
      "bus_factor": 8,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "emilio",
          "commits": 2714,
          "avatar_url": "https://avatars.githubusercontent.com/u/1323194?v=4"
        },
        {
          "type": "User",
          "login": "Ms2ger",
          "commits": 724,
          "avatar_url": "https://avatars.githubusercontent.com/u/111161?v=4"
        },
        {
          "type": "User",
          "login": "nox",
          "commits": 476,
          "avatar_url": "https://avatars.githubusercontent.com/u/123095?v=4"
        },
        {
          "type": "User",
          "login": "pcwalton",
          "commits": 324,
          "avatar_url": "https://avatars.githubusercontent.com/u/157897?v=4"
        },
        {
          "type": "User",
          "login": "gw3583",
          "commits": 305,
          "avatar_url": "https://avatars.githubusercontent.com/u/39062770?v=4"
        },
        {
          "type": "User",
          "login": "BorisChiou",
          "commits": 281,
          "avatar_url": "https://avatars.githubusercontent.com/u/1914903?v=4"
        },
        {
          "type": "User",
          "login": "SimonSapin",
          "commits": 265,
          "avatar_url": "https://avatars.githubusercontent.com/u/291359?v=4"
        },
        {
          "type": "User",
          "login": "upsuper",
          "commits": 255,
          "avatar_url": "https://avatars.githubusercontent.com/u/333750?v=4"
        },
        {
          "type": "User",
          "login": "Manishearth",
          "commits": 251,
          "avatar_url": "https://avatars.githubusercontent.com/u/1617736?v=4"
        },
        {
          "type": "User",
          "login": "dshin-moz",
          "commits": 249,
          "avatar_url": "https://avatars.githubusercontent.com/u/102040459?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.264
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": false,
      "ci_workflows": [
        "main.yml",
        "mirror-to-release-branch.yml",
        "sync-upstream.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "11 out of 11 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": 6,
            "reason": "Found 18/30 approved changesets -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 46 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "2d289c14fdf46952d52cabce63b1f0dc55b2ccde",
        "ran_at": "2026-07-26T16:37:42Z",
        "aggregate_score": 4.8,
        "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-26T13:44:54Z",
      "oldest_open_prs": [
        {
          "number": 213,
          "created_at": "2025-07-03T04:18:46Z",
          "last_comment_at": "2025-07-03T09:15:10Z",
          "last_comment_author": "yezhizhen"
        },
        {
          "number": 224,
          "created_at": "2025-08-05T14:28:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 225,
          "created_at": "2025-08-07T13:10:07Z",
          "last_comment_at": "2025-10-10T15:57:23Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 241,
          "created_at": "2025-09-14T00:43:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 253,
          "created_at": "2025-10-10T15:45:49Z",
          "last_comment_at": "2025-10-10T18:19:49Z",
          "last_comment_author": "Loirooriol"
        },
        {
          "number": 270,
          "created_at": "2025-11-18T08:52:16Z",
          "last_comment_at": "2025-11-26T12:38:40Z",
          "last_comment_author": "RichardTjokroutomo"
        },
        {
          "number": 276,
          "created_at": "2025-12-03T02:54:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 288,
          "created_at": "2026-01-19T14:31:30Z",
          "last_comment_at": "2026-06-16T15:35:28Z",
          "last_comment_author": "lukewarlow"
        },
        {
          "number": 290,
          "created_at": "2026-01-23T02:03:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 296,
          "created_at": "2026-01-27T13:13:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 351,
          "created_at": "2026-04-10T07:35:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 363,
          "created_at": "2026-05-13T07:43:05Z",
          "last_comment_at": "2026-05-13T12:58:59Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 396,
          "created_at": "2026-06-16T13:52:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 405,
          "created_at": "2026-06-28T19:16:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 411,
          "created_at": "2026-07-02T13:52:34Z",
          "last_comment_at": "2026-07-02T14:55:45Z",
          "last_comment_author": "Loirooriol"
        },
        {
          "number": 412,
          "created_at": "2026-07-02T13:57:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 430,
          "created_at": "2026-07-22T23:03:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-23T20:50:06Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 206,
          "created_at": "2017-03-03T03:59:40Z",
          "last_comment_at": "2017-06-27T12:09:59Z",
          "last_comment_author": "nox"
        },
        {
          "number": 204,
          "created_at": "2017-05-20T12:12:05Z",
          "last_comment_at": "2017-05-20T12:12:06Z",
          "last_comment_author": "highfive"
        },
        {
          "number": 205,
          "created_at": "2017-08-26T12:48:37Z",
          "last_comment_at": "2017-08-28T22:50:24Z",
          "last_comment_author": "nox"
        },
        {
          "number": 210,
          "created_at": "2020-04-30T00:00:58Z",
          "last_comment_at": "2025-06-30T07:30:56Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 299,
          "created_at": "2024-01-13T16:03:27Z",
          "last_comment_at": "2026-05-12T08:00:16Z",
          "last_comment_author": "yilin0518"
        },
        {
          "number": 5,
          "created_at": "2024-02-28T04:18:20Z",
          "last_comment_at": "2024-03-14T15:03:33Z",
          "last_comment_author": "mrobinson"
        },
        {
          "number": 17,
          "created_at": "2024-03-08T00:20:01Z",
          "last_comment_at": "2024-05-25T11:50:05Z",
          "last_comment_author": "mrobinson"
        },
        {
          "number": 30,
          "created_at": "2024-04-11T03:28:07Z",
          "last_comment_at": "2024-04-11T08:54:54Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 101,
          "created_at": "2024-12-22T00:55:33Z",
          "last_comment_at": "2026-07-13T00:13:48Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 118,
          "created_at": "2025-02-04T12:40:05Z",
          "last_comment_at": "2025-02-08T07:41:58Z",
          "last_comment_author": "Loirooriol"
        },
        {
          "number": 132,
          "created_at": "2025-03-09T23:49:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 176,
          "created_at": "2025-05-03T10:31:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 177,
          "created_at": "2025-05-03T10:33:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 234,
          "created_at": "2025-08-20T14:14:44Z",
          "last_comment_at": "2025-08-20T14:29:00Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 235,
          "created_at": "2025-08-20T14:17:02Z",
          "last_comment_at": "2025-08-20T14:20:47Z",
          "last_comment_author": "mrobinson"
        },
        {
          "number": 240,
          "created_at": "2025-09-13T23:24:56Z",
          "last_comment_at": "2025-09-16T19:52:27Z",
          "last_comment_author": "nicoburns"
        },
        {
          "number": 308,
          "created_at": "2026-02-09T15:56:31Z",
          "last_comment_at": "2026-02-09T19:27:10Z",
          "last_comment_author": "jdm"
        },
        {
          "number": 315,
          "created_at": "2026-02-21T19:19:38Z",
          "last_comment_at": "2026-02-24T23:41:29Z",
          "last_comment_author": "Loirooriol"
        },
        {
          "number": 317,
          "created_at": "2026-03-02T23:49:17Z",
          "last_comment_at": "2026-03-16T22:31:53Z",
          "last_comment_author": "Conan-Kudo"
        },
        {
          "number": 318,
          "created_at": "2026-03-03T18:55:22Z",
          "last_comment_at": "2026-07-18T05:46:50Z",
          "last_comment_author": "mrobinson"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/servo/stylo",
    "host": "github.com",
    "name": "stylo",
    "owner": "servo"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 48,
        "vitality": 100,
        "community": 59,
        "governance": 85,
        "engineering": 46
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 100,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1063,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1063 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1063
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 18,
              "latest_release_tag": "v0.19.0",
              "releases_from_tags": false,
              "days_since_latest_release": 25,
              "mean_days_between_releases": 19.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "18 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 25 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 25
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~19.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 19.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": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 59,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "forks": 94,
              "stars": 304,
              "watchers": 9,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "304 stars",
                "points": 40.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 304
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "94 forks",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "9 watchers",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "packages": [
                "stylo",
                "to_shmem",
                "selectors",
                "servo_arc",
                "stylo_dom",
                "stylo_atoms",
                "stylo_derive",
                "stylo_traits"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 114753542,
              "monthly_downloads": 13076952
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "13,076,952 downloads/month across crates",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 13076952,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "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": 85,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "bus_factor": 8,
              "contributors_sampled": 100,
              "top_contributor_share": 0.264
            },
            "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 26% of commits",
                "points": 16.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 26
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 46 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "merged_prs": 276,
              "open_issues": 29,
              "closed_issues": 55,
              "issue_closed_ratio": 0.655,
              "closed_unmerged_prs": 52
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "66% of issues closed",
                "points": 30.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 66
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "276/328 decided PRs merged",
                "points": 32.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 276,
                      "decided": 328
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 18/30 approved changesets -- score normalized to 6",
                "points": 9,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "followers": 1251,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "servo",
              "public_repos": 193,
              "account_age_days": 5031
            },
            "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,251 followers of servo",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1251,
                      "login": "servo"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "193 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 193
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "stylo",
                "to_shmem",
                "selectors",
                "servo_arc",
                "stylo_dom",
                "stylo_atoms",
                "stylo_derive",
                "stylo_traits"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 23
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 23 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 23
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "61 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 61
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 46,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "has_ci": true,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "11 out of 11 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": "at_risk",
        "name": "Security",
        "value": 48,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 4.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 11 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 18/30 approved changesets -- score normalized to 6",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 46 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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 16
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 47,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.87,
              "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": "87 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "has_nix": true,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "malloc_size_of/Cargo.toml",
                "selectors/Cargo.toml",
                "servo_arc/Cargo.toml",
                "style/Cargo.toml",
                "style_derive/Cargo.toml",
                "style_traits/Cargo.toml",
                "stylo_atoms/Cargo.toml",
                "stylo_dom/Cargo.toml",
                "stylo_static_prefs/Cargo.toml",
                "to_shmem/Cargo.toml",
                "to_shmem_derive/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, malloc_size_of/Cargo.toml, selectors/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, malloc_size_of/Cargo.toml, selectors/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Nix",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Nix"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 187207,
              "source_files_sampled": 347,
              "oversized_source_files": 18
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "18/347 source files over 60KB",
                "points": 52.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 347,
                      "oversized": 18
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T16:38:04.371643Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/servo/stylo.svg",
  "full_name": "servo/stylo",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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