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

FluxML / NNlib.jl

Neural Network primitives with multiple backends

JuliaCustom license★ 255 stars⑂ 134 forkssince Aug 2017View on GitHub ↗

FluxML/NNlib.jl holds a health index of 71 out of 100, placing it in the Good band. It scores highest on Vitality (80/100) and lowest on Security (52/100). It was last updated today. 4 contributors account for most of its recent work.

71
overall / 100
Good

Software health index

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

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

Score profile

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

Ownership

FluxMLOrganization
333 followers48 public repossince Mar 2017

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

Metrics by category

Vitality

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

80Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
9/36Commit cadence — 13/52 weeks with commits
16.8/18Commit volume — 74 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year74
human_commit_share0.84
days_since_last_push0
active_weeks_last_year13
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 14 days ago
19.8/27Release cadence — a release every ~51.4 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tagv0.9.38
releases_from_tagsno
days_since_latest_release14
mean_days_between_releases51.4
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

64Moderate · 18% of overall
How it's scored
39/60Stars — 255 stars
17.7/25Forks — 134 forks
6.2/15Watchers — 14 watchers
Inputs used
forks134
stars255
watchers14
growth_stateorganic
growth_factor_pct100
How it's scored
22.5/22.5README
16.9/22.5License — license file present, not a recognized license
0/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateyes

Sustainability & Governance

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

76Good · 24% of overall
How it's scored
43.2/54Bus factor — 4 contributor(s) cover half of all commits
16.4/22.5Commit distribution — top contributor authored 27% of commits
13.5/13.5Contributor breadth — 94 contributors
10/10OpenSSF Scorecard: Contributors — project has 89 contributing companies or organizations
Inputs used
bus_factor4
contributors_sampled94
top_contributor_share0.269
How it's scored
39.8/46.8Issue resolution — 85% of issues closed
31.5/38.3PR acceptance — 384/467 decided PRs merged
1.5/15OpenSSF Scorecard: Code-Review — Found 3/28 approved changesets -- score normalized to 1
Inputs used
merged_prs384
open_issues36
closed_issues206
issue_closed_ratio0.851
closed_unmerged_prs83
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
18.1/25Owner reach — 333 followers of FluxML
24.3/25Track record — 48 public repos, account ~9 yr old
Inputs used
followers333
owner_typeOrganization
is_verified
owner_loginFluxML
public_repos48
account_age_days3,424

Engineering Quality

Are baseline engineering and documentation practices in place?

75Good · 20% of overall
How it's scored
24/24CI workflows — 7 workflow(s)
24/24Tests present
0/16Linter config
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
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

85Excellent
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 3 topics
10/10Wiki
Inputs used
topicsmachine-learning, deep-learning, julia
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

52Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
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.5License — 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 — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.2
Excluded from scoring (no data or not applicable): packaging, signed_releases. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

59Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 69 of 84 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.821
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3,316
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
0/11Static type checking
0/10Reproducible environment
10/10Demonstrated agent practice — 41 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 13 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0.41
toolchain_manifests
dependency_bot_commit_share0.13
How it's scored
0/45Type-checkable code — Julia without a type-check config
55/55Manageable file sizes — 0/1 source files over 60KB
Inputs used
primary_languageJulia
largest_source_bytes1,275
source_files_sampled1
oversized_source_files0

Key facts

255GitHub stars
94contributors
74commits, last 12 months
0days since last push
100releases
4bus factor
36open issues
package ecosystems

Data collection warnings

  • No resolved dependencies carried a version and a supported ecosystem

More detail

Star and fork history 255 ★ / 134 ⇿
255Stars
134Forks
100Releases

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

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

Each point covers 9 days.

OpenSSF Scorecard 5.2 / 10
5.2aggregate

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

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

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

RegistryPackageVersionRelation
PyPInumpyindirect
PyPItorchindirect
Dependency advisories not assessed

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

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "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
}

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

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

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