Portable code-quality suite — security, hygiene, reliability.
Project description
slopstopper-cli
The SlopStopper quality suite, packaged as a pipx-installable CLI.
Status: Beta. Every check in the public catalogue runs through this package. The CI workflows under
.github/workflows/ss-*.ymlinstallslopstopper-cliand callslopstopper run <category>:<check>— same code path you use locally.
Install
End-user (most adopters):
pipx install slopstopper-cli
slopstopper --version
slopstopper checks list
slopstopper doctor
Published to PyPI on every release tag.
pipx upgrade slopstopper-clipulls the latest. Each release is also attached to the latest GitHub Release with a Sigstore build-provenance attestation — verify withgh attestation verify <wheel> --owner hungovercoders.
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 bannerslopstopper/output.py— shared formatters (running / success / warn / error / footer /--quiet)slopstopper/config.py—.slopstopper.ymlreader (stdlib-only YAML subset)slopstopper/templates.py— bundled-template resolver +templates {list, path, eject}APIslopstopper/emit.py—ghCLI wrapper for PR comment + main-branch issue emissionslopstopper/discovery.py— pages-to-audit resolver for reliability checksslopstopper/checks/— one module per check; registry in__init__.pyslopstopper/data/— bundled Playwright specs, lighthouserc dev/prod, server.js
Adding a check
- Add
slopstopper/checks/<name>.pyexposingrun(args) -> int. Start the module docstring with a one-line summary (slopstopper checks listreads it). - Register it in
slopstopper/checks/__init__.py'sREGISTRYdict. - Write the report to
.ss/reports/<category>/<name>-report.mdin the CWD. - Use
from slopstopper import outputfor any user-facing print calls so--quietand the consistent visual language come for free. - If the check should be postable to a PR or issue, declare a
METAdict in the module —emit.pyreads 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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slopstopper_cli-0.5.0.tar.gz.
File metadata
- Download URL: slopstopper_cli-0.5.0.tar.gz
- Upload date:
- Size: 101.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ba5c61c161d17c8bb13497119c480e97920fd552aaec487d249da1ad9e6b074
|
|
| MD5 |
9bf50457c3b355a641984619fcd14b5e
|
|
| BLAKE2b-256 |
868e9a99071827d8dd9d4186c9018461dfc00dc4bec98a67011b352bff91bfb4
|
Provenance
The following attestation bundles were made for slopstopper_cli-0.5.0.tar.gz:
Publisher:
ss-release.yml on hungovercoders/slopstopper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slopstopper_cli-0.5.0.tar.gz -
Subject digest:
8ba5c61c161d17c8bb13497119c480e97920fd552aaec487d249da1ad9e6b074 - Sigstore transparency entry: 1817985389
- Sigstore integration time:
-
Permalink:
hungovercoders/slopstopper@bb5fd5843abf77c8dae2ffee9bf86c4b1c6b31d8 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/hungovercoders
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ss-release.yml@bb5fd5843abf77c8dae2ffee9bf86c4b1c6b31d8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file slopstopper_cli-0.5.0-py3-none-any.whl.
File metadata
- Download URL: slopstopper_cli-0.5.0-py3-none-any.whl
- Upload date:
- Size: 88.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5564ea48191ce037938117dea50c2d62c2dd43a4ef498b2430b1c0857419d761
|
|
| MD5 |
9bb36c3b1444203eabc72ace959ebc0f
|
|
| BLAKE2b-256 |
124ed94366dde0e066042b3539b86abbeb63f8b2f3a9ca2d7fd7d85974aec272
|
Provenance
The following attestation bundles were made for slopstopper_cli-0.5.0-py3-none-any.whl:
Publisher:
ss-release.yml on hungovercoders/slopstopper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slopstopper_cli-0.5.0-py3-none-any.whl -
Subject digest:
5564ea48191ce037938117dea50c2d62c2dd43a4ef498b2430b1c0857419d761 - Sigstore transparency entry: 1817985582
- Sigstore integration time:
-
Permalink:
hungovercoders/slopstopper@bb5fd5843abf77c8dae2ffee9bf86c4b1c6b31d8 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/hungovercoders
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ss-release.yml@bb5fd5843abf77c8dae2ffee9bf86c4b1c6b31d8 -
Trigger Event:
push
-
Statement type: