Web APIs > Flask lacked marshmallow-code's flask-smorest, the second most-installed Flask API framework, so the challenger apiflask sat above a more widely used entry.
Co-Authored-By: Claude <noreply@anthropic.com>
Web APIs > Flask listed only apiflask (172,781 downloads/month) while flask-restx, the most-installed Flask API framework at 1,162,703 (pypistats 2026-10-02), was missing.
Co-Authored-By: Claude <noreply@anthropic.com>
In Web APIs > Framework Agnostic, connexion (4.26M downloads/month) sat above strawberry (5.76M) against the downloads-order rule, and gunicorn's line omitted the native ASGI worker it has shipped stable since 25.1.0. hypercorn stays in Second Tier (last position, unchanged) under the new Python-version rule instead of being dropped.
Co-Authored-By: Claude <noreply@anthropic.com>
No written rule covered Python version support, so audits treated a missing Python 3.14 wheel as grounds to drop entries that still have millions of users on older Pythons.
Co-Authored-By: Claude <noreply@anthropic.com>
CONTRIBUTING's Stable requirement read as "not alpha/beta", so about 40 production-used entries (fastapi, uvicorn, keras, statsmodels, numba, and others) failed it on their PyPI Development Status classifier alone, and each needed an audit-log exception.
Co-Authored-By: Claude <noreply@anthropic.com>
On a verdict preview page with no flipped rows, Copy feedback produced only a generic acceptance line, so a pasted acceptance did not say which page or sections it covered.
Co-Authored-By: Claude <noreply@anthropic.com>
The 2026-10-02 AI & ML audit kept or admitted five Beta-classifier entries and kept annoy past the 12-month activity line, but docs/audit-logs.md did not record these maintainer decisions, so the next audit would drop them as rule failures.
Co-Authored-By: Claude <noreply@anthropic.com>
The OCR list had pytesseract and easyocr but omitted PaddleOCR, which led 2026 open-source OCR benchmarks on multilingual text and complex layouts.
Co-Authored-By: Claude <noreply@anthropic.com>
Time Series Forecasting listed only timesfm, while prophet, the most-installed forecasting library, was missing.
Co-Authored-By: Claude <noreply@anthropic.com>
The tensorflow line called it "the most popular Deep Learning framework", false by downloads (torch 59.8M/month vs tensorflow 11.4M on pypistats, 2026-10-02), and the Frameworks tiers no longer matched the evidence: tensorflow 2.21.0 still ships no cp314 wheels (tensorflow/tensorflow#102890) and its releases now focus on security and bug fixes, while keras's 11.76M is mostly tensorflow pulling it in (requires keras>=3.12.0). Both move to Second Tier; jax (8.0M, Google's own successor) and pytorch-lightning (10.1M) become obvious choices.
Co-Authored-By: Claude <noreply@anthropic.com>
The 2026-10-01 AI and Agents audit kept claude-agent-sdk despite its Alpha classifier and semantica as a challenger without adoption-trajectory evidence, and neither override was on record in docs/audit-logs.md.
Co-Authored-By: Claude <noreply@anthropic.com>
The AI and Agents section carried two Speech entries that fail admission, its tier order no longer matched downloads, LiteLLM was not listed under its PyPI name, and unsloth's line missed its desktop app. Downloads are PyPI last-30-day via ClickPy, fetched 2026-09-26.
Removed:
- vibevoice (440/month): the only PyPI release is 0.0.1 from 2025-09-26; the TTS-1.5B model is disabled after misuse and the ASR model now ships in transformers, so nothing pip-installable is maintained.
- kittentts (1,917/month): the README marks it "Developer preview" (fails Stable), and PyPI kittentts is a third-party upload while the project installs from its GitHub release wheel.
Also:
- pydantic-ai promoted to obvious choice above crewai (5.37M vs 2.48M); crewai's pypistats monthly series swung from 28.5M in Aug to 2.4M in Sep and it requires_python <3.14, so it is now a Second Tier challenger.
- claude-agent-sdk reordered above openai-agents (29.1M vs 12.1M).
- LiteLLM renamed to litellm, its canonical PyPI name.
- unsloth description now mentions the desktop app.
- gTTS reordered above funasr by downloads (1.14M vs 282K).
Co-Authored-By: Claude <noreply@anthropic.com>
The preview only had keep/drop, so a proposed new entry had to be seeded as drop and flipped to Keep to add it, which was confusing.
Co-Authored-By: Claude <noreply@anthropic.com>
docs/audit-logs.md claimed every maintainer override is recorded, but the openviking stability override (PR #3302) and the seleniumbase challenger-evidence override (PR #3284) were missing.
Co-Authored-By: Claude <noreply@anthropic.com>
Inline code in category intros and guides inherited the body font with no background, so identifiers like INSTALLED_APPS read as ordinary words.
Co-Authored-By: Claude <noreply@anthropic.com>
awesome-pyramid last pushed 2021-07-08 and awesome-fasthtml 2024-09-08, both stale (checked via GitHub API 2026-09-27).
Co-Authored-By: Claude <noreply@anthropic.com>
18 entry descriptions overstated, understated, or misattributed their projects, checked against upstream on 2026-09-27 and approved row by row.
- django: "most popular" contradicted by the 2024 JetBrains/PSF survey, where FastAPI leads overall; now uses Django's own tagline.
- joblib: described as pipelining; its docs say parallel computing and disk caching.
- huey: called only "multi-threaded"; it also supports multi-process and greenlet workers.
- numba: updated to its current NumPy-aware wording.
- pytesseract: credited Google as Tesseract's developer, which ended in 2017.
- pennylane: description was narrower than its quantum computing/QML/chemistry scope.
- channels: didn't mention WebSocket support.
- justhtml: left out that it sanitizes untrusted HTML by default.
- akshare: left out its academic-research-only data terms.
- timesfm: left out its non-commercial default weights.
- pyvips: used libvips's own tagline instead of describing it as a binding.
- ultralytics: dropped an unverifiable SOTA claim and added its tracking capability.
- pandera: listed only 3 of its supported dataframe backends.
- sentry-skills: claimed a Python focus and debugging scope; it's the Sentry team's own skill set.
- trailofbits-skills: claimed to be Python-friendly, but only 2 of 85 skills are Python-specific.
- mysqlclient: fork link pointed to SourceForge mysql-python instead of MySQLdb1, and it now notes MariaDB support.
- charset-normalizer: called "the default" of requests, which prefers chardet when installed.
- pynacl: described as binding NaCl directly; it binds libsodium, a NaCl fork.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts.
Co-Authored-By: Claude <noreply@anthropic.com>
Computer Vision's description said nothing; Template Engines claimed lexing; Email claimed parsing and mail server management though yagmail only sends; Build Tools said "compile software" though Invoke and doit are task runners; File Format Processing said "text formats" though it covers ELF, xlsx, docx, and PDF; Package Repositories left out mirrors like bandersnatch. These descriptions show on the category pages.
Co-Authored-By: Claude <noreply@anthropic.com>
langchain used an old composability tagline; transformers named only NLP/vision/audio though it now covers text, vision, audio, video, and multimodal; pgmpy left out its causal reasoning scope; uvicorn listed uvloop/httptools though both are optional extras; django-oauth-toolkit's "goodies" undersold an OAuth 2.0 authorization server; django-unfold used marketing copy instead of a description; pyparsing didn't match its repo's PEG parser description; pdfminer.six didn't say what it does; pyyaml's "implementations" was vague; whenever didn't reflect its Rust-or-pure-Python support; itsdangerous used an outdated upstream tagline; winpython's "Windows 10/11" will go stale; mssql-python's "low memory usage" claim has no upstream source; diskcache repeated the project's own speed benchmark instead of describing it; hishel left out its server-side support; jupyter used IPython's tagline instead of its own; ray used an old tagline; wxPython's sentence was garbled; kivy referenced outdated "NUI" and "Mac OS X" terms.
Co-Authored-By: Claude <noreply@anthropic.com>
Homepage description rows carried aria-hidden="true" on top of hidden, unlike category pages (fixed in 528f9ed); the hidden attribute alone already keeps them from assistive tech while hidden.
Co-Authored-By: Claude <noreply@anthropic.com>
applyFilters walked the static load-order NodeList, so after sorting by a column header, row numbers kept each row's original load-order position instead of counting 1..n down the sorted table.
Co-Authored-By: Claude <noreply@anthropic.com>