Commit Graph
2652 Commits
Author SHA1 Message Date
Vinta ChenandClaude c034c88e91 docs: add audit log registry for maintainer overrides
Git history already archives every removal's reason via commit body,
but it can't be scanned at a glance. docs/audit-logs.md is the
at-a-glance register of overrides (naming exceptions, mature-stable
keeps) allowed by CONTRIBUTING.md. Drop the docs/* gitignore exclusion
(and stale .superpowers/ and skills-lock.json entries) so the file and
future doc additions outside docs/adr/ can be tracked.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:57:21 +08:00
Vinta ChenandClaude 39eeab7dff docs: warn about wrong-package PyPI download counts
The pypi downloads sweep looks up counts by README display name; when
the display name differs from the canonical package, the row silently
measures an unrelated squatter or a dead predecessor. Document the
failure mode in both the fetcher's docstring and the audit skill so
famous entries with off-looking counts get identity-verified before
being cited.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:57:15 +08:00
Vinta ChenandClaude 194b386d06 docs: codify the Override rule in CONTRIBUTING and CONTEXT
Resolves decision 10's reservation on maintainer word: the 3+2/5 cap
numbers stay as written — across the full prune they held everywhere
except a handful of explicit overrides — and the override practice
itself becomes a written rule: the maintainer may exceed any limit
for a specific entry or use case by explicit decision, case-by-case,
carrying no weight for submissions. CONTEXT.md gains the matching
Override vocabulary entry.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:25:15 +08:00
Vinta ChenandClaude f60d5b4a08 style: move fasthtml back to Web Frameworks > Synchronous
Maintainer reversal of c0a31ce, restoring the entry and its
awesome-fasthtml sub-item to their prior position. The
challenger-limit override that rode the move is withdrawn with it —
Asynchronous returns to 4 entries within the standard cap shape.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:25:15 +08:00
Vinta ChenandClaude 441f206d71 feat: add pathway to Data Ingestion / ETL
Re-admission on maintainer word, reversing the Data Analysis sweep's
drop (f3c920d — the xlsxwriter reversal precedent): the drop was
partly a mis-homing casualty, since its honest home, an ETL use case,
did not exist then. The repo self-describes as a Python ETL framework
for stream processing and LLM/RAG pipelines: 62.5K stars, pushed
daily; 16.5K downloads/month is weak for the star count and noted.
Enters as challenger behind dlt (7.8M/mo).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:24:38 +08:00
Vinta ChenandClaude e5f7b5bc2e style: update graphify link to the moved Graphify-Labs repo
The safishamsi/graphify URL is a stale redirect — the repo moved to
Graphify-Labs/graphify (verified via the GitHub API). Maintainer
declined the Agent Skills re-home; the entry stays in Data
Visualization > Specialized with its link fixed.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:21:21 +08:00
Vinta ChenandClaude 5249b756ce refactor: re-home fasthtml to Web Frameworks > Asynchronous
Maintainer-adjudicated close of the standing flag: fasthtml runs on
Starlette and Uvicorn (ASGI), so Synchronous was the wrong shelf. It
lands as a third challenger behind starlette and tornado's obvious
choices — the use case holds 5 with 3 challengers by explicit
maintainer override (Async I/O precedent; the awesome-fasthtml
sub-item rides along). 1.19M downloads/month as python-fasthtml.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:21:08 +08:00
Vinta ChenandClaude 15cd51c04c style: re-tier File Manipulation
No removals. mimetypes and pathlib (standard library) lead
alphabetically under the stdlib-first rule; watchfiles (389.3M/mo,
partly uvicorn-transitive — the riser) completes the obvious choices;
watchdog (113.3M/mo, the demoted incumbent, Second Tier) and
python-magic (32.3M/mo) challengers.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:10:10 +08:00
Vinta ChenandClaude ad698c2876 audit: sweep HTML Manipulation, drop html-to-markdown, pyquery, tinycss2
Tiers: beautifulsoup4 (renamed from beautifulsoup — the bare PyPI
name is the abandoned bs3 shim; 451.4M/mo, docs link per the PyQt
precedent), lxml (401.3M/mo), xmltodict (124.5M/mo) obvious choices;
markupsafe (820.5M/mo — the section's biggest raw count, but
jinja-transitive infrastructure, so challenger on judgment; watch:
quiet since 2025-09) and justhtml (67.8K/mo, 1.1K stars in two
years — trajectory judgment on a young pure-Python HTML5 parser)
challengers.

Removed:
- html-to-markdown — coordinated multi-entry self-promotion
  (automatic-rejection rule): PyPI provenance verified to xberg-io,
  the org's fourth planted entry overall. 1.5M downloads/month is
  real but the rule stands.
- pyquery — 2.2M downloads/month and an active repo (pushed
  2026-07); editorial drop at cap: the jQuery-style API is the
  least-reached-for of the keeps. Judgment call.
- tinycss2 — 110.5M downloads/month is transitive (weasyprint
  declares it a hard dependency, verified in PyPI metadata) against
  190 stars; a CSS parser mis-homed in an HTML/XML section with no
  better home. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:09:52 +08:00
Vinta ChenandClaude db9c262342 feat: add rapidfuzz, minting Text Processing > Fuzzy Matching
The industry's fuzzy string matching answer (web-verified: the
production recommendation over thefuzz — same API, MIT license, C++
speed — and preferred over textdistance for string metrics). 181.7M
downloads/month (pepy), 4.1K stars, pushed 2026-08. Sole obvious
choice; the subcategory label rides this commit so it is never empty,
completing the displacement of textdistance.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:09:32 +08:00
Vinta ChenandClaude 043cb6d377 feat: add charset-normalizer to Text Processing > Encoding and Unicode
The ecosystem's default encoding detector — requests switched to it
in 2021 and 2026 guidance names it the choice for new projects
(web-verified). 1.73B downloads/month (pepy; heavily
requests-transitive, but default-status is the point), pushed
2026-08. Co-obvious with chardet, which retains a verified accuracy
claim — the PyQt/PySide pair shape.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:09:18 +08:00
Vinta ChenandClaude da4383a06f audit: sweep Text Processing, dissolve General, drop textdistance, nameparser, user-agents, tree-sitter-language-pack
Restructure: the 10-entry General grab-bag dissolves — Encoding and
Unicode (chardet 224.1M/mo obvious choice, joined by
charset-normalizer next commit; ftfy 14.4M/mo kept as the fifth
mature-stable past-line keep, repo and release both 2024-10),
Internationalization (babel 135.2M/mo sole), Transliteration and
Slugs (python-slugify 87.7M/mo, unidecode 31.8M/mo), and a residual
General (difflib stdlib-first, pyfiglet 6.2M/mo judgment keep).
pypinyin (1.9M/mo) and pangu.py (14.9K/mo as PyPI pangu — display
name kept by explicit maintainer word, the second deliberate naming
exception after pytorch; kept on sole-tool judgment for CJK spacing)
re-home to Natural Language Processing > Chinese as challengers
beside jieba. Parser re-tiers: pygments (1.25B/mo), pyparsing
(422.3M/mo), sqlparse (146.8M/mo) obvious choices; phonenumbers
(renamed from python-phonenumbers, 39.4M/mo) and parsy (4M/mo)
challengers. Unique identifiers reorders to shortuuid then sqids.

Removed:
- textdistance — last release 2024-07 (25 months) and repo quiet
  since 2025-04, past the 12-month line; displaced by rapidfuzz
  (181.7M/mo vs 2.5M), entering in its own commit.
- python-nameparser — 3.3M downloads/month (as nameparser) and an
  active repo; editorial drop at cap: the domain-parser class is
  trimmed to the giant, phonenumbers. Judgment call.
- python-user-agents — repo quiet since 2023-02, three and a half
  years past the 12-month line.
- tree-sitter-language-pack — coordinated multi-entry self-promotion
  (automatic-rejection rule): PyPI provenance verified to xberg-io,
  the org that previously planted xberg and liter-llm. 6.6M/mo is
  real but the rule stands; its sibling drops from HTML Manipulation.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 15:09:02 +08:00
Vinta ChenandClaude 67c9f7ae93 style: split Computer Vision into General and OCR
No removals. General tiers: opencv-python (renamed from opencv to the
canonical pip package this entry already linked; 55.9M/mo) and
ultralytics (8.4M/mo, 60.7K stars) obvious choices; kornia (3.1M/mo)
and fiftyone (253.7K/mo — dataset tooling rather than a vision
algorithm library, kept as the unprompted answer for that adjacent
job) challengers. OCR minted as a distinct job: pytesseract (24M/mo)
and easyocr (3.6M/mo, quiet since 2025-12 — watch) obvious choices.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:48:57 +08:00
Vinta ChenandClaude c83b98c37e audit: sweep Natural Language Processing, drop funnlp
General tiers: nltk (71.4M/mo), spacy (25.4M/mo) obvious choices;
gensim (6M/mo, quiet since 2025-11 — watch) and stanza (1.1M/mo)
challengers. Chinese: jieba kept as mature-stable past the 12-month
activity line (repo quiet since 2024-08, last release 0.42.1 in
2020-01) on the sortedcontainers precedent — the fourth such keep:
3.3M downloads/month, 35.1K stars, still the Chinese segmentation
answer with no successor.

Removed:
- funnlp — three independent grounds: a link-collection rather than a
  library; repo quiet since 2024-05, past the 12-month line; 55
  downloads/month. Its 82.5K stars measure the bookmark, not a tool.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:48:38 +08:00
Vinta ChenandClaude 7d1c5c8d00 audit: sweep Machine Learning, three-way split, drop h2o, mindsdb, scikit-lego, TabGAN, spark.ml
Restructure: the 12-entry flat section splits into General
(scikit-learn 234.7M/mo obvious choice; pgmpy 843.7K/mo and
feature-engine — renamed from feature_engine to its canonical PyPI
name, 297.1K/mo — challengers), Gradient Boosting (xgboost 52M/mo,
lightgbm 26.5M/mo, catboost 6.3M/mo, all obvious choices; lightgbm's
lightgbm-org link verified current — microsoft/LightGBM redirects
there), and Time Series Forecasting (timesfm sole — a foundation
model judged by ecosystem adoption, 285K/mo and 27.6K stars; prophet
and darts are named absences, deliberately not added this sitting).

Removed:
- h2o — 215.1K downloads/month, 7.5K stars, and the repo is active;
  the drop is purely editorial: no longer anyone's unprompted answer
  against scikit-learn and the boosting trio. Judgment call.
- mindsdb — the linked repo redirects to mindsdb/mindshub, a "models
  workspace"; the AI-layer-for-databases product this entry described
  no longer exists (verified). 23.9K downloads/month.
- scikit-lego — 72.5K downloads/month, 1.4K stars; a grab-bag of
  sklearn extras that never became an unprompted answer. Judgment.
- TabGAN — 574 stars, 2.3K downloads/month. Nowhere near the bar.
- spark.ml — duplicate in all but name: pyspark is already listed in
  the audited DevOps group, same repo, same pip install. Structural.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:48:21 +08:00
Vinta ChenandClaude b95ce7e995 feat: add gymnasium to Deep Learning > Reinforcement Learning
The RL environments standard: community successor to OpenAI Gym
(unmaintained since 2022; few maintained RL libraries still support
old Gym — web-verified). 6.5M downloads/month (pepy), 12.3K stars,
pushed 2026-08. Obvious choice beside stable-baselines3, ordering
first by downloads.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:47:56 +08:00
Vinta ChenandClaude 34c550b864 style: split Deep Learning into Frameworks and Reinforcement Learning
No removals. Frameworks tiers: pytorch (96.6M/mo as PyPI torch — the
display name stays pytorch by explicit maintainer word, a deliberate
exception to the naming convention; the bare pytorch PyPI package is
a squatting placeholder), tensorflow (19.2M/mo — production incumbent,
flagged as a Second Tier demotion candidate for the next audit), keras
(18.6M/mo, backend-agnostic since Keras 3) obvious choices; jax
(21.8M/mo, TPU/performance trajectory) and pytorch-lightning
(11M/mo) challengers. Landscape verified: PyTorch is the 2026 default
with 85% research share.

stable-baselines3 moves into the minted Reinforcement Learning
subcategory — RL is a distinct job; gymnasium joins it next commit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:47:44 +08:00
Vinta ChenandClaude 660d746237 style: move the ERP section to the Web Development group
Maintainer challenge upheld: Odoo is a ready-made web application
platform you extend, the sibling concept of CMS and Admin Panels —
so the section belongs beside them, not in the Other grab-bag (its
first placement was inertia from tryton's Miscellaneous home). TOC
and body both move; the group's section tail stays alphabetical
(Admin Panels, CMS, ERP, Static Site Generators).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:30:54 +08:00
Vinta ChenandClaude a2659635af feat: add odoo, minting the ERP section
The Python ERP by adoption: about 7M users across editions, 50+ app
modules, 53.7K stars, pushed daily (web-verified). Not pip-distributed
— the PyPI odoo package is a dateless placeholder — so no download
signal; judged by ecosystem and displayed by repository name (renpy
precedent). Sole obvious choice.

Second structure override of decision 18 by maintainer word (Supply
Chain Security precedent): ERP lands as a new section in the Other
group rather than a slot in the Miscellaneous grab-bag, replacing the
dropped tryton. TOC line, heading, and description ride this commit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:27:23 +08:00
Vinta ChenandClaude f8e594a9b4 audit: sweep Miscellaneous, drop tryton, re-home itsdangerous to Cryptography
Restructure: itsdangerous moves to Security > Cryptography as a
challenger — HMAC-based data signing fits "cryptographic primitives
and secure protocols" better than the grab-bag. Kept past the
12-month activity line (repo quiet since 2025-06, last release
2024-04) as mature-stable on the sortedcontainers precedent: 222.8M
downloads/month, the signing answer, no successor. Miscellaneous
keeps blinker (192.2M/mo) and boltons (26.5M/mo) as obvious choices.

Removed:
- tryton — 10.9K downloads/month, and that PyPI package is the
  desktop client (the framework server is trytond); the linked GitHub
  repo is a self-described 216-star mirror; and the ERP obvious
  choice by adoption is Odoo (~7M users vs hundreds-to-thousands of
  Tryton deployments, web-verified), which enters in the next commit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:27:02 +08:00
Vinta ChenandClaude 0194cbbe13 audit: sweep Hardware, drop synology-api
Tiers: bleak (2.5M/mo) and pynput (2.2M/mo) obvious choices;
jumpstarter (1.5K/mo, 211 stars, created 2026-01) kept as a
challenger by explicit maintainer flip against the seeded drop.

Removed:
- synology-api — 579 stars, 14.5K downloads/month; a single-vendor
  NAS API wrapper, not an obvious choice for any hardware job a
  general reader has. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:26:42 +08:00
Vinta ChenandClaude 16e17d62ba style: drop the preview label from uv audit's description
Maintainer word: no preview marker in the entry text. The stability
override itself stands unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:15:42 +08:00
Vinta ChenandClaude 913b380cc8 feat: add uv audit to Supply Chain Security
Maintainer-proposed during the Security sitting: uv's built-in
vulnerability and malware scanning (announced 2026-06, OSV-backed,
4-10x faster than pip-audit on typical projects). Enters as a
no-signal challenger behind pip-audit — not a package, so this is a
subcommand pointer entry linking the CLI docs (httpx.URL precedent).

Astral marks the feature preview/unstable; kept by explicit maintainer
override of the production-ready quality bar — the first stability
override. The description carries the preview label.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:15:21 +08:00
Vinta ChenandClaude fe7006edcc feat: add pip-audit, minting the Supply Chain Security section
The PyPA-official dependency vulnerability scanner: 30.9M
downloads/month (pepy; largely CI traffic, which is the use case),
1.3K stars, pushed 2026-08. Verified 2026 guidance names it the free
baseline over the older commercial safety. Sole obvious choice.

This mints the reform's first new section — an explicit maintainer
override of decision 18 (all minted use cases are subcategories),
accepted in the audit preview. TOC line, heading, and description
ride this commit per the Build Backends pattern; placed alphabetically
in the Security group.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:12:46 +08:00
Vinta ChenandClaude 438881adba style: audit Cryptography and Penetration Testing — renames and re-tiers
No removals in either section.

Cryptography: adds the missing italic section description; reorders to
downloads — cryptography (1.48B/mo), pynacl (241.7M/mo), paramiko
(155.4M/mo; SSH kept here as secure-protocols-adjacent rather than
minting a sole-entry use case) — all obvious choices.

Penetration Testing: tiers mitmproxy (10.8M/mo) and sqlmap (official
PyPI package verified, 65.3K/mo under-measures git-based usage; 38.2K
stars) obvious choices; sherlock-project (renamed from sherlock — the
bare PyPI name is an unrelated distributed-lock library; 115.9K/mo,
89.6K stars) and social-engineer-toolkit (renamed from setoolkit —
no PyPI package, so the naming convention falls back to the repository
name; no download signal, judged by ecosystem standing) challengers.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:12:29 +08:00
Vinta ChenandClaude 283f1425b3 style: fix display-name casing to canonical PyPI names
Maintainer-approved batch: gtts → gTTS, twisted → Twisted, cython →
Cython, per the naming convention (display name = canonical PyPI
package name, verified via the PyPI JSON API). All three were caught
post-commit in earlier sittings and parked awaiting explicit word.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:03:50 +08:00
Vinta ChenandClaude cf38a34ed4 refactor: re-home pre-commit to Code Analysis > Git Hooks
Maintainer-adjudicated close of the standing flag from the Developer
Tools sitting: pre-commit is developer-workflow tooling (a git-hook
framework orchestrating linters), not ops — it leaves the DevOps
Tools > Other grab-bag for a minted sole-entry Git Hooks subcategory
in Code Analysis. Placement avoids stretching the Linters and
Formatters cap override (already 6 by maintainer word). No additions
or removals — a pure re-home.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 14:03:35 +08:00
Vinta ChenandClaude ee0caca892 feat: add pydantic-settings to Configuration Files
Displacement of the dropped python-decouple: same job — settings from
environment variables and files — done with validation and types on
the pydantic ecosystem's momentum. 495M downloads/month (pepy), pushed
2026-08. Obvious choice, ordering after python-dotenv.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:54:05 +08:00
Vinta ChenandClaude 5a8c062f6d audit: sweep Configuration Files, drop python-decouple
Tiers: configparser (stdlib, leads the use case under the stdlib-first
ordering rule), python-dotenv (782.2M/mo) obvious choices —
pydantic-settings joins them in its own addition commit; hydra-core
(23.8M/mo — renamed from hydra to its canonical PyPI name; the cache's
bare hydra row is an ancient unrelated package; link updated to
hydra-ecosystem/hydra, where the facebookresearch repo now redirects,
target verified by description) and dynaconf (6.8M/mo) challengers.

Removed:
- python-decouple — repo dormant since 2024-11, last release 3.8 in
  2023-03, three and a half years past any release and past the
  12-month activity line. 8.4M downloads/month, 3.0K stars.
  Displaced by pydantic-settings (495M/mo) entering next.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:51 +08:00
Vinta ChenandClaude 9f9bd8db1f style: split Distribution into Executables and Obfuscation
Maintainer-directed restructure: instead of dropping pyarmor as
mis-homed, an Obfuscation subcategory is minted for it (sole obvious
choice — 501.5K/mo, 5.2K stars, pushed 2026-08); code obfuscation is a
distinct job from building executables. Executables tiers: pyinstaller
(13.1M/mo), Nuitka (512K/mo) obvious choices; shiv (487.3K/mo),
cx-Freeze (221K/mo) challengers. No removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:35 +08:00
Vinta ChenandClaude 947b93943a feat: add uv-build to Package Management > Build Backends
Challenger: uv's own backend at 26.5M downloads/month (pepy) within a
year of release, riding uv's adoption trajectory. Deferred by the
maintainer from the Developer Tools sitting; this closes that agenda
item.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:17 +08:00
Vinta ChenandClaude 0ec6f492f4 feat: add hatchling to Package Management > Build Backends
The modern default backend — PyPA docs and project templates reach for
it: 507M downloads/month (pepy), pushed 2026-08. Obvious choice
alongside setuptools; ordering after it by downloads.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:03 +08:00
Vinta ChenandClaude 1a36f77426 feat: add setuptools to Package Management > Build Backends
Mints the Build Backends subcategory — the deferred agenda item from
the Developer Tools sitting (2026-08-16), landing in its designated
Python Toolchain slot. setuptools is the incumbent obvious choice:
1.51B downloads/month (pepy), half the ecosystem still builds with it,
pushed 2026-08.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:51 +08:00
Vinta ChenandClaude 1b51907189 audit: sweep Package Management, mint Package Managers subcategory, cap override to 6
Restructure: the flat section becomes two subcategories — Package
Managers (this commit) and Build Backends (entering next as three
addition commits; the pyproject build-backend choice is a distinct job
from installing packages).

Package Managers tiers: pip (689.4M/mo), uv (194.1M/mo, the 2026
default recommendation for new projects), poetry (79M/mo) obvious
choices; hatch (22.2M/mo — kept by explicit maintainer flip against
the seeded drop), pipx (7.1M/mo, Second Tier — uv tool covers the job
for uv users), conda (no pip signal, the data-science distribution
standard; sorts last) challengers. The use case holds 6 entries by
explicit maintainer cap override — the list's third, same 3 obvious
choices + 3 challengers shape as Linters and Async I/O.

No removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:39 +08:00
Vinta ChenandClaude a4eba37b1f audit: sweep Environment Management, drop KillPy, pyenv-win becomes a sub-item
Tiers: virtualenv (545.7M/mo, much of it transitive via pip and tox),
uv (194.1M/mo, dual-listed here and in Package Managers by maintainer
acceptance), pyenv (no pip signal — distributed via git and brew;
45.0K stars) all obvious choices. pyenv-win converts to an indented
sub-item under pyenv (the flower/celery companion pattern — its job is
inseparable from its parent's), freeing a slot without losing the
pointer.

Removed:
- KillPy — 124 stars, created 2025, 3.7K downloads/month; nowhere
  near obvious-choice or challenger territory.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:22 +08:00
Vinta ChenandClaude 5f6f1f020e docs: clarify that standard-library modules lead the use case outright
Maintainer correction to the previous amendment: stdlib sorts at the
top of the whole use case, not merely first within its tier. No README
movement results — the stdlib admission rule (a standard-library
module is listed only where it is itself the obvious choice) means
every stdlib entry already sits in the first tier, so tier-top and
use-case-top coincide; the rule text now states the intent directly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:39:31 +08:00
Vinta ChenandClaude 05a9dd4ed5 style: move standard-library entries to the top of their tiers
Applies the amended Entry Ordering rule (stdlib first in tier)
retroactively to all audited sections: sqlite3 (SQLite), mock (Mock),
logging (Logging), tomllib (Data Formats), argparse (CLI Development),
tkinter (Tkinter), functools (Functional Programming), asyncio with
its awesome-asyncio sub-item (Async I/O), zoneinfo (Date and Time).
Parallelism (concurrent.futures, multiprocessing) is an all-stdlib
tier and stays alphabetical. Unaudited sections (difflib, mimetypes,
pathlib, configparser) pick the rule up at their own audit. No entry
additions or removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:37:14 +08:00
Vinta ChenandClaude 15c4064ee1 docs: amend Entry Ordering so standard-library modules sort first in tier
Maintainer rule change: built-ins lead their tier instead of sorting
last with the other no-signal entries — a stdlib module that earns a
slot is the default answer, so it reads first. Several stdlib modules
in one tier stay alphabetical. Non-stdlib no-signal entries (agent
skill packs, projects distributed outside PyPI) still sort last in
tier. README reorder of already-audited sections follows in a style
commit; unaudited sections pick the rule up at their own audit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:36:30 +08:00
Vinta ChenandClaude c00094add6 feat: add whenever to Date and Time
Challenger with verified adoption trajectory: 9M downloads/month
(pepy), 2.4K stars, pushed 2026-08. Rust-backed and type-safe, with
published benchmarks 10-100x faster than Pendulum and Arrow and a
DST-correctness design aimed at the incumbents' known pitfalls.
Slots into the second challenger position after pendulum.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:53 +08:00
Vinta ChenandClaude 16077fc0e1 style: re-tier Built-in Classes Enhancement and Date and Time
No removals in either section — tier ordering and canonical-name
renames only.

Built-in Classes Enhancement: attrs (939M/mo), bidict (30.5M/mo)
obvious choices; uuid-utils (81.2M/mo, challenger on judgment — the
count is transitive-profile against 364 stars) and python-box
(renamed from box, its canonical PyPI name; 6.9M/mo) challengers.

Date and Time: python-dateutil (renamed from dateutil, its canonical
PyPI name; 1.21B/mo), dateparser (46.4M/mo), zoneinfo (stdlib, the
timezone answer since 3.9; no-signal, sorts last) obvious choices;
pendulum (71.6M/mo, revived 2026-07 after a long slump — Second
Tier-shaped) challenger.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:35 +08:00
Vinta ChenandClaude 19875cf356 audit: sweep Asynchronous Programming, split into Async I/O and Parallelism
Restructure: the flat section splits — async I/O and process/pool
parallelism are distinct jobs. Parallelism holds concurrent.futures
and multiprocessing (both standard library, both obvious choices,
no-signal so alphabetical).

Async I/O tiers: anyio (1.07B/mo — heavily transitive via httpx and
Starlette, but independently the production-recommended structured-
concurrency layer), uvloop (267.7M/mo), asyncio (stdlib, no-signal,
sorts last; awesome-asyncio sub-item rides along) obvious choices;
trio (53.8M/mo), gevent (49.6M/mo), twisted (15.1M/mo) challengers —
gevent and twisted kept as Second Tier by explicit maintainer
decision, and the use case holds 6 entries by explicit maintainer cap
override (the list's second, after Linters and Formatters; same
3 obvious choices + 3 challengers shape).

No removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:08 +08:00
Vinta ChenandClaude 6af6158287 audit: sweep Functional Programming, drop coconut
Tiers: more-itertools (339.9M/mo), toolz (62.9M/mo), functools
(stdlib, the first stop for FP utilities; no-signal, sorts last)
obvious choices; funcy (7.3M/mo) and returns (1.37M/mo, typed
monads/Result trajectory) challengers.

Removed:
- coconut — 14.4K downloads/month, 4.3K stars; a compiled language
  variant rather than a library, and nobody's unprompted answer for
  functional Python. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:29:44 +08:00
Vinta ChenandClaude 9fa72c1ee6 audit: sweep Implementations, drop ironpython
Tiers: cpython, micropython, pypy obvious choices (all no-signal —
distributed outside pip — so alphabetical); cython (130.3M/mo, kept
here by judgment as a Python-superset compiler with no better home)
and pyodide (no pip signal; distributed via CDN and npm) challengers.

Removed:
- ironpython — latest release v3.4.2 (2024-12) still implements
  Python 3.4-era language, a decade behind CPython (verified from the
  release feed; the repo itself is active, so this is not an
  activity-line drop). 2.8K stars. Not an obvious choice for any
  current job.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:29:23 +08:00
Vinta ChenandClaude 8a3771e895 feat: add pygame-ce to Game Development > Game Frameworks
Challenger to pygame: the community fork where long-time contributors
now develop, a drop-in replacement (same import name), and community
guidance for new projects favors it — adoption-trajectory evidence
verified by web search. 642.5K downloads/month (pepy), 1.6K stars,
created 2023, pushed 2026-08. Upstream pygame itself has been quiet
since 2025-11. Slots into the open challenger position ahead of
arcade (85.3K/mo).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:15:08 +08:00
Vinta ChenandClaude 3f391b34ba audit: sweep Game Development, split into use cases, drop py-sdl2, pyopengl
Restructure: the flat section splits into 3D Engines (panda3d
189.3K/mo, sole obvious choice), Game Frameworks (pygame 3.07M/mo and
pyglet 2.9M/mo obvious choices; arcade 85.3K/mo challenger — pygame-ce
joins as a challenger in its own addition commit), and Visual Novels
(renpy sole obvious choice — its 4/mo pip count is meaningless since
Ren'Py ships as its own SDK; ecosystem verified: 8,000+ published
works, release 8.5.3 in 2026-05).

Removed:
- py-sdl2 — 71.1K downloads/month (as PySDL2), 344 stars; low-level
  SDL bindings whose job pygame-ce and pyglet cover for this list's
  audience. Judgment call.
- pyopengl — 5.3M downloads/month, likely transitive
  scientific-visualization traffic (judgment call, mechanism
  unverified), 415 stars; raw OpenGL bindings are not a
  game-development obvious choice.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:54 +08:00
Vinta ChenandClaude 8f9c3884bf audit: sweep Audio & Video Processing, re-home TTS to Speech, drop birdnet, matchering
Restructure: gtts and KittenTTS re-home to AI and Agents > Speech — TTS
belongs with the speech models, not audio processing. gtts (3M/mo,
a 2014 service wrapper, quiet since 2026-04) lands as Second Tier;
kittentts (renamed to its canonical PyPI name, 15.3K stars within a
year of creation, pip count 3.9K/mo under-measures model adoption)
as challenger. Speech is now at exact cap (5/5) — future additions
there require displacement.

Audio keeps pydub (21.4M/mo) and librosa (11.7M/mo) as obvious
choices. Video unchanged: moviepy (7M/mo) obvious choice, vidgear
(25.3K/mo) challenger. Metadata reorders to tiers: mutagen (8.2M/mo)
obvious choice; tinytag (5.2M/mo), beets (67.4K/mo, kept as challenger
rather than minting a sole-entry subcategory — judgment call).

Removed:
- birdnet — 7.1K downloads/month, 1.7K stars; an applied bioacoustics
  tool with a genuinely small audience, not an audio-processing
  choice. Judgment call.
- matchering — 16.1K downloads/month, 2.6K stars; a single-task
  automated-mastering tool with a small audience, no trajectory.
  Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:37 +08:00
Vinta ChenandClaude 9970486a2a feat: add rembg to Image Processing > General
Maintainer-requested during the Media audit, replacing dropped
pymatting with the tool whose traffic pymatting was carrying: rembg is
the obvious choice for background removal — 4.1M downloads/month
direct (pepy), 24.3K stars, pushed 2026-08, active release train.
Takes the open third obvious-choice slot in General (no displacement
needed), ordering after pillow and scikit-image.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:13 +08:00
Vinta ChenandClaude 41a1b4b0ae audit: sweep Image Processing, split into use cases, drop pymatting
Restructure: the flat section splits into Barcodes and QR Codes (qrcode
30.1M/mo, python-barcode 3.4M/mo, both obvious choices — generating
codes is a distinct job from manipulating images), General (pillow
552M/mo, scikit-image 28.5M/mo obvious choices; wand 1.4M/mo, pyvips
808.2K/mo challengers), and Image Serving (thumbor sole obvious choice —
a deployed service, so its 22K/mo pip count under-measures use).

Rename to canonical PyPI name: python-qrcode → qrcode.

Removed:
- pymatting — 3.3M downloads/month, but the traffic is transitive:
  rembg declares pymatting as a hard dependency (verified in rembg's
  PyPI metadata). A single-task alpha-matting library, 1.9K stars,
  quiet since 2026-04; not an obvious choice for image processing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:13:57 +08:00
Vinta ChenandClaude 9bbe1cf6d0 audit: sweep GUI Development, split Desktop into Qt and Tkinter, drop enaml, buridan/ui, curses
Restructure: the 12-entry Desktop use case splits — Qt (PySide6
3.9M/mo, PyQt6 2.7M/mo, co-obvious pair differing in licensing) and
Tkinter (customtkinter 1.13M/mo, tkinter stdlib obvious choices;
tkdesigner challenger, kept by maintainer decision) mint as
subcategories; residual Desktop lands at cap with pygobject (607.6K/mo),
wxPython (354.8K/mo), kivy (288.8K/mo) obvious choices and dearpygui
(193.5K/mo), toga (12.9K/mo, BeeWare trajectory) challengers.

Renames to canonical PyPI names: PyQt → PyQt6, pyside → PySide6 (the
PyPI package named pyside is the dead Qt4-era PySide 1).

Re-homes: urwid (11.3M/mo) moves to CLI Development > TUI Frameworks as
a challenger and pyglet (2.9M/mo, windowing and multimedia for games)
moves to Game Development, dissolving this section's Terminal
subcategory. Web-based keeps pywebview (2.19M/mo), nicegui (1.2M/mo),
flet (444.1K/mo) as obvious choices; gooey stays sole Wrappers entry.

Removed:
- enaml — 14.1K downloads/month, 1.6K stars after 13 years; a
  declarative Qt DSL nobody names unprompted. Judgment call.
- buridan/ui — 248 stars, no PyPI package; a component-snippet
  collection for Reflex, not a GUI framework. Fails admission.
- curses — standard-library rule: stdlib holds a slot only where it is
  itself the obvious choice, and for building TUIs that is textual.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:56:44 +08:00
Vinta ChenandClaude 1a8e14c177 audit: sweep CLI Tools, dissolve Productivity Tools, drop thefuck, kaydet, doitlive
Restructure: the Productivity Tools grab-bag dissolves into use cases —
Project Scaffolding (cookiecutter 10.1M/mo obvious choice, copier
2.5M/mo challenger), Shells (xonsh 419.5K/mo), Downloaders (yt-dlp
17.7M/mo), Terminal Workflow (tmuxp 129.4K/mo). CLI Enhancements
renames to Database CLIs (pgcli 636.6K/mo, mycli 124.9K/mo, litecli
74.2K/mo obvious choices; iredis 8.3K/mo challenger); HTTP Clients
minted for httpie.

httpie kept by explicit maintainer override of the 12-month activity
line (repo dormant since 2024-12, last release 2024-11; 1.04M
downloads/month) — second use of the schedule precedent.

Removed:
- thefuck — dormant since 2024-07, past the 12-month activity line;
  7K downloads/month (most installs come from brew, not pip).
- kaydet — 48 stars, 5.6K downloads/month; a personal diary tool
  nowhere near obvious-choice or challenger territory.
- doitlive — 651 downloads/month against 3.6K stars; alive but
  effectively unused. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:56:03 +08:00