Releases: koopatroopa/slopscore
Releases · koopatroopa/slopscore
slopscore 0.1.1
Added
- Claude Code plugin (
/plugin marketplace add koopatroopa/slopscore): a
post-commit hook scores every commit the agent makes and lays the
evidence before the user - you decide what gets cleaned - and
/slopscore:cleanruns the consented remediation loop: fix the
evidence, amend, re-score until it passes. Advisory only;
cross-platform (the hook is the CLI entry point, no shell involved). slopscore hook claude-commit: the plugin's hook as a CLI subcommand,
honouring the repo'sslopscore.*git config like the git hooks do.
slopscore 0.1.0
Catch the slop before it ships. slopscore scores commits, pushes and PRs 0-100 for AI residue - leftover attribution trailers, # ... rest of the code stubs, review-bot stamps, em-dash and emoji texture - with evidence for every finding.
It's built self-facing: you run it on your own work, never to accuse anyone else. Validated against nearly 5,000 real commits and PR bodies - zero false flags on 2,300+ pre-2022 human records, 99.9% of attributed-AI records caught. A held-out set of 24 pre-2020 human PRs must score LOW forever; CI enforces it.
Get started
pip install slopscore
slopscore install-hooks # a score on every commit and pushOr gate a PR with the Action (report-only by default):
- uses: koopatroopa/slopscore@v0
with: { fail-on-flag: "false" }In the box
- 14 deterministic signals over prose and code - heuristic-only, no LLM, no network, no telemetry. Folklore signals (em-dash, emoji, curly quotes) colour the score but can never flag on their own.
- Attribution detection across the whole family: co-author and generated-with trailers, bot identities, and the stamps AI review bots leave (CodeRabbit, Sourcery, aider).
- CLI for PR JSON, raw text, files and diffs, with JSON output and per-signal TOML config.
- Git hooks (advisory by default, one git config to make them block), pre-commit framework ids, and this GitHub Action.
- Reports with a band-coloured badge,
path:lineevidence, and a footer that always tells you the current blocking state.
Full detail in the CHANGELOG.