Built from main at 1d902a0 on 2026-11-14

Python

Recognised by .py sources, pyproject.toml or setup.py.

tests-run

test_*.py / *_test.py files run by pytest or unittest (directly, as python -m or coverage run -m, or in the tox environments CI runs), or by nox, whose sessions are not read.

fuzz-testing

atheris fuzz targets (files that call atheris.Setup or atheris.Fuzz), run by a CI step python <target>.py .... Hypothesis tests alone warn: they are property-based tests, not fuzz targets.

coverage

coverage.py (coverage run --branch, or branch = true in the configuration it reads: .coveragerc, else the first of setup.cfg, tox.ini and pyproject.toml with coverage settings) or pytest-cov (--cov --cov-branch, also from pytest's addopts), run directly, as python -m, or through uv, Poetry, Pipenv, PDM, Hatch or pipx.

platform-matrix

The toolchains are Python versions.

compiler-warnings

Warnings are errors: -W error, PYTHONWARNINGS=error, or pytest filterwarnings = error.

type-checking

mypy (or dmypy), pyright or basedpyright, pyrefly, or ty, in CI or a pre-commit hook CI runs. Strict mode is a bonus: strict = true in [tool.mypy] or a [mypy] section, mypy --strict, or pyright's typeCheckingMode strict (basedpyright's all).

mutation-testing

mutmut (mutmut run; settings in [tool.mutmut] of pyproject.toml or [mutmut] of setup.cfg), cosmic-ray (cosmic-ray exec) or mutatest. mutmut run given mutant names (mutmut run 'pkg.module.*') counts as running on the changes only.

code-formatting

ruff format (ruff format --check, --diff or --exit-non-zero-on-format; settings in [tool.ruff] of pyproject.toml, ruff.toml or .ruff.toml) or black (--check or --diff; settings in [tool.black]), run directly, through a launcher or tox, as the psf/black or astral-sh/ruff-action action, or as a pre-commit hook CI runs (ruff-format, black). Both have a default style, so CI enforcement alone passes; black . alone only rewrites files.

function-limits

lizard runs in CI with a length limit.

static-analysis

ruff check, pylint or flake8, in CI or a pre-commit hook CI runs (pre-commit.ci, or pre-commit run in a job).

security-scanning

bandit, or ruff check with its S rules selected (on its command line or in its settings). In CI, where the tool runs (a setting alone, which nothing CI runs reads, does not count); CodeQL, GitLab SAST or semgrep count too.

dependency-management

Dependencies declared in pyproject.toml, setup.py or requirements files are locked by a committed uv.lock, poetry.lock, pdm.lock, Pipfile.lock or pylock.toml, or by requirements pinned with --hash. Requirements files in .github are CI's own: pinned by hash, they lock what CI installs, but they declare nothing. Those of the docs and tooling (docs/requirements.txt) are theirs, not the product's.

dependency-audit

pip-audit (or pypa/gh-action-pip-audit) or safety scan.

license

[project] license in pyproject.toml.

committed-artifacts

__pycache__/, *.py[co], *.egg-info/, a top-level dist/ or build/.

vcs-ignore

__pycache__/ or *.py[cod].