Skip to main content

slopstopper-cli

The SlopStopper quality suite, packaged as a Python CLI on PyPI.

Status: Beta. Every check in the public catalogue runs through this package. The CI workflows under .github/workflows/ss-*.yml install the pinned slopstopper-cli via jdx/mise-action and call slopstopper run <category>:<check> — same code path you use locally.

Install

Quick standalone try (unpinned):

pipx install slopstopper-cli
slopstopper --version
slopstopper checks list
slopstopper doctor

Published to PyPI on every release tag. pipx upgrade slopstopper-cli pulls the latest. Each release is also attached to the latest GitHub Release with a Sigstore build-provenance attestation — verify with gh attestation verify <wheel> --owner hungovercoders.

Pinned suite (a repo you'll keep — local and CI run the same version):

curl -fsSL https://raw.githubusercontent.com/hungovercoders/slopstopper/main/install.sh | bash

Requires mise. install.sh pins slopstopper-cli + task in mise.toml (the single source of truth both local runs and CI read) and seeds the ss-*.yml workflows. Move the pin with install.sh --upgrade-cli / --cli-version.

Development (editable, from a clone of this repo):

pip install -e ./cli
slopstopper run hygiene:docs-size

CLI surface

slopstopper run <category>:<check>             # run a check, write reports under .ss/reports/
slopstopper emit <c>:<n> --target {pr-comment,issue}
slopstopper discover <check> --event <e>       # resolve pages.<check> from sitemap / changed / list
slopstopper config get <key> [<default>]       # read .slopstopper.yml
slopstopper templates {list, path <n>, eject <n>}   # inspect / customise bundled templates
slopstopper serve                              # bundled static server (auto-detects worker/headers.json)
slopstopper checks list [--category <c>] [--json]
slopstopper doctor                             # verify external tools are installed
slopstopper --quiet …                          # suppress decorative output (CI logs)

slopstopper with no args prints a banner of the commands above plus a quick-start block.

Run the tests

# From the repo root:
task -t cli/Taskfile.yml test

# Or from cli/:
task test

# Filter to a single test:
task -t cli/Taskfile.yml test -- -k docs_size

The same task test target is what CI runs (see .github/workflows/ci-cli.yml), so local and CI invocations stay in sync. The Taskfile creates and reuses a project-local venv at cli/.venv/ (gitignored) so it doesn't conflict with system Python under PEP 668.

This workflow is slopstopper-internal — it is not part of the distributed ss-*-check.yml suite and is never seeded into adopter repos.

Layout

  • slopstopper/cli.py — argparse dispatcher + bare-invocation banner
  • slopstopper/output.py — shared formatters (running / success / warn / error / footer / --quiet)
  • slopstopper/config.py.slopstopper.yml reader (stdlib-only YAML subset)
  • slopstopper/templates.py — bundled-template resolver + templates {list, path, eject} API
  • slopstopper/emit.pygh CLI wrapper for PR comment + main-branch issue emission
  • slopstopper/discovery.py — pages-to-audit resolver for reliability checks
  • slopstopper/checks/ — one module per check; registry in __init__.py
  • slopstopper/data/ — bundled Playwright specs, lighthouserc dev/prod, server.js

Adding a check

  1. Add slopstopper/checks/<name>.py exposing run(args) -> int. Start the module docstring with a one-line summary (slopstopper checks list reads it).
  2. Register it in slopstopper/checks/__init__.py's REGISTRY dict.
  3. Write the report to .ss/reports/<category>/<name>-report.md in the CWD.
  4. Use from slopstopper import output for any user-facing print calls so --quiet and the consistent visual language come for free.
  5. If the check should be postable to a PR or issue, declare a META dict in the module — emit.py reads it.

Skills for agents

The trio under .claude/skills/slopstopper-{install,update,triage}/SKILL.md is the long-form playbook for Claude Code agents working with this CLI. Update them when you add or rename a check, env var, or task ss:* target.

Acknowledgements

slopstopper-cli ships with no third-party Python dependencies — every check invokes its tool via subprocess only. Full credit, licences and upstream links for every tool we drive live in ATTRIBUTIONS.md.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slopstopper_cli-0.14.0.tar.gz (140.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slopstopper_cli-0.14.0-py3-none-any.whl (120.8 kB view details)

Uploaded Python 3

File details

Details for the file slopstopper_cli-0.14.0.tar.gz.

File metadata

  • Download URL: slopstopper_cli-0.14.0.tar.gz
  • Upload date:
  • Size: 140.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for slopstopper_cli-0.14.0.tar.gz
Algorithm Hash digest
SHA256 c15b3f74ec20d4a26c83a132cae4975909987d864d78a3f1b2c7b90077d09d43
MD5 caaf0fdc44ac584c73b1502d9563daf5
BLAKE2b-256 b13b299b5c7221491ca6ca9af77215eb9cf811d6b247fe4670d16fc85d5ac433

See more details on using hashes here.

Provenance

The following attestation bundles were made for slopstopper_cli-0.14.0.tar.gz:

Publisher: ss-release.yml on hungovercoders/slopstopper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slopstopper_cli-0.14.0-py3-none-any.whl.

File metadata

File hashes

Hashes for slopstopper_cli-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2b98a0e7b21dc59c3b3e63961398d81995e86accff8508ef6a2f26ca17415be
MD5 d16970f896c781dfb332af1b28f672b1
BLAKE2b-256 ec76868c6264c301688f581f37d10f89ebfb9d90d6db246b9419d963082d76c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for slopstopper_cli-0.14.0-py3-none-any.whl:

Publisher: ss-release.yml on hungovercoders/slopstopper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page