Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 17:44 UTC

opentelemetry-php / sem-conv

[READONLY] The Semantic conventions for OpenTelemetry PHP

PHPNo license detected★ 8 stars⑂ 2 forkssince May 2022View on GitHub ↗

opentelemetry-php/sem-conv holds a health index of 33 out of 100, placing it in the At risk band. It scores highest on Sustainability & Governance (44/100) and lowest on Engineering Quality (17/100). It was last updated 182 days ago. A single contributor accounts for most of its recent work.

33
overall / 100
At risk

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.

33
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

38 followers82 public repossince Dec 2021

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
Packagistopen-telemetry/sem-conv1.38.02,027,25535182 days agologgingmetricsapmtracingopentelemetryotelsemconvsemantic-conventions

Metrics by category

Vitality

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

39At risk · 22% of overall
How it's scored
3.6/36Push recency — last push 182 days ago
5.5/36Commit cadence — 8/52 weeks with commits
8.6/18Commit volume — 8 commits in the last year
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Inputs used
commits_last_year8
human_commit_share1
days_since_last_push182
active_weeks_last_year8
How it's scored
27/27Ships releases — 20 releases published
16.2/36Release recency — latest release 182 days ago
19.8/27Release cadence — a release every ~71.4 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count20
latest_release_tag1.38.0
releases_from_tagsno
days_since_latest_release182
mean_days_between_releases71.4
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?

38At risk · 18% of overall
How it's scored
13.7/60Stars — 8 stars
0/25Forks — 2 forks
1.7/15Watchers — 3 watchers
Inputs used
forks2
stars8
watchers3
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 — 2,027,255 downloads/month across packagist
14/20Registry dependents — 125 packages depend on it
Inputs used
packagesopen-telemetry/sem-conv
dependents125
ecosystemspackagist
total_downloads29,846,857
monthly_downloads2,027,255

Sustainability & Governance

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

44At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
6.1/22.5Commit distribution — top contributor authored 73% of commits
12.2/13.5Contributor breadth — 9 contributors
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Inputs used
bus_factor1
contributors_sampled9
top_contributor_share0.73
How it's scored
0/46.8Issue resolution — no issues or no data
0/38.3PR acceptance — no decided pull requests or no data
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
11.4/25Owner reach — 38 followers of opentelemetry-php
22.1/25Track record — 82 public repos, account ~4 yr old
Inputs used
followers38
owner_typeOrganization
is_verified
owner_loginopentelemetry-php
public_repos82
account_age_days1,664
How it's scored
25/25Published & resolvable — 1 package(s) on packagist
26/35Publish recency — latest publish 182 days ago
20/20Version history — 35 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesopen-telemetry/sem-conv
ecosystemspackagist
any_deprecatedno
min_days_since_publish182

Engineering Quality

Are baseline engineering and documentation practices in place?

17Critical · 20% of overall
How it's scored
0/24CI workflows
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_cino
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

40At risk
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

24Critical · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
0/10Dangerous-Workflow — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5License — license file not detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — no data
0/5Pinned-Dependencies — no data
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — no data
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2.4
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

24Critical · 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 — 37 of 37 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
0/22Automated tests
0/11Lint / format config
0/11Static type checking
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 37
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsno
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.
How it's scored
0/45Type-checkable code — PHP without a type-check config
52.9/55Manageable file sizes — 2/52 source files over 60KB
Inputs used
primary_languagePHP
largest_source_bytes206,540
source_files_sampled52
oversized_source_files2

Key facts

8GitHub stars
9contributors
8commits, last 12 months
182days since last push
20releases
1bus factor
0open issues
Packagistpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

Star and fork history 0 ★ / 2 ⇿
0Stars
2Forks
9Releases

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.

111222212024-042025-052026-07
Major 0Minor 7Patch 2

Each point covers 3 days.

OpenSSF Scorecard 2.4 / 10
2.4aggregate

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-22 17:44 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
n/aDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 606,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "PHP": 602394
      },
      "pushed_at": "2026-01-21T04:23:16Z",
      "created_at": "2022-05-24T16:14:14Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-14T22:55:04Z",
      "description": "[READONLY] The Semantic conventions for OpenTelemetry PHP",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "https://github.com/open-telemetry/opentelemetry-php",
      "name": "OpenTelemetry PHP SIG extra repositories",
      "type": "Organization",
      "login": "opentelemetry-php",
      "company": null,
      "location": null,
      "followers": 38,
      "avatar_url": "https://avatars.githubusercontent.com/u/96889407?v=4",
      "created_at": "2021-12-30T20:32:11Z",
      "is_verified": null,
      "public_repos": 82,
      "account_age_days": 1664
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "1.38.0",
          "kind": "minor",
          "published_at": "2026-01-21T04:23:16Z"
        },
        {
          "tag": "1.37.0",
          "kind": "minor",
          "published_at": "2025-09-03T12:32:01Z"
        },
        {
          "tag": "1.36.0",
          "kind": "minor",
          "published_at": "2025-08-06T22:55:17Z"
        },
        {
          "tag": "1.32.1",
          "kind": "patch",
          "published_at": "2025-06-26T01:08:06Z"
        },
        {
          "tag": "1.32.0",
          "kind": "minor",
          "published_at": "2025-05-05T05:45:24Z"
        },
        {
          "tag": "1.30.0",
          "kind": "minor",
          "published_at": "2025-02-06T00:22:32Z"
        },
        {
          "tag": "1.28.0",
          "kind": "minor",
          "published_at": "2025-02-06T00:18:47Z"
        },
        {
          "tag": "1.27.1",
          "kind": "patch",
          "published_at": "2024-08-28T09:21:19Z"
        },
        {
          "tag": "1.27.0",
          "kind": "minor",
          "published_at": "2024-08-26T04:29:12Z"
        },
        {
          "tag": "1.25.0",
          "kind": "minor",
          "published_at": "2024-04-18T06:13:22Z"
        },
        {
          "tag": "1.24.0",
          "kind": "minor",
          "published_at": "2024-01-23T21:53:26Z"
        },
        {
          "tag": "1.23.1",
          "kind": "patch",
          "published_at": "2023-11-24T01:01:34Z"
        },
        {
          "tag": "1.23.0beta1",
          "kind": "other",
          "published_at": "2023-11-07T23:28:00Z"
        },
        {
          "tag": "1.22.1",
          "kind": "patch",
          "published_at": "2023-10-19T20:11:40Z"
        },
        {
          "tag": "1.22.0",
          "kind": "minor",
          "published_at": "2023-10-18T20:54:08Z"
        },
        {
          "tag": "1.19.0",
          "kind": "minor",
          "published_at": "2023-10-18T20:52:17Z"
        },
        {
          "tag": "1.0.0RC1",
          "kind": "other",
          "published_at": "2023-09-12T07:21:36Z"
        },
        {
          "tag": "1.0.0beta4",
          "kind": "other",
          "published_at": "2023-07-10T23:56:04Z"
        },
        {
          "tag": "1.0.0beta3",
          "kind": "other",
          "published_at": "2023-05-04T23:50:24Z"
        },
        {
          "tag": "1.0.0beta2",
          "kind": "other",
          "published_at": "2023-02-27T09:37:54Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e613bc640a407def4991b8a936a9b27edd9a3240",
          "body": "* generate semconv 1.38.0\n\n- generate 1.38.0\n- update resource detectors to use 1.38.0 semconv classes\n- fix some failing tests\n\n* remove new and not-required semconvs",
          "is_bot": false,
          "headline": "generate semconv 1.38.0 (#1855)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2026-01-21T04:14:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "817db5ac5f5bfac74d907fdea1d977e7b123435f",
          "body": null,
          "is_bot": false,
          "headline": "Fix incubating namespace (#1748)",
          "author_name": "Rainrider",
          "author_login": "Rainrider",
          "committed_at": "2025-11-06T08:31:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04c8183f6e29e525db8ebbe19d164ed20f09c204",
          "body": null,
          "is_bot": false,
          "headline": "Chore: fix docs url (#1730)",
          "author_name": "Pieter Oliver",
          "author_login": "pieterocp",
          "committed_at": "2025-10-19T06:44:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8da7ec497c881e39afa6657d72586e27efbd29a1",
          "body": null,
          "is_bot": false,
          "headline": "generate semconv 1.37.0 (#1704)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-09-03T12:08:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c873e7cc893bab0a9e8511d2f32d76141bb402f5",
          "body": null,
          "is_bot": false,
          "headline": "add deployment attributes to semconv (#1700)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-09-01T10:19:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd3f0c195088f997d85da0578e446a25cfb3936e",
          "body": "…59 (#1695)\n\n* Update weaver to v0.17.1 from v0.16.1\n\nThis resolves: https://github.com/open-telemetry/opentelemetry-php/issues/1694\n\n* [SemConv] Add TLS trace attributes to new structure introduced in #1659",
          "is_bot": false,
          "headline": "[SemConv] Add TLS trace attributes to new structure introduced in #16…",
          "author_name": "Cees-Jan Kiewiet",
          "author_login": "WyriHaximus",
          "committed_at": "2025-08-24T10:33:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36664f11fe47215d907be09ead8a8e30a99a59c7",
          "body": null,
          "is_bot": false,
          "headline": "adding network semantic conventions (#1682)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-08-07T23:07:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60dd18fd21d45e6f4234ecab89c14021b6e3de9a",
          "body": "Align with how the spec advises SemConv should be organised, and break unstable\nsemconvs out into their own directory.\nI played around with generating values as enums, but I could only get this to work\nif the output was in the same file as the attributes (which would not work well with\ncomposer auto\n[…]\npt all in the same file.\n\n* fix linting, broken values containing '.'\n\n* fix incubating namespace\n\n* update semconv readme\n\n* restore ResourceAttributeValues\n\n* adding DNS semconv\n\n* adding db metrics",
          "is_bot": false,
          "headline": "refactor semantic conventions (#1659)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-08-04T03:22:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94daa85ea61a8e2b7e1b0af6be0e875bedda7c22",
          "body": null,
          "is_bot": false,
          "headline": "adding metrics semconv (#1633)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-06-24T02:32:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e2267b93911693ed3d6b105c5b9da142ff5fb27",
          "body": null,
          "is_bot": false,
          "headline": "update weaver to 0.15.2 (#1629)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-06-12T23:36:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16585cc0dbc3032a318e274043454679430d2ebf",
          "body": "* update semconv to 1.32.0\n* don't generate semconv for android, cpython, ios",
          "is_bot": false,
          "headline": "Semconv 1.32.0 (#1577)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-05-05T03:58:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4178c9f390da8e4dbca9b181a9d1efd50cf7ee0a",
          "body": "* generate semconv 1.30\r\nNB that v1.29 contained a bug, and the recommendation was to skip this version\r\n\r\n* reduce minimum php version to 8.0\r\nwe still have a bunch of auto-instrumentations that work with 8.0",
          "is_bot": false,
          "headline": "Semconv 1.30 (#1495)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-02-06T00:21:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fbf4c6a6e2267ae0e816645396b0aa919969560",
          "body": null,
          "is_bot": false,
          "headline": "generate semconv 1.28 (#1491)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2025-01-29T23:41:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf4083a5329b5d64b368c2164d24c1e938cc5f0a",
          "body": "update semconv generation to use the new tooling. This is fairly close to a 1:1 of what we have now,\r\nalthough I noted a couple of TODOs which we might consider in future to align with what Java is\r\ndoing: split attribute up into file-per-type, and split stable/unstable.",
          "is_bot": false,
          "headline": "use weaver to generate semconv (#1398)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-10-17T09:57:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dba705fea74bc0718d04be26090e3697e56f4e6",
          "body": "the MESSAGING_OPERATION_* attribute values were removed in semconv 1.26.0,\r\nso update our generation to put them back, marking as deprecated",
          "is_bot": false,
          "headline": "re-adding removed trace attribute values (#1368)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-08-28T09:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04685638c98df03419b6683aa1b2646877687c4b",
          "body": "* generate semconv 1.27.0\r\n\r\n* improve attribute values brief and deprecation display\r\n\r\n* remove duplicate trace attribute, ignore deprecated attributes\r\n\r\n* fix tests",
          "is_bot": false,
          "headline": "semconv 1.27.0 (#1356)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-08-06T15:17:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29e200449d7419e625609b80ae9dbd200469dbc8",
          "body": "note that `messaging.client_id` was renamed to `messaging.client.id`, which causes a conflict in const name.\r\nThe recommendation from semconv maintainers is to replace the old value, `messaging.client_id`.",
          "is_bot": false,
          "headline": "update semconv to 1.26.0 (#1316)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-06-28T01:51:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b74bcb7bd7960dc19a88fabfeeaa456d79f9451d",
          "body": null,
          "is_bot": false,
          "headline": "adding enum for semconv versions (#1301)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-05-05T00:19:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23f457ba390847647a17068e0095d9ffe9a4824c",
          "body": "* generate semconv 1.25.0\r\n* Tweak template `deprecated` attributes behavior and regen\r\n* Use is_deprecated filter",
          "is_bot": false,
          "headline": "Update SemConv to 1.25.0 (#1271)",
          "author_name": "Kevin Mian Kraiker",
          "author_login": "CRC-Mismatch",
          "committed_at": "2024-04-09T23:31:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08494e1f4c458938eb46354d73d5292ec784a761",
          "body": "* bump php to 8.1, apply rector\r\n* readonly and typehints\r\n* suppress a dodgy readonly property conversion\r\n* remove some redundant readonly phpdocs\r\n* dont run workflows against 8.0\r\n* more readonly and typehints\r\n* phpdoc reformat\r\n* typehints\r\n* remove php81 polyfill\r\n* revert a rector BC breaking change, and disable that rector for ParentBased",
          "is_bot": false,
          "headline": "drop php 8.0 support (#1256)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-03-14T23:14:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc9fc7e8259138872de39471f4a1ec08691b1d20",
          "body": "* drop php 7.4 support\r\nupdate composer.json minimums, and run rector over the code to update what it can. changed some static analysis\r\nconfig to fix some rector-induced failures.\r\n\r\n* adding union typehints\r\n\r\n* reformat constructor property promotions\r\n\r\n* updating/removing phpdoc\r\n\r\n* suppress p\n[…]\ne comments\r\n\r\n* remove unreachable default match arms for protobuf serializer\r\n\r\n* adding more union types to vars\r\n\r\n* use weakmap directly\r\n\r\n* remove handling for not-supported WeakMap\r\n\r\n* spacing",
          "is_bot": false,
          "headline": "Drop PHP 7.4 support (#1244)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-03-04T01:21:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d03e6501d21c04cd1b1e66e4cbcc7c2dd2e2cfa3",
          "body": "* generate semconv 1.24.0\r\ngenerate latest semconv version, and add back Trace and Resource attribute values which\r\nseem to have been dropped in a previous change.\r\n\r\n* document source repo release urls\r\n\r\n* remove redundant semconv deprecations\r\ntwo trace attributes were deleted then added back to upstream semconv, so remove our ones.",
          "is_bot": false,
          "headline": "generate semconv 1.24.0 (#1219)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2024-01-23T21:47:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6921f9450510bf8e87c737f731ff818de05bf9c4",
          "body": "a bug in 1.23.0 meant that cloud, container and oci resource attributes were incorrectly published under trace attributes.\r\nsort the attributes, so that future diffs are easier to read.",
          "is_bot": false,
          "headline": "generate semconv for 1.23.1 (#1145)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-11-21T22:12:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "211039aa4667f3fbf56f970fad8bf78b6c7d5b33",
          "body": null,
          "is_bot": false,
          "headline": "generate semantic conventions for 1.23.0 (#1137)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-11-07T23:26:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e582b874ee89bec544f962db212b3966fe9310a7",
          "body": null,
          "is_bot": false,
          "headline": "adding 1.19->1.22 semconv traceattributes deprecations (#1129)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-10-19T20:10:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d60e973778e530690b5a84d43c04b4c0faead25c",
          "body": "* update semver to 1.22.0\r\nSince 1.19.0, the source has been split out of opentelemetry-specifiction into semantic-conventions. Update the build script accordingly.\r\nUpdate to latest generator.\r\nAdd 2 new deprecations for semconvs which were renamed since 1.19\r\n* update telemetry semconv",
          "is_bot": false,
          "headline": "update semconv to 1.22.0 (#1126)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-10-18T20:53:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecc6564ce8147d9051222917b0a080975727b698",
          "body": "mention that tags align with the upstream semantic conventions repo",
          "is_bot": false,
          "headline": "update SemConv readme (#1128)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-10-18T20:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45c77006786510ed05d59b61ce253c07afc54d32",
          "body": "Co-authored-by: RoBorg <roborg@gmail.com>",
          "is_bot": false,
          "headline": "Add 'Contributing' message (#1108)",
          "author_name": "Greg Pinnington",
          "author_login": "stickeegreg",
          "committed_at": "2023-09-05T03:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e8785119fb51c77323f1a3d9516835cb3853fad",
          "body": "* adding badges to the various readme files to make more obvious the current versions\r\n* list all packages and versions in main readme\r\n* remove old README documentation (excluding development-specific), and direct users to opentelemetry.io\r\n* link to opentelemetry.io where possible in package readme\r\n* adding a badge to link to releases\r\nreleases are not easy to find, since they exist only in the subtree split repository",
          "is_bot": false,
          "headline": "readme badges and cleanup (#1053)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-06-26T11:10:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "137e579b70f86f03c34bd661cd3e254ad1dc7969",
          "body": null,
          "is_bot": false,
          "headline": "adding support info to composer.json files (#1054)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-06-26T10:57:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79bb3d611b7dad487cafe832e674efb2ea435c29",
          "body": null,
          "is_bot": false,
          "headline": "Add branch aliases (#988)",
          "author_name": "Tobias Bachert",
          "author_login": "Nevay",
          "committed_at": "2023-05-02T22:59:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6ead9f42c0537202d4df95f031ea9c6e222cd00",
          "body": "* update semantic conventions to v1.19\r\n* updating semconv readme\r\n* dropping attribute values\r\nI can't find any usage of the various AttributeValues being used, and other SIGs\r\nno longer generate them, so removing them\r\n* removing semconv usage from API\r\nallow deprecations of moved/removed attributes so that we don't break things across different\r\nsemconv versions (similar to how java does it, except I moved them into a file which is\r\nimported",
          "is_bot": false,
          "headline": "update semantic conventions to v1.19 (#965)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2023-04-26T22:13:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9c81fe00b1c184961b72808b8a12c7ca0ce375a",
          "body": "* gitsplit exporters\r\n* gitsplit swoole context",
          "is_bot": false,
          "headline": "gitsplit contrib components (#804)",
          "author_name": "Brett McBride",
          "author_login": "brettmc",
          "committed_at": "2022-09-06T12:51:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49425a59255222aefd4b5af5187dbdc406b60202",
          "body": "* Update Semantic Convention Generator script\r\n\r\n* Update Semantic Conventions to version 1.12.0",
          "is_bot": false,
          "headline": "Update Semantic Conventions to version 1.12.0 (#725)",
          "author_name": "Timo Michna",
          "author_login": "tidal",
          "committed_at": "2022-06-23T10:49:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04111a1cd9d0ed459edbae8ac3fdea48b4ae3178",
          "body": null,
          "is_bot": false,
          "headline": "Update SemConv (#581)",
          "author_name": "Timo Michna",
          "author_login": "tidal",
          "committed_at": "2022-02-16T07:32:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4efb2b2a56f1da0f1d4407d09b05c91291837848",
          "body": "* Rename protobuf make target to \"make protobuf\"\r\n\r\n* Move otel protobuf files to 'otel' subdirectory\r\n\r\n* Add composer/package-versions-deprecated as allowed plugin\r\n\r\n* Report uncovered files in dependency check\r\n\r\n* Move PrometheusExporter to contrib package\r\n\r\n* Add missing dependency checks\r\n\r\n* Fix API dependency\r\n\r\n* Add package specific composer files\r\n\r\n* Fix wording\r\n\r\n* Add use-statement for PrometheusExporter class",
          "is_bot": false,
          "headline": "Initial package-split setup (#531)",
          "author_name": "Timo Michna",
          "author_login": "tidal",
          "committed_at": "2021-12-31T02:19:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed0b0de2c7106f0faf03c5270b539c962d8055b",
          "body": "* Add semantic conventions for Resource and Trace attributes\r\n\r\n* Add SCHEMA_URL pointing to the scheme used for code generation\r\n\r\n* Fix setting of SERVICE_NAME in default Resource instance\r\n\r\n* Add information about semantic conventions to README.md",
          "is_bot": false,
          "headline": "Add semantic conventions for Resource and Trace attributes (#502)",
          "author_name": "lalex",
          "author_login": "lalex",
          "committed_at": "2021-12-09T01:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 20,
      "commits_last_year": 8,
      "latest_release_at": "2026-01-21T04:23:16Z",
      "latest_release_tag": "1.38.0",
      "releases_from_tags": false,
      "days_since_last_push": 182,
      "active_weeks_last_year": 8,
      "days_since_latest_release": 182,
      "mean_days_between_releases": 71.4
    },
    "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": "open-telemetry/sem-conv",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "logging",
            "Metrics",
            "apm",
            "tracing",
            "opentelemetry",
            "otel",
            "semconv",
            "semantic conventions"
          ],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/open-telemetry/sem-conv",
          "is_deprecated": false,
          "latest_version": "1.38.0",
          "repository_url": "https://github.com/opentelemetry-php/sem-conv",
          "versions_count": 35,
          "total_downloads": 29846857,
          "dependents_count": 125,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 2027255,
          "first_published_at": null,
          "latest_published_at": "2026-01-21T04:14:03Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 182
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 8,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2024-04-23",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 206540,
      "source_files_sampled": 52,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "composer.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "brettmc",
          "commits": 27,
          "avatar_url": "https://avatars.githubusercontent.com/u/4978962?v=4"
        },
        {
          "type": "User",
          "login": "tidal",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/57825?v=4"
        },
        {
          "type": "User",
          "login": "WyriHaximus",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/147145?v=4"
        },
        {
          "type": "User",
          "login": "stickeegreg",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/48593081?v=4"
        },
        {
          "type": "User",
          "login": "CRC-Mismatch",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/7253323?v=4"
        },
        {
          "type": "User",
          "login": "pieterocp",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/68863060?v=4"
        },
        {
          "type": "User",
          "login": "Rainrider",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/363876?v=4"
        },
        {
          "type": "User",
          "login": "Nevay",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/22509671?v=4"
        },
        {
          "type": "User",
          "login": "lalex",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/869741?v=4"
        }
      ],
      "contributors_sampled": 9,
      "top_contributor_share": 0.73
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "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": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "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": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": null,
            "reason": "No tokens found",
            "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": "e613bc640a407def4991b8a936a9b27edd9a3240",
        "ran_at": "2026-07-22T17:44:36Z",
        "aggregate_score": 2.4,
        "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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/opentelemetry-php/sem-conv",
    "host": "github.com",
    "name": "sem-conv",
    "owner": "opentelemetry-php"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 33,
      "inputs": {
        "security": 24,
        "vitality": 39,
        "community": 38,
        "governance": 44,
        "engineering": 17
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 39,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "commits_last_year": 8,
              "human_commit_share": 1,
              "days_since_last_push": 182,
              "active_weeks_last_year": 8
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 182 days ago",
                "points": 3.6,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 182
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "8/52 weeks with commits",
                "points": 5.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "8 commits in the last year",
                "points": 8.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "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": 70,
            "inputs": {
              "releases_count": 20,
              "latest_release_tag": "1.38.0",
              "releases_from_tags": false,
              "days_since_latest_release": 182,
              "mean_days_between_releases": 71.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "20 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 182 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 182
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~71.4 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 71.4
                    }
                  }
                ],
                "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": "dormant",
              "guards": [
                "no_open_demand",
                "recent_release"
              ],
              "signals": [
                "scorecard_unmaintained"
              ],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 182,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 182 days, with nothing left unanswered; held at dormant by nothing open to answer, a release within the year",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_quiet",
                    "params": {
                      "days": 182
                    }
                  },
                  {
                    "code": "abandonment_guarded",
                    "params": {
                      "guards": "nothing open to answer, a release within the year"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 38,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "forks": 2,
              "stars": 8,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "8 stars",
                "points": 13.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "packages": [
                "open-telemetry/sem-conv"
              ],
              "dependents": 125,
              "ecosystems": "packagist",
              "total_downloads": 29846857,
              "monthly_downloads": 2027255
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,027,255 downloads/month across packagist",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2027255,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "125 packages depend on it",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 125
                    }
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 44,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 9,
              "top_contributor_share": 0.73
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 73% of commits",
                "points": 6.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 73
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "9 contributors",
                "points": 12.2,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "followers": 38,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "opentelemetry-php",
              "public_repos": 82,
              "account_age_days": 1664
            },
            "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": "38 followers of opentelemetry-php",
                "points": 11.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 38,
                      "login": "opentelemetry-php"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "82 public repos, account ~4 yr old",
                "points": 22.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 82
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 91,
            "inputs": {
              "packages": [
                "open-telemetry/sem-conv"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 182
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on packagist",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 182 days ago",
                "points": 26,
                "status": "partial",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 182
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "35 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 35
                    }
                  }
                ],
                "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": "critical",
        "name": "Engineering Quality",
        "value": 17,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 24,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 24,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 11
            },
            "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": "critical",
        "name": "AI Readiness",
        "value": 24,
        "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": 1,
              "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": "37 of 37 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 37,
                      "sampled": 37
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 37",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 37
                    }
                  }
                ],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 206540,
              "source_files_sampled": 52,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "PHP without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "PHP"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/52 source files over 60KB",
                "points": 52.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 52,
                      "oversized": 2
                    }
                  }
                ],
                "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T17:44:43.742986Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/opentelemetry-php/sem-conv.svg",
  "full_name": "opentelemetry-php/sem-conv",
  "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.26.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsPackagist.