AI Slop Code Risk Monitor

tailwindlabs/tailwindcss

SlopCodeMonitor badge for tailwindlabs/tailwindcss Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A utility-first CSS framework for rapid UI development.

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for tailwindlabs/tailwindcss, a TypeScript project with 98,033 GitHub stars. SynthScan examined 178,978 lines of code across 478 source files, recording 298 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.7 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

1.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-10-19
Last Push
98.0K
Stars
TypeScript
Language
179.0K
Lines of Code
478
Files
298
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.8/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 292 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

Are imports declared and package/API names verified? 6 finding(s).

Agent Over-Engineering Ratio 1.8/100 · LOW

Are wrappers, guards, and repeated structures necessary? 67 finding(s).

PR Review Velocity Impact 8.3/100 · LOW

Which changes need focused human review? 298 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 1MEDIUM 3LOW 294

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 298 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block215 hits · 206 pts
SeverityFileLineSnippetContext
LOWcrates/ignore/src/overrides.rs21/// example, if there are one or more whitelist globs and a file path doesn'tCOMMENT
LOWcrates/ignore/src/overrides.rs81 ///COMMENT
LOWcrates/ignore/src/overrides.rs161 }COMMENT
LOWcrates/ignore/src/types.rs101/// that matched.COMMENT
LOWcrates/ignore/src/types.rs161}COMMENT
LOWcrates/ignore/src/pathutil.rs1use std::{ffi::OsStr, path::Path};COMMENT
LOWcrates/ignore/src/pathutil.rs41/// Returns true if and only if this directory entry is considered to beCOMMENT
LOWcrates/ignore/src/dir.rs1// This module provides a data structure, `Ignore`, that connects "directoryCOMMENT
LOWcrates/ignore/src/dir.rs81 /// Whether to read .gitignore files.COMMENT
LOWcrates/ignore/src/dir.rs101 // ancestors.COMMENT
LOWcrates/ignore/src/dir.rs121 /// parent directories if many paths are being searched.COMMENT
LOWcrates/ignore/src/dir.rs141 /// directory. This is only used for global gitignores or "explicit"COMMENT
LOWcrates/ignore/src/dir.rs781}COMMENT
LOWcrates/ignore/src/dir.rs961 /// Enables reading `.ignore` files.COMMENT
LOWcrates/ignore/src/dir.rs981 }COMMENT
LOWcrates/ignore/src/dir.rs1481 assert!(err.is_none());COMMENT
LOWcrates/ignore/src/lib.rs101 },COMMENT
LOWcrates/ignore/src/lib.rs181 Error::Glob { .. } => false,COMMENT
LOWcrates/ignore/src/incremental.rs21///COMMENT
LOWcrates/ignore/src/incremental.rs41///COMMENT
LOWcrates/ignore/src/incremental.rs81#[derive(Clone, Debug)]COMMENT
LOWcrates/ignore/src/incremental.rs141 /// when it is known to be outside this matcher's root. UnlikeCOMMENT
LOWcrates/ignore/src/incremental.rs161 .normalized_rootCOMMENT
LOWcrates/ignore/src/incremental.rs181 /// parent directory (`..`) component. Behavior is unspecified when theseCOMMENT
LOWcrates/ignore/src/incremental.rs501 /// Returns true only when this match corresponds to a directory *and*COMMENT
LOWcrates/ignore/src/incremental.rs521 /// the minimum depth. In this case, callers should continue looking insideCOMMENT
LOWcrates/ignore/src/gitignore.rs121COMMENT
LOWcrates/ignore/src/gitignore.rs221 ///COMMENT
LOWcrates/ignore/src/gitignore.rs301 // A leading ./ is completely superfluous. We also strip it fromCOMMENT
LOWcrates/ignore/src/gitignore.rs561 /// Toggle whether the globs should be matched case insensitively or not.COMMENT
LOWcrates/ignore/src/gitignore.rs581 /// For example, if this is set then the glob `[abc` will be treated as theCOMMENT
LOWcrates/ignore/src/default_types.rs1/// This list represents the default file types that ripgrep ships with. InCOMMENT
LOWcrates/ignore/src/walk.rs121/// DirEntryInner is the implementation of DirEntry.COMMENT
LOWcrates/ignore/src/walk.rs441///COMMENT
LOWcrates/ignore/src/walk.rs461/// * First, glob overrides are checked. If a path matches a glob override,COMMENT
LOWcrates/ignore/src/walk.rs501 /// The directory that gitignores should be interpreted relative to.COMMENT
LOWcrates/ignore/src/walk.rs641 max_filesize: self.max_filesize,COMMENT
LOWcrates/ignore/src/walk.rs661 /// the paths were added to this builder. Each matcher accepts pathsCOMMENT
LOWcrates/ignore/src/walk.rs781 /// This has lower precedence than all other sources of ignore rules.COMMENT
LOWcrates/ignore/src/walk.rs821COMMENT
LOWcrates/ignore/src/walk.rs861 self.ig_builder.types(types);COMMENT
LOWcrates/ignore/src/walk.rs921 /// Git's config file location is `$HOME/.gitconfig`. If `$HOME/.gitconfig`COMMENT
LOWcrates/ignore/src/walk.rs941 }COMMENT
LOWcrates/ignore/src/walk.rs981 ///COMMENT
LOWcrates/ignore/src/walk.rs1001 /// paths in sorted order. The compare function will be called to compareCOMMENT
LOWcrates/ignore/src/walk.rs1021 ///COMMENT
LOWcrates/ignore/src/walk.rs1041 pub fn skip_stdout(&mut self, yes: bool) -> &mut WalkBuilder {COMMENT
LOWcrates/ignore/src/walk.rs1441impl WalkParallel {COMMENT
LOWcrates/ignore/src/walk.rs1461 /// by implementing `Drop` for your builder (or for your visitor, if youCOMMENT
LOWcrates/ignore/src/walk.rs1561}COMMENT
LOWcrates/ignore/src/walk.rs1741 /// A work-stealing stack of work to do.COMMENT
LOWcrates/oxide/tests/scanner.rs61COMMENT
LOWcrates/oxide/src/glob.rs61 pattern,COMMENT
LOWcrates/oxide/src/glob.rs81/// This means, that the following command:COMMENT
LOWcrates/oxide/src/glob.rs141//COMMENT
LOWcrates/oxide/src/extractor/string_machine.rs1use crate::cursor;COMMENT
LOWcrates/oxide/src/extractor/candidate_machine.rs41 // Candidates don't start with these characters, so we can skip ahead.COMMENT
LOWcrates/oxide/src/extractor/modifier_machine.rs1use crate::cursor;COMMENT
LOWcrates/oxide/src/extractor/modifier_machine.rs41 match cursor.curr().into() {COMMENT
LOW…ates/oxide/src/extractor/arbitrary_variable_machine.rs21/// Currently parsing the data type of the arbitrary variableCOMMENT
155 more matches not shown…
Hyper-Verbose Identifiers67 hits · 65 pts
SeverityFileLineSnippetContext
LOWintegrations/utils.ts599async function overwriteVersionsInPackageJson(content: string): Promise<string> {CODE
LOWintegrations/utils.ts615function overwriteVersionsInPnpmWorkspace(content: string): string {CODE
LOWpackages/@tailwindcss-cli/src/utils/test-helpers.ts3export function normalizeWindowsSeparators(p: string) {CODE
LOW…es/@tailwindcss-cli/src/commands/canonicalize/index.ts340function createCandidateGroupResult(CODE
LOWpackages/@tailwindcss-node/src/compile.ts66async function ensureSourceDetectionRootExists(compiler: {CODE
LOWpackages/tailwindcss/src/utilities.ts2743 function resolveInterpolationModifier(modifier: CandidateModifier | null) {CODE
LOWpackages/tailwindcss/src/utilities.ts6620function alphaReplacedShadowProperties(CODE
LOWpackages/tailwindcss/src/utilities.ts6666function alphaReplacedDropShadowProperties(CODE
LOWpackages/tailwindcss/src/utilities.ts6820export function isValidFunctionalUtilityName(name: string): boolean {CODE
LOWpackages/tailwindcss/src/candidate.ts1179function recursivelyEscapeUnderscores(ast: ValueParser.ValueAstNode[]) {CODE
LOWpackages/tailwindcss/src/candidate.ts1244function decodeValidArbitraryValue(raw: string): string | null {CODE
LOWpackages/tailwindcss/src/ast.ts1428 function substituteNestingSelector(selector: string, parentSelector: string): string {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts115export function prepareDesignSystemStorage(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts142function createSignatureOptionsCache(): DesignSystem['storage'][typeof SIGNATURE_OPTIONS_KEY] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts151function createSignatureComparison(designSystem: DesignSystem) {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts183function createInternalOptionsCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts193function createCanonicalizeOptions(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts611function createCanonicalizeCandidateCache(): DesignSystem['storage'][typeof CANONICALIZE_CANDIDATE_KEY] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts687function createCanonicalizeVariantCache(): DesignSystem['storage'][typeof CANONICALIZE_VARIANT_KEY] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts728function createCanonicalizeUtilityCache(): DesignSystem['storage'][typeof CANONICALIZE_UTILITY_KEY] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts848function spacingCalcToSpacingFunction(input: string, designSystem: DesignSystem) {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts1080function substituteFunctionsInValue(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts1736function arbitraryValueToBareValueUtility(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts1762function arbitraryValueToBareValueVariant(variant: Variant): Variant | Variant[] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts1909function modernizeArbitraryValuesVariant(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2330function optimizeArbitraryValueExpressions(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2530function createUtilitySignatureCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2562function createUtilityThemeVariablesCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2585function compileUtilitySignatureAst(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2908function createStaticUtilitiesCache(): DesignSystem['storage'][typeof STATIC_UTILITIES_KEY] {CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2919function createUtilityPropertiesCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts2962function createPreComputedUtilitiesCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts3023function createVariantSignatureCache(CODE
LOWpackages/tailwindcss/src/canonicalize-candidates.ts3134function createPreComputedVariantsCache(CODE
LOW…kages/tailwindcss/src/canonicalize-calc-expressions.ts7export function canonicalizeCalcExpressions(input: string): string {CODE
LOW…kages/tailwindcss/src/canonicalize-calc-expressions.ts13export function canonicalizeCalcExpressionsAst(CODE
LOWpackages/tailwindcss/src/constant-fold-declaration.ts18export function constantFoldDeclarationAst(CODE
LOWpackages/tailwindcss/src/css-functions.ts204export function substituteFunctionsInValue(CODE
LOWpackages/tailwindcss/src/css-functions.ts245function injectFallbackForInitialFallback(ast: ValueParser.ValueAstNode[], fallback: string): void {CODE
LOWpackages/tailwindcss/src/variants.ts1006 function compareBreakpointVariants(CODE
LOWpackages/tailwindcss/src/compat/plugin-api.ts640function replaceNestedClassNameReferences(CODE
LOWpackages/tailwindcss/src/compat/theme-variants.ts4export function registerThemeVariantOverrides(config: ResolvedConfig, designSystem: DesignSystem) {CODE
LOWpackages/tailwindcss/src/compat/container.ts22export function buildCustomContainerUtilityRules(CODE
LOWpackages/tailwindcss/src/compat/apply-compat-hooks.ts229function upgradeToFullPluginSupport({CODE
LOWpackages/tailwindcss/src/utils/math-operators.ts45export function addWhitespaceAroundMathOperators(input: string) {CODE
LOW…ckages/tailwindcss/src/utils/decode-arbitrary-value.ts23function convertUnderscoresToWhitespace(input: string, skipUnderscoreToSpace = false) {CODE
LOW…ckages/tailwindcss/src/utils/decode-arbitrary-value.ts48function recursivelyDecodeArbitraryValues(ast: ValueParser.ValueAstNode[]) {CODE
LOW…es/tailwindcss/src/source-maps/visualize-source-map.ts101function buildAnnotationsFromSourceMapPoints(points: SourceMapPoint[]) {CODE
LOW…es/tailwindcss/src/source-maps/visualize-source-map.ts460function visualizeSourceRangeContinuation(CODE
LOW…es/tailwindcss/src/source-maps/visualize-source-map.ts480function visualizeGeneratedRangeContinuation(CODE
LOW…es/tailwindcss/src/source-maps/visualize-source-map.ts508function visualizeContinuationRange(range: Range, label: string, line: string, lineNumber: number) {CODE
LOWpackages/@tailwindcss-vite/src/index.ts123 function createBackCompatIdResolver(CODE
LOW…lwindcss-upgrade/src/codemods/css/migrate-preflight.ts117function substituteFunctionsInValue(CODE
LOW…pgrade/src/codemods/css/migrate-tailwind-directives.ts5export function migrateTailwindDirectives(options: { newPrefix: string | null }): Plugin {CODE
LOW…windcss-upgrade/src/codemods/config/migrate-postcss.ts148 function isTailwindCSSNestingPlugin(line: string) {CODE
LOW…windcss-upgrade/src/codemods/config/migrate-postcss.ts230 function isTailwindCSSNestingPlugin(plugin: string, options: any) {CODE
LOW…ndcss-upgrade/src/codemods/config/migrate-js-config.ts516function removeUnnecessarySpacingKeys(CODE
LOW…-upgrade/src/codemods/template/migrate-theme-to-var.ts172function substituteFunctionsInValue(CODE
LOW…rc/codemods/template/migrate-canonicalize-candidate.ts16export function migrateCanonicalizeCandidate(CODE
LOW…c/codemods/template/migrate-legacy-arbitrary-values.ts6export function migrateLegacyArbitraryValues(CODE
7 more matches not shown…
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMpackages/tailwindcss/src/utilities.test.ts31537 // This originated from a bug. Essentially in the second `--mask-right` weCOMMENT
MEDIUMpackages/tailwindcss/src/ast.ts880 // for a given rule. This also means that we can leverage CSS nestingCOMMENT
MEDIUMpackages/tailwindcss/src/canonicalize-candidates.ts2707 // Essentially normalizing the `node.value` to a canonical form.COMMENT
Fake / Example Data5 hits · 5 pts
SeverityFileLineSnippetContext
LOWpackages/tailwindcss/src/utilities.ts4102 colorUtility('placeholder', {CODE
LOWpackages/tailwindcss/src/utilities.test.ts23445test('placeholder', async () => {CODE
LOWpackages/tailwindcss/src/utilities.test.ts23593 'placeholder',CODE
LOWpackages/tailwindcss/src/variants.test.ts101test('placeholder', async () => {CODE
LOWpackages/tailwindcss/src/variants.ts701 staticVariant('placeholder', ['&::placeholder'])CODE
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/@tailwindcss-upgrade/src/utils/renderer.ts105 print()CODE
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWcrates/ignore/src/gitignore.rs222 /// NOTE: This method is more expensive than walking the directory hierarchyCOMMENT
LOWpackages/@tailwindcss-vite/src/index.ts179 // Step 1: Scan source files for candidatesCOMMENT
LOW…kages/@tailwindcss-upgrade/src/codemods/css/analyze.ts44 // Step 1: Record which `@import` rules point to which stylesheetsCOMMENT
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWpackages/tailwindcss/src/canonicalize-candidates.ts1517 // We need to check if the variable is used in the replacementCOMMENT
LOWpackages/@tailwindcss-vite/src/index.ts179 // Step 1: Scan source files for candidatesCOMMENT
LOW…kages/@tailwindcss-upgrade/src/codemods/css/analyze.ts44 // Step 1: Record which `@import` rules point to which stylesheetsCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcrates/classification-macros/src/lib.rs14/// Example usage:COMMENT