Informe JSON sin procesar legible por máquina
{
"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
}