Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"python",
"subnet",
"ipv4",
"ipv6",
"devops",
"networking",
"netaddr",
"mac",
"iab",
"sysadmin",
"cidr",
"eui",
"ip-address",
"oui",
"oui-database"
],
"is_fork": false,
"size_kb": 18444,
"has_wiki": false,
"homepage": "https://netaddr.readthedocs.io/en/latest/",
"languages": {
"Python": 345471,
"Makefile": 2242
},
"pushed_at": "2024-07-05T23:39:56Z",
"created_at": "2010-05-24T23:14:56Z",
"owner_type": "Organization",
"updated_at": "2026-07-06T03:59:33Z",
"description": "A network address manipulation library for Python",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": null,
"name": null,
"type": "Organization",
"login": "netaddr",
"company": null,
"location": null,
"followers": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/60154585?v=4",
"created_at": "2020-01-21T19:23:55Z",
"is_verified": null,
"public_repos": 1,
"account_age_days": 2373
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "1.3.0",
"kind": "minor",
"published_at": "2024-05-28T21:32:50Z"
},
{
"tag": "1.2.1",
"kind": "patch",
"published_at": "2024-02-17T20:41:26Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2024-02-14T23:23:36Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2024-02-10T01:48:47Z"
},
{
"tag": "0.10.1",
"kind": "patch",
"published_at": "2024-01-02T19:06:24Z"
},
{
"tag": "0.10.0",
"kind": "minor",
"published_at": "2023-12-31T15:17:27Z"
},
{
"tag": "0.9.0",
"kind": "minor",
"published_at": "2023-09-19T18:57:47Z"
}
],
"recent_commits": [
{
"oid": "d340feab548d948c5dc92cedcb05c69f57f9386e",
"body": "We support Python 3.12, better test with it too.",
"is_bot": false,
"headline": "Include Python 3.12 in the CI configuration (#389)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-29T19:15:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85a7b25304732785ddee31be3a644a77a243a978",
"body": "I forgot to do that in [1].\n\n[1] 75360b1b8c31 (\"Release version 1.3.0\")",
"is_bot": false,
"headline": "Bump the package version in the documentation to 1.3.0",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-28T21:21:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75360b1b8c318f081572692d4cf32810d16300ab",
"body": null,
"is_bot": false,
"headline": "Release version 1.3.0",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-28T21:18:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77c0075533b9b96000973dca832793ff7ee72e3e",
"body": null,
"is_bot": false,
"headline": "Fix the name of the flag in the docstring",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-28T21:16:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88b9455e81c7e2120019b892c8f27e0125eb3513",
"body": "The flag has been introduced in [1].\n\nI think it improves things a little for the flag's name to be more\nverbose and to require passing it via keyword arguments (otherwise it's\njust True or False which is gonna be quite opaque to the reader).\n\n[1] d2f5d054c461 (\"IPNetwork: Allow partial addresses (again) (#377)\")",
"is_bot": false,
"headline": "Tune the partial network expansion flag",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-27T23:32:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c20b9c5c40bfaac912e762221cbfd6864d13c371",
"body": "We have a slightly unusual setup in which we use Poetry to define/manage\ndependencies but still export to requirements.txt for ReadTheDocs\ninstallation.\n\nThere have been a few dependency updates and this file should match\nthem.",
"is_bot": false,
"headline": "Synchronize docs/requirements.txt with poetry.lock",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-27T23:14:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "860bb0c394a987862cc539f8a86abb6456432814",
"body": "Bumps [requests](https://github.com/psf/requests) from 2.31.0 to 2.32.2.\r\n- [Release notes](https://github.com/psf/requests/releases)\r\n- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)\r\n- [Commits](https://github.com/psf/requests/compare/v2.31.0...v2.32.2)\r\n\r\n---\r\nupdated-dependenc\n[…]\n dependency-name: requests\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump requests from 2.31.0 to 2.32.2 in /docs (#388)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-05-27T08:31:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "39d255a9939963d3a0b02b0c3d4cb3027e7ee5d2",
"body": "Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.3 to 3.1.4.\r\n- [Release notes](https://github.com/pallets/jinja/releases)\r\n- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)\r\n- [Commits](https://github.com/pallets/jinja/compare/3.1.3...3.1.4)\r\n\r\n---\r\nupdated-dependencies\n[…]\n\n- dependency-name: jinja2\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump jinja2 from 3.1.3 to 3.1.4 in /docs (#382)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-05-27T08:14:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9561d22b308818c33871ffc7fd0a09f7f0f9087b",
"body": "Bumps [idna](https://github.com/kjd/idna) from 3.6 to 3.7.\r\n- [Release notes](https://github.com/kjd/idna/releases)\r\n- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst)\r\n- [Commits](https://github.com/kjd/idna/compare/v3.6...v3.7)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: idna\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump idna from 3.6 to 3.7 in /docs (#379)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-05-27T08:08:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2f5d054c461df41d454d85bf2ee214d8ba80fb6",
"body": "This introduces the new expand argument to IPNetwork class, so that\r\nusers can retain the previous behavior of netaddr < 1.0.0 optionally.\r\n\r\n>>> import netaddr\r\n>>> netaddr.IPNetwork('10/8')\r\nTraceback (most recent call last):\r\n File \"/home/tkajinam/git/python/netaddr/netaddr/strategy/ipv4.py\", li\n[…]\n35, in __init__\r\n raise AddrFormatError('invalid IPNetwork %s' % (addr,))\r\nnetaddr.core.AddrFormatError: invalid IPNetwork 10/8\r\n>>> netaddr.IPNetwork('10/8', partial=True)\r\nIPNetwork('10.0.0.0/8')",
"is_bot": false,
"headline": "IPNetwork: Allow partial addresses (again) (#377)",
"author_name": "Takashi Kajinami",
"author_login": "kajinamit",
"committed_at": "2024-05-27T00:00:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7347c71b641f2df1ed00cb715f00c1c1418ebe2d",
"body": "The names were swapped.",
"is_bot": false,
"headline": "Fix some IPv4-compatible/IPv4-mapped documentation mistakes",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-26T23:53:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f630cff04720e0ad7d33b8a9de87b9af1e4c8662",
"body": "musl's inet_ntop doesn't format IPv4-compatible IPv6 addresses in any\r\nspecial way and there's no dot notation in the output there.\r\n\r\nWe need to account for that.\r\n\r\nIn doctests this is achieved by changing the examples or, where not\r\napplicable, disabling them.\r\n\r\nIn more standard test code we simply made a few tests conditional.\r\n\r\nResolves: https://github.com/netaddr/netaddr/issues/381",
"is_bot": false,
"headline": "Fix running the test suite on musl systems (#387)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-26T12:55:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75dfc480c0db4faa059765c564ac37f3328cb886",
"body": "It was a regression, affected IPAddress.\r\n\r\nFixes: d39b7d124280 (\"Handle IP parsing errors more precisely\")\r\nResolves: https://github.com/netaddr/netaddr/issues/383",
"is_bot": false,
"headline": "Fix IPv6 parsing with ZEROFILL enabled (#384)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-20T23:07:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bccfa10ed87dc9f37da448e4c8f55c01a6c73a9a",
"body": "It seems that there's no longer Python 3.7 available for the test runs\r\nin CI[1]:\r\n\r\n Run actions/setup-python@v5\r\n Installed versions\r\n Version 3.7 was not found in the local cache\r\n Error: The version '3.7' with architecture 'arm64' was not found for macOS 14.4.1.\r\n The list o\n[…]\n.json\r\n\r\nThis change is not dropping support for Python 3.7 yet, we just can't\r\ntest with it anymore using GH Actions.\r\n\r\n[1] https://github.com/netaddr/netaddr/actions/runs/9165981748/job/25200497622",
"is_bot": false,
"headline": "Drop Python 3.7 from CI (#385)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-05-20T22:58:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2c89b344a8e402773cab569ea9e522b1d683109c",
"body": "Fixes #374",
"is_bot": false,
"headline": "Fix NOHOST flag on IPNetwork copy constructor (#375)",
"author_name": "Clayton Singh",
"author_login": "claytonsingh",
"committed_at": "2024-02-20T00:37:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "050c63e94004de9c67ea45a85d43d4d142832edf",
"body": "... to resolve the following warnings.\r\n\r\nNode.js 16 actions are deprecated. Please update the following actions\r\nto use Node.js 20: actions/checkout@v2, actions/setup-python@v4,\r\ncodecov/codecov-action@v1. For more information see: ...\r\n\r\nThe following actions uses node12 which is deprecated and will be\r\nforced to run on node16: actions/checkout@v2,\r\ncodecov/codecov-action@v1. For more info: ...",
"is_bot": false,
"headline": "Update github actions (#373)",
"author_name": "Takashi Kajinami",
"author_login": "kajinamit",
"committed_at": "2024-02-18T13:29:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31d8e2913e0c5ec99041306363de0811446668c9",
"body": null,
"is_bot": false,
"headline": "Release version 1.2.1",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:37:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "099f58bacdf609a7459a256ac55f79c53c4cea38",
"body": null,
"is_bot": false,
"headline": "Make sure the build-and-publish make target actually builds",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:36:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1cb70637728e0cc0d7a1035bd65e11a7ea3432e",
"body": "The previous change attempted to make sure we display the\r\nproject links in separate lines. Sphinx started complaining about\r\nthis though:\r\n\r\n /Users/user/projects/netaddr/docs/source/reference/cli.rst:122: WARNING: Line block ends without a blank line.",
"is_bot": false,
"headline": "Really fix the readme formatting now",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:32:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f43d928c01c10bde278c0dcc0dbe9d29747f3787",
"body": null,
"is_bot": false,
"headline": "Publish version 1.2.0",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:27:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86469c55573a8dac855cc47fbcbe5f4d56e8be12",
"body": null,
"is_bot": false,
"headline": "Fix the readme formatting",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:24:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f5f2588ee5320741494fc42290f2f616ef2e61a",
"body": "I'm not entirely sure about this but it feels like the main page should\n\"advertise\" the package better and this is an attempt to make it so.",
"is_bot": false,
"headline": "Move this package summary to the main documentation page",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:18:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58adfa66b69d7fbcebde7c5a89d19197ec8b045d",
"body": "I didn't quite like their previous locations, let's se if this works\nbetter.",
"is_bot": false,
"headline": "Put some documentation pages in a new Misc section in the sidebar",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:16:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ca298fb0ae1e461726662c57220b0ce45ea79ac",
"body": null,
"is_bot": false,
"headline": "Fix some formatting in the release how-to",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:11:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "befa8611213d66f41724190a4e1b2fd5b9bf49ac",
"body": null,
"is_bot": false,
"headline": "Make publishing the package simpler",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:08:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c736ced2f3e26a7bf0fd7f3747ed810b37e1b0a",
"body": null,
"is_bot": false,
"headline": "Add a missing changelog entry",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T20:05:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "625a780c0e7043b55c64a917932eb7cdbb886627",
"body": "Something that I need every now and then, figured I'd add it.",
"is_bot": false,
"headline": "Add a CLI subcommand to display IP network information",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T19:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38f92f46e2ad268bd90c71b69fcafe71b3a4f5be",
"body": null,
"is_bot": false,
"headline": "Simplify iter_hosts implementation a little bit",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T19:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3633d8f6e3c1807b1b5d5cf8f8b42c56a145b64c",
"body": null,
"is_bot": false,
"headline": "Fix the ASCII-art formatting in the documentation",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T19:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22d3b1002683b5f5ed44d7729df20f3b317806d1",
"body": null,
"is_bot": false,
"headline": "Include the netaddr --help output in the documentation",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T19:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2bfc2bbb36a7e076325a6fdf7423f1ec0da20cb6",
"body": null,
"is_bot": false,
"headline": "Rename this feature to make it clear it's 100% optional",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T19:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf36065b7253e5344fa862f5e73e28e318275812",
"body": "This fixes the inconsistent behavior of valid_ipv4 and valid_ipv6 for\r\nnon-string value, and makes both these methods raise TypeError. These\r\nreturned False in <1.0.0 but that behavior was not intended.\r\n\r\nJakub's edit: the exceptions raised before came from the parsing\r\ninternals. These deliberate TypeErrors will make it more obvious\r\nwhat's wrong.",
"is_bot": false,
"headline": "valid_ipN: Raise TypeError for non string value (#371)",
"author_name": "Takashi Kajinami",
"author_login": "kajinamit",
"committed_at": "2024-02-17T16:48:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b75ea33b08c26cd8251a0d0cc1a8ee00d6a7e538",
"body": "While we can recommend it it doesn't seem worth it to *require* this\nrelatively heavy dependency.",
"is_bot": false,
"headline": "Support running the interactive shell without IPython",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T12:29:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d39b7d12428006b2ca1e260f92da2b66948b0d6d",
"body": "Reducing the amount of code in try blocks and catching only specific\nexception types will both make the code easier to understand but also\nstop hiding problems (see: IPv6 valid_str hiding TypeErrors before).",
"is_bot": false,
"headline": "Handle IP parsing errors more precisely",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T08:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd351598e5c846d9d895abed3064b38f25bd499f",
"body": "The original socket.inet_pton raises TypeError on non-str passed as an\r\naddress and OSError in case of an invalid address.\r\n\r\nThis will help with more precise exception handling (we use\r\nsocket.inet_pton and fbsocket.inet_pton interchangeably in a couple of\r\nplaces).",
"is_bot": false,
"headline": "Improve the exceptions raised by fbsocket's inet_pton (#370)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-17T08:24:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69a13fabef2bbfb9401de8a2f6b639189398babb",
"body": null,
"is_bot": false,
"headline": "Fix the reST syntax in the changelog",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T23:21:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d41e83ac6aa315621f44a156e66355c666e1314",
"body": "I wanted a shorter header but Sphinx generates a not-so-nice anchor for\nthat (#id1) so back to the old format.",
"is_bot": false,
"headline": "Fix the changelog header",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T23:18:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d929b6ecbf698b2c14280cf853e8857ea4801b54",
"body": null,
"is_bot": false,
"headline": "Release version 1.1.0",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T23:11:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0db97a2cfa478b6dc0e41f3a3eaa71cc3fccda7",
"body": "I figured why not, they don't take much space and we already ship\nsimilar files – now we'll ship something complete.",
"is_bot": false,
"headline": "Include more files in sdists",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T23:05:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de4437df6be87cc693cc032f112f3c2b5fc57aac",
"body": "No one is using it, no point keeping it here.",
"is_bot": false,
"headline": "Remove unused Vagrantfile",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:52:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ec4b1d6c09b8ae0362234a364dc3a7ea317b900",
"body": "This should make it more obvious that they're just for development.",
"is_bot": false,
"headline": "Rename the requirements.{in,txt} files",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:52:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33ba2226828b7c8db6de4e8c2fbad4c8d43d4ee0",
"body": null,
"is_bot": false,
"headline": "Add some forgotten changelog entries",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:51:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10ac74778c1e60a111e036e89cec72be9931f633",
"body": "Resolves: https://github.com/netaddr/netaddr/issues/110",
"is_bot": false,
"headline": "Fix unintentionally accepting partial IPv4 addresses in IPNetwork (#367)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:41:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d93f249299801eac31f6581dae6df00c45531e1",
"body": null,
"is_bot": false,
"headline": "Mention when expand_partial_(ipv4_)address was made public",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:36:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9510efea0d8482f12cad9e1b8585eb371a269f93",
"body": "It's part of the public API now.",
"is_bot": false,
"headline": "List expand_partial_ipv4_address in the documentation",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:29:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "705aa9a964d4ceb52aa8398147bf80dea691144a",
"body": "I'm about to remove calling it in the IPNetwork constructor so might as\nwell make the function public API in case someone really needs this\nbehavior.",
"is_bot": false,
"headline": "Add expand_partial_ipv4_address to the package's API",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:25:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f603ce20e17d701fae2aa3356c7c83418baa92e4",
"body": null,
"is_bot": false,
"headline": "Add an example to expand_partial_address documentation",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T22:23:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c64b69bd2785780e01804a4e8550104f105f22a",
"body": "Resolves: https://github.com/netaddr/netaddr/issues/214",
"is_bot": false,
"headline": "Fix a few IPNetwork slicing edge cases",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T21:42:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a571bdf3c48d36340fb64601ead6a3b8a1455963",
"body": "Turns out we had three tests for this, let's merge them all into\ntest_ipnetwork_slice_operations_v4 which is nicely parametrized to\naccomodate easy test case additions.",
"is_bot": false,
"headline": "Merge the IPNetwork IPv4 slicing tests together",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T21:25:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e925607f688707ca5ec375718020761854064e08",
"body": "We were listing the results by hand before and we had repeated assertion\ncode.\n\nI figured let's parametrize this test and just compare the results\nagainst list slicing, which should make adding more test cases easier,\nwhich is something I need for [1].\n\n[1] https://github.com/netaddr/netaddr/issues/214",
"is_bot": false,
"headline": "Reduce test_ipnetwork_slice_operations_v4 boilerplate",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-14T21:23:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b65f1e1cfaf2827fa182b8685fdc99803a78b781",
"body": "This project is BSD-licensed.",
"is_bot": false,
"headline": "Remove an incorrect license classifier",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T22:29:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8932e52c91c21d66d09070380d302d9a40550ba2",
"body": "It's the IPv4-compatible addresses that are deprecated.\n\nFixes: https://github.com/netaddr/netaddr/issues/125",
"is_bot": false,
"headline": "Fix the IPv4-mapped/IPv4-compatible mistake",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T21:31:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3de33de5335ce8c66cf095f9543961f35f73653",
"body": "It was bothering me that there was no automatic file type detection and\nsyntax highlighting when I opened the files in my editor.",
"is_bot": false,
"headline": "Give the de facto reST files the .rst extension",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T21:13:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "774ceacf037cdcf2efc1abc550e96c2a61742549",
"body": null,
"is_bot": false,
"headline": "Link to the installation instructions page",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T21:09:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11a4735b375ece3547c512a58bcd225b367340ee",
"body": null,
"is_bot": false,
"headline": "Add more project links to the readme",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T21:09:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0452b8c40aa4cbe4bc80b7771beba9f19a699b5",
"body": null,
"is_bot": false,
"headline": "Add useful project links to the documentation sidebar",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T21:07:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29c33561e5070d879a97368a4f315357e55b655b",
"body": null,
"is_bot": false,
"headline": "Document installation using various package managers",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:59:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b101a48da32c62be0e72f43a16d924419a1abb75",
"body": null,
"is_bot": false,
"headline": "Clean up the installation how-to",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:58:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47a02212982e5f528d15f7f7934d0b9cafefe910",
"body": null,
"is_bot": false,
"headline": "Document the CLI shell dependency installation",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:50:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19dc1b70dc19320d7d7ceb2446305f9950e5be4c",
"body": null,
"is_bot": false,
"headline": "Add an optiomal dependency for the shell feature",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:50:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd7b9d0ee932200fba1323a0e6a9aebeb8313977",
"body": null,
"is_bot": false,
"headline": "Add more useful links to the package metadata",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:35:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6764d8d5efaae2147c1df555c3a56ab3b046ad1c",
"body": null,
"is_bot": false,
"headline": "Fix links to the repository",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T20:29:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "075edd726d5677d46de6ae1a7d430575f6b01a9a",
"body": "It's just the interactive shell right now but I have some plans to add\nmore subcommands.",
"is_bot": false,
"headline": "Document the CLI tool",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T18:46:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31ac6047e4df4bf7d2c0c036a5ee116f170d3a87",
"body": "I forgot that the dict union operator is 3.9+-only.",
"is_bot": false,
"headline": "Fix Python 3.7/3.8 builds",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T16:34:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "779b254d42ece5aeb7a81ad2786417fe5770172c",
"body": "This link will be visible on the package's PyPI page.\r\n\r\nAnd also tools like Renovate bot use this to provide direct\r\naccess to the changelog for a dependency update.",
"is_bot": false,
"headline": "Add changelog URL to package metadata (#366)",
"author_name": "Marti Raudsepp",
"author_login": "intgr",
"committed_at": "2024-02-13T16:32:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db5cd393372c105f4aa48655ae358897e455f5e1",
"body": "Forgotten when the dependencies were changed in [1] and [2].\n\nThe lack of [2]-specific changes led to ReadTheDocs build failures that\nthis commit fixes.\n\n[1] 3e9760769989 (\"Bump jinja2 from 3.1.2 to 3.1.3 in /docs (#347)\")\n[2] 3818febf666d (\"Setup sphinx-issues for convenient GitHub linking\")",
"is_bot": false,
"headline": "Regenerate docs' requirements.txt",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T16:29:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d6a4d24ac906271613bf313612dfe8b409464ac",
"body": "This is in preparation for adding more (sub)commands to the tool (other\nthan the already existing shell).",
"is_bot": false,
"headline": "Add argument parser to the CLI tool",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T00:22:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27b72a64c00e542c7706a0c5043a8032f35c677f",
"body": "It could've theoretically been used in the shell's namespace implicitly\nbut it's os, I judge it's unlikely.",
"is_bot": false,
"headline": "Remove an unused import",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T00:13:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a34fdd744fa9b700b0dc78e0588500c2913c318d",
"body": "I'm about to add some more imports to this module so in order to not\npollute the shell's namespace let's do this.",
"is_bot": false,
"headline": "Store the CLI shell namespace in a separate dictionary",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-13T00:11:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0acfe346b4628f649fd5a88a3d27cbd2bf4437c",
"body": null,
"is_bot": false,
"headline": "Fix the formatting",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T10:01:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eae99e0ee86c49de7d2fd44a65e3f96002c5b9a9",
"body": "Should help with avoiding unexpected runtime problems on older\nPython versions.",
"is_bot": false,
"headline": "Add the required Python version to the package metadata",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T09:58:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47a63be5583d00491d70114be5e8e0a49600da9e",
"body": "Fixes: https://github.com/netaddr/netaddr/issues/157",
"is_bot": false,
"headline": "Fix IPNetwork(...) in IPrange(...) false negatives",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T09:51:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3818febf666d9512ae65c23bc9dd1374eeecb788",
"body": null,
"is_bot": false,
"headline": "Setup sphinx-issues for convenient GitHub linking",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T09:49:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7a4d43f9bbc7cf860c2310b790a737f2f60828a",
"body": null,
"is_bot": false,
"headline": "Release version 1.0.0",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a407439ea0c759e7c44d27750e2aa3834915e25",
"body": "* Punctuation to match commonly used form\n* Remove \"by\" to match commonly used form\n* As far as I understand \"All rights reserved\" shouldn't really be used\n when we have an actual license that lists the rights",
"is_bot": false,
"headline": "Clean up copyright information",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:41:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49268689d21127f5430e7de6d2a73aa66da66716",
"body": "The Sphinx theme we use include the Copyright (c) part by default.",
"is_bot": false,
"headline": "Remove a redundant bit from the documentation footer",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:41:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c90d381c9af3a3148c4703005ab38b66d2de901",
"body": "It's been mostly me working on this project for some time now.",
"is_bot": false,
"headline": "Make the copyright information reflect reality better",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:41:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90449bbf31f8b3622a9e076e7d97c6c4ccda4df4",
"body": "Thanks to this dir() will show everything we imported from the netaddr\npackage, it wouldn't do that before.",
"is_bot": false,
"headline": "Explicitly set IPython's namespace",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:10:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e83ed3c468d46334a7bb3ce3096af3cdc294fcd1",
"body": null,
"is_bot": false,
"headline": "Remoove unused variables",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:07:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e4a3b439924164dd78f32a2cd15823fdfa2b20f",
"body": null,
"is_bot": false,
"headline": "Make the shell banner nicer",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T01:06:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ddb891e110776220257d2012ba0820174609233",
"body": "Just keeping things up to date.",
"is_bot": false,
"headline": "Update the databases",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T00:16:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8483c92d266e87b2566ca9f963ad45c7d1381ef",
"body": null,
"is_bot": false,
"headline": "Fix a few copy/paste errors",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T00:12:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6996d82c5e297b8937e3a4651bc6899f3a60a9b",
"body": "It was simply ignored before.\r\n\r\nFixes: https://github.com/netaddr/netaddr/issues/250",
"is_bot": false,
"headline": "Fix dialect handling in EUI during copy-construction (#364)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T00:09:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "906210905591d1ed67a4b87b46c53fe871040974",
"body": "It was mixing different unrelated address ranges but they weren't even\r\nall address ranges that could be considered \"private\" in some context.\r\n\r\nAll in all seemed like opportunity for confusion and mistakes.\r\n\r\nThere are better replacements for a good subset of that (mentioned in\r\nthe changelog).\r\n\n[…]\nte existed in IPnetwork as well but\r\n\r\na) is_private() returning a bool on a network could never quite work\r\n correctly (there's no simple yes/no answer there)\r\nb) It was not documented as supported",
"is_bot": false,
"headline": "Remove the IPAddress.is_private method (#363)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-10T00:07:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "94ccc61668eb137379b0ad363459b259b19a49d6",
"body": null,
"is_bot": false,
"headline": "Remove no longer relevant warnings",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-09T23:01:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "711aef87ec0aa3f531b6f5ba5238e035c49ffe39",
"body": "I applied two changes recently that made ipv4.str_to_int/IPAddress\r\nstricter[1][2], it only make sense that valid_str matches that new\r\nsemantics.\r\n\r\nIt's achieved with better code reuse, which is (almost) always welcome.\r\n\r\n[1] 95bd1f46109e (\"Make IPv4 parsing more restrictive by default (#359)\")\r\n[2] 3644adaa7599 (\"Reject IPv4 leading zeros in INET_PTON parsing mode (#356)\")",
"is_bot": false,
"headline": "Make ipv4.valid_str (AKA valid_ipv6) match IPAddress strictness (#362)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-09T22:56:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "445c3141eb87dab528f42864f5316e4b670d5b57",
"body": "I think it makes more sense this way. An empty strings is clearly an\r\ninvalid IP address.\r\n\r\nFixes: https://github.com/netaddr/netaddr/issues/155",
"is_bot": false,
"headline": "Return False when passing empty strings to valid_{ipv4,ipv6} (#361)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-09T22:48:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc427422474d08daa241a902d855d422a90f74cd",
"body": "As planned before.",
"is_bot": false,
"headline": "Drop implicit_prefix support in IPNetwork (#360)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-09T22:41:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "95bd1f46109e9be8a792f7fb09455a3b24dce82e",
"body": "Planned some time ago, INET_ATON has some big footguns – can be\r\nrequested explicitly if someone really needs it.",
"is_bot": false,
"headline": "Make IPv4 parsing more restrictive by default (#359)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-09T21:40:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b23f4f75ec5a359ec4c24ae15f40449c5a1b926",
"body": "The behaviors they switch deserve some verbosity.",
"is_bot": false,
"headline": "Remove flag shorthands as planned before (#357)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T23:12:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a38e477df55f2ba47e75bb3168f19fe9a888e051",
"body": "Forgot to do it in [1].\r\n\r\n[1] 3644adaa7599 (\"Reject IPv4 leading zeros in INET_PTON parsing mode (#356)\")",
"is_bot": false,
"headline": "Fix INET_PTON's behavior change documentation (#358)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T23:03:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4024d7a9444ef3cfefdcc25eff435ce16e224592",
"body": "The coverage collection slows running tests down a bit, annoying in\ndevelopment when it happens every single time we run the tests.",
"is_bot": false,
"headline": "Only collect coverage in CI testing by default",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8325a5e9c8fe211cc24c9b434b9c71d10b5829cc",
"body": null,
"is_bot": false,
"headline": "Use modern pytest invocation instead of py.test",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37284cca56482c7b35b8ad9c9801f8d4bb4bc120",
"body": "Not much need for it and it mixed responsibilities – testing is testing.",
"is_bot": false,
"headline": "Stop installing dependencies when testing",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c94a47cf152e208e10419edb2fa032c2c342458",
"body": "I don't think it does much that's useful to us, only adds a bit of noise\nto the test output.",
"is_bot": false,
"headline": "Stop cleaning when testing",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5cbcdadb93bd6ecf5e42ced6bb522872c33bc94a",
"body": "I don't see it being used anywhere, let's remove. Can restore if it\nturns out needed.",
"is_bot": false,
"headline": "Stop generatint JUnit XML output",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "840512ec6ce11a585009d6feb72173f1fa41925b",
"body": "This makes the \"make test\" command test doctests too, for example.",
"is_bot": false,
"headline": "Test files other than netaddr/tests",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3644adaa7599a26826376413730a7c9172fbeb8b",
"body": "Deprecated a while ago as source of potential tricky problems.",
"is_bot": false,
"headline": "Reject IPv4 leading zeros in INET_PTON parsing mode (#356)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:42:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e6a31bc4b0d65d6c2f448b2346d11cfddb508cc",
"body": null,
"is_bot": false,
"headline": "Refactor some tests to reduce repeated code (#355)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T22:26:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b498ed836cff15ae629f8c593e598de30d05a2ed",
"body": "There wasn't much point keep them at the root level in the repository\r\nand the .txt extensions were messing file syntax highlighting in various\r\neditors (difficult to detect that the content is actually reST).",
"is_bot": false,
"headline": "Move tutorials to documentation proper (#315)",
"author_name": "Jakub Stasiak",
"author_login": "jstasiak",
"committed_at": "2024-02-08T00:41:56Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 7,
"commits_last_year": 0,
"latest_release_at": "2024-05-28T21:32:50Z",
"latest_release_tag": "1.3.0",
"releases_from_tags": false,
"days_since_last_push": 746,
"active_weeks_last_year": 0,
"days_since_latest_release": 784,
"mean_days_between_releases": 42
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 37,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "netaddr",
"exists": true,
"license": "BSD License",
"keywords": [
"Networking",
"Systems Administration",
"IANA",
"IEEE",
"CIDR",
"IP",
"IPv4",
"IPv6",
"CIDR",
"EUI",
"MAC",
"MAC-48",
"EUI-48",
"EUI-64",
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"Intended Audience :: Information Technology",
"Intended Audience :: Science/Research",
"Intended Audience :: System Administrators",
"Intended Audience :: Telecommunications Industry",
"License :: OSI Approved :: BSD License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Communications",
"Topic :: Documentation",
"Topic :: Education",
"Topic :: Education :: Testing",
"Topic :: Home Automation",
"Topic :: Internet",
"Topic :: Internet :: Log Analysis",
"Topic :: Internet :: Name Service (DNS)",
"Topic :: Internet :: Proxy Servers",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: Indexing/Search",
"Topic :: Internet :: WWW/HTTP :: Site Management",
"Topic :: Security",
"Topic :: Software Development",
"Topic :: Software Development :: Libraries",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Quality Assurance",
"Topic :: Software Development :: Testing",
"Topic :: Software Development :: Testing :: Traffic Generation",
"Topic :: System :: Benchmark",
"Topic :: System :: Clustering",
"Topic :: System :: Distributed Computing",
"Topic :: System :: Installation/Setup",
"Topic :: System :: Logging",
"Topic :: System :: Monitoring",
"Topic :: System :: Networking",
"Topic :: System :: Networking :: Firewalls",
"Topic :: System :: Networking :: Monitoring",
"Topic :: System :: Networking :: Time Synchronization",
"Topic :: System :: Recovery Tools",
"Topic :: System :: Shells",
"Topic :: System :: Software Distribution",
"Topic :: System :: System Shells",
"Topic :: System :: Systems Administration",
"Topic :: Text Processing",
"Topic :: Text Processing :: Filters",
"Topic :: Utilities"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/netaddr/",
"is_deprecated": false,
"latest_version": "1.3.0",
"repository_url": "https://github.com/netaddr/netaddr/",
"versions_count": 34,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2008-07-15T22:16:27Z",
"latest_published_at": "2024-05-28T21:30:37.743736Z",
"latest_version_yanked": null,
"days_since_latest_publish": 784
}
]
},
"popularity": {
"forks": 176,
"stars": 827,
"watchers": 37,
"fork_history": {
"days": [
{
"date": "2011-10-26",
"count": 1
},
{
"date": "2012-01-23",
"count": 1
},
{
"date": "2012-01-27",
"count": 1
},
{
"date": "2012-07-02",
"count": 1
},
{
"date": "2012-08-23",
"count": 1
},
{
"date": "2012-11-17",
"count": 1
},
{
"date": "2013-01-28",
"count": 1
},
{
"date": "2013-03-19",
"count": 1
},
{
"date": "2013-04-07",
"count": 1
},
{
"date": "2013-04-29",
"count": 1
},
{
"date": "2013-06-20",
"count": 1
},
{
"date": "2013-06-22",
"count": 1
},
{
"date": "2013-07-15",
"count": 1
},
{
"date": "2013-09-28",
"count": 1
},
{
"date": "2013-10-14",
"count": 1
},
{
"date": "2013-12-03",
"count": 1
},
{
"date": "2014-01-23",
"count": 1
},
{
"date": "2014-03-08",
"count": 1
},
{
"date": "2014-04-11",
"count": 1
},
{
"date": "2014-04-29",
"count": 1
},
{
"date": "2014-06-16",
"count": 1
},
{
"date": "2014-08-06",
"count": 1
},
{
"date": "2014-11-30",
"count": 1
},
{
"date": "2014-12-23",
"count": 1
},
{
"date": "2015-02-25",
"count": 1
},
{
"date": "2015-03-09",
"count": 1
},
{
"date": "2015-04-24",
"count": 1
},
{
"date": "2015-05-07",
"count": 1
},
{
"date": "2015-05-19",
"count": 1
},
{
"date": "2015-05-25",
"count": 1
},
{
"date": "2015-06-30",
"count": 1
},
{
"date": "2015-08-21",
"count": 2
},
{
"date": "2015-08-31",
"count": 1
},
{
"date": "2015-09-19",
"count": 1
},
{
"date": "2015-09-28",
"count": 1
},
{
"date": "2015-10-22",
"count": 1
},
{
"date": "2015-10-26",
"count": 1
},
{
"date": "2015-11-11",
"count": 1
},
{
"date": "2015-12-07",
"count": 1
},
{
"date": "2016-02-04",
"count": 1
},
{
"date": "2016-03-03",
"count": 1
},
{
"date": "2016-03-29",
"count": 1
},
{
"date": "2016-04-14",
"count": 1
},
{
"date": "2016-04-28",
"count": 1
},
{
"date": "2016-05-06",
"count": 1
},
{
"date": "2016-05-14",
"count": 1
},
{
"date": "2016-05-17",
"count": 1
},
{
"date": "2016-05-19",
"count": 1
},
{
"date": "2016-05-29",
"count": 1
},
{
"date": "2016-06-24",
"count": 1
},
{
"date": "2016-07-26",
"count": 1
},
{
"date": "2016-09-13",
"count": 1
},
{
"date": "2016-09-16",
"count": 2
},
{
"date": "2016-11-20",
"count": 1
},
{
"date": "2016-11-30",
"count": 1
},
{
"date": "2016-12-07",
"count": 1
},
{
"date": "2016-12-11",
"count": 1
},
{
"date": "2016-12-29",
"count": 1
},
{
"date": "2017-01-02",
"count": 1
},
{
"date": "2017-01-09",
"count": 1
},
{
"date": "2017-01-13",
"count": 1
},
{
"date": "2017-01-14",
"count": 1
},
{
"date": "2017-01-30",
"count": 1
},
{
"date": "2017-02-01",
"count": 1
},
{
"date": "2017-03-21",
"count": 1
},
{
"date": "2017-03-30",
"count": 1
},
{
"date": "2017-04-13",
"count": 1
},
{
"date": "2017-04-18",
"count": 1
},
{
"date": "2017-04-27",
"count": 1
},
{
"date": "2017-06-16",
"count": 1
},
{
"date": "2017-06-24",
"count": 1
},
{
"date": "2017-08-11",
"count": 1
},
{
"date": "2017-10-06",
"count": 1
},
{
"date": "2017-12-11",
"count": 1
},
{
"date": "2018-01-20",
"count": 1
},
{
"date": "2018-01-23",
"count": 1
},
{
"date": "2018-03-13",
"count": 1
},
{
"date": "2018-03-22",
"count": 1
},
{
"date": "2018-04-04",
"count": 1
},
{
"date": "2018-04-26",
"count": 1
},
{
"date": "2018-06-07",
"count": 1
},
{
"date": "2018-06-15",
"count": 1
},
{
"date": "2018-07-05",
"count": 1
},
{
"date": "2018-08-23",
"count": 1
},
{
"date": "2018-10-16",
"count": 1
},
{
"date": "2018-11-09",
"count": 1
},
{
"date": "2019-01-10",
"count": 1
},
{
"date": "2019-01-21",
"count": 1
},
{
"date": "2019-01-30",
"count": 1
},
{
"date": "2019-02-13",
"count": 1
},
{
"date": "2019-03-11",
"count": 1
},
{
"date": "2019-04-22",
"count": 1
},
{
"date": "2019-04-30",
"count": 1
},
{
"date": "2019-05-12",
"count": 1
},
{
"date": "2019-05-23",
"count": 1
},
{
"date": "2019-07-16",
"count": 1
},
{
"date": "2019-08-12",
"count": 1
},
{
"date": "2019-08-25",
"count": 1
},
{
"date": "2019-09-19",
"count": 1
},
{
"date": "2019-10-11",
"count": 1
},
{
"date": "2019-11-08",
"count": 1
},
{
"date": "2019-11-11",
"count": 1
},
{
"date": "2019-11-12",
"count": 1
},
{
"date": "2019-11-13",
"count": 1
},
{
"date": "2019-11-22",
"count": 1
},
{
"date": "2019-12-19",
"count": 1
},
{
"date": "2019-12-23",
"count": 1
},
{
"date": "2020-01-02",
"count": 1
},
{
"date": "2020-02-14",
"count": 1
},
{
"date": "2020-03-04",
"count": 1
},
{
"date": "2020-04-12",
"count": 1
},
{
"date": "2020-04-17",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-05-11",
"count": 1
},
{
"date": "2020-05-13",
"count": 1
},
{
"date": "2020-05-19",
"count": 1
},
{
"date": "2020-05-22",
"count": 1
},
{
"date": "2020-06-14",
"count": 1
},
{
"date": "2020-09-12",
"count": 1
},
{
"date": "2020-09-30",
"count": 1
},
{
"date": "2020-11-05",
"count": 1
},
{
"date": "2020-11-23",
"count": 1
},
{
"date": "2020-11-30",
"count": 1
},
{
"date": "2021-01-06",
"count": 1
},
{
"date": "2021-01-27",
"count": 1
},
{
"date": "2021-02-04",
"count": 1
},
{
"date": "2021-02-05",
"count": 1
},
{
"date": "2021-02-17",
"count": 1
},
{
"date": "2021-02-23",
"count": 1
},
{
"date": "2021-04-14",
"count": 1
},
{
"date": "2021-04-17",
"count": 1
},
{
"date": "2021-05-07",
"count": 1
},
{
"date": "2021-09-06",
"count": 1
},
{
"date": "2021-10-25",
"count": 1
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2021-12-02",
"count": 1
},
{
"date": "2021-12-30",
"count": 1
},
{
"date": "2022-01-10",
"count": 1
},
{
"date": "2022-02-05",
"count": 1
},
{
"date": "2022-02-12",
"count": 1
},
{
"date": "2022-03-02",
"count": 1
},
{
"date": "2022-03-05",
"count": 1
},
{
"date": "2022-04-11",
"count": 1
},
{
"date": "2022-04-14",
"count": 1
},
{
"date": "2022-05-03",
"count": 1
},
{
"date": "2022-05-10",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-06-25",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-10-19",
"count": 1
},
{
"date": "2022-12-15",
"count": 1
},
{
"date": "2022-12-22",
"count": 1
},
{
"date": "2023-04-26",
"count": 1
},
{
"date": "2023-05-03",
"count": 1
},
{
"date": "2023-08-15",
"count": 1
},
{
"date": "2023-09-19",
"count": 2
},
{
"date": "2023-10-10",
"count": 1
},
{
"date": "2023-12-05",
"count": 1
},
{
"date": "2023-12-11",
"count": 1
},
{
"date": "2023-12-29",
"count": 1
},
{
"date": "2024-01-26",
"count": 1
},
{
"date": "2024-02-13",
"count": 1
},
{
"date": "2024-02-17",
"count": 2
},
{
"date": "2024-03-20",
"count": 1
},
{
"date": "2024-08-15",
"count": 1
},
{
"date": "2025-09-14",
"count": 1
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-06-24",
"count": 1
}
],
"complete": true,
"collected": 172,
"total_forks": 176
},
"star_history": {
"days": [
{
"date": "2010-05-24",
"count": 28
},
{
"date": "2010-06-02",
"count": 1
},
{
"date": "2010-08-05",
"count": 1
},
{
"date": "2010-08-06",
"count": 1
},
{
"date": "2010-09-14",
"count": 1
},
{
"date": "2010-11-15",
"count": 1
},
{
"date": "2010-12-01",
"count": 1
},
{
"date": "2010-12-10",
"count": 1
},
{
"date": "2010-12-20",
"count": 1
},
{
"date": "2010-12-31",
"count": 1
},
{
"date": "2011-01-17",
"count": 1
},
{
"date": "2011-01-22",
"count": 1
},
{
"date": "2011-02-08",
"count": 1
},
{
"date": "2011-02-13",
"count": 1
},
{
"date": "2011-02-14",
"count": 1
},
{
"date": "2011-03-18",
"count": 1
},
{
"date": "2011-03-25",
"count": 1
},
{
"date": "2011-04-20",
"count": 1
},
{
"date": "2011-05-03",
"count": 1
},
{
"date": "2011-05-21",
"count": 1
},
{
"date": "2011-05-31",
"count": 1
},
{
"date": "2011-06-24",
"count": 1
},
{
"date": "2011-07-08",
"count": 1
},
{
"date": "2011-07-30",
"count": 1
},
{
"date": "2011-08-09",
"count": 1
},
{
"date": "2011-09-23",
"count": 1
},
{
"date": "2011-12-03",
"count": 1
},
{
"date": "2011-12-11",
"count": 1
},
{
"date": "2011-12-29",
"count": 1
},
{
"date": "2012-01-11",
"count": 1
},
{
"date": "2012-01-13",
"count": 1
},
{
"date": "2012-04-19",
"count": 1
},
{
"date": "2012-05-08",
"count": 1
},
{
"date": "2012-06-12",
"count": 1
},
{
"date": "2012-08-18",
"count": 1
},
{
"date": "2013-02-16",
"count": 1
},
{
"date": "2013-02-27",
"count": 1
},
{
"date": "2013-03-19",
"count": 1
},
{
"date": "2013-03-29",
"count": 1
},
{
"date": "2013-03-30",
"count": 1
},
{
"date": "2013-04-02",
"count": 1
},
{
"date": "2013-04-25",
"count": 1
},
{
"date": "2013-05-10",
"count": 1
},
{
"date": "2013-05-16",
"count": 1
},
{
"date": "2013-05-27",
"count": 1
},
{
"date": "2013-05-30",
"count": 1
},
{
"date": "2013-06-05",
"count": 1
},
{
"date": "2013-06-28",
"count": 1
},
{
"date": "2013-07-07",
"count": 1
},
{
"date": "2013-07-13",
"count": 1
},
{
"date": "2013-08-07",
"count": 1
},
{
"date": "2013-08-08",
"count": 1
},
{
"date": "2013-09-10",
"count": 1
},
{
"date": "2013-10-10",
"count": 1
},
{
"date": "2013-10-15",
"count": 1
},
{
"date": "2013-10-20",
"count": 1
},
{
"date": "2013-11-24",
"count": 1
},
{
"date": "2013-11-26",
"count": 1
},
{
"date": "2013-12-02",
"count": 4
},
{
"date": "2013-12-03",
"count": 1
},
{
"date": "2013-12-08",
"count": 1
},
{
"date": "2013-12-10",
"count": 1
},
{
"date": "2013-12-14",
"count": 1
},
{
"date": "2013-12-16",
"count": 1
},
{
"date": "2013-12-19",
"count": 1
},
{
"date": "2013-12-24",
"count": 1
},
{
"date": "2013-12-26",
"count": 1
},
{
"date": "2013-12-31",
"count": 1
},
{
"date": "2014-02-27",
"count": 2
},
{
"date": "2014-03-10",
"count": 1
},
{
"date": "2014-03-27",
"count": 1
},
{
"date": "2014-04-03",
"count": 1
},
{
"date": "2014-04-07",
"count": 1
},
{
"date": "2014-04-08",
"count": 1
},
{
"date": "2014-04-17",
"count": 1
},
{
"date": "2014-04-29",
"count": 1
},
{
"date": "2014-05-12",
"count": 1
},
{
"date": "2014-05-13",
"count": 1
},
{
"date": "2014-05-14",
"count": 1
},
{
"date": "2014-06-01",
"count": 1
},
{
"date": "2014-06-02",
"count": 1
},
{
"date": "2014-06-03",
"count": 1
},
{
"date": "2014-06-12",
"count": 1
},
{
"date": "2014-06-23",
"count": 1
},
{
"date": "2014-06-24",
"count": 1
},
{
"date": "2014-06-27",
"count": 1
},
{
"date": "2014-07-07",
"count": 1
},
{
"date": "2014-07-10",
"count": 1
},
{
"date": "2014-07-12",
"count": 1
},
{
"date": "2014-07-15",
"count": 1
},
{
"date": "2014-07-24",
"count": 8
},
{
"date": "2014-07-25",
"count": 2
},
{
"date": "2014-07-26",
"count": 1
},
{
"date": "2014-07-28",
"count": 1
},
{
"date": "2014-08-01",
"count": 1
},
{
"date": "2014-08-02",
"count": 1
},
{
"date": "2014-08-03",
"count": 1
},
{
"date": "2014-08-04",
"count": 2
},
{
"date": "2014-08-08",
"count": 1
},
{
"date": "2014-08-16",
"count": 1
},
{
"date": "2014-08-21",
"count": 1
},
{
"date": "2014-08-25",
"count": 1
},
{
"date": "2014-08-28",
"count": 1
},
{
"date": "2014-08-30",
"count": 1
},
{
"date": "2014-09-12",
"count": 1
},
{
"date": "2014-09-22",
"count": 1
},
{
"date": "2014-09-24",
"count": 1
},
{
"date": "2014-09-30",
"count": 1
},
{
"date": "2014-10-15",
"count": 1
},
{
"date": "2014-11-01",
"count": 1
},
{
"date": "2014-11-04",
"count": 1
},
{
"date": "2014-11-05",
"count": 1
},
{
"date": "2014-11-06",
"count": 1
},
{
"date": "2014-11-08",
"count": 1
},
{
"date": "2014-11-15",
"count": 1
},
{
"date": "2014-11-17",
"count": 1
},
{
"date": "2014-11-22",
"count": 1
},
{
"date": "2014-12-18",
"count": 1
},
{
"date": "2014-12-19",
"count": 1
},
{
"date": "2014-12-25",
"count": 1
},
{
"date": "2014-12-29",
"count": 1
},
{
"date": "2014-12-30",
"count": 1
},
{
"date": "2015-01-02",
"count": 1
},
{
"date": "2015-01-21",
"count": 1
},
{
"date": "2015-01-23",
"count": 1
},
{
"date": "2015-02-03",
"count": 1
},
{
"date": "2015-02-06",
"count": 1
},
{
"date": "2015-02-09",
"count": 1
},
{
"date": "2015-02-19",
"count": 1
},
{
"date": "2015-03-06",
"count": 1
},
{
"date": "2015-03-08",
"count": 1
},
{
"date": "2015-03-11",
"count": 2
},
{
"date": "2015-03-30",
"count": 1
},
{
"date": "2015-04-09",
"count": 1
},
{
"date": "2015-04-25",
"count": 2
},
{
"date": "2015-04-28",
"count": 1
},
{
"date": "2015-04-29",
"count": 1
},
{
"date": "2015-05-05",
"count": 1
},
{
"date": "2015-05-07",
"count": 1
},
{
"date": "2015-05-16",
"count": 1
},
{
"date": "2015-05-20",
"count": 1
},
{
"date": "2015-05-22",
"count": 1
},
{
"date": "2015-05-25",
"count": 1
},
{
"date": "2015-05-31",
"count": 1
},
{
"date": "2015-06-03",
"count": 1
},
{
"date": "2015-06-08",
"count": 1
},
{
"date": "2015-06-18",
"count": 3
},
{
"date": "2015-06-29",
"count": 1
},
{
"date": "2015-07-07",
"count": 1
},
{
"date": "2015-07-10",
"count": 1
},
{
"date": "2015-07-17",
"count": 1
},
{
"date": "2015-07-22",
"count": 3
},
{
"date": "2015-08-14",
"count": 1
},
{
"date": "2015-08-26",
"count": 2
},
{
"date": "2015-09-09",
"count": 1
},
{
"date": "2015-09-12",
"count": 1
},
{
"date": "2015-09-17",
"count": 1
},
{
"date": "2015-09-23",
"count": 1
},
{
"date": "2015-09-25",
"count": 1
},
{
"date": "2015-09-30",
"count": 1
},
{
"date": "2015-10-01",
"count": 1
},
{
"date": "2015-10-12",
"count": 1
},
{
"date": "2015-10-16",
"count": 1
},
{
"date": "2015-10-22",
"count": 1
},
{
"date": "2015-10-24",
"count": 1
},
{
"date": "2015-10-26",
"count": 1
},
{
"date": "2015-11-10",
"count": 1
},
{
"date": "2015-11-11",
"count": 1
},
{
"date": "2015-11-16",
"count": 2
},
{
"date": "2015-12-07",
"count": 1
},
{
"date": "2015-12-08",
"count": 1
},
{
"date": "2015-12-11",
"count": 1
},
{
"date": "2015-12-22",
"count": 1
},
{
"date": "2015-12-27",
"count": 1
},
{
"date": "2016-01-07",
"count": 1
},
{
"date": "2016-01-14",
"count": 1
},
{
"date": "2016-01-18",
"count": 1
},
{
"date": "2016-01-21",
"count": 1
},
{
"date": "2016-01-22",
"count": 1
},
{
"date": "2016-01-24",
"count": 1
},
{
"date": "2016-01-29",
"count": 1
},
{
"date": "2016-02-01",
"count": 1
},
{
"date": "2016-02-02",
"count": 3
},
{
"date": "2016-02-05",
"count": 1
},
{
"date": "2016-02-09",
"count": 1
},
{
"date": "2016-02-18",
"count": 1
},
{
"date": "2016-02-19",
"count": 1
},
{
"date": "2016-02-29",
"count": 1
},
{
"date": "2016-03-07",
"count": 1
},
{
"date": "2016-03-08",
"count": 1
},
{
"date": "2016-03-10",
"count": 1
},
{
"date": "2016-03-16",
"count": 1
},
{
"date": "2016-03-17",
"count": 3
},
{
"date": "2016-03-20",
"count": 1
},
{
"date": "2016-03-23",
"count": 1
},
{
"date": "2016-03-24",
"count": 2
},
{
"date": "2016-03-28",
"count": 1
},
{
"date": "2016-04-13",
"count": 1
},
{
"date": "2016-04-17",
"count": 1
},
{
"date": "2016-04-28",
"count": 1
},
{
"date": "2016-05-03",
"count": 1
},
{
"date": "2016-05-05",
"count": 1
},
{
"date": "2016-05-06",
"count": 1
},
{
"date": "2016-05-09",
"count": 1
},
{
"date": "2016-05-11",
"count": 1
},
{
"date": "2016-05-13",
"count": 2
},
{
"date": "2016-05-16",
"count": 1
},
{
"date": "2016-05-17",
"count": 1
},
{
"date": "2016-06-11",
"count": 1
},
{
"date": "2016-06-26",
"count": 1
},
{
"date": "2016-06-28",
"count": 1
},
{
"date": "2016-07-02",
"count": 1
},
{
"date": "2016-07-11",
"count": 1
},
{
"date": "2016-07-17",
"count": 1
},
{
"date": "2016-08-01",
"count": 1
},
{
"date": "2016-08-06",
"count": 1
},
{
"date": "2016-08-09",
"count": 2
},
{
"date": "2016-08-11",
"count": 1
},
{
"date": "2016-08-19",
"count": 1
},
{
"date": "2016-09-20",
"count": 1
},
{
"date": "2016-09-27",
"count": 1
},
{
"date": "2016-10-02",
"count": 1
},
{
"date": "2016-10-06",
"count": 1
},
{
"date": "2016-10-07",
"count": 1
},
{
"date": "2016-10-20",
"count": 1
},
{
"date": "2016-10-25",
"count": 1
},
{
"date": "2016-11-26",
"count": 1
},
{
"date": "2016-11-28",
"count": 1
},
{
"date": "2016-11-29",
"count": 1
},
{
"date": "2016-12-02",
"count": 1
},
{
"date": "2016-12-19",
"count": 1
},
{
"date": "2016-12-22",
"count": 1
},
{
"date": "2017-01-04",
"count": 1
},
{
"date": "2017-01-10",
"count": 1
},
{
"date": "2017-01-27",
"count": 1
},
{
"date": "2017-01-29",
"count": 1
},
{
"date": "2017-02-03",
"count": 1
},
{
"date": "2017-02-05",
"count": 1
},
{
"date": "2017-02-06",
"count": 1
},
{
"date": "2017-02-08",
"count": 1
},
{
"date": "2017-02-10",
"count": 1
},
{
"date": "2017-02-12",
"count": 1
},
{
"date": "2017-02-15",
"count": 1
},
{
"date": "2017-02-18",
"count": 1
},
{
"date": "2017-02-21",
"count": 2
},
{
"date": "2017-02-28",
"count": 2
},
{
"date": "2017-03-06",
"count": 2
},
{
"date": "2017-03-10",
"count": 1
},
{
"date": "2017-03-15",
"count": 3
},
{
"date": "2017-03-20",
"count": 1
},
{
"date": "2017-03-24",
"count": 1
},
{
"date": "2017-03-29",
"count": 1
},
{
"date": "2017-04-05",
"count": 1
},
{
"date": "2017-04-14",
"count": 2
},
{
"date": "2017-04-15",
"count": 1
},
{
"date": "2017-04-16",
"count": 1
},
{
"date": "2017-04-20",
"count": 1
},
{
"date": "2017-04-22",
"count": 1
},
{
"date": "2017-04-23",
"count": 1
},
{
"date": "2017-04-27",
"count": 1
},
{
"date": "2017-05-02",
"count": 1
},
{
"date": "2017-05-08",
"count": 1
},
{
"date": "2017-05-09",
"count": 1
},
{
"date": "2017-05-11",
"count": 1
},
{
"date": "2017-05-13",
"count": 1
},
{
"date": "2017-05-15",
"count": 1
},
{
"date": "2017-05-19",
"count": 1
},
{
"date": "2017-05-24",
"count": 1
},
{
"date": "2017-05-30",
"count": 1
},
{
"date": "2017-06-07",
"count": 1
},
{
"date": "2017-06-08",
"count": 1
},
{
"date": "2017-06-15",
"count": 1
},
{
"date": "2017-06-16",
"count": 1
},
{
"date": "2017-06-21",
"count": 1
},
{
"date": "2017-06-24",
"count": 1
},
{
"date": "2017-06-29",
"count": 1
},
{
"date": "2017-07-03",
"count": 1
},
{
"date": "2017-07-13",
"count": 1
},
{
"date": "2017-07-14",
"count": 1
},
{
"date": "2017-07-24",
"count": 1
},
{
"date": "2017-07-26",
"count": 1
},
{
"date": "2017-07-27",
"count": 2
},
{
"date": "2017-08-10",
"count": 1
},
{
"date": "2017-08-16",
"count": 1
},
{
"date": "2017-08-19",
"count": 1
},
{
"date": "2017-08-22",
"count": 1
},
{
"date": "2017-08-29",
"count": 1
},
{
"date": "2017-09-01",
"count": 1
},
{
"date": "2017-09-18",
"count": 1
},
{
"date": "2017-09-28",
"count": 1
},
{
"date": "2017-10-11",
"count": 1
},
{
"date": "2017-10-17",
"count": 1
},
{
"date": "2017-11-05",
"count": 1
},
{
"date": "2017-11-16",
"count": 1
},
{
"date": "2017-11-18",
"count": 2
},
{
"date": "2017-11-20",
"count": 1
},
{
"date": "2017-11-21",
"count": 1
},
{
"date": "2017-11-28",
"count": 1
},
{
"date": "2017-12-09",
"count": 1
},
{
"date": "2017-12-19",
"count": 1
},
{
"date": "2018-01-01",
"count": 1
},
{
"date": "2018-01-05",
"count": 1
},
{
"date": "2018-01-12",
"count": 2
},
{
"date": "2018-01-16",
"count": 1
},
{
"date": "2018-01-20",
"count": 1
},
{
"date": "2018-01-21",
"count": 1
},
{
"date": "2018-01-23",
"count": 1
},
{
"date": "2018-01-25",
"count": 3
},
{
"date": "2018-02-07",
"count": 1
},
{
"date": "2018-02-12",
"count": 1
},
{
"date": "2018-02-13",
"count": 1
},
{
"date": "2018-02-19",
"count": 1
},
{
"date": "2018-02-21",
"count": 1
},
{
"date": "2018-02-22",
"count": 1
},
{
"date": "2018-02-26",
"count": 1
},
{
"date": "2018-03-01",
"count": 1
},
{
"date": "2018-03-02",
"count": 1
},
{
"date": "2018-03-17",
"count": 1
},
{
"date": "2018-03-21",
"count": 1
},
{
"date": "2018-03-29",
"count": 1
},
{
"date": "2018-04-08",
"count": 1
},
{
"date": "2018-04-11",
"count": 1
},
{
"date": "2018-04-13",
"count": 1
},
{
"date": "2018-04-27",
"count": 1
},
{
"date": "2018-04-30",
"count": 1
},
{
"date": "2018-05-09",
"count": 1
},
{
"date": "2018-05-11",
"count": 1
},
{
"date": "2018-05-12",
"count": 1
},
{
"date": "2018-05-14",
"count": 1
},
{
"date": "2018-05-15",
"count": 1
},
{
"date": "2018-05-16",
"count": 1
},
{
"date": "2018-05-21",
"count": 3
},
{
"date": "2018-05-22",
"count": 1
},
{
"date": "2018-05-29",
"count": 1
},
{
"date": "2018-05-31",
"count": 1
},
{
"date": "2018-06-01",
"count": 1
},
{
"date": "2018-06-13",
"count": 1
},
{
"date": "2018-06-18",
"count": 2
},
{
"date": "2018-06-19",
"count": 1
},
{
"date": "2018-06-29",
"count": 1
},
{
"date": "2018-07-01",
"count": 1
},
{
"date": "2018-07-06",
"count": 1
},
{
"date": "2018-07-15",
"count": 1
},
{
"date": "2018-07-19",
"count": 1
},
{
"date": "2018-07-20",
"count": 1
},
{
"date": "2018-07-27",
"count": 1
},
{
"date": "2018-08-01",
"count": 1
},
{
"date": "2018-08-03",
"count": 2
},
{
"date": "2018-08-07",
"count": 2
},
{
"date": "2018-08-10",
"count": 1
},
{
"date": "2018-08-12",
"count": 1
},
{
"date": "2018-08-23",
"count": 1
},
{
"date": "2018-08-25",
"count": 1
},
{
"date": "2018-08-28",
"count": 1
},
{
"date": "2018-09-09",
"count": 1
},
{
"date": "2018-09-15",
"count": 1
},
{
"date": "2018-09-18",
"count": 2
},
{
"date": "2018-09-23",
"count": 1
},
{
"date": "2018-09-26",
"count": 1
},
{
"date": "2018-10-01",
"count": 2
},
{
"date": "2018-10-07",
"count": 1
},
{
"date": "2018-10-12",
"count": 1
},
{
"date": "2018-10-16",
"count": 1
},
{
"date": "2018-10-19",
"count": 1
},
{
"date": "2018-10-20",
"count": 1
},
{
"date": "2018-10-22",
"count": 1
},
{
"date": "2018-10-23",
"count": 1
},
{
"date": "2018-10-24",
"count": 1
},
{
"date": "2018-10-26",
"count": 1
},
{
"date": "2018-10-28",
"count": 1
},
{
"date": "2018-10-31",
"count": 1
},
{
"date": "2018-11-01",
"count": 1
},
{
"date": "2018-11-05",
"count": 1
},
{
"date": "2018-11-15",
"count": 1
},
{
"date": "2018-11-19",
"count": 2
},
{
"date": "2018-11-21",
"count": 1
},
{
"date": "2018-11-23",
"count": 1
},
{
"date": "2018-12-11",
"count": 1
},
{
"date": "2018-12-16",
"count": 1
},
{
"date": "2018-12-28",
"count": 1
},
{
"date": "2019-01-01",
"count": 1
},
{
"date": "2019-01-06",
"count": 1
},
{
"date": "2019-01-10",
"count": 1
},
{
"date": "2019-01-14",
"count": 1
},
{
"date": "2019-01-22",
"count": 1
},
{
"date": "2019-01-24",
"count": 1
},
{
"date": "2019-01-28",
"count": 1
},
{
"date": "2019-02-08",
"count": 1
},
{
"date": "2019-02-16",
"count": 1
},
{
"date": "2019-02-24",
"count": 1
},
{
"date": "2019-03-01",
"count": 1
},
{
"date": "2019-03-02",
"count": 1
},
{
"date": "2019-03-07",
"count": 1
},
{
"date": "2019-03-09",
"count": 1
},
{
"date": "2019-03-12",
"count": 1
},
{
"date": "2019-03-14",
"count": 1
},
{
"date": "2019-03-20",
"count": 1
},
{
"date": "2019-04-08",
"count": 1
},
{
"date": "2019-04-26",
"count": 1
},
{
"date": "2019-05-06",
"count": 1
},
{
"date": "2019-05-09",
"count": 2
},
{
"date": "2019-05-10",
"count": 1
},
{
"date": "2019-05-14",
"count": 1
},
{
"date": "2019-05-20",
"count": 1
},
{
"date": "2019-05-23",
"count": 1
},
{
"date": "2019-05-27",
"count": 1
},
{
"date": "2019-05-29",
"count": 1
},
{
"date": "2019-06-06",
"count": 1
},
{
"date": "2019-06-10",
"count": 1
},
{
"date": "2019-06-11",
"count": 1
},
{
"date": "2019-06-21",
"count": 1
},
{
"date": "2019-06-25",
"count": 1
},
{
"date": "2019-06-26",
"count": 1
},
{
"date": "2019-06-28",
"count": 1
},
{
"date": "2019-07-02",
"count": 1
},
{
"date": "2019-07-07",
"count": 1
},
{
"date": "2019-07-10",
"count": 1
},
{
"date": "2019-07-11",
"count": 1
},
{
"date": "2019-07-16",
"count": 1
},
{
"date": "2019-07-24",
"count": 1
},
{
"date": "2019-07-29",
"count": 1
},
{
"date": "2019-07-30",
"count": 1
},
{
"date": "2019-08-01",
"count": 1
},
{
"date": "2019-08-04",
"count": 1
},
{
"date": "2019-08-09",
"count": 1
},
{
"date": "2019-08-25",
"count": 1
},
{
"date": "2019-08-29",
"count": 1
},
{
"date": "2019-08-30",
"count": 3
},
{
"date": "2019-09-19",
"count": 1
},
{
"date": "2019-09-20",
"count": 2
},
{
"date": "2019-09-24",
"count": 1
},
{
"date": "2019-09-25",
"count": 2
},
{
"date": "2019-09-28",
"count": 1
},
{
"date": "2019-09-29",
"count": 1
},
{
"date": "2019-10-03",
"count": 1
},
{
"date": "2019-10-21",
"count": 1
},
{
"date": "2019-10-22",
"count": 1
},
{
"date": "2019-10-25",
"count": 1
},
{
"date": "2019-10-30",
"count": 1
},
{
"date": "2019-11-01",
"count": 1
},
{
"date": "2019-11-05",
"count": 1
},
{
"date": "2019-11-10",
"count": 2
},
{
"date": "2019-11-11",
"count": 1
},
{
"date": "2019-11-13",
"count": 2
},
{
"date": "2019-11-15",
"count": 1
},
{
"date": "2019-11-26",
"count": 1
},
{
"date": "2019-12-04",
"count": 1
},
{
"date": "2019-12-06",
"count": 1
},
{
"date": "2019-12-20",
"count": 1
},
{
"date": "2019-12-29",
"count": 1
},
{
"date": "2020-01-02",
"count": 2
},
{
"date": "2020-01-08",
"count": 2
},
{
"date": "2020-01-12",
"count": 2
},
{
"date": "2020-01-17",
"count": 1
},
{
"date": "2020-01-27",
"count": 1
},
{
"date": "2020-01-30",
"count": 2
},
{
"date": "2020-02-04",
"count": 1
},
{
"date": "2020-02-17",
"count": 1
},
{
"date": "2020-02-27",
"count": 1
},
{
"date": "2020-02-29",
"count": 1
},
{
"date": "2020-03-04",
"count": 2
},
{
"date": "2020-03-07",
"count": 1
},
{
"date": "2020-03-09",
"count": 1
},
{
"date": "2020-03-17",
"count": 1
},
{
"date": "2020-03-19",
"count": 2
},
{
"date": "2020-03-24",
"count": 1
},
{
"date": "2020-04-08",
"count": 1
},
{
"date": "2020-04-14",
"count": 1
},
{
"date": "2020-04-15",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-04-19",
"count": 1
},
{
"date": "2020-04-27",
"count": 1
},
{
"date": "2020-05-07",
"count": 1
},
{
"date": "2020-05-09",
"count": 1
},
{
"date": "2020-05-12",
"count": 1
},
{
"date": "2020-05-19",
"count": 1
},
{
"date": "2020-05-25",
"count": 1
},
{
"date": "2020-05-28",
"count": 1
},
{
"date": "2020-06-09",
"count": 1
},
{
"date": "2020-06-15",
"count": 1
},
{
"date": "2020-06-18",
"count": 1
},
{
"date": "2020-07-02",
"count": 1
},
{
"date": "2020-07-04",
"count": 1
},
{
"date": "2020-07-07",
"count": 1
},
{
"date": "2020-07-08",
"count": 1
},
{
"date": "2020-07-20",
"count": 1
},
{
"date": "2020-07-23",
"count": 1
},
{
"date": "2020-08-07",
"count": 1
},
{
"date": "2020-08-13",
"count": 1
},
{
"date": "2020-08-27",
"count": 1
},
{
"date": "2020-08-31",
"count": 1
},
{
"date": "2020-09-13",
"count": 1
},
{
"date": "2020-09-15",
"count": 1
},
{
"date": "2020-09-25",
"count": 1
},
{
"date": "2020-10-02",
"count": 1
},
{
"date": "2020-10-10",
"count": 1
},
{
"date": "2020-10-19",
"count": 1
},
{
"date": "2020-10-20",
"count": 1
},
{
"date": "2020-11-09",
"count": 1
},
{
"date": "2020-11-12",
"count": 3
},
{
"date": "2020-11-16",
"count": 1
},
{
"date": "2020-11-17",
"count": 1
},
{
"date": "2020-11-19",
"count": 1
},
{
"date": "2020-11-20",
"count": 1
},
{
"date": "2020-11-23",
"count": 2
},
{
"date": "2020-11-28",
"count": 1
},
{
"date": "2020-11-30",
"count": 1
},
{
"date": "2020-12-03",
"count": 1
},
{
"date": "2020-12-04",
"count": 1
},
{
"date": "2020-12-08",
"count": 1
},
{
"date": "2020-12-11",
"count": 1
},
{
"date": "2020-12-12",
"count": 1
},
{
"date": "2020-12-17",
"count": 1
},
{
"date": "2020-12-22",
"count": 1
},
{
"date": "2021-01-04",
"count": 1
},
{
"date": "2021-01-07",
"count": 1
},
{
"date": "2021-01-12",
"count": 1
},
{
"date": "2021-01-18",
"count": 1
},
{
"date": "2021-01-24",
"count": 1
},
{
"date": "2021-01-29",
"count": 1
},
{
"date": "2021-02-05",
"count": 1
},
{
"date": "2021-02-09",
"count": 2
},
{
"date": "2021-02-16",
"count": 1
},
{
"date": "2021-03-02",
"count": 1
},
{
"date": "2021-03-03",
"count": 2
},
{
"date": "2021-03-04",
"count": 1
},
{
"date": "2021-03-28",
"count": 1
},
{
"date": "2021-04-05",
"count": 1
},
{
"date": "2021-04-06",
"count": 1
},
{
"date": "2021-04-09",
"count": 1
},
{
"date": "2021-04-15",
"count": 1
},
{
"date": "2021-04-25",
"count": 1
},
{
"date": "2021-04-27",
"count": 1
},
{
"date": "2021-04-28",
"count": 1
},
{
"date": "2021-05-10",
"count": 1
},
{
"date": "2021-07-01",
"count": 1
},
{
"date": "2021-07-02",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-08-03",
"count": 1
},
{
"date": "2021-08-06",
"count": 2
},
{
"date": "2021-08-08",
"count": 1
},
{
"date": "2021-08-10",
"count": 1
},
{
"date": "2021-08-23",
"count": 1
},
{
"date": "2021-08-24",
"count": 1
},
{
"date": "2021-08-28",
"count": 1
},
{
"date": "2021-09-05",
"count": 1
},
{
"date": "2021-09-06",
"count": 1
},
{
"date": "2021-09-10",
"count": 1
},
{
"date": "2021-09-19",
"count": 1
},
{
"date": "2021-09-21",
"count": 2
},
{
"date": "2021-10-09",
"count": 1
},
{
"date": "2021-10-19",
"count": 1
},
{
"date": "2021-10-23",
"count": 1
},
{
"date": "2021-10-28",
"count": 1
},
{
"date": "2021-11-01",
"count": 1
},
{
"date": "2021-11-12",
"count": 2
},
{
"date": "2021-11-29",
"count": 1
},
{
"date": "2021-12-02",
"count": 1
},
{
"date": "2022-01-03",
"count": 1
},
{
"date": "2022-01-08",
"count": 1
},
{
"date": "2022-01-10",
"count": 1
},
{
"date": "2022-01-18",
"count": 1
},
{
"date": "2022-01-21",
"count": 2
},
{
"date": "2022-02-05",
"count": 1
},
{
"date": "2022-02-06",
"count": 1
},
{
"date": "2022-02-09",
"count": 1
},
{
"date": "2022-02-10",
"count": 1
},
{
"date": "2022-03-06",
"count": 1
},
{
"date": "2022-04-01",
"count": 1
},
{
"date": "2022-04-11",
"count": 1
},
{
"date": "2022-05-05",
"count": 1
},
{
"date": "2022-05-11",
"count": 1
},
{
"date": "2022-05-21",
"count": 1
},
{
"date": "2022-05-25",
"count": 1
},
{
"date": "2022-05-29",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-07-14",
"count": 1
},
{
"date": "2022-07-22",
"count": 1
},
{
"date": "2022-07-28",
"count": 1
},
{
"date": "2022-08-01",
"count": 1
},
{
"date": "2022-08-19",
"count": 1
},
{
"date": "2022-08-26",
"count": 1
},
{
"date": "2022-09-06",
"count": 2
},
{
"date": "2022-09-12",
"count": 1
},
{
"date": "2022-10-16",
"count": 1
},
{
"date": "2022-12-02",
"count": 1
},
{
"date": "2022-12-16",
"count": 1
},
{
"date": "2022-12-18",
"count": 1
},
{
"date": "2022-12-19",
"count": 1
},
{
"date": "2022-12-20",
"count": 1
},
{
"date": "2023-01-02",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-01-28",
"count": 2
},
{
"date": "2023-03-10",
"count": 2
},
{
"date": "2023-03-31",
"count": 1
},
{
"date": "2023-04-08",
"count": 1
},
{
"date": "2023-04-25",
"count": 1
},
{
"date": "2023-04-27",
"count": 1
},
{
"date": "2023-05-11",
"count": 1
},
{
"date": "2023-05-16",
"count": 1
},
{
"date": "2023-05-19",
"count": 1
},
{
"date": "2023-05-23",
"count": 1
},
{
"date": "2023-05-25",
"count": 1
},
{
"date": "2023-05-30",
"count": 1
},
{
"date": "2023-06-04",
"count": 1
},
{
"date": "2023-06-13",
"count": 1
},
{
"date": "2023-07-09",
"count": 1
},
{
"date": "2023-07-19",
"count": 1
},
{
"date": "2023-09-19",
"count": 3
},
{
"date": "2023-09-20",
"count": 2
},
{
"date": "2023-09-21",
"count": 1
},
{
"date": "2023-09-27",
"count": 1
},
{
"date": "2023-11-05",
"count": 1
},
{
"date": "2023-11-07",
"count": 1
},
{
"date": "2023-11-12",
"count": 1
},
{
"date": "2023-11-13",
"count": 1
},
{
"date": "2023-11-15",
"count": 1
},
{
"date": "2023-11-23",
"count": 1
},
{
"date": "2023-11-29",
"count": 1
},
{
"date": "2023-12-10",
"count": 1
},
{
"date": "2023-12-11",
"count": 1
},
{
"date": "2023-12-19",
"count": 1
},
{
"date": "2023-12-29",
"count": 1
},
{
"date": "2024-01-04",
"count": 1
},
{
"date": "2024-01-06",
"count": 1
},
{
"date": "2024-01-09",
"count": 1
},
{
"date": "2024-01-13",
"count": 1
},
{
"date": "2024-01-19",
"count": 1
},
{
"date": "2024-01-30",
"count": 1
},
{
"date": "2024-01-31",
"count": 1
},
{
"date": "2024-02-15",
"count": 1
},
{
"date": "2024-02-17",
"count": 2
},
{
"date": "2024-02-19",
"count": 3
},
{
"date": "2024-02-20",
"count": 1
},
{
"date": "2024-02-21",
"count": 1
},
{
"date": "2024-02-22",
"count": 1
},
{
"date": "2024-02-28",
"count": 1
},
{
"date": "2024-03-12",
"count": 1
},
{
"date": "2024-03-21",
"count": 2
},
{
"date": "2024-03-22",
"count": 1
},
{
"date": "2024-04-09",
"count": 1
},
{
"date": "2024-04-11",
"count": 1
},
{
"date": "2024-04-16",
"count": 1
},
{
"date": "2024-04-29",
"count": 1
},
{
"date": "2024-05-06",
"count": 1
},
{
"date": "2024-05-10",
"count": 1
},
{
"date": "2024-05-20",
"count": 1
},
{
"date": "2024-05-22",
"count": 1
},
{
"date": "2024-06-04",
"count": 1
},
{
"date": "2024-07-22",
"count": 1
},
{
"date": "2024-07-23",
"count": 3
},
{
"date": "2024-08-18",
"count": 1
},
{
"date": "2024-08-24",
"count": 1
},
{
"date": "2024-09-02",
"count": 1
},
{
"date": "2024-09-09",
"count": 1
},
{
"date": "2024-09-20",
"count": 1
},
{
"date": "2024-09-27",
"count": 1
},
{
"date": "2024-10-13",
"count": 1
},
{
"date": "2024-10-24",
"count": 1
},
{
"date": "2024-11-10",
"count": 1
},
{
"date": "2024-11-17",
"count": 1
},
{
"date": "2024-11-20",
"count": 3
},
{
"date": "2024-11-22",
"count": 1
},
{
"date": "2024-12-02",
"count": 1
},
{
"date": "2024-12-07",
"count": 1
},
{
"date": "2024-12-12",
"count": 1
},
{
"date": "2024-12-24",
"count": 1
},
{
"date": "2024-12-26",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-01-13",
"count": 1
},
{
"date": "2025-01-14",
"count": 1
},
{
"date": "2025-02-19",
"count": 1
},
{
"date": "2025-03-03",
"count": 1
},
{
"date": "2025-03-04",
"count": 1
},
{
"date": "2025-03-11",
"count": 1
},
{
"date": "2025-03-12",
"count": 1
},
{
"date": "2025-03-31",
"count": 1
},
{
"date": "2025-04-07",
"count": 1
},
{
"date": "2025-04-11",
"count": 1
},
{
"date": "2025-04-12",
"count": 1
},
{
"date": "2025-04-15",
"count": 1
},
{
"date": "2025-04-17",
"count": 1
},
{
"date": "2025-04-22",
"count": 1
},
{
"date": "2025-04-29",
"count": 2
},
{
"date": "2025-05-02",
"count": 2
},
{
"date": "2025-05-04",
"count": 1
},
{
"date": "2025-05-07",
"count": 1
},
{
"date": "2025-05-28",
"count": 1
},
{
"date": "2025-06-01",
"count": 1
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-27",
"count": 1
},
{
"date": "2025-06-28",
"count": 1
},
{
"date": "2025-06-29",
"count": 1
},
{
"date": "2025-07-06",
"count": 2
},
{
"date": "2025-08-08",
"count": 1
},
{
"date": "2025-09-03",
"count": 1
},
{
"date": "2025-09-06",
"count": 1
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-10-10",
"count": 2
},
{
"date": "2025-11-04",
"count": 1
},
{
"date": "2025-11-16",
"count": 1
},
{
"date": "2025-11-29",
"count": 1
},
{
"date": "2025-12-17",
"count": 1
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-03-03",
"count": 1
},
{
"date": "2026-03-31",
"count": 1
},
{
"date": "2026-05-04",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-06-08",
"count": 1
},
{
"date": "2026-06-12",
"count": 1
},
{
"date": "2026-06-22",
"count": 1
},
{
"date": "2026-07-06",
"count": 1
}
],
"complete": true,
"collected": 827,
"total_stars": 827
},
"open_issues_and_prs": 42
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile",
"docs/Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 71337,
"source_files_sampled": 53,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"docs/pyproject.toml",
"docs/requirements.txt",
"pyproject.toml",
"requirements-dev.txt"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "certifi",
"direct": false,
"version": "2023.11.17",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-248v-346w-9cwc",
"PYSEC-2024-230"
],
"fixed_version": "2024.7.4",
"advisory_count": 2,
"oldest_advisory_days": 746
},
{
"name": "jinja2",
"direct": false,
"version": "3.1.4",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 8.8,
"advisory_ids": [
"GHSA-cpwx-vrp4-4pq7",
"GHSA-gmj6-6f8f-6699",
"GHSA-q2x7-8rv6-6q7h",
"PYSEC-2026-1471",
"PYSEC-2026-1472",
"PYSEC-2026-1475"
],
"fixed_version": "3.1.6",
"advisory_count": 6,
"oldest_advisory_days": 575
},
{
"name": "soupsieve",
"direct": false,
"version": "2.5",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-2wc2-fm75-p42x",
"GHSA-836r-79rf-4m37",
"PYSEC-2026-3071",
"PYSEC-2026-3072"
],
"fixed_version": "2.8.4",
"advisory_count": 4,
"oldest_advisory_days": 12
},
{
"name": "tornado",
"direct": false,
"version": "6.4",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 7.7,
"advisory_ids": [
"GHSA-3x9g-8vmp-wqvf",
"GHSA-753j-mpmx-qq6g",
"GHSA-78cv-mqj4-43f7",
"GHSA-7cx3-6m66-7c5m",
"GHSA-8w49-h785-mj3c",
"GHSA-c98p-7wgm-6p64",
"GHSA-cx3h-4qpv-8hc9",
"GHSA-fqwm-6jpj-5wxc",
"GHSA-jhmp-mqwm-3gq8",
"GHSA-mgf9-4vpg-hj56"
],
"fixed_version": "6.5.7",
"advisory_count": 24,
"oldest_advisory_days": 775
},
{
"name": "urllib3",
"direct": false,
"version": "2.1.0",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-2xpw-w6gg-jr37",
"GHSA-34jh-p97f-mpxf",
"GHSA-38jv-5279-wg99",
"GHSA-gm62-xv2j-4w53",
"GHSA-pq67-6m6q-mj2v",
"GHSA-qccp-gfcp-xxvc",
"PYSEC-2026-141",
"PYSEC-2026-1994",
"PYSEC-2026-1995",
"PYSEC-2026-1996"
],
"fixed_version": "2.7.0",
"advisory_count": 12,
"oldest_advisory_days": 764
},
{
"name": "idna",
"direct": false,
"version": "3.7",
"severity": "moderate",
"ecosystem": "pypi",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-65pc-fj4g-8rjx",
"PYSEC-2026-215"
],
"fixed_version": "3.15",
"advisory_count": 2,
"oldest_advisory_days": 63
},
{
"name": "pytest",
"direct": false,
"version": "7.4.4",
"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.2",
"severity": "moderate",
"ecosystem": "pypi",
"cvss_score": 5.5,
"advisory_ids": [
"GHSA-9hjg-9r4m-mvj7",
"GHSA-gc5v-m9x4-r6x2",
"PYSEC-2026-1872",
"PYSEC-2026-2275"
],
"fixed_version": "2.33.0",
"advisory_count": 4,
"oldest_advisory_days": 407
},
{
"name": "pygments",
"direct": false,
"version": "2.17.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,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 5,
"moderate": 3
},
"advisory_count": 58,
"affected_count": 9,
"assessed_count": 39,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "alabaster",
"direct": false,
"version": "0.7.13",
"ecosystem": "pypi"
},
{
"name": "babel",
"direct": false,
"version": "2.14.0",
"ecosystem": "pypi"
},
{
"name": "beautifulsoup4",
"direct": false,
"version": "4.12.2",
"ecosystem": "pypi"
},
{
"name": "certifi",
"direct": false,
"version": "2023.11.17",
"ecosystem": "pypi"
},
{
"name": "charset-normalizer",
"direct": false,
"version": "3.3.2",
"ecosystem": "pypi"
},
{
"name": "colorama",
"direct": false,
"version": "0.4.6",
"ecosystem": "pypi"
},
{
"name": "coverage",
"direct": false,
"version": "6.5.0",
"ecosystem": "pypi"
},
{
"name": "docutils",
"direct": false,
"version": "0.20.1",
"ecosystem": "pypi"
},
{
"name": "exceptiongroup",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "furo",
"direct": false,
"version": "2023.9.10",
"ecosystem": "pypi"
},
{
"name": "idna",
"direct": false,
"version": "3.7",
"ecosystem": "pypi"
},
{
"name": "imagesize",
"direct": false,
"version": "1.4.1",
"ecosystem": "pypi"
},
{
"name": "iniconfig",
"direct": false,
"version": "2.0.0",
"ecosystem": "pypi"
},
{
"name": "jinja2",
"direct": false,
"version": "3.1.4",
"ecosystem": "pypi"
},
{
"name": "livereload",
"direct": false,
"version": "2.6.3",
"ecosystem": "pypi"
},
{
"name": "markupsafe",
"direct": false,
"version": "2.1.3",
"ecosystem": "pypi"
},
{
"name": "packaging",
"direct": false,
"version": "23.2",
"ecosystem": "pypi"
},
{
"name": "pluggy",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "pygments",
"direct": false,
"version": "2.17.2",
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": "7.4.4",
"ecosystem": "pypi"
},
{
"name": "pytest-cov",
"direct": false,
"version": "4.1.0",
"ecosystem": "pypi"
},
{
"name": "requests",
"direct": false,
"version": "2.32.2",
"ecosystem": "pypi"
},
{
"name": "ruff",
"direct": false,
"version": "0.1.11",
"ecosystem": "pypi"
},
{
"name": "six",
"direct": false,
"version": "1.16.0",
"ecosystem": "pypi"
},
{
"name": "snowballstemmer",
"direct": false,
"version": "2.2.0",
"ecosystem": "pypi"
},
{
"name": "soupsieve",
"direct": false,
"version": "2.5",
"ecosystem": "pypi"
},
{
"name": "sphinx",
"direct": false,
"version": "7.2.6",
"ecosystem": "pypi"
},
{
"name": "sphinx-autobuild",
"direct": false,
"version": "2021.3.14",
"ecosystem": "pypi"
},
{
"name": "sphinx-basic-ng",
"direct": false,
"version": "1.0.0b2",
"ecosystem": "pypi"
},
{
"name": "sphinx-issues",
"direct": false,
"version": "4.0.0",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-applehelp",
"direct": false,
"version": "1.0.7",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-devhelp",
"direct": false,
"version": "1.0.5",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-htmlhelp",
"direct": false,
"version": "2.0.4",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-jsmath",
"direct": false,
"version": "1.0.1",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-qthelp",
"direct": false,
"version": "1.0.6",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-serializinghtml",
"direct": false,
"version": "1.1.9",
"ecosystem": "pypi"
},
{
"name": "tomli",
"direct": false,
"version": "2.0.1",
"ecosystem": "pypi"
},
{
"name": "tornado",
"direct": false,
"version": "6.4",
"ecosystem": "pypi"
},
{
"name": "urllib3",
"direct": false,
"version": "2.1.0",
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 39,
"direct_count": 0,
"indirect_count": 39
}
},
"maintainership": {
"issues": {
"open_prs": 9,
"merged_prs": 161,
"open_issues": 33,
"closed_ratio": 0.819,
"closed_issues": 149,
"closed_unmerged_prs": 49
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "drkjam",
"commits": 357,
"avatar_url": "https://avatars.githubusercontent.com/u/93508?v=4"
},
{
"type": "User",
"login": "jstasiak",
"commits": 218,
"avatar_url": "https://avatars.githubusercontent.com/u/36209?v=4"
},
{
"type": "User",
"login": "stromnov",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/100656?v=4"
},
{
"type": "User",
"login": "dpmoss",
"commits": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/10371538?v=4"
},
{
"type": "User",
"login": "david-moss-singletrack",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/11390449?v=4"
},
{
"type": "User",
"login": "nebril",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/1417888?v=4"
},
{
"type": "User",
"login": "kleptog",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/850393?v=4"
},
{
"type": "User",
"login": "jeckersb",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/15802?v=4"
},
{
"type": "User",
"login": "snordhausen",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/1327310?v=4"
},
{
"type": "User",
"login": "kajinamit",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/6630918?v=4"
}
],
"contributors_sampled": 36,
"top_contributor_share": 0.549
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"poetry.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": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 10 merged PRs checked by a CI test -- score normalized to 0",
"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 3/27 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"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": 10,
"reason": "project is fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 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": "30 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "d340feab548d948c5dc92cedcb05c69f57f9386e",
"ran_at": "2026-07-22T01:31:25Z",
"aggregate_score": 4.1,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [
{
"number": 145,
"created_at": "2017-01-09T22:49:32Z",
"last_comment_at": "2021-03-24T21:27:58Z",
"last_comment_author": "jstasiak"
},
{
"number": 239,
"created_at": "2021-11-12T16:28:35Z",
"last_comment_at": "2021-11-17T15:34:12Z",
"last_comment_author": "jesopo"
},
{
"number": 352,
"created_at": "2024-02-07T23:22:26Z",
"last_comment_at": "2024-05-26T17:17:17Z",
"last_comment_author": "jstasiak"
},
{
"number": 372,
"created_at": "2024-02-17T22:48:56Z",
"last_comment_at": "2024-02-18T19:44:53Z",
"last_comment_author": "claytonsingh"
},
{
"number": 376,
"created_at": "2024-02-19T07:39:26Z",
"last_comment_at": "2024-02-23T08:34:55Z",
"last_comment_author": "claytonsingh"
},
{
"number": 390,
"created_at": "2024-06-06T23:42:47Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 391,
"created_at": "2024-06-17T22:40:10Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 392,
"created_at": "2024-07-05T23:39:56Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 394,
"created_at": "2025-01-16T17:45:03Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2024-05-29T19:15:01Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 62,
"created_at": "2014-02-06T08:57:36Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 82,
"created_at": "2015-01-09T21:10:05Z",
"last_comment_at": "2024-02-13T22:05:42Z",
"last_comment_author": "jstasiak"
},
{
"number": 88,
"created_at": "2015-04-10T11:02:25Z",
"last_comment_at": "2024-03-12T20:19:07Z",
"last_comment_author": "opoplawski"
},
{
"number": 101,
"created_at": "2015-06-29T07:32:07Z",
"last_comment_at": "2024-12-12T09:18:24Z",
"last_comment_author": "zaphod-pab"
},
{
"number": 121,
"created_at": "2016-01-05T19:59:54Z",
"last_comment_at": "2024-02-13T21:25:24Z",
"last_comment_author": "jstasiak"
},
{
"number": 123,
"created_at": "2016-01-13T10:34:07Z",
"last_comment_at": "2024-02-13T21:29:46Z",
"last_comment_author": "jstasiak"
},
{
"number": 140,
"created_at": "2016-11-01T19:11:17Z",
"last_comment_at": "2024-02-13T21:39:27Z",
"last_comment_author": "jstasiak"
},
{
"number": 146,
"created_at": "2017-01-10T20:52:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 152,
"created_at": "2017-02-11T05:11:27Z",
"last_comment_at": "2017-09-04T03:33:26Z",
"last_comment_author": "mochouinard"
},
{
"number": 153,
"created_at": "2017-02-17T00:25:50Z",
"last_comment_at": "2020-07-03T15:06:46Z",
"last_comment_author": "jstasiak"
},
{
"number": 154,
"created_at": "2017-03-06T02:21:54Z",
"last_comment_at": "2017-03-06T03:44:51Z",
"last_comment_author": "alanwill"
},
{
"number": 160,
"created_at": "2017-07-06T02:00:30Z",
"last_comment_at": "2022-09-14T23:27:28Z",
"last_comment_author": "tpickle-py"
},
{
"number": 165,
"created_at": "2017-11-13T21:09:47Z",
"last_comment_at": "2021-03-24T21:48:25Z",
"last_comment_author": "jstasiak"
},
{
"number": 169,
"created_at": "2018-02-26T06:09:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 170,
"created_at": "2018-03-30T22:48:56Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 172,
"created_at": "2018-04-19T05:24:05Z",
"last_comment_at": "2019-05-12T03:49:38Z",
"last_comment_author": "tpickle-py"
},
{
"number": 187,
"created_at": "2019-10-07T17:23:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 201,
"created_at": "2020-03-23T22:17:13Z",
"last_comment_at": "2021-04-14T20:04:03Z",
"last_comment_author": "jstasiak"
},
{
"number": 226,
"created_at": "2021-03-18T10:08:13Z",
"last_comment_at": "2021-07-31T08:17:23Z",
"last_comment_author": "maltfield"
},
{
"number": 236,
"created_at": "2021-09-11T17:08:11Z",
"last_comment_at": "2022-05-21T19:11:14Z",
"last_comment_author": "rshxyz"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/netaddr/netaddr",
"host": "github.com",
"name": "netaddr",
"owner": "netaddr"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": "Abandonment Policy applies a 60% multiplier to weighted overall health and gives it a ceiling of 49.",
"notes": [
{
"code": "abandonment_overall_adjustment",
"params": {
"cap": 49,
"pct": 60
}
}
],
"value": 31,
"inputs": {
"security": 53,
"vitality": 25,
"community": 61,
"governance": 55,
"engineering": 65,
"abandonment_cap": 49,
"abandonment_state": "likely_abandoned",
"abandonment_multiplier": 60,
"weighted_overall_before_abandonment": 51,
"overall_after_abandonment_multiplier": 31
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "critical",
"name": "Vitality",
"value": 25,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "critical",
"name": "Development activity",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"commits_last_year": 0,
"human_commit_share": 0.97,
"days_since_last_push": 746,
"active_weeks_last_year": 0
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 746 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "push_recency",
"params": {
"days": 746
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "0/52 weeks with commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 0
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "0 commits in the last year",
"points": 0,
"status": "missed",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 0
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "moderate",
"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": 60,
"inputs": {
"releases_count": 7,
"latest_release_tag": "1.3.0",
"releases_from_tags": false,
"days_since_latest_release": 784,
"mean_days_between_releases": 42
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "7 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 7
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 784 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "release_recency",
"params": {
"days": 784
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~42 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 42
}
}
],
"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": "moderate",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"cap": 49,
"state": "likely_abandoned",
"guards": [],
"signals": [
"unanswered_contributions",
"issue_rot",
"release_stall",
"scorecard_unmaintained",
"sole_maintainer_gone"
],
"red_flag": true,
"multiplier_pct": 60,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": 9,
"unanswered_open_issues": 13,
"days_since_last_merged_pr": 783,
"days_since_last_human_commit": 783,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "no human commit for 783 days; 5 unmet obligation(s): pull requests unanswered, issues unanswered, releases stalled, Scorecard reports it unmaintained, its sole maintainer absent",
"points": 60,
"status": "partial",
"details": [
{
"code": "abandonment_flagged",
"params": {
"days": 783,
"count": 5,
"signals": "pull requests unanswered, issues unanswered, releases stalled, Scorecard reports it unmaintained, its sole maintainer absent"
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 61,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "good",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"forks": 176,
"stars": 827,
"watchers": 37,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "827 stars",
"points": 47.3,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 827
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "176 forks",
"points": 18.7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 176
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "37 watchers",
"points": 8.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 37
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "at_risk",
"name": "Community health",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"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": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"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
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 55,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 39,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 36,
"top_contributor_share": 0.549
},
"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 55% of commits",
"points": 10.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 55
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "36 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 36
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"merged_prs": 161,
"open_issues": 33,
"closed_issues": 149,
"issue_closed_ratio": 0.819,
"closed_unmerged_prs": 49
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "82% of issues closed",
"points": 38.3,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 82
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "161/210 decided PRs merged",
"points": 29.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 161,
"decided": 210
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 3/27 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 49,
"inputs": {
"followers": 4,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "netaddr",
"public_repos": 1,
"account_age_days": 2373
},
"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": "4 followers of netaddr",
"points": 5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 4,
"login": "netaddr"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "1 public repos, account ~6 yr old",
"points": 14.2,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 1
}
},
{
"code": "account_age_years",
"params": {
"years": 6
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "moderate",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"packages": [
"netaddr"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 784
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 784 days ago",
"points": 4,
"status": "partial",
"details": [
{
"code": "publish_recency",
"params": {
"days": 784
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "34 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 34
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 65,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 10 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"python",
"subnet",
"ipv4",
"ipv6",
"devops",
"networking",
"netaddr",
"mac",
"iab",
"sysadmin",
"cidr",
"eui",
"ip-address",
"oui",
"oui-database"
],
"has_wiki": false,
"homepage": "https://netaddr.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://netaddr.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": "15 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 15
}
}
],
"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": 53,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 41,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 4.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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 10 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"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 3/27 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"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 fuzzed",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "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": "30 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 39 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 39
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 58,
"affected_packages": 9,
"assessed_packages": 39,
"unassessed_packages": 0,
"affected_by_severity": "high 5, moderate 3, low 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 39,
"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": 4
},
"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": "at_risk",
"name": "AI Readiness",
"value": 46,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.464,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "45 of 97 human commits state their intent (structured subject or explanatory body)",
"points": 24.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 45,
"sampled": 97
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"poetry.lock"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"Makefile",
"docs/Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.03
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, docs/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, docs/Makefile"
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "3 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 3,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 71337,
"source_files_sampled": 53,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/53 source files over 60KB",
"points": 54,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 53,
"oversized": 1
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-22T01:31:45.556627Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/netaddr/netaddr.svg",
"full_name": "netaddr/netaddr",
"license_state": "custom",
"license_spdx": null
}