Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 03:22 UTC

FluxML / NNlib.jl

Neural Network primitives with multiple backends

JuliaEigene Lizenz★ 255 Sterne⑂ 134 Forksseit Aug. 2017Auf GitHub ansehen ↗

FluxML/NNlib.jl erreicht einen Gesundheitsindex von 71 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (80/100) ab, am schwächsten bei Security (52/100). Zuletzt heute aktualisiert. 4 Mitwirkende tragen den Großteil der jüngsten Arbeit.

71
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

71
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

FluxMLOrganisation
333 Follower48 öffentliche Reposseit März 2017

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

80Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
9/36Commit-Rhythmus — 13/52 Wochen mit Commits
16.8/18Commit-Volumen — 74 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year74
human_commit_share0,84
days_since_last_push0
active_weeks_last_year13
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 14 Tagen
19.8/27Release-Rhythmus — ein Release etwa alle 51,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv0.9.38
releases_from_tagsnein
days_since_latest_release14
mean_days_between_releases51,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

64Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
39/60Stars — 255 Stars
17.7/25Forks — 134 Forks
6.2/15Watcher — 14 Watcher
Verwendete Eingangsdaten
forks134
stars255
watchers14
growth_stateorganic
growth_factor_pct100
Wie die Bewertung erfolgt
22.5/22.5README
16.9/22.5Lizenz — Lizenzdatei vorhanden, keine anerkannte Lizenz
0/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

76Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
43.2/54Bus-Faktor — 4 Beitragende decken die Hälfte aller Commits ab
16.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 27 % der Commits
13.5/13.5Breite der Beitragenden — 94 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 89 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor4
contributors_sampled94
top_contributor_share0,269
Wie die Bewertung erfolgt
39.8/46.8Issue-Lösungsquote — 85 % der Issues geschlossen
31.5/38.3PR-Annahme — 384/467 entschiedene PRs gemergt
1.5/15OpenSSF Scorecard: Code-Review — Found 3/28 approved changesets -- score normalized to 1
Verwendete Eingangsdaten
merged_prs384
open_issues36
closed_issues206
issue_closed_ratio0,851
closed_unmerged_prs83
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
18.1/25Reichweite des Inhabers — 333 Follower von FluxML
24.3/25Kontohistorie — 48 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers333
owner_typeOrganization
is_verified
owner_loginFluxML
public_repos48
account_age_days3.424

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

75Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 7 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 27 out of 27 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

85Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 3 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsmachine-learning, deep-learning, julia
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

52Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

59Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 69 von 84 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,821
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3.316
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 41 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 13 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,41
toolchain_manifests
dependency_bot_commit_share0,13
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Julia ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/1 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJulia
largest_source_bytes1.275
source_files_sampled1
oversized_source_files0

Eckdaten

255GitHub-Sterne
94Mitwirkende
74Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
4Bus-Faktor
36offene Issues
Paket-Ökosysteme

Warnungen zur Datenerhebung

  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 255 ★ / 134 ⇿
255Sterne
134Forks
100Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

05010015020025030025513342017-082022-022026-07
Major 0Minor 3Patch 97

Jeder Punkt umfasst 9 Tage.

OpenSSF Scorecard 5.2 / 10
5.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Alle Abhängigkeiten 2

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 2 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
PyPInumpyindirekt
PyPItorchindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "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
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistiken.