Public record
Software health reportschema 0.23.0 · metrics 1.13.0 · 2026-07-21 20:24 UTC

pypa / setuptools-scm

the blessed package to manage your versions by scm tags

PythonNo license detected★ 950 stars⑂ 242 forkssince Jul 2015View on GitHub ↗

pypa/setuptools-scm holds a health index of 78 out of 100, placing it in the Good band. It scores highest on Vitality (94/100) and lowest on Security (52/100). It was last updated today. A single contributor accounts for most of its recent work.

78
overall / 100
Good

Software health index

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

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

Score profile

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

Ownership

2,375 followers59 public repossince Mar 2011

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
PyPIsetuptools-scm10.2.1121,922,0551060 days ago
PyPIvcs-versioning2.2.2111,430,2131122 days ago

Metrics by category

Vitality

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

94Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
26.3/36Commit cadence — 38/52 weeks with commits
18/18Commit volume — 732 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year732
human_commit_share0.88
days_since_last_push0
active_weeks_last_year38

Release discipline

100Excellent
How it's scored
27/27Ships releases — 89 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~3.2 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count89
latest_release_tagsetuptools-scm-v10.2.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases3.2
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

76Good · 18% of overall
How it's scored
48.3/60Stars — 950 stars
19.9/25Forks — 242 forks
7.2/15Watchers — 21 watchers
Inputs used
forks242
stars950
watchers21
growth_stateorganic
growth_factor_pct100
How it's scored
22.5/22.5README
0/22.5License — no license file detected
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseno
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateno
How it's scored
80/80Monthly downloads — 233,352,268 downloads/month across pypi
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagessetuptools-scm, vcs-versioning
dependents
ecosystemspypi
total_downloads
monthly_downloads233,352,268
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

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

71Good · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
4.4/22.5Commit distribution — top contributor authored 81% of commits
13.5/13.5Contributor breadth — 96 contributors
10/10OpenSSF Scorecard: Contributors — project has 106 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled96
top_contributor_share0.806
How it's scored
45.5/46.8Issue resolution — 97% of issues closed
33.3/38.3PR acceptance — 663/761 decided PRs merged
1.5/15OpenSSF Scorecard: Code-Review — Found 1/6 approved changesets -- score normalized to 1
Inputs used
merged_prs663
open_issues19
closed_issues687
issue_closed_ratio0.973
closed_unmerged_prs98
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
24.3/25Owner reach — 2,375 followers of pypa
24.9/25Track record — 59 public repos, account ~15 yr old
Inputs used
followers2,375
owner_typeOrganization
is_verified
owner_loginpypa
public_repos59
account_age_days5,620
How it's scored
25/25Published & resolvable — 2 package(s) on pypi
35/35Publish recency — latest publish 0 days ago
20/20Version history — 106 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagessetuptools-scm, vcs-versioning
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Engineering Quality

Are baseline engineering and documentation practices in place?

92Excellent · 20% of overall
How it's scored
24/24CI workflows — 6 workflow(s)
24/24Tests present
16/16Linter config
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
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configyes

Documentation

90Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://setuptools-scm.readthedocs.io/en/latest/
10/10Repository description
10/10Topics — 4 topics
0/10Wiki
Inputs used
topicsmetadata, packaging, python, version-control
has_wikino
homepagehttps://setuptools-scm.readthedocs.io/en/latest/
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

52Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
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.5License — 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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 26 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5.1
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
7.9/35Direct dependencies free of known advisories — 3 affected: setuptools 75.3.4 (high 8.8), setuptools 80.9.0 (moderate 6.1), setuptools 82.0.1 (moderate 6.1)
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
32.8/40No advisories left outstanding — 1 advisory-carrying package(s) unaddressed past 90 days; oldest published 430 days ago
Inputs used
sourceosv
advisories66
affected_packages16
assessed_packages139
unassessed_packages3
affected_by_severityhigh 9, moderate 6, low 1
direct_affected_packages3
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.

AI Readiness

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

76Good · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 86 of 88 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.977
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes4,620
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config
11/11Static type checking — setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 8 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 2 of the last 100 commits are automated dependency updates
9/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
Inputs used
has_nixno
has_testsyes
lockfilesuv.lock
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configyes
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
How it's scored
27/45Type-checkable code — Python with type-check config (setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed)
54.6/55Manageable file sizes — 1/124 source files over 60KB
Inputs used
primary_languagePython
largest_source_bytes62,517
source_files_sampled124
oversized_source_files1
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

950GitHub stars
96contributors
732commits, last 12 months
0days since last push
89releases
1bus factor
19open issues
PyPIpackage ecosystems

Data collection 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

More detail

Star and fork history 950 ★ / 242 ⇿
950Stars
242Forks
86Releases

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

02004006008001,000950236102015-072020-122026-06
Major 7Minor 19Patch 39

Each point covers 11 days.

OpenSSF Scorecard 5.1 / 10
5.1aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-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
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities26 existing vulnerabilities detected
Direct dependencies 10
RegistryPackageVersion constraintManifest
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
All dependencies 142

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

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

This repository publishes no package the index resolves, so its own dependency graph was assessed — 139 packages, which also include development and test pins that never ship: 16 carry known advisories, of which 3 are direct. 3 could not be assessed — no resolved version, an unsupported ecosystem, or beyond the reported package list.

PackageVersionRelationSeverityAdvisoriesFixed in
setuptools75.3.4directhigh483.0.0
click8.1.8indirecthigh18.3.3
click8.3.1indirecthigh18.3.3
cryptography47.0.0indirecthigh148.0.1
pip25.0.1indirecthigh1026.1.2
pip26.0.1indirecthigh626.1.2
pyjwt2.9.0indirecthigh132.13.0
urllib32.2.3indirecthigh122.7.0
urllib32.6.3indirecthigh42.7.0
setuptools80.9.0directmoderate283.0.0
setuptools82.0.1directmoderate283.0.0
pytest8.3.5indirectmoderate29.0.3
pytest8.4.2indirectmoderate29.0.3
requests2.32.4indirectmoderate22.33.0
requests2.32.5indirectmoderate22.33.0
pygments2.19.2indirectlow22.20.0

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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
}

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

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

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