Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-23 15:53 UTC

humanmade / asset-loader

PHP utilities for WordPress to aid including dynamic Webpack-generated assets in themes or plugins.

PHPLicencia propia★ 26 estrellas⑂ 3 forksdesde abr 2019Ver en GitHub ↗

humanmade/asset-loader tiene un índice de salud de 71 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Engineering Quality (85/100) y la más baja, AI Readiness (46/100). Se actualizó por última vez hace 7 días. Una sola persona concentra la mayor parte del trabajo reciente.

71
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

71
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Human MadeOrganización
321 seguidores550 repositorios públicosdesde mar 2011

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Packagisthumanmade/asset-loaderv1.0.110.14519hace 15 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

76Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 7 días
9/36Cadencia de commits — 13/52 semanas con commits
15.7/18Volumen de commits — 55 commits en el último año
10/10OpenSSF Scorecard: Maintained — 16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year55
human_commit_share0,91
days_since_last_push7
active_weeks_last_year13
Cómo se puntúa
27/27Publica versiones — 13 versiones publicadas
36/36Recencia de las versiones — última versión hace 14 días
12.6/27Cadencia de publicación — una versión cada ~164,9 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count13
latest_release_tagv1.0.1
releases_from_tagsno
days_since_latest_release14
mean_days_between_releases164,9
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

50Moderado · 18% del índice global
Cómo se puntúa
22.7/60Estrellas — 26 estrellas
2.5/25Forks — 3 forks
6.2/15Observadores — 14 observadores
Datos de entrada utilizados
forks3
stars26
watchers14
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
53.4/80Descargas mensuales — 10.145 descargas/mes en packagist
5.2/20Dependientes en el registro — 5 paquetes dependen de él
Datos de entrada utilizados
packageshumanmade/asset-loader
dependents5
ecosystemspackagist
total_downloads351.134
monthly_downloads10.145

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

70Bueno · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
6.2/22.5Distribución de commits — el principal contribuyente firma el 72% de los commits
13.5/13.5Amplitud de contribuyentes — 18 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 6 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled18
top_contributor_share0,725
Cómo se puntúa
31.7/46.8Resolución de issues — 68% de issues cerradas
37.6/38.3Aceptación de PR — 58/59 PR decididos fusionados
12/15OpenSSF Scorecard: Code-Review — Found 5/6 approved changesets -- score normalized to 8
Datos de entrada utilizados
merged_prs58
open_issues9
closed_issues19
issue_closed_ratio0,679
closed_unmerged_prs1
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
18/25Alcance del propietario — 321 seguidores de humanmade
25/25Trayectoria — 550 repos públicos, cuenta de ~15 años
Datos de entrada utilizados
followers321
owner_typeOrganization
is_verified
owner_loginhumanmade
public_repos550
account_age_days5623
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en packagist
35/35Recencia de publicación — última publicación hace 15 días
20/20Historial de versiones — 19 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packageshumanmade/asset-loader
ecosystemspackagist
any_deprecatedno
min_days_since_publish15

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

85Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — phpcs.xml
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
12/20OpenSSF Scorecard: CI-Tests — 5 out of 8 merged PRs checked by a CI test -- score normalized to 6
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://humanmade.github.io/asset-loader/
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://humanmade.github.io/asset-loader/
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

70Bueno · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
1.5/2.5CI-Tests — 5 out of 8 merged PRs checked by a CI test -- score normalized to 6
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
6/7.5Code-Review — Found 5/6 approved changesets -- score normalized to 8
2.5/2.5Contributors — project has 6 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6,2
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages84
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 84 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

46En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
22.3/40Historial de commits legible — 38 de 91 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,418
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — phpcs.xml
0/11Verificación estática de tipos
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
8/8Mantenimiento automatizado — 9 de los últimos 100 commits son actualizaciones automáticas de dependencias
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Datos de entrada utilizados
has_nixno
has_tests
lockfilesGemfile.lock, composer.lock
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,09
Cómo se puntúa
0/45Código verificable por tipos — PHP sin configuración de verificación de tipos
55/55Tamaños de archivo manejables — 0/13 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePHP
largest_source_bytes14.626
source_files_sampled13
oversized_source_files0

Datos clave

26estrellas de GitHub
18contribuidores
55commits en los últimos 12 meses
7días desde el último push
13versiones publicadas
1factor bus
9issues abiertas
Packagist, RubyGemsecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

Historial de estrellas y forks 0 ★ / 3 ⇿
0Estrellas
3Forks
6Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

12233312019-092021-042022-11
Mayor 0Menor 2Parche 4

Cada punto abarca 3 días.

OpenSSF Scorecard 6.2 / 10
6.2agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-23 15:53 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
6CI-Tests5 out of 8 merged PRs checked by a CI test -- score normalized to 6
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
8Code-ReviewFound 5/6 approved changesets -- score normalized to 8
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
10Pinned-Dependenciesall dependencies are pinned
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias 84

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 84 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Packagist10up/wp_mock1.1.0indirecta
Packagistantecedent/patchwork2.2.3indirecta
Packagistautomattic/vipwpcs3.0.1indirecta
Packagistcomposer/installers2.3.0indirecta
Packagistdealerdirect/phpcodesniffer-composer-installer1.2.0indirecta
Packagistdoctrine/instantiator2.0.0indirecta
Packagisthamcrest/hamcrest-php2.1.1indirecta
Packagistmockery/mockery1.6.12indirecta
Packagistmyclabs/deep-copy1.13.4indirecta
Packagistnikic/php-parser5.7.0indirecta
Packagistphar-io/manifest2.0.4indirecta
Packagistphar-io/version3.2.1indirecta
Packagistphpcsstandards/phpcsextra1.5.0indirecta
Packagistphpcsstandards/phpcsutils1.2.2indirecta
Packagistphpunit/php-code-coverage9.2.32indirecta
Packagistphpunit/php-file-iterator3.0.6indirecta
Packagistphpunit/php-invoker3.1.1indirecta
Packagistphpunit/php-text-template2.0.4indirecta
Packagistphpunit/php-timer5.0.3indirecta
Packagistphpunit/phpunit9.6.34indirecta
Packagistsebastian/cli-parser1.0.2indirecta
Packagistsebastian/code-unit1.0.8indirecta
Packagistsebastian/code-unit-reverse-lookup2.0.3indirecta
Packagistsebastian/comparator4.0.10indirecta
Packagistsebastian/complexity2.0.3indirecta
Packagistsebastian/diff4.0.6indirecta
Packagistsebastian/environment5.1.5indirecta
Packagistsebastian/exporter4.0.8indirecta
Packagistsebastian/global-state5.0.8indirecta
Packagistsebastian/lines-of-code1.0.4indirecta
Packagistsebastian/object-enumerator4.0.4indirecta
Packagistsebastian/object-reflector2.0.4indirecta
Packagistsebastian/recursion-context4.0.6indirecta
Packagistsebastian/resource-operations3.0.4indirecta
Packagistsebastian/type3.2.1indirecta
Packagistsebastian/version3.0.2indirecta
Packagistsirbrillig/phpcs-variable-analysis2.13.0indirecta
Packagistsquizlabs/php_codesniffer3.13.5indirecta
Packagiststaabm/annotate-pull-request-from-checkstyle1.8.6indirecta
Packagisttheseer/tokenizer1.3.1indirecta
Packagistwp-coding-standards/wpcs3.3.0indirecta
RubyGemsaddressable2.9.0indirecta
RubyGemsbigdecimal4.1.2indirecta
RubyGemscolorator1.1.0indirecta
RubyGemsconcurrent-ruby1.3.7indirecta
RubyGemscsv3.3.5indirecta
RubyGemsem-websocket0.5.3indirecta
RubyGemseventmachine1.2.7indirecta
RubyGemsffi1.17.4indirecta
RubyGemsforwardable-extended2.6.0indirecta
RubyGemsgoogle-protobuf4.35.0indirecta
RubyGemshttp_parser.rb0.8.1indirecta
RubyGemsi18n1.14.8indirecta
RubyGemsjekyll4.3.4indirecta
RubyGemsjekyll-include-cache0.2.1indirecta
RubyGemsjekyll-sass-converter3.1.0indirecta
RubyGemsjekyll-seo-tag2.9.0indirecta
RubyGemsjekyll-watch2.2.1indirecta
RubyGemskramdown2.5.2indirecta
RubyGemskramdown-parser-gfm1.1.0indirecta
RubyGemsliquid4.0.4indirecta
RubyGemslisten3.10.0indirecta
RubyGemslogger1.7.0indirecta
RubyGemsmercenary0.4.0indirecta
RubyGemspathutil0.16.2indirecta
RubyGemspublic_suffix7.0.5indirecta
RubyGemsrake13.4.2indirecta
RubyGemsrb-fsevent0.11.2indirecta
RubyGemsrb-inotify0.11.1indirecta
RubyGemsrexml3.4.4indirecta
RubyGemsrouge4.7.0indirecta
RubyGemssafe_yaml1.0.5indirecta
RubyGemssass-embedded1.100.0indirecta
RubyGemssass-embedded1.100.0-aarch64-linux-androidindirecta
RubyGemssass-embedded1.100.0-arm-linux-androideabiindirecta
RubyGemssass-embedded1.100.0-arm-linux-gnueabihfindirecta
RubyGemssass-embedded1.100.0-arm-linux-musleabihfindirecta
RubyGemssass-embedded1.100.0-riscv64-linux-androidindirecta
RubyGemssass-embedded1.100.0-riscv64-linux-gnuindirecta
RubyGemssass-embedded1.100.0-riscv64-linux-muslindirecta
RubyGemssass-embedded1.100.0-x86_64-linux-androidindirecta
RubyGemsterminal-table3.0.2indirecta
RubyGemsunicode-display_width2.6.0indirecta
RubyGemswebrick1.9.2indirecta
Avisos de dependencias 0

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 84 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 0 tienen avisos conocidos, de los cuales 0 son directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 348,
      "has_wiki": true,
      "homepage": "https://humanmade.github.io/asset-loader/",
      "languages": {
        "PHP": 65624
      },
      "pushed_at": "2026-07-15T17:56:46Z",
      "created_at": "2019-04-08T03:23:35Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-15T17:56:55Z",
      "description": "PHP utilities for WordPress to aid including dynamic Webpack-generated assets in themes or plugins.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "https://humanmade.com/",
      "name": "Human Made",
      "type": "Organization",
      "login": "humanmade",
      "company": null,
      "location": "Everywhere",
      "followers": 321,
      "avatar_url": "https://avatars.githubusercontent.com/u/644666?v=4",
      "created_at": "2011-03-01T12:23:31Z",
      "is_verified": null,
      "public_repos": 550,
      "account_age_days": 5623
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-07-09T13:02:34Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-05-27T19:40:56Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-02-20T18:48:55Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2024-08-21T19:50:27Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2023-12-10T20:00:44Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2023-12-05T15:17:54Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2022-11-28T17:17:58Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2022-07-26T16:46:23Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2022-06-30T14:47:39Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2022-06-16T10:31:12Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2021-07-20T15:18:08Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2019-11-14T13:34:24Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2019-10-16T08:36:35Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "458442849ab180a850f2edda9ad629105481873e",
          "body": "PHPCS: Use braces to qualify order of access",
          "is_bot": false,
          "headline": "Merge pull request #87 from humanmade/php-reference-correctness",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-07-15T17:56:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "800f4720622f0adc9b6e5c7fafb5452254bdc7e4",
          "body": "This resolves a PHPCS warning, \"Indirect access to variables, properties and methods will be evaluated strictly in left-to-right order since PHP 7.0. Use curly braces to remove ambiguity.\"",
          "is_bot": false,
          "headline": "PHPCS: Use braces to qualify order of access",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-07-15T16:04:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d15ed2fb191c44a64550dd1079683f58facc492",
          "body": "…ent-ruby-1.3.7\n\nBump concurrent-ruby from 1.3.6 to 1.3.7 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #86 from humanmade/dependabot/bundler/docs/concurr…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2026-07-08T14:38:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "326eefe69842035ed27b20d86ad2096baef065de",
          "body": "Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.3.6 to 1.3.7.\n- [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases)\n- [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md)\n- [Commits](https://github.com\n[…]\n/compare/v1.3.6...v1.3.7)\n\n---\nupdated-dependencies:\n- dependency-name: concurrent-ruby\n  dependency-version: 1.3.7\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump concurrent-ruby from 1.3.6 to 1.3.7 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-24T00:08:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f25297adc880a8a6d09dabb174606656e3377ccf",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #85 from humanmade/docs-debug",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T23:58:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94c40921b719efcd2030baecb7485f2df382034a",
          "body": null,
          "is_bot": false,
          "headline": "Remove docs-debug branch from workflow triggers",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T21:37:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "767416cccfb7bd875f0cd5c6bd88259fa1d5fe3b",
          "body": "…specification)",
          "is_bot": false,
          "headline": "Back up to Ruby 3.3 we go, like Sisyphus (and restore Linux platform …",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T21:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2525208ad6ae379b3ded47b7eedfe72418e64a80",
          "body": "…plugin",
          "is_bot": false,
          "headline": "Regenerate Gemfile.lock in Ruby 3.2 (!) and add jekyll-include-cache …",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:56:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53695c4a528281f1cdfb359d9ab4e622ba17128b",
          "body": null,
          "is_bot": false,
          "headline": "Revert Ruby to 3.3 in CI for Jekyll compatibility",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:44:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3417b32dc82293667429d08a42fa7009c46d109d",
          "body": null,
          "is_bot": false,
          "headline": "Regenerate Gemfile.lock on Ruby 3.4/bundler 2.3.5",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:39:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c6d6c898bc17609888cb26e51206c42ce3272e2",
          "body": "…ependency",
          "is_bot": false,
          "headline": "Use Ruby 3.4 in docs deploy CI to work around failing public_suffix d…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:35:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c62456a2b719824986d6e98c00ba8073531f0c58",
          "body": null,
          "is_bot": false,
          "headline": "Trigger docs deploy on docs-debug branch, if present",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:31:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a1ef8a0b1764186cb162a01a2785026b4b6fab7",
          "body": null,
          "is_bot": false,
          "headline": "Bump Docs page GH Action dependencies",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T20:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "598a1947bac21051876b4e177bf01b09a8555f74",
          "body": "Prepare 1.0",
          "is_bot": false,
          "headline": "Merge pull request #84 from humanmade/prepare-1.0",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-27T19:20:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07c6d278d40594352f15c5ceb2d0222fb71fbc74",
          "body": null,
          "is_bot": false,
          "headline": "Bump plugin version string to 1.0.0",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-26T21:46:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76d0f2fbfa6d0038883b4e3b347003b7c1a5b13b",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Fix PR reference in changelog entry for register_block_extension",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-05-26T21:40:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50192d342bad18ccb337d0e340c180c48816a4e5",
          "body": "…able-2.9.0\n\nBump addressable from 2.8.1 to 2.9.0 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #83 from humanmade/dependabot/bundler/docs/address…",
          "author_name": "Wisdom Hambolu",
          "author_login": "wisyhambolu",
          "committed_at": "2026-04-10T13:13:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa57c87932d6b1e17d8a6b1a3135a6b869488717",
          "body": "Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.8.1 to 2.9.0.\n- [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.8.1...addressable-2.9.0)\n\n---\nupdated-dependencies:\n- dependency-name: addressable\n  dependency-version: 2.9.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump addressable from 2.8.1 to 2.9.0 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-08T08:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cf9fa64836796b3ac7eac57bdb72f8204ab9054",
          "body": "…thod\n\nAdd register_block_extension method",
          "is_bot": false,
          "headline": "Merge pull request #80 from humanmade/add-register_block_extension-me…",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-28T00:04:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18abd9dc8637a01cd32032102e3854ddbbef010d",
          "body": "Introduce new register/enqueue script API intended for use with wp-scripts",
          "is_bot": false,
          "headline": "Merge pull request #78 from humanmade/add-wp-scripts-compatible-api",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-28T00:03:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5558c99549fac9179445f6aa4610b558616bef8",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Add documentation for ?skip_enqueue convention",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-25T20:30:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fd42e7ea461550bfa94df508ffd8c3452161146",
          "body": null,
          "is_bot": false,
          "headline": "PHPCS: Resolve alignment issue",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-25T20:24:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "733c508b6cf8fd523832a2f73008f9c2dc1489e2",
          "body": "… entrypoint",
          "is_bot": false,
          "headline": "Introduce workaround for marking a block.json JS file as a style-only…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-25T14:06:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c76c355343e0111007d87771e46446d833bbc38",
          "body": null,
          "is_bot": false,
          "headline": "Consolidate script and style loops into one foreach",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-24T22:38:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd0f86a8c0ba0f51c43b14eb8d1f5dcd36c7eecf",
          "body": "This MOST-reliably works on Init, still, but depending on usage, after the prior\nchange to run the overrides one blocok at a time, it is now possible to call this\nup until enqueue_block_assets and still get the desired behavior.",
          "is_bot": false,
          "headline": "Attempt to apply the extensions immediately if called after wp_loaded",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-23T14:50:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fa3b9b1b6d473053533e89303f84ee3312c09e2",
          "body": "… array\n\nIf we call this one at a time, we can immediately try to apply the override\nwhen called if wp_loaded has run\n\nIt's also conceptually simpler to have all the methods work on the level\nof a single block rather than an array, and the impact of N hook callbacks\nfor N custom block overrides is minimal",
          "is_bot": false,
          "headline": "Refactor apply_block_extension() to take a single block instead of an…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-23T14:44:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40a64d492d4da7a0b7a0ccc362fd6b01ed79850c",
          "body": "Per PR review, if it works for all blocks, the core_ prefix is unneeded and could be misleading",
          "is_bot": false,
          "headline": "Rename register_core_block_extension() to register_block_extension()",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-23T14:44:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f554c9c8e5266573090e28f975f0a548f66654b4",
          "body": "…r wp_loaded",
          "is_bot": false,
          "headline": "Trigger a user notice if register_core_block_extension is called afte…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-23T14:29:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da2db4a9b29226edff789c69b62676b8950d58ab",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Adjust wording and punctuation in documentation",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T21:41:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47164146bd2d6f4b17365264c241df3f3fd2f08c",
          "body": null,
          "is_bot": false,
          "headline": "Document register_core_block_extension() method",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T21:40:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51bb94f9e9696387a1678a29550290951ff6bc81",
          "body": "…blocks",
          "is_bot": false,
          "headline": "Implement register_core_block_extension() method to augment built-in …",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T21:36:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "960b32fec94e467ef22a7a43b59abee4729adc7a",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Add documentation for new wp-scripts-oriented methods",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T20:57:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6454c5382bce0517bdd728eec22b9d4238f82699",
          "body": "…s for use with wp-scripts",
          "is_bot": false,
          "headline": "Introduce register_script_asset() and enqueue_script_asset() function…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T19:59:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fded7935c8b875e9c9a64b35b388a48636f0f0a5",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #77 from humanmade/fix-gh-pages-workflow",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T18:55:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3145d4fae2710555994a66ec9c387ce905c2a5b",
          "body": null,
          "is_bot": false,
          "headline": "Update Action dependency references in GitHub Pages workflow",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T18:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f91409a9a8fae5981a65e3017dbd58175b5bcac4",
          "body": "Prepare v0.8.0",
          "is_bot": false,
          "headline": "Merge pull request #76 from humanmade/prepare-v0.8.0",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T18:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea486192cfd5a19d218b17643289f34120c6726",
          "body": null,
          "is_bot": false,
          "headline": "Bump version to v0.8.0",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T17:47:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "781e75c835f253909191bec378249afdcf17eea8",
          "body": "…hods",
          "is_bot": false,
          "headline": "Tests: Adjust naming of tests to reflect renamed public interface met…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T17:46:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0286ebf1e24019a05aeed4909e73fdb07da6ad14",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Update changelog for v0.8.0",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-20T17:44:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a154fa7fc8390cdd2743757f2536a68d0b8e15e",
          "body": "Allow an array of manifest string paths to be passed to register and enqueue methods",
          "is_bot": false,
          "headline": "Merge pull request #75 from humanmade/smart-multi-manifest-selection",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-18T15:06:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e3ebda127e83ed3d87cfa6d7d800479be57dd38",
          "body": null,
          "is_bot": false,
          "headline": "CI: Remove .travis.yml, GH Actions covers install and test",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-18T00:36:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b7671244c83588fdad8bdb035483f16268347bd",
          "body": "… helpers\n\nFor #40",
          "is_bot": false,
          "headline": "Implement handling for manifest path arrays into register and enqueue…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-18T00:30:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffb9fbb00037824bc0015e11b72dd5d49d0a5e26",
          "body": "…nifest_asset() methods\n\nAllows the functionality requested in #40 where you can pass multiple manifests as an array instead of having to manually depend upon and use Manifest\\get_active_manifest()",
          "is_bot": false,
          "headline": "Tests: Add unit tests for handling array of possible manifests in _ma…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T23:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51ae9c1c396f106cfbec19ce8b5dbc52bb6975d4",
          "body": "Deprecate register_asset and enqueue_asset, renamed to ..._manifest_...\nUpgrades tooling to a modern standard",
          "is_bot": false,
          "headline": "Merge pull request #70 from humanmade/wp-scripts-compat",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T23:05:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "742a5674e08dbe7fedb8dd4e28946169bd148aec",
          "body": null,
          "is_bot": false,
          "headline": "PHPCS: Upgrade code quality dependencies and remove deprecated rules",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T23:04:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58f5aa56f8fa1f7d93fe7a42ab81150acb174b67",
          "body": null,
          "is_bot": false,
          "headline": "Tests: Upgrade wp_mock for PHP 8.3 compatibility",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T22:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b7e38f878d2194334b4327f77889e2293408f9d",
          "body": "Register runtime as dependency if found",
          "is_bot": false,
          "headline": "Merge pull request #48 from humanmade/load-single-runtime",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T22:55:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "563332ba178438f041c61168f08999d6281792f5",
          "body": null,
          "is_bot": false,
          "headline": "Remove duplicate line break",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T22:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b24da598409a6f78b4f5ba88befd389a61284d23",
          "body": null,
          "is_bot": false,
          "headline": "CI: Update GH Action dependencies to latest",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2026-02-17T22:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e387024fe42d9cddeb696e132bdc5c24529f5c9",
          "body": "Update Standard Issue templates",
          "is_bot": false,
          "headline": "Merge pull request #73 from humanmade/update-standard-issue-templates",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2025-10-08T09:48:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67af5e16fcd2c1ba6b07481f306d1e8977e0b626",
          "body": "Update Standard Issue templates\nThis PR updates standard issue templates to the repo.\nFollows on from https://github.com/humanmade/product-dev/pull/1853",
          "is_bot": false,
          "headline": "Update Standard Issue templates",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2025-10-07T13:46:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5994b943659fb1a21396c7ac033b090dc04a740",
          "body": "….4.2\n\nBump rexml from 3.3.9 to 3.4.2 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #72 from humanmade/dependabot/bundler/docs/rexml-3…",
          "author_name": "Fernando Schubert",
          "author_login": "ferschubert-hm",
          "committed_at": "2025-09-19T19:10:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e85ad551c72b012d86bf59fbfbe0c4aa92f65432",
          "body": "Bumps [rexml](https://github.com/ruby/rexml) from 3.3.9 to 3.4.2.\n- [Release notes](https://github.com/ruby/rexml/releases)\n- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)\n- [Commits](https://github.com/ruby/rexml/compare/v3.3.9...v3.4.2)\n\n---\nupdated-dependencies:\n- dependency-name: rexml\n  dependency-version: 3.4.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rexml from 3.3.9 to 3.4.2 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-09-17T18:51:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06fd1397c1ee80b3706ca3b7aa2947a88ab63363",
          "body": "Add Standard Issue templates",
          "is_bot": false,
          "headline": "Merge pull request #71 from humanmade/add-standard-issue-templates",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2025-09-10T10:48:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e2336b0d712d2538529d68f4aadf0c8b8fbf564",
          "body": "Add Standard Issue templates\nThis PR adds standard issue templates to the repo.\nFollows on from https://github.com/humanmade/product-dev/pull/1842",
          "is_bot": false,
          "headline": "Add Standard Issue templates",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2025-09-08T10:25:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46083ef850033f9e8d6735f811b0c447df9ef5fd",
          "body": "…nger runs in CI",
          "is_bot": false,
          "headline": "Upgrade GH Script references, actions/cache@3 is deprecated and no lo…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2025-03-10T15:43:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37aed0c9b30583711a000e1e3f9b0fe94a8f1d97",
          "body": "…fest_asset\" for clarity",
          "is_bot": false,
          "headline": "Deprecate register_asset and enqueue_asset, renamed to \"register_mani…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2025-03-10T15:24:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ad841a12a32fc7a1459fa4157a629d8743b8ecd",
          "body": "…-1.8.2\n\nBump webrick from 1.8.1 to 1.8.2 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #69 from humanmade/dependabot/bundler/docs/webrick…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-12-12T12:34:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6700b28fdc6b8fd5fc148c0597bbcf13350cd4a9",
          "body": "….3.9\n\nBump rexml from 3.3.6 to 3.3.9 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #67 from humanmade/dependabot/bundler/docs/rexml-3…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-12-12T11:54:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b85d6f55bd679f5c57efde5b03183697e6f6272",
          "body": "Bumps [webrick](https://github.com/ruby/webrick) from 1.8.1 to 1.8.2.\n- [Release notes](https://github.com/ruby/webrick/releases)\n- [Commits](https://github.com/ruby/webrick/compare/v1.8.1...v1.8.2)\n\n---\nupdated-dependencies:\n- dependency-name: webrick\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump webrick from 1.8.1 to 1.8.2 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-12-12T11:53:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f707b9a2b4e8ecc603fb80d328ba2433c8b3759c",
          "body": "…protobuf-3.25.5\n\nBump google-protobuf from 3.21.12 to 3.25.5 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #66 from humanmade/dependabot/bundler/docs/google-…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-12-12T11:52:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3f4b2b60feb3756bc8bc2ca0f7e4a739cea757f",
          "body": "Add Pull Request template",
          "is_bot": false,
          "headline": "Merge pull request #68 from humanmade/add-pr-template",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-12-12T10:30:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c33f9e4fd98c6e3bb94d434a175fb4a3c1969af",
          "body": "Add Pull Request template\nThis PR adds a Pull Request template to the repo.\nAddresses https://github.com/humanmade/product-dev/issues/1641",
          "is_bot": false,
          "headline": "Add Pull Request template",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-12-10T15:25:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab584dfbb33a65b7322b74d4c682d73f9a34d3ec",
          "body": "Bumps [rexml](https://github.com/ruby/rexml) from 3.3.6 to 3.3.9.\n- [Release notes](https://github.com/ruby/rexml/releases)\n- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)\n- [Commits](https://github.com/ruby/rexml/compare/v3.3.6...v3.3.9)\n\n---\nupdated-dependencies:\n- dependency-name: rexml\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rexml from 3.3.6 to 3.3.9 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-10-28T18:47:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c7eda00ad1d38725db79f8c4f644e6753a064e4",
          "body": "Bumps [google-protobuf](https://github.com/protocolbuffers/protobuf) from 3.21.12 to 3.25.5.\n- [Release notes](https://github.com/protocolbuffers/protobuf/releases)\n- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)\n- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.21.12...v3.25.5)\n\n---\nupdated-dependencies:\n- dependency-name: google-protobuf\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump google-protobuf from 3.21.12 to 3.25.5 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-09-19T16:11:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00bdffee36ec31f590ba50f0910171d3b4b85d40",
          "body": "….3.6\n\nBump rexml from 3.3.3 to 3.3.6 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #65 from humanmade/dependabot/bundler/docs/rexml-3…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-08-29T11:42:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "085bfd000f3e476b988d4df4d72076747ca32fbf",
          "body": "Create CONTRIBUTING",
          "is_bot": false,
          "headline": "Merge pull request #64 from humanmade/svandragt-contributing",
          "author_name": "Sander van Dragt",
          "author_login": "svandragt",
          "committed_at": "2024-08-26T08:41:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec0d42dc6192d292ec77a0859f4b1bcc75c995f2",
          "body": "Co-authored-by: Joeleen Kennedy <joeleen@humanmade.com>",
          "is_bot": false,
          "headline": "Update CONTRIBUTING",
          "author_name": "Sander van Dragt",
          "author_login": "svandragt",
          "committed_at": "2024-08-26T08:41:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea2db743bf2ffee67326508af919efe9cbf74ca7",
          "body": "Bumps [rexml](https://github.com/ruby/rexml) from 3.3.3 to 3.3.6.\n- [Release notes](https://github.com/ruby/rexml/releases)\n- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)\n- [Commits](https://github.com/ruby/rexml/compare/v3.3.3...v3.3.6)\n\n---\nupdated-dependencies:\n- dependency-name: rexml\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rexml from 3.3.3 to 3.3.6 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-08-22T20:52:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a34cec546e9deea4411ea1218a90e8e8e1ddc1e5",
          "body": null,
          "is_bot": false,
          "headline": "Create CONTRIBUTING",
          "author_name": "Sander van Dragt",
          "author_login": "svandragt",
          "committed_at": "2024-08-22T08:37:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "072155adaf6357b92a99b0db8a962108d7f3ff90",
          "body": null,
          "is_bot": false,
          "headline": "Prepare 0.7.1 release",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2024-08-21T19:48:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7da655cff206c19905cb5dcd3f8096202acdef63",
          "body": "….3.3\n\nBump rexml from 3.2.8 to 3.3.3 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #62 from humanmade/dependabot/bundler/docs/rexml-3…",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2024-08-21T19:46:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "952c2454679707a1be43c2ed99b3394a832f8663",
          "body": "Correct invalid format specifier at end of sprintf",
          "is_bot": false,
          "headline": "Merge pull request #63 from humanmade/fix-format-specifier",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2024-08-21T19:45:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39faf134e2d66789e651657b6612d136c4696f7e",
          "body": "Throws an error without it",
          "is_bot": false,
          "headline": "Correct invalid format specifier at end of sprintf",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2024-08-20T03:07:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d991afdb0291f6e76b1966eba832b0c51b14d25a",
          "body": "Bumps [rexml](https://github.com/ruby/rexml) from 3.2.8 to 3.3.3.\n- [Release notes](https://github.com/ruby/rexml/releases)\n- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)\n- [Commits](https://github.com/ruby/rexml/compare/v3.2.8...v3.3.3)\n\n---\nupdated-dependencies:\n- dependency-name: rexml\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rexml from 3.2.8 to 3.3.3 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-08-02T02:00:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f52907b587b2f5ce17689db1022c0dd162aedb4",
          "body": "….2.8\n\nBump rexml from 3.2.5 to 3.2.8 in /docs",
          "is_bot": false,
          "headline": "Merge pull request #61 from humanmade/dependabot/bundler/docs/rexml-3…",
          "author_name": "Mike Little",
          "author_login": "mikelittle",
          "committed_at": "2024-06-03T10:20:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "290b64242bccd5a6eaa21ec4d444c8de212dc13e",
          "body": "Bumps [rexml](https://github.com/ruby/rexml) from 3.2.5 to 3.2.8.\n- [Release notes](https://github.com/ruby/rexml/releases)\n- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)\n- [Commits](https://github.com/ruby/rexml/compare/v3.2.5...v3.2.8)\n\n---\nupdated-dependencies:\n- dependency-name: rexml\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rexml from 3.2.5 to 3.2.8 in /docs",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-05-16T20:25:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54a5db0b33ca4e6df8bfe18a40bc820b9dbf2269",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'prepare-0.7-release'",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-10T19:59:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c37c8d7b0ede798cc5decaeaae21a3e816737ef8",
          "body": null,
          "is_bot": false,
          "headline": "Prepare v0.7.0 release",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-10T19:59:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "091d04875aa48b87092af551ab32a6adc40ec649",
          "body": "Upgrade tooling for WPCS 3.0 and PHP 8.0+",
          "is_bot": false,
          "headline": "Merge pull request #60 from humanmade/tooling-upgrade",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-10T19:57:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22e5fef1ad6ec695b43c8a9a9c1baeaaa26a9c35",
          "body": null,
          "is_bot": false,
          "headline": "Switch to latest Ubuntu LTS in Travis CI",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:28:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e52862eb7bc162af12f91b14d5c513af1952aef",
          "body": null,
          "is_bot": false,
          "headline": "Elaborate on Changelog entry and document update from #57",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:22:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5362ae7ff430cb694e62c117a6a4435e0a5d979c",
          "body": null,
          "is_bot": false,
          "headline": "Do not test on PHP 8.0, it is already EOL",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:19:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed41d3eb1ff75dc86411d4442c39f5179e358035",
          "body": null,
          "is_bot": false,
          "headline": "Escape asset name when triggering missing-manifest error from #59",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:18:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c273f368a4a26668bc918193e3e3bac22a5afae",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into tooling-upgrade",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:16:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3128bb34ddafba56c7dbb93b87dbc41bb1d6fd3b",
          "body": null,
          "is_bot": false,
          "headline": "Document changes",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a8b70fd5ff28399a6800c9d465a57291933f21b",
          "body": null,
          "is_bot": false,
          "headline": "Only test on recent versions of PHP",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:14:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9b36ad231aab03e74da5b56a7ab66d75e63c58",
          "body": "#57: Do not fatal if empty/null manifest is passed to registration functions",
          "is_bot": false,
          "headline": "Merge pull request #59 from humanmade/57-no-fatal-on-missing-manifest",
          "author_name": "K Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e54f711514baddb2a20cad5cd577e1803ff347a7",
          "body": null,
          "is_bot": false,
          "headline": "Add PHPCS and PHPUnit to GitHub Actions",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:08:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb4c7c8d3f2b995fda8a92dd91e97028dcf6eba8",
          "body": null,
          "is_bot": false,
          "headline": "Add PHPUnit results cache to gitignore",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:08:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1ff98c5a88bc606f342eda322e648953c3c1768",
          "body": null,
          "is_bot": false,
          "headline": "Pin remaining third-party GH actions in Deploy Docs action",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:08:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b141cecf1b693a9a6a4c3a231c5ab63561d45afa",
          "body": null,
          "is_bot": false,
          "headline": "Suppress PHPCS warnings we do not consider to be issues in this codebase",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T22:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12ae334acc628c71fab6d928ea919361331f7066",
          "body": "…pe hinting syntax",
          "is_bot": false,
          "headline": "composer lint:fix : Predominately removes space in function return ty…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T21:58:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c350348cbdeafae0edab8afc694530dee3191a94",
          "body": null,
          "is_bot": false,
          "headline": "Upgrade PHPCS sniffs to HM-flavored variant of WPCS 3.0",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T21:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81b60a31f9a5660cb2660af8f83aff95f78567fb",
          "body": "… functions",
          "is_bot": false,
          "headline": "57: Do not fatal if empty/null manifest is passed to register/enqueue…",
          "author_name": "K. Adam White",
          "author_login": "kadamwhite",
          "committed_at": "2023-12-08T21:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cc2bdcae19b2c6a4900df3cf827ab573ed0beac",
          "body": "Prepare v0.6.4 release",
          "is_bot": false,
          "headline": "Merge pull request #58 from humanmade/prepare-0.6.4-release",
          "author_name": "Miguel Axcar",
          "author_login": "MiguelAxcar",
          "committed_at": "2023-12-05T15:10:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dd18976208ecd6a9365df81d329fcaa29b3b86e",
          "body": null,
          "is_bot": false,
          "headline": "Prepare v0.6.4 release",
          "author_name": "Miguel Axcar",
          "author_login": null,
          "committed_at": "2023-12-04T14:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33cbdd1bb54e0ec615ad558bea992a3fcdadcbac",
          "body": "Security enhancements: specific commit to 3rd-party GH Actions, secure `href` attr on 404.html file",
          "is_bot": false,
          "headline": "Merge pull request #56 from humanmade/security-enhancements",
          "author_name": "Miguel Axcar",
          "author_login": "MiguelAxcar",
          "committed_at": "2023-12-01T23:35:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13e4ddf27eccb1ced39a3679a81926919d52868a",
          "body": null,
          "is_bot": false,
          "headline": "Secure href attribute in 404 page to prevent XSS vulnerabilities",
          "author_name": "Miguel Axcar",
          "author_login": null,
          "committed_at": "2023-11-30T22:31:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f129d08292417cce2a8230726e0f0a4b3475268",
          "body": null,
          "is_bot": false,
          "headline": "Point to specific commmit for 3rd-party Github action",
          "author_name": "Miguel Axcar",
          "author_login": null,
          "committed_at": "2023-11-30T22:31:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 55,
      "latest_release_at": "2026-07-09T13:02:34Z",
      "latest_release_tag": "v1.0.1",
      "releases_from_tags": false,
      "days_since_last_push": 7,
      "active_weeks_last_year": 13,
      "days_since_latest_release": 14,
      "mean_days_between_releases": 164.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "humanmade/asset-loader",
          "exists": true,
          "license": "GPL-2.0-or-later",
          "keywords": [],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/humanmade/asset-loader",
          "is_deprecated": false,
          "latest_version": "v1.0.1",
          "repository_url": "https://github.com/humanmade/asset-loader",
          "versions_count": 19,
          "total_downloads": 351134,
          "dependents_count": 5,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 10145,
          "first_published_at": null,
          "latest_published_at": "2026-07-08T14:38:26Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 15
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 26,
      "watchers": 14,
      "fork_history": {
        "days": [
          {
            "date": "2019-09-08",
            "count": 1
          },
          {
            "date": "2019-12-09",
            "count": 1
          },
          {
            "date": "2022-11-28",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 9
    },
    "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": 14626,
      "source_files_sampled": 13,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "composer.json",
        "docs/Gemfile"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 84,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist",
        "rubygems"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "10up/wp_mock",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "packagist"
          },
          {
            "name": "antecedent/patchwork",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "packagist"
          },
          {
            "name": "automattic/vipwpcs",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "packagist"
          },
          {
            "name": "composer/installers",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "packagist"
          },
          {
            "name": "dealerdirect/phpcodesniffer-composer-installer",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "packagist"
          },
          {
            "name": "doctrine/instantiator",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "packagist"
          },
          {
            "name": "hamcrest/hamcrest-php",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "packagist"
          },
          {
            "name": "mockery/mockery",
            "direct": false,
            "version": "1.6.12",
            "ecosystem": "packagist"
          },
          {
            "name": "myclabs/deep-copy",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "packagist"
          },
          {
            "name": "nikic/php-parser",
            "direct": false,
            "version": "5.7.0",
            "ecosystem": "packagist"
          },
          {
            "name": "phar-io/manifest",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "phar-io/version",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "packagist"
          },
          {
            "name": "phpcsstandards/phpcsextra",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "packagist"
          },
          {
            "name": "phpcsstandards/phpcsutils",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/php-code-coverage",
            "direct": false,
            "version": "9.2.32",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/php-file-iterator",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/php-invoker",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/php-text-template",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/php-timer",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/phpunit",
            "direct": false,
            "version": "9.6.34",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/cli-parser",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/code-unit",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/code-unit-reverse-lookup",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/comparator",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/complexity",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/diff",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/environment",
            "direct": false,
            "version": "5.1.5",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/exporter",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/global-state",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/lines-of-code",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/object-enumerator",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/object-reflector",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/recursion-context",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/resource-operations",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/type",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "packagist"
          },
          {
            "name": "sebastian/version",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "packagist"
          },
          {
            "name": "sirbrillig/phpcs-variable-analysis",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "packagist"
          },
          {
            "name": "squizlabs/php_codesniffer",
            "direct": false,
            "version": "3.13.5",
            "ecosystem": "packagist"
          },
          {
            "name": "staabm/annotate-pull-request-from-checkstyle",
            "direct": false,
            "version": "1.8.6",
            "ecosystem": "packagist"
          },
          {
            "name": "theseer/tokenizer",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "packagist"
          },
          {
            "name": "wp-coding-standards/wpcs",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "packagist"
          },
          {
            "name": "addressable",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "bigdecimal",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "colorator",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "concurrent-ruby",
            "direct": false,
            "version": "1.3.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "csv",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "em-websocket",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "eventmachine",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "ffi",
            "direct": false,
            "version": "1.17.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "forwardable-extended",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "google-protobuf",
            "direct": false,
            "version": "4.35.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "http_parser.rb",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "i18n",
            "direct": false,
            "version": "1.14.8",
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-include-cache",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-sass-converter",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-seo-tag",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-watch",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "kramdown",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "kramdown-parser-gfm",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "liquid",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "listen",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "logger",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mercenary",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "pathutil",
            "direct": false,
            "version": "0.16.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "public_suffix",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rake",
            "direct": false,
            "version": "13.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-fsevent",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-inotify",
            "direct": false,
            "version": "0.11.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rexml",
            "direct": false,
            "version": "3.4.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "rouge",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "safe_yaml",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-aarch64-linux-android",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-arm-linux-androideabi",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-arm-linux-gnueabihf",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-arm-linux-musleabihf",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-riscv64-linux-android",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-riscv64-linux-gnu",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-riscv64-linux-musl",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-embedded",
            "direct": false,
            "version": "1.100.0-x86_64-linux-android",
            "ecosystem": "rubygems"
          },
          {
            "name": "terminal-table",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "unicode-display_width",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "webrick",
            "direct": false,
            "version": "1.9.2",
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 84,
        "direct_count": 0,
        "indirect_count": 84
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 58,
        "open_issues": 9,
        "closed_ratio": 0.679,
        "closed_issues": 19,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "kadamwhite",
          "commits": 187,
          "avatar_url": "https://avatars.githubusercontent.com/u/442115?v=4"
        },
        {
          "type": "User",
          "login": "goldenapples",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/665992?v=4"
        },
        {
          "type": "User",
          "login": "mikelittle",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/358499?v=4"
        },
        {
          "type": "User",
          "login": "joeleenk",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/6807390?v=4"
        },
        {
          "type": "User",
          "login": "mattheu",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/494927?v=4"
        },
        {
          "type": "User",
          "login": "tomjn",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/58855?v=4"
        },
        {
          "type": "User",
          "login": "smccafferty",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/641462?v=4"
        },
        {
          "type": "User",
          "login": "svandragt",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/594871?v=4"
        },
        {
          "type": "User",
          "login": "joehoyle",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/161683?v=4"
        },
        {
          "type": "User",
          "login": "Sephsekla",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/33831317?v=4"
        }
      ],
      "contributors_sampled": 18,
      "top_contributor_share": 0.725
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "deploy-docs.yml",
        "php-standards.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "phpcs.xml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Gemfile.lock",
        "composer.lock"
      ],
      "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": 6,
            "reason": "5 out of 8 merged PRs checked by a CI test -- score normalized to 6",
            "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": 8,
            "reason": "Found 5/6 approved changesets -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 6 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "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": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "458442849ab180a850f2edda9ad629105481873e",
        "ran_at": "2026-07-23T15:53:11Z",
        "aggregate_score": 6.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-15T17:57:24Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-15T17:56:44Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 18,
          "created_at": "2020-04-15T09:59:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 21,
          "created_at": "2020-05-25T12:53:57Z",
          "last_comment_at": "2020-11-13T15:02:37Z",
          "last_comment_author": "kadamwhite"
        },
        {
          "number": 23,
          "created_at": "2020-07-09T20:42:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 30,
          "created_at": "2020-11-23T16:08:05Z",
          "last_comment_at": "2021-01-16T21:42:06Z",
          "last_comment_author": "kadamwhite"
        },
        {
          "number": 32,
          "created_at": "2021-01-25T21:44:04Z",
          "last_comment_at": "2022-07-27T21:23:36Z",
          "last_comment_author": "kadamwhite"
        },
        {
          "number": 49,
          "created_at": "2022-11-17T21:57:45Z",
          "last_comment_at": "2025-03-27T15:23:56Z",
          "last_comment_author": "roborourke"
        },
        {
          "number": 54,
          "created_at": "2023-05-11T17:20:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 81,
          "created_at": "2026-02-25T20:28:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 82,
          "created_at": "2026-04-06T16:56:59Z",
          "last_comment_at": "2026-05-27T16:54:38Z",
          "last_comment_author": "kadamwhite"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/humanmade/asset-loader",
    "host": "github.com",
    "name": "asset-loader",
    "owner": "humanmade"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 71,
      "inputs": {
        "security": 70,
        "vitality": 76,
        "community": 50,
        "governance": 70,
        "engineering": 85
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 76,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "commits_last_year": 55,
              "human_commit_share": 0.91,
              "days_since_last_push": 7,
              "active_weeks_last_year": 13
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "13/52 weeks with commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "55 commits in the last year",
                "points": 15.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 55
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "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": 84,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v1.0.1",
              "releases_from_tags": false,
              "days_since_latest_release": 14,
              "mean_days_between_releases": 164.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 14 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~164.9 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 164.9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 7,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 7 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "forks": 3,
              "stars": 26,
              "watchers": 14,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "26 stars",
                "points": 22.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 26
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "14 watchers",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "packages": [
                "humanmade/asset-loader"
              ],
              "dependents": 5,
              "ecosystems": "packagist",
              "total_downloads": 351134,
              "monthly_downloads": 10145
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "10,145 downloads/month across packagist",
                "points": 53.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 10145,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "5 packages depend on it",
                "points": 5.2,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 70,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 18,
              "top_contributor_share": 0.725
            },
            "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 72% of commits",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 72
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "18 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "merged_prs": 58,
              "open_issues": 9,
              "closed_issues": 19,
              "issue_closed_ratio": 0.679,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "68% of issues closed",
                "points": 31.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 68
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "58/59 decided PRs merged",
                "points": 37.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 58,
                      "decided": 59
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/6 approved changesets -- score normalized to 8",
                "points": 12,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "followers": 321,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "humanmade",
              "public_repos": 550,
              "account_age_days": 5623
            },
            "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": "321 followers of humanmade",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 321,
                      "login": "humanmade"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "550 public repos, account ~15 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 550
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "humanmade/asset-loader"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 15
            },
            "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 15 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 15
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "19 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 85,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "phpcs.xml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "phpcs.xml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "5 out of 8 merged PRs checked by a CI test -- score normalized to 6",
                "points": 12,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://humanmade.github.io/asset-loader/",
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://humanmade.github.io/asset-loader/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 70,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6.2
            },
            "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": "5 out of 8 merged PRs checked by a CI test -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 5/6 approved changesets -- score normalized to 8",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "16 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 84 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 84
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 84,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 84,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "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": 15
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 46,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.418,
              "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": "38 of 91 human commits state their intent (structured subject or explanatory body)",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 38,
                      "sampled": 91
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Gemfile.lock",
                "composer.lock"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.09
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "phpcs.xml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "phpcs.xml"
                    }
                  }
                ],
                "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "9 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 9,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 14626,
              "source_files_sampled": 13,
              "oversized_source_files": 0
            },
            "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": "0/13 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 13,
                      "oversized": 0
                    }
                  }
                ],
                "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T15:53:39.278422Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/humanmade/asset-loader.svg",
  "full_name": "humanmade/asset-loader",
  "license_state": "custom",
  "license_spdx": null
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasPackagist.