General held two jobs, so it splits into Servers and Clients (websockets, autobahn-python) and Framework Integrations (channels, flask-socketio), next to WebRTC.
Co-Authored-By: Claude <noreply@anthropic.com>
The Source column printed repo names as plain text, and a row with an empty url rendered its name as a dead link.
Co-Authored-By: Claude <noreply@anthropic.com>
The star scan pruned unstarred repos from its untracked ledger but left their Rejected Additions lines in docs/audit-logs.md, so that list went stale after unstars.
Co-Authored-By: Claude <noreply@anthropic.com>
Rejected Additions now keeps only repos the maintainer still stars. The 103 lines for unstarred repos go, including rejections that came from PRs and audits, so a resubmitted PR for one of them is judged from scratch. The xberg-io/* organization line stays.
Co-Authored-By: Claude <noreply@anthropic.com>
CORS for Flask at 39,864,140 downloads/month, twice django-cors-headers; placed first by downloads, which moves secure to challenger.
Co-Authored-By: Claude <noreply@anthropic.com>
Mints a Code Sandboxes use case for running AI-written code locally; 4,353,276 downloads/month, 1.0.0 and Production/Stable. Hosted-sandbox clients stay out as vendor clients.
Co-Authored-By: Claude <noreply@anthropic.com>
Splits the flat section into General and WebRTC, since a subcategory can't repeat the section name; aiortc is the WebRTC/ORTC stack for asyncio at 1,647,618 downloads/month, nearly all direct.
Co-Authored-By: Claude <noreply@anthropic.com>
The unified filesystem interface that torch, huggingface-hub, and datasets build on, placed first in Remote Files by downloads (556.9M/month, mostly pulled in by those libraries).
Co-Authored-By: Claude <noreply@anthropic.com>
Mints a Remote Files use case for streaming files from cloud and remote storage; about 35.9M of smart-open's 57.5M downloads/month is its own after weasel and gensim.
Co-Authored-By: Claude <noreply@anthropic.com>
Mints an Experiment Tracking use case, since General holds modeling libraries; mlflow is its obvious choice at 19,887,934 downloads/month.
Co-Authored-By: Claude <noreply@anthropic.com>
The ledger kept screen-out rows for unstarred repos because the scan script only read it and the skill called it append-only, so dead rows piled up.
Co-Authored-By: Claude <noreply@anthropic.com>
General becomes Argument Parsing for argparse, click, typer, and cyclopts, and prompt_toolkit moves to TUI Frameworks after textual. Redirects the old General URL.
Co-Authored-By: Claude <noreply@anthropic.com>
General held two unrelated tools. tablib moves to Data Formats, and General becomes Binary Formats for pyelftools. Redirects the old General URL.
Co-Authored-By: Claude <noreply@anthropic.com>
General held two unrelated tools. pyfiglet moves to CLI Development > Terminal Rendering as a challenger, and the rest becomes Diffs for difflib. Redirects the old General URL.
Co-Authored-By: Claude <noreply@anthropic.com>
Others mixed three jobs. pdb-like Debugger becomes Debuggers and takes debugpy, a new Web Framework Toolbars holds django-debug-toolbar, django-silk, and flask-debugtoolbar, and icecream joins Tracing. Redirects the two old subcategory URLs.
Co-Authored-By: Claude <noreply@anthropic.com>
Logs 27 starred projects judged and declined on 2026-11-08 under Rejected Additions, so later scans skip them.
Co-Authored-By: Claude <noreply@anthropic.com>
18,834,120 downloads/month on pypistats (fetched 2026-11-08), 9x secure; Django REST framework's docs name it as the way to handle CORS.
Co-Authored-By: Claude <noreply@anthropic.com>
78,662,693 downloads/month on pypistats (fetched 2026-11-08), about 24.0M of it its own after subtracting ipykernel, which requires it; VS Code's Python debugging docs tell users to pip install it for remote and attach debugging.
Co-Authored-By: Claude <noreply@anthropic.com>
On phones the label under each project name showed its subcategory, and names like "General", "Synchronous", or "Core" only make sense under their category heading, so the home and group tables showed vague labels.
Co-Authored-By: Claude <noreply@anthropic.com>
Step 1 read as if a bare `audit:` prefix dates a section's audit, so an "audit: restructure ..." subject left a finished audit counted as never done.
Co-Authored-By: Claude <noreply@anthropic.com>
Comparisons treat dataclasses as the default for class boilerplate and attrs as the upgrade for validators, converters, and slots.
Co-Authored-By: Claude <noreply@anthropic.com>
Split the flat list by job, since demoting bidict left 1 obvious choice and 3 challengers, over the 2-challenger cap. Class Boilerplate: attrs. Mappings: python-box promoted to obvious (5,756,670 downloads/month); bidict demoted to Second Tier, since python-socketio hard-depends on it and accounts for 21.4M of its 23.0M on pypistats, leaving about 1.6M of its own. UUID: uuid-utils, kept on judgment (most of its count comes from langsmith and langchain-core depending on it). Description fixes for attrs, bidict, and python-box. No removals. Figures: ClickPy fetched 2026-11-08 unless marked pypistats (same date).
Co-Authored-By: Claude <noreply@anthropic.com>
Challenger after pyright: 15.7% share in the 2026 Python Typing Survey (up from 10.9% in 2025) and 16.7M downloads/month via ClickPy vs pyrefly's 10.4M. Its only dependency is nodejs-wheel-binaries, so the count is independent demand, and the repo is active (last push 2026-10-28).
Co-Authored-By: Claude <noreply@anthropic.com>