Skip to content

ai-slop: 10 audit-run findings (config truncation, chunk aggregation, wrapped-quote exemption, rubric fan-out) and this repo's em-dash posture #3987

Description

@kyle-sexton

Summary

A full repo-wide run of /ai-slop:audit on 2026-09-08 (both layers: detector over 1,485 tracked markdown files, judgment rubric over all 409 instruction surfaces) surfaced ten defects in the plugin itself and one contradiction in this repository's own config. The decisions below were reached in an interview with the maintainer and are recorded in docs/topics/ai-slop-plugin-scope/PLAN.md on the branch that fixes them.

Plugin defects

Each item either misled the audit or cost a rerun. All ten are fixed in the linked pull request; the boxes track that they landed.

  • 1. SKILL.md pre-compute piped --show-config through head -8. disabled_rules and rule_allowed_paths are lines 9 and 10, so the skill's own context never showed that three rules were off in this repo.
  • 2. emit-findings.sh could not aggregate chunked detect.sh output: per-rule declined counts were overwritten by the last chunk, and a rule was reported "no result" if any single chunk had zero findings.
  • 3. The findings file's ## Surfaces dropped disabled=, the files-scanned count, and the chunk count, all of which the persist contract asks for.
  • 4. The quotation exemption was per-line. A double-quoted span wrapping across a soft line break flipped the quote pairing on the continuation line, so the plugin's own CHANGELOG produced two false rule-challenges-conclusion findings while documenting the rule.
  • 5. The default vocabulary listed the bare singular underscore, which fired the density rule on a doc about a leading-underscore naming convention (six nouns, zero verbs).
  • 6. Declined counts were one opaque total per rule (declined=2116). Split by cause: marker, quote, config.
  • 7. The rubric pass had no defined fan-out, batch size, or resumable persistence. Reading 700k words of instruction surfaces took 15 subagents and died to a rate limit with three batches lost; the skill said only "instruction surfaces always; further files as budget allows".
  • 8. load-bearing (511 uses in 271 files) and seam (1,370 uses in 321 files) dominate the rubric's jargon findings. Decision: sweep them as slop, keep a use only where the text defines the term. No allowlist key.
  • 9. Bare /ai-slop is not a command. Plugin commands are namespaced; the README now says so.
  • 10. The persist doc prescribed a shell redirect to create the self-ignore guard file, which the guardrails hook blocks. It now says to use the Write tool.

This repository's em-dash posture

.claude/ai-slop.json disabled rule-em-dash on 2026-08-19 with a volume argument (35k matching lines, "house style"). Three tracked surfaces said the opposite: the plugin's zero-tolerance default, .claude/rules/vendor-docs-are-not-style.md, and #2891.

Decision: em dashes are not house style. The rule is re-enabled, the config comment states the current rule and its reason, and the volume is a backlog worked through #2891. The curly-quote and emoji rules stay disabled because each cites a specific owner ruling. catalog.md leaves excluded_paths: 46 of its 47 em-dash lines were the catalog's own prose, not quoted examples. Vendor trees and eval fixtures stay excluded.

Measured baseline after re-enabling, from the fixed detector and emit script:

Measure Value
Files scanned 1,485
Em-dash findings 25,616 across 1,008 files
Other detector findings 3 (in order to)
Rubric findings over 409 instruction surfaces 233 in 150 files, 120 of them the two jargon words

Scope of the fixing pull request

The plugin that ships the rule is the first thing that passes it. The PR fixes the ten defects, re-enables the rule, de-slops plugins/ai-slop/ completely (58 em-dash lines plus its rubric and jargon findings), fixes the three filler hits elsewhere, and declares the cleaned paths in scripts/em-dash-purged-paths.txt so the purge gate defends them.

The remaining corpus is not in that PR. It lands as per-plugin tranches under #2891, one pull request per plugin or docs directory, because the changelog-parity gate requires a version bump per plugin touched and #2891 already rules out a big-bang rewrite.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: needs-triageDefault until a priority tier is assigned.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions