公开记录
软件健康报告模式 0.23.0 · 指标 1.13.0 · 2026-07-21 20:24 UTC

pypa / setuptools-scm

the blessed package to manage your versions by scm tags

Python未检测到许可证★ 950 星标⑂ 242 复刻始于 2015年7月在 GitHub 上查看 ↗

pypa/setuptools-scm 的健康指数为 100 分中的 78 分,处于「良好」区间。 其得分最高的类别是Vitality(94/100),最低的是Security(52/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

78
总分 / 100
良好

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

78
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

2,375 关注者59 个公开仓库始于 2011年3月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

注册表软件包版本月下载量版本数最近发布
PyPIsetuptools-scm10.2.1121,922,0551060 天前
PyPIvcs-versioning2.2.2111,430,2131122 天前

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

94优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
26.3/36提交节奏 — 52 周中有 38 周有提交
18/18提交量 — 最近一年 732 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year732
human_commit_share0.88
days_since_last_push0
active_weeks_last_year38

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 89 个发布版本
36/36发布时效 — 最近一次发布版本于 0 天前
27/27发布节奏 — 约每 3.2 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count89
latest_release_tagsetuptools-scm-v10.2.1
releases_from_tags
days_since_latest_release0
mean_days_between_releases3.2
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

76良好 · 占总体的 18%
评分方式
48.3/60星标 — 950 个星标
19.9/25复刻 — 242 个复刻
7.2/15关注者 — 21 位关注者
所用输入
forks242
stars950
watchers21
growth_stateorganic
growth_factor_pct100

社区健康

60中等
评分方式
22.5/22.5README
0/22.5许可证 — 未检测到许可证文件
18/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
80/80月度下载量 — pypi 合计每月 233,352,268 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagessetuptools-scm, vcs-versioning
dependents
ecosystemspypi
total_downloads
monthly_downloads233,352,268
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

71良好 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
4.4/22.5提交分布 — 头号贡献者编写了 81% 的提交
13.5/13.5贡献者广度 — 96 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 106 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled96
top_contributor_share0.806
评分方式
45.5/46.8议题解决 — 97% 的议题已关闭
33.3/38.3PR 接受 — 已裁定的 PR 中 663/761 已合并
1.5/15OpenSSF Scorecard:Code-Review — Found 1/6 approved changesets -- score normalized to 1
所用输入
merged_prs663
open_issues19
closed_issues687
issue_closed_ratio0.973
closed_unmerged_prs98
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
24.3/25所有者影响力 — pypa 有 2,375 位关注者
24.9/25既往记录 — 59 个公开仓库,账户约 15 年
所用输入
followers2,375
owner_typeOrganization
is_verified
owner_loginpypa
public_repos59
account_age_days5,620
评分方式
25/25已发布且可解析 — pypi 上有 2 个软件包
35/35发布时效 — 最近一次发布于 0 天前
20/20版本历史 — 106 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagessetuptools-scm, vcs-versioning
ecosystemspypi
any_deprecated
min_days_since_publish0

工程质量

基础的工程与文档实践是否到位?

92优秀 · 占总体的 20%

工程实践

94优秀
评分方式
24/24CI 工作流 — 6 个工作流
24/24存在测试
16/16Linter 配置
9.6/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

90优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://setuptools-scm.readthedocs.io/en/latest/
10/10仓库描述
10/10主题标签 — 4 个主题标签
0/10Wiki
所用输入
topicsmetadata, packaging, python, version-control
has_wiki
homepagehttps://setuptools-scm.readthedocs.io/en/latest/
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

52中等 · 占总体的 16%

安全态势

51中等
评分方式
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.5许可证 — 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 — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 26 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5.1
已排除计分(无数据或不适用):signed_releases。 其余权重已重新归一化。
评分方式
7.9/35直接依赖不含已知公告 — 3 个受影响:setuptools 75.3.4 (high 8.8), setuptools 80.9.0 (moderate 6.1), setuptools 82.0.1 (moderate 6.1)
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
32.8/40没有长期未处理的公告 — 1 个携带公告的软件包超过 90 天未处理;最早一条发布于 430 天前
所用输入
sourceosv
advisories66
affected_packages16
assessed_packages139
unassessed_packages3
affected_by_severityhigh 9, moderate 6, low 1
direct_affected_packages3
已排除计分(无数据或不适用):间接依赖不含已知公告。 其余权重已重新归一化。 已将 139 个已解析依赖与 OSV 比对。 有 3 项无法评估——没有已解析的版本、生态系统不受支持,或超出所报告的软件包清单。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

76良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 88 次人类提交中有 86 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.977
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes4,620
评分方式
0/18一条命令的引导启动
22/22自动化测试
11/11Lint / 格式化配置
11/11静态类型检查 — setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 8 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 2 次为自动依赖更新
9/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
所用输入
has_nix
has_tests
lockfilesuv.lock
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
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
评分方式
27/45可类型检查的代码 — Python,已配置类型检查(setuptools-scm/src/setuptools_scm/py.typed, vcs-versioning/src/vcs_versioning/py.typed)
54.6/55可控的文件大小 — 采样的 124 个源文件中有 1 个超过 60KB
所用输入
primary_languagePython
largest_source_bytes62,517
source_files_sampled124
oversized_source_files1

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — examples
所用输入
example_dirsexamples
has_mcp_signal
api_schema_files

关键数据

950GitHub 星标
96贡献者
732最近 12 个月提交数
0距最近推送天数
89发布版本数
1巴士系数(bus factor)
19开放议题
PyPI软件包生态系统数

数据采集警告

  • 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

更多细节

Star 与 Fork 历史 950 ★ / 242 ⇿
950Star
242Fork
86发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

02004006008001,000950236102015-072020-122026-06
主版本 7次版本 19修订 39

每个点涵盖 11 天。

OpenSSF Scorecard 5.1 / 10
5.1综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。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
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities26 existing vulnerabilities detected
直接依赖 10
注册表软件包版本约束清单文件
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
全部依赖 142

来自 GitHub 依赖图的完整解析依赖集合:13 个直接依赖与 129 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

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

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 139 个包,其中也包含从不交付的开发与测试版本固定:16 个存在已知公告,3 个为直接依赖。 有 3 个无法评估——没有已解析的版本、生态系统不受支持,或不在所列包清单之内。

软件包版本关系严重程度公告数修复版本
setuptools75.3.4直接483.0.0
click8.1.8间接18.3.3
click8.3.1间接18.3.3
cryptography47.0.0间接148.0.1
pip25.0.1间接1026.1.2
pip26.0.1间接626.1.2
pyjwt2.9.0间接132.13.0
urllib32.2.3间接122.7.0
urllib32.6.3间接42.7.0
setuptools80.9.0直接283.0.0
setuptools82.0.1直接283.0.0
pytest8.3.5间接29.0.3
pytest8.4.2间接29.0.3
requests2.32.4间接22.33.0
requests2.32.5间接22.33.0
pygments2.19.2间接22.20.0

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "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
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.23.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计PyPI.