Skip to content

[tool.wads.ci.install].extras defaults to empty: ~22 repos never install their declared test deps #59

Description

@thorwhalen

[tool.wads.ci.install].extras defaults to empty, so declared test-time deps are silently never installed

The mechanism

CIConfig.install_extras (wads/ci_config.py:85) defaults to "", so CI runs
uv pip install -e . — core dependencies only. A repo that puts its test-time tooling in a
dev / test / testing extra and does not also declare
[tool.wads.ci.install] extras = "dev" gets a CI job that never installs it.

This does not announce itself. Depending on the tool, the test either errors on import, or —
worse — is silently skipped (pytest-asyncio absent means async tests are collected and
skipped rather than failed).

Fleet measurement

Across the locally-maintained wads-managed repos:

  • 131 declare a dev/test/testing extra and no [tool.wads.ci.install].extras.
  • Most are false alarms: run-tests-uv installs pytest (and pytest-cov when coverage
    is on) itself, and ruff comes from the ruff actions. ~95 of the 131 list only
    pytest/pytest-cov/ruff, so nothing is actually missing.
  • ~22 are genuinely exposed — their extra carries tooling CI does not otherwise provide:
repo never installed in CI
dn pandas, pypdf, nbconvert, nbformat, openpyxl, mammoth, python-pptx, tabulate, html2text
ayn pytest-asyncio, fastapi, pydantic, uvicorn, langserve
nw pytest-postgresql, psycopg, psycopg_pool
tonal music21, mido, dol, config2py
hedger pytest-asyncio
heed httpx, pytest-asyncio
enlace_docker pytest-asyncio
aix hypothesis
xa httpx
oa, article playwright
tabled pyarrow, requests
aw oa, openai
scribed, denote soundfile
ocracy pillow
arioso numpy
epythet hubcap, pandas
yb muvid
ek, ke ocracy
typola jupyter, ipykernel

Two were confirmed as live CI failures during the current repo-improvement rollout and fixed
by adding extras = "dev": i2mint/heed (collection error — httpx missing under
fastapi.testclient) and i2mint/enlace_docker (pytest-asyncio missing).

Why this is a wads problem, not 22 repo problems

The config is one line, so per-repo fixes are easy — but the failure mode is invisible, so
nobody discovers it until a test happens to fail loudly, and every new repo scaffolded with
a dev extra inherits the same hole. Suggested fixes, in preference order:

  1. Auto-detect. When [tool.wads.ci.install].extras is unset and the project declares an
    extra named dev/test/tests/testing/ci, install it. This matches what every one of
    the 131 repos evidently intended. An explicit extras = "" remains the opt-out.
  2. Warn loudly in read-ci-config when that combination is detected, so it shows up in
    every CI log until fixed.
  3. At minimum, make populate's generated pyproject.toml ship
    [tool.wads.ci.install] extras = "dev" alongside the dev extra it already creates, so new
    repos are consistent by construction.

Option 1 or 3 stops the bleeding; option 2 alone leaves the existing repos silently broken.

Found during the wads repo-improvement rollout.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions