AI Slop Code RIsk Monitor

coreutils/coreutils

Public mirror. Pull requests and Issues accepted

7.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for coreutils/coreutils, a C project with 5,324 GitHub stars. SynthScan examined 156,220 lines of code across 957 source files, recording 990 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 7.7 (Moderate 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.

7.7
Adjusted Signal
7.7
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
5.3K
Stars
C
Language
156.2K
Lines of Code
957
Files
990
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 28.8/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 4.3/100 · LOW

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

PR Review Velocity Impact 31.1/100 · MEDIUM

Which changes need focused human review? 990 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 85LOW 904

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 990 distinct pattern matches across 6 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 Block896 hits · 896 pts
SeverityFileLineSnippetContext
LOWinit.cfg1# This file is sourced by init.sh, *before* its initialization.COMMENT
LOWinit.cfg301#COMMENT
LOWbuild-aux/gen-lists-of-programs.sh1#!/bin/shCOMMENT
LOWbuild-aux/gen-single-binary.sh1#!/bin/shCOMMENT
LOWtests/CuSkip.pm1package CuSkip;COMMENT
LOWtests/Coreutils.pm1package Coreutils;COMMENT
LOWtests/Coreutils.pm41# Otherwise, a bad shell might be used (e.g. command.com) and manyCOMMENT
LOWtests/Coreutils.pm61# ================COMMENT
LOWtests/Coreutils.pm81# Transform actual stderr output before comparing it against expected.COMMENT
LOWtests/CuTmpdir.pm1package CuTmpdir;COMMENT
LOWtests/tee/append.sh1#!/bin/shCOMMENT
LOWtests/tee/write-eagain.sh1#!/bin/shCOMMENT
LOWtests/tee/short-write.sh1#!/bin/shCOMMENT
LOWtests/tee/tee.sh1#!/bin/shCOMMENT
LOWtests/split/line-bytes.sh1#!/bin/shCOMMENT
LOWtests/split/lines.sh1#!/bin/shCOMMENT
LOWtests/split/fail.sh1#!/bin/shCOMMENT
LOWtests/split/filter.sh1#!/bin/shCOMMENT
LOWtests/split/b-chunk.sh1#!/bin/shCOMMENT
LOWtests/split/non-utf8.sh1#!/bin/shCOMMENT
LOWtests/split/numeric.sh1#!/bin/shCOMMENT
LOWtests/split/additional-suffix.sh1#!/bin/shCOMMENT
LOWtests/split/guard-input.sh1#!/bin/shCOMMENT
LOWtests/split/suffix-length.sh1#!/bin/shCOMMENT
LOWtests/split/split-io-err.sh1#!/bin/shCOMMENT
LOWtests/split/l-chunk-root.sh1#!/bin/shCOMMENT
LOWtests/split/r-chunk.sh1#!/bin/shCOMMENT
LOWtests/split/l-chunk.sh1#!/bin/shCOMMENT
LOWtests/split/suffix-auto-length.sh1#!/bin/shCOMMENT
LOWtests/split/record-sep.sh1#!/bin/shCOMMENT
LOWtests/cat/cat-E.sh1#!/bin/shCOMMENT
LOWtests/cat/cat-distinct-err.sh1#!/bin/shCOMMENT
LOWtests/cat/cat-proc.sh1#!/bin/shCOMMENT
LOWtests/cat/cat-buf.sh1#!/bin/shCOMMENT
LOWtests/cat/splice.sh1#!/bin/shCOMMENT
LOWtests/cat/cat-self.sh1#!/bin/shCOMMENT
LOWtests/misc/pathchk.sh1#!/bin/shCOMMENT
LOWtests/misc/kill.sh1#!/bin/shCOMMENT
LOWtests/misc/option-aliases.sh1#!/bin/shCOMMENT
LOWtests/misc/close-stdin.sh1#!/bin/shCOMMENT
LOWtests/misc/tty-quoting.sh1#!/bin/shCOMMENT
LOWtests/misc/tsort.pl1#!/usr/bin/perlCOMMENT
LOWtests/misc/sleep.sh1#!/bin/shCOMMENT
LOWtests/misc/mknod.sh1#!/bin/shCOMMENT
LOWtests/misc/realpath.sh1#!/bin/shCOMMENT
LOWtests/misc/dirname.pl1#!/usr/bin/perlCOMMENT
LOWtests/misc/stdbuf.sh1#!/bin/shCOMMENT
LOWtests/misc/stdbuf.sh101# early), if head -n1 read stdin char by char. Note uniq | head -c2 doesn'tCOMMENT
LOWtests/misc/tty-eof.pl1#!/usr/bin/perlCOMMENT
LOWtests/misc/false-status.sh1#!/bin/shCOMMENT
LOWtests/misc/traversal-missing.sh1#!/bin/shCOMMENT
LOWtests/misc/exec-bad-unicode.sh1#!/bin/shCOMMENT
LOWtests/misc/dircolors.pl1#!/usr/bin/perlCOMMENT
LOWtests/misc/no-fork.sh1#!/bin/shCOMMENT
LOWtests/misc/write-errors.sh1#!/bin/shCOMMENT
LOWtests/misc/invalid-opt.pl1#!/usr/bin/perlCOMMENT
LOWtests/misc/usage_vs_refs.sh1#!/bin/shCOMMENT
LOWtests/misc/responsive.sh1#!/bin/shCOMMENT
LOWtests/misc/uname-labeled.sh1#!/bin/shCOMMENT
LOWtests/misc/echo.sh1#!/bin/shCOMMENT
836 more matches not shown…
Self-Referential Comments45 hits · 147 pts
SeverityFileLineSnippetContext
MEDIUMinit.cfg1# This file is sourced by init.sh, *before* its initialization.COMMENT
MEDIUMtests/split/split-io-err.sh25# Create the expected error messageCOMMENT
MEDIUMtests/split/l-chunk-root.sh26# Create a file system to provide an isolated $TMPDIRCOMMENT
MEDIUMtests/misc/exec-bad-unicode.sh33# Create a program with invalid Unicode in its name.COMMENT
MEDIUMtests/misc/selinux.sh26# Create a regular file, dir, fifo.COMMENT
MEDIUMtests/runcon/runcon-compute.sh24# Create an executable that's sure to failCOMMENT
MEDIUMtests/truncate/truncate-owned-by-other.sh24# Create a file owned by root, and writable by $NON_ROOT_USERNAME.COMMENT
MEDIUMtests/du/inodes.sh50# Create a directory and summarize: 3 inodes.COMMENT
MEDIUMtests/du/2g.sh24# Creating a 2GB file counts as 'very expensive'.COMMENT
MEDIUMtests/df/problematic-chars.sh33# Create a file system, then mount it.COMMENT
MEDIUMtests/df/problematic-chars.sh54 # Create a non UTF8 mount pointCOMMENT
MEDIUMtests/csplit/csplit-io-err.sh25# Create the expected error messageCOMMENT
MEDIUMtests/touch/now-owned-by-other.sh23# Create a file owned by root, and writable by $NON_ROOT_USERNAME.COMMENT
MEDIUMtests/factor/create-test.sh2# Create the factor test scripts.COMMENT
MEDIUMtests/factor/create-test.sh93# Create the test script from the template for this testCOMMENT
MEDIUMtests/tail/big-4gb.sh24# Create a file of size exactly 4GB (2^32) with 8 bytesCOMMENT
MEDIUMtests/mktemp/mktemp.pl77 # Create a temporary directory.COMMENT
MEDIUMtests/mkdir/parents.sh32# Create an existing directory.COMMENT
MEDIUMtests/shred/shred-exact.sh39# Create a 1MiB file as we'll probably not be using blocks larger than thatCOMMENT
MEDIUMtests/mv/symlink-onto-hardlink-to-self.sh25# Create a file f, and a symlink s1 to that file.COMMENT
MEDIUMtests/id/zero.sh33# Create a nice list of users.COMMENT
MEDIUM⚡tests/ln/hard-to-sym.sh58# Create a hard link to a dangling symlink.COMMENT
MEDIUM⚡tests/ln/hard-to-sym.sh68# Create a hard link to a symlink to a directory.COMMENT
MEDIUM⚡tests/ln/misc.sh28# Create a simple symlink with both source and destination filesCOMMENT
MEDIUM⚡tests/ln/misc.sh36# Create a symlink with source file and explicit destination directory/file.COMMENT
MEDIUM⚡tests/ln/misc.sh44# Create a symlink with source file and destination directory.COMMENT
MEDIUM⚡tests/ln/misc.sh72# Create a symlink with source file and no explicit directoryCOMMENT
MEDIUM⚡tests/ln/misc.sh80# Create a symlink with source file and destination symlink-to-directory.COMMENT
MEDIUM⚡tests/ln/misc.sh89# Create a symlink with source file and destination symlink-to-directory.COMMENT
MEDIUMtests/ls/getxattr-speedup.sh24# Create a few files:COMMENT
MEDIUMtests/ls/non-utf8-hidden.sh26# Create a hidden file with valid UTF-8COMMENT
MEDIUMtests/ls/non-utf8-hidden.sh29# Create a hidden file with invalid UTF-8 (without trailing newline)COMMENT
MEDIUMtests/ls/ls-time.sh65# Create a link, updating c's ctime.COMMENT
MEDIUMtests/cp/sparse.sh23# Create a sparse file.COMMENT
MEDIUMtests/cp/sparse-extents-2.sh38 # Create an ext4 loopback file systemCOMMENT
MEDIUMtests/cp/sparse-perf.sh25# Create a sparse file on another partition to avoid reflinkingCOMMENT
MEDIUMtests/cp/sparse-perf.sh43# Create a large-non-sparse-but-compressible fileCOMMENT
MEDIUMtests/cp/sparse-perf.sh54# Create a large-but-sparse file on the current partition.COMMENT
MEDIUMtests/cp/cp-a-selinux.sh125# Create a file system, then mount it with the context=... option.COMMENT
MEDIUMtests/cp/sparse-2.sh42# Create a file starting with an "x", followed by 256K-1 0 bytes.COMMENT
MEDIUMtests/rm/deep-1.sh41# Create a directory in $t with lots of 'k' components.COMMENT
MEDIUMtests/rm/hash.sh25# Create a hierarchy with 3*26 leaf directories, each at depth 153.COMMENT
MEDIUMtests/rm/readdir-bug.sh23# Create a directory containing many files.COMMENT
MEDIUMtests/rm/read-only.sh27# Create a file system, then mount it.COMMENT
MEDIUMtests/help/help-version.sh134# Create a file in the current directory, not in $TMPDIR.COMMENT
Decorative Section Separators40 hits · 138 pts
SeverityFileLineSnippetContext
MEDIUMtests/Coreutils.pm52# ================COMMENT
MEDIUMtests/Coreutils.pm61# ================COMMENT
MEDIUMtests/misc/nohup.sh47# ----------------------COMMENT
MEDIUMtests/misc/nohup.sh60# ----------------------COMMENT
MEDIUMtests/misc/nohup.sh98# ----------------------COMMENT
MEDIUMtests/chgrp/posix-H.sh38# =========================COMMENT
MEDIUMtests/chgrp/posix-H.sh56# =========================COMMENT
MEDIUMtests/pr/pr-tests.pl35# -------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/stat/stat-birthtime.sh31# ----------------------------------------COMMENT
MEDIUM⚡tests/stat/stat-birthtime.sh33# ----------------------------------------COMMENT
MEDIUM⚡tests/stat/stat-birthtime.sh37# ----------------------------------------COMMENT
MEDIUMtests/mv/hard-3.sh45# ======================================COMMENT
MEDIUMtests/mv/hard-2.sh32# ======================================COMMENT
MEDIUMtests/mv/hard-2.sh56# ======================================COMMENT
MEDIUMtests/ln/hard-to-sym.sh23# ===================================================COMMENT
MEDIUMtests/ln/hard-to-sym.sh30# ===================================================COMMENT
MEDIUMtests/ln/hard-to-sym.sh43# ===================================================COMMENT
MEDIUM⚡tests/ln/hard-to-sym.sh57# ===================================================COMMENT
MEDIUM⚡tests/ln/hard-to-sym.sh67# ===================================================COMMENT
MEDIUMtests/ln/misc.sh126# ===================================================COMMENT
MEDIUMtests/ln/misc.sh137# ===================================================COMMENT
MEDIUMtests/ln/misc.sh143# ===================================================COMMENT
MEDIUMtests/ln/misc.sh164# ===================================================COMMENT
MEDIUM⚡tests/cp/link-preserve.sh34# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh44# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh53# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh61# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh69# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh79# --------------------------------------COMMENT
MEDIUM⚡tests/cp/link-preserve.sh89# --------------------------------------COMMENT
MEDIUMtests/cp/sparse-extents-2.sh52# =================================================COMMENT
MEDIUMtests/cp/cp-a-selinux.sh149# =====================================================COMMENT
MEDIUMtests/cp/cp-a-selinux.sh157# =====================================================COMMENT
MEDIUMtests/cp/cp-a-selinux.sh177# =====================================================COMMENT
MEDIUMtests/rm/r-root.sh120#-------------------------------------------------------------------------------COMMENT
MEDIUMtests/rm/r-root.sh198#-------------------------------------------------------------------------------COMMENT
MEDIUMtests/rm/r-root.sh230#-------------------------------------------------------------------------------COMMENT
MEDIUMtests/rm/r-root.sh239#-------------------------------------------------------------------------------COMMENT
MEDIUMtests/rm/r-root.sh273#-------------------------------------------------------------------------------COMMENT
MEDIUMtests/rm/r-root.sh305#-------------------------------------------------------------------------------COMMENT
Redundant / Tautological Comments7 hits · 10 pts
SeverityFileLineSnippetContext
LOWtests/misc/just-created.sh46 # Check if the file specified by the first argument exists.COMMENT
LOWtests/test/test-N.sh42# Set mtime to 2 days before atime: 'test -N' returns 1;COMMENT
LOWtests/stat/stat-nanoseconds.sh22# Set this to avoid problems with weird time zones.COMMENT
LOWtests/fold/fold-spaces.sh28# Check if a character is considered blank. Some systems, such as FreeBSD,COMMENT
LOWtests/mv/sticky-to-xpart.sh30# Set up to run a test where non-root user tries to move a root-ownedCOMMENT
LOWtests/cp/cp-a-selinux.sh189# Check if -a option doesn't silence --preserve=context option diagnosticsCOMMENT
LOWtests/rm/r-root.sh39# Set this to 0 if you don't have a working gdb but wouldCOMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHtests/ls/stat-free-symlinks.sh60# Check that output is colored, as requested, too.COMMENT
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtests/ls/ls-misc.pl39# If the string $S is a well-behaved file name, simply return it.COMMENT