Public mirror. Pull requests and Issues accepted
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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 950 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 40 finding(s).
Which changes need focused human review? 990 finding(s).
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.
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.
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.
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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | init.cfg | 1 | # This file is sourced by init.sh, *before* its initialization. | COMMENT |
| LOW | init.cfg | 301 | # | COMMENT |
| LOW | build-aux/gen-lists-of-programs.sh | 1 | #!/bin/sh | COMMENT |
| LOW | build-aux/gen-single-binary.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/CuSkip.pm | 1 | package CuSkip; | COMMENT |
| LOW | tests/Coreutils.pm | 1 | package Coreutils; | COMMENT |
| LOW | tests/Coreutils.pm | 41 | # Otherwise, a bad shell might be used (e.g. command.com) and many | COMMENT |
| LOW | tests/Coreutils.pm | 61 | # ================ | COMMENT |
| LOW | tests/Coreutils.pm | 81 | # Transform actual stderr output before comparing it against expected. | COMMENT |
| LOW | tests/CuTmpdir.pm | 1 | package CuTmpdir; | COMMENT |
| LOW | tests/tee/append.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/tee/write-eagain.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/tee/short-write.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/tee/tee.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/line-bytes.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/lines.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/fail.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/filter.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/b-chunk.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/non-utf8.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/numeric.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/additional-suffix.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/guard-input.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/suffix-length.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/split-io-err.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/l-chunk-root.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/r-chunk.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/l-chunk.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/suffix-auto-length.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/split/record-sep.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/cat-E.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/cat-distinct-err.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/cat-proc.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/cat-buf.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/splice.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/cat/cat-self.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/pathchk.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/kill.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/option-aliases.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/close-stdin.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/tty-quoting.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/tsort.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | tests/misc/sleep.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/mknod.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/realpath.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/dirname.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | tests/misc/stdbuf.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/stdbuf.sh | 101 | # early), if head -n1 read stdin char by char. Note uniq | head -c2 doesn't | COMMENT |
| LOW | tests/misc/tty-eof.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | tests/misc/false-status.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/traversal-missing.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/exec-bad-unicode.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/dircolors.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | tests/misc/no-fork.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/write-errors.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/invalid-opt.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | tests/misc/usage_vs_refs.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/responsive.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/uname-labeled.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/misc/echo.sh | 1 | #!/bin/sh | COMMENT |
| 836 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | init.cfg | 1 | # This file is sourced by init.sh, *before* its initialization. | COMMENT |
| MEDIUM | tests/split/split-io-err.sh | 25 | # Create the expected error message | COMMENT |
| MEDIUM | tests/split/l-chunk-root.sh | 26 | # Create a file system to provide an isolated $TMPDIR | COMMENT |
| MEDIUM | tests/misc/exec-bad-unicode.sh | 33 | # Create a program with invalid Unicode in its name. | COMMENT |
| MEDIUM | tests/misc/selinux.sh | 26 | # Create a regular file, dir, fifo. | COMMENT |
| MEDIUM | tests/runcon/runcon-compute.sh | 24 | # Create an executable that's sure to fail | COMMENT |
| MEDIUM | tests/truncate/truncate-owned-by-other.sh | 24 | # Create a file owned by root, and writable by $NON_ROOT_USERNAME. | COMMENT |
| MEDIUM | tests/du/inodes.sh | 50 | # Create a directory and summarize: 3 inodes. | COMMENT |
| MEDIUM | tests/du/2g.sh | 24 | # Creating a 2GB file counts as 'very expensive'. | COMMENT |
| MEDIUM | tests/df/problematic-chars.sh | 33 | # Create a file system, then mount it. | COMMENT |
| MEDIUM | tests/df/problematic-chars.sh | 54 | # Create a non UTF8 mount point | COMMENT |
| MEDIUM | tests/csplit/csplit-io-err.sh | 25 | # Create the expected error message | COMMENT |
| MEDIUM | tests/touch/now-owned-by-other.sh | 23 | # Create a file owned by root, and writable by $NON_ROOT_USERNAME. | COMMENT |
| MEDIUM | tests/factor/create-test.sh | 2 | # Create the factor test scripts. | COMMENT |
| MEDIUM | tests/factor/create-test.sh | 93 | # Create the test script from the template for this test | COMMENT |
| MEDIUM | tests/tail/big-4gb.sh | 24 | # Create a file of size exactly 4GB (2^32) with 8 bytes | COMMENT |
| MEDIUM | tests/mktemp/mktemp.pl | 77 | # Create a temporary directory. | COMMENT |
| MEDIUM | tests/mkdir/parents.sh | 32 | # Create an existing directory. | COMMENT |
| MEDIUM | tests/shred/shred-exact.sh | 39 | # Create a 1MiB file as we'll probably not be using blocks larger than that | COMMENT |
| MEDIUM | tests/mv/symlink-onto-hardlink-to-self.sh | 25 | # Create a file f, and a symlink s1 to that file. | COMMENT |
| MEDIUM | tests/id/zero.sh | 33 | # Create a nice list of users. | COMMENT |
| MEDIUM⚡ | tests/ln/hard-to-sym.sh | 58 | # Create a hard link to a dangling symlink. | COMMENT |
| MEDIUM⚡ | tests/ln/hard-to-sym.sh | 68 | # Create a hard link to a symlink to a directory. | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 28 | # Create a simple symlink with both source and destination files | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 36 | # Create a symlink with source file and explicit destination directory/file. | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 44 | # Create a symlink with source file and destination directory. | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 72 | # Create a symlink with source file and no explicit directory | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 80 | # Create a symlink with source file and destination symlink-to-directory. | COMMENT |
| MEDIUM⚡ | tests/ln/misc.sh | 89 | # Create a symlink with source file and destination symlink-to-directory. | COMMENT |
| MEDIUM | tests/ls/getxattr-speedup.sh | 24 | # Create a few files: | COMMENT |
| MEDIUM | tests/ls/non-utf8-hidden.sh | 26 | # Create a hidden file with valid UTF-8 | COMMENT |
| MEDIUM | tests/ls/non-utf8-hidden.sh | 29 | # Create a hidden file with invalid UTF-8 (without trailing newline) | COMMENT |
| MEDIUM | tests/ls/ls-time.sh | 65 | # Create a link, updating c's ctime. | COMMENT |
| MEDIUM | tests/cp/sparse.sh | 23 | # Create a sparse file. | COMMENT |
| MEDIUM | tests/cp/sparse-extents-2.sh | 38 | # Create an ext4 loopback file system | COMMENT |
| MEDIUM | tests/cp/sparse-perf.sh | 25 | # Create a sparse file on another partition to avoid reflinking | COMMENT |
| MEDIUM | tests/cp/sparse-perf.sh | 43 | # Create a large-non-sparse-but-compressible file | COMMENT |
| MEDIUM | tests/cp/sparse-perf.sh | 54 | # Create a large-but-sparse file on the current partition. | COMMENT |
| MEDIUM | tests/cp/cp-a-selinux.sh | 125 | # Create a file system, then mount it with the context=... option. | COMMENT |
| MEDIUM | tests/cp/sparse-2.sh | 42 | # Create a file starting with an "x", followed by 256K-1 0 bytes. | COMMENT |
| MEDIUM | tests/rm/deep-1.sh | 41 | # Create a directory in $t with lots of 'k' components. | COMMENT |
| MEDIUM | tests/rm/hash.sh | 25 | # Create a hierarchy with 3*26 leaf directories, each at depth 153. | COMMENT |
| MEDIUM | tests/rm/readdir-bug.sh | 23 | # Create a directory containing many files. | COMMENT |
| MEDIUM | tests/rm/read-only.sh | 27 | # Create a file system, then mount it. | COMMENT |
| MEDIUM | tests/help/help-version.sh | 134 | # Create a file in the current directory, not in $TMPDIR. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/Coreutils.pm | 52 | # ================ | COMMENT |
| MEDIUM | tests/Coreutils.pm | 61 | # ================ | COMMENT |
| MEDIUM | tests/misc/nohup.sh | 47 | # ---------------------- | COMMENT |
| MEDIUM | tests/misc/nohup.sh | 60 | # ---------------------- | COMMENT |
| MEDIUM | tests/misc/nohup.sh | 98 | # ---------------------- | COMMENT |
| MEDIUM | tests/chgrp/posix-H.sh | 38 | # ========================= | COMMENT |
| MEDIUM | tests/chgrp/posix-H.sh | 56 | # ========================= | COMMENT |
| MEDIUM | tests/pr/pr-tests.pl | 35 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/stat/stat-birthtime.sh | 31 | # ---------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/stat/stat-birthtime.sh | 33 | # ---------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/stat/stat-birthtime.sh | 37 | # ---------------------------------------- | COMMENT |
| MEDIUM | tests/mv/hard-3.sh | 45 | # ====================================== | COMMENT |
| MEDIUM | tests/mv/hard-2.sh | 32 | # ====================================== | COMMENT |
| MEDIUM | tests/mv/hard-2.sh | 56 | # ====================================== | COMMENT |
| MEDIUM | tests/ln/hard-to-sym.sh | 23 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/hard-to-sym.sh | 30 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/hard-to-sym.sh | 43 | # =================================================== | COMMENT |
| MEDIUM⚡ | tests/ln/hard-to-sym.sh | 57 | # =================================================== | COMMENT |
| MEDIUM⚡ | tests/ln/hard-to-sym.sh | 67 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/misc.sh | 126 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/misc.sh | 137 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/misc.sh | 143 | # =================================================== | COMMENT |
| MEDIUM | tests/ln/misc.sh | 164 | # =================================================== | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 34 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 44 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 53 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 61 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 69 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 79 | # -------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cp/link-preserve.sh | 89 | # -------------------------------------- | COMMENT |
| MEDIUM | tests/cp/sparse-extents-2.sh | 52 | # ================================================= | COMMENT |
| MEDIUM | tests/cp/cp-a-selinux.sh | 149 | # ===================================================== | COMMENT |
| MEDIUM | tests/cp/cp-a-selinux.sh | 157 | # ===================================================== | COMMENT |
| MEDIUM | tests/cp/cp-a-selinux.sh | 177 | # ===================================================== | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 120 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 198 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 230 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 239 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 273 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/rm/r-root.sh | 305 | #------------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/misc/just-created.sh | 46 | # Check if the file specified by the first argument exists. | COMMENT |
| LOW | tests/test/test-N.sh | 42 | # Set mtime to 2 days before atime: 'test -N' returns 1; | COMMENT |
| LOW | tests/stat/stat-nanoseconds.sh | 22 | # Set this to avoid problems with weird time zones. | COMMENT |
| LOW | tests/fold/fold-spaces.sh | 28 | # Check if a character is considered blank. Some systems, such as FreeBSD, | COMMENT |
| LOW | tests/mv/sticky-to-xpart.sh | 30 | # Set up to run a test where non-root user tries to move a root-owned | COMMENT |
| LOW | tests/cp/cp-a-selinux.sh | 189 | # Check if -a option doesn't silence --preserve=context option diagnostics | COMMENT |
| LOW | tests/rm/r-root.sh | 39 | # Set this to 0 if you don't have a working gdb but would | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/ls/stat-free-symlinks.sh | 60 | # Check that output is colored, as requested, too. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ls/ls-misc.pl | 39 | # If the string $S is a well-behaved file name, simply return it. | COMMENT |