Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 03:22 UTC

FluxML / NNlib.jl

Neural Network primitives with multiple backends

JuliaLicencia propia★ 255 estrellas⑂ 134 forksdesde ago 2017Ver en GitHub ↗

FluxML/NNlib.jl 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 Vitality (80/100) y la más baja, Security (52/100). Se actualizó por última vez hoy. 4 personas concentran 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

FluxMLOrganización
333 seguidores48 repositorios públicosdesde mar 2017

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

Métricas por categoría

Vitalidad

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

80Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
9/36Cadencia de commits — 13/52 semanas con commits
16.8/18Volumen de commits — 74 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year74
human_commit_share0,84
days_since_last_push0
active_weeks_last_year13
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 14 días
19.8/27Cadencia de publicación — una versión cada ~51,4 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv0.9.38
releases_from_tagsno
days_since_latest_release14
mean_days_between_releases51,4
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?

64Moderado · 18% del índice global
Cómo se puntúa
39/60Estrellas — 255 estrellas
17.7/25Forks — 134 forks
6.2/15Observadores — 14 observadores
Datos de entrada utilizados
forks134
stars255
watchers14
growth_stateorganic
growth_factor_pct100
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
0/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conduct
has_pull_request_template

Sostenibilidad y Gobernanza

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

76Bueno · 24% del índice global
Cómo se puntúa
43.2/54Factor bus — la mitad de los commits recae en 4 contribuyente(s)
16.4/22.5Distribución de commits — el principal contribuyente firma el 27% de los commits
13.5/13.5Amplitud de contribuyentes — 94 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 89 contributing companies or organizations
Datos de entrada utilizados
bus_factor4
contributors_sampled94
top_contributor_share0,269
Cómo se puntúa
39.8/46.8Resolución de issues — 85% de issues cerradas
31.5/38.3Aceptación de PR — 384/467 PR decididos fusionados
1.5/15OpenSSF Scorecard: Code-Review — Found 3/28 approved changesets -- score normalized to 1
Datos de entrada utilizados
merged_prs384
open_issues36
closed_issues206
issue_closed_ratio0,851
closed_unmerged_prs83
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
18.1/25Alcance del propietario — 333 seguidores de FluxML
24.3/25Trayectoria — 48 repos públicos, cuenta de ~9 años
Datos de entrada utilizados
followers333
owner_typeOrganization
is_verified
owner_loginFluxML
public_repos48
account_age_days3424

Calidad de Ingeniería

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

75Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 7 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 27 out of 27 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 3 topics
10/10Wiki
Datos de entrada utilizados
topicsmachine-learning, deep-learning, julia
has_wiki
homepage
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?

52Moderado · 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
2.5/2.5CI-Tests — 27 out of 27 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 3/28 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 89 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 — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 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_aggregate5,2
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

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.

59Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 69 de 84 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,821
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3316
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
0/11Verificación estática de tipos
0/10Entorno reproducible
10/10Práctica demostrada con agentes — 41 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 13 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,41
toolchain_manifests
dependency_bot_commit_share0,13
Cómo se puntúa
0/45Código verificable por tipos — Julia sin configuración de verificación de tipos
55/55Tamaños de archivo manejables — 0/1 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJulia
largest_source_bytes1275
source_files_sampled1
oversized_source_files0

Datos clave

255estrellas de GitHub
94contribuidores
74commits en los últimos 12 meses
0días desde el último push
100versiones publicadas
4factor bus
36issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

  • No resolved dependencies carried a version and a supported ecosystem

Más detalle

Historial de estrellas y forks 255 ★ / 134 ⇿
255Estrellas
134Forks
100Versiones

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.

05010015020025030025513342017-082022-022026-07
Mayor 0Menor 3Parche 97

Cada punto abarca 9 días.

OpenSSF Scorecard 5.2 / 10
5.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-22 03:21 UTC

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

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

RegistroPaqueteVersiónRelación
PyPInumpyindirecta
PyPItorchindirecta
Avisos de dependencias sin evaluar

El cotejo de avisos no pudo ejecutarse para este informe: No resolved dependencies carried a version and a supported ecosystem

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "machine-learning",
        "deep-learning",
        "julia"
      ],
      "is_fork": false,
      "size_kb": 5951,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Julia": 741736,
        "Python": 1275
      },
      "pushed_at": "2026-07-22T01:15:36Z",
      "created_at": "2017-08-21T17:14:26Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T01:16:02Z",
      "description": "Neural Network primitives with multiple backends",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Julia",
      "significant_languages": [
        "Julia"
      ]
    },
    "owner": {
      "blog": "https://fluxml.ai",
      "name": "FluxML",
      "type": "Organization",
      "login": "FluxML",
      "company": null,
      "location": null,
      "followers": 333,
      "avatar_url": "https://avatars.githubusercontent.com/u/26222520?v=4",
      "created_at": "2017-03-06T12:07:55Z",
      "is_verified": null,
      "public_repos": 48,
      "account_age_days": 3424
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.9.38",
          "kind": "patch",
          "published_at": "2026-07-07T08:46:33Z"
        },
        {
          "tag": "v0.9.37",
          "kind": "patch",
          "published_at": "2026-06-26T15:23:50Z"
        },
        {
          "tag": "v0.9.36",
          "kind": "patch",
          "published_at": "2026-06-10T04:19:10Z"
        },
        {
          "tag": "v0.9.35",
          "kind": "patch",
          "published_at": "2026-06-07T18:21:55Z"
        },
        {
          "tag": "v0.9.34",
          "kind": "patch",
          "published_at": "2026-04-11T17:56:54Z"
        },
        {
          "tag": "v0.9.33",
          "kind": "patch",
          "published_at": "2026-01-13T11:17:09Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-01-13T11:16:09Z"
        },
        {
          "tag": "v0.9.32",
          "kind": "patch",
          "published_at": "2025-12-07T13:17:31Z"
        },
        {
          "tag": "v0.9.31",
          "kind": "patch",
          "published_at": "2025-07-23T16:32:18Z"
        },
        {
          "tag": "v0.9.30",
          "kind": "patch",
          "published_at": "2025-04-01T00:32:49Z"
        },
        {
          "tag": "v0.9.29",
          "kind": "patch",
          "published_at": "2025-03-19T15:46:08Z"
        },
        {
          "tag": "v0.9.28",
          "kind": "patch",
          "published_at": "2025-02-28T23:40:16Z"
        },
        {
          "tag": "v0.9.27",
          "kind": "patch",
          "published_at": "2025-01-09T10:11:29Z"
        },
        {
          "tag": "v0.9.26",
          "kind": "patch",
          "published_at": "2024-11-26T07:07:50Z"
        },
        {
          "tag": "v0.9.25",
          "kind": "patch",
          "published_at": "2024-11-25T20:27:24Z"
        },
        {
          "tag": "v0.9.24",
          "kind": "patch",
          "published_at": "2024-09-18T23:50:30Z"
        },
        {
          "tag": "v0.9.23",
          "kind": "patch",
          "published_at": "2024-09-03T18:33:36Z"
        },
        {
          "tag": "v0.9.22",
          "kind": "patch",
          "published_at": "2024-08-09T16:41:24Z"
        },
        {
          "tag": "v0.9.21",
          "kind": "patch",
          "published_at": "2024-07-21T19:47:53Z"
        },
        {
          "tag": "v0.9.20",
          "kind": "patch",
          "published_at": "2024-07-12T08:50:06Z"
        },
        {
          "tag": "v0.9.19",
          "kind": "patch",
          "published_at": "2024-07-04T07:53:07Z"
        },
        {
          "tag": "v0.9.18",
          "kind": "patch",
          "published_at": "2024-06-19T20:20:31Z"
        },
        {
          "tag": "v0.9.17",
          "kind": "patch",
          "published_at": "2024-05-20T09:34:18Z"
        },
        {
          "tag": "v0.9.16",
          "kind": "patch",
          "published_at": "2024-05-12T22:42:04Z"
        },
        {
          "tag": "v0.9.15",
          "kind": "patch",
          "published_at": "2024-05-11T11:37:07Z"
        },
        {
          "tag": "v0.9.14",
          "kind": "patch",
          "published_at": "2024-04-23T04:06:53Z"
        },
        {
          "tag": "v0.9.13",
          "kind": "patch",
          "published_at": "2024-03-27T16:02:01Z"
        },
        {
          "tag": "v0.9.12",
          "kind": "patch",
          "published_at": "2024-02-15T18:14:41Z"
        },
        {
          "tag": "v0.9.11",
          "kind": "patch",
          "published_at": "2024-01-30T02:50:13Z"
        },
        {
          "tag": "v0.9.10",
          "kind": "patch",
          "published_at": "2023-12-30T16:17:07Z"
        },
        {
          "tag": "v0.9.9",
          "kind": "patch",
          "published_at": "2023-12-19T00:38:15Z"
        },
        {
          "tag": "v0.9.8",
          "kind": "patch",
          "published_at": "2023-11-21T03:01:19Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2023-09-30T04:41:18Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2023-09-20T17:53:24Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2023-09-04T23:07:32Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2023-07-17T13:30:38Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2023-07-10T16:15:04Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2023-07-07T21:48:59Z"
        },
        {
          "tag": "v0.8.21",
          "kind": "patch",
          "published_at": "2023-06-15T18:10:18Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2023-06-14T21:03:38Z"
        },
        {
          "tag": "v0.8.20",
          "kind": "patch",
          "published_at": "2023-04-17T21:22:18Z"
        },
        {
          "tag": "v0.8.19",
          "kind": "patch",
          "published_at": "2023-02-21T08:23:05Z"
        },
        {
          "tag": "v0.8.18",
          "kind": "patch",
          "published_at": "2023-02-11T06:54:27Z"
        },
        {
          "tag": "v0.8.17",
          "kind": "patch",
          "published_at": "2023-02-04T18:02:51Z"
        },
        {
          "tag": "v0.8.16",
          "kind": "patch",
          "published_at": "2023-01-24T05:09:04Z"
        },
        {
          "tag": "v0.8.15",
          "kind": "patch",
          "published_at": "2023-01-07T17:24:42Z"
        },
        {
          "tag": "v0.8.14",
          "kind": "patch",
          "published_at": "2023-01-05T19:43:18Z"
        },
        {
          "tag": "v0.8.13",
          "kind": "patch",
          "published_at": "2023-01-02T22:35:14Z"
        },
        {
          "tag": "v0.8.12",
          "kind": "patch",
          "published_at": "2022-12-26T17:15:58Z"
        },
        {
          "tag": "v0.8.11",
          "kind": "patch",
          "published_at": "2022-11-28T19:20:49Z"
        },
        {
          "tag": "v0.8.10",
          "kind": "patch",
          "published_at": "2022-10-24T17:37:18Z"
        },
        {
          "tag": "v0.8.9",
          "kind": "patch",
          "published_at": "2022-07-22T23:18:04Z"
        },
        {
          "tag": "v0.8.8",
          "kind": "patch",
          "published_at": "2022-06-22T06:21:57Z"
        },
        {
          "tag": "v0.8.7",
          "kind": "patch",
          "published_at": "2022-06-11T07:15:46Z"
        },
        {
          "tag": "v0.8.6",
          "kind": "patch",
          "published_at": "2022-05-31T07:18:30Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2022-05-06T04:23:37Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2022-03-07T17:23:33Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2022-03-05T05:14:25Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2022-02-12T19:12:08Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2022-02-07T22:18:15Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2022-01-23T15:17:23Z"
        },
        {
          "tag": "v0.7.34",
          "kind": "patch",
          "published_at": "2022-01-19T15:20:41Z"
        },
        {
          "tag": "v0.7.33",
          "kind": "patch",
          "published_at": "2022-01-14T19:13:15Z"
        },
        {
          "tag": "v0.7.32",
          "kind": "patch",
          "published_at": "2022-01-11T05:16:56Z"
        },
        {
          "tag": "v0.7.31",
          "kind": "patch",
          "published_at": "2021-11-11T10:22:35Z"
        },
        {
          "tag": "v0.7.30",
          "kind": "patch",
          "published_at": "2021-11-08T12:28:43Z"
        },
        {
          "tag": "v0.7.29",
          "kind": "patch",
          "published_at": "2021-09-07T13:21:09Z"
        },
        {
          "tag": "v0.7.28",
          "kind": "patch",
          "published_at": "2021-08-16T20:20:30Z"
        },
        {
          "tag": "v0.7.27",
          "kind": "patch",
          "published_at": "2021-08-04T15:22:15Z"
        },
        {
          "tag": "v0.7.26",
          "kind": "patch",
          "published_at": "2021-07-30T12:25:51Z"
        },
        {
          "tag": "v0.7.25",
          "kind": "patch",
          "published_at": "2021-07-16T19:12:19Z"
        },
        {
          "tag": "v0.7.24",
          "kind": "patch",
          "published_at": "2021-07-11T12:23:15Z"
        },
        {
          "tag": "v0.7.23",
          "kind": "patch",
          "published_at": "2021-06-30T16:28:50Z"
        },
        {
          "tag": "v0.7.22",
          "kind": "patch",
          "published_at": "2021-06-17T08:23:09Z"
        },
        {
          "tag": "v0.7.21",
          "kind": "patch",
          "published_at": "2021-06-03T10:57:57Z"
        },
        {
          "tag": "v0.7.20",
          "kind": "patch",
          "published_at": "2021-06-01T09:23:25Z"
        },
        {
          "tag": "v0.7.19",
          "kind": "patch",
          "published_at": "2021-04-23T12:29:16Z"
        },
        {
          "tag": "v0.7.18",
          "kind": "patch",
          "published_at": "2021-04-08T13:27:10Z"
        },
        {
          "tag": "v0.7.17",
          "kind": "patch",
          "published_at": "2021-03-14T17:31:20Z"
        },
        {
          "tag": "v0.7.16",
          "kind": "patch",
          "published_at": "2021-03-09T09:22:53Z"
        },
        {
          "tag": "v0.7.15",
          "kind": "patch",
          "published_at": "2021-03-09T05:16:14Z"
        },
        {
          "tag": "v0.7.14",
          "kind": "patch",
          "published_at": "2021-02-06T18:17:03Z"
        },
        {
          "tag": "v0.7.13",
          "kind": "patch",
          "published_at": "2021-02-05T08:18:36Z"
        },
        {
          "tag": "v0.7.12",
          "kind": "patch",
          "published_at": "2021-01-20T06:47:18Z"
        },
        {
          "tag": "v0.7.11",
          "kind": "patch",
          "published_at": "2021-01-08T08:31:00Z"
        },
        {
          "tag": "v0.7.10",
          "kind": "patch",
          "published_at": "2021-01-05T19:33:10Z"
        },
        {
          "tag": "v0.7.9",
          "kind": "patch",
          "published_at": "2020-12-21T05:20:16Z"
        },
        {
          "tag": "v0.7.8",
          "kind": "patch",
          "published_at": "2020-12-15T07:15:56Z"
        },
        {
          "tag": "v0.7.7",
          "kind": "patch",
          "published_at": "2020-11-16T11:11:24Z"
        },
        {
          "tag": "v0.7.6",
          "kind": "patch",
          "published_at": "2020-11-03T17:11:18Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2020-10-03T15:13:53Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2020-08-04T07:10:39Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2020-07-11T22:08:51Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2020-07-07T17:08:40Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2020-07-02T01:10:03Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2020-06-18T12:09:23Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2020-03-02T19:05:54Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2020-02-29T08:06:34Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2020-01-16T01:58:00Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2020-01-14T13:58:19Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b537af2fda22f8e65551dff81a256f14204c0bcc",
          "body": "Bumps [JuliaRegistries/TagBot](https://github.com/juliaregistries/tagbot) from 1.25.8 to 1.25.9.\n- [Release notes](https://github.com/juliaregistries/tagbot/releases)\n- [Commits](https://github.com/juliaregistries/tagbot/compare/304fc93e4623081443fee5b6317ac73b37923574...e4c81aa138ef4179bddea165bb4a\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump JuliaRegistries/TagBot from 1.25.8 to 1.25.9 (#739)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T09:01:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e687800a16391d58fefba2b929b19f5a2509c72",
          "body": null,
          "is_bot": false,
          "headline": "Bump version from 0.9.37 to 0.9.38",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-07-07T08:22:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35132923f00314fb69a63276fcccb07c5fc7992",
          "body": "* Use MPSGraph for Metal softmax\n\n* Use MPSGraph for Metal conv and pool\n\n* Use MPSGraph for Metal NN gradients\n\n* Use MPSGraph for grouped Metal conv\n\n* Require Metal v1.10 for the MPSGraph NN primitives\n\nThe Metal extension routes softmax, conv, and pooling (and their gradients)\nthrough `Metal.MPS\n[…]\nh are only available from\nMetal.jl v1.10 onwards.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Interface with new Metal primitives (#725)",
          "author_name": "Tim Besard",
          "author_login": "maleadt",
          "committed_at": "2026-07-07T08:22:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87ea0ebaae9f8cd684a06485bf661b6dce6ca889",
          "body": "The 8 rules for allocating ops (imrotate, upsample_nearest/linear, grid_sample,\nctc_loss, batchnorm, unfold, fold) each repeated the same augmented/reverse\nplumbing: run the forward, allocate an output shadow, and on reverse loop over\nthe batch width feeding the shadow to the op's ∇ function and acc\n[…]\nyte against the pre-refactor code; GPU batchnorm and grid_sample still\nmatch Zygote; untouched conv/pool rules pass (1402 + 4117).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Factor shared scaffolding out of the allocating Enzyme rules (#736)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-07-01T15:54:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9516bdb77f890a8d0a15ebd387f419d666c4d4a6",
          "body": "…e (#734) (#735)\n\n* Accept `alpha`/`beta` in cuDNN pooling backward (Enzyme accumulation)\n\nThe `EnzymeRules.reverse` rule for `maxpool!`/`meanpool!` (in\nNNlibEnzymeCoreExt) calls `∇maxpool!(dx, dy, y, x, pdims; alpha=1, beta=1)`\nto accumulate the gradient into the input shadow. The cuDNN\n`∇maxpool!`\n[…]\nnput+grid)\nand unfold/fold (spatial ranks 1/2/3).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Enzyme rules for cuDNN pooling/softmax/activations + imrotate/upsampl…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-07-01T12:34:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "04fb06a5a5a69d28e40d04caaf195ec311c3494a",
          "body": "…(#733)\n\n* Support multiple AD backends in `test_gradients`, default to Zygote + Enzyme\n\n`test_gradients` now accepts a list of AD types for `compare` and defaults to\n`[AutoZygote(), AutoEnzyme()]`, so gradients are checked against both backends.\n\n- Add `NNLIB_TEST_ENZYME` env flag; when false, `Tes\n[…]\nthored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* exclude enzyme on gpu and on windows\n\n* or\n\n* ifelse\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Compare gradients against both Zygote and Enzyme in `test_gradients` …",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-07-01T04:44:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b340fdd2d8a33a249c105757c8b72c009e9298e4",
          "body": "* rename Test_Enzyme\n\n* Migrate GPU `gputest` calls to the shared `test_gradients`\n\nReplace per-backend `gputest` calls with the unified `test_gradients`\nhelper (test_module.jl) wherever the test checks a differentiable\nforward+gradient, continuing the migration started in #730.\n\nCUDA (verified loca\n[…]\ns, and the ForwardDiff `Dual` forward-mode tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Migrate GPU `gputest` calls to the shared `test_gradients` (#732)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-29T05:26:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bba9c2209f770355a917eaed97830a204a740192",
          "body": "* Enable scatter common_testsuite on the Metal backend\n\nActivate the shared `scatter` suite on Metal and make it Metal-compatible.\nOther shared suites stay skipped on Metal pending their own fixes (they hit\nFloat64 / scalar-indexing / complex-activation / ImageTransformations limits).\n\nscatter.jl Me\n[…]\nle/gather/fold are 0-error on both Metal and CPU.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Enable scatter, gather, fold, upsample common_testsuites on Metal (#731)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-28T14:38:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e0831c03e4bb5a39205988db0f6b7613e2de13f9",
          "body": "* Migrate gradient tests from `gradtest` to `test_gradients`\n\nAdd a multi-backend `test_gradients` utility (adapted from Flux) to\n`test/test_module.jl` and migrate the bulk of `gradtest` call sites to it.\n\n`test_gradients`:\n- compares a Zygote gradient against a FiniteDifferences reference (inputs\n \n[…]\nfloat coverage. Verified on CPU and CUDA locally.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Migrate gradient tests from `gradtest` to `test_gradients` (#730)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-28T04:39:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cda262f97fa8e8afdbabf614784bb1024b9a8bb8",
          "body": null,
          "is_bot": false,
          "headline": "add AGENTS.md",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-27T05:43:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad332c694e934804bccdbc2bfa94f1c5c47f0e34",
          "body": "* Migrate test suite to ParallelTestRunner (#533)\n\nRun each test file in its own ParallelTestRunner worker so the suite runs\nin parallel. Shared imports/helpers move into test/test_module.jl (loaded in\nevery worker via init_code); the backend-parametrized testsuite/ suites are\ndriven with one entry \n[…]\nember (Metal 1.9.3 lands in the shared manifest).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Migrate test suite to ParallelTestRunner (#533) (#729)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-27T05:39:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4726413e4956b47f4169d87daf4347e4d85d906d",
          "body": "* bachnorm rules\n\n* rm cuda, cudnn deps\n\n* fix batchnorm rrule!! backward with nothing running stats\n\n* cache fwd mean/ivar to make backward deterministic\n\n* fix dims\n\n* note about caching mean & var",
          "is_bot": false,
          "headline": "Mooncake rule for `NNlib.batchnorm`. (#727)",
          "author_name": "Astitva Aggarwal",
          "author_login": "AstitvaAggarwal",
          "committed_at": "2026-06-26T15:04:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdc06d1d0717939ac57d067fba9df00067092e0c",
          "body": "The `dropout` rrule built `@. ((keep > p) * val) * A` with `p` passed\nthrough unchanged. When `p` is a `Float64` (e.g. the `Dropout(0.0)`\ndefault inside `MultiHeadAttention`) and `A` is a `Float32` GPU array,\nthe `keep > p` comparison promoted the broadcast to `Float64`, which\nfails to compile on Me\n[…]\nays\nin the element type. Adds a Metal regression test covering `p = 0.0`\n(the MHA default) and `p = 0.3`, with and without `dims`.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix dropout rrule on Metal: keep `p` in the array's float type (#726)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-25T06:16:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba135536be31fa2b00ad6712305f36a6708ef26e",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 7 (#724)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T12:43:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ef1fd04fbefb68f9688e55f3a3e834a6bc81944",
          "body": "* Update Buildkite pipeline for the new JuliaGPU cluster.\n\nSwitch to the per-backend queues of the new JuliaGPU cluster.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* Move the Metal job(s) to the new metal queue.\n\nThe JuliaGPU cluster now has a macOS agent with an Apple Silicon GPU,\nso Metal jobs no longer need a separate pipeline on the ecosystem\ncluster.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Buildkite pipeline for the new JuliaGPU cluster (#723)",
          "author_name": "Tim Besard",
          "author_login": "maleadt",
          "committed_at": "2026-06-14T19:11:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f71b71c7f497b849c6553e098ba1966d36418225",
          "body": "* Refactor softmax gradients to not capture x\n\nThe softmax/logsoftmax backward passes never use the input `x` for its\nvalues: the generic path computes from `dy` and `y` alone, and the cuDNN\npath uses `x` only for shape/eltype metadata, which `y` carries equally.\nCapturing `x` in the rrule pullback \n[…]\nnoreply@anthropic.com>\n\n* Remove deprecation test\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor softmax and hook cudnn backward (#718)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T16:07:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd8bf8364ec2cc9f2d22cd03b1daa6d542d47f16",
          "body": "…mark (#513) (#717)\n\n* Add GPU softmax benchmark (cuDNN vs custom kernels, issue #513)\n\nBenchmarks softmax/logsoftmax forward and gradient on the GPU, comparing\nthe cuDNN routines against NNlib's generic broadcast kernels (and\nLogExpFunctions.softmax as a cross-check), for dims=1 and dims=2.\n\nReprod\n[…]\nustom policy, and a\n\"why not permute\" comparison.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix slow cuDNN softmax backward via INSTANCE mode + GPU softmax bench…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T09:55:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a36dcfc4cafc6b5b02653107ca9cbbcd94cb999",
          "body": "* skip enzyme gather test on amdgpu\n\n* deactivate enzyme tests on amdgpu",
          "is_bot": false,
          "headline": "skip enzyme tests on amdgpu (#709)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T09:16:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f91c34dbc4086e47aee9c6e9b326b9d7c645ec38",
          "body": "Adds `NNlib._batched_gemm!(::Type{<:MtlArray}, ...)` to the Metal extension,\nthe dispatch hole that made `batched_mul` (and thus `dot_product_attention`)\nraise a MethodError on `MtlArray`s.\n\nReal `Float16`/`Float32` operands with matching batch sizes go through Metal\nPerformance Shaders' batched `ma\n[…]\nperands,\nmatrix×batch broadcasting, batched_vec, tiny arrays, Float16, gradients, the\nin-place 5-arg form, and display/conversion.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support batched_mul on Metal via MPS (fixes #581) (#714)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T06:13:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a3c123146c852a01ac52bd4cab60b1cc6e724a6",
          "body": "The cuDNN softmax algorithm was selected from CUDA.math_mode: under\nCUDA.FAST_MATH it used CUDNN_SOFTMAX_FAST, which skips the row-max\nsubtraction and overflows to NaN on masked / large-magnitude inputs\n(e.g. attention masks of -1000 or -Inf), and is unsafe in Float16.\n\nsoftmaxalgo() now always retu\n[…]\nse overflow-safe.\n\nAdds a regression test exercising both DEFAULT_MATH and FAST_MATH with\nlarge-negative and -Inf attention masks.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Always use accurate cuDNN softmax algorithm (fixes #506) (#715)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T06:07:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ed25976bb6c67a4f2d04630e26fd1f37fbde6eb",
          "body": null,
          "is_bot": false,
          "headline": "Bump version from 0.9.35 to 0.9.36",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T03:50:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d831105dc79e56005d97523595593be16b505e5",
          "body": "* Support complex inputs in meanpool on GPU (fixes #610)\n\nMean pooling is linear, so the cuDNN extension supports complex inputs by\npooling the real and imaginary parts independently and recombining, mirroring\nthe existing complex-conv pattern. This already worked on the CPU path via the\ngeneric imp\n[…]\nCUDA/CPU complex tests to\nalso cover the AD path.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support complex inputs in meanpool across backends (fixes #610) (#711)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T03:49:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba68bbbaaf039f1fd1ef791ce895a18a850f8398",
          "body": "The `@inferred stft(x; n_fft=16)` test in test/testsuite/spectral.jl was\ndisabled with a \"TODO fix type stability for pad_reflect\" comment. There\nwere two distinct sources of instability:\n\n1. The single-dimension padding kernels (`pad_reflect`, `pad_symmetric`,\n   `pad_circular`, `pad_repeat`) forwa\n[…]\nng docstring examples match\nexactly, gradients agree with finite differences, and the padding.jl and\nspectral CPU testsuites pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make padding functions and stft type-stable (#702) (#713)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T03:45:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6af48f575444f9ee3e9d8c40101c36849b2121af",
          "body": "* Enable Enzyme tests on Julia 1.12\n\nEnzyme is functional on Julia 1.12 (verified against Enzyme 0.13.154):\nconv!/∇conv_data!/∇conv_filter!/depthwiseconv! (spatial ranks 1-3),\nmaxpool!/meanpool!, gather!, scatter! and dropout all pass.\n\n- runtests.jl: extend the `Test_Enzyme` guard to `v\"1.13-\"` so \n[…]\nhttps://github.com/EnzymeAD/Enzyme.jl/issues/3150\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Enable Enzyme tests on Julia 1.12 (#708)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-10T01:58:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "49948aeea8174d6105236a40d2f912d6651da83c",
          "body": "…nbreak tests (#706)\n\nAudit follow-up to #702.\n\nsrc/activations.jl:\n- hardσ: the broadcasted/scalar derivative returned `oftf(Ω, 1)` (i.e. 1)\n  in its saturated branch instead of 0, so the gradient was wrong for |x|>3\n  on every backend. The existing gradtests only probe ±2±rand, always inside\n  har\n[…]\nactivations.jl: add a regression test checking saturated-region gradients\n  of hardσ/hardtanh/relu6/hardswish against ForwardDiff.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix clamping-activation gradients (incl. hardσ correctness bug) and u…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T16:47:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8918579a075e3e77d01a7c22d90712c94ba5e766",
          "body": "…ing (#705)\n\nWhen `gather`/`scatter` are called with the source/destination on the GPU\nbut the index array left on the CPU, dispatch previously fell through to the\ngeneric method, which scalar-indexes the GPU array — slow, or an error under\n`allowscalar(false)`. Add methods that move such an index o\n[…]\nr GPU) against the\nindexed dimensions before launching the kernel, for both the generic-KA and\nCUDA-specific scatter paths (#416).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support CPU index with GPU source in gather/scatter, add bounds check…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T16:47:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1992a728e9f986d13dcf7640f202adefe171126a",
          "body": "…03) (#704)\n\n* Support all scatter reduction ops on Metal (#534)\n\nThe shared GPU scatter kernel performed its atomic update via\n`Atomix.modify!`, whose Metal backend only implements a fixed op list.\nOn Metal this meant:\n\n- `max`/`min` on floats failed to compile (no Float32 atomic_fetch_max/min,\n  s\n[…]\noverride. The Metal grad\ntests now cover all ops.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix scatter on Metal: all reduction ops and gradients (fixes #534, #7…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T15:47:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "33528494bed3403a26a609cbc930f96a41d8b3ab",
          "body": "cuDNN's TRUE_HALF_CONFIG (accumulate in Float16) is unsupported for 3D\nconvolutions and for many backward-filter shapes, surfacing as\nCUDNN_STATUS_NOT_SUPPORTED / BAD_PARAM. Set the convolution descriptor's\ncompute type to Float32 for Float16 inputs (PSEUDO_HALF_CONFIG), which is\nbroadly supported a\n[…]\nhin Float16\nrounding), plus explicit regression guards for the #505 (5D forward) and\n#515 (3=>64, 1x1-output ∇conv_filter) shapes.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Float16 GPU conv via PSEUDO_HALF_CONFIG (fixes #505, #515) (#701)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T15:09:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8ee3540eccd991597e6c89d2fe33f608035e29fe",
          "body": "…pace (#520) (#700)\n\nGrouped convolutions (and, since #698, depthwise convolutions) allocated a\nfresh im2col `col` workspace per group, so a depthwise conv with N channels\nallocated O(N) buffers. They also nested two levels of threading (parallel\nover groups x per-image batch threading inside each g\n[…]\n to share).\n\nThe #520 MWE drops from ~12.6k to ~1.2k allocations and the redundant per-group\ncol buffers (~13 MiB) are eliminated.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reduce grouped/depthwise conv allocations by sharing the im2col works…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T13:17:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c006e7bcc74eb75438e2c420cadaee6f1c73bf2",
          "body": "…698)\n\nA depthwise convolution is exactly a grouped convolution with\n`groups == channels_in`. The specialized depthwise im2col/direct kernels\nbenchmarked consistently slower than the generic grouped-convolution path\n(forward, ∇data, and especially ∇filter which was ~4.5x slower), so route\nevery dept\n[…]\ng test is repurposed to check `depthwiseconv` against an\nindependently (explicit-loop) reordered grouped convolution.\n\nCloses #402\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement depthwiseconv via grouped conv, drop specialized kernels (#…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T09:56:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9f5ada1bd0bdb038fede4248c0a2907bd7d01c57",
          "body": "* Thread CPU conv within a single image at small batch (#234)\n\n`conv_im2col!` only parallelized over the batch dimension, so with\n`batch < nthreads` the extra threads sat idle — the main reason CPU conv\nlagged PyTorch at small batch in #234.\n\nWhen there are fewer images than tasks, also split each i\n[…]\nin a fair 4-thread config and report\nthe minimum.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Thread CPU conv within a single image at small batch (#234) (#697)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T09:55:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "741381c577e0b389afaf5a2ea09a6840a8f5be08",
          "body": "* Add conv perf analysis to benchmark README\n\nSummarizes why NNlib's CPU conv is slower than PyTorch's: NNlib threads\nonly over the batch dimension (idle cores when batch < nthreads), while\nPyTorch dispatches float32 convs to oneDNN's JIT direct convolution, which\nparallelizes within a single image.\n[…]\nright fix, not a from-scratch\ndirect convolution.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add CPU conv performance analysis to benchmark README (#696)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T06:53:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a62811a0981645780fa165dffa7c999217ed95d",
          "body": "cuDNN exposes two average-pooling modes: one that includes padding zeros\nin the averaging denominator and one that excludes them. NNlib's meanpool\nonly implemented the include-padding mode.\n\nAdd a `count_include_pad` keyword (default `true`, so the behavior is\nunchanged) to `meanpool`. When `false`,\n[…]\nyword.\n- Tests: CPU forward/gradient vs a brute-force reference across spatial\n  ranks, and CPU-vs-cuDNN agreement for both modes.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add count_include_pad option to meanpool (issue #218) (#694)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T06:48:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ccb412c4c05f38305277078619925e1670ea5ef",
          "body": "Adds benchmark/conv_vs_pytorch/ with matched forward-conv benchmarks for\nNNlib and PyTorch on CPU (4 threads, Float32), reproducing the ~2x slowdown\nreported in #234. The Python side is managed with uv (CPU-only torch).\n\nConfirms NNlib is ~2-3x slower for common conv shapes, with the gap nearly\nclosing for 1x1 convs (pure GEMM), pointing at the im2col path and\nallocations rather than the matmul.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add CPU conv benchmark comparing NNlib vs PyTorch (issue #234) (#695)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T06:19:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf6f551ffc5f89713b07571b689770fcd83c76b0",
          "body": "* activations: support complex inputs, with stable forward and correct gradients\n\nHolomorphic activations (σ, swish, softplus, logσ, mish, logcosh, tanh_fast,\nlisht, tanhshrink, gelu_*) now work on complex inputs. Only σ(::Complex) and\nsoftplus(::Complex) had to be added; the functions defined in te\n[…]\nrectly\nadjacent to the definition for Documenter.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support complex inputs in activation functions (#691)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-09T05:57:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd43698819415caf4f9cb7f42ff2ac9cdff7881d",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 6 to 7 (#688)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-08T06:13:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bc1d3fa20dce885dfea4d2b22fc83d74b57db0a0",
          "body": "batched_mul already reshaped trailing batch dimensions to dispatch to\nthe 3D implementation, but batched_mul! only had a 3D method. Add a\ngeneric N-D method that reshapes to 3D (sharing data, no copy) and\nvalidates batch sizes.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support N-D arrays in batched_mul! (#529) (#685)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T20:01:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01a3d38211a12323f78dda0138c6bd0cca98d4bc",
          "body": "Thread the dimension count through `gen_pad` as `Val{N}` instead of a\nruntime `Int`, so the internal `ntuple` calls infer to fixed-length\ntuples. Previously `pad_constant`/`pad_zeros` with a tuple pad and the\ndefault `dims = :` inferred to `Any`.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix type instability in pad_constant/pad_zeros (#409) (#684)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T20:01:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3b7d37454d2c323c7f1fb05526289cdb300cb493",
          "body": "The referenced ChainRulesTestUtils.jl PR #166 has been merged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove obsolete TODO comment in test_utils (#428) (#687)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T20:01:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01e14b9c007545e4bf2d36443f7d1d810b5515da",
          "body": "Document input/output array layouts, the output size formula, keyword\narguments, and add a runnable example.\n\nFixes #544\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve conv docstring with dimensions and examples (#683)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T19:31:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fdf019b5af2ed37b2f466e9e74fe9a0711f05bd4",
          "body": "…#682)\n\nUnicodePlots 3.5 (April 2023) changed the function-plot signature from\nlineplot(f, lo, hi) to lineplot(lo, hi, f). Update the docstring examples\nin activations.jl accordingly.\n\nFixes #623\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update lineplot syntax in activations.jl docs for UnicodePlots 3.5+ (…",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T19:30:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3f0c77779780f7ab099935ae2fc165a8ff29e242",
          "body": "Mark the documented but non-exported functions (gather, gather!, scatter,\nscatter!, fold, unfold, glu, within_gradient) with the `public` keyword.\nParsed lazily via Meta.parse since `public` is only valid syntax on Julia 1.11+.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Mark non-exported public API with `public` keyword (fixes #624) (#681)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T19:30:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1f2619de7519f7166ae50ecb963e0f733dc84c69",
          "body": "`gather` had a multi-index method `gather(src, IJK...)` but the\nmutating `gather!` was missing the equivalent, causing a MethodError\nfor `gather!(dst, src, I, J, ...)`.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add multi-index gather! method (fixes #626) (#680)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T19:29:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36292dbf829db57b82bd927a3e8297399a7015f3",
          "body": "The previous definition `log1p(exp(-abs(x))) + relu(x)` has kinks from\n`abs`/`relu` at x=0, so AD (e.g. ForwardDiff for Hessians) computed a\nwrong gradient there (-0.5 instead of 0.5), breaking convexity of\nInput-Convex NNs at the origin.\n\nSwitch to the logaddexp formulation, branching on the sign of x so each\nbranch is smooth and analytic. Values and numerical stability are\nunchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix softplus to be smooth at the origin (#671) (#679)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T19:16:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f6f0fca4cd4d7b752325b472714fa88f658878ff",
          "body": null,
          "is_bot": false,
          "headline": "Bump version from 0.9.34 to 0.9.35",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T18:00:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0a5a09998c1840f06e0a41d8f5f4df366cab43d",
          "body": "- Replace removed CUDA.adapt with Adapt.adapt in ctc.jl\n- Move all using/import statements to the module file\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix CUDA.adapt and centralize imports in NNlibCUDAExt (#678)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-06-07T18:00:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5b972a6a7920239914027d6b4d300e1d1bcc806a",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 5 to 6 (#674)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-07T08:14:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "670dba1a8d2e51d21c2c41011469e9d3382f9480",
          "body": "Bumps [julia-actions/cache](https://github.com/julia-actions/cache) from 2 to 3.\n- [Release notes](https://github.com/julia-actions/cache/releases)\n- [Commits](https://github.com/julia-actions/cache/compare/v2...v3)\n\n---\nupdated-dependencies:\n- dependency-name: julia-actions/cache\n  dependency-versi\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/cache from 2 to 3 (#673)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-07T08:14:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bdbd71989f81d0c784b1a051b5f2cc265feff94f",
          "body": "Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 2 to 3.\n- [Release notes](https://github.com/julia-actions/setup-julia/releases)\n- [Commits](https://github.com/julia-actions/setup-julia/compare/v2...v3)\n\n---\nupdated-dependencies:\n- dependency-name: julia-actions/\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/setup-julia from 2 to 3 (#677)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-07T08:14:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3c38a49d9cf71a7b367775319c14b20ae7dd4be",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version from 0.9.33 to 0.9.34",
          "author_name": "Avik Pal",
          "author_login": "avik-pal",
          "committed_at": "2026-04-11T17:20:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e6980bafd4bed653cd8c3fd637fedcb48de3794",
          "body": "… compat) (#675)\n\nCo-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>",
          "is_bot": true,
          "headline": "CompatHelper: bump compat for CUDA in [weakdeps] to 6, (keep existing…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-04-11T17:20:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5f2bc552207552f41465573bfdccf556796d885",
          "body": "…g compat) (#676)\n\nCo-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>",
          "is_bot": true,
          "headline": "CompatHelper: bump compat for cuDNN in [weakdeps] to 6, (keep existin…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-04-11T17:19:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c599d869216822060cd19d4f774006dcb60d2b6",
          "body": null,
          "is_bot": false,
          "headline": "Bump version from 0.9.32 to 0.9.33",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-01-13T10:54:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfb9a4b8d4f085200e9d6b9a85fe10f190090f88",
          "body": "* fix: Zero case in gather\n\n* test: Test zero-sized array\n\n* fix: scatter! skip empty\n\n---------\n\nCo-authored-by: Carlo Lucibello <carlo.lucibello@gmail.com>",
          "is_bot": false,
          "headline": "fix: `gather` and `scatter` on empty arrays (#668)",
          "author_name": "Leni Aniva",
          "author_login": "lenianiva",
          "committed_at": "2026-01-13T10:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f696793a9db9339a6c74f8407109cdd8b313a59f",
          "body": null,
          "is_bot": false,
          "headline": "revert 648 (#670)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2026-01-13T05:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c15dd3b5be2bdc72e6788961c48d3fea40e92092",
          "body": "* Expanded dispatch of scatter! to include AbstractCuSparseArray\n\n* Fix incorrect import\n\n* restore formatting\n\n* Typos\n\n* Adding tests for scatter on CUSPARSE arrays",
          "is_bot": false,
          "headline": "Extending scatter! to work with CUDA sparse arrays (#648)",
          "author_name": "Alonso Cisneros",
          "author_login": "alonsoC1s",
          "committed_at": "2025-12-21T09:03:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f96a07a062f3126b8910c23cdcb7a2487764184",
          "body": null,
          "is_bot": false,
          "headline": "Add Metal queue specification for Buildkite agents (#667)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-12-21T09:00:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b50c226b8a9294bb49abe5b43efb937898ac2ce6",
          "body": "* metal ext\n\n* tests\n\n* add test\n\n* don't test on nightly",
          "is_bot": false,
          "headline": "Metal Extension with fix for tanh_fast (#666)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-12-07T12:56:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f880a87c1e2714b575de8ac5c4303d51be44e90e",
          "body": "* Initial plan\n\n* Implement generalized batched_vec for N-D batches\n\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\n\n* Update src/batched/batchedmul.jl\n\n* Update test/batchedmul.jl\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\nCo-authored-by: Carlo Lucibello <carlo.lucibello@gmail.com>",
          "is_bot": false,
          "headline": "Generalize batched_vec to support N-D batches (#652)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2025-12-06T09:46:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b265a0a360c4ed3083aa35fd8e8e9650ab5eb4e2",
          "body": "* pipeline\n\n* fix\n\n* fixlabel\n\n* fix 1.10\n\n* fix cdims\n\n* fix enzyme\n\n* fix",
          "is_bot": false,
          "headline": "fix CI (#665)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-12-06T09:44:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b35749e4a040235c6b47789601034d5a2159de8e",
          "body": "* Initial plan\n\n* Implement gelu_sigmoid and update gelu_tanh to use tanh\n\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\n\n* Add gelu_sigmoid to documentation\n\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Refactor `gelu_tanh` to use `tanh` for compiler pattern matching (#653)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2025-12-06T09:12:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ef26dd6d49dc826c9da2b7051521168f6600407",
          "body": null,
          "is_bot": false,
          "headline": "update min julia version (#661)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-12-02T18:00:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9841d3827f09989ad39988618ba67e2dedd756be",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 5 to 6 (#663)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-02T16:41:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f285bfe37f63c768ea071460dc77b0ba49f0476b",
          "body": "Bumps [tibdex/github-app-token](https://github.com/tibdex/github-app-token) from 1 to 2.\n- [Release notes](https://github.com/tibdex/github-app-token/releases)\n- [Commits](https://github.com/tibdex/github-app-token/compare/v1...v2)\n\n---\nupdated-dependencies:\n- dependency-name: tibdex/github-app-toke\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump tibdex/github-app-token from 1 to 2 (#664)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-02T16:41:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3718b12f8bd63c019df43a3aa7c38fe6d2220cd",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 5.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v3...v5)\n\n---\nupdated-dependenc\n[…]\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Carlo Lucibello <carlo.lucibello@gmail.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 3 to 5 (#658)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T11:03:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fe666080dedf21e307593aeeb2dec9255c26b81",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 5.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 3 to 5 (#657)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T11:02:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f589c42b5ca34adea28d42e416900be37f3e454",
          "body": "Bumps [julia-actions/cache](https://github.com/julia-actions/cache) from 1 to 2.\n- [Release notes](https://github.com/julia-actions/cache/releases)\n- [Changelog](https://github.com/julia-actions/cache/blob/main/devdocs/making_a_new_release.md)\n- [Commits](https://github.com/julia-actions/cache/compa\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/cache from 1 to 2 (#656)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T11:02:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "469ea41a764f4dc1c472072a865bfdbadbc5fe48",
          "body": "Bumps [thollander/actions-comment-pull-request](https://github.com/thollander/actions-comment-pull-request) from 1.0.1 to 3.0.1.\n- [Release notes](https://github.com/thollander/actions-comment-pull-request/releases)\n- [Commits](https://github.com/thollander/actions-comment-pull-request/compare/71efe\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump thollander/actions-comment-pull-request from 1.0.1 to 3.0.1 (#659)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T11:02:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8136ab7ee3137027e776edc2ccf749bb8a0229fb",
          "body": "Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 1 to 2.\n- [Release notes](https://github.com/julia-actions/setup-julia/releases)\n- [Changelog](https://github.com/julia-actions/setup-julia/blob/master/devdocs/making_a_new_release.md)\n- [Commits](https://github.com\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/setup-julia from 1 to 2 (#660)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T11:01:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2d5bed888cefe7e380a4c378c7dd953428d96fa",
          "body": null,
          "is_bot": false,
          "headline": "fix dependabot",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-11-19T10:47:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1272ef738fc1205c103d8e9636b98035f2ebcca",
          "body": null,
          "is_bot": false,
          "headline": "add dependabot",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-11-19T10:44:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7677e7e80912bbc90725007089b1ed5d84a9f6f9",
          "body": "* Initial plan\n\n* Add GitHub Copilot instructions for NNlib.jl\n\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add GitHub Copilot instructions for NNlib.jl (#651)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2025-11-19T09:04:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ae4629d116af4191755ce9f68da5fd9e212f273",
          "body": "* Initial plan\n\n* Fix cudnnConvolutionDescriptor deprecation warning by using import instead of using\n\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: CarloLucibello <7014210+CarloLucibello@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix cudnnConvolutionDescriptor deprecation warning in Julia 1.12 (#649)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2025-11-19T08:27:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "13d901d130d29662d81bbc6c44c67a4513182002",
          "body": "* Bump AMDGPU compat to 2.0\n\n* Update Project.toml\n\n[skip tests]",
          "is_bot": false,
          "headline": "Bump AMDGPU compat to 2.0 (#643)",
          "author_name": "Anton Smirnov",
          "author_login": "pxl-th",
          "committed_at": "2025-07-23T16:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1468582c4db5f18149cc8fff6fb4633c5debe5c5",
          "body": null,
          "is_bot": false,
          "headline": "version 0.9.30",
          "author_name": "Michael Abbott",
          "author_login": "mcabbott",
          "committed_at": "2025-04-01T00:16:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0018789a229232081ad02ffa3a47e7b25f0663fc",
          "body": null,
          "is_bot": false,
          "headline": "use the correct `nthreads` (#636)",
          "author_name": "Ian Butterworth",
          "author_login": "IanButterworth",
          "committed_at": "2025-03-31T07:58:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2327bd02be9f0340252115bf833cd7b9040040b",
          "body": "…xisting compat) (#637)\n\nCo-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>",
          "is_bot": true,
          "headline": "CompatHelper: bump compat for ForwardDiff in [weakdeps] to 1, (keep e…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2025-03-27T16:11:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85d80d1c4cf87589a52a755dc155b0c816537031",
          "body": "…d (#633)\n\n* don't spawn if only one job\n\n* fix what appears to be a typo\n\n* revertme: temporary test\n\n* fix check\n\n* rm test\n\n* add NNlib.ALLOW_THREADING control\n\n* use ScopedValues\n\n* use `@with` to avoid new scope\n\n* rename do_work functions\n\n* add note\n\n* v0.9.29",
          "is_bot": false,
          "headline": "Don't spawn if: only one iteration or no threads or threading disable…",
          "author_name": "Ian Butterworth",
          "author_login": "IanButterworth",
          "committed_at": "2025-03-18T22:12:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec337e6331cd5fa964eeb1580a26c655b1ce27e2",
          "body": "Add type alias for gelu -> gelu_tanh",
          "is_bot": false,
          "headline": "Merge pull request #632 from FluxML/bc/gelu-type-alias",
          "author_name": "Brian Chen",
          "author_login": "ToucheSir",
          "committed_at": "2025-03-13T19:05:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a9a709c5df6562ac34a409574767d35f1d276b5",
          "body": "This should fix https://github.com/FluxML/NNlib.jl/issues/631.",
          "is_bot": false,
          "headline": "Add type alias for gelu -> gelu_tanh",
          "author_name": "Brian Chen",
          "author_login": "ToucheSir",
          "committed_at": "2025-03-03T17:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf5a07fbd4d058d5359ed8f17729000b03483555",
          "body": "…01-01-26-30-687-03248299932\n\nCompatHelper: add new compat entry for SpecialFunctions in [weakdeps] at version 2, (keep existing compat)",
          "is_bot": false,
          "headline": "Merge pull request #630 from FluxML/compathelper/new_version/2025-03-…",
          "author_name": "Brian Chen",
          "author_login": "ToucheSir",
          "committed_at": "2025-03-01T02:46:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3125822caa1cf31b6cbe434cc793b7ca87e277e6",
          "body": "… at version 2, (keep existing compat)",
          "is_bot": false,
          "headline": "CompatHelper: add new compat entry for SpecialFunctions in [weakdeps]…",
          "author_name": "CompatHelper Julia",
          "author_login": null,
          "committed_at": "2025-03-01T01:26:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2edc2c0592f0e7bdd81814829e3ed5687e12f34c",
          "body": "We mistakenly did not register v0.9.28.",
          "is_bot": false,
          "headline": "revert version bump",
          "author_name": "Brian Chen",
          "author_login": "ToucheSir",
          "committed_at": "2025-02-28T23:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5201fb81a5ceb4410dd8c10412e6147f964ef4a",
          "body": null,
          "is_bot": false,
          "headline": "bump to v0.9.29",
          "author_name": "Brian Chen",
          "author_login": "ToucheSir",
          "committed_at": "2025-02-28T06:21:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7484f955d01e28aa22b4b41145f9b439df2db1d1",
          "body": "* Add SpecialFunctions as dependency\n\n* add full `gelu`, changes old `gelu` -> `gelu_fast`\n\n* Add tests and docs\n\n* Change names: `gelu_fast` -> `gelu`, `gelu` -> `gelu_full`\n\n* Rename gelus and use OpenLibm_jll instead of SpecialFunctions.jl for erf\n\n* Create NNlibSpecialFunctionsExt for gelu_erf\n\n* specific import in SpecialFunctions extension\n\n* add gelu export to list of aliases",
          "is_bot": false,
          "headline": "Adds full gelu without approximation (#629)",
          "author_name": "Sebastian Schmitt",
          "author_login": "se-schmitt",
          "committed_at": "2025-02-28T06:19:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "307d402e2cdad99f25b315fbb6a0d86a5081ef93",
          "body": null,
          "is_bot": false,
          "headline": "Update Project.toml",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2025-01-30T08:07:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "491e6dabd2d8ea0d72abaf7e1fd0279450456ff7",
          "body": null,
          "is_bot": false,
          "headline": "Add Grid Sampling for 3D images. (#627)",
          "author_name": "Chunxu Guo",
          "author_login": "gRox167",
          "committed_at": "2025-01-30T08:06:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b56ff500e48651567b9915bdcf3489fc28b248df",
          "body": null,
          "is_bot": false,
          "headline": "Add unthunk in conv.jl (#620)",
          "author_name": "Michael Abbott",
          "author_login": "mcabbott",
          "committed_at": "2025-01-09T09:49:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5732b97dd0cbd7310bc70fa5aa3c5c6eff6b2e15",
          "body": null,
          "is_bot": false,
          "headline": "Update bias_act.jl (#618)",
          "author_name": "Michael Abbott",
          "author_login": "mcabbott",
          "committed_at": "2025-01-04T21:07:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be9c1c8b932110c39955b4dd41785df8ce2cd5db",
          "body": null,
          "is_bot": false,
          "headline": "Fix `NaN` gradient in spectrogram (#617)",
          "author_name": "Anton Smirnov",
          "author_login": "pxl-th",
          "committed_at": "2024-12-22T13:04:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81e6cd1843dbd2baf2b7b2efd00e942f4f040a2d",
          "body": null,
          "is_bot": false,
          "headline": "Update Project.toml",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2024-11-26T06:50:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b51bc280b58c5ba7d9c0f2ff7acd56497ef167d",
          "body": null,
          "is_bot": false,
          "headline": "Update Project.toml (#615)",
          "author_name": "Christian Guinard",
          "author_login": "christiangnrd",
          "committed_at": "2024-11-26T05:27:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25735a4f79c0897369106fa7f40a03dc2ab23c2e",
          "body": null,
          "is_bot": false,
          "headline": "Bump to 0.9.25",
          "author_name": "Anton Smirnov",
          "author_login": "pxl-th",
          "committed_at": "2024-11-25T20:08:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ae295b9c8934ce90044be29a8a56bac995373f3",
          "body": "- Use `1.10` in Buildkite CI (and `nightly` for CUDA).\r\n- Use `lts`, `1` and `pre` in GitHub CI.\r\n- Add compat GPUArraysCore for `0.2`.\r\n- Bump ChainRulesCore to `0.25`.",
          "is_bot": false,
          "headline": "Bump deps (#613)",
          "author_name": "Anton Smirnov",
          "author_login": "pxl-th",
          "committed_at": "2024-11-19T22:12:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02138682a4fc5ca019759218be50e59907d4527c",
          "body": null,
          "is_bot": false,
          "headline": "fix test (#611)",
          "author_name": "Carlo Lucibello",
          "author_login": "CarloLucibello",
          "committed_at": "2024-10-26T13:55:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba29c9044402d40d349379313599ca2621c6d6b2",
          "body": "* Fix backtick\r\n\r\n* Update language highlight tags for fenced code samples\r\n\r\n* Update whitespace\r\n\r\n* Use TeX primitives\r\n\r\n* Update reference links\r\n\r\n* Remove duplicate backticks\r\n\r\n* Fix admonition block\r\n\r\n* Add backticks",
          "is_bot": false,
          "headline": "Update method docstrings (#607)",
          "author_name": "abhro",
          "author_login": "abhro",
          "committed_at": "2024-09-30T18:00:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44a6b048cca26af680f0eb173f0c2dd92786b219",
          "body": "* Bump patch version to release new Enzyme support\n\n* chore: force latest Enzyme install [DON'T MERGE]\n\n* revert: \"chore: force latest Enzyme install [DON'T MERGE]\"\n\nThis reverts commit 16f80751cd7001e2b4a90a6a37240e69c5b8cd9b.\n\n---------\n\nCo-authored-by: Avik Pal <avikpal@mit.edu>",
          "is_bot": false,
          "headline": "Bump patch version to release new Enzyme support (#606)",
          "author_name": "William Moses",
          "author_login": "wsmoses",
          "committed_at": "2024-09-18T23:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11ee324be41d832426b3fa9ae3b8050c7fff4396",
          "body": null,
          "is_bot": false,
          "headline": "Prepare for pending Enzyme breaking change (#605)",
          "author_name": "William Moses",
          "author_login": "wsmoses",
          "committed_at": "2024-09-16T07:21:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c8e717e33b5d1f2b305a35e6e7bf0c94a434dfc",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version for release",
          "author_name": "Avik Pal",
          "author_login": "avik-pal",
          "committed_at": "2024-09-03T18:16:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f76a38d3bfae5843b10f57b5af117b7bd8c652f8",
          "body": "remove `NNPACK` and move `ForwardDiff` to an extension",
          "is_bot": false,
          "headline": "Merge pull request #603 from LuxDL/ap/load_times",
          "author_name": "Avik Pal",
          "author_login": "avik-pal",
          "committed_at": "2024-08-29T15:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 74,
      "latest_release_at": "2026-07-07T08:46:33Z",
      "latest_release_tag": "v0.9.38",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 13,
      "days_since_latest_release": 14,
      "mean_days_between_releases": 51.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 134,
      "stars": 255,
      "watchers": 14,
      "fork_history": {
        "days": [
          {
            "date": "2017-08-22",
            "count": 1
          },
          {
            "date": "2017-08-29",
            "count": 1
          },
          {
            "date": "2017-10-07",
            "count": 1
          },
          {
            "date": "2017-10-10",
            "count": 1
          },
          {
            "date": "2017-10-11",
            "count": 1
          },
          {
            "date": "2017-10-13",
            "count": 1
          },
          {
            "date": "2017-11-04",
            "count": 1
          },
          {
            "date": "2017-11-06",
            "count": 1
          },
          {
            "date": "2017-11-17",
            "count": 1
          },
          {
            "date": "2018-01-12",
            "count": 1
          },
          {
            "date": "2018-01-31",
            "count": 1
          },
          {
            "date": "2018-03-17",
            "count": 1
          },
          {
            "date": "2018-03-23",
            "count": 1
          },
          {
            "date": "2018-04-19",
            "count": 1
          },
          {
            "date": "2018-05-21",
            "count": 1
          },
          {
            "date": "2018-05-29",
            "count": 1
          },
          {
            "date": "2018-07-20",
            "count": 1
          },
          {
            "date": "2018-07-30",
            "count": 1
          },
          {
            "date": "2018-08-08",
            "count": 1
          },
          {
            "date": "2018-08-20",
            "count": 1
          },
          {
            "date": "2018-09-05",
            "count": 1
          },
          {
            "date": "2018-09-06",
            "count": 1
          },
          {
            "date": "2018-09-15",
            "count": 1
          },
          {
            "date": "2018-11-12",
            "count": 1
          },
          {
            "date": "2018-12-05",
            "count": 1
          },
          {
            "date": "2019-01-01",
            "count": 1
          },
          {
            "date": "2019-01-06",
            "count": 1
          },
          {
            "date": "2019-01-28",
            "count": 1
          },
          {
            "date": "2019-02-11",
            "count": 1
          },
          {
            "date": "2019-03-01",
            "count": 1
          },
          {
            "date": "2019-03-03",
            "count": 1
          },
          {
            "date": "2019-03-22",
            "count": 1
          },
          {
            "date": "2019-04-04",
            "count": 2
          },
          {
            "date": "2019-04-09",
            "count": 1
          },
          {
            "date": "2019-04-24",
            "count": 1
          },
          {
            "date": "2019-05-24",
            "count": 1
          },
          {
            "date": "2019-06-22",
            "count": 1
          },
          {
            "date": "2019-08-29",
            "count": 1
          },
          {
            "date": "2019-09-25",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 1
          },
          {
            "date": "2019-10-10",
            "count": 1
          },
          {
            "date": "2019-11-30",
            "count": 1
          },
          {
            "date": "2019-12-17",
            "count": 1
          },
          {
            "date": "2019-12-20",
            "count": 1
          },
          {
            "date": "2019-12-30",
            "count": 1
          },
          {
            "date": "2020-01-14",
            "count": 1
          },
          {
            "date": "2020-01-27",
            "count": 1
          },
          {
            "date": "2020-02-08",
            "count": 1
          },
          {
            "date": "2020-02-24",
            "count": 1
          },
          {
            "date": "2020-04-03",
            "count": 1
          },
          {
            "date": "2020-04-14",
            "count": 1
          },
          {
            "date": "2020-04-15",
            "count": 1
          },
          {
            "date": "2020-04-20",
            "count": 1
          },
          {
            "date": "2020-04-27",
            "count": 1
          },
          {
            "date": "2020-05-03",
            "count": 1
          },
          {
            "date": "2020-05-07",
            "count": 1
          },
          {
            "date": "2020-05-21",
            "count": 1
          },
          {
            "date": "2020-06-04",
            "count": 1
          },
          {
            "date": "2020-06-05",
            "count": 1
          },
          {
            "date": "2020-06-15",
            "count": 1
          },
          {
            "date": "2020-07-11",
            "count": 1
          },
          {
            "date": "2020-07-25",
            "count": 1
          },
          {
            "date": "2020-09-10",
            "count": 1
          },
          {
            "date": "2020-09-16",
            "count": 1
          },
          {
            "date": "2020-09-21",
            "count": 1
          },
          {
            "date": "2020-10-10",
            "count": 1
          },
          {
            "date": "2020-10-20",
            "count": 1
          },
          {
            "date": "2020-11-01",
            "count": 1
          },
          {
            "date": "2020-11-08",
            "count": 1
          },
          {
            "date": "2020-12-18",
            "count": 1
          },
          {
            "date": "2020-12-25",
            "count": 1
          },
          {
            "date": "2021-01-05",
            "count": 1
          },
          {
            "date": "2021-01-28",
            "count": 1
          },
          {
            "date": "2021-03-14",
            "count": 1
          },
          {
            "date": "2021-03-17",
            "count": 1
          },
          {
            "date": "2021-04-11",
            "count": 1
          },
          {
            "date": "2021-05-04",
            "count": 1
          },
          {
            "date": "2021-08-16",
            "count": 1
          },
          {
            "date": "2021-08-25",
            "count": 1
          },
          {
            "date": "2021-10-06",
            "count": 1
          },
          {
            "date": "2021-10-31",
            "count": 1
          },
          {
            "date": "2021-12-22",
            "count": 1
          },
          {
            "date": "2022-01-12",
            "count": 1
          },
          {
            "date": "2022-01-23",
            "count": 1
          },
          {
            "date": "2022-02-11",
            "count": 1
          },
          {
            "date": "2022-02-15",
            "count": 1
          },
          {
            "date": "2022-02-28",
            "count": 1
          },
          {
            "date": "2022-05-31",
            "count": 1
          },
          {
            "date": "2022-06-01",
            "count": 1
          },
          {
            "date": "2022-06-03",
            "count": 1
          },
          {
            "date": "2022-06-13",
            "count": 1
          },
          {
            "date": "2022-06-29",
            "count": 1
          },
          {
            "date": "2022-07-20",
            "count": 1
          },
          {
            "date": "2022-09-20",
            "count": 1
          },
          {
            "date": "2022-11-22",
            "count": 1
          },
          {
            "date": "2023-01-24",
            "count": 1
          },
          {
            "date": "2023-02-01",
            "count": 1
          },
          {
            "date": "2023-03-09",
            "count": 1
          },
          {
            "date": "2023-03-31",
            "count": 1
          },
          {
            "date": "2023-06-25",
            "count": 1
          },
          {
            "date": "2023-08-09",
            "count": 1
          },
          {
            "date": "2023-09-16",
            "count": 1
          },
          {
            "date": "2023-09-24",
            "count": 1
          },
          {
            "date": "2023-09-28",
            "count": 1
          },
          {
            "date": "2023-11-08",
            "count": 1
          },
          {
            "date": "2023-11-16",
            "count": 1
          },
          {
            "date": "2023-12-17",
            "count": 1
          },
          {
            "date": "2023-12-23",
            "count": 1
          },
          {
            "date": "2024-01-06",
            "count": 1
          },
          {
            "date": "2024-01-14",
            "count": 1
          },
          {
            "date": "2024-02-15",
            "count": 1
          },
          {
            "date": "2024-02-22",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-04-18",
            "count": 1
          },
          {
            "date": "2024-04-27",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 1
          },
          {
            "date": "2024-11-13",
            "count": 1
          },
          {
            "date": "2025-01-07",
            "count": 1
          },
          {
            "date": "2025-01-09",
            "count": 1
          },
          {
            "date": "2025-02-06",
            "count": 1
          },
          {
            "date": "2025-03-30",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-09-12",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-11-14",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-02-10",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-07-11",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 133,
        "total_forks": 134
      },
      "star_history": {
        "days": [
          {
            "date": "2017-09-03",
            "count": 1
          },
          {
            "date": "2017-10-10",
            "count": 1
          },
          {
            "date": "2017-10-11",
            "count": 1
          },
          {
            "date": "2017-11-09",
            "count": 2
          },
          {
            "date": "2017-12-12",
            "count": 1
          },
          {
            "date": "2018-01-24",
            "count": 1
          },
          {
            "date": "2018-02-10",
            "count": 1
          },
          {
            "date": "2018-04-10",
            "count": 1
          },
          {
            "date": "2018-04-14",
            "count": 1
          },
          {
            "date": "2018-04-26",
            "count": 1
          },
          {
            "date": "2018-07-09",
            "count": 1
          },
          {
            "date": "2018-08-18",
            "count": 1
          },
          {
            "date": "2018-09-05",
            "count": 1
          },
          {
            "date": "2018-09-13",
            "count": 1
          },
          {
            "date": "2018-09-25",
            "count": 1
          },
          {
            "date": "2018-09-28",
            "count": 1
          },
          {
            "date": "2018-10-23",
            "count": 1
          },
          {
            "date": "2019-01-21",
            "count": 1
          },
          {
            "date": "2019-01-24",
            "count": 1
          },
          {
            "date": "2019-01-30",
            "count": 1
          },
          {
            "date": "2019-02-10",
            "count": 1
          },
          {
            "date": "2019-02-13",
            "count": 1
          },
          {
            "date": "2019-02-19",
            "count": 1
          },
          {
            "date": "2019-03-01",
            "count": 1
          },
          {
            "date": "2019-03-05",
            "count": 1
          },
          {
            "date": "2019-03-07",
            "count": 2
          },
          {
            "date": "2019-03-10",
            "count": 1
          },
          {
            "date": "2019-03-26",
            "count": 1
          },
          {
            "date": "2019-04-05",
            "count": 1
          },
          {
            "date": "2019-04-07",
            "count": 1
          },
          {
            "date": "2019-04-24",
            "count": 1
          },
          {
            "date": "2019-05-04",
            "count": 1
          },
          {
            "date": "2019-05-06",
            "count": 1
          },
          {
            "date": "2019-05-08",
            "count": 1
          },
          {
            "date": "2019-06-12",
            "count": 1
          },
          {
            "date": "2019-07-27",
            "count": 1
          },
          {
            "date": "2019-08-15",
            "count": 1
          },
          {
            "date": "2019-08-19",
            "count": 1
          },
          {
            "date": "2019-08-20",
            "count": 1
          },
          {
            "date": "2019-10-12",
            "count": 1
          },
          {
            "date": "2019-10-25",
            "count": 1
          },
          {
            "date": "2019-11-09",
            "count": 1
          },
          {
            "date": "2019-11-26",
            "count": 1
          },
          {
            "date": "2019-11-30",
            "count": 1
          },
          {
            "date": "2019-12-21",
            "count": 1
          },
          {
            "date": "2019-12-25",
            "count": 1
          },
          {
            "date": "2020-01-01",
            "count": 1
          },
          {
            "date": "2020-01-03",
            "count": 1
          },
          {
            "date": "2020-01-15",
            "count": 1
          },
          {
            "date": "2020-01-27",
            "count": 1
          },
          {
            "date": "2020-02-04",
            "count": 1
          },
          {
            "date": "2020-02-27",
            "count": 1
          },
          {
            "date": "2020-03-06",
            "count": 1
          },
          {
            "date": "2020-03-10",
            "count": 1
          },
          {
            "date": "2020-04-05",
            "count": 1
          },
          {
            "date": "2020-04-16",
            "count": 1
          },
          {
            "date": "2020-04-27",
            "count": 2
          },
          {
            "date": "2020-05-12",
            "count": 1
          },
          {
            "date": "2020-05-21",
            "count": 1
          },
          {
            "date": "2020-05-24",
            "count": 1
          },
          {
            "date": "2020-05-30",
            "count": 1
          },
          {
            "date": "2020-05-31",
            "count": 2
          },
          {
            "date": "2020-06-02",
            "count": 1
          },
          {
            "date": "2020-06-09",
            "count": 1
          },
          {
            "date": "2020-06-17",
            "count": 1
          },
          {
            "date": "2020-06-20",
            "count": 1
          },
          {
            "date": "2020-07-08",
            "count": 1
          },
          {
            "date": "2020-07-13",
            "count": 1
          },
          {
            "date": "2020-07-25",
            "count": 1
          },
          {
            "date": "2020-08-22",
            "count": 1
          },
          {
            "date": "2020-08-27",
            "count": 1
          },
          {
            "date": "2020-09-29",
            "count": 1
          },
          {
            "date": "2020-10-16",
            "count": 1
          },
          {
            "date": "2020-10-29",
            "count": 1
          },
          {
            "date": "2020-11-23",
            "count": 1
          },
          {
            "date": "2020-12-19",
            "count": 2
          },
          {
            "date": "2021-01-25",
            "count": 1
          },
          {
            "date": "2021-01-26",
            "count": 1
          },
          {
            "date": "2021-01-27",
            "count": 1
          },
          {
            "date": "2021-01-28",
            "count": 1
          },
          {
            "date": "2021-02-09",
            "count": 2
          },
          {
            "date": "2021-02-20",
            "count": 1
          },
          {
            "date": "2021-02-22",
            "count": 1
          },
          {
            "date": "2021-03-15",
            "count": 1
          },
          {
            "date": "2021-03-25",
            "count": 1
          },
          {
            "date": "2021-03-28",
            "count": 1
          },
          {
            "date": "2021-04-01",
            "count": 1
          },
          {
            "date": "2021-04-17",
            "count": 1
          },
          {
            "date": "2021-05-01",
            "count": 1
          },
          {
            "date": "2021-05-04",
            "count": 2
          },
          {
            "date": "2021-05-28",
            "count": 1
          },
          {
            "date": "2021-05-30",
            "count": 1
          },
          {
            "date": "2021-06-01",
            "count": 1
          },
          {
            "date": "2021-07-07",
            "count": 1
          },
          {
            "date": "2021-07-26",
            "count": 1
          },
          {
            "date": "2021-08-02",
            "count": 1
          },
          {
            "date": "2021-08-04",
            "count": 1
          },
          {
            "date": "2021-08-05",
            "count": 2
          },
          {
            "date": "2021-08-18",
            "count": 1
          },
          {
            "date": "2021-08-22",
            "count": 1
          },
          {
            "date": "2021-08-25",
            "count": 1
          },
          {
            "date": "2021-09-02",
            "count": 1
          },
          {
            "date": "2021-09-17",
            "count": 2
          },
          {
            "date": "2021-09-19",
            "count": 1
          },
          {
            "date": "2021-11-02",
            "count": 1
          },
          {
            "date": "2021-11-19",
            "count": 1
          },
          {
            "date": "2021-11-20",
            "count": 1
          },
          {
            "date": "2021-12-04",
            "count": 1
          },
          {
            "date": "2021-12-07",
            "count": 1
          },
          {
            "date": "2021-12-17",
            "count": 1
          },
          {
            "date": "2022-01-06",
            "count": 1
          },
          {
            "date": "2022-01-12",
            "count": 1
          },
          {
            "date": "2022-01-24",
            "count": 2
          },
          {
            "date": "2022-01-27",
            "count": 1
          },
          {
            "date": "2022-01-30",
            "count": 1
          },
          {
            "date": "2022-02-15",
            "count": 3
          },
          {
            "date": "2022-02-28",
            "count": 2
          },
          {
            "date": "2022-03-20",
            "count": 1
          },
          {
            "date": "2022-03-22",
            "count": 1
          },
          {
            "date": "2022-04-26",
            "count": 1
          },
          {
            "date": "2022-05-27",
            "count": 1
          },
          {
            "date": "2022-06-13",
            "count": 1
          },
          {
            "date": "2022-06-16",
            "count": 2
          },
          {
            "date": "2022-06-20",
            "count": 1
          },
          {
            "date": "2022-06-21",
            "count": 2
          },
          {
            "date": "2022-06-26",
            "count": 1
          },
          {
            "date": "2022-07-17",
            "count": 1
          },
          {
            "date": "2022-07-25",
            "count": 1
          },
          {
            "date": "2022-07-28",
            "count": 1
          },
          {
            "date": "2022-08-07",
            "count": 1
          },
          {
            "date": "2022-08-19",
            "count": 1
          },
          {
            "date": "2022-08-27",
            "count": 1
          },
          {
            "date": "2022-10-08",
            "count": 1
          },
          {
            "date": "2022-10-14",
            "count": 1
          },
          {
            "date": "2022-10-24",
            "count": 1
          },
          {
            "date": "2022-10-28",
            "count": 1
          },
          {
            "date": "2022-11-07",
            "count": 1
          },
          {
            "date": "2022-12-02",
            "count": 1
          },
          {
            "date": "2022-12-19",
            "count": 1
          },
          {
            "date": "2022-12-31",
            "count": 1
          },
          {
            "date": "2023-01-09",
            "count": 1
          },
          {
            "date": "2023-01-22",
            "count": 1
          },
          {
            "date": "2023-01-30",
            "count": 1
          },
          {
            "date": "2023-02-06",
            "count": 1
          },
          {
            "date": "2023-02-19",
            "count": 1
          },
          {
            "date": "2023-03-15",
            "count": 1
          },
          {
            "date": "2023-05-21",
            "count": 1
          },
          {
            "date": "2023-06-14",
            "count": 1
          },
          {
            "date": "2023-06-15",
            "count": 1
          },
          {
            "date": "2023-06-25",
            "count": 1
          },
          {
            "date": "2023-06-30",
            "count": 1
          },
          {
            "date": "2023-07-06",
            "count": 1
          },
          {
            "date": "2023-07-10",
            "count": 1
          },
          {
            "date": "2023-07-11",
            "count": 1
          },
          {
            "date": "2023-07-25",
            "count": 1
          },
          {
            "date": "2023-09-28",
            "count": 1
          },
          {
            "date": "2023-09-30",
            "count": 1
          },
          {
            "date": "2023-10-04",
            "count": 2
          },
          {
            "date": "2023-12-05",
            "count": 1
          },
          {
            "date": "2023-12-06",
            "count": 1
          },
          {
            "date": "2023-12-14",
            "count": 1
          },
          {
            "date": "2023-12-18",
            "count": 1
          },
          {
            "date": "2024-01-03",
            "count": 1
          },
          {
            "date": "2024-01-09",
            "count": 1
          },
          {
            "date": "2024-01-11",
            "count": 1
          },
          {
            "date": "2024-01-16",
            "count": 1
          },
          {
            "date": "2024-03-11",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-04-02",
            "count": 1
          },
          {
            "date": "2024-04-08",
            "count": 1
          },
          {
            "date": "2024-04-09",
            "count": 1
          },
          {
            "date": "2024-04-15",
            "count": 1
          },
          {
            "date": "2024-04-26",
            "count": 1
          },
          {
            "date": "2024-05-21",
            "count": 1
          },
          {
            "date": "2024-05-29",
            "count": 1
          },
          {
            "date": "2024-06-08",
            "count": 1
          },
          {
            "date": "2024-06-17",
            "count": 1
          },
          {
            "date": "2024-07-17",
            "count": 1
          },
          {
            "date": "2024-07-31",
            "count": 1
          },
          {
            "date": "2024-08-12",
            "count": 1
          },
          {
            "date": "2024-09-20",
            "count": 1
          },
          {
            "date": "2024-09-21",
            "count": 1
          },
          {
            "date": "2024-10-03",
            "count": 1
          },
          {
            "date": "2024-10-15",
            "count": 1
          },
          {
            "date": "2024-11-08",
            "count": 1
          },
          {
            "date": "2024-12-02",
            "count": 2
          },
          {
            "date": "2024-12-09",
            "count": 1
          },
          {
            "date": "2024-12-21",
            "count": 1
          },
          {
            "date": "2025-01-15",
            "count": 1
          },
          {
            "date": "2025-01-20",
            "count": 1
          },
          {
            "date": "2025-01-31",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 1
          },
          {
            "date": "2025-02-18",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-03-17",
            "count": 1
          },
          {
            "date": "2025-03-30",
            "count": 1
          },
          {
            "date": "2025-04-08",
            "count": 2
          },
          {
            "date": "2025-04-17",
            "count": 1
          },
          {
            "date": "2025-07-07",
            "count": 1
          },
          {
            "date": "2025-07-11",
            "count": 1
          },
          {
            "date": "2025-08-01",
            "count": 1
          },
          {
            "date": "2025-08-07",
            "count": 1
          },
          {
            "date": "2025-08-10",
            "count": 1
          },
          {
            "date": "2025-08-11",
            "count": 1
          },
          {
            "date": "2025-08-16",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 1
          },
          {
            "date": "2025-10-05",
            "count": 1
          },
          {
            "date": "2025-10-08",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-29",
            "count": 1
          },
          {
            "date": "2025-11-15",
            "count": 1
          },
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-12-09",
            "count": 2
          },
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 2
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2025-12-30",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-02",
            "count": 2
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 255,
        "total_stars": 255
      },
      "open_issues_and_prs": 69
    },
    "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": 1275,
      "source_files_sampled": 1,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 3316
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 2,
        "direct_affected_count": 0
      },
      "ecosystems": [],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "numpy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "torch",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 2,
        "direct_count": 0,
        "indirect_count": 2
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 33,
        "merged_prs": 384,
        "open_issues": 36,
        "closed_ratio": 0.851,
        "closed_issues": 206,
        "closed_unmerged_prs": 83
      },
      "bus_factor": 4,
      "bot_contributors": 4,
      "top_contributors": [
        {
          "type": "User",
          "login": "CarloLucibello",
          "commits": 353,
          "avatar_url": "https://avatars.githubusercontent.com/u/7014210?v=4"
        },
        {
          "type": "User",
          "login": "MikeInnes",
          "commits": 136,
          "avatar_url": "https://avatars.githubusercontent.com/u/2234614?v=4"
        },
        {
          "type": "User",
          "login": "DhairyaLGandhi",
          "commits": 102,
          "avatar_url": "https://avatars.githubusercontent.com/u/39688917?v=4"
        },
        {
          "type": "User",
          "login": "yuehhua",
          "commits": 96,
          "avatar_url": "https://avatars.githubusercontent.com/u/7441758?v=4"
        },
        {
          "type": "User",
          "login": "mcabbott",
          "commits": 71,
          "avatar_url": "https://avatars.githubusercontent.com/u/32575566?v=4"
        },
        {
          "type": "User",
          "login": "ToucheSir",
          "commits": 60,
          "avatar_url": "https://avatars.githubusercontent.com/u/4062143?v=4"
        },
        {
          "type": "User",
          "login": "staticfloat",
          "commits": 55,
          "avatar_url": "https://avatars.githubusercontent.com/u/130920?v=4"
        },
        {
          "type": "User",
          "login": "pxl-th",
          "commits": 46,
          "avatar_url": "https://avatars.githubusercontent.com/u/17990405?v=4"
        },
        {
          "type": "User",
          "login": "tejank10",
          "commits": 37,
          "avatar_url": "https://avatars.githubusercontent.com/u/19868340?v=4"
        },
        {
          "type": "User",
          "login": "maxfreu",
          "commits": 26,
          "avatar_url": "https://avatars.githubusercontent.com/u/67329240?v=4"
        }
      ],
      "contributors_sampled": 94,
      "top_contributor_share": 0.269
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "BenchmarkTrigger.yml",
        "Downstream.yml",
        "TagBot.yml",
        "ci.yml",
        "clean_preview.yml",
        "docs.yml",
        "pr_comment.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 3/28 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 89 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": "30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b537af2fda22f8e65551dff81a256f14204c0bcc",
        "ran_at": "2026-07-22T03:21:50Z",
        "aggregate_score": 5.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T01:18:13Z",
      "oldest_open_prs": [
        {
          "number": 118,
          "created_at": "2019-05-24T12:57:02Z",
          "last_comment_at": "2020-06-12T12:09:06Z",
          "last_comment_author": "devmotion"
        },
        {
          "number": 146,
          "created_at": "2019-11-30T05:53:12Z",
          "last_comment_at": "2021-05-27T16:00:56Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 163,
          "created_at": "2020-01-31T01:35:55Z",
          "last_comment_at": "2020-02-04T03:02:41Z",
          "last_comment_author": "matsueushi"
        },
        {
          "number": 184,
          "created_at": "2020-03-07T05:58:05Z",
          "last_comment_at": "2020-04-06T11:42:43Z",
          "last_comment_author": "AdarshKumar712"
        },
        {
          "number": 304,
          "created_at": "2021-03-22T23:09:53Z",
          "last_comment_at": "2021-04-01T00:46:51Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 336,
          "created_at": "2021-07-17T04:28:15Z",
          "last_comment_at": "2021-08-16T19:00:54Z",
          "last_comment_author": "DhairyaLGandhi"
        },
        {
          "number": 353,
          "created_at": "2021-09-30T08:44:21Z",
          "last_comment_at": "2021-10-11T13:21:56Z",
          "last_comment_author": "mcabbott"
        },
        {
          "number": 363,
          "created_at": "2021-11-16T21:48:58Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 448,
          "created_at": "2022-12-26T13:11:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 452,
          "created_at": "2023-01-03T00:52:58Z",
          "last_comment_at": "2023-02-13T21:11:41Z",
          "last_comment_author": "pxl-th"
        },
        {
          "number": 475,
          "created_at": "2023-02-18T15:51:47Z",
          "last_comment_at": "2023-02-19T01:52:06Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 527,
          "created_at": "2023-08-11T17:33:12Z",
          "last_comment_at": "2023-08-17T10:24:25Z",
          "last_comment_author": "fluxml-benchmark-bot"
        },
        {
          "number": 537,
          "created_at": "2023-09-25T03:45:56Z",
          "last_comment_at": "2023-11-07T11:07:00Z",
          "last_comment_author": "mashu"
        },
        {
          "number": 540,
          "created_at": "2023-09-26T19:23:50Z",
          "last_comment_at": "2023-12-14T16:22:46Z",
          "last_comment_author": "maxfreu"
        },
        {
          "number": 570,
          "created_at": "2024-03-26T20:25:10Z",
          "last_comment_at": "2024-03-26T21:36:25Z",
          "last_comment_author": "gdalle"
        },
        {
          "number": 612,
          "created_at": "2024-11-08T01:13:03Z",
          "last_comment_at": "2025-01-05T01:52:15Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 622,
          "created_at": "2025-01-07T16:47:10Z",
          "last_comment_at": "2025-01-08T19:41:05Z",
          "last_comment_author": "zengmao"
        },
        {
          "number": 639,
          "created_at": "2025-06-06T12:37:09Z",
          "last_comment_at": "2025-06-12T05:50:27Z",
          "last_comment_author": "IBArbitrary"
        },
        {
          "number": 644,
          "created_at": "2025-08-17T17:07:18Z",
          "last_comment_at": "2025-11-19T05:44:12Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 672,
          "created_at": "2026-01-27T14:57:57Z",
          "last_comment_at": "2026-04-16T16:47:19Z",
          "last_comment_author": "alonsoC1s"
        }
      ],
      "last_merged_pr_at": "2026-07-20T09:01:42Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 52,
          "created_at": "2018-06-25T16:40:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 74,
          "created_at": "2018-10-22T19:11:51Z",
          "last_comment_at": "2022-09-14T00:18:34Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 220,
          "created_at": "2020-07-11T11:35:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 234,
          "created_at": "2020-09-06T02:44:04Z",
          "last_comment_at": "2026-06-09T06:53:57Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 267,
          "created_at": "2021-01-15T04:47:47Z",
          "last_comment_at": "2021-07-16T18:46:41Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 354,
          "created_at": "2021-10-01T19:53:45Z",
          "last_comment_at": "2021-10-04T21:02:53Z",
          "last_comment_author": "tylerjthomas9"
        },
        {
          "number": 511,
          "created_at": "2021-12-23T04:42:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 512,
          "created_at": "2022-01-31T21:50:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 391,
          "created_at": "2022-02-20T08:04:12Z",
          "last_comment_at": "2022-02-20T14:20:35Z",
          "last_comment_author": "mcabbott"
        },
        {
          "number": 401,
          "created_at": "2022-03-07T15:02:38Z",
          "last_comment_at": "2023-02-08T05:40:46Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 427,
          "created_at": "2022-07-24T17:06:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 509,
          "created_at": "2022-09-28T11:23:46Z",
          "last_comment_at": "2023-06-24T05:26:41Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 446,
          "created_at": "2022-12-23T12:05:06Z",
          "last_comment_at": "2023-01-02T22:52:37Z",
          "last_comment_author": "mcabbott"
        },
        {
          "number": 508,
          "created_at": "2023-01-06T13:27:48Z",
          "last_comment_at": "2026-06-10T03:48:11Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 466,
          "created_at": "2023-01-26T08:36:57Z",
          "last_comment_at": "2023-01-29T17:24:08Z",
          "last_comment_author": "mcabbott"
        },
        {
          "number": 478,
          "created_at": "2023-02-25T18:14:23Z",
          "last_comment_at": "2024-11-07T23:51:42Z",
          "last_comment_author": "mcabbott"
        },
        {
          "number": 479,
          "created_at": "2023-03-01T13:11:17Z",
          "last_comment_at": "2026-06-09T10:33:21Z",
          "last_comment_author": "CarloLucibello"
        },
        {
          "number": 504,
          "created_at": "2023-04-18T22:40:46Z",
          "last_comment_at": "2023-04-18T22:55:25Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 493,
          "created_at": "2023-06-06T15:39:09Z",
          "last_comment_at": "2023-06-06T15:52:33Z",
          "last_comment_author": "ToucheSir"
        },
        {
          "number": 502,
          "created_at": "2023-06-24T03:20:27Z",
          "last_comment_at": "2023-06-25T01:31:14Z",
          "last_comment_author": "chengchingwen"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/FluxML/NNlib.jl",
    "host": "github.com",
    "name": "NNlib.jl",
    "owner": "FluxML"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 71,
      "inputs": {
        "security": 52,
        "vitality": 80,
        "community": 64,
        "governance": 76,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "commits_last_year": 74,
              "human_commit_share": 0.84,
              "days_since_last_push": 0,
              "active_weeks_last_year": 13
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "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": "74 commits in the last year",
                "points": 16.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 74
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 92,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.9.38",
              "releases_from_tags": false,
              "days_since_latest_release": 14,
              "mean_days_between_releases": 51.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "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 ~51.4 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 51.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": 14,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 14 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 64,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "forks": 134,
              "stars": 255,
              "watchers": 14,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "255 stars",
                "points": 39,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 255
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "134 forks",
                "points": 17.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 134
                    }
                  }
                ],
                "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": 66,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 76,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "bus_factor": 4,
              "contributors_sampled": 94,
              "top_contributor_share": 0.269
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "4 contributor(s) cover half of all commits",
                "points": 43.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 27% of commits",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 27
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "94 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 89 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 384,
              "open_issues": 36,
              "closed_issues": 206,
              "issue_closed_ratio": 0.851,
              "closed_unmerged_prs": 83
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "85% of issues closed",
                "points": 39.8,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 85
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "384/467 decided PRs merged",
                "points": 31.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 384,
                      "decided": 467
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/28 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "followers": 333,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "FluxML",
              "public_repos": 48,
              "account_age_days": 3424
            },
            "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": "333 followers of FluxML",
                "points": 18.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 333,
                      "login": "FluxML"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "48 public repos, account ~9 yr old",
                "points": 24.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 48
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "machine-learning",
                "deep-learning",
                "julia"
              ],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 52,
        "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": 52,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.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": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 3/28 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 89 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": "30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 12
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.821,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 3316
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "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": "69 of 84 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 69,
                      "sampled": 84
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.41,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.13
            },
            "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "41 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 41,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "13 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 13,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Julia",
              "largest_source_bytes": 1275,
              "source_files_sampled": 1,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Julia without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Julia"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/1 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1,
                      "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": [
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T03:22:17.137529Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/FluxML/NNlib.jl.svg",
  "full_name": "FluxML/NNlib.jl",
  "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.26.0 — metodología completa · wiki de métricas.

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