Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 16:38 UTC

servo / stylo

CSS engine that powers Servo and Firefox

RustNo license detected★ 304 stars⑂ 94 forkssince Feb 2024View on GitHub ↗

servo/stylo holds a health index of 70 out of 100, placing it in the Good band. It scores highest on Vitality (100/100) and lowest on Engineering Quality (46/100). It was last updated today. 8 contributors account for most of its recent work.

70
overall / 100
Good

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

70
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

ServoOrganization
1,251 followers193 public repossince Oct 2012

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
crates.iostylo0.19.046,3612223 days ago
crates.ioto_shmem0.5.046,732623 days ago
crates.ioselectors0.39.06,604,0216123 days agocssselectors
crates.ioservo_arc0.4.36,194,8027256 days ago
crates.iostylo_dom0.19.046,4052023 days agocssstyle
crates.iostylo_atoms0.19.046,4272023 days ago
crates.iostylo_derive0.19.045,8052023 days ago
crates.iostylo_traits0.19.046,3992023 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

100Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
36/36Commit cadence — 52/52 weeks with commits
18/18Commit volume — 1,063 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year1,063
human_commit_share1
days_since_last_push0
active_weeks_last_year52

Release discipline

100Excellent
How it's scored
27/27Ships releases — 18 releases published
36/36Release recency — latest release 25 days ago
27/27Release cadence — a release every ~19.5 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count18
latest_release_tagv0.19.0
releases_from_tagsno
days_since_latest_release25
mean_days_between_releases19.5
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

59Moderate · 18% of overall
How it's scored
40.3/60Stars — 304 stars
16.4/25Forks — 94 forks
5/15Watchers — 9 watchers
Inputs used
forks94
stars304
watchers9
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
0/22.5License — no license file detected
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
80/80Monthly downloads — 13,076,952 downloads/month across crates
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesstylo, to_shmem, selectors, servo_arc, stylo_dom, stylo_atoms, stylo_derive, stylo_traits
dependents
ecosystemscrates
total_downloads114,753,542
monthly_downloads13,076,952
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

85Excellent · 24% of overall
How it's scored
54/54Bus factor — 8 contributor(s) cover half of all commits
16.6/22.5Commit distribution — top contributor authored 26% of commits
13.5/13.5Contributor breadth — 100 contributors
10/10OpenSSF Scorecard: Contributors — project has 46 contributing companies or organizations
Inputs used
bus_factor8
contributors_sampled100
top_contributor_share0.264
How it's scored
30.6/46.8Issue resolution — 66% of issues closed
32.2/38.3PR acceptance — 276/328 decided PRs merged
9/15OpenSSF Scorecard: Code-Review — Found 18/30 approved changesets -- score normalized to 6
Inputs used
merged_prs276
open_issues29
closed_issues55
issue_closed_ratio0.655
closed_unmerged_prs52
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
22.3/25Owner reach — 1,251 followers of servo
25/25Track record — 193 public repos, account ~13 yr old
Inputs used
followers1,251
owner_typeOrganization
is_verified
owner_loginservo
public_repos193
account_age_days5,031
How it's scored
25/25Published & resolvable — 8 package(s) on crates
35/35Publish recency — latest publish 23 days ago
20/20Version history — 61 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesstylo, to_shmem, selectors, servo_arc, stylo_dom, stylo_atoms, stylo_derive, stylo_traits
ecosystemscrates
any_deprecatedno
min_days_since_publish23

Engineering Quality

Are baseline engineering and documentation practices in place?

46At risk · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

50Moderate
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

48At risk · 16% of overall
How it's scored
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — no data
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.5License — 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 — no data
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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4.8
Excluded from scoring (no data or not applicable): branch_protection, packaging, signed_releases. Remaining weights renormalized.

AI Readiness

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.

47At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 87 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.87
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — Cargo.toml, malloc_size_of/Cargo.toml, selectors/Cargo.toml (toolchain convention, no task runner)
0/22Automated tests
0/11Lint / format config
11/11Static type checking — Rust (statically typed)
10/10Reproducible environment — Nix
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixyes
has_testsno
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
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
How it's scored
45/45Type-checkable code — Rust (statically typed)
52.1/55Manageable file sizes — 18/347 source files over 60KB
Inputs used
primary_languageRust
largest_source_bytes187,207
source_files_sampled347
oversized_source_files18

Key facts

304GitHub stars
100contributors
1,063commits, last 12 months
0days since last push
18releases
8bus factor
29open issues
crates.iopackage ecosystems

Data collection warnings

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

More detail

Star and fork history 0 ★ / 94 ⇿
0Stars
94Forks
18Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

0204060801009232024-032025-052026-07
Major 0Minor 18Patch 0

Each point covers 3 days.

OpenSSF Scorecard 4.8 / 10
4.8aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-26 16:37 UTC

8Binary-Artifactsbinaries present in source code
n/aBranch-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
n/aPackagingpackaging 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
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 105
RegistryPackageVersion constraintManifest
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
All dependencies 52

Full resolved dependency set from the GitHub dependency graph: 45 direct and 7 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
crates.ioapp_unitsdirect
crates.ioarrayvecdirect
crates.ioatomic_refcelldirect
crates.iobitflagsdirect
crates.iobyteorderdirect
crates.iocssparserdirect
crates.iodarlingdirect
crates.ioderive_moredirect
crates.ioencoding_rsdirect
crates.ioeucliddirect
crates.ioicu_segmenterdirect
crates.ioindexmapdirect
crates.ioitertoolsdirect
crates.ioitoadirect
crates.iologdirect
crates.iomalloc_size_of_derivedirect
crates.iomimedirect
crates.ionew_debug_unreachabledirect
crates.ionum-derivedirect
crates.ionum-integerdirect
crates.ionum-traitsdirect
crates.ionum_cpusdirect
crates.ioparking_lotdirect
crates.iophfdirect
crates.ioprecomputed-hashdirect
crates.ioproc-macro2direct
crates.ioquotedirect
crates.iorayondirect
crates.iorayon-coredirect
crates.iorustc-hashdirect
crates.ioserdedirect
crates.iosmallbitvecdirect
crates.iosmallvecdirect
crates.iostable_deref_traitdirect
crates.iostatic_assertionsdirect
crates.iostring_cachedirect
crates.iostrumdirect
crates.iostrum_macrosdirect
crates.iosyndirect
crates.iosynstructuredirect
crates.iothin-vecdirect
crates.ioulurudirect
crates.iourldirect
crates.iovoiddirect
crates.ioweb_atomsdirect
crates.iobindgenindirect
crates.iomozbuildindirect
crates.iophf_codegenindirect
crates.ioregexindirect
crates.iostring_cache_codegenindirect
crates.iotomlindirect
crates.iowalkdirindirect
Dependency advisories not assessed

Advisory matching could not run for this report: No resolved dependencies carried a version and a supported ecosystem

Raw JSON report machine-readable
{
  "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
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticscrates.io.