Öffentliches Register
Software-GesundheitsberichtSchema 0.23.0 · Metriken 1.13.0 · 2026-07-21 20:24 UTC

pypa / setuptools-scm

the blessed package to manage your versions by scm tags

PythonKeine Lizenz erkannt★ 950 Sterne⑂ 242 Forksseit Juli 2015Auf GitHub ansehen ↗

pypa/setuptools-scm erreicht einen Gesundheitsindex von 78 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (94/100) ab, am schwächsten bei Security (52/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

78
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.

78
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

2.375 Follower59 öffentliche Reposseit März 2011

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
PyPIsetuptools-scm10.2.1121.922.055106vor 0 Tagen
PyPIvcs-versioning2.2.2111.430.21311vor 22 Tagen

Metriken nach Kategorie

Vitalität

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

94Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
26.3/36Commit-Rhythmus — 38/52 Wochen mit Commits
18/18Commit-Volumen — 732 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year732
human_commit_share0,88
days_since_last_push0
active_weeks_last_year38

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 89 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count89
latest_release_tagsetuptools-scm-v10.2.1
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases3,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

76Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
48.3/60Stars — 950 Stars
19.9/25Forks — 242 Forks
7.2/15Watcher — 21 Watcher
Verwendete Eingangsdaten
forks242
stars950
watchers21
growth_stateorganic
growth_factor_pct100
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein
Wie die Bewertung erfolgt
80/80Downloads pro Monat — 233.352.268 Downloads/Monat über pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagessetuptools-scm, vcs-versioning
dependents
ecosystemspypi
total_downloads
monthly_downloads233.352.268
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

71Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
4.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 81 % der Commits
13.5/13.5Breite der Beitragenden — 96 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 106 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled96
top_contributor_share0,806
Wie die Bewertung erfolgt
45.5/46.8Issue-Lösungsquote — 97 % der Issues geschlossen
33.3/38.3PR-Annahme — 663/761 entschiedene PRs gemergt
1.5/15OpenSSF Scorecard: Code-Review — Found 1/6 approved changesets -- score normalized to 1
Verwendete Eingangsdaten
merged_prs663
open_issues19
closed_issues687
issue_closed_ratio0,973
closed_unmerged_prs98
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
24.3/25Reichweite des Inhabers — 2.375 Follower von pypa
24.9/25Kontohistorie — 59 öffentliche Repos, Kontoalter ca. 15 Jahre
Verwendete Eingangsdaten
followers2.375
owner_typeOrganization
is_verified
owner_loginpypa
public_repos59
account_age_days5.620

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 106 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagessetuptools-scm, vcs-versioning
ecosystemspypi
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

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

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://setuptools-scm.readthedocs.io/en/latest/
10/10Repository-Beschreibung
10/10Topics — 4 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsmetadata, packaging, python, version-control
has_wikinein
homepagehttps://setuptools-scm.readthedocs.io/en/latest/
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

52Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 1/6 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 106 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Lizenz — license file not detected
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
4.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 26 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
7.9/35Direkte Abhängigkeiten ohne bekannte Advisories — 3 betroffen: setuptools 75.3.4 (high 8.8), setuptools 80.9.0 (moderate 6.1), setuptools 82.0.1 (moderate 6.1)
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
32.8/40Keine offenen Advisories — 1 Paket(e) mit Advisory seit über 90 Tagen unbehandelt; ältestes vor 430 Tagen veröffentlicht
Verwendete Eingangsdaten
sourceosv
advisories66
affected_packages16
assessed_packages139
unassessed_packages3
affected_by_severityhigh 9, moderate 6, low 1
direct_affected_packages3
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories. Die verbleibenden Gewichte wurden renormalisiert. 139 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. 3 konnten nicht bewertet werden — keine aufgelöste Version, ein nicht unterstütztes Ökosystem oder außerhalb der ausgewiesenen Paketliste. 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.

76Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 86 von 88 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,977
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes4.620
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 8 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 2 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
9/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesuv.lock
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configssetuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed
agent_commit_share0,08
toolchain_manifests
dependency_bot_commit_share0,02
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — Python mit Typprüfungs-Konfiguration (setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed)
54.6/55Handhabbare Dateigrößen — 1/124 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes62.517
source_files_sampled124
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

950GitHub-Sterne
96Mitwirkende
732Commits, letzte 12 Monate
0Tage seit letztem Push
89Releases
1Bus-Faktor
19offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Could not fetch pypi package 'vcs-versioning.workspace' from its registry
  • deps.dev does not index pypi:setuptools-scm@10.2.1; advisories assessed against the repository dependency graph instead

Weitere Details

Stern- und Fork-Verlauf 950 ★ / 242 ⇿
950Sterne
242Forks
86Releases

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.

02004006008001.000950236102015-072020-122026-06
Major 7Minor 19Patch 39

Jeder Punkt umfasst 11 Tage.

OpenSSF Scorecard 5.1 / 10
5.1Gesamtwert

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-21 20:23 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 1/6 approved changesets -- score normalized to 1
10Contributorsproject has 106 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
9Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 9
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities26 existing vulnerabilities detected
Direkte Abhängigkeiten 10
RegistryPaketVersionsvorgabeManifest
PyPIvcs-versioningpyproject.toml
PyPIsetuptools-scmpyproject.toml
PyPIvcs-versioning>=2.0.0.dev0,<3setuptools-scm/pyproject.toml
PyPIpackaging>=20setuptools-scm/pyproject.toml
PyPIsetuptoolssetuptools-scm/pyproject.toml
PyPItomli>=1setuptools-scm/pyproject.toml
PyPItyping-extensions>=4.1setuptools-scm/pyproject.toml
PyPIpackaging>=20vcs-versioning/pyproject.toml
PyPItomli>=1vcs-versioning/pyproject.toml
PyPItyping-extensions>=4.1vcs-versioning/pyproject.toml
Alle Abhängigkeiten 142

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

RegistryPaketVersionBeziehung
PyPIpackagingdirekt
PyPIpackaging25.0direkt
PyPIpackaging26.2direkt
PyPIsetuptoolsdirekt
PyPIsetuptools75.3.4direkt
PyPIsetuptools80.9.0direkt
PyPIsetuptools82.0.1direkt
PyPItomli2.3.0direkt
PyPItomli2.4.1direkt
PyPItyping-extensions4.13.2direkt
PyPItyping-extensions4.15.0direkt
PyPIvcs-versioningdirekt
PyPIvcs-versioning2.2.0direkt
PyPIast-serialize0.4.0indirekt
PyPIast-serialize0.5.0indirekt
PyPIbabel2.17.0indirekt
PyPIbabel2.18.0indirekt
PyPIbackrefs6.1indirekt
PyPIbackrefs7.0indirekt
PyPIbracex2.6indirekt
PyPIbuild1.2.2.post1indirekt
PyPIbuild1.4.4indirekt
PyPIbuild1.5.0indirekt
PyPIcertifi2025.11.12indirekt
PyPIcertifi2026.6.17indirekt
PyPIcffi1.17.1indirekt
PyPIcffi2.0.0indirekt
PyPIcharset-normalizer3.4.4indirekt
PyPIcharset-normalizer3.4.7indirekt
PyPIclick8.1.8indirekt
PyPIclick8.3.1indirekt
PyPIclick8.4.2indirekt
PyPIcolorama0.4.6indirekt
PyPIcryptography47.0.0indirekt
PyPIcryptography48.0.1indirekt
PyPIexceptiongroup1.3.1indirekt
PyPIexecnet2.1.2indirekt
PyPIflake85.0.4indirekt
PyPIflake87.1.2indirekt
PyPIflake87.3.0indirekt
PyPIghp-import2.1.0indirekt
PyPIgriffe2.1.0indirekt
PyPIgriffe-public-wildcard-imports0.3.1indirekt
PyPIgriffecli2.1.0indirekt
PyPIgriffelib2.1.0indirekt
PyPIidna3.15indirekt
PyPIidna3.18indirekt
PyPIimportlib-metadata8.5.0indirekt
PyPIimportlib-metadata8.7.0indirekt
PyPIimportlib-metadata8.7.1indirekt
PyPIimportlib-metadata9.0.0indirekt
PyPIimportlib-resources6.4.5indirekt
PyPIimportlib-resources6.5.2indirekt
PyPIiniconfig2.1.0indirekt
PyPIiniconfig2.3.0indirekt
PyPIjinja23.1.6indirekt
PyPIlibrt0.11.0indirekt
PyPImarkdown3.10indirekt
PyPImarkdown3.10.2indirekt
PyPImarkdown-it-py3.0.0indirekt
PyPImarkdown-it-py4.0.0indirekt
PyPImarkdown-it-py4.2.0indirekt
PyPImarkupsafe2.1.5indirekt
PyPImarkupsafe3.0.3indirekt
PyPImccabe0.7.0indirekt
PyPImdurl0.1.2indirekt
PyPImergedeep1.3.4indirekt
PyPImkdocs1.6.1indirekt
PyPImkdocs-autorefs1.4.3indirekt
PyPImkdocs-autorefs1.4.4indirekt
PyPImkdocs-get-deps0.2.0indirekt
PyPImkdocs-get-deps0.2.2indirekt
PyPImkdocs-include-markdown-plugin7.3.0indirekt
PyPImkdocs-material9.7.6indirekt
PyPImkdocs-material-extensions1.3.1indirekt
PyPImkdocstrings1.0.4indirekt
PyPImkdocstrings-python2.0.0indirekt
PyPImkdocstrings-python2.0.5indirekt
PyPImypy1.14.1indirekt
PyPImypy1.19.1indirekt
PyPImypy2.1.0indirekt
PyPImypy-extensions1.1.0indirekt
PyPIpaginate0.5.7indirekt
PyPIpathspec1.1.1indirekt
PyPIpip25.0.1indirekt
PyPIpip26.0.1indirekt
PyPIpip26.1.2indirekt
PyPIplatformdirs4.10.0indirekt
PyPIplatformdirs4.5.0indirekt
PyPIpluggy1.5.0indirekt
PyPIpluggy1.6.0indirekt
PyPIpycodestyle2.12.1indirekt
PyPIpycodestyle2.14.0indirekt
PyPIpycodestyle2.9.1indirekt
PyPIpycparser2.23indirekt
PyPIpyflakes2.5.0indirekt
PyPIpyflakes3.2.0indirekt
PyPIpyflakes3.4.0indirekt
PyPIpygithub2.8.1indirekt
PyPIpygithub2.9.0indirekt
PyPIpygments2.19.2indirekt
PyPIpygments2.20.0indirekt
PyPIpyjwt2.13.0indirekt
PyPIpyjwt2.9.0indirekt
PyPIpymdown-extensions10.21.3indirekt
PyPIpymdown-extensions11.0indirekt
PyPIpynacl1.6.2indirekt
PyPIpyproject-hooks1.2.0indirekt
PyPIpytest8.3.5indirekt
PyPIpytest8.4.2indirekt
PyPIpytest9.1.1indirekt
PyPIpytest-timeout2.4.0indirekt
PyPIpytest-xdist3.6.1indirekt
PyPIpytest-xdist3.8.0indirekt
PyPIpython-dateutil2.9.0.post0indirekt
PyPIpyyaml6.0.3indirekt
PyPIpyyaml-env-tag1.1indirekt
PyPIrequests2.32.4indirekt
PyPIrequests2.32.5indirekt
PyPIrequests2.33.0indirekt
PyPIrequests2.34.2indirekt
PyPIrich13.9.4indirekt
PyPIrich14.3.4indirekt
PyPIrich15.0.0indirekt
PyPIruff0.15.20indirekt
PyPIsix1.17.0indirekt
PyPItowncrier24.8.0indirekt
PyPItowncrier25.8.0indirekt
PyPItypes-setuptools75.8.0.20250110indirekt
PyPItypes-setuptools81.0.0.20260209indirekt
PyPItypes-setuptools82.0.0.20260518indirekt
PyPIurllib32.2.3indirekt
PyPIurllib32.6.3indirekt
PyPIurllib32.7.0indirekt
PyPIvcs-versioning-workspace0.1+privateindirekt
PyPIwatchdog3.0.0indirekt
PyPIwatchdog6.0.0indirekt
PyPIwcmatch10.1indirekt
PyPIzipp3.20.2indirekt
PyPIzipp3.23.0indirekt
PyPIzipp3.23.1indirekt
PyPIzipp4.1.0indirekt
Abhängigkeits-Advisories 16

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 139 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 16 tragen bekannte Advisories, davon 3 direkte. 3 konnten nicht bewertet werden – keine aufgelöste Version, ein nicht unterstütztes Ökosystem, oder außerhalb der ausgewiesenen Paketliste.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
setuptools75.3.4direkthoch483.0.0
click8.1.8indirekthoch18.3.3
click8.3.1indirekthoch18.3.3
cryptography47.0.0indirekthoch148.0.1
pip25.0.1indirekthoch1026.1.2
pip26.0.1indirekthoch626.1.2
pyjwt2.9.0indirekthoch132.13.0
urllib32.2.3indirekthoch122.7.0
urllib32.6.3indirekthoch42.7.0
setuptools80.9.0direktmittel283.0.0
setuptools82.0.1direktmittel283.0.0
pytest8.3.5indirektmittel29.0.3
pytest8.4.2indirektmittel29.0.3
requests2.32.4indirektmittel22.33.0
requests2.32.5indirektmittel22.33.0
pygments2.19.2indirektniedrig22.20.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": [
        "metadata",
        "packaging",
        "python",
        "version-control"
      ],
      "is_fork": false,
      "size_kb": 4343,
      "has_wiki": false,
      "homepage": "https://setuptools-scm.readthedocs.io/en/latest/",
      "languages": {
        "Python": 757937
      },
      "pushed_at": "2026-07-21T08:30:50Z",
      "created_at": "2015-07-01T17:57:56Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T08:00:07Z",
      "description": "the blessed package to manage your versions by scm tags",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://www.pypa.io",
      "name": "Python Packaging Authority",
      "type": "Organization",
      "login": "pypa",
      "company": null,
      "location": "United States of America",
      "followers": 2375,
      "avatar_url": "https://avatars.githubusercontent.com/u/647025?v=4",
      "created_at": "2011-03-02T14:17:18Z",
      "is_verified": null,
      "public_repos": 59,
      "account_age_days": 5620
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "setuptools-scm-v10.2.1",
          "kind": "other",
          "published_at": "2026-07-21T07:58:58Z"
        },
        {
          "tag": "vcs-versioning-v2.2.2",
          "kind": "other",
          "published_at": "2026-06-29T13:17:23Z"
        },
        {
          "tag": "vcs-versioning-v2.2.1",
          "kind": "other",
          "published_at": "2026-06-29T05:26:34Z"
        },
        {
          "tag": "vcs-versioning-v2.2.0",
          "kind": "other",
          "published_at": "2026-06-25T05:17:29Z"
        },
        {
          "tag": "setuptools-scm-v10.2.0",
          "kind": "other",
          "published_at": "2026-06-25T05:17:28Z"
        },
        {
          "tag": "vcs-versioning-v2.1.2",
          "kind": "other",
          "published_at": "2026-06-23T21:27:42Z"
        },
        {
          "tag": "vcs-versioning-v2.1.1",
          "kind": "other",
          "published_at": "2026-06-23T10:48:48Z"
        },
        {
          "tag": "vcs-versioning-v2.1.0",
          "kind": "other",
          "published_at": "2026-06-23T04:04:44Z"
        },
        {
          "tag": "setuptools-scm-v10.1.2",
          "kind": "other",
          "published_at": "2026-06-23T04:04:42Z"
        },
        {
          "tag": "vcs-versioning-v2.0.1",
          "kind": "other",
          "published_at": "2026-06-22T14:05:34Z"
        },
        {
          "tag": "setuptools-scm-v10.1.1",
          "kind": "other",
          "published_at": "2026-06-22T14:05:32Z"
        },
        {
          "tag": "vcs-versioning-v2.0.0",
          "kind": "other",
          "published_at": "2026-06-22T13:37:06Z"
        },
        {
          "tag": "setuptools-scm-v10.1.0",
          "kind": "other",
          "published_at": "2026-06-22T13:37:04Z"
        },
        {
          "tag": "vcs-versioning-v1.1.1",
          "kind": "other",
          "published_at": "2026-03-27T20:33:59Z"
        },
        {
          "tag": "setuptools-scm-v10.0.5",
          "kind": "other",
          "published_at": "2026-03-27T15:48:19Z"
        },
        {
          "tag": "vcs-versioning-v1.1.0",
          "kind": "other",
          "published_at": "2026-03-27T14:02:18Z"
        },
        {
          "tag": "setuptools-scm-v10.0.4",
          "kind": "other",
          "published_at": "2026-03-27T14:02:17Z"
        },
        {
          "tag": "setuptools-scm-v10.0.3",
          "kind": "other",
          "published_at": "2026-03-26T12:40:17Z"
        },
        {
          "tag": "setuptools-scm-v10.0.2",
          "kind": "other",
          "published_at": "2026-03-25T16:22:11Z"
        },
        {
          "tag": "vcs-versioning-v1.0.1",
          "kind": "other",
          "published_at": "2026-03-19T15:20:23Z"
        },
        {
          "tag": "setuptools-scm-v10.0.1",
          "kind": "other",
          "published_at": "2026-03-19T15:20:18Z"
        },
        {
          "tag": "setuptools-scm-v10.0.0",
          "kind": "other",
          "published_at": "2026-02-26T11:11:58Z"
        },
        {
          "tag": "v9.2.2",
          "kind": "patch",
          "published_at": "2025-10-19T22:00:33Z"
        },
        {
          "tag": "v9.2.1",
          "kind": "patch",
          "published_at": "2025-10-12T13:28:24Z"
        },
        {
          "tag": "v9.2.0",
          "kind": "minor",
          "published_at": "2025-08-16T12:49:56Z"
        },
        {
          "tag": "v9.1.1",
          "kind": "patch",
          "published_at": "2025-08-11T14:05:18Z"
        },
        {
          "tag": "v9.1.0",
          "kind": "minor",
          "published_at": "2025-08-11T09:57:34Z"
        },
        {
          "tag": "v9.0.3",
          "kind": "patch",
          "published_at": "2025-08-05T19:34:09Z"
        },
        {
          "tag": "v9.0.2",
          "kind": "patch",
          "published_at": "2025-08-05T17:02:19Z"
        },
        {
          "tag": "v9.0.1",
          "kind": "patch",
          "published_at": "2025-08-05T11:27:39Z"
        },
        {
          "tag": "v9.0.0",
          "kind": "major",
          "published_at": "2025-08-04T09:14:22Z"
        },
        {
          "tag": "v8.3.1",
          "kind": "patch",
          "published_at": "2025-04-23T11:48:20Z"
        },
        {
          "tag": "v8.3.0",
          "kind": "minor",
          "published_at": "2025-04-22T09:30:46Z"
        },
        {
          "tag": "v8.1.0",
          "kind": "minor",
          "published_at": "2024-05-06T15:02:02Z"
        },
        {
          "tag": "v8.0.4",
          "kind": "patch",
          "published_at": "2023-10-02T15:08:38Z"
        },
        {
          "tag": "v8.0.3",
          "kind": "patch",
          "published_at": "2023-09-22T08:28:01Z"
        },
        {
          "tag": "v8.0.2",
          "kind": "patch",
          "published_at": "2023-09-21T09:29:45Z"
        },
        {
          "tag": "v8.0.1",
          "kind": "patch",
          "published_at": "2023-09-20T12:02:04Z"
        },
        {
          "tag": "v8.0.0",
          "kind": "major",
          "published_at": "2023-09-20T10:33:32Z"
        },
        {
          "tag": "v7.1.0",
          "kind": "minor",
          "published_at": "2022-12-17T15:59:27Z"
        },
        {
          "tag": "v7.0.5",
          "kind": "patch",
          "published_at": "2022-07-11T12:26:57Z"
        },
        {
          "tag": "v7.0.4",
          "kind": "patch",
          "published_at": "2022-07-01T10:23:42Z"
        },
        {
          "tag": "v7.0.3",
          "kind": "patch",
          "published_at": "2022-06-28T20:24:32Z"
        },
        {
          "tag": "v7.0.2",
          "kind": "patch",
          "published_at": "2022-06-22T11:37:26Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2022-06-21T19:58:23Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2022-06-21T13:21:34Z"
        },
        {
          "tag": "v6.4.2",
          "kind": "patch",
          "published_at": "2022-01-19T10:32:28Z"
        },
        {
          "tag": "v6.4.1",
          "kind": "patch",
          "published_at": "2022-01-18T10:52:11Z"
        },
        {
          "tag": "v6.4.0",
          "kind": "minor",
          "published_at": "2022-01-17T19:46:14Z"
        },
        {
          "tag": "v6.3.2",
          "kind": "patch",
          "published_at": "2021-09-11T19:20:03Z"
        },
        {
          "tag": "v6.3.1",
          "kind": "patch",
          "published_at": "2021-09-10T22:54:41Z"
        },
        {
          "tag": "v6.3.0",
          "kind": "minor",
          "published_at": "2021-09-03T14:59:18Z"
        },
        {
          "tag": "v5.0.1",
          "kind": "patch",
          "published_at": "2020-12-13T22:17:40Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2020-12-12T19:16:55Z"
        },
        {
          "tag": "v4.1.2",
          "kind": "patch",
          "published_at": "2020-05-31T12:34:11Z"
        },
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2020-05-25T18:27:09Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2020-05-24T10:36:57Z"
        },
        {
          "tag": "v3.5.0",
          "kind": "minor",
          "published_at": "2020-02-13T20:02:27Z"
        },
        {
          "tag": "v3.4.3",
          "kind": "patch",
          "published_at": "2020-01-22T21:26:57Z"
        },
        {
          "tag": "v3.4.1",
          "kind": "patch",
          "published_at": "2020-01-18T07:49:20Z"
        },
        {
          "tag": "v3.3.1",
          "kind": "patch",
          "published_at": "2019-05-10T12:34:41Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2019-01-16T19:26:24Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2018-08-09T06:32:24Z"
        },
        {
          "tag": "v3.0.6",
          "kind": "patch",
          "published_at": "2018-07-31T16:23:10Z"
        },
        {
          "tag": "v3.0.5",
          "kind": "patch",
          "published_at": "2018-07-30T09:25:45Z"
        },
        {
          "tag": "v3.0.4",
          "kind": "patch",
          "published_at": "2018-07-28T19:27:38Z"
        },
        {
          "tag": "v3.0.3",
          "kind": "patch",
          "published_at": "2018-07-24T08:26:30Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2018-07-23T18:11:19Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2018-07-23T13:44:53Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2018-07-23T11:32:47Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2018-05-13T08:56:00Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2018-04-10T08:27:10Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2018-03-20T10:14:31Z"
        },
        {
          "tag": "v1.16.2",
          "kind": "patch",
          "published_at": "2018-03-20T07:19:50Z"
        },
        {
          "tag": "v1.16.1",
          "kind": "patch",
          "published_at": "2018-03-19T15:57:57Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2018-03-19T09:57:26Z"
        },
        {
          "tag": "v1.15.6",
          "kind": "patch",
          "published_at": "2017-06-15T19:23:41Z"
        },
        {
          "tag": "v1.15.5",
          "kind": "patch",
          "published_at": "2017-04-08T16:48:32Z"
        },
        {
          "tag": "v1.15.4",
          "kind": "patch",
          "published_at": "2017-04-08T12:39:43Z"
        },
        {
          "tag": "v1.15.3",
          "kind": "patch",
          "published_at": "2017-04-07T21:17:01Z"
        },
        {
          "tag": "1.15.0",
          "kind": "minor",
          "published_at": "2016-10-20T21:54:34Z"
        },
        {
          "tag": "v1.15.0rc1",
          "kind": "other",
          "published_at": "2016-10-20T17:02:57Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2016-10-12T20:35:34Z"
        },
        {
          "tag": "v1.14.0rc1",
          "kind": "other",
          "published_at": "2016-10-12T19:01:13Z"
        },
        {
          "tag": "v1.13.1",
          "kind": "patch",
          "published_at": "2016-10-11T09:33:13Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2016-10-05T19:27:03Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2016-10-05T14:50:33Z"
        },
        {
          "tag": "v1.11.1",
          "kind": "patch",
          "published_at": "2016-06-12T21:09:25Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2016-04-06T08:36:49Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ac108b243380c10de77de32eb696b74d5f5eb63f",
          "body": "Release: setuptools-scm v10.2.1",
          "is_bot": false,
          "headline": "Merge pull request #1475 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-07-21T07:58:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3beed6744fea5ead505f7b4635f624b51b769fb",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: setuptools-scm v10.2.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T07:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec67f8c628c89da807dcaaa5b8d9f781c86aff68",
          "body": "…adata-from-wheels\n\nfix: omit SCM egg-info JSON from wheels",
          "is_bot": false,
          "headline": "Merge pull request #1474 from RonnyPfannschmidt/fix/1473-omit-scm-met…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-07-21T07:40:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08f22bdc0fe75b08db380dc7bc7e034c89310c87",
          "body": "Avoid ImportError when wheel is not installed during sdist-only\nbuilds, and use Path.unlink(missing_ok=True) for SCM metadata cleanup.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Cursor Grok 4.5 <grok@x.ai>",
          "is_bot": false,
          "headline": "fix: lazy-import bdist_wheel and simplify unlink",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-07-20T16:18:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82768f083db8780d2b2c568a1cc2102b20c82c44",
          "body": "Sdists still include scm_version.json and scm_file_list.json for\nfallback discovery. setuptools egg2dist was copying them into\n.dist-info; strip them after conversion so wheels do not ship them.\n\nFixes #1473\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Cursor Grok 4.5 <grok@x.ai>",
          "is_bot": false,
          "headline": "fix: omit SCM egg-info JSON from wheels",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-07-20T16:03:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b91e2faf0079157a52c0914c21beb6622e9f7a7",
          "body": "chore(deps-dev): Bump ruff from 0.15.18 to 0.15.20 in the uv group across 1 directory",
          "is_bot": false,
          "headline": "Merge pull request #1460 from pypa/dependabot/uv/uv-f4f52c089d",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T15:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac172459cd14cad465060efe50040a6caa6b983",
          "body": "Release: vcs-versioning v2.2.2",
          "is_bot": false,
          "headline": "Merge pull request #1463 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T13:17:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "474cc9ce72e20ef3dcfd99465b0b28a244007607",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: vcs-versioning v2.2.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T13:07:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29c8f6ce7e739c0bd84388def43043a91475d4c2",
          "body": "…test-timeout\n\nfix: add missing pytest-timeout to vcs-versioning test dependencies",
          "is_bot": false,
          "headline": "Merge pull request #1462 from RonnyPfannschmidt/fix/vcs-versioning-py…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T13:06:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25d32eee6b99cfc40fd97229ff68cdaa68ffbcff",
          "body": "…#1461)\n\nThe pytest config has `timeout = 300` but pytest-timeout was not listed\nin the test dependency group, causing sdist builds/tests to fail.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: add missing pytest-timeout to vcs-versioning test dependencies (…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T11:41:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "353b1bf6a90ce61a8b5303b59a0b28247a80940a",
          "body": "Bumps the uv group with 1 update in the / directory: [ruff](https://github.com/astral-sh/ruff).\n\n\nUpdates `ruff` from 0.15.18 to 0.15.20\n- [Release notes](https://github.com/astral-sh/ruff/releases)\n- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)\n- [Commits](https://github.co\n[…]\name: ruff\n  dependency-version: 0.15.20\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: uv\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): Bump ruff in the uv group across 1 directory",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T07:10:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bde7fda9d5c293473ca5ea7328a146591f39f9a4",
          "body": "fix: add rich>=13 lower bound to prevent dependabot downgrade",
          "is_bot": false,
          "headline": "Merge pull request #1459 from RonnyPfannschmidt/fix/rich-lower-bound",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T07:05:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12067de583ac34600dd00e815eda0ebdce25853c",
          "body": "Dependabot's uv integration incorrectly treats rich 0.1.0 (from 2019,\nno requires-python metadata) as an upgrade from 14.3.4 for the\nPython <3.9 resolution fork. Adding a lower bound prevents this.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: add rich>=13 lower bound to prevent dependabot downgrade",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T05:50:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bce35da2aeb7ba7b301336690190084ad23ef33",
          "body": "Release: vcs-versioning v2.2.1",
          "is_bot": false,
          "headline": "Merge pull request #1456 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T05:26:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0aeb3dd8e82d9d4feb44646ec28e13239310d7fc",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: vcs-versioning v2.2.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T05:24:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8de8a826b8f5d1e2b904e953dad79f10d0b0c544",
          "body": "low hanging chores",
          "is_bot": false,
          "headline": "Merge pull request #1457 from RonnyPfannschmidt/chore/debt-cleanup",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-29T05:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a6ae3701ae21fbed10c3d59612cf040857c8259",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'upstream/main' into chore/debt-cleanup",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-28T19:16:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a2a0d7fbf9c4d9392048cd662dd403f9d7ef1fd",
          "body": "Remove stale Dockerfiles (busted-buster, rawhide-git) and play_out_381.bash\nfrom testing_scm/. Update INTEGRATION_MIGRATION_PLAN.md with current paths\nafter the monorepo restructure (testing/ → testing_scm/, test_git.py →\ntest_setuptools_git.py, canonical imports from vcs_versioning).\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: clean up stale test artifacts and update migration plan",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-28T19:14:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4c30de65044894762411dd231d16b1d42bf0490",
          "body": "Phase 6 (Type Tightening):\n- Add _DistWithScm cast target, replace type: ignore[attr-defined] with cast()\n- Narrow _discover.py signatures to use Configuration and concrete return types\n- Tighten get_version() kwargs: ParseFunction, Version, VcsEnvironment\n\nPhase 5 corrections:\n- Mark 5a (fallback v\n[…]\nnction APIs, inverting the dependency direction\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: type tightening and debt doc corrections (Phase 6 + 5a/5d)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-28T18:30:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "73e213bbf0aaf166988304d81e96e5e011d7ae14",
          "body": "…ctions-14db7af2f3\n\nchore(deps): Bump actions/setup-python from 6.2.0 to 6.3.0 in the github-actions group",
          "is_bot": false,
          "headline": "Merge pull request #1452 from pypa/dependabot/github_actions/github-a…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-28T06:58:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "879e044273950878db818e08f1aa8f875d951e28",
          "body": "- Added a new function `collect_files_and_dirs` to normalize VCS file listings into absolute sets of files and directories.\n- Refactored `_git_ls_files_and_dirs`, `_hg_ls_files_and_dirs`, and `_jj_ls_files_and_dirs` to utilize the new helper function, reducing code duplication and improving maintainability.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: introduce collect_files_and_dirs helper for VCS file normalization",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-28T00:05:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efaf0e68855338fb477a1903b65385ce82ffa407",
          "body": "- Documented the fix for passing `project_root` in egg_info for proper file discovery in monorepo setups in setuptools-scm.\n- Added a note about scoping `list_tracked_files` to `project_root` to prevent sibling project files from being included in sdists when `root=\"..\"` is configured in vcs-versioning.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelogs with recent fixes",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-27T23:38:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d4096ccaa483afd8d7823e94ff925bb2b3afe57",
          "body": "…ked-relative-path\n\nfix: resolve relative paths in _warn_if_tracked (#1451)",
          "is_bot": false,
          "headline": "Merge pull request #1454 from RonnyPfannschmidt/fix/1451-warn-if-trac…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-27T23:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58d23cc41c01a8c4e241824c65079a0d170cec5a",
          "body": "Path.is_relative_to was added in Python 3.9.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use try/except instead of is_relative_to for Python 3.8 compat",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-27T23:19:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0db0cd94742670db17f63f1f79f98f7a476686cc",
          "body": "doc: fix simple configuration example in README.md",
          "is_bot": false,
          "headline": "Merge pull request #1455 from tydeu/patch-1",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-27T22:58:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efd9032d25c753e99b77a7c75a561d1f9dd26a24",
          "body": null,
          "is_bot": true,
          "headline": "style: pre-commit fixes",
          "author_name": "pre-commit-ci[bot]",
          "author_login": "pre-commit-ci[bot]",
          "committed_at": "2026-06-27T21:18:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2f2972e9bf5b51ee78baf42a429a759efbe4756",
          "body": null,
          "is_bot": false,
          "headline": "doc: fix simple configuration example in README.md",
          "author_name": "Mac Malone",
          "author_login": "tydeu",
          "committed_at": "2026-06-27T21:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "122d71dc4ca5fb16c297547a9cee272583725993",
          "body": "_warn_if_tracked crashed with ValueError when the version file target\nwas a relative path and root was absolute. Now resolves relative targets\nagainst root before comparison, and warns (skipping the write) when the\ntarget resolves outside the project root.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve relative paths in _warn_if_tracked (#1451)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-26T18:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0314785e9e9bead759ae4a2edcf4aae9b4ab601f",
          "body": "Bumps the github-actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).\n\n\nUpdates `actions/setup-python` from 6.2.0 to 6.3.0\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/a309ff8b\n[…]\n\n  dependency-version: 6.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): Bump actions/setup-python in the github-actions group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-26T18:22:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f197f859ed1a101398ee66741bcbad360e214e9e",
          "body": "- Use [project.scripts] instead of [project.entry-points.console_scripts]\n- Use towncrier-fragments version scheme in setup.py to match pyproject.toml\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: align build config conventions in setuptools-scm",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-26T08:10:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1753cb4533deb8c056e4f5c646df378346968516",
          "body": "- Remove pytest-cov from vcs-versioning test group (coverage now at root)\n- Remove [tool.coverage.*] from vcs-versioning/pyproject.toml\n- Remove mkdocs-entangled-plugin from setuptools-scm docs group\n- Update pre-commit mypy pytest pin from ==7.1 to >=8\n- Remove stale type: ignore revealed by updated pytest stubs\n- Regenerate all lock files\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: trim unused dependencies and update pre-commit pytest pin",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-26T07:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba215a70a88bbd35ecf0961c8b1a1301c940629e",
          "body": "- Sync pytest ini_options (timeout, filterwarnings, markers, log levels,\n  xfail_strict) across root, setuptools-scm, and vcs-versioning pyproject.toml\n- Add lock_packages.py workspace tool to generate per-package uv.lock files\n  by temporarily hiding the workspace root\n- Update MANIFEST.in to inclu\n[…]\ntest config sync requirement in CONTRIBUTING.md\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: consolidate pytest config and add per-package uv.lock",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-26T06:05:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7fd71cb79595996c4417bef76193de57fc2750a0",
          "body": "…mmand\n\nRemove vestigial `_DEFAULT_SUBPROCESS_TIMEOUT` from `_run_cmd.py` and\n`_DEFAULT_HG_COMMAND` from `_backends/_hg.py`. Both were defined but\nunused after the VcsEnvironment refactor centralized defaults in\n`_environment.py` (the only location that actually uses them as\ndataclass field defaults).\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: deduplicate default constants for subprocess timeout and hg co…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T11:16:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2c79d903119853cef7020f44b93511f5e90eaf1",
          "body": "- Fix \"infernce\" typo in setuptools.py docstring\n- Fix \"trnasion\" typo in pyproject.toml comment\n- Add `from __future__ import annotations` to deprecation.py\n- Narrow `scm_version: Any` to `ScmVersion | None` in\n  version_inference.py (with TYPE_CHECKING import)\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: fix typos and tighten type annotations",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T11:13:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6706eb74b73effd720cc62fc30ff2f2eaa85b67",
          "body": "- mypy.ini: contained wrong path (nextgen/vcs-versioning/src),\n  superseded by root pyproject.toml [tool.mypy]\n- tox.ini: not used in CI, superseded by uv + pytest workflow\n- MANIFEST.in: remove references to deleted files\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: remove stale mypy.ini and tox.ini from setuptools-scm",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T10:50:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f06023e762aa33493f84a6a7114befed9fa2000",
          "body": "The except block in tag_to_version (introduced in 82587cc for #1019)\nretried the identical failing version_cls() call, making it dead code\nthat would always re-raise. Replace with a graceful return None on\nparse failure, matching the function's documented return type.\n\nThe suffix preservation logic \n[…]\nVersion rejects the combined string)\n- custom version_cls rejection returning None with warning\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: simplify tag_to_version error handling for unparseable versions",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T09:30:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56dedccc5e13440fe768a91e3f29be7ec9169b46",
          "body": "- Remove unused legacy aliases `assert_path_endswith` and\n  `compute_path_prefix` from `_compat.py` (zero callers)\n- Remove unused `_SENTINEL_TAG_CONFIG` from `_config.py`\n- Remove unused `_ROOT` constant from `pyproject_reading.py`\n- Remove empty `if TYPE_CHECKING: pass` block from `_standard.py`\n-\n[…]\n`# noqa: F401 - for type checking` on `_overrides.py`\n  import that is actually used at runtime\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "chore: remove dead code and fix misleading noqa comment",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T09:05:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a70589150e28f43aded5852eed09765f69bfff66",
          "body": "Release: setuptools-scm v10.2.0, vcs-versioning v2.2.0",
          "is_bot": false,
          "headline": "Merge pull request #1448 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-25T05:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "630448e286a636eb378b449541b1c96819cb9d05",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: setuptools-scm v10.2.0, vcs-versioning v2.2.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-24T19:13:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaf4950434a9b06c99e5fcdbd720f5abbd04345d",
          "body": "feat: restore Python 3.8 and 3.9 support",
          "is_bot": false,
          "headline": "Merge pull request #1445 from RonnyPfannschmidt/python-legacy",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-24T19:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd60bf93ed795243e5b1d60b093dae76e390d00b",
          "body": "…-tests\n\nfix: move PKG-INFO discovery tests to setuptools-scm",
          "is_bot": false,
          "headline": "Merge pull request #1447 from RonnyPfannschmidt/fix/1446-move-pkginfo…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-24T19:11:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535f5ff5f505635a4401f91f46f4b152e6a062f2",
          "body": "These tests depend on the pkginfo entry point registered by\nsetuptools-scm. Running vcs-versioning tests without setuptools-scm\ninstalled caused them to fail.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: move PKG-INFO discovery tests to setuptools-scm (#1446)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-24T18:57:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3546a0e2c02dd093601cce206b1a4cf42f783fd0",
          "body": "Re-enable Python 3.8+ compatibility to allow use as a build dependency\nfor projects like scikit-build that still support these versions.\n\nChanges:\n- Lower requires-python to >=3.8 in all packages\n- Add version-guarded imports for typing_extensions (TypeAlias,\n  ParamSpec, Concatenate, TypeGuard) on \n[…]\nenthesized with-statement (3.9+ syntax) in test\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: restore Python 3.8 and 3.9 support",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-24T08:12:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0cde12385f2bc90c90287c8ca2e2e8f7e423fd45",
          "body": "Release: vcs-versioning v2.1.2",
          "is_bot": false,
          "headline": "Merge pull request #1443 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T21:27:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51bc391cec1f651a7038a6e8e19ba317f92ee75e",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: vcs-versioning v2.1.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-23T21:26:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "310f3c35e978132d8b61d3c808fcdd9ab08a7d72",
          "body": "…kdir-custom-tag-regex\n\nfix: don't re-parse stored tags through tag_regex in MetadataWorkdir",
          "is_bot": false,
          "headline": "Merge pull request #1442 from RonnyPfannschmidt/fix/1439-metadata-wor…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T21:26:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7b70a8769dfa70df77ada852b5030e626a7faab",
          "body": "…(#1439)\n\nscm_version.json stores already-parsed version strings (e.g. \"1.5.5\"),\nnot raw VCS tags (e.g. \"cuda-pathfinder-v1.5.5\"). MetadataWorkdir now\nconverts the stored tag to a version_cls instance before passing to\nmeta(), so _parse_tag skips tag_regex matching entirely.\n\nAlso replaces the bare \n[…]\narse_tag/meta with a descriptive\nValueError that includes the tag, regex pattern, and prefix.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: don't re-parse stored tags through tag_regex in MetadataWorkdir …",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T20:55:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b640c6a9539aea5b48dfa9bd3a37a0af157a7ac",
          "body": "…st-file-scoping\n\nfix: scope list_tracked_files to project_root in monorepos",
          "is_bot": false,
          "headline": "Merge pull request #1441 from RonnyPfannschmidt/fix/1440-monorepo-sdi…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T20:47:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65bc4445a8930894f13392d4557012006d6db1aa",
          "body": "In monorepo setups with root=\"..\", list_tracked_files() was walking\nthe entire VCS root instead of just the project directory. This caused\nsdists to include files from sibling projects.\n\nReplace the project_root dataclass field with a _ProjectRootDescriptor\nthat defaults to self.path when no value i\n[…]\nalled the now-removed\nsuper().__post_init__()).\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: scope list_tracked_files to project_root in monorepos (#1440)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T16:06:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a71ed76798bfcea91371abe16fbef5a6e6ac226e",
          "body": "FallbackWorkdir.project_root is a property that always returns path\n(fallback workdirs live at the project root by definition).\n\nPromotes project_root from ScmWorkdirProtocol to the base\nWorkdirProtocol so all workdir types expose a uniform interface.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: add project_root to FallbackWorkdir and WorkdirProtocol",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T14:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93d8fa875b41a1b71d48a5d4f5ea214d00758810",
          "body": "Ensures subprocess timeout is honored when probing whether a version\nfile is tracked by VCS.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: pass config to from_potential_worktree in _warn_if_tracked",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T14:56:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc4864ecd33ce7c5cf64b1377084a7a0063c2ae1",
          "body": "Release: vcs-versioning v2.1.1",
          "is_bot": false,
          "headline": "Merge pull request #1437 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T10:48:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c96a9f6c01306f4740dd0f3077ca4ec37bedc788",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: vcs-versioning v2.1.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-23T09:41:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6263e29b00a2feec12ee92e45a43b196e973ae1",
          "body": "…regex-deprecation-warning\n\nfix: don't emit DeprecationWarning for default tag_regex in get_version()",
          "is_bot": false,
          "headline": "Merge pull request #1436 from RonnyPfannschmidt/fix/1434-default-tag-…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T09:40:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a683f6830f78b0d71fc0fa4a94ddffca02ac5aa",
          "body": "…on()\n\nget_version() had tag_regex=DEFAULT_TAG_REGEX as a default parameter,\nwhich always passed through to Configuration.__post_init__ and triggered\na spurious DeprecationWarning even when the caller didn't explicitly set\ntag_regex.\n\nChange get_version() to default tag_regex=None and translate a pr\n[…]\nitVar path is bypassed\nentirely.\n\nFixes #1434\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: don't emit DeprecationWarning for default tag_regex in get_versi…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T08:59:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fa1c6e29dce8f490d34cdf69b87e730dc11d6077",
          "body": "Release: setuptools-scm v10.1.2, vcs-versioning v2.1.0",
          "is_bot": false,
          "headline": "Merge pull request #1427 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-23T04:04:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e8b86526d1db8a6733f0855eb4d605821343781",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: setuptools-scm v10.1.2, vcs-versioning v2.1.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-22T22:36:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b447622d21f35f93a93abe68f77570185e306e34",
          "body": "…covery-priority\n\nfix: don't let unprocessed .git_archival.txt shadow PKG-INFO (#1431)",
          "is_bot": false,
          "headline": "Merge pull request #1432 from RonnyPfannschmidt/fix/1431-fallback-dis…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T22:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d79683c242664877ef809b5d61de553725d92498",
          "body": "The fallback discovery stashed only the first FallbackWorkdir candidate,\nso an unprocessed .git_archival.txt (with raw $Format placeholders from\na non-git-archive sdist) would claim the sole slot and return None,\npreventing PKG-INFO from ever being tried.\n\nCollect all fallback candidates and return the first whose\nget_scm_version() succeeds.\n\nCloses #1431\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: don't let unprocessed .git_archival.txt shadow PKG-INFO (#1431)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T22:12:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "651e9bf4fb79128eaa0e2af2222d0f5eadcc344d",
          "body": "…-strict-warnings\n\nfix: suppress conflicting tag.strict warnings",
          "is_bot": false,
          "headline": "Merge pull request #1430 from RonnyPfannschmidt/fix/1422-suppress-tag…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T21:55:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dba8afa3daf99183a061800cbce612511370a44",
          "body": "The `run()` helper used `encoding=\"utf-8\"` without error handling,\ncausing UnicodeDecodeError on Windows when git outputs non-UTF-8 bytes\n(e.g. Windows-1252 encoded paths). This made test_pkginfo_noscmroot\nflaky on Windows CI.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use surrogateescape for subprocess encoding on Windows",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T21:43:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2480097c1a820773f68f46b3161b49acc19e4318",
          "body": "…-version\n\nfix: add backward-compat shim for parse_version (#1423)",
          "is_bot": false,
          "headline": "Merge pull request #1428 from RonnyPfannschmidt/fix/compat-shim-parse…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:48:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42c97f94f360343980de90790476d8a9cefe8d66",
          "body": "The tag.strict FutureWarning and the \"both tag.prefix/tag.strict and\ndescribe_command are set\" UserWarning created an unwinnable situation\nfor users with a custom describe_command. Downgrade both to debug-level\nlog messages until proper non-conflicting logic is implemented (#1429).\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: suppress conflicting tag.strict warnings (#1422)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:37:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c17c0ea7268d75b96b479e1fc34245784d281a0",
          "body": "setuptools-scm <=10.0.x imports `parse_version` from\n`vcs_versioning._get_version_impl`, which was removed in the 2.0\nrefactor.  Re-export a thin shim so older setuptools-scm releases\nwork with newer vcs-versioning.\n\nAlso add a cautionary `<3` upper pin on vcs-versioning in\nsetuptools-scm to prevent future cross-package breakage.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: add backward-compat shim for parse_version (#1423)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:28:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a841b68aa242a9826cccfa62758a47df641990a8",
          "body": "Fix DeprecationWarning leak in pretend API (#1424)",
          "is_bot": false,
          "headline": "Merge pull request #1426 from RonnyPfannschmidt/warning-fixes",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c94f3279d5b00bad0b9c694ac11ff291ae3b6da",
          "body": "Co-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add changelog fragments for #1424",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:12:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7eb892c4692ef926f2140a74556bb52ea6586fc3",
          "body": "Add read_toml_overrides(dist_name) method to VcsEnvironment that\nencapsulates tool_names and env dict lookup, returning the typed\nConfigOverridesDict. Update callers in _integrator_helpers.py and\n_config.py to use env.read_toml_overrides() when a VcsEnvironment is\navailable, removing manual tool_names/env parameter threading.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: add env.read_toml_overrides() and update callers",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:10:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87530b0a9c2d495adce730be98ff4a6ab9d36be9",
          "body": "…ould_write_to_source\n\n- Add env field to VersionInferenceConfig dataclass so the resolved\n  VcsEnvironment is carried through the setuptools hook -> apply ->\n  infer_version_with_config call chain\n- Fix _should_write_to_source to use config.env.make_reader() instead\n  of manually constructing EnvReader with os.environ, ensuring consistent\n  environment handling\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: thread VcsEnvironment through VersionInferenceConfig and fix _sh…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:05:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0204bb67c21d18eb9bc5c4127ae86b27d8ddfc35",
          "body": "Add canonical env-first methods for Configuration creation:\n- env.build_config_from_data(relative_to, data) for pre-assembled dicts\n- env.build_config_from_pyproject(pyproject_data, dist_name=...) for the\n  full integrator workflow\n- env.pyproject_tool_names() to derive TOML section names from env-v\n[…]\nonfiguration_from_pyproject public API to delegate through\nenv.build_config_from_pyproject().\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add VcsEnvironment config factory methods and pyproject_tool_names",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T20:03:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7611c7b0651fb40b4166dbd51a9198b0dd567ca",
          "body": "infer_version_string and build_configuration_from_pyproject were creating\nConfiguration objects without a VcsEnvironment, causing a\nDeprecationWarning to leak when the pretend-version code path accessed\nconfig.env to read environment variables.\n\nThe root cause was that these APIs called Configuratio\n[…]\nr helpers use env.tool_names instead of deriving from\n  pyproject_data.tool_name\n\nFixes #1424\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: ensure public APIs always attach VcsEnvironment to Configuration",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T19:58:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b59248f423f79b8fd790515c609db66461b294c2",
          "body": "Release: setuptools-scm v10.1.1, vcs-versioning v2.0.1",
          "is_bot": false,
          "headline": "Merge pull request #1342 from pypa/release/main",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T14:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd14aaf9504a445f9555c8e5d258e67020e41a4",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: setuptools-scm v10.1.1, vcs-versioning v2.0.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-22T14:03:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72a4eec1a4aef93a1fe4f9f87734c2049a72ae65",
          "body": "fix(ci): update PyPy 3.10 to PyPy 3.11 in test matrix",
          "is_bot": false,
          "headline": "Merge pull request #1421 from RonnyPfannschmidt/fix/pypy-3.11",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T14:03:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bbee8aaff83030b96bfe439b6b2066eb11d352b",
          "body": "cryptography has no build available for PyPy 3.10, causing release\npipeline failures. Update to PyPy 3.11.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): update PyPy 3.10 to PyPy 3.11 in test matrix",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T13:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b11690e9e424e75047f649c3fa9bafebdcdc31c",
          "body": "Release: setuptools-scm v10.1.0, vcs-versioning v2.0.0",
          "is_bot": false,
          "headline": "Merge pull request #1345 from pypa/release/develop",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T13:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dbe0af2936b62fe0a3340613fd326193b559949",
          "body": null,
          "is_bot": true,
          "headline": "Prepare release: setuptools-scm v10.1.0, vcs-versioning v2.0.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-22T11:27:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4cbbf32f1e181e03b1a5675643c7f1b4329bfb3",
          "body": "fix: add dist_name to setup.py get_version() calls",
          "is_bot": false,
          "headline": "Merge pull request #1419 from RonnyPfannschmidt/fix/setup-py-dist-name",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T11:26:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1084ff3eb646d791e3bcbb3e664e6d6c13033cdb",
          "body": "Without dist_name, the pretend version env vars like\nSETUPTOOLS_SCM_PRETEND_VERSION_FOR_SETUPTOOLS_SCM and\nVCS_VERSIONING_PRETEND_VERSION_FOR_VCS_VERSIONING are never\nchecked (only generic SETUPTOOLS_SCM_PRETEND_VERSION is tried).\n\nThis fixes the release branch CI where the github-script step\ncorrec\n[…]\n env vars but they were silently ignored\nduring the PEP 517 build because dist_name was None.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: add dist_name to setup.py get_version() calls",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T10:58:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16dd9adfcd044cac1e0eea74a8b160679fcda70f",
          "body": "…rsioning\n\nfix(ci): set pretend versions on release PRs to fix wheel builds",
          "is_bot": false,
          "headline": "Merge pull request #1418 from RonnyPfannschmidt/fix/release-branch-ve…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T10:46:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35242d14b8dfcfa142f51adaf1f26f9ca824373f",
          "body": "On release branches, towncrier removes changelog fragments causing the\ntowncrier-fragments version scheme to fall back to guess-next-dev (patch\nbump). This produces wrong versions (e.g. vcs-versioning 1.1.2.dev instead\nof 2.0.0.dev) breaking setuptools-scm's dependency on vcs-versioning>=2.0.0.\n\nFix\n[…]\nso use --no-deps for wheel install\nsince uv sync already resolves all workspace dependencies.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): set pretend versions on release PRs to fix wheel builds",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T10:34:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c64dbcbcae12d8759f0bf085d4e5ab786dc8e3b8",
          "body": "…op-2026-06-22\n\nMerge main into develop (2026-06-22)",
          "is_bot": false,
          "headline": "Merge pull request #1417 from RonnyPfannschmidt/merge/main-into-devel…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T09:38:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04a73b4c33c639cd5127eb9f154b9c7e6567e901",
          "body": "…elop",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'upstream/main' into merge/main-into-dev…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T09:12:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5863013c288c18f086a40ef145389d429b95e1ec",
          "body": "…og-fragments\n\ndocs: add missing changelog fragments for develop",
          "is_bot": false,
          "headline": "Merge pull request #1416 from RonnyPfannschmidt/chore/missing-changel…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T08:58:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46a92c539949cc5651ebcdf368b183983815b140",
          "body": "Add fragments covering changes since the last releases that were\nnot yet documented:\n\n- setuptools-scm #1378: workdir-centric pipeline and egg-info metadata\n- vcs-versioning #1238: no-local-version-strict local scheme\n- vcs-versioning #468: warn when version file is tracked in VCS\n- vcs-versioning #1359: override user VCS aliases in subprocesses\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add missing changelog fragments for develop",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T08:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e94999ab7358261b7e4b08d4dfc98859d72897eb",
          "body": "feat: add native Jujutsu (jj) VCS backend",
          "is_bot": false,
          "headline": "Merge pull request #1415 from RonnyPfannschmidt/feature/jj-backend",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T07:58:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4989fa813a88c0253dbe44d121d350667c16ad48",
          "body": "jj git init fails on Windows with \"os error 3\" (ERROR_PATH_NOT_FOUND)\nbecause jj's operation store uses 128-char hex hashes as filenames.\nCombined with the pytest temp directory base path (~103 chars) and\nthe .jj/repo/op_store/operations/ prefix, the total path reaches\n261 chars — exactly 1 over the\n[…]\n key HKLM\\...\\FileSystem\\LongPathsEnabled = 1\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: enable Windows long paths for jj operation IDs",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T07:22:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a8a5c26de44fb7c6f6b174f7baa6f757b0aaf7d",
          "body": "On Windows, temp directories may involve junction points that cause\n`wd.cwd / \".jj\"` to not find the .jj directory created by jj. Use\n`wd.cwd.resolve()` before checking for VCS markers and passing paths\nto discovery, matching what JjWorkdir.from_potential_worktree does.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve paths in jj colocated tests for Windows compatibility",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T06:11:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac94345af65ff3e48fbace61d275d64d5d15ba02",
          "body": "- Fix get_branch() to check @- first (where bookmarks live in jj),\n  falling back to @ — previously only checked @ which is the empty\n  working copy commit and typically has no bookmarks\n- Add disable_jj to VcsEnvironment.export() so the setting round-trips\n  to subprocesses\n- Document that jj has n\n[…]\n not mounted when using\n  git fallback\n- Update index.md file inclusion warning to mention jj\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: review fixes for jj backend docs and code",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T06:06:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0c4245977a05c2635763c2931e13bec0c57d78ac",
          "body": "…considerations\n\n- Add Jujutsu section to usage.md covering detection, tags, distance\n  semantics, file finder, and Docker/container opt-out\n- Document SETUPTOOLS_SCM_DISABLE_JJ env var in config.md\n- Update index.md and config.md to mention jj alongside git/hg\n- Add jj node prefix (j) to Node ID Prefixes section\n- Update changelog fragment to mention DISABLE_JJ opt-out\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "docs: document Jujutsu (jj) support, DISABLE_JJ env var, and special …",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T05:50:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3808e79006e719afec7ff2767c6e3d85cc1076c1",
          "body": "Adds a VcsEnvironment setting (readable via SETUPTOOLS_SCM_DISABLE_JJ=1\nor VCS_VERSIONING_DISABLE_JJ=1) that skips jj backend discovery and\nfalls back to git/hg. This is a safety valve for users who have .jj/\ndirectories but run builds in containers or CI environments without jj\ninstalled, where the\n[…]\n would be disruptive.\n\nThe error message for missing jj binary now also mentions the env var.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add DISABLE_JJ environment variable to opt out of jj discovery",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T05:43:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c291474025155bf8222e84c2af4cea3d6e7b1705",
          "body": "Add first-class support for Jujutsu version control:\n\n- New JjWorkdir backend using native jj commands for version inference\n  (tags, distance, dirty state, branch/bookmark detection)\n- Discovery probes .jj/ before .git and raises a clear LookupError when\n  jj is detected but not installed (no silen\n[…]\nommit, so dirty-on-tag gives\ndistance=1 (the working copy commit itself) rather than git's 0.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add native Jujutsu (jj) VCS backend (#1070)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-22T05:36:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb8e74c3a995441d3091a24c233928aee72c4ae3",
          "body": "…pp-oidc\n\ndocs: rewrite GHA example with BAIPP and OIDC Trusted Publishers",
          "is_bot": false,
          "headline": "Merge pull request #1414 from RonnyPfannschmidt/fix/1215-gha-docs-bai…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T22:11:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e4d3ec3346076abaf4a68c638936f7602f34ad2",
          "body": "Fixes #1215 — the previous example built packages inside publishing\njobs and used long-lived API tokens, which is the opposite of what\npypa/gh-action-pypi-publish recommends.\n\nThe new example follows the PyPA publishing guide:\n- Dedicated build job using hynek/build-and-inspect-python-package\n- Arti\n[…]\nated similarly with a build stage and id_tokens\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: rewrite GHA example with BAIPP and OIDC Trusted Publishers",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T22:00:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "984388f085175c4187149cfa0812f52d31108125",
          "body": "…-relative-paths\n\nfix(test): correct worktree test to expect relative paths (#620)",
          "is_bot": false,
          "headline": "Merge pull request #1413 from RonnyPfannschmidt/fix/620-worktree-test…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T21:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ab06f6772b60be07640e665053d0fbbd46c0e5a",
          "body": "The file finder returns paths relative to the input path, so `./test.txt`\nis the correct output — not an absolute worktree path. The old assertion\nwas wrong and masked by a blanket xfail.\n\nRemove the incorrect absolute-path assertion and narrow the xfail to\nWindows only, where subprocess fails with NotADirectoryError in git\nworktree directories.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4.6 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): correct worktree test to expect relative paths (#620)",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T21:49:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df28bd3e8e246e4a543eaeda94755995d0e0792a",
          "body": "…rict-hg-modernize\n\nfeat: first-class tag.prefix, tag.strict, and tag.regex configuration",
          "is_bot": false,
          "headline": "Merge pull request #1412 from RonnyPfannschmidt/feature/tag-prefix-st…",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T21:06:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bcbe243e9d3e2bedda350477c1cfbfe91ff7622",
          "body": "- Restore wd.default_describe() call in version_from_describe so hg-git\n  workdirs use their own describe implementation instead of raw git commands\n- Move tag config awareness into GitWorkdir.default_describe() so the\n  tag.prefix/strict settings are still respected for pure git workdirs\n- Handle l\n[…]\nistance\n- Filter FutureWarning/DeprecationWarning in test that asserts no\n  unexpected warnings\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve CI failures in hg and hg-git test suites",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T20:51:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f12e777ec5a5de92e796a30ac777be3f0bc6dbb1",
          "body": "Update config.md with the new Tag Matching Configuration section\ncovering tag.prefix, tag.strict, and tag.regex with composition\ntables and migration notes.\n\nUpdate usage.md with practical examples for filtering non-version\ntags, monorepo tag prefixes, and custom tag patterns using the\nnew configuration options.\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "docs: document tag.prefix, tag.strict, and tag.regex configuration",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T20:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d603816041f18a0233af8a24f83fcc47dac7806",
          "body": "Move the tag_regex field from Configuration top-level into\nTagConfiguration.regex as the canonical location (tag.regex in TOML).\n\nThe old top-level tag_regex is now a deprecated InitVar + descriptor\nthat proxies to tag.regex, following the same pattern as the\ngit_describe_command -> scm.git.describe\n[…]\nwhen both are specified\n- dataclasses.replace() avoids mutating shared TagConfiguration objects\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: move tag_regex into tag.regex with backward compat shim",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T20:10:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ef6539c8ce14a4f5072da1041d3091ea5d46975",
          "body": "Introduce TagConfiguration with two orthogonal options:\n- tag.prefix: literal prefix for monorepo tag filtering (e.g. \"hatchling-v\")\n- tag.strict: tri-state (None/True/False) requiring dots in version tags\n\nBoth compose to auto-generate the git describe --match glob.\nFutureWarning emitted when tag.s\n[…]\nupport for hg repos.\n\nCloses #862, closes #1072, closes #1385, closes #1335\nSupersedes PR #1386\n\nCo-authored-by: Cursor AI <ai@cursor.sh>\nCo-authored-by: Anthropic Claude Opus 4 <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add tag.prefix and tag.strict config, modernize hg latesttag",
          "author_name": "Ronny Pfannschmidt",
          "author_login": "RonnyPfannschmidt",
          "committed_at": "2026-06-21T20:06:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 89,
      "commits_last_year": 732,
      "latest_release_at": "2026-07-21T07:58:58Z",
      "latest_release_tag": "setuptools-scm-v10.2.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 38,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 3.2
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "setuptools-scm",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "Development Status :: 5 - Production/Stable",
            "Intended Audience :: Developers",
            "Programming Language :: Python",
            "Programming Language :: Python :: 3 :: Only",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Python :: 3.14",
            "Programming Language :: Python :: 3.8",
            "Programming Language :: Python :: 3.9",
            "Topic :: Software Development :: Libraries",
            "Topic :: Software Development :: Version Control",
            "Topic :: System :: Software Distribution",
            "Topic :: Utilities"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/setuptools-scm/",
          "is_deprecated": false,
          "latest_version": "10.2.1",
          "repository_url": "https://github.com/pypa/setuptools-scm/",
          "versions_count": 106,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 121922055,
          "first_published_at": "2015-02-23T19:12:49.295042Z",
          "latest_published_at": "2026-07-21T08:08:04.553782Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vcs-versioning",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "Development Status :: 4 - Beta",
            "Programming Language :: Python",
            "Programming Language :: Python :: 3 :: Only",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Python :: 3.14",
            "Programming Language :: Python :: 3.8",
            "Programming Language :: Python :: 3.9"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vcs-versioning/",
          "is_deprecated": false,
          "latest_version": "2.2.2",
          "repository_url": "https://github.com/pypa/setuptools-scm",
          "versions_count": 11,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 111430213,
          "first_published_at": "2023-02-09T20:41:23.040889Z",
          "latest_published_at": "2026-06-29T13:26:06.901602Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 22
        }
      ]
    },
    "popularity": {
      "forks": 242,
      "stars": 950,
      "watchers": 21,
      "fork_history": {
        "days": [
          {
            "date": "2015-07-20",
            "count": 1
          },
          {
            "date": "2015-07-23",
            "count": 1
          },
          {
            "date": "2015-08-12",
            "count": 1
          },
          {
            "date": "2015-08-27",
            "count": 1
          },
          {
            "date": "2015-09-13",
            "count": 1
          },
          {
            "date": "2015-09-17",
            "count": 1
          },
          {
            "date": "2015-10-01",
            "count": 1
          },
          {
            "date": "2015-10-05",
            "count": 1
          },
          {
            "date": "2015-10-21",
            "count": 1
          },
          {
            "date": "2015-11-12",
            "count": 1
          },
          {
            "date": "2015-11-27",
            "count": 1
          },
          {
            "date": "2016-01-14",
            "count": 1
          },
          {
            "date": "2016-01-31",
            "count": 1
          },
          {
            "date": "2016-02-01",
            "count": 1
          },
          {
            "date": "2016-04-06",
            "count": 1
          },
          {
            "date": "2016-04-21",
            "count": 1
          },
          {
            "date": "2016-05-27",
            "count": 1
          },
          {
            "date": "2016-08-05",
            "count": 1
          },
          {
            "date": "2016-08-29",
            "count": 1
          },
          {
            "date": "2016-09-04",
            "count": 1
          },
          {
            "date": "2016-10-14",
            "count": 1
          },
          {
            "date": "2016-10-18",
            "count": 1
          },
          {
            "date": "2016-10-24",
            "count": 1
          },
          {
            "date": "2017-01-07",
            "count": 1
          },
          {
            "date": "2017-01-22",
            "count": 1
          },
          {
            "date": "2017-02-22",
            "count": 1
          },
          {
            "date": "2017-03-03",
            "count": 1
          },
          {
            "date": "2017-03-14",
            "count": 1
          },
          {
            "date": "2017-05-22",
            "count": 1
          },
          {
            "date": "2017-10-31",
            "count": 1
          },
          {
            "date": "2017-11-02",
            "count": 1
          },
          {
            "date": "2017-11-14",
            "count": 1
          },
          {
            "date": "2017-12-05",
            "count": 2
          },
          {
            "date": "2017-12-13",
            "count": 1
          },
          {
            "date": "2018-02-28",
            "count": 1
          },
          {
            "date": "2018-03-08",
            "count": 1
          },
          {
            "date": "2018-03-19",
            "count": 2
          },
          {
            "date": "2018-03-20",
            "count": 1
          },
          {
            "date": "2018-03-25",
            "count": 1
          },
          {
            "date": "2018-03-27",
            "count": 1
          },
          {
            "date": "2018-04-25",
            "count": 1
          },
          {
            "date": "2018-06-11",
            "count": 1
          },
          {
            "date": "2018-06-30",
            "count": 2
          },
          {
            "date": "2018-07-01",
            "count": 1
          },
          {
            "date": "2018-07-17",
            "count": 1
          },
          {
            "date": "2018-07-26",
            "count": 1
          },
          {
            "date": "2018-08-02",
            "count": 1
          },
          {
            "date": "2018-08-14",
            "count": 1
          },
          {
            "date": "2018-10-06",
            "count": 1
          },
          {
            "date": "2018-10-15",
            "count": 1
          },
          {
            "date": "2018-10-27",
            "count": 1
          },
          {
            "date": "2018-12-12",
            "count": 1
          },
          {
            "date": "2019-01-10",
            "count": 1
          },
          {
            "date": "2019-01-19",
            "count": 1
          },
          {
            "date": "2019-03-29",
            "count": 1
          },
          {
            "date": "2019-04-16",
            "count": 1
          },
          {
            "date": "2019-07-19",
            "count": 1
          },
          {
            "date": "2019-09-04",
            "count": 1
          },
          {
            "date": "2019-09-12",
            "count": 1
          },
          {
            "date": "2019-10-14",
            "count": 1
          },
          {
            "date": "2019-11-11",
            "count": 1
          },
          {
            "date": "2019-11-25",
            "count": 1
          },
          {
            "date": "2019-11-26",
            "count": 1
          },
          {
            "date": "2019-12-01",
            "count": 1
          },
          {
            "date": "2019-12-14",
            "count": 1
          },
          {
            "date": "2020-01-09",
            "count": 1
          },
          {
            "date": "2020-01-25",
            "count": 1
          },
          {
            "date": "2020-01-26",
            "count": 1
          },
          {
            "date": "2020-02-26",
            "count": 1
          },
          {
            "date": "2020-03-25",
            "count": 1
          },
          {
            "date": "2020-04-01",
            "count": 2
          },
          {
            "date": "2020-04-05",
            "count": 1
          },
          {
            "date": "2020-04-06",
            "count": 1
          },
          {
            "date": "2020-05-06",
            "count": 2
          },
          {
            "date": "2020-05-11",
            "count": 1
          },
          {
            "date": "2020-05-17",
            "count": 1
          },
          {
            "date": "2020-05-25",
            "count": 1
          },
          {
            "date": "2020-05-27",
            "count": 1
          },
          {
            "date": "2020-06-11",
            "count": 1
          },
          {
            "date": "2020-06-24",
            "count": 1
          },
          {
            "date": "2020-07-24",
            "count": 1
          },
          {
            "date": "2020-08-12",
            "count": 1
          },
          {
            "date": "2020-08-22",
            "count": 1
          },
          {
            "date": "2020-09-08",
            "count": 1
          },
          {
            "date": "2020-10-26",
            "count": 1
          },
          {
            "date": "2020-11-03",
            "count": 1
          },
          {
            "date": "2020-11-23",
            "count": 3
          },
          {
            "date": "2020-11-25",
            "count": 1
          },
          {
            "date": "2020-12-11",
            "count": 1
          },
          {
            "date": "2020-12-12",
            "count": 1
          },
          {
            "date": "2021-01-13",
            "count": 1
          },
          {
            "date": "2021-01-25",
            "count": 1
          },
          {
            "date": "2021-01-29",
            "count": 1
          },
          {
            "date": "2021-02-01",
            "count": 1
          },
          {
            "date": "2021-02-25",
            "count": 1
          },
          {
            "date": "2021-03-10",
            "count": 2
          },
          {
            "date": "2021-03-16",
            "count": 1
          },
          {
            "date": "2021-03-18",
            "count": 1
          },
          {
            "date": "2021-03-19",
            "count": 1
          },
          {
            "date": "2021-04-10",
            "count": 1
          },
          {
            "date": "2021-04-15",
            "count": 1
          },
          {
            "date": "2021-04-23",
            "count": 2
          },
          {
            "date": "2021-06-01",
            "count": 1
          },
          {
            "date": "2021-06-11",
            "count": 1
          },
          {
            "date": "2021-08-05",
            "count": 1
          },
          {
            "date": "2021-08-27",
            "count": 1
          },
          {
            "date": "2021-08-31",
            "count": 1
          },
          {
            "date": "2021-09-05",
            "count": 2
          },
          {
            "date": "2021-09-25",
            "count": 1
          },
          {
            "date": "2021-10-20",
            "count": 1
          },
          {
            "date": "2021-10-21",
            "count": 1
          },
          {
            "date": "2021-10-28",
            "count": 1
          },
          {
            "date": "2021-10-29",
            "count": 2
          },
          {
            "date": "2021-11-06",
            "count": 1
          },
          {
            "date": "2021-11-15",
            "count": 1
          },
          {
            "date": "2021-12-08",
            "count": 1
          },
          {
            "date": "2022-01-06",
            "count": 1
          },
          {
            "date": "2022-01-28",
            "count": 1
          },
          {
            "date": "2022-02-07",
            "count": 1
          },
          {
            "date": "2022-02-12",
            "count": 1
          },
          {
            "date": "2022-02-15",
            "count": 1
          },
          {
            "date": "2022-03-16",
            "count": 1
          },
          {
            "date": "2022-04-07",
            "count": 1
          },
          {
            "date": "2022-04-08",
            "count": 1
          },
          {
            "date": "2022-04-25",
            "count": 1
          },
          {
            "date": "2022-04-30",
            "count": 1
          },
          {
            "date": "2022-06-21",
            "count": 1
          },
          {
            "date": "2022-06-22",
            "count": 2
          },
          {
            "date": "2022-06-29",
            "count": 1
          },
          {
            "date": "2022-06-30",
            "count": 1
          },
          {
            "date": "2022-07-09",
            "count": 1
          },
          {
            "date": "2022-07-28",
            "count": 1
          },
          {
            "date": "2022-08-03",
            "count": 1
          },
          {
            "date": "2022-08-19",
            "count": 1
          },
          {
            "date": "2022-08-29",
            "count": 1
          },
          {
            "date": "2022-09-11",
            "count": 1
          },
          {
            "date": "2022-10-11",
            "count": 1
          },
          {
            "date": "2022-10-14",
            "count": 1
          },
          {
            "date": "2022-10-22",
            "count": 1
          },
          {
            "date": "2022-11-27",
            "count": 1
          },
          {
            "date": "2022-12-31",
            "count": 1
          },
          {
            "date": "2023-01-25",
            "count": 1
          },
          {
            "date": "2023-01-26",
            "count": 1
          },
          {
            "date": "2023-02-02",
            "count": 1
          },
          {
            "date": "2023-02-10",
            "count": 1
          },
          {
            "date": "2023-02-27",
            "count": 1
          },
          {
            "date": "2023-03-14",
            "count": 1
          },
          {
            "date": "2023-03-28",
            "count": 1
          },
          {
            "date": "2023-04-13",
            "count": 1
          },
          {
            "date": "2023-04-25",
            "count": 2
          },
          {
            "date": "2023-04-28",
            "count": 1
          },
          {
            "date": "2023-05-10",
            "count": 1
          },
          {
            "date": "2023-05-17",
            "count": 1
          },
          {
            "date": "2023-05-21",
            "count": 1
          },
          {
            "date": "2023-05-23",
            "count": 1
          },
          {
            "date": "2023-06-01",
            "count": 1
          },
          {
            "date": "2023-06-06",
            "count": 1
          },
          {
            "date": "2023-06-12",
            "count": 1
          },
          {
            "date": "2023-06-15",
            "count": 1
          },
          {
            "date": "2023-08-21",
            "count": 1
          },
          {
            "date": "2023-09-13",
            "count": 1
          },
          {
            "date": "2023-09-20",
            "count": 3
          },
          {
            "date": "2023-09-22",
            "count": 1
          },
          {
            "date": "2023-09-29",
            "count": 1
          },
          {
            "date": "2023-10-13",
            "count": 1
          },
          {
            "date": "2023-10-26",
            "count": 1
          },
          {
            "date": "2023-11-07",
            "count": 1
          },
          {
            "date": "2023-11-12",
            "count": 1
          },
          {
            "date": "2023-11-14",
            "count": 1
          },
          {
            "date": "2023-12-05",
            "count": 1
          },
          {
            "date": "2023-12-06",
            "count": 1
          },
          {
            "date": "2024-01-02",
            "count": 1
          },
          {
            "date": "2024-02-14",
            "count": 1
          },
          {
            "date": "2024-02-19",
            "count": 1
          },
          {
            "date": "2024-03-14",
            "count": 1
          },
          {
            "date": "2024-03-22",
            "count": 1
          },
          {
            "date": "2024-05-02",
            "count": 1
          },
          {
            "date": "2024-05-14",
            "count": 1
          },
          {
            "date": "2024-06-08",
            "count": 1
          },
          {
            "date": "2024-06-10",
            "count": 1
          },
          {
            "date": "2024-07-20",
            "count": 1
          },
          {
            "date": "2024-08-15",
            "count": 1
          },
          {
            "date": "2024-08-23",
            "count": 1
          },
          {
            "date": "2024-11-14",
            "count": 1
          },
          {
            "date": "2024-11-24",
            "count": 1
          },
          {
            "date": "2024-11-28",
            "count": 1
          },
          {
            "date": "2025-01-03",
            "count": 1
          },
          {
            "date": "2025-02-12",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 3
          },
          {
            "date": "2025-02-23",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 1
          },
          {
            "date": "2025-03-17",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2025-06-11",
            "count": 1
          },
          {
            "date": "2025-07-10",
            "count": 1
          },
          {
            "date": "2025-07-24",
            "count": 1
          },
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-08-17",
            "count": 1
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2026-01-15",
            "count": 1
          },
          {
            "date": "2026-01-23",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-24",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 2
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 2
          },
          {
            "date": "2026-06-15",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 236,
        "total_forks": 242
      },
      "star_history": {
        "days": [
          {
            "date": "2015-07-02",
            "count": 1
          },
          {
            "date": "2015-07-21",
            "count": 1
          },
          {
            "date": "2015-07-22",
            "count": 1
          },
          {
            "date": "2015-07-23",
            "count": 1
          },
          {
            "date": "2015-08-02",
            "count": 1
          },
          {
            "date": "2015-08-08",
            "count": 1
          },
          {
            "date": "2015-08-23",
            "count": 1
          },
          {
            "date": "2015-09-01",
            "count": 1
          },
          {
            "date": "2015-09-14",
            "count": 2
          },
          {
            "date": "2015-09-30",
            "count": 1
          },
          {
            "date": "2015-10-30",
            "count": 1
          },
          {
            "date": "2015-11-12",
            "count": 1
          },
          {
            "date": "2015-11-27",
            "count": 1
          },
          {
            "date": "2015-11-28",
            "count": 4
          },
          {
            "date": "2015-12-12",
            "count": 1
          },
          {
            "date": "2016-01-15",
            "count": 1
          },
          {
            "date": "2016-01-18",
            "count": 1
          },
          {
            "date": "2016-02-09",
            "count": 1
          },
          {
            "date": "2016-02-10",
            "count": 1
          },
          {
            "date": "2016-02-15",
            "count": 1
          },
          {
            "date": "2016-02-23",
            "count": 1
          },
          {
            "date": "2016-02-27",
            "count": 1
          },
          {
            "date": "2016-03-01",
            "count": 1
          },
          {
            "date": "2016-03-09",
            "count": 1
          },
          {
            "date": "2016-03-10",
            "count": 1
          },
          {
            "date": "2016-04-09",
            "count": 1
          },
          {
            "date": "2016-04-15",
            "count": 1
          },
          {
            "date": "2016-04-25",
            "count": 1
          },
          {
            "date": "2016-05-09",
            "count": 1
          },
          {
            "date": "2016-05-19",
            "count": 1
          },
          {
            "date": "2016-06-07",
            "count": 1
          },
          {
            "date": "2016-06-13",
            "count": 2
          },
          {
            "date": "2016-06-25",
            "count": 1
          },
          {
            "date": "2016-06-29",
            "count": 1
          },
          {
            "date": "2016-07-07",
            "count": 1
          },
          {
            "date": "2016-07-15",
            "count": 1
          },
          {
            "date": "2016-07-22",
            "count": 1
          },
          {
            "date": "2016-08-01",
            "count": 1
          },
          {
            "date": "2016-08-23",
            "count": 1
          },
          {
            "date": "2016-09-01",
            "count": 1
          },
          {
            "date": "2016-09-02",
            "count": 1
          },
          {
            "date": "2016-09-06",
            "count": 1
          },
          {
            "date": "2016-09-16",
            "count": 1
          },
          {
            "date": "2016-09-23",
            "count": 1
          },
          {
            "date": "2016-09-30",
            "count": 1
          },
          {
            "date": "2016-10-08",
            "count": 1
          },
          {
            "date": "2016-10-19",
            "count": 1
          },
          {
            "date": "2016-10-20",
            "count": 1
          },
          {
            "date": "2016-10-21",
            "count": 1
          },
          {
            "date": "2016-10-24",
            "count": 1
          },
          {
            "date": "2016-11-17",
            "count": 1
          },
          {
            "date": "2016-11-27",
            "count": 1
          },
          {
            "date": "2016-12-27",
            "count": 1
          },
          {
            "date": "2016-12-28",
            "count": 1
          },
          {
            "date": "2016-12-30",
            "count": 1
          },
          {
            "date": "2017-01-03",
            "count": 1
          },
          {
            "date": "2017-01-06",
            "count": 1
          },
          {
            "date": "2017-01-07",
            "count": 1
          },
          {
            "date": "2017-01-19",
            "count": 1
          },
          {
            "date": "2017-01-20",
            "count": 1
          },
          {
            "date": "2017-01-26",
            "count": 1
          },
          {
            "date": "2017-02-01",
            "count": 1
          },
          {
            "date": "2017-02-05",
            "count": 1
          },
          {
            "date": "2017-02-25",
            "count": 1
          },
          {
            "date": "2017-03-13",
            "count": 1
          },
          {
            "date": "2017-03-14",
            "count": 3
          },
          {
            "date": "2017-03-15",
            "count": 2
          },
          {
            "date": "2017-03-22",
            "count": 1
          },
          {
            "date": "2017-04-17",
            "count": 1
          },
          {
            "date": "2017-04-22",
            "count": 1
          },
          {
            "date": "2017-04-25",
            "count": 1
          },
          {
            "date": "2017-05-10",
            "count": 1
          },
          {
            "date": "2017-05-19",
            "count": 2
          },
          {
            "date": "2017-05-24",
            "count": 1
          },
          {
            "date": "2017-06-10",
            "count": 1
          },
          {
            "date": "2017-06-18",
            "count": 1
          },
          {
            "date": "2017-06-23",
            "count": 1
          },
          {
            "date": "2017-06-28",
            "count": 1
          },
          {
            "date": "2017-07-27",
            "count": 2
          },
          {
            "date": "2017-07-28",
            "count": 1
          },
          {
            "date": "2017-08-02",
            "count": 1
          },
          {
            "date": "2017-08-03",
            "count": 1
          },
          {
            "date": "2017-08-18",
            "count": 1
          },
          {
            "date": "2017-08-30",
            "count": 1
          },
          {
            "date": "2017-08-31",
            "count": 1
          },
          {
            "date": "2017-09-05",
            "count": 1
          },
          {
            "date": "2017-09-08",
            "count": 2
          },
          {
            "date": "2017-09-10",
            "count": 1
          },
          {
            "date": "2017-09-12",
            "count": 1
          },
          {
            "date": "2017-09-16",
            "count": 1
          },
          {
            "date": "2017-09-18",
            "count": 1
          },
          {
            "date": "2017-10-04",
            "count": 1
          },
          {
            "date": "2017-10-24",
            "count": 1
          },
          {
            "date": "2017-11-02",
            "count": 1
          },
          {
            "date": "2017-11-09",
            "count": 1
          },
          {
            "date": "2017-11-17",
            "count": 1
          },
          {
            "date": "2017-11-19",
            "count": 1
          },
          {
            "date": "2017-11-22",
            "count": 2
          },
          {
            "date": "2017-11-24",
            "count": 1
          },
          {
            "date": "2017-12-03",
            "count": 1
          },
          {
            "date": "2017-12-05",
            "count": 2
          },
          {
            "date": "2017-12-06",
            "count": 2
          },
          {
            "date": "2017-12-10",
            "count": 1
          },
          {
            "date": "2017-12-13",
            "count": 2
          },
          {
            "date": "2017-12-14",
            "count": 1
          },
          {
            "date": "2017-12-21",
            "count": 1
          },
          {
            "date": "2018-01-08",
            "count": 1
          },
          {
            "date": "2018-01-12",
            "count": 1
          },
          {
            "date": "2018-01-22",
            "count": 1
          },
          {
            "date": "2018-01-30",
            "count": 1
          },
          {
            "date": "2018-02-05",
            "count": 1
          },
          {
            "date": "2018-02-15",
            "count": 1
          },
          {
            "date": "2018-02-19",
            "count": 1
          },
          {
            "date": "2018-02-26",
            "count": 1
          },
          {
            "date": "2018-03-02",
            "count": 1
          },
          {
            "date": "2018-03-08",
            "count": 1
          },
          {
            "date": "2018-03-09",
            "count": 2
          },
          {
            "date": "2018-03-12",
            "count": 1
          },
          {
            "date": "2018-03-22",
            "count": 1
          },
          {
            "date": "2018-03-23",
            "count": 4
          },
          {
            "date": "2018-03-28",
            "count": 1
          },
          {
            "date": "2018-03-31",
            "count": 1
          },
          {
            "date": "2018-04-05",
            "count": 2
          },
          {
            "date": "2018-04-18",
            "count": 1
          },
          {
            "date": "2018-04-20",
            "count": 1
          },
          {
            "date": "2018-04-27",
            "count": 1
          },
          {
            "date": "2018-05-03",
            "count": 1
          },
          {
            "date": "2018-05-10",
            "count": 2
          },
          {
            "date": "2018-05-17",
            "count": 3
          },
          {
            "date": "2018-06-01",
            "count": 1
          },
          {
            "date": "2018-06-02",
            "count": 1
          },
          {
            "date": "2018-06-25",
            "count": 1
          },
          {
            "date": "2018-07-05",
            "count": 1
          },
          {
            "date": "2018-07-06",
            "count": 1
          },
          {
            "date": "2018-07-20",
            "count": 1
          },
          {
            "date": "2018-07-23",
            "count": 1
          },
          {
            "date": "2018-07-27",
            "count": 1
          },
          {
            "date": "2018-08-01",
            "count": 1
          },
          {
            "date": "2018-08-02",
            "count": 1
          },
          {
            "date": "2018-08-03",
            "count": 1
          },
          {
            "date": "2018-08-07",
            "count": 1
          },
          {
            "date": "2018-08-13",
            "count": 1
          },
          {
            "date": "2018-08-14",
            "count": 1
          },
          {
            "date": "2018-08-15",
            "count": 1
          },
          {
            "date": "2018-08-17",
            "count": 1
          },
          {
            "date": "2018-08-19",
            "count": 1
          },
          {
            "date": "2018-08-21",
            "count": 1
          },
          {
            "date": "2018-08-24",
            "count": 1
          },
          {
            "date": "2018-10-01",
            "count": 1
          },
          {
            "date": "2018-10-06",
            "count": 1
          },
          {
            "date": "2018-10-16",
            "count": 2
          },
          {
            "date": "2018-10-19",
            "count": 1
          },
          {
            "date": "2018-10-22",
            "count": 1
          },
          {
            "date": "2018-10-24",
            "count": 2
          },
          {
            "date": "2018-10-27",
            "count": 1
          },
          {
            "date": "2018-10-28",
            "count": 1
          },
          {
            "date": "2018-10-29",
            "count": 1
          },
          {
            "date": "2018-11-06",
            "count": 1
          },
          {
            "date": "2018-11-12",
            "count": 1
          },
          {
            "date": "2018-11-19",
            "count": 1
          },
          {
            "date": "2018-11-24",
            "count": 1
          },
          {
            "date": "2018-12-12",
            "count": 2
          },
          {
            "date": "2018-12-14",
            "count": 1
          },
          {
            "date": "2018-12-18",
            "count": 2
          },
          {
            "date": "2019-01-08",
            "count": 1
          },
          {
            "date": "2019-01-21",
            "count": 1
          },
          {
            "date": "2019-01-23",
            "count": 1
          },
          {
            "date": "2019-01-24",
            "count": 1
          },
          {
            "date": "2019-01-27",
            "count": 2
          },
          {
            "date": "2019-02-15",
            "count": 2
          },
          {
            "date": "2019-02-18",
            "count": 1
          },
          {
            "date": "2019-02-19",
            "count": 2
          },
          {
            "date": "2019-02-20",
            "count": 1
          },
          {
            "date": "2019-02-24",
            "count": 1
          },
          {
            "date": "2019-03-26",
            "count": 1
          },
          {
            "date": "2019-03-27",
            "count": 1
          },
          {
            "date": "2019-04-02",
            "count": 1
          },
          {
            "date": "2019-04-09",
            "count": 1
          },
          {
            "date": "2019-04-19",
            "count": 1
          },
          {
            "date": "2019-04-20",
            "count": 2
          },
          {
            "date": "2019-04-26",
            "count": 1
          },
          {
            "date": "2019-04-27",
            "count": 1
          },
          {
            "date": "2019-04-29",
            "count": 1
          },
          {
            "date": "2019-05-02",
            "count": 1
          },
          {
            "date": "2019-05-04",
            "count": 1
          },
          {
            "date": "2019-05-08",
            "count": 1
          },
          {
            "date": "2019-05-13",
            "count": 1
          },
          {
            "date": "2019-05-14",
            "count": 2
          },
          {
            "date": "2019-05-15",
            "count": 2
          },
          {
            "date": "2019-05-22",
            "count": 2
          },
          {
            "date": "2019-05-23",
            "count": 1
          },
          {
            "date": "2019-05-24",
            "count": 2
          },
          {
            "date": "2019-05-27",
            "count": 1
          },
          {
            "date": "2019-06-04",
            "count": 1
          },
          {
            "date": "2019-06-05",
            "count": 1
          },
          {
            "date": "2019-06-06",
            "count": 1
          },
          {
            "date": "2019-06-10",
            "count": 3
          },
          {
            "date": "2019-06-11",
            "count": 1
          },
          {
            "date": "2019-06-17",
            "count": 1
          },
          {
            "date": "2019-06-20",
            "count": 1
          },
          {
            "date": "2019-06-21",
            "count": 1
          },
          {
            "date": "2019-06-23",
            "count": 1
          },
          {
            "date": "2019-06-28",
            "count": 1
          },
          {
            "date": "2019-06-29",
            "count": 2
          },
          {
            "date": "2019-07-01",
            "count": 1
          },
          {
            "date": "2019-07-04",
            "count": 1
          },
          {
            "date": "2019-07-05",
            "count": 1
          },
          {
            "date": "2019-07-11",
            "count": 1
          },
          {
            "date": "2019-07-24",
            "count": 1
          },
          {
            "date": "2019-08-03",
            "count": 2
          },
          {
            "date": "2019-08-09",
            "count": 1
          },
          {
            "date": "2019-08-12",
            "count": 1
          },
          {
            "date": "2019-08-20",
            "count": 1
          },
          {
            "date": "2019-08-22",
            "count": 2
          },
          {
            "date": "2019-08-28",
            "count": 1
          },
          {
            "date": "2019-08-30",
            "count": 1
          },
          {
            "date": "2019-09-03",
            "count": 1
          },
          {
            "date": "2019-09-04",
            "count": 1
          },
          {
            "date": "2019-09-09",
            "count": 1
          },
          {
            "date": "2019-09-16",
            "count": 3
          },
          {
            "date": "2019-09-19",
            "count": 1
          },
          {
            "date": "2019-09-21",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 1
          },
          {
            "date": "2019-10-02",
            "count": 1
          },
          {
            "date": "2019-10-08",
            "count": 1
          },
          {
            "date": "2019-10-10",
            "count": 1
          },
          {
            "date": "2019-10-11",
            "count": 1
          },
          {
            "date": "2019-10-12",
            "count": 1
          },
          {
            "date": "2019-10-15",
            "count": 1
          },
          {
            "date": "2019-10-17",
            "count": 1
          },
          {
            "date": "2019-10-22",
            "count": 2
          },
          {
            "date": "2019-10-27",
            "count": 1
          },
          {
            "date": "2019-11-04",
            "count": 1
          },
          {
            "date": "2019-11-07",
            "count": 1
          },
          {
            "date": "2019-11-11",
            "count": 1
          },
          {
            "date": "2019-11-12",
            "count": 2
          },
          {
            "date": "2019-11-14",
            "count": 1
          },
          {
            "date": "2019-11-16",
            "count": 2
          },
          {
            "date": "2019-11-19",
            "count": 1
          },
          {
            "date": "2019-11-20",
            "count": 1
          },
          {
            "date": "2019-11-27",
            "count": 1
          },
          {
            "date": "2019-12-15",
            "count": 2
          },
          {
            "date": "2019-12-25",
            "count": 1
          },
          {
            "date": "2019-12-27",
            "count": 1
          },
          {
            "date": "2019-12-30",
            "count": 1
          },
          {
            "date": "2020-01-02",
            "count": 1
          },
          {
            "date": "2020-01-04",
            "count": 1
          },
          {
            "date": "2020-01-07",
            "count": 1
          },
          {
            "date": "2020-01-14",
            "count": 1
          },
          {
            "date": "2020-01-21",
            "count": 2
          },
          {
            "date": "2020-01-23",
            "count": 1
          },
          {
            "date": "2020-01-28",
            "count": 2
          },
          {
            "date": "2020-02-02",
            "count": 1
          },
          {
            "date": "2020-02-08",
            "count": 1
          },
          {
            "date": "2020-02-11",
            "count": 1
          },
          {
            "date": "2020-02-16",
            "count": 1
          },
          {
            "date": "2020-02-18",
            "count": 1
          },
          {
            "date": "2020-02-23",
            "count": 1
          },
          {
            "date": "2020-02-24",
            "count": 1
          },
          {
            "date": "2020-02-26",
            "count": 3
          },
          {
            "date": "2020-02-27",
            "count": 1
          },
          {
            "date": "2020-02-28",
            "count": 1
          },
          {
            "date": "2020-03-07",
            "count": 1
          },
          {
            "date": "2020-03-09",
            "count": 1
          },
          {
            "date": "2020-03-11",
            "count": 1
          },
          {
            "date": "2020-03-14",
            "count": 1
          },
          {
            "date": "2020-03-19",
            "count": 1
          },
          {
            "date": "2020-03-20",
            "count": 1
          },
          {
            "date": "2020-03-24",
            "count": 1
          },
          {
            "date": "2020-03-25",
            "count": 1
          },
          {
            "date": "2020-03-27",
            "count": 2
          },
          {
            "date": "2020-03-28",
            "count": 1
          },
          {
            "date": "2020-04-02",
            "count": 1
          },
          {
            "date": "2020-04-03",
            "count": 4
          },
          {
            "date": "2020-04-06",
            "count": 1
          },
          {
            "date": "2020-04-07",
            "count": 2
          },
          {
            "date": "2020-04-15",
            "count": 3
          },
          {
            "date": "2020-04-18",
            "count": 1
          },
          {
            "date": "2020-04-19",
            "count": 1
          },
          {
            "date": "2020-04-21",
            "count": 1
          },
          {
            "date": "2020-04-23",
            "count": 1
          },
          {
            "date": "2020-04-27",
            "count": 1
          },
          {
            "date": "2020-04-29",
            "count": 1
          },
          {
            "date": "2020-05-01",
            "count": 1
          },
          {
            "date": "2020-05-06",
            "count": 1
          },
          {
            "date": "2020-05-13",
            "count": 1
          },
          {
            "date": "2020-05-16",
            "count": 1
          },
          {
            "date": "2020-05-22",
            "count": 1
          },
          {
            "date": "2020-05-24",
            "count": 2
          },
          {
            "date": "2020-05-27",
            "count": 2
          },
          {
            "date": "2020-05-31",
            "count": 1
          },
          {
            "date": "2020-06-08",
            "count": 1
          },
          {
            "date": "2020-06-10",
            "count": 1
          },
          {
            "date": "2020-06-12",
            "count": 1
          },
          {
            "date": "2020-06-14",
            "count": 1
          },
          {
            "date": "2020-06-17",
            "count": 1
          },
          {
            "date": "2020-06-19",
            "count": 2
          },
          {
            "date": "2020-06-22",
            "count": 2
          },
          {
            "date": "2020-06-26",
            "count": 1
          },
          {
            "date": "2020-06-29",
            "count": 1
          },
          {
            "date": "2020-07-02",
            "count": 1
          },
          {
            "date": "2020-07-06",
            "count": 1
          },
          {
            "date": "2020-07-07",
            "count": 1
          },
          {
            "date": "2020-07-14",
            "count": 1
          },
          {
            "date": "2020-07-19",
            "count": 1
          },
          {
            "date": "2020-07-26",
            "count": 1
          },
          {
            "date": "2020-07-29",
            "count": 1
          },
          {
            "date": "2020-07-30",
            "count": 1
          },
          {
            "date": "2020-08-05",
            "count": 1
          },
          {
            "date": "2020-08-13",
            "count": 1
          },
          {
            "date": "2020-08-18",
            "count": 1
          },
          {
            "date": "2020-08-21",
            "count": 1
          },
          {
            "date": "2020-08-28",
            "count": 1
          },
          {
            "date": "2020-09-03",
            "count": 1
          },
          {
            "date": "2020-09-06",
            "count": 1
          },
          {
            "date": "2020-09-25",
            "count": 1
          },
          {
            "date": "2020-10-07",
            "count": 1
          },
          {
            "date": "2020-10-09",
            "count": 1
          },
          {
            "date": "2020-10-14",
            "count": 1
          },
          {
            "date": "2020-10-22",
            "count": 1
          },
          {
            "date": "2020-11-01",
            "count": 1
          },
          {
            "date": "2020-11-08",
            "count": 1
          },
          {
            "date": "2020-11-11",
            "count": 3
          },
          {
            "date": "2020-11-12",
            "count": 1
          },
          {
            "date": "2020-11-17",
            "count": 1
          },
          {
            "date": "2020-11-18",
            "count": 1
          },
          {
            "date": "2020-11-22",
            "count": 1
          },
          {
            "date": "2020-11-25",
            "count": 1
          },
          {
            "date": "2020-11-29",
            "count": 1
          },
          {
            "date": "2020-11-30",
            "count": 2
          },
          {
            "date": "2020-12-01",
            "count": 1
          },
          {
            "date": "2020-12-02",
            "count": 1
          },
          {
            "date": "2020-12-04",
            "count": 1
          },
          {
            "date": "2020-12-11",
            "count": 2
          },
          {
            "date": "2020-12-21",
            "count": 1
          },
          {
            "date": "2020-12-29",
            "count": 1
          },
          {
            "date": "2020-12-30",
            "count": 1
          },
          {
            "date": "2021-01-08",
            "count": 1
          },
          {
            "date": "2021-01-13",
            "count": 1
          },
          {
            "date": "2021-01-18",
            "count": 1
          },
          {
            "date": "2021-01-25",
            "count": 1
          },
          {
            "date": "2021-01-27",
            "count": 1
          },
          {
            "date": "2021-02-02",
            "count": 2
          },
          {
            "date": "2021-02-03",
            "count": 1
          },
          {
            "date": "2021-02-04",
            "count": 2
          },
          {
            "date": "2021-02-08",
            "count": 1
          },
          {
            "date": "2021-02-10",
            "count": 1
          },
          {
            "date": "2021-02-19",
            "count": 1
          },
          {
            "date": "2021-02-26",
            "count": 2
          },
          {
            "date": "2021-03-04",
            "count": 2
          },
          {
            "date": "2021-03-10",
            "count": 1
          },
          {
            "date": "2021-03-11",
            "count": 3
          },
          {
            "date": "2021-03-14",
            "count": 1
          },
          {
            "date": "2021-03-25",
            "count": 3
          },
          {
            "date": "2021-03-26",
            "count": 1
          },
          {
            "date": "2021-03-28",
            "count": 1
          },
          {
            "date": "2021-03-29",
            "count": 1
          },
          {
            "date": "2021-04-05",
            "count": 1
          },
          {
            "date": "2021-04-09",
            "count": 1
          },
          {
            "date": "2021-04-16",
            "count": 1
          },
          {
            "date": "2021-04-20",
            "count": 1
          },
          {
            "date": "2021-04-23",
            "count": 1
          },
          {
            "date": "2021-05-04",
            "count": 1
          },
          {
            "date": "2021-05-21",
            "count": 2
          },
          {
            "date": "2021-05-24",
            "count": 1
          },
          {
            "date": "2021-05-25",
            "count": 1
          },
          {
            "date": "2021-05-26",
            "count": 1
          },
          {
            "date": "2021-05-30",
            "count": 1
          },
          {
            "date": "2021-06-01",
            "count": 1
          },
          {
            "date": "2021-06-06",
            "count": 1
          },
          {
            "date": "2021-06-12",
            "count": 2
          },
          {
            "date": "2021-06-21",
            "count": 1
          },
          {
            "date": "2021-06-22",
            "count": 1
          },
          {
            "date": "2021-06-23",
            "count": 1
          },
          {
            "date": "2021-06-25",
            "count": 2
          },
          {
            "date": "2021-07-07",
            "count": 1
          },
          {
            "date": "2021-07-19",
            "count": 2
          },
          {
            "date": "2021-07-20",
            "count": 1
          },
          {
            "date": "2021-07-22",
            "count": 1
          },
          {
            "date": "2021-07-28",
            "count": 1
          },
          {
            "date": "2021-08-05",
            "count": 1
          },
          {
            "date": "2021-08-09",
            "count": 1
          },
          {
            "date": "2021-08-10",
            "count": 2
          },
          {
            "date": "2021-08-11",
            "count": 1
          },
          {
            "date": "2021-08-18",
            "count": 1
          },
          {
            "date": "2021-08-20",
            "count": 1
          },
          {
            "date": "2021-08-26",
            "count": 1
          },
          {
            "date": "2021-08-27",
            "count": 2
          },
          {
            "date": "2021-08-28",
            "count": 1
          },
          {
            "date": "2021-08-30",
            "count": 1
          },
          {
            "date": "2021-08-31",
            "count": 1
          },
          {
            "date": "2021-09-05",
            "count": 1
          },
          {
            "date": "2021-09-06",
            "count": 1
          },
          {
            "date": "2021-09-12",
            "count": 3
          },
          {
            "date": "2021-09-13",
            "count": 1
          },
          {
            "date": "2021-09-14",
            "count": 3
          },
          {
            "date": "2021-09-20",
            "count": 1
          },
          {
            "date": "2021-09-23",
            "count": 1
          },
          {
            "date": "2021-09-24",
            "count": 1
          },
          {
            "date": "2021-09-25",
            "count": 1
          },
          {
            "date": "2021-09-28",
            "count": 1
          },
          {
            "date": "2021-10-07",
            "count": 2
          },
          {
            "date": "2021-10-17",
            "count": 1
          },
          {
            "date": "2021-10-19",
            "count": 1
          },
          {
            "date": "2021-10-26",
            "count": 2
          },
          {
            "date": "2021-10-28",
            "count": 1
          },
          {
            "date": "2021-11-01",
            "count": 1
          },
          {
            "date": "2021-11-03",
            "count": 1
          },
          {
            "date": "2021-11-04",
            "count": 2
          },
          {
            "date": "2021-11-08",
            "count": 1
          },
          {
            "date": "2021-11-12",
            "count": 2
          },
          {
            "date": "2021-11-15",
            "count": 1
          },
          {
            "date": "2021-11-20",
            "count": 2
          },
          {
            "date": "2021-11-22",
            "count": 1
          },
          {
            "date": "2021-11-28",
            "count": 1
          },
          {
            "date": "2021-11-29",
            "count": 1
          },
          {
            "date": "2021-11-30",
            "count": 1
          },
          {
            "date": "2021-12-01",
            "count": 1
          },
          {
            "date": "2021-12-02",
            "count": 1
          },
          {
            "date": "2021-12-07",
            "count": 1
          },
          {
            "date": "2021-12-11",
            "count": 1
          },
          {
            "date": "2021-12-27",
            "count": 1
          },
          {
            "date": "2021-12-29",
            "count": 1
          },
          {
            "date": "2022-01-02",
            "count": 1
          },
          {
            "date": "2022-01-04",
            "count": 1
          },
          {
            "date": "2022-01-08",
            "count": 1
          },
          {
            "date": "2022-01-09",
            "count": 1
          },
          {
            "date": "2022-01-13",
            "count": 1
          },
          {
            "date": "2022-01-18",
            "count": 1
          },
          {
            "date": "2022-01-20",
            "count": 1
          },
          {
            "date": "2022-01-24",
            "count": 1
          },
          {
            "date": "2022-01-27",
            "count": 1
          },
          {
            "date": "2022-01-30",
            "count": 1
          },
          {
            "date": "2022-02-01",
            "count": 2
          },
          {
            "date": "2022-02-05",
            "count": 1
          },
          {
            "date": "2022-02-07",
            "count": 1
          },
          {
            "date": "2022-02-11",
            "count": 1
          },
          {
            "date": "2022-02-14",
            "count": 1
          },
          {
            "date": "2022-02-17",
            "count": 1
          },
          {
            "date": "2022-02-19",
            "count": 1
          },
          {
            "date": "2022-02-20",
            "count": 1
          },
          {
            "date": "2022-02-28",
            "count": 1
          },
          {
            "date": "2022-03-02",
            "count": 1
          },
          {
            "date": "2022-03-03",
            "count": 1
          },
          {
            "date": "2022-03-08",
            "count": 1
          },
          {
            "date": "2022-03-15",
            "count": 2
          },
          {
            "date": "2022-03-17",
            "count": 2
          },
          {
            "date": "2022-03-18",
            "count": 1
          },
          {
            "date": "2022-03-23",
            "count": 1
          },
          {
            "date": "2022-03-27",
            "count": 1
          },
          {
            "date": "2022-03-28",
            "count": 2
          },
          {
            "date": "2022-03-30",
            "count": 1
          },
          {
            "date": "2022-04-06",
            "count": 1
          },
          {
            "date": "2022-04-08",
            "count": 1
          },
          {
            "date": "2022-04-20",
            "count": 1
          },
          {
            "date": "2022-04-21",
            "count": 1
          },
          {
            "date": "2022-04-22",
            "count": 1
          },
          {
            "date": "2022-04-25",
            "count": 1
          },
          {
            "date": "2022-05-01",
            "count": 1
          },
          {
            "date": "2022-05-08",
            "count": 2
          },
          {
            "date": "2022-05-09",
            "count": 2
          },
          {
            "date": "2022-05-11",
            "count": 1
          },
          {
            "date": "2022-05-12",
            "count": 1
          },
          {
            "date": "2022-05-15",
            "count": 1
          },
          {
            "date": "2022-05-19",
            "count": 1
          },
          {
            "date": "2022-05-26",
            "count": 1
          },
          {
            "date": "2022-05-31",
            "count": 1
          },
          {
            "date": "2022-06-01",
            "count": 1
          },
          {
            "date": "2022-06-05",
            "count": 1
          },
          {
            "date": "2022-06-07",
            "count": 1
          },
          {
            "date": "2022-06-14",
            "count": 2
          },
          {
            "date": "2022-06-15",
            "count": 1
          },
          {
            "date": "2022-06-17",
            "count": 1
          },
          {
            "date": "2022-06-18",
            "count": 1
          },
          {
            "date": "2022-06-19",
            "count": 1
          },
          {
            "date": "2022-06-21",
            "count": 1
          },
          {
            "date": "2022-06-22",
            "count": 3
          },
          {
            "date": "2022-06-23",
            "count": 2
          },
          {
            "date": "2022-06-26",
            "count": 1
          },
          {
            "date": "2022-06-29",
            "count": 2
          },
          {
            "date": "2022-06-30",
            "count": 1
          },
          {
            "date": "2022-07-03",
            "count": 1
          },
          {
            "date": "2022-07-06",
            "count": 2
          },
          {
            "date": "2022-07-11",
            "count": 1
          },
          {
            "date": "2022-07-16",
            "count": 2
          },
          {
            "date": "2022-07-19",
            "count": 2
          },
          {
            "date": "2022-07-20",
            "count": 1
          },
          {
            "date": "2022-07-28",
            "count": 2
          },
          {
            "date": "2022-07-30",
            "count": 1
          },
          {
            "date": "2022-07-31",
            "count": 1
          },
          {
            "date": "2022-08-01",
            "count": 1
          },
          {
            "date": "2022-08-05",
            "count": 2
          },
          {
            "date": "2022-08-07",
            "count": 1
          },
          {
            "date": "2022-08-10",
            "count": 1
          },
          {
            "date": "2022-08-16",
            "count": 1
          },
          {
            "date": "2022-08-19",
            "count": 1
          },
          {
            "date": "2022-08-20",
            "count": 1
          },
          {
            "date": "2022-08-24",
            "count": 2
          },
          {
            "date": "2022-08-29",
            "count": 2
          },
          {
            "date": "2022-09-01",
            "count": 1
          },
          {
            "date": "2022-09-03",
            "count": 1
          },
          {
            "date": "2022-09-09",
            "count": 1
          },
          {
            "date": "2022-09-15",
            "count": 1
          },
          {
            "date": "2022-09-24",
            "count": 1
          },
          {
            "date": "2022-09-28",
            "count": 1
          },
          {
            "date": "2022-09-29",
            "count": 1
          },
          {
            "date": "2022-10-03",
            "count": 1
          },
          {
            "date": "2022-10-04",
            "count": 2
          },
          {
            "date": "2022-10-06",
            "count": 1
          },
          {
            "date": "2022-10-12",
            "count": 1
          },
          {
            "date": "2022-10-13",
            "count": 1
          },
          {
            "date": "2022-10-14",
            "count": 1
          },
          {
            "date": "2022-10-19",
            "count": 1
          },
          {
            "date": "2022-10-25",
            "count": 1
          },
          {
            "date": "2022-10-27",
            "count": 1
          },
          {
            "date": "2022-10-28",
            "count": 1
          },
          {
            "date": "2022-10-29",
            "count": 1
          },
          {
            "date": "2022-11-03",
            "count": 2
          },
          {
            "date": "2022-11-07",
            "count": 1
          },
          {
            "date": "2022-11-08",
            "count": 2
          },
          {
            "date": "2022-11-09",
            "count": 1
          },
          {
            "date": "2022-11-22",
            "count": 1
          },
          {
            "date": "2022-11-25",
            "count": 2
          },
          {
            "date": "2022-11-28",
            "count": 1
          },
          {
            "date": "2022-11-29",
            "count": 3
          },
          {
            "date": "2022-11-30",
            "count": 2
          },
          {
            "date": "2022-12-01",
            "count": 1
          },
          {
            "date": "2022-12-02",
            "count": 1
          },
          {
            "date": "2022-12-03",
            "count": 1
          },
          {
            "date": "2022-12-06",
            "count": 1
          },
          {
            "date": "2022-12-10",
            "count": 1
          },
          {
            "date": "2022-12-15",
            "count": 3
          },
          {
            "date": "2022-12-19",
            "count": 1
          },
          {
            "date": "2022-12-21",
            "count": 1
          },
          {
            "date": "2022-12-28",
            "count": 2
          },
          {
            "date": "2023-01-03",
            "count": 2
          },
          {
            "date": "2023-01-08",
            "count": 1
          },
          {
            "date": "2023-01-16",
            "count": 2
          },
          {
            "date": "2023-01-19",
            "count": 2
          },
          {
            "date": "2023-01-30",
            "count": 2
          },
          {
            "date": "2023-02-06",
            "count": 1
          },
          {
            "date": "2023-02-07",
            "count": 1
          },
          {
            "date": "2023-02-08",
            "count": 1
          },
          {
            "date": "2023-02-10",
            "count": 1
          },
          {
            "date": "2023-02-13",
            "count": 1
          },
          {
            "date": "2023-02-14",
            "count": 1
          },
          {
            "date": "2023-02-24",
            "count": 1
          },
          {
            "date": "2023-02-26",
            "count": 1
          },
          {
            "date": "2023-02-28",
            "count": 1
          },
          {
            "date": "2023-03-01",
            "count": 2
          },
          {
            "date": "2023-03-07",
            "count": 1
          },
          {
            "date": "2023-03-12",
            "count": 1
          },
          {
            "date": "2023-03-13",
            "count": 1
          },
          {
            "date": "2023-03-21",
            "count": 1
          },
          {
            "date": "2023-03-27",
            "count": 1
          },
          {
            "date": "2023-03-29",
            "count": 2
          },
          {
            "date": "2023-04-01",
            "count": 1
          },
          {
            "date": "2023-04-04",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 3
          },
          {
            "date": "2023-04-07",
            "count": 1
          },
          {
            "date": "2023-04-11",
            "count": 1
          },
          {
            "date": "2023-04-12",
            "count": 1
          },
          {
            "date": "2023-04-13",
            "count": 1
          },
          {
            "date": "2023-04-14",
            "count": 1
          },
          {
            "date": "2023-04-18",
            "count": 1
          },
          {
            "date": "2023-04-19",
            "count": 1
          },
          {
            "date": "2023-04-22",
            "count": 1
          },
          {
            "date": "2023-04-27",
            "count": 3
          },
          {
            "date": "2023-05-02",
            "count": 1
          },
          {
            "date": "2023-05-05",
            "count": 1
          },
          {
            "date": "2023-05-06",
            "count": 1
          },
          {
            "date": "2023-05-09",
            "count": 1
          },
          {
            "date": "2023-05-10",
            "count": 1
          },
          {
            "date": "2023-05-19",
            "count": 1
          },
          {
            "date": "2023-05-27",
            "count": 2
          },
          {
            "date": "2023-05-31",
            "count": 1
          },
          {
            "date": "2023-06-03",
            "count": 1
          },
          {
            "date": "2023-06-10",
            "count": 1
          },
          {
            "date": "2023-06-12",
            "count": 1
          },
          {
            "date": "2023-06-14",
            "count": 1
          },
          {
            "date": "2023-06-15",
            "count": 1
          },
          {
            "date": "2023-06-16",
            "count": 1
          },
          {
            "date": "2023-06-19",
            "count": 1
          },
          {
            "date": "2023-06-20",
            "count": 1
          },
          {
            "date": "2023-07-05",
            "count": 2
          },
          {
            "date": "2023-07-07",
            "count": 1
          },
          {
            "date": "2023-07-11",
            "count": 1
          },
          {
            "date": "2023-07-13",
            "count": 1
          },
          {
            "date": "2023-07-18",
            "count": 1
          },
          {
            "date": "2023-07-19",
            "count": 1
          },
          {
            "date": "2023-07-20",
            "count": 2
          },
          {
            "date": "2023-07-21",
            "count": 1
          },
          {
            "date": "2023-07-27",
            "count": 2
          },
          {
            "date": "2023-07-31",
            "count": 1
          },
          {
            "date": "2023-08-02",
            "count": 1
          },
          {
            "date": "2023-08-04",
            "count": 1
          },
          {
            "date": "2023-08-09",
            "count": 1
          },
          {
            "date": "2023-08-18",
            "count": 1
          },
          {
            "date": "2023-08-20",
            "count": 1
          },
          {
            "date": "2023-08-24",
            "count": 1
          },
          {
            "date": "2023-08-25",
            "count": 1
          },
          {
            "date": "2023-08-26",
            "count": 1
          },
          {
            "date": "2023-08-28",
            "count": 1
          },
          {
            "date": "2023-08-29",
            "count": 1
          },
          {
            "date": "2023-08-31",
            "count": 1
          },
          {
            "date": "2023-09-03",
            "count": 1
          },
          {
            "date": "2023-09-07",
            "count": 1
          },
          {
            "date": "2023-09-14",
            "count": 1
          },
          {
            "date": "2023-09-15",
            "count": 2
          },
          {
            "date": "2023-09-16",
            "count": 2
          },
          {
            "date": "2023-09-20",
            "count": 1
          },
          {
            "date": "2023-09-24",
            "count": 1
          },
          {
            "date": "2023-09-26",
            "count": 1
          },
          {
            "date": "2023-09-27",
            "count": 2
          },
          {
            "date": "2023-09-28",
            "count": 1
          },
          {
            "date": "2023-09-29",
            "count": 1
          },
          {
            "date": "2023-10-03",
            "count": 1
          },
          {
            "date": "2023-10-05",
            "count": 1
          },
          {
            "date": "2023-10-09",
            "count": 1
          },
          {
            "date": "2023-10-11",
            "count": 3
          },
          {
            "date": "2023-10-12",
            "count": 2
          },
          {
            "date": "2023-10-24",
            "count": 1
          },
          {
            "date": "2023-10-26",
            "count": 1
          },
          {
            "date": "2023-10-27",
            "count": 1
          },
          {
            "date": "2023-10-31",
            "count": 1
          },
          {
            "date": "2023-11-09",
            "count": 1
          },
          {
            "date": "2023-11-10",
            "count": 1
          },
          {
            "date": "2023-11-11",
            "count": 1
          },
          {
            "date": "2023-11-12",
            "count": 1
          },
          {
            "date": "2023-11-13",
            "count": 1
          },
          {
            "date": "2023-11-14",
            "count": 2
          },
          {
            "date": "2023-11-27",
            "count": 1
          },
          {
            "date": "2023-12-01",
            "count": 1
          },
          {
            "date": "2023-12-13",
            "count": 1
          },
          {
            "date": "2023-12-18",
            "count": 1
          },
          {
            "date": "2023-12-21",
            "count": 1
          },
          {
            "date": "2024-01-03",
            "count": 2
          },
          {
            "date": "2024-01-04",
            "count": 1
          },
          {
            "date": "2024-01-07",
            "count": 1
          },
          {
            "date": "2024-01-11",
            "count": 2
          },
          {
            "date": "2024-01-12",
            "count": 1
          },
          {
            "date": "2024-01-16",
            "count": 1
          },
          {
            "date": "2024-01-17",
            "count": 1
          },
          {
            "date": "2024-01-19",
            "count": 1
          },
          {
            "date": "2024-01-25",
            "count": 1
          },
          {
            "date": "2024-02-03",
            "count": 1
          },
          {
            "date": "2024-02-04",
            "count": 2
          },
          {
            "date": "2024-02-07",
            "count": 1
          },
          {
            "date": "2024-02-09",
            "count": 2
          },
          {
            "date": "2024-02-12",
            "count": 1
          },
          {
            "date": "2024-02-14",
            "count": 1
          },
          {
            "date": "2024-02-18",
            "count": 2
          },
          {
            "date": "2024-02-21",
            "count": 1
          },
          {
            "date": "2024-03-08",
            "count": 1
          },
          {
            "date": "2024-03-09",
            "count": 1
          },
          {
            "date": "2024-03-10",
            "count": 1
          },
          {
            "date": "2024-03-18",
            "count": 1
          },
          {
            "date": "2024-03-30",
            "count": 1
          },
          {
            "date": "2024-04-06",
            "count": 1
          },
          {
            "date": "2024-04-15",
            "count": 1
          },
          {
            "date": "2024-04-16",
            "count": 1
          },
          {
            "date": "2024-04-24",
            "count": 1
          },
          {
            "date": "2024-04-28",
            "count": 1
          },
          {
            "date": "2024-04-29",
            "count": 1
          },
          {
            "date": "2024-05-01",
            "count": 1
          },
          {
            "date": "2024-05-08",
            "count": 2
          },
          {
            "date": "2024-05-13",
            "count": 1
          },
          {
            "date": "2024-05-14",
            "count": 1
          },
          {
            "date": "2024-05-15",
            "count": 1
          },
          {
            "date": "2024-05-17",
            "count": 1
          },
          {
            "date": "2024-05-18",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 1
          },
          {
            "date": "2024-05-29",
            "count": 1
          },
          {
            "date": "2024-06-03",
            "count": 2
          },
          {
            "date": "2024-06-11",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 1
          },
          {
            "date": "2024-06-25",
            "count": 1
          },
          {
            "date": "2024-06-29",
            "count": 2
          },
          {
            "date": "2024-07-02",
            "count": 1
          },
          {
            "date": "2024-07-12",
            "count": 1
          },
          {
            "date": "2024-07-13",
            "count": 1
          },
          {
            "date": "2024-07-18",
            "count": 2
          },
          {
            "date": "2024-07-19",
            "count": 1
          },
          {
            "date": "2024-07-30",
            "count": 1
          },
          {
            "date": "2024-08-02",
            "count": 1
          },
          {
            "date": "2024-08-22",
            "count": 1
          },
          {
            "date": "2024-08-27",
            "count": 2
          },
          {
            "date": "2024-08-28",
            "count": 1
          },
          {
            "date": "2024-08-29",
            "count": 1
          },
          {
            "date": "2024-09-02",
            "count": 2
          },
          {
            "date": "2024-09-07",
            "count": 1
          },
          {
            "date": "2024-09-12",
            "count": 1
          },
          {
            "date": "2024-09-17",
            "count": 1
          },
          {
            "date": "2024-09-26",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 1
          },
          {
            "date": "2024-10-12",
            "count": 2
          },
          {
            "date": "2024-10-22",
            "count": 3
          },
          {
            "date": "2024-10-23",
            "count": 1
          },
          {
            "date": "2024-10-26",
            "count": 1
          },
          {
            "date": "2024-10-28",
            "count": 1
          },
          {
            "date": "2024-11-01",
            "count": 1
          },
          {
            "date": "2024-11-04",
            "count": 1
          },
          {
            "date": "2024-11-14",
            "count": 2
          },
          {
            "date": "2024-11-20",
            "count": 2
          },
          {
            "date": "2024-11-26",
            "count": 2
          },
          {
            "date": "2024-11-30",
            "count": 1
          },
          {
            "date": "2024-12-08",
            "count": 1
          },
          {
            "date": "2024-12-12",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2024-12-31",
            "count": 1
          },
          {
            "date": "2025-01-12",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-01-24",
            "count": 1
          },
          {
            "date": "2025-01-25",
            "count": 1
          },
          {
            "date": "2025-01-27",
            "count": 1
          },
          {
            "date": "2025-02-01",
            "count": 1
          },
          {
            "date": "2025-02-02",
            "count": 2
          },
          {
            "date": "2025-02-04",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-03-03",
            "count": 1
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-12",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-03-18",
            "count": 2
          },
          {
            "date": "2025-03-19",
            "count": 1
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-03-22",
            "count": 1
          },
          {
            "date": "2025-03-27",
            "count": 1
          },
          {
            "date": "2025-04-11",
            "count": 1
          },
          {
            "date": "2025-04-13",
            "count": 1
          },
          {
            "date": "2025-04-19",
            "count": 1
          },
          {
            "date": "2025-04-22",
            "count": 1
          },
          {
            "date": "2025-04-27",
            "count": 1
          },
          {
            "date": "2025-05-03",
            "count": 1
          },
          {
            "date": "2025-05-06",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-05-22",
            "count": 1
          },
          {
            "date": "2025-05-29",
            "count": 1
          },
          {
            "date": "2025-06-01",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-06-05",
            "count": 1
          },
          {
            "date": "2025-07-09",
            "count": 2
          },
          {
            "date": "2025-07-10",
            "count": 1
          },
          {
            "date": "2025-07-15",
            "count": 1
          },
          {
            "date": "2025-07-22",
            "count": 1
          },
          {
            "date": "2025-08-03",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 2
          },
          {
            "date": "2025-08-05",
            "count": 1
          },
          {
            "date": "2025-08-11",
            "count": 2
          },
          {
            "date": "2025-08-13",
            "count": 1
          },
          {
            "date": "2025-08-18",
            "count": 1
          },
          {
            "date": "2025-08-25",
            "count": 1
          },
          {
            "date": "2025-09-10",
            "count": 1
          },
          {
            "date": "2025-09-12",
            "count": 2
          },
          {
            "date": "2025-09-23",
            "count": 1
          },
          {
            "date": "2025-09-25",
            "count": 1
          },
          {
            "date": "2025-09-30",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-09",
            "count": 1
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-11-21",
            "count": 1
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2025-12-12",
            "count": 2
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-31",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-09",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-01-25",
            "count": 1
          },
          {
            "date": "2026-02-11",
            "count": 1
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 2
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-25",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 950,
        "total_stars": 950
      },
      "open_issues_and_prs": 25
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "setuptools-scm/src/setuptools_scm/py.typed",
        "vcs-versioning/src/vcs_versioning/py.typed"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 62517,
      "source_files_sampled": 124,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 4620
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml",
        "setuptools-scm/pyproject.toml",
        "setuptools-scm/setup.py",
        "vcs-versioning/pyproject.toml",
        "vcs-versioning/setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "setuptools",
            "direct": true,
            "version": "75.3.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8.8,
            "advisory_ids": [
              "GHSA-5rjg-fvgr-3xxf",
              "GHSA-h35f-9h28-mq5c",
              "PYSEC-2025-49",
              "PYSEC-2026-3447"
            ],
            "fixed_version": "83.0.0",
            "advisory_count": 4,
            "oldest_advisory_days": 430
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.1.8",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.2,
            "advisory_ids": [
              "PYSEC-2026-2132"
            ],
            "fixed_version": "8.3.3",
            "advisory_count": 1,
            "oldest_advisory_days": 82
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.2,
            "advisory_ids": [
              "PYSEC-2026-2132"
            ],
            "fixed_version": "8.3.3",
            "advisory_count": 1,
            "oldest_advisory_days": 82
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "47.0.0",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-537c-gmf6-5ccf"
            ],
            "fixed_version": "48.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 36
          },
          {
            "name": "pip",
            "direct": false,
            "version": "25.0.1",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8,
            "advisory_ids": [
              "GHSA-4xh5-x5gv-qwph",
              "GHSA-58qw-9mgm-455v",
              "GHSA-6vgw-5pg2-w6jp",
              "GHSA-jp4c-xjxw-mgf9",
              "GHSA-wf93-45jw-7689",
              "PYSEC-2026-1795",
              "PYSEC-2026-1796",
              "PYSEC-2026-196",
              "PYSEC-2026-2875",
              "PYSEC-2026-2876"
            ],
            "fixed_version": "26.1.2",
            "advisory_count": 10,
            "oldest_advisory_days": 300
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.0.1",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8,
            "advisory_ids": [
              "GHSA-58qw-9mgm-455v",
              "GHSA-jp4c-xjxw-mgf9",
              "GHSA-wf93-45jw-7689",
              "PYSEC-2026-196",
              "PYSEC-2026-2875",
              "PYSEC-2026-2876"
            ],
            "fixed_version": "26.1.2",
            "advisory_count": 6,
            "oldest_advisory_days": 92
          },
          {
            "name": "pyjwt",
            "direct": false,
            "version": "2.9.0",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-752w-5fwx-jx9f",
              "GHSA-993g-76c3-p5m4",
              "GHSA-fhv5-28vv-h8m8",
              "GHSA-jq35-7prp-9v3f",
              "GHSA-w7vc-732c-9m39",
              "GHSA-xgmm-8j9v-c9wx",
              "PYSEC-2025-183",
              "PYSEC-2026-120",
              "PYSEC-2026-175",
              "PYSEC-2026-176"
            ],
            "fixed_version": "2.13.0",
            "advisory_count": 13,
            "oldest_advisory_days": 354
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.2.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2xpw-w6gg-jr37",
              "GHSA-38jv-5279-wg99",
              "GHSA-48p4-8xcf-vxj5",
              "GHSA-gm62-xv2j-4w53",
              "GHSA-pq67-6m6q-mj2v",
              "GHSA-qccp-gfcp-xxvc",
              "PYSEC-2026-141",
              "PYSEC-2026-1994",
              "PYSEC-2026-1996",
              "PYSEC-2026-1997"
            ],
            "fixed_version": "2.7.0",
            "advisory_count": 12,
            "oldest_advisory_days": 398
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.6.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mf9v-mfxr-j63j",
              "GHSA-qccp-gfcp-xxvc",
              "PYSEC-2026-141",
              "PYSEC-2026-142"
            ],
            "fixed_version": "2.7.0",
            "advisory_count": 4,
            "oldest_advisory_days": 71
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": "80.9.0",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-h35f-9h28-mq5c",
              "PYSEC-2026-3447"
            ],
            "fixed_version": "83.0.0",
            "advisory_count": 2,
            "oldest_advisory_days": 13
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": "82.0.1",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-h35f-9h28-mq5c",
              "PYSEC-2026-3447"
            ],
            "fixed_version": "83.0.0",
            "advisory_count": 2,
            "oldest_advisory_days": 13
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "8.3.5",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 6.8,
            "advisory_ids": [
              "GHSA-6w46-j5rx-g56g",
              "PYSEC-2026-1845"
            ],
            "fixed_version": "9.0.3",
            "advisory_count": 2,
            "oldest_advisory_days": 180
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "8.4.2",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 6.8,
            "advisory_ids": [
              "GHSA-6w46-j5rx-g56g",
              "PYSEC-2026-1845"
            ],
            "fixed_version": "9.0.3",
            "advisory_count": 2,
            "oldest_advisory_days": 180
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.4",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.5,
            "advisory_ids": [
              "GHSA-gc5v-m9x4-r6x2",
              "PYSEC-2026-2275"
            ],
            "fixed_version": "2.33.0",
            "advisory_count": 2,
            "oldest_advisory_days": 118
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.5",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.5,
            "advisory_ids": [
              "GHSA-gc5v-m9x4-r6x2",
              "PYSEC-2026-2275"
            ],
            "fixed_version": "2.33.0",
            "advisory_count": 2,
            "oldest_advisory_days": 118
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.19.2",
            "severity": "low",
            "ecosystem": "pypi",
            "cvss_score": 3.3,
            "advisory_ids": [
              "GHSA-5239-wwwm-4pmq",
              "PYSEC-2026-2987"
            ],
            "fixed_version": "2.20.0",
            "advisory_count": 2,
            "oldest_advisory_days": 121
          }
        ],
        "collected": true,
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 9,
          "moderate": 6
        },
        "advisory_count": 66,
        "affected_count": 16,
        "assessed_count": 139,
        "assessed_package": null,
        "unassessed_count": 3,
        "direct_affected_count": 3
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "vcs-versioning",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "setuptools-scm",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vcs-versioning",
          "manifest": "setuptools-scm/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0.dev0,<3"
        },
        {
          "name": "packaging",
          "manifest": "setuptools-scm/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=20"
        },
        {
          "name": "setuptools",
          "manifest": "setuptools-scm/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "tomli",
          "manifest": "setuptools-scm/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1"
        },
        {
          "name": "typing-extensions",
          "manifest": "setuptools-scm/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.1"
        },
        {
          "name": "packaging",
          "manifest": "vcs-versioning/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=20"
        },
        {
          "name": "tomli",
          "manifest": "vcs-versioning/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1"
        },
        {
          "name": "typing-extensions",
          "manifest": "vcs-versioning/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "packaging",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": true,
            "version": "25.0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": true,
            "version": "26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": "75.3.4",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": "80.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": true,
            "version": "82.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tomli",
            "direct": true,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tomli",
            "direct": true,
            "version": "2.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": true,
            "version": "4.13.2",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": true,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "vcs-versioning",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "vcs-versioning",
            "direct": true,
            "version": "2.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ast-serialize",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ast-serialize",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "backrefs",
            "direct": false,
            "version": "6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "backrefs",
            "direct": false,
            "version": "7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bracex",
            "direct": false,
            "version": "2.6",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.2.2.post1",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2025.11.12",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.6.17",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "1.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.7",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.1.8",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "47.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "48.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "exceptiongroup",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "execnet",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "flake8",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "flake8",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "flake8",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ghp-import",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffe",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffe-public-wildcard-imports",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "griffecli",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffelib",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.15",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.18",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "8.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "8.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "8.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-resources",
            "direct": false,
            "version": "6.4.5",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-resources",
            "direct": false,
            "version": "6.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "librt",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.10",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mergedeep",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-autorefs",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-autorefs",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-get-deps",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-get-deps",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-include-markdown-plugin",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material",
            "direct": false,
            "version": "9.7.6",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material-extensions",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocstrings",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocstrings-python",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocstrings-python",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "1.19.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "paginate",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "25.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "2.23",
            "ecosystem": "pypi"
          },
          {
            "name": "pyflakes",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyflakes",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyflakes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygithub",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pygithub",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyjwt",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyjwt",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymdown-extensions",
            "direct": false,
            "version": "10.21.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pymdown-extensions",
            "direct": false,
            "version": "11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pynacl",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-hooks",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "8.3.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-timeout",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-xdist",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-xdist",
            "direct": false,
            "version": "3.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml-env-tag",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.4",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.5",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.33.0",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.34.2",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "13.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "14.3.4",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "15.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": "0.15.20",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "towncrier",
            "direct": false,
            "version": "24.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "towncrier",
            "direct": false,
            "version": "25.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "types-setuptools",
            "direct": false,
            "version": "75.8.0.20250110",
            "ecosystem": "pypi"
          },
          {
            "name": "types-setuptools",
            "direct": false,
            "version": "81.0.0.20260209",
            "ecosystem": "pypi"
          },
          {
            "name": "types-setuptools",
            "direct": false,
            "version": "82.0.0.20260518",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "vcs-versioning-workspace",
            "direct": false,
            "version": "0.1+private",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wcmatch",
            "direct": false,
            "version": "10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "3.20.2",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "3.23.1",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 142,
        "direct_count": 13,
        "indirect_count": 129
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 663,
        "open_issues": 19,
        "closed_ratio": 0.973,
        "closed_issues": 687,
        "closed_unmerged_prs": 98
      },
      "bus_factor": 1,
      "bot_contributors": 4,
      "top_contributors": [
        {
          "type": "User",
          "login": "RonnyPfannschmidt",
          "commits": 1890,
          "avatar_url": "https://avatars.githubusercontent.com/u/156838?v=4"
        },
        {
          "type": "User",
          "login": "jaraco",
          "commits": 64,
          "avatar_url": "https://avatars.githubusercontent.com/u/308610?v=4"
        },
        {
          "type": "User",
          "login": "DimitriPapadopoulos",
          "commits": 45,
          "avatar_url": "https://avatars.githubusercontent.com/u/3234522?v=4"
        },
        {
          "type": "User",
          "login": "ikerreyes",
          "commits": 22,
          "avatar_url": "https://avatars.githubusercontent.com/u/24312587?v=4"
        },
        {
          "type": "User",
          "login": "paugier",
          "commits": 21,
          "avatar_url": "https://avatars.githubusercontent.com/u/8842662?v=4"
        },
        {
          "type": "User",
          "login": "sbidoul",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/692075?v=4"
        },
        {
          "type": "User",
          "login": "henryiii",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/4616906?v=4"
        },
        {
          "type": "User",
          "login": "abravalheri",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/320755?v=4"
        },
        {
          "type": "User",
          "login": "puxlit",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/1405147?v=4"
        },
        {
          "type": "User",
          "login": "jamesbraza",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/8990777?v=4"
        }
      ],
      "contributors_sampled": 96,
      "top_contributor_share": 0.806
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "api-check.yml",
        "branch-sync.yml",
        "create-release-tags.yml",
        "python-tests.yml",
        "release-proposal.yml",
        "reusable-towncrier-release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "uv.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 1/6 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 106 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 1 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": 9,
            "reason": "dependency not pinned by hash detected -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "26 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ac108b243380c10de77de32eb696b74d5f5eb63f",
        "ran_at": "2026-07-21T20:23:51Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/pypa/setuptools-scm",
    "host": "github.com",
    "name": "setuptools-scm",
    "owner": "pypa"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 78,
      "inputs": {
        "security": 52,
        "vitality": 94,
        "community": 76,
        "governance": 71,
        "engineering": 92
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 94,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "commits_last_year": 732,
              "human_commit_share": 0.88,
              "days_since_last_push": 0,
              "active_weeks_last_year": 38
            },
            "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": "38/52 weeks with commits",
                "points": 26.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 38
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "732 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 732
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 89,
              "latest_release_tag": "setuptools-scm-v10.2.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 3.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "89 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 89
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 76,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "forks": 242,
              "stars": 950,
              "watchers": 21,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "950 stars",
                "points": 48.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 950
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "242 forks",
                "points": 19.9,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 242
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "21 watchers",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "packages": [
                "setuptools-scm",
                "vcs-versioning"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 233352268
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "233,352,268 downloads/month across pypi",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 233352268,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 71,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 96,
              "top_contributor_share": 0.806
            },
            "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 81% of commits",
                "points": 4.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 81
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "96 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 96
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 106 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "merged_prs": 663,
              "open_issues": 19,
              "closed_issues": 687,
              "issue_closed_ratio": 0.973,
              "closed_unmerged_prs": 98
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "663/761 decided PRs merged",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 663,
                      "decided": 761
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/6 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "followers": 2375,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "pypa",
              "public_repos": 59,
              "account_age_days": 5620
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2,375 followers of pypa",
                "points": 24.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2375,
                      "login": "pypa"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "59 public repos, account ~15 yr old",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 59
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "setuptools-scm",
                "vcs-versioning"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "106 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 106
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 92,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "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": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "metadata",
                "packaging",
                "python",
                "version-control"
              ],
              "has_wiki": false,
              "homepage": "https://setuptools-scm.readthedocs.io/en/latest/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://setuptools-scm.readthedocs.io/en/latest/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": 52,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 11 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 1/6 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 106 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 1 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 9",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "26 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "moderate",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 139 resolved dependencies against OSV; 3 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 139
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 3
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "source": "osv",
              "advisories": 66,
              "affected_packages": 16,
              "assessed_packages": 139,
              "unassessed_packages": 3,
              "affected_by_severity": "high 9, moderate 6, low 1",
              "direct_affected_packages": 3
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "3 affected: setuptools 75.3.4 (high 8.8), setuptools 80.9.0 (moderate 6.1), setuptools 82.0.1 (moderate 6.1)",
                "points": 7.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "setuptools 75.3.4 (high 8.8), setuptools 80.9.0 (moderate 6.1), setuptools 82.0.1 (moderate 6.1)"
                    }
                  }
                ],
                "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": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 430 days ago",
                "points": 32.8,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 430
                    }
                  }
                ],
                "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": 139,
              "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": 17
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.977,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 4620
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "86 of 88 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 86,
                      "sampled": 88
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "setuptools-scm/src/setuptools_scm/py.typed",
                "vcs-versioning/src/vcs_versioning/py.typed"
              ],
              "agent_commit_share": 0.08,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "8 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 8,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "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 9",
                "points": 9,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 62517,
              "source_files_sampled": 124,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/124 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 124,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "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": [
    "Could not fetch pypi package 'vcs-versioning.workspace' from its registry",
    "deps.dev does not index pypi:setuptools-scm@10.2.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T20:24:19.928155Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/pypa/setuptools-scm.svg",
  "full_name": "pypa/setuptools-scm",
  "license_state": "absent",
  "license_spdx": null
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.