Skip to content

slop

The recurring shapes of LLM-generated code — duplicates, dead bindings, guessed environments.

Updated View as Markdown

LLM slop discipline: duplicated helpers, dead exports and unread bindings, hostname-sniffed environments, careless text matching, collapsed boolean states. Born from 1,368 Bugbot findings across 182 reviewed PRs.

Severity Check Catches
info identical-helper-body-in-two-modules A function body identical (literals included) in two modules — consolidation suggestion, not a proven defect
info environment-guessed-from-hostname-substring Environment routing by hostname substring with a fixed fallback
info boolean-collapsed-into-three-state A nullish-defaulted boolean collapsed into a two-way ternary feeding a three-state domain
warning prefix-overlapping-substring-match An OR-chain of substring tests whose literals overlap by prefix
warning named-import-without-reference A named import with zero references — value, JSX, and type positions all resolve
info export-without-any-consumer A named export with no consumer found — bounded review candidate, not deletion authorization
info unread-local-binding A non-exported local binding never read in its file
info unanchored-abbreviation-regex A short case-insensitive regex tested against text without word boundaries

Blind spots (the short version)

  • Helpers: named function declarations and expressions are compared; bodies must be identically equal, and trivial bodies are ignored. Doctors and build output are exempt.
  • Dead exports: host-resolved module identities include tests, generated consumers, types, barrels, dynamic imports and declared public entries. Unresolved namespaces/configuration and undeclared external loading remain review questions.
  • Bindings: the engine resolves value, JSX and type positions. A masked whole-word guard preserves unsupported identifier uses without counting comments, strings or regex literals as usage.
  • Hostname, substring, tri-state and regex checks use shared call/value facts, so multiline formatting does not change the answer. The substring check requires the same lexical receiver; the regex must be a direct literal used as the actual .test() receiver or .match() argument.
  • URL parsing, configured-base-URL-first flows, switches, interprocedural defaults and compiled RegExp objects remain outside the supported shapes.
  • All eight checks need shared analysis; without it they narrow to silence and the report says so.

The full list prints in every report this doctor appears in.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close