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

utkuozdemir / nvidia_gpu_exporter

Nvidia GPU exporter for prometheus using nvidia-smi binary

GoMIT★ 1.510 Sterne⑂ 149 Forksseit Juni 2021Auf GitHub ansehen ↗

utkuozdemir/nvidia_gpu_exporter erreicht einen Gesundheitsindex von 77 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (88/100) ab, am schwächsten bei Security (66/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

77
gesamt / 100
Gut

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

Utku ÖzdemirPersönliches Konto
210 Follower133 öffentliche Reposseit Feb. 2012@siderolabs

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/utkuozdemir/nvidia_gpu_exporterv1.13.0-32vor 2 Tagen

Metriken nach Kategorie

Vitalität

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

88Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
19.4/36Commit-Rhythmus — 28/52 Wochen mit Commits
18/18Commit-Volumen — 170 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year170
human_commit_share0,77
days_since_last_push0
active_weeks_last_year28
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 32 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 2 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3,1 Tage
6/10OpenSSF Scorecard: Signed-Releases — 4 out of the last 5 releases have a total of 4 signed artifacts.
Verwendete Eingangsdaten
releases_count32
latest_release_tagv1.13.0
releases_from_tagsnein
days_since_latest_release2
mean_days_between_releases3,1

Community & Verbreitung

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

82Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
51.6/60Stars — 1.510 Stars
18.1/25Forks — 149 Forks
4.3/15Watcher — 7 Watcher
Verwendete Eingangsdaten
forks149
stars1.510
watchers7
growth_stateorganic
growth_factor_pct100
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja

Nachhaltigkeit & Governance

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

69Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
9.1/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 60 % der Commits
13.5/13.5Breite der Beitragenden — 12 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Verwendete Eingangsdaten
bus_factor1
contributors_sampled12
top_contributor_share0,595
Wie die Bewertung erfolgt
43.9/46.8Issue-Lösungsquote — 94 % der Issues geschlossen
35.4/38.3PR-Annahme — 329/355 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/21 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs329
open_issues7
closed_issues108
issue_closed_ratio0,939
closed_unmerged_prs26
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
16.7/25Reichweite des Inhabers — 210 Follower von utkuozdemir
25/25Kontohistorie — 133 öffentliche Repos, Kontoalter ca. 14 Jahre
Verwendete Eingangsdaten
followers210
owner_typeUser
is_verified
owner_loginutkuozdemir
public_repos133
account_age_days5.262
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 2 Tagen
20/20Versionshistorie — 32 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/utkuozdemir/nvidia_gpu_exporter
ecosystemsgo
any_deprecatednein
min_days_since_publish2

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

80Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 15 out of 15 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 13 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsprometheus, prometheus-exporter, nvidia-gpu, nvidia, nvidia-smi, monitoring, ai, cryptocurrency, gaming, llm, llm-training, inference, nvml
has_wikinein
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

66Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 15 out of 15 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/7.5Code-Review — Found 0/21 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
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
4.5/7.5Signed-Releases — 4 out of the last 5 releases have a total of 4 signed artifacts.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories2
affected_packages2
assessed_packages35
unassessed_packages0
affected_by_severityunknown 2
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories, Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. 35 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. Erreichbarkeit wird nicht analysiert.

AI Readiness

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

69Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 77 von 77 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Taskfile.yml
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 23 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfileja
typed_languageja
bootstrap_filesTaskfile.yml
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0,23
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/72 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes57.796
source_files_sampled72
oversized_source_files0

Eckdaten

1.510GitHub-Sterne
12Mitwirkende
170Commits, letzte 12 Monate
0Tage seit letztem Push
32Releases
1Bus-Faktor
7offene Issues
GoPaket-Ökosysteme

Weitere Details

Stern- und Fork-Verlauf 1.510 ★ / 149 ⇿
1.510Sterne
149Forks
21Releases

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

Es wird nur die jüngste Historie angezeigt — dieses Repository überschreitet das Erfassungsfenster, sodass die früheste Historie nicht erfasst wird.

04008001.2001.6001.510149132021-102024-032026-07
Major 1Minor 15Patch 5

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 5.7 / 10
5.7Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 02:47 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests15 out of 15 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/21 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow 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
6Signed-Releases4 out of the last 5 releases have a total of 4 signed artifacts.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Direkte Abhängigkeiten 14
RegistryPaketVersionsvorgabeManifest
Gogithub.com/NVIDIA/go-nvmlv0.13.3-1go.mod
Gogithub.com/alecthomas/kingpin/v2v2.4.0go.mod
Gogithub.com/coreos/go-systemd/v22v22.7.0go.mod
Gogithub.com/kballard/go-shellquotev0.0.0-20180428030007-95032a82bc51go.mod
Gogithub.com/neilotoole/slogt/v2v2.0.0go.mod
Gogithub.com/prometheus/client_golangv1.24.0go.mod
Gogithub.com/prometheus/client_modelv0.6.2go.mod
Gogithub.com/prometheus/commonv0.70.0go.mod
Gogithub.com/prometheus/exporter-toolkitv0.17.1go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/thejerf/slogassertv0.3.4go.mod
Gogolang.org/x/syncv0.22.0go.mod
Gogolang.org/x/sysv0.47.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Alle Abhängigkeiten 35

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

RegistryPaketVersionBeziehung
Gogithub.com/alecthomas/kingpin/v2v2.4.0direkt
Gogithub.com/coreos/go-systemd/v22v22.7.0direkt
Gogithub.com/kballard/go-shellquotev0.0.0-20180428030007-95032a82bc51direkt
Gogithub.com/neilotoole/slogt/v2v2.0.0direkt
Gogithub.com/nvidia/go-nvmlv0.13.3-1direkt
Gogithub.com/prometheus/client_golangv1.24.0direkt
Gogithub.com/prometheus/client_modelv0.6.2direkt
Gogithub.com/prometheus/commonv0.70.0direkt
Gogithub.com/prometheus/exporter-toolkitv0.17.1direkt
Gogithub.com/stretchr/testifyv1.11.1direkt
Gogithub.com/thejerf/slogassertv0.3.4direkt
Gogolang.org/x/syncv0.22.0direkt
Gogolang.org/x/sysv0.47.0direkt
Gogopkg.in/yaml.v3v3.0.1direkt
Gogithub.com/alecthomas/unitsv0.0.0-20240927000941-0f3dac36c52bindirekt
Gogithub.com/beorn7/perksv1.0.1indirekt
Gogithub.com/cespare/xxhash/v2v2.3.0indirekt
Gogithub.com/davecgh/go-spewv1.1.1indirekt
Gogithub.com/golang-jwt/jwt/v5v5.3.1indirekt
Gogithub.com/google/uuidv1.6.0indirekt
Gogithub.com/jpillora/backoffv1.0.0indirekt
Gogithub.com/mdlayher/socketv0.6.0indirekt
Gogithub.com/mdlayher/vsockv1.3.0indirekt
Gogithub.com/munnerz/goautonegv0.0.0-20191010083416-a7dc8b61c822indirekt
Gogithub.com/mwitkow/go-conntrackv0.0.0-20190716064945-2f068394615findirekt
Gogithub.com/pmezard/go-difflibv1.0.0indirekt
Gogithub.com/prometheus/procfsv0.21.1indirekt
Gogithub.com/xhit/go-str2duration/v2v2.1.0indirekt
Gogo.yaml.in/yaml/v2v2.4.4indirekt
Gogolang.org/x/cryptov0.53.0indirekt
Gogolang.org/x/netv0.56.0indirekt
Gogolang.org/x/oauth2v0.36.0indirekt
Gogolang.org/x/textv0.38.0indirekt
Gogolang.org/x/timev0.15.0indirekt
Gogoogle.golang.org/protobufv1.36.11indirekt
Abhängigkeits-Advisories 2

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 35 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 2 tragen bekannte Advisories, davon 0 direkte.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
golang.org/x/cryptov0.53.0indirektunbekannt1
golang.org/x/textv0.38.0indirektunbekannt10.39.0

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "prometheus",
        "prometheus-exporter",
        "nvidia-gpu",
        "nvidia",
        "nvidia-smi",
        "monitoring",
        "ai",
        "cryptocurrency",
        "gaming",
        "llm",
        "llm-training",
        "inference",
        "nvml"
      ],
      "is_fork": false,
      "size_kb": 3338,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 656550,
        "Shell": 33132,
        "Dockerfile": 949,
        "PowerShell": 20222,
        "Go Template": 1902
      },
      "pushed_at": "2026-07-21T19:31:36Z",
      "created_at": "2021-06-08T22:42:30Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T19:33:31Z",
      "description": "Nvidia GPU exporter for prometheus using nvidia-smi binary",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://utkuozdemir.org",
      "name": "Utku Özdemir",
      "type": "User",
      "login": "utkuozdemir",
      "company": "@siderolabs",
      "location": "Berlin, Germany",
      "followers": 210,
      "avatar_url": "https://avatars.githubusercontent.com/u/1465819?v=4",
      "created_at": "2012-02-23T14:20:31Z",
      "is_verified": null,
      "public_repos": 133,
      "account_age_days": 5262
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-07-19T14:10:03Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-07-16T21:20:16Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-07-15T16:32:18Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-07-05T22:37:43Z"
        },
        {
          "tag": "v1.9.1",
          "kind": "patch",
          "published_at": "2026-07-04T23:46:46Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-07-04T06:30:33Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-03T20:57:59Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-01T22:37:37Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-06-27T21:27:36Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-06-22T00:12:20Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2025-10-06T21:04:55Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2025-10-04T21:51:40Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2025-05-16T12:41:10Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2025-04-19T00:25:48Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2025-01-11T00:34:58Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2024-06-28T21:46:52Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2023-02-15T21:21:22Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2022-08-09T23:19:02Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2022-07-20T01:01:45Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2022-04-06T17:55:22Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2022-02-08T00:45:07Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2021-09-03T11:13:27Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2021-08-26T11:30:37Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2021-06-26T19:20:31Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2021-06-24T20:00:55Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2021-06-21T19:23:47Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2021-06-20T20:55:03Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2021-06-20T20:06:57Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2021-06-13T12:36:10Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2021-06-12T21:55:15Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2021-06-12T19:59:57Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2021-06-12T19:25:33Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "3779b664584ccebdb77da17741526bd899c5b5fa",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update grafana/grafana docker tag to v13.1.1",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-21T11:53:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a07e2f4eaab0942186679d0aec18b35133aacaa6",
          "body": "…24.0",
          "is_bot": true,
          "headline": "chore(deps): update module github.com/prometheus/client_golang to v1.…",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-21T08:08:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99370a89a7a410d874521cbc4b94d3d4fc98331a",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update actions/checkout action to v7.0.1",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-21T01:57:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55693009b1ed34ceb8a859e8080d6a0b3613cb6d",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update prom/alertmanager docker tag to v0.33.1",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-20T08:34:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fd9d078177408d2a639b2b20f2161e925b922f4",
          "body": "The chart's optional PrometheusRule grows from exporter self-health into a curated GPU health set: driver-requested recovery actions, two Xid tiers with explicit code allowlists, uncorrectable ECC errors, memory row remap and page retirement states, hardware thermal and power brake slowdown, slow co\n[…]\ncovering the reuse-values upgrade path, the all-rules-disabled render, both throttle metric families and the corrective action texts.\n\nCloses #429.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: ship GPU health alert rules with the helm chart",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-19T13:54:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4aad7a8104c599932a0135aecea18337b9776e5e",
          "body": "Drop the dated comparison with other exporters and the duplicated highlight bullets, trim the NVML paragraph, and mention the Helm chart and the background collection mode.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: simplify the readme",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-18T22:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5788abf60b2f95b4bf69ad010b3e9ec3d5ada796",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update dependency sigstore/cosign to v3.1.2",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-17T15:59:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b11a7f5b96c1546fb2d231a7f1d659fa7b962f93",
          "body": "Uninstalling while the service was running only marked it for deletion: the service kept running, the name stayed claimed until it stopped, and a reinstall in that window failed with a marked-for-deletion error. The uninstall command now drives the service to the stopped state first, bounded by a ti\n[…]\nnd removes it in one step with an immediate reinstall succeeding, and a machine reproduced into the old marked-for-deletion limbo recovers cleanly.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix: stop a running Windows service before uninstalling it",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T22:00:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85d72fe71abd2dc7b7e1a41cf0e5feb5c6afceb3",
          "body": "A stacked PR that gets retargeted to the default branch after its parent merges never got a CI run: the base change arrives as an edited event, which the default pull request trigger types ignore, so every such PR needed a manual close and reopen to become mergeable. The workflow now listens for edited events too, and both jobs skip the ones that did not change the base branch, so plain title or description edits still cost nothing.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore(ci): run the build on pull request base changes",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T20:46:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25e14d189945e355010146f58d9aa1cc5c7a6b6b",
          "body": "The dev stack now simulates two machines, a consumer inference box with a deliberately sick card and a two-GPU H200 box with a MIG topology and XID history, and serves each of them through both backend flavors from one shared config file per machine. The two Prometheuses label the same machine with \n[…]\ns. The stack README explains the pairing and its limits: values jitter independently per flavor around the same bases, they are not tick-identical.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: serve each simulated machine through both dev stack flavors",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T20:12:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15ed0fd460c0a7f2e7902dc12a362764043b48c0",
          "body": "The two Grafana data sources are now named Prometheus - Exec and Prometheus - NVML, so the dashboard's data source dropdown says which metric surface it is looking at instead of a bare Prometheus and an ambiguous demo qualifier. Volumes provisioned under the old names need one reset, which the stack README explains.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: name the dev stack data sources after their flavor",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T18:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d55ba77eee6cd39a8dc733b2fa9024fa6c4349ab",
          "body": "Both dashboards gain a collapsed row for the metric families the nvml and demo backends serve: power averaged from the cumulative energy counter overlaid with the sampled draw, trailing 24 hour energy, PCIe throughput, XID error counts and recency, and per-MIG-instance activity and memory, with a MI\n[…]\nry, and the default backend where the families are absent entirely.\n\nThe chart's dashboard copies stay byte-identical with the published artifacts.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add NVML metric panels to both dashboards",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T18:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9f09ae6caf57fb3f93cecc1047c37531a572e1d",
          "body": "The local dev stack now runs two flavors side by side. The existing nodes replaying a fake nvidia-smi keep their Prometheus, and two new nodes run the demo backend with a second Prometheus: a rich datacenter scenario with a MIG topology, where one GPU instance deliberately hosts two compute instance\n[…]\nitable like the fake ones, the startup script validates the compose file before bringing the stack up, and the stack README describes both flavors.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add a demo flavor to the local dev compose stack",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T16:29:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3b45f8e0ad296d81b87f56ec81db9be0f47aa8ca",
          "body": "The new demo collection backend serves realistic synthetic metrics on any platform, with no GPU, no driver and no external binary. It replays a real captured nvidia-smi with values fluctuating between scrapes, and synthesizes the NVML-only metric families coherently on top: the energy counter integr\n[…]\ned by a dependency test.\n\nThis exists for trying the exporter out without hardware and for developing dashboards and alerts against realistic data.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add a demo backend serving synthetic data without a GPU",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T16:29:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d2cb6481fe1799b75b7b030299f4191f60e4ca42",
          "body": "The nvml backend now watches for XID errors, the driver's numbered error events that nvidia-smi never reports, and exports them as a counter labeled by GPU and XID code, plus a timestamp of the most recent event. The watcher runs beside the collection cycles for the whole application lifetime and re\n[…]\ned-rows fields keep working there and only the new series stay absent, matching what nvidia-smi itself reports per driver generation.\n\nCloses #406.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat(nvml): count XID errors and serve the inactive remapped rows",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T16:29:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2907833859d51445c41c9ea56a082009f498e036",
          "body": "GPUs with MIG mode enabled now export one info series per MIG device carrying the parent GPU uuid, the MIG device uuid, the GPU instance and compute instance ids and the profile name, plus the MIG device's memory in bytes. Nothing needs configuring, the series appear when MIG instances exist and oth\n[…]\nvml mode, attributing processes to their MIG instance. It is opt-in because it changes the label set of an established metric family.\n\nCloses #203.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat(nvml): add per-MIG-instance metrics",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T16:27:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d874907f52483a33926062035bdb87671356c40",
          "body": "The nvml backend now exports metrics the nvidia-smi interface cannot provide, making its metric surface a superset of the default backend. A total energy counter is always on, and PCIe TX/RX throughput gauges sit behind a new opt-in flag whose help text documents the per-collection sampling cost. Th\n[…]\nllection, while a driver lifecycle error during their collection still schedules a re-initialization for the next cycle.\n\nCloses #391. Closes #127.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add NVML-only metrics and expose the CUDA version",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-16T09:10:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb8c5660e12790748e2ba7251b395cb41b336d71",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update actions/setup-go action to v7",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-16T04:36:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3107d6608fd5fa495fb9cdf18932a847f52c73f0",
          "body": "The DaemonSet rollout can now be tuned with an update strategy and a revision history limit, the pods accept extra labels without being able to clash with the selector labels, and the Service accepts annotations. The pods no longer mount the service account token by default, since the exporter never\n[…]\ner, running in namespaces enforcing the restricted Pod Security Standard, and wiring the monitoring extras into kube-prometheus-stack. Closes #430.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: complete the helm chart rollout, security, and scheduling knobs",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-15T21:26:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3545425438ee94394d5a7d79e0994c595295920",
          "body": "The metrics endpoint now serves at most a configurable number of concurrent scrapes, with requests beyond the limit answered with an immediate 503 instead of queueing without bound behind a slow or wedged collection. Errors while gathering or encoding metrics now land in the exporter's own logs, and\n[…]\nidia-smi stays scrapeable. The Helm chart's probes point at them and are now configurable through values, with null disabling a probe. Closes #459.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: harden the http serving and scrape handling",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-15T10:24:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72dcd8f7142c05def7b31ae2ba692ff6c78818b7",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update dependency markdownlint-cli to v0.49.1",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-14T22:49:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b51a2cae6bef3cbc1d28bdf788fbdd21e7bfd8ee",
          "body": "Publishing to winget was paused until the first submission cleared the manual review that new packages go through. That submission is merged and the package exists in the catalog, so releases from now on validate as regular version updates and can be published again.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: resume winget publishing",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T22:48:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcf211249465006f7e3fa3e5b2dd70f91d0378e6",
          "body": "The all-in-one Windows installer no longer bootstraps a package manager toolchain and no longer uses nssm. The exporter is downloaded straight from the latest GitHub release, verified against the release checksums, and registered as a native Windows service through its own install support. Prometheu\n[…]\nuns the downloaded script with the execution policy bypassed, since the default policy blocks it.\n\nThe script was renamed to describe what it does.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "refactor: rework the all-in-one Windows install script",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T22:48:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "594e4f0713be081fa8f9ff4018da91c112c53f2a",
          "body": "The symbol inventory section now records which tool actually produced it instead of always claiming one, and the fatal collection error no longer assumes it wraps a cause. Both were flagged in review.",
          "is_bot": false,
          "headline": "fix: record the symbol extraction tool and make the fatal error nil-safe",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da0601d3c4e3bd21e6737085e89dead07a941769",
          "body": "The linters only see the cgo collector on Linux, which the local run missed: short variable names are spelled out, the deliberate non-exhaustive switches and value reinterpretations carry their reasons, the repeated field-name literals in the collection tables are acknowledged, and the GPU parity tests are marked deliberately serial.",
          "is_bot": false,
          "headline": "chore: satisfy the linters for the cgo build",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47e983a5b52415a24eda49ba779b884f8f5a524f",
          "body": "The GPU parity test now compares absence by exact token, so error-classification drift between the backends cannot hide behind matching absence. Unknown fields are judged on both bracket samples and follow the same deferral policy as the corpus test. Volatile readings keep their bracket-range check,\n[…]\na call scan alone would miss since the seam assigns function references. The drift warning test asserts the actual log record, and the capture script records which tool extracted the symbol inventory.",
          "is_bot": false,
          "headline": "test: tighten the drift checks after review",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5640f545d437bcd01d2970252f1553e670f41ae9",
          "body": "When a collection in nvml mode observes that a required NVML function is unavailable, the exporter logs it once with the affected fields and the driver version, asking the user to report it. The affected fields stay absent as before; the log makes driver drift visible from the field instead of waiting for the next capture contribution.",
          "is_bot": false,
          "headline": "feat: warn when the driver stops providing an NVML function",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7e15a272e5648e380bf0eea42dce952770743d5",
          "body": "A build-tagged test is the live consistency oracle for GPU box sessions: it collects the same fields through both backends with bracketed sampling (the default backend before and after the native one), requiring stable fields to match a bracket byte for byte, volatile readings to fall inside the bra\n[…]\nng raw values. Failures name the GPU, the field, both backends' values and the place to fix.\n\nThe test never runs in regular CI, but CI now compiles it, so it cannot silently rot between box sessions.",
          "is_bot": false,
          "headline": "test: compare the two backends field by field on a real GPU",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6977bb790011483824091c916da991ae7ca97cf",
          "body": "Captures can now carry the driver library's exported NVML function names as one more section, extracted best-effort by the capture script when an ELF reader is available. The two H100 captures gain the inventory of their 590.48.01 library.\n\nA requirement manifest declares which exported symbols each\n[…]\npellings, while older inventories only report. A companion test parses the collector source, so adding a driver call without a manifest entry fails immediately instead of silently weakening the check.",
          "is_bot": false,
          "headline": "test: check driver library symbols against the recorded inventories",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5eef198b6b1d42d1ba0d3f9491df899e998142bc",
          "body": "Every committed Linux capture is now checked against the backend catalog. The newest capture by driver version carries hard assertions: a header that changed, a catalog field the driver no longer advertises, a field that flipped in or out of the deprecation list, or a newly advertised field with rea\n[…]\nhe drift detection pipeline.\n\nThe deprecation list moves next to the catalog so the test and the collector share one definition, and the previous single-capture header test is folded into the new one.",
          "is_bot": false,
          "headline": "test: detect driver drift against the recorded captures",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6f659cf39a404ec563a018ec033459fb7628047",
          "body": "A short use cases section replaces the gamer-focused tagline: consumer cards where the datacenter tooling exposes little, small clusters and homelabs without the GPU Operator stack, restricted environments where only nvidia-smi answers, mixed fleets, and gaming rigs. It also points readers with a GPU Operator setup to DCGM-exporter, since that case is deliberately not the target.",
          "is_bot": false,
          "headline": "docs: describe the use cases in the readme",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f43b5b0643111c7c37167063845a508f13b41b8c",
          "body": "A new collection mode reads GPU metrics directly from the driver library instead of running nvidia-smi, selected with a flag. It exports the same metrics as the default mode: metric names, labels and values were verified field by field against a live H100, where every field the driver supports came \n[…]\ns stay fully static and answer the flag with a clear error. The packages and the existing image are pinned to the static build, and both image variants are signed.\n\nPart of the work discussed in #145.",
          "is_bot": false,
          "headline": "feat: add an experimental NVML collection backend",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "de6404e9408cbbe41d6b5d5b544cff1bd55b8dd3",
          "body": "Two captures from an H100 cloud box on the 590 driver branch, one in plain mode and one with MIG enabled in a heterogeneous four-instance layout, both idle and under a real CUDA load. The load helper now matters because this GPU has no video encoder, so the ffmpeg-based load produced an idle-looking capture and a CUDA burner was used instead.\n\nThe expected exporter outputs for both captures are recorded alongside the other golden files.",
          "is_bot": false,
          "headline": "capture: NVIDIA H100 80GB HBM3, plain and MIG (590.48.01, linux-x86_64)",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-14T20:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "911c4557303b8c7244da4a39bd4f798359c63c95",
          "body": "Replace the outdated single-GPU dashboard screenshot with a full-page capture of the overhauled dashboard with all sections expanded, and add a matching capture of the new multi-GPU overview dashboard to the visualization section. This is a follow-up to #454.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: update the Grafana dashboard screenshots",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-13T09:39:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f27d6cb47d48eaeadee8cdf74cc41bae8d5fe0f",
          "body": "A new Grafana dashboard compares all GPUs of one node side by side, as a companion to the existing single-GPU dashboard. The GPU selector is multi-select with an all option, so two cards can be compared or a whole node watched at once. Closes #226.\n\nThe dashboard opens with a table anchored on the G\n[…]\nyte-identical with their chart copies, the dashboard lint covers both, and the docs describe importing the overview next to the existing dashboard.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add a multi-GPU overview dashboard",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-13T08:22:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9341ecb44afc7b41d21f8e45f2eef1dcb133525",
          "body": "The local compose stack now runs two exporter instances playing two nodes: an eight-GPU consumer box with one deliberately sick card, and a two-GPU passive datacenter box with explicit uuids and no fan readings. This makes per-node filtering, multi-GPU comparison, cross-instance join correctness and\n[…]\nthe sick and healthy states are visible side by side. The render script now renders both dashboards into the provisioning directory.\n\nPart of #226.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: simulate two nodes in the compose dev stack",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-13T08:22:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f12304c91efc09e9d2e7bd11b58bcaeaf7e590a7",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update docker images",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-12T18:08:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19bdbdcfb5f3d476999ae076acaa3eaae210612f",
          "body": "The dashboard is now checked against grafana.com best practices in strict mode, locally through a lint task and in CI. The linter drove real fixes that ship separately: a proper data source template variable, job and node matchers on every query, variables refreshing on time range changes, and a non\n[…]\nxclusion.\n\nThe linter is installed as a release binary because its module carries replace directives and cannot be installed with plain go tooling.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: lint the Grafana dashboard with the grafana dashboard-linter",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-12T18:07:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5482e489d5cdd1243660394a70830265564bed93",
          "body": "The dashboard now opens with a pinned health banner showing the recommended GPU recovery action, the number of active performance-limiting throttle reasons, and uncorrected ECC errors, each as a named state on a status color, with honest fallback texts on hardware that does not report them.\n\nThe GPU\n[…]\nd fabric state metrics only appear when reported.\n\nThe Helm chart ships the same dashboard, and CI now verifies the two copies stay byte-identical.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: overhaul the Grafana dashboard",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-12T18:07:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2feac44bb68293eade83e119f365da8d59b7a314",
          "body": "The local compose stack now builds the exporter from source with per-process collection enabled and drives the fake nvidia-smi from a config file that randomizes every field the dashboard visualizes, including all throttle flags, performance states, compute mode, temperatures reaching the alert thre\n[…]\nepository dockerignore keeps private scratch data and git history out of the image build context, and the rendered dashboard copies stay untracked.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: extend the compose dev stack for dashboard development",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-12T18:07:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bea5d022f5c4f246adcd57a58bcb730966f6eef",
          "body": "The fake can now serve moving values with no per-field setup: --fluctuate jitters the naturally varying fields (utilization, temperature, power draw, current clocks, fan speed, used memory) around their captured values, preserving each cell's unit and decimal shape. A value the capture reports as un\n[…]\nopt-in and leave the default replay byte-identical, so the golden replay suite and the integration tests are unaffected.\n\nCloses #449. Closes #451.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: fluctuate values and simulate multiple GPUs in the fake nvidia-smi",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-12T17:06:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f938c53ea407750b0da9e5a115917c55f4bda71a",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update module github.com/prometheus/common to v0.70.0",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-10T09:05:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2918e0ce2abb61199a55a59b6b26608b098ebb6b",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update go packages",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T15:06:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "670f56960c8cf4ee2ff192d91985d07bceb5c6c7",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update dependency golang/go to v1.26.5",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-07T21:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b078b25df5dd9734b44e8e9691caae242ad77b4",
          "body": "The fake could pin a field to a fixed value with --set. It can now also serve a fresh random value in a range on each run with --set-range field=min:max, so the exporter's timeseries and gauges move instead of sitting flat, which is what makes iterating on the Grafana dashboard without a GPU workabl\n[…]\na seed reproduces the values no matter how many fields are ranged, and every GPU or process row draws its own value rather than moving in lockstep.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add value ranges and a config file to the fake nvidia-smi",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-07T06:35:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cbef58d9cc02b5e57af4e07e7bd194967d6e7222",
          "body": "nvidia-smi reports some fields as state strings rather than numbers, so the exporter used to drop them. It now maps the GPU recovery action and the NVLink fabric state to their native NVML enum integers and exposes them as gauges. The recovery action is the clean signal that a GPU is in a bad state \n[…]\ning number, and an unrecognized value is dropped rather than guessed, so a metric never claims a state the exporter cannot vouch for.\n\nCloses #393.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: expose GPU recovery action and fabric state as metrics",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-06T15:13:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c251821b2c8497cadfe7199f60cca615513a6d1d",
          "body": "The fake nvidia-smi replayed a capture exactly as recorded, so testing a state no real capture contains (a GPU in a bad state, an odd reading, a permission error) meant hand-crafting a whole synthetic capture. A repeatable --set field=value flag now replaces that field's value in the data rows of th\n[…]\noverride value is rejected because the exporter splits the CSV on commas and either would shift the columns. A repeated field takes the last value.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: let the fake nvidia-smi override field values via --set",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-06T13:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a13e13af033b494dcb4a73e524b9824a65b3f45d",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update github actions",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-06T00:56:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fa26454d9867b6690a74715ab5a17dca6581610",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update github actions",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-05T22:31:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc56dd8b9c180091d8b601d8e244642e140b5198",
          "body": "The install guide now shows how to check the signed checksums for a downloaded binary and how to verify the container images with cosign, and the top-level readme points at both. The chart readme gains the cosign command for verifying an OCI install alongside the existing provenance check for classic-repository installs.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: document how to verify release signatures",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-05T22:30:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fee27f5c9962907d2224204278e8d13b8b1c5df",
          "body": "Every release is now signed so consumers can verify it came from this project's pipeline. A single GPG key signs both the checksums file, which covers all binaries, archives and packages, and the helm chart provenance. The container images on Docker Hub and GHCR and the chart pushed to GHCR as an OC\n[…]\n no expiry, uploads it to the repository secrets, and records the fingerprint in the chart metadata, so rotating the key later is a single command.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: sign the release checksums, images and charts",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-05T22:30:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d67f4bb01fb0c4be14360f60f1821812362839f",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update dependency goreleaser/goreleaser to v2.17.0",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-05T02:13:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6a5aeb97b715de7ec8fe3df7a78f2ba78ac5e26",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update arduino/setup-task action to v3",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-04T23:56:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d797b8febba127c8bee1c2f694494b49843c9267",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update docker images",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-04T23:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea8cef9c7a13cb93a5173855af58de9ed85ef56f",
          "body": "The checked-in scrape expectations were called golden files, a piece of jargon that reads oddly in the failure messages and docs. They are now called expected output files throughout the tests, the package docs and the capture guide, and a few comment fragments were smoothed into full sentences along the way.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: call the expected outputs what they are",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec335341abfa3bbf27774251b27783db68e1de64",
          "body": "Review findings on the pull request. The build workflow ignored documentation, install asset and markdown paths, which defeated the newly added asset linting for exactly the changes it exists to check, and since the build check is required, a change touching only ignored paths could never merge at a\n[…]\nle datasource so a future major bump cannot break the install command, and the default capture doc comment no longer overstates its driver recency.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: run CI on every change and validate packaging in it",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf0e1755ee8df10072bf239464e97b3d973ecd35",
          "body": "The lint task silently checked almost nothing: the recursive globs never expanded in the task runner's shell, so markdown linting only saw files one level deep and shell linting matched nothing after the reorganization, while the shell format check never failed because it only listed files. Linting \n[…]\nell linting now runs as its own CI step through the same task definition, and the module tidiness check fails on drift instead of silently tidying.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: make the lint task reliable and run all of it in CI",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "23425a0029819263e64927e9fb683c57d6234757",
          "body": "The chart icon and the dashboard the Windows installer downloads during setup both point at raw repository content that moved. The installer's dashboard link additionally referenced a branch name that has not existed since the default branch was renamed, surviving only through the redirect, so it now points at the current branch directly.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix: repair the raw content links consumed at runtime",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51787a86d8304ff510c1f788ae0fb500f1a3943e",
          "body": "The docker compose setup with the preconfigured Prometheus and Grafana is maintainer tooling, so it moves under a hack directory following the common convention. The sample outputs from 2021 are deleted: the capture corpus records the same information in a richer, versioned and replayable form, and \n[…]\nothing referenced them anymore. CI path ignores now reflect the new layout, skipping builds for documentation, dev tooling and host install assets.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: move the dev compose environment and drop the obsolete samples",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49daf497b57458bc25f6219cb1bc7f165f8710a2",
          "body": "The installation, configuration and metrics references move under a docs directory together with the images and the Grafana dashboard, and the contributing guide and code of conduct move under the GitHub metadata directory, which GitHub recognizes for both. All links between the moved documents, the README and the capture guide are updated, and the capture guide's replay example now uses an embedded capture name.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: move secondary documentation and community files off the root",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b67149b9242d0a4b6b2c8881b8ed83b60c0997c",
          "body": "The systemd unit and the package install and remove scriptlets join the Windows installer script in the install directory, so everything about getting the exporter onto and off of a machine lives in one place. The Windows installer script itself keeps its exact path, so its widely shared download URL stays valid.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: gather the host install assets under one directory",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "039437ac3b876d2b81c84adf4f77be1fe4e2937b",
          "body": "The end-to-end tests are module-internal like everything else that is not a binary, so they move under the internal tree, keeping the repository root for user-facing content. A new test also pins that the shipped exporter binary never imports the embedded capture corpus, which would silently grow the release binary by the corpus size.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: move the integration suite under the internal tree",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eee0d3187e2f014f1ba6736fd729a195e13a8c8",
          "body": "The captures move from the top-level test data directory into an internal package that embeds them, so the fake nvidia-smi and the tests can replay any capture without a repository checkout. The fake's capture selection now accepts either an embedded capture name or a path to a file on disk, and its\n[…]\non, including the location note the script writes into each capture it produces and the same note in the headers of the already collected captures.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: embed the capture corpus as a Go package",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:44:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e574975cf0c70611c5f80b6845a6c91f9c7bd1ba",
          "body": "Review feedback on the pull request. The test setup deliberately returns from its main function so the deferred cleanup runs, since the test wrapper itself exits with the run's result, and the comment now says so. The row splitting comment overstated the free-text cell handling as byte-exact when surrounding whitespace is trimmed like every other cell, matching the exporter's own parser.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: clarify test main exit and cell trimming comments",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61a9f79dd80e2efb121879c3aa0378cce01e3aa7",
          "body": "Windows GPU behavior is covered by replaying the Windows captures through the fake nvidia-smi on the Linux runner, which is data and therefore platform-independent. Running the test suite itself on Windows and macOS runners only validated the Go toolchain glue, the truly platform-specific runtime co\n[…]\nnon-required check on a renovate branch would silently downgrade branch automerge into pull requests.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "ci: drop the cross-platform test job",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c47bcb59933b390fadbf4ec7129c8e66d77e863a",
          "body": "Findings from a review pass on the branch. Windows checkouts convert line endings by default, which would break both the capture parsing and the golden comparison, so the affected files are now pinned to LF on checkout and the capture parser additionally tolerates converted content, since contribute\n[…]\nns on Windows and macOS runners in CI, covering the platform-dependent behavior the Linux run cannot.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: harden the capture replay for portability and maintenance",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96b741ff6eb130979ca3f35aaea9f84267df8023",
          "body": "Contributing a capture now automatically extends the integration suite, so the capture documentation explains the golden file workflow and how to run the exporter locally against a replayed capture without a GPU.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: explain how the captures drive the integration tests",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9eaea5f13e7fcb9770324ed03a0cf9bb88053ea3",
          "body": "The integration tests drive the exporter's real entry in-process, so their execution now counts toward the coverage of the packages it exercises, which was the point of running them in-process. The coverage denominator changes with this, so the reported number will shift once.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: count cross-package coverage in the CI test run",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74a7c0423eb5f1c25bb11d54b8fa81c8f78609bd",
          "body": "The exporter now runs end to end in tests: the real entry runs in-process, queries the fake nvidia-smi replaying each committed capture, and the scraped metrics are compared against a golden file per capture and state. The two families derived from wall-clock time are excluded from the goldens and a\n[…]\nhe opt-in shutdown on error, and the per-process query failing softly while GPU metrics keep flowing.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: add capture-driven integration tests with golden files",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7a48be7df41a998428883aa690a05fd5dbe71adc",
          "body": "A new injection flag makes the fake fail only the invocations matching a given argument prefix while answering everything else normally, so a test can break one of the exporter's queries in isolation, for example only the per-process one.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: support failing selected invocations in the fake nvidia-smi",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6897635fbd3fd3b8144302490052aeaa5b250de2",
          "body": "The run logic moves out of the command-line binary into an internal package that the binary now calls, so tests can drive the same entry in-process. Each run builds its own flag application and metric registry instead of mutating process-global state, registering the same collectors and instrumented\n[…]\ncs, the help output and the root page were verified to be byte-identical before and after the change.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "refactor: move the exporter entry into an internal package",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "027de4b4fa00ed2977bd54ffb44cabdb6fca08b5",
          "body": "The fake answers the invocations the exporter makes entirely from a capture file parsed at runtime. The field detection call is served verbatim, and the CSV queries are answered by projecting the requested columns out of the recorded output, using the field list recorded in the capture's own command\n[…]\nxercising the exporter's error paths, and a state switch to replay a capture's idle or load sections.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: add a fake nvidia-smi that replays captures",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc3e60849bfc3f885a4eba7f05c9a7707737edab",
          "body": "The capture files under testdata hold raw nvidia-smi output recorded from real machines, one self-contained file per machine and driver combination. Parsing them programmatically is the first step towards replaying them in integration tests, and it gives future parsing work direct access to the recorded sections.\n\nPart of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: add a parser for the GPU capture files",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05a2fed27aa04fb1d41cc87cd785f42306c8f237",
          "body": "The configured nvidia-smi command was split on whitespace only, so an executable path containing spaces, common on Windows installs under Program Files, could not be used at all.\n\nWhen the configured command contains a quote character, it is now split following shell quoting rules, so paths with spa\n[…]\n backslashes, and no variable expansion is performed either way. An empty command is now rejected with a clear error instead of crashing the query.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix: support quoted paths in the nvidia-smi command",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T12:26:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69e63c012f91c40a9a4bb7df1b2872b1c7c663a1",
          "body": "The chart's helm test made a single connection attempt with no retries, racing the exporter startup: when the test pod started before the exporter began listening, the test failed with a connection refused error even though the release was healthy. The test now retries for up to a minute before giving up.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix(chart): retry the connection test until the exporter responds",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T06:45:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c25603c5c46d62929c6e04a86b1a0f6b4277105",
          "body": "Fields reported with a millisecond unit now map to a metric with a seconds suffix and a scaled value, consistent with how microsecond fields are handled. Driver 590 introduced such a field, and it previously triggered the unexpected-characters error log on every startup and produced a metric name with a raw unit suffix.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix: convert millisecond fields to seconds in metric names",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T06:45:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43dedb0fdc72705befd7064f54459d434c0c8266",
          "body": "Add an opt-in collection of per-process GPU data, reporting each process holding a compute context on a GPU with its pid and process name as labels: an identity metric, the used GPU memory in bytes, and a per-GPU process count that reads an explicit zero on an idle GPU. The count and identity metric\n[…]\nwarn when only one of them is set. The docs cover the container, Windows, MIG and label-churn caveats.\n\nCloses utkuozdemir/nvidia_gpu_exporter#190.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add per-process GPU metrics",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-04T06:28:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05aef9a214087da7bb63e633df6ac0d41f5b3f98",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update helm/kind-action action to v1.14.0 (#439)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-04T01:25:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5ea334f03d9e442b9a56108bb5834226bed33b4",
          "body": "Two captures from an H200 on driver 590.48.01, one in normal mode and one with MIG enabled and a heterogeneous instance layout, both including an under-load state. This is the first datacenter-class Hopper sample in the corpus and the first one with MIG enabled, covering output shapes the exporter h\n[…]\nelds and value tokens absent from the existing captures.\n\nPart of utkuozdemir/nvidia_gpu_exporter#203. Part of utkuozdemir/nvidia_gpu_exporter#422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: add nvidia-smi captures from an H200, with and without MIG",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T22:45:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5755d57ce21c0d2491b4830b189bde1b1202a712",
          "body": "Artifact Hub matches this ID against the metadata file served at the chart repository root to grant the verified publisher badge.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: add the Artifact Hub repository ID to the chart repo metadata",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T21:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31c7ffc30781bf66ea2e8f2961111a9487609dfa",
          "body": "Point directly at the two pending submissions so it is clear what needs to clear review before winget publishing can be resumed.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: link the stuck winget pull requests in the pause note",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:53:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7da58770f06dafaa99246cb13dba8dfb476df2c8",
          "body": "The initial winget submission is stuck waiting for a human review on the winget side. New releases would keep piling up superseded pull requests on top of it, so no winget pull requests are opened for now. Manifests are still generated locally during the release, and publishing can be resumed by flipping a single flag once the package is accepted.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: pause winget publishing until the package clears review",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:52:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5691bc1f1b295c097c49c824af92b9ae8509d40",
          "body": "Point the Kubernetes section at the in-repo chart first, installable from GHCR as an OCI artifact, with the raw DaemonSet manifest kept as the Helm-free alternative.\n\nPart of #426.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "docs: make the helm chart the primary Kubernetes install path",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab9b24963a429fa256964d244e39eb2eff586ad4",
          "body": "Lint the chart with chart-testing on every build, check that the generated chart README is current, and install the chart on a throwaway kind cluster including the chart's connection test. The CI cluster has no GPU, so the exporter serves only its health metrics there, which the collection decoupling made a passing state, and that is enough to catch template, schema, and packaging regressions.\n\nPart of #426.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "chore: lint and install-test the helm chart in CI",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbd7242607912e0f25ebf81c3ba8f76586c36539",
          "body": "Publish the chart on every release, right after the main release job. The chart and app versions are computed from the tag, with the chart major one above the app major, and stamped at packaging time, so the chart source carries only a placeholder version and releases require no version-bump commits\n[…]\n chart versions stay available, and the Artifact Hub metadata file is published alongside it so the repository can be claimed there.\n\nPart of #426.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: publish the helm chart as part of the release",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47f166fc49c11883b565cb564a0bba579a538363",
          "body": "Bring the Helm chart into this repository, rewritten around the NVIDIA container runtime. The pods run unprivileged, mount nothing from the host, and request no GPU resource, so monitoring never takes a GPU away from workloads. GPU access is selected with a RuntimeClass value, or inherited when the \n[…]\nafter the upgrade. The upgrade was also verified with customized values carried over, including host networking and resource limits.\n\nPart of #426.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add the Helm chart, reworked for runtime-injected GPU access",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1275d67255f036b41b602c6b83bafb4a7b6141ba",
          "body": "Add a capture from a datacenter-class GPU, the first in the corpus. It carries fields consumer cards do not produce, including ECC error counters and row remapping data.\n\nPart of #422.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "test: add nvidia-smi capture from an L40S",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "810c84bba67f784c661f58f904dff5591f91c276",
          "body": "Stop telling Docker and Kubernetes users to hand-mount GPU device files, the nvidia-smi binary, and the NVML libraries into the container. That approach breaks on driver upgrades because the library symlink chain dangles, varies with GPU count, and hardcodes per-architecture library paths. The nvidi\n[…]\neased image, the image contains no NVIDIA files, and without runtime selection the exporter degrades to health metrics as documented.\n\nCloses #408.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: use the nvidia container runtime for GPU access in containers",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-03T20:49:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "180cabd2599f470048662f5afb3a52542ee139cc",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update docker/login-action action to v4.4.0 (#437)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-03T17:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad700afe688457edb46f380c0940b2a3a6cb7f1e",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update github actions (#435)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-02T14:44:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a338ec904c0680eb5cd962cd45ded0de15cb1e37",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update docker/setup-qemu-action action to v4.2.0 (#434)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-01T22:21:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae70328e8a67fca97a9f515c2695cd534c9b1f6e",
          "body": "* refactor: extract nvidia-smi interaction into its own package\n\nMove everything that talks to nvidia-smi out of the exporter into a dedicated internal package: query execution, CSV parsing, field discovery, and raw value interpretation. The query call is renamed from scrape to query, since scrape a\n[…]\non completes waits for it, so the timeout can apply once at startup.\n\nPart of #405.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>\n\n---------\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: decouple metric collection from nvidia-smi execution (#432)",
          "author_name": "Utku Özdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-07-01T22:17:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3fe6875b97d9b01b9c77257a9aaef53e5178360",
          "body": "…v0.17.1 (#433)\n\nCo-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update module github.com/prometheus/exporter-toolkit to …",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-01T21:48:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75f4a81669cff5436b2514a167c169a70862dfd4",
          "body": "…v0.17.0 (#431)\n\nCo-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update module github.com/prometheus/exporter-toolkit to …",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-06-30T18:15:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e4e4e7f0da5b36249d773e495b3a01f341af224",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): update github actions (#420)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-06-29T23:42:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9796b4e975a5a12a66191970b49c69537a83d540",
          "body": "Since the move to the new docker build pipeline the multi-arch images carried the amd64 binary inside the arm64 image, so the exporter crashed with an exec format error on arm64 hosts. The Dockerfile gave the automatic target platform argument a default value, and that default shadowed the value the\n[…]\n amd64 image is unchanged. Affected the 1.5.0 and 1.6.0 releases, the corrected images for those versions are republished separately.\n\nCloses #418.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "fix: ship the matching architecture binary in docker images",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-06-29T12:05:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bfbdc16514a0ad668a90e7a6bb8b0701ad9f7f05",
          "body": "Signed-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "refactor: update tag message format in Taskfile.yml",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-06-27T21:24:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0fb0c51b8031543462430b5c4b4f024a5c1a7fc",
          "body": "The Windows build is now published to winget as well as scoop, so it can be installed with a single `winget install`. On a release the winget manifests are built from the Windows archive and submitted as a pull request to the winget community repository.\n\nThe install docs gain a winget section cover\n[…]\nep is documented after reconfiguring the service, and the uninstall instructions now also remove the firewall rule and the winget or scoop package.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: publish to winget",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-06-27T21:22:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a59e78064ae6780589bc09b900646a7fccbde135",
          "body": "The exporter now speaks the Windows Service Control Manager protocol, so it can be registered and run as a real Windows service without a third-party wrapper like nssm. Previously registering it with the service tooling and starting it failed with a timeout because the binary did not implement the s\n[…]\nnstall command instead of nssm, still deliver the binary through scoop, and explain how to remove an old nssm service when upgrading.\n\nCloses #141.\n\nSigned-off-by: Utku Ozdemir <utkuozdemir@gmail.com>",
          "is_bot": false,
          "headline": "feat: add native Windows service support",
          "author_name": "Utku Ozdemir",
          "author_login": "utkuozdemir",
          "committed_at": "2026-06-27T00:30:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d44a0ee31b80b14677f42c9904a623b7149edf8",
          "body": null,
          "is_bot": false,
          "headline": "test: add linux rtx 4080 super capture for driver 595.71.05",
          "author_name": "Oguz Kilcan",
          "author_login": "oguzkilcan",
          "committed_at": "2026-06-26T15:44:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 32,
      "commits_last_year": 170,
      "latest_release_at": "2026-07-19T14:10:03Z",
      "latest_release_tag": "v1.13.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 28,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 3.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/utkuozdemir/nvidia_gpu_exporter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/utkuozdemir/nvidia_gpu_exporter",
          "is_deprecated": false,
          "latest_version": "v1.13.0",
          "repository_url": "https://github.com/utkuozdemir/nvidia_gpu_exporter",
          "versions_count": 32,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T13:54:55Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        }
      ]
    },
    "popularity": {
      "forks": 149,
      "stars": 1510,
      "watchers": 7,
      "fork_history": {
        "days": [
          {
            "date": "2021-10-19",
            "count": 1
          },
          {
            "date": "2021-10-29",
            "count": 1
          },
          {
            "date": "2021-11-08",
            "count": 1
          },
          {
            "date": "2021-11-10",
            "count": 1
          },
          {
            "date": "2021-11-17",
            "count": 1
          },
          {
            "date": "2022-01-16",
            "count": 1
          },
          {
            "date": "2022-01-30",
            "count": 1
          },
          {
            "date": "2022-02-25",
            "count": 1
          },
          {
            "date": "2022-03-28",
            "count": 1
          },
          {
            "date": "2022-04-13",
            "count": 1
          },
          {
            "date": "2022-05-13",
            "count": 1
          },
          {
            "date": "2022-05-18",
            "count": 1
          },
          {
            "date": "2022-05-27",
            "count": 1
          },
          {
            "date": "2022-06-07",
            "count": 1
          },
          {
            "date": "2022-06-08",
            "count": 1
          },
          {
            "date": "2022-06-09",
            "count": 1
          },
          {
            "date": "2022-06-17",
            "count": 1
          },
          {
            "date": "2022-06-21",
            "count": 2
          },
          {
            "date": "2022-06-23",
            "count": 1
          },
          {
            "date": "2022-06-24",
            "count": 1
          },
          {
            "date": "2022-06-29",
            "count": 1
          },
          {
            "date": "2022-07-25",
            "count": 1
          },
          {
            "date": "2022-08-08",
            "count": 1
          },
          {
            "date": "2022-08-16",
            "count": 1
          },
          {
            "date": "2022-08-30",
            "count": 1
          },
          {
            "date": "2022-10-12",
            "count": 1
          },
          {
            "date": "2022-10-17",
            "count": 1
          },
          {
            "date": "2022-11-08",
            "count": 1
          },
          {
            "date": "2022-11-16",
            "count": 1
          },
          {
            "date": "2022-11-26",
            "count": 1
          },
          {
            "date": "2022-11-28",
            "count": 1
          },
          {
            "date": "2023-01-04",
            "count": 1
          },
          {
            "date": "2023-01-29",
            "count": 1
          },
          {
            "date": "2023-02-14",
            "count": 1
          },
          {
            "date": "2023-02-16",
            "count": 1
          },
          {
            "date": "2023-02-26",
            "count": 1
          },
          {
            "date": "2023-03-08",
            "count": 1
          },
          {
            "date": "2023-03-15",
            "count": 2
          },
          {
            "date": "2023-03-21",
            "count": 1
          },
          {
            "date": "2023-05-31",
            "count": 1
          },
          {
            "date": "2023-06-16",
            "count": 1
          },
          {
            "date": "2023-06-20",
            "count": 1
          },
          {
            "date": "2023-06-30",
            "count": 1
          },
          {
            "date": "2023-07-04",
            "count": 2
          },
          {
            "date": "2023-08-01",
            "count": 1
          },
          {
            "date": "2023-08-15",
            "count": 1
          },
          {
            "date": "2023-08-20",
            "count": 1
          },
          {
            "date": "2023-08-21",
            "count": 1
          },
          {
            "date": "2023-08-26",
            "count": 1
          },
          {
            "date": "2023-09-01",
            "count": 1
          },
          {
            "date": "2023-09-21",
            "count": 1
          },
          {
            "date": "2023-09-29",
            "count": 1
          },
          {
            "date": "2023-10-25",
            "count": 1
          },
          {
            "date": "2023-11-20",
            "count": 1
          },
          {
            "date": "2023-12-02",
            "count": 1
          },
          {
            "date": "2023-12-15",
            "count": 1
          },
          {
            "date": "2023-12-21",
            "count": 1
          },
          {
            "date": "2024-01-03",
            "count": 1
          },
          {
            "date": "2024-01-14",
            "count": 1
          },
          {
            "date": "2024-01-22",
            "count": 2
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2024-02-10",
            "count": 1
          },
          {
            "date": "2024-02-24",
            "count": 1
          },
          {
            "date": "2024-03-20",
            "count": 1
          },
          {
            "date": "2024-03-21",
            "count": 1
          },
          {
            "date": "2024-03-28",
            "count": 1
          },
          {
            "date": "2024-04-02",
            "count": 2
          },
          {
            "date": "2024-04-05",
            "count": 1
          },
          {
            "date": "2024-04-07",
            "count": 1
          },
          {
            "date": "2024-04-16",
            "count": 1
          },
          {
            "date": "2024-04-17",
            "count": 1
          },
          {
            "date": "2024-04-30",
            "count": 1
          },
          {
            "date": "2024-05-04",
            "count": 1
          },
          {
            "date": "2024-05-06",
            "count": 1
          },
          {
            "date": "2024-05-08",
            "count": 1
          },
          {
            "date": "2024-05-16",
            "count": 1
          },
          {
            "date": "2024-05-22",
            "count": 1
          },
          {
            "date": "2024-05-24",
            "count": 1
          },
          {
            "date": "2024-06-03",
            "count": 1
          },
          {
            "date": "2024-06-04",
            "count": 2
          },
          {
            "date": "2024-06-22",
            "count": 1
          },
          {
            "date": "2024-07-09",
            "count": 1
          },
          {
            "date": "2024-07-13",
            "count": 1
          },
          {
            "date": "2024-07-25",
            "count": 1
          },
          {
            "date": "2024-08-06",
            "count": 1
          },
          {
            "date": "2024-08-10",
            "count": 1
          },
          {
            "date": "2024-08-12",
            "count": 1
          },
          {
            "date": "2024-08-26",
            "count": 1
          },
          {
            "date": "2024-08-27",
            "count": 1
          },
          {
            "date": "2024-08-28",
            "count": 1
          },
          {
            "date": "2024-09-20",
            "count": 1
          },
          {
            "date": "2024-09-24",
            "count": 1
          },
          {
            "date": "2024-10-09",
            "count": 1
          },
          {
            "date": "2024-10-16",
            "count": 2
          },
          {
            "date": "2024-11-14",
            "count": 1
          },
          {
            "date": "2024-11-16",
            "count": 1
          },
          {
            "date": "2024-11-21",
            "count": 1
          },
          {
            "date": "2024-12-04",
            "count": 2
          },
          {
            "date": "2024-12-09",
            "count": 1
          },
          {
            "date": "2024-12-16",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2025-01-17",
            "count": 1
          },
          {
            "date": "2025-02-09",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-02-25",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-03-17",
            "count": 1
          },
          {
            "date": "2025-03-22",
            "count": 1
          },
          {
            "date": "2025-04-03",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-04-09",
            "count": 1
          },
          {
            "date": "2025-05-15",
            "count": 1
          },
          {
            "date": "2025-05-16",
            "count": 1
          },
          {
            "date": "2025-05-23",
            "count": 1
          },
          {
            "date": "2025-06-01",
            "count": 1
          },
          {
            "date": "2025-06-10",
            "count": 1
          },
          {
            "date": "2025-06-14",
            "count": 1
          },
          {
            "date": "2025-07-08",
            "count": 1
          },
          {
            "date": "2025-07-27",
            "count": 1
          },
          {
            "date": "2025-08-01",
            "count": 1
          },
          {
            "date": "2025-08-22",
            "count": 1
          },
          {
            "date": "2025-08-27",
            "count": 1
          },
          {
            "date": "2025-09-16",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 1
          },
          {
            "date": "2025-12-12",
            "count": 1
          },
          {
            "date": "2025-12-19",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-01-31",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 149,
        "total_forks": 149
      },
      "star_history": {
        "days": [
          {
            "date": "2024-01-15",
            "count": 1
          },
          {
            "date": "2024-01-16",
            "count": 3
          },
          {
            "date": "2024-01-17",
            "count": 1
          },
          {
            "date": "2024-01-19",
            "count": 1
          },
          {
            "date": "2024-01-22",
            "count": 3
          },
          {
            "date": "2024-01-23",
            "count": 4
          },
          {
            "date": "2024-01-24",
            "count": 2
          },
          {
            "date": "2024-01-30",
            "count": 1
          },
          {
            "date": "2024-02-01",
            "count": 3
          },
          {
            "date": "2024-02-02",
            "count": 1
          },
          {
            "date": "2024-02-04",
            "count": 1
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2024-02-06",
            "count": 1
          },
          {
            "date": "2024-02-08",
            "count": 1
          },
          {
            "date": "2024-02-10",
            "count": 1
          },
          {
            "date": "2024-02-11",
            "count": 1
          },
          {
            "date": "2024-02-12",
            "count": 2
          },
          {
            "date": "2024-02-14",
            "count": 1
          },
          {
            "date": "2024-02-15",
            "count": 1
          },
          {
            "date": "2024-02-18",
            "count": 2
          },
          {
            "date": "2024-02-19",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 1
          },
          {
            "date": "2024-02-25",
            "count": 1
          },
          {
            "date": "2024-02-26",
            "count": 1
          },
          {
            "date": "2024-02-27",
            "count": 1
          },
          {
            "date": "2024-02-28",
            "count": 1
          },
          {
            "date": "2024-03-01",
            "count": 2
          },
          {
            "date": "2024-03-02",
            "count": 1
          },
          {
            "date": "2024-03-04",
            "count": 3
          },
          {
            "date": "2024-03-05",
            "count": 1
          },
          {
            "date": "2024-03-06",
            "count": 2
          },
          {
            "date": "2024-03-07",
            "count": 3
          },
          {
            "date": "2024-03-10",
            "count": 2
          },
          {
            "date": "2024-03-11",
            "count": 2
          },
          {
            "date": "2024-03-12",
            "count": 2
          },
          {
            "date": "2024-03-13",
            "count": 3
          },
          {
            "date": "2024-03-15",
            "count": 1
          },
          {
            "date": "2024-03-17",
            "count": 1
          },
          {
            "date": "2024-03-19",
            "count": 3
          },
          {
            "date": "2024-03-20",
            "count": 4
          },
          {
            "date": "2024-03-21",
            "count": 5
          },
          {
            "date": "2024-03-22",
            "count": 1
          },
          {
            "date": "2024-03-24",
            "count": 1
          },
          {
            "date": "2024-03-25",
            "count": 2
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-03-28",
            "count": 2
          },
          {
            "date": "2024-03-29",
            "count": 2
          },
          {
            "date": "2024-03-30",
            "count": 3
          },
          {
            "date": "2024-03-31",
            "count": 1
          },
          {
            "date": "2024-04-01",
            "count": 1
          },
          {
            "date": "2024-04-02",
            "count": 2
          },
          {
            "date": "2024-04-03",
            "count": 2
          },
          {
            "date": "2024-04-04",
            "count": 1
          },
          {
            "date": "2024-04-07",
            "count": 1
          },
          {
            "date": "2024-04-08",
            "count": 2
          },
          {
            "date": "2024-04-10",
            "count": 1
          },
          {
            "date": "2024-04-11",
            "count": 1
          },
          {
            "date": "2024-04-12",
            "count": 3
          },
          {
            "date": "2024-04-13",
            "count": 4
          },
          {
            "date": "2024-04-15",
            "count": 1
          },
          {
            "date": "2024-04-16",
            "count": 2
          },
          {
            "date": "2024-04-17",
            "count": 1
          },
          {
            "date": "2024-04-18",
            "count": 2
          },
          {
            "date": "2024-04-19",
            "count": 6
          },
          {
            "date": "2024-04-21",
            "count": 1
          },
          {
            "date": "2024-04-22",
            "count": 1
          },
          {
            "date": "2024-04-26",
            "count": 3
          },
          {
            "date": "2024-04-29",
            "count": 2
          },
          {
            "date": "2024-04-30",
            "count": 2
          },
          {
            "date": "2024-05-01",
            "count": 1
          },
          {
            "date": "2024-05-02",
            "count": 1
          },
          {
            "date": "2024-05-03",
            "count": 2
          },
          {
            "date": "2024-05-04",
            "count": 1
          },
          {
            "date": "2024-05-05",
            "count": 1
          },
          {
            "date": "2024-05-06",
            "count": 1
          },
          {
            "date": "2024-05-07",
            "count": 2
          },
          {
            "date": "2024-05-08",
            "count": 1
          },
          {
            "date": "2024-05-09",
            "count": 1
          },
          {
            "date": "2024-05-11",
            "count": 4
          },
          {
            "date": "2024-05-15",
            "count": 1
          },
          {
            "date": "2024-05-17",
            "count": 1
          },
          {
            "date": "2024-05-20",
            "count": 3
          },
          {
            "date": "2024-05-21",
            "count": 3
          },
          {
            "date": "2024-05-22",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 2
          },
          {
            "date": "2024-05-25",
            "count": 1
          },
          {
            "date": "2024-05-26",
            "count": 2
          },
          {
            "date": "2024-05-28",
            "count": 3
          },
          {
            "date": "2024-05-29",
            "count": 3
          },
          {
            "date": "2024-05-30",
            "count": 2
          },
          {
            "date": "2024-05-31",
            "count": 1
          },
          {
            "date": "2024-06-04",
            "count": 1
          },
          {
            "date": "2024-06-05",
            "count": 3
          },
          {
            "date": "2024-06-06",
            "count": 4
          },
          {
            "date": "2024-06-07",
            "count": 2
          },
          {
            "date": "2024-06-09",
            "count": 1
          },
          {
            "date": "2024-06-11",
            "count": 1
          },
          {
            "date": "2024-06-12",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 3
          },
          {
            "date": "2024-06-16",
            "count": 1
          },
          {
            "date": "2024-06-17",
            "count": 2
          },
          {
            "date": "2024-06-18",
            "count": 6
          },
          {
            "date": "2024-06-19",
            "count": 1
          },
          {
            "date": "2024-06-20",
            "count": 1
          },
          {
            "date": "2024-06-21",
            "count": 1
          },
          {
            "date": "2024-06-22",
            "count": 1
          },
          {
            "date": "2024-06-25",
            "count": 2
          },
          {
            "date": "2024-06-26",
            "count": 2
          },
          {
            "date": "2024-06-27",
            "count": 1
          },
          {
            "date": "2024-06-28",
            "count": 1
          },
          {
            "date": "2024-06-29",
            "count": 1
          },
          {
            "date": "2024-06-30",
            "count": 2
          },
          {
            "date": "2024-07-01",
            "count": 4
          },
          {
            "date": "2024-07-02",
            "count": 3
          },
          {
            "date": "2024-07-03",
            "count": 1
          },
          {
            "date": "2024-07-04",
            "count": 2
          },
          {
            "date": "2024-07-07",
            "count": 1
          },
          {
            "date": "2024-07-09",
            "count": 2
          },
          {
            "date": "2024-07-11",
            "count": 2
          },
          {
            "date": "2024-07-13",
            "count": 1
          },
          {
            "date": "2024-07-15",
            "count": 1
          },
          {
            "date": "2024-07-16",
            "count": 4
          },
          {
            "date": "2024-07-17",
            "count": 2
          },
          {
            "date": "2024-07-18",
            "count": 3
          },
          {
            "date": "2024-07-19",
            "count": 2
          },
          {
            "date": "2024-07-20",
            "count": 2
          },
          {
            "date": "2024-07-22",
            "count": 1
          },
          {
            "date": "2024-07-23",
            "count": 2
          },
          {
            "date": "2024-07-25",
            "count": 2
          },
          {
            "date": "2024-07-26",
            "count": 4
          },
          {
            "date": "2024-07-28",
            "count": 1
          },
          {
            "date": "2024-07-29",
            "count": 1
          },
          {
            "date": "2024-07-31",
            "count": 3
          },
          {
            "date": "2024-08-02",
            "count": 3
          },
          {
            "date": "2024-08-03",
            "count": 1
          },
          {
            "date": "2024-08-05",
            "count": 1
          },
          {
            "date": "2024-08-07",
            "count": 3
          },
          {
            "date": "2024-08-08",
            "count": 1
          },
          {
            "date": "2024-08-09",
            "count": 1
          },
          {
            "date": "2024-08-10",
            "count": 1
          },
          {
            "date": "2024-08-13",
            "count": 2
          },
          {
            "date": "2024-08-15",
            "count": 1
          },
          {
            "date": "2024-08-16",
            "count": 1
          },
          {
            "date": "2024-08-17",
            "count": 2
          },
          {
            "date": "2024-08-18",
            "count": 2
          },
          {
            "date": "2024-08-19",
            "count": 1
          },
          {
            "date": "2024-08-20",
            "count": 1
          },
          {
            "date": "2024-08-21",
            "count": 2
          },
          {
            "date": "2024-08-22",
            "count": 4
          },
          {
            "date": "2024-08-23",
            "count": 3
          },
          {
            "date": "2024-08-24",
            "count": 1
          },
          {
            "date": "2024-08-26",
            "count": 2
          },
          {
            "date": "2024-08-27",
            "count": 2
          },
          {
            "date": "2024-08-28",
            "count": 2
          },
          {
            "date": "2024-08-29",
            "count": 3
          },
          {
            "date": "2024-08-30",
            "count": 1
          },
          {
            "date": "2024-09-02",
            "count": 2
          },
          {
            "date": "2024-09-03",
            "count": 1
          },
          {
            "date": "2024-09-04",
            "count": 1
          },
          {
            "date": "2024-09-06",
            "count": 4
          },
          {
            "date": "2024-09-07",
            "count": 2
          },
          {
            "date": "2024-09-09",
            "count": 2
          },
          {
            "date": "2024-09-11",
            "count": 3
          },
          {
            "date": "2024-09-12",
            "count": 1
          },
          {
            "date": "2024-09-13",
            "count": 2
          },
          {
            "date": "2024-09-14",
            "count": 2
          },
          {
            "date": "2024-09-15",
            "count": 1
          },
          {
            "date": "2024-09-16",
            "count": 1
          },
          {
            "date": "2024-09-17",
            "count": 1
          },
          {
            "date": "2024-09-18",
            "count": 1
          },
          {
            "date": "2024-09-19",
            "count": 3
          },
          {
            "date": "2024-09-20",
            "count": 2
          },
          {
            "date": "2024-09-23",
            "count": 1
          },
          {
            "date": "2024-09-24",
            "count": 1
          },
          {
            "date": "2024-09-25",
            "count": 2
          },
          {
            "date": "2024-09-29",
            "count": 4
          },
          {
            "date": "2024-09-30",
            "count": 2
          },
          {
            "date": "2024-10-02",
            "count": 1
          },
          {
            "date": "2024-10-03",
            "count": 2
          },
          {
            "date": "2024-10-06",
            "count": 1
          },
          {
            "date": "2024-10-08",
            "count": 3
          },
          {
            "date": "2024-10-09",
            "count": 1
          },
          {
            "date": "2024-10-10",
            "count": 1
          },
          {
            "date": "2024-10-13",
            "count": 2
          },
          {
            "date": "2024-10-15",
            "count": 4
          },
          {
            "date": "2024-10-16",
            "count": 1
          },
          {
            "date": "2024-10-17",
            "count": 4
          },
          {
            "date": "2024-10-18",
            "count": 1
          },
          {
            "date": "2024-10-23",
            "count": 1
          },
          {
            "date": "2024-10-24",
            "count": 2
          },
          {
            "date": "2024-10-25",
            "count": 1
          },
          {
            "date": "2024-10-27",
            "count": 1
          },
          {
            "date": "2024-10-28",
            "count": 2
          },
          {
            "date": "2024-10-29",
            "count": 1
          },
          {
            "date": "2024-10-31",
            "count": 1
          },
          {
            "date": "2024-11-01",
            "count": 1
          },
          {
            "date": "2024-11-02",
            "count": 2
          },
          {
            "date": "2024-11-04",
            "count": 1
          },
          {
            "date": "2024-11-05",
            "count": 2
          },
          {
            "date": "2024-11-07",
            "count": 2
          },
          {
            "date": "2024-11-08",
            "count": 3
          },
          {
            "date": "2024-11-09",
            "count": 1
          },
          {
            "date": "2024-11-10",
            "count": 1
          },
          {
            "date": "2024-11-12",
            "count": 3
          },
          {
            "date": "2024-11-15",
            "count": 1
          },
          {
            "date": "2024-11-17",
            "count": 2
          },
          {
            "date": "2024-11-18",
            "count": 2
          },
          {
            "date": "2024-11-19",
            "count": 1
          },
          {
            "date": "2024-11-20",
            "count": 1
          },
          {
            "date": "2024-11-21",
            "count": 2
          },
          {
            "date": "2024-11-24",
            "count": 2
          },
          {
            "date": "2024-11-25",
            "count": 1
          },
          {
            "date": "2024-11-26",
            "count": 2
          },
          {
            "date": "2024-11-27",
            "count": 3
          },
          {
            "date": "2024-11-29",
            "count": 1
          },
          {
            "date": "2024-11-30",
            "count": 1
          },
          {
            "date": "2024-12-02",
            "count": 4
          },
          {
            "date": "2024-12-03",
            "count": 2
          },
          {
            "date": "2024-12-04",
            "count": 2
          },
          {
            "date": "2024-12-05",
            "count": 2
          },
          {
            "date": "2024-12-06",
            "count": 1
          },
          {
            "date": "2024-12-08",
            "count": 1
          },
          {
            "date": "2024-12-09",
            "count": 1
          },
          {
            "date": "2024-12-10",
            "count": 1
          },
          {
            "date": "2024-12-11",
            "count": 1
          },
          {
            "date": "2024-12-12",
            "count": 3
          },
          {
            "date": "2024-12-13",
            "count": 2
          },
          {
            "date": "2024-12-14",
            "count": 1
          },
          {
            "date": "2024-12-15",
            "count": 1
          },
          {
            "date": "2024-12-16",
            "count": 2
          },
          {
            "date": "2024-12-17",
            "count": 1
          },
          {
            "date": "2024-12-18",
            "count": 1
          },
          {
            "date": "2024-12-21",
            "count": 1
          },
          {
            "date": "2024-12-22",
            "count": 2
          },
          {
            "date": "2024-12-23",
            "count": 2
          },
          {
            "date": "2024-12-25",
            "count": 1
          },
          {
            "date": "2024-12-26",
            "count": 1
          },
          {
            "date": "2024-12-28",
            "count": 1
          },
          {
            "date": "2024-12-30",
            "count": 2
          },
          {
            "date": "2024-12-31",
            "count": 3
          },
          {
            "date": "2025-01-01",
            "count": 1
          },
          {
            "date": "2025-01-02",
            "count": 2
          },
          {
            "date": "2025-01-04",
            "count": 1
          },
          {
            "date": "2025-01-05",
            "count": 1
          },
          {
            "date": "2025-01-06",
            "count": 1
          },
          {
            "date": "2025-01-07",
            "count": 2
          },
          {
            "date": "2025-01-08",
            "count": 2
          },
          {
            "date": "2025-01-09",
            "count": 2
          },
          {
            "date": "2025-01-13",
            "count": 1
          },
          {
            "date": "2025-01-15",
            "count": 1
          },
          {
            "date": "2025-01-17",
            "count": 3
          },
          {
            "date": "2025-01-18",
            "count": 1
          },
          {
            "date": "2025-01-20",
            "count": 2
          },
          {
            "date": "2025-01-21",
            "count": 2
          },
          {
            "date": "2025-01-22",
            "count": 2
          },
          {
            "date": "2025-01-23",
            "count": 1
          },
          {
            "date": "2025-01-24",
            "count": 1
          },
          {
            "date": "2025-01-26",
            "count": 1
          },
          {
            "date": "2025-01-29",
            "count": 1
          },
          {
            "date": "2025-01-31",
            "count": 2
          },
          {
            "date": "2025-02-02",
            "count": 2
          },
          {
            "date": "2025-02-03",
            "count": 2
          },
          {
            "date": "2025-02-05",
            "count": 2
          },
          {
            "date": "2025-02-06",
            "count": 1
          },
          {
            "date": "2025-02-07",
            "count": 4
          },
          {
            "date": "2025-02-08",
            "count": 2
          },
          {
            "date": "2025-02-10",
            "count": 3
          },
          {
            "date": "2025-02-12",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 2
          },
          {
            "date": "2025-02-14",
            "count": 2
          },
          {
            "date": "2025-02-15",
            "count": 1
          },
          {
            "date": "2025-02-16",
            "count": 3
          },
          {
            "date": "2025-02-17",
            "count": 3
          },
          {
            "date": "2025-02-18",
            "count": 2
          },
          {
            "date": "2025-02-19",
            "count": 3
          },
          {
            "date": "2025-02-20",
            "count": 2
          },
          {
            "date": "2025-02-21",
            "count": 1
          },
          {
            "date": "2025-02-22",
            "count": 2
          },
          {
            "date": "2025-02-23",
            "count": 1
          },
          {
            "date": "2025-02-24",
            "count": 1
          },
          {
            "date": "2025-02-25",
            "count": 2
          },
          {
            "date": "2025-02-26",
            "count": 1
          },
          {
            "date": "2025-02-27",
            "count": 2
          },
          {
            "date": "2025-03-03",
            "count": 2
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 5
          },
          {
            "date": "2025-03-07",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-11",
            "count": 1
          },
          {
            "date": "2025-03-12",
            "count": 2
          },
          {
            "date": "2025-03-13",
            "count": 3
          },
          {
            "date": "2025-03-14",
            "count": 2
          },
          {
            "date": "2025-03-15",
            "count": 1
          },
          {
            "date": "2025-03-16",
            "count": 1
          },
          {
            "date": "2025-03-17",
            "count": 3
          },
          {
            "date": "2025-03-18",
            "count": 1
          },
          {
            "date": "2025-03-19",
            "count": 2
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-03-21",
            "count": 3
          },
          {
            "date": "2025-03-22",
            "count": 2
          },
          {
            "date": "2025-03-24",
            "count": 2
          },
          {
            "date": "2025-03-25",
            "count": 4
          },
          {
            "date": "2025-03-26",
            "count": 1
          },
          {
            "date": "2025-03-27",
            "count": 2
          },
          {
            "date": "2025-03-28",
            "count": 1
          },
          {
            "date": "2025-04-02",
            "count": 5
          },
          {
            "date": "2025-04-05",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-04-08",
            "count": 1
          },
          {
            "date": "2025-04-09",
            "count": 1
          },
          {
            "date": "2025-04-10",
            "count": 2
          },
          {
            "date": "2025-04-11",
            "count": 2
          },
          {
            "date": "2025-04-12",
            "count": 2
          },
          {
            "date": "2025-04-14",
            "count": 1
          },
          {
            "date": "2025-04-15",
            "count": 2
          },
          {
            "date": "2025-04-16",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 2
          },
          {
            "date": "2025-04-19",
            "count": 3
          },
          {
            "date": "2025-04-21",
            "count": 3
          },
          {
            "date": "2025-04-22",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-04-24",
            "count": 2
          },
          {
            "date": "2025-04-25",
            "count": 3
          },
          {
            "date": "2025-04-26",
            "count": 1
          },
          {
            "date": "2025-04-27",
            "count": 2
          },
          {
            "date": "2025-04-28",
            "count": 1
          },
          {
            "date": "2025-04-29",
            "count": 1
          },
          {
            "date": "2025-04-30",
            "count": 1
          },
          {
            "date": "2025-05-01",
            "count": 1
          },
          {
            "date": "2025-05-05",
            "count": 1
          },
          {
            "date": "2025-05-06",
            "count": 2
          },
          {
            "date": "2025-05-07",
            "count": 1
          },
          {
            "date": "2025-05-08",
            "count": 1
          },
          {
            "date": "2025-05-09",
            "count": 3
          },
          {
            "date": "2025-05-11",
            "count": 1
          },
          {
            "date": "2025-05-13",
            "count": 1
          },
          {
            "date": "2025-05-14",
            "count": 1
          },
          {
            "date": "2025-05-15",
            "count": 3
          },
          {
            "date": "2025-05-16",
            "count": 2
          },
          {
            "date": "2025-05-18",
            "count": 2
          },
          {
            "date": "2025-05-19",
            "count": 1
          },
          {
            "date": "2025-05-20",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-05-22",
            "count": 3
          },
          {
            "date": "2025-05-23",
            "count": 1
          },
          {
            "date": "2025-05-24",
            "count": 1
          },
          {
            "date": "2025-05-27",
            "count": 2
          },
          {
            "date": "2025-05-29",
            "count": 4
          },
          {
            "date": "2025-05-30",
            "count": 5
          },
          {
            "date": "2025-05-31",
            "count": 2
          },
          {
            "date": "2025-06-01",
            "count": 1
          },
          {
            "date": "2025-06-03",
            "count": 2
          },
          {
            "date": "2025-06-05",
            "count": 2
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-06-07",
            "count": 1
          },
          {
            "date": "2025-06-10",
            "count": 3
          },
          {
            "date": "2025-06-11",
            "count": 1
          },
          {
            "date": "2025-06-13",
            "count": 1
          },
          {
            "date": "2025-06-16",
            "count": 1
          },
          {
            "date": "2025-06-17",
            "count": 3
          },
          {
            "date": "2025-06-18",
            "count": 3
          },
          {
            "date": "2025-06-19",
            "count": 5
          },
          {
            "date": "2025-06-20",
            "count": 1
          },
          {
            "date": "2025-06-22",
            "count": 1
          },
          {
            "date": "2025-06-23",
            "count": 1
          },
          {
            "date": "2025-06-24",
            "count": 1
          },
          {
            "date": "2025-06-25",
            "count": 1
          },
          {
            "date": "2025-06-27",
            "count": 2
          },
          {
            "date": "2025-06-28",
            "count": 2
          },
          {
            "date": "2025-07-04",
            "count": 2
          },
          {
            "date": "2025-07-07",
            "count": 1
          },
          {
            "date": "2025-07-08",
            "count": 1
          },
          {
            "date": "2025-07-09",
            "count": 3
          },
          {
            "date": "2025-07-11",
            "count": 2
          },
          {
            "date": "2025-07-15",
            "count": 4
          },
          {
            "date": "2025-07-16",
            "count": 1
          },
          {
            "date": "2025-07-17",
            "count": 2
          },
          {
            "date": "2025-07-20",
            "count": 2
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-07-23",
            "count": 1
          },
          {
            "date": "2025-07-24",
            "count": 1
          },
          {
            "date": "2025-07-25",
            "count": 2
          },
          {
            "date": "2025-07-26",
            "count": 1
          },
          {
            "date": "2025-07-29",
            "count": 1
          },
          {
            "date": "2025-07-30",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 2
          },
          {
            "date": "2025-08-03",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 2
          },
          {
            "date": "2025-08-06",
            "count": 1
          },
          {
            "date": "2025-08-07",
            "count": 2
          },
          {
            "date": "2025-08-08",
            "count": 1
          },
          {
            "date": "2025-08-09",
            "count": 1
          },
          {
            "date": "2025-08-10",
            "count": 1
          },
          {
            "date": "2025-08-11",
            "count": 3
          },
          {
            "date": "2025-08-12",
            "count": 2
          },
          {
            "date": "2025-08-13",
            "count": 1
          },
          {
            "date": "2025-08-14",
            "count": 1
          },
          {
            "date": "2025-08-15",
            "count": 2
          },
          {
            "date": "2025-08-16",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 3
          },
          {
            "date": "2025-08-23",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 3
          },
          {
            "date": "2025-08-26",
            "count": 1
          },
          {
            "date": "2025-08-27",
            "count": 3
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 1
          },
          {
            "date": "2025-09-01",
            "count": 1
          },
          {
            "date": "2025-09-02",
            "count": 1
          },
          {
            "date": "2025-09-03",
            "count": 1
          },
          {
            "date": "2025-09-05",
            "count": 2
          },
          {
            "date": "2025-09-07",
            "count": 1
          },
          {
            "date": "2025-09-08",
            "count": 4
          },
          {
            "date": "2025-09-09",
            "count": 2
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-12",
            "count": 4
          },
          {
            "date": "2025-09-16",
            "count": 1
          },
          {
            "date": "2025-09-17",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 1
          },
          {
            "date": "2025-09-23",
            "count": 1
          },
          {
            "date": "2025-09-24",
            "count": 1
          },
          {
            "date": "2025-09-25",
            "count": 1
          },
          {
            "date": "2025-09-26",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 1
          },
          {
            "date": "2025-09-29",
            "count": 2
          },
          {
            "date": "2025-09-30",
            "count": 1
          },
          {
            "date": "2025-10-05",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-07",
            "count": 2
          },
          {
            "date": "2025-10-08",
            "count": 1
          },
          {
            "date": "2025-10-09",
            "count": 1
          },
          {
            "date": "2025-10-10",
            "count": 1
          },
          {
            "date": "2025-10-11",
            "count": 2
          },
          {
            "date": "2025-10-13",
            "count": 3
          },
          {
            "date": "2025-10-14",
            "count": 1
          },
          {
            "date": "2025-10-15",
            "count": 3
          },
          {
            "date": "2025-10-16",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 4
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 2
          },
          {
            "date": "2025-10-23",
            "count": 2
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-10-29",
            "count": 1
          },
          {
            "date": "2025-10-30",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 1
          },
          {
            "date": "2025-11-02",
            "count": 4
          },
          {
            "date": "2025-11-03",
            "count": 1
          },
          {
            "date": "2025-11-04",
            "count": 2
          },
          {
            "date": "2025-11-07",
            "count": 1
          },
          {
            "date": "2025-11-08",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 1
          },
          {
            "date": "2025-11-11",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 2
          },
          {
            "date": "2025-11-14",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 2
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-22",
            "count": 2
          },
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-11-26",
            "count": 2
          },
          {
            "date": "2025-11-27",
            "count": 1
          },
          {
            "date": "2025-11-28",
            "count": 3
          },
          {
            "date": "2025-12-02",
            "count": 2
          },
          {
            "date": "2025-12-03",
            "count": 2
          },
          {
            "date": "2025-12-04",
            "count": 1
          },
          {
            "date": "2025-12-06",
            "count": 1
          },
          {
            "date": "2025-12-07",
            "count": 1
          },
          {
            "date": "2025-12-09",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 4
          },
          {
            "date": "2025-12-11",
            "count": 2
          },
          {
            "date": "2025-12-15",
            "count": 3
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-22",
            "count": 3
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 3
          },
          {
            "date": "2025-12-25",
            "count": 3
          },
          {
            "date": "2025-12-26",
            "count": 2
          },
          {
            "date": "2025-12-28",
            "count": 1
          },
          {
            "date": "2025-12-30",
            "count": 1
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 3
          },
          {
            "date": "2026-01-07",
            "count": 2
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-09",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 3
          },
          {
            "date": "2026-01-14",
            "count": 2
          },
          {
            "date": "2026-01-15",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-21",
            "count": 2
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-01-26",
            "count": 1
          },
          {
            "date": "2026-01-27",
            "count": 1
          },
          {
            "date": "2026-01-29",
            "count": 1
          },
          {
            "date": "2026-01-31",
            "count": 2
          },
          {
            "date": "2026-02-02",
            "count": 4
          },
          {
            "date": "2026-02-04",
            "count": 3
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-08",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-10",
            "count": 1
          },
          {
            "date": "2026-02-11",
            "count": 2
          },
          {
            "date": "2026-02-12",
            "count": 4
          },
          {
            "date": "2026-02-14",
            "count": 1
          },
          {
            "date": "2026-02-15",
            "count": 3
          },
          {
            "date": "2026-02-17",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 2
          },
          {
            "date": "2026-02-20",
            "count": 1
          },
          {
            "date": "2026-02-21",
            "count": 2
          },
          {
            "date": "2026-02-23",
            "count": 2
          },
          {
            "date": "2026-02-24",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 2
          },
          {
            "date": "2026-02-28",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 3
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-03-11",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 5
          },
          {
            "date": "2026-03-18",
            "count": 3
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-24",
            "count": 2
          },
          {
            "date": "2026-03-29",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 2
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 2
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-04-14",
            "count": 2
          },
          {
            "date": "2026-04-15",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 2
          },
          {
            "date": "2026-04-23",
            "count": 3
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 5
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 2
          },
          {
            "date": "2026-05-09",
            "count": 2
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 2
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-05-28",
            "count": 2
          },
          {
            "date": "2026-06-03",
            "count": 2
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-15",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 2
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-20",
            "count": 1
          },
          {
            "date": "2026-06-23",
            "count": 2
          },
          {
            "date": "2026-06-24",
            "count": 4
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 2
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-06",
            "count": 2
          },
          {
            "date": "2026-07-07",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_stars": 1510
      },
      "open_issues_and_prs": 7
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Taskfile.yml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 57796,
      "source_files_sampled": 72,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "golang.org/x/crypto",
            "direct": false,
            "version": "v0.53.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5932"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 14
          },
          {
            "name": "golang.org/x/text",
            "direct": false,
            "version": "v0.38.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5970"
            ],
            "fixed_version": "0.39.0",
            "advisory_count": 1,
            "oldest_advisory_days": 7
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "unknown": 2
        },
        "advisory_count": 2,
        "affected_count": 2,
        "assessed_count": 35,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/NVIDIA/go-nvml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.13.3-1"
        },
        {
          "name": "github.com/alecthomas/kingpin/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.4.0"
        },
        {
          "name": "github.com/coreos/go-systemd/v22",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v22.7.0"
        },
        {
          "name": "github.com/kballard/go-shellquote",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20180428030007-95032a82bc51"
        },
        {
          "name": "github.com/neilotoole/slogt/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.0"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.24.0"
        },
        {
          "name": "github.com/prometheus/client_model",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.2"
        },
        {
          "name": "github.com/prometheus/common",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.70.0"
        },
        {
          "name": "github.com/prometheus/exporter-toolkit",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.17.1"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/thejerf/slogassert",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.4"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.22.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/alecthomas/kingpin/v2",
            "direct": true,
            "version": "v2.4.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/coreos/go-systemd/v22",
            "direct": true,
            "version": "v22.7.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kballard/go-shellquote",
            "direct": true,
            "version": "v0.0.0-20180428030007-95032a82bc51",
            "ecosystem": "go"
          },
          {
            "name": "github.com/neilotoole/slogt/v2",
            "direct": true,
            "version": "v2.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nvidia/go-nvml",
            "direct": true,
            "version": "v0.13.3-1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/client_golang",
            "direct": true,
            "version": "v1.24.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/client_model",
            "direct": true,
            "version": "v0.6.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/common",
            "direct": true,
            "version": "v0.70.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/exporter-toolkit",
            "direct": true,
            "version": "v0.17.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/stretchr/testify",
            "direct": true,
            "version": "v1.11.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/thejerf/slogassert",
            "direct": true,
            "version": "v0.3.4",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sync",
            "direct": true,
            "version": "v0.22.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": true,
            "version": "v0.47.0",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": true,
            "version": "v3.0.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alecthomas/units",
            "direct": false,
            "version": "v0.0.0-20240927000941-0f3dac36c52b",
            "ecosystem": "go"
          },
          {
            "name": "github.com/beorn7/perks",
            "direct": false,
            "version": "v1.0.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/cespare/xxhash/v2",
            "direct": false,
            "version": "v2.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/davecgh/go-spew",
            "direct": false,
            "version": "v1.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golang-jwt/jwt/v5",
            "direct": false,
            "version": "v5.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/uuid",
            "direct": false,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/jpillora/backoff",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mdlayher/socket",
            "direct": false,
            "version": "v0.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mdlayher/vsock",
            "direct": false,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/munnerz/goautoneg",
            "direct": false,
            "version": "v0.0.0-20191010083416-a7dc8b61c822",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mwitkow/go-conntrack",
            "direct": false,
            "version": "v0.0.0-20190716064945-2f068394615f",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pmezard/go-difflib",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/procfs",
            "direct": false,
            "version": "v0.21.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/xhit/go-str2duration/v2",
            "direct": false,
            "version": "v2.1.0",
            "ecosystem": "go"
          },
          {
            "name": "go.yaml.in/yaml/v2",
            "direct": false,
            "version": "v2.4.4",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/crypto",
            "direct": false,
            "version": "v0.53.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/net",
            "direct": false,
            "version": "v0.56.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/oauth2",
            "direct": false,
            "version": "v0.36.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/text",
            "direct": false,
            "version": "v0.38.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/time",
            "direct": false,
            "version": "v0.15.0",
            "ecosystem": "go"
          },
          {
            "name": "google.golang.org/protobuf",
            "direct": false,
            "version": "v1.36.11",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 35,
        "direct_count": 14,
        "indirect_count": 21
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 329,
        "open_issues": 7,
        "closed_ratio": 0.939,
        "closed_issues": 108,
        "closed_unmerged_prs": 26
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "utkuozdemir",
          "commits": 113,
          "avatar_url": "https://avatars.githubusercontent.com/u/1465819?v=4"
        },
        {
          "type": "User",
          "login": "renovate-bot",
          "commits": 66,
          "avatar_url": "https://avatars.githubusercontent.com/u/25180681?v=4"
        },
        {
          "type": "User",
          "login": "squat",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/20484159?v=4"
        },
        {
          "type": "User",
          "login": "ametis70",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/17324893?v=4"
        },
        {
          "type": "User",
          "login": "zhan9san",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/32819197?v=4"
        },
        {
          "type": "User",
          "login": "retrodaredevil",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/13205600?v=4"
        },
        {
          "type": "User",
          "login": "mitchtech",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/721340?v=4"
        },
        {
          "type": "User",
          "login": "oguzkilcan",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2721063?v=4"
        },
        {
          "type": "User",
          "login": "koocbor",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/3985177?v=4"
        },
        {
          "type": "User",
          "login": "drigz",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/632207?v=4"
        }
      ],
      "contributors_sampled": 12,
      "top_contributor_share": 0.595
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "15 out of 15 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": 0,
            "reason": "Found 0/21 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "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": 10,
            "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 27 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": 10,
            "reason": "packaging workflow 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": 6,
            "reason": "4 out of the last 5 releases have a total of 4 signed artifacts.",
            "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": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "3779b664584ccebdb77da17741526bd899c5b5fa",
        "ran_at": "2026-07-22T02:47:15Z",
        "aggregate_score": 5.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T19:33:57Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T08:34:10Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 19,
          "created_at": "2021-08-25T05:10:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 116,
          "created_at": "2023-07-29T14:58:53Z",
          "last_comment_at": "2023-08-02T23:26:58Z",
          "last_comment_author": "MillsyBot"
        },
        {
          "number": 423,
          "created_at": "2026-06-30T10:11:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 424,
          "created_at": "2026-06-30T10:11:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 425,
          "created_at": "2026-06-30T10:11:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 444,
          "created_at": "2026-07-04T23:22:07Z",
          "last_comment_at": "2026-07-04T23:25:13Z",
          "last_comment_author": "utkuozdemir"
        },
        {
          "number": 463,
          "created_at": "2026-07-15T21:01:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/utkuozdemir/nvidia_gpu_exporter",
    "host": "github.com",
    "name": "nvidia_gpu_exporter",
    "owner": "utkuozdemir"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 77,
      "inputs": {
        "security": 66,
        "vitality": 88,
        "community": 82,
        "governance": 69,
        "engineering": 80
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 170,
              "human_commit_share": 0.77,
              "days_since_last_push": 0,
              "active_weeks_last_year": 28
            },
            "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": "28/52 weeks with commits",
                "points": 19.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 28
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "170 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 170
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 27 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": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "releases_count": 32,
              "latest_release_tag": "v1.13.0",
              "releases_from_tags": false,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 3.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "32 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "4 out of the last 5 releases have a total of 4 signed artifacts.",
                "points": 6,
                "status": "partial",
                "details": [],
                "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": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 82,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "forks": 149,
              "stars": 1510,
              "watchers": 7,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,510 stars",
                "points": 51.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1510
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "149 forks",
                "points": 18.1,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 149
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "7 watchers",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 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": "moderate",
        "name": "Sustainability & Governance",
        "value": 69,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 12,
              "top_contributor_share": 0.595
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 60% of commits",
                "points": 9.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 60
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "12 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "merged_prs": 329,
              "open_issues": 7,
              "closed_issues": 108,
              "issue_closed_ratio": 0.939,
              "closed_unmerged_prs": 26
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "94% of issues closed",
                "points": 43.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "329/355 decided PRs merged",
                "points": 35.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 329,
                      "decided": 355
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/21 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 65,
            "inputs": {
              "followers": 210,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "utkuozdemir",
              "public_repos": 133,
              "account_age_days": 5262
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "210 followers of utkuozdemir",
                "points": 16.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 210,
                      "login": "utkuozdemir"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "133 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 133
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/utkuozdemir/nvidia_gpu_exporter"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 2
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 2 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "32 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 80,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "15 out of 15 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "prometheus",
                "prometheus-exporter",
                "nvidia-gpu",
                "nvidia",
                "nvidia-smi",
                "monitoring",
                "ai",
                "cryptocurrency",
                "gaming",
                "llm",
                "llm-training",
                "inference",
                "nvml"
              ],
              "has_wiki": false,
              "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": "13 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 66,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.7
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "15 out of 15 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 0/21 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "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.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 27 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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": "4 out of the last 5 releases have a total of 4 signed artifacts.",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "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": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 35 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 35
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 2,
              "affected_packages": 2,
              "assessed_packages": 35,
              "unassessed_packages": 0,
              "affected_by_severity": "unknown 2",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 35,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 15
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 69,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "77 of 77 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 77,
                      "sampled": 77
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.23
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yml"
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "23 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 23,
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 57796,
              "source_files_sampled": 72,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/72 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 72,
                      "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": [],
  "report_type": "repository",
  "generated_at": "2026-07-22T02:47:33.754328Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/u/utkuozdemir/nvidia_gpu_exporter.svg",
  "full_name": "utkuozdemir/nvidia_gpu_exporter",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.