AI Slop Code RIsk Monitor

boyter/scc

Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

4.2 Low pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for boyter/scc, a Go project with 8,808 GitHub stars. SynthScan examined 87,048 lines of code across 272 source files, recording 204 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 4.2 (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.

4.2
Adjusted Signal
4.2
Raw Pattern Score
100%
Time Factor
2026-09-25
Last Push
8.8K
Stars
Go
Language
87.0K
Lines of Code
272
Files
204
Pattern Hits
2026-10-12
Scan Date
0.06
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 13.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.8/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 17.4/100 · LOW

Which changes need focused human review? 204 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 2HIGH 15MEDIUM 18LOW 169

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 204 distinct pattern matches across 11 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 Block162 hits · 162 pts
SeverityFileLineSnippetContext
LOWconfig.go481}COMMENT
LOWtest-all.sh41#if ./scc "examples/language/" --format cloc-yaml -o .tmp_scc_yaml >/dev/null && python <<EOSCOMMENT
LOWtest-all.sh61# rm -f .tmp_scc_yamlCOMMENT
LOWREADME.md1301# HELP scc_lines Number of lines.COMMENT
LOW.goreleaser.yml41COMMENT
LOWregression_test.go21// changed by the registerFlags refactor, the shared @file tokenizer and theCOMMENT
LOWregression_test.go561// TestRegressionConfigMinFlagClassifies fills a behavioural gap the existingCOMMENT
LOWcmd/badges/example.py261 # j = json.loads(content)COMMENT
LOWprocessor/counters_javascript.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_javascript.go21// And a slash that is a division, a comment, or a regular expression literalCOMMENT
LOWprocessor/counters_javascript.go61COMMENT
LOWprocessor/counters_javascript.go81// c 2.44% against a 3.61% and s 3.31% for case.COMMENT
LOWprocessor/counters_javascript.go121COMMENT
LOWprocessor/counters_javascript.go181}COMMENT
LOWprocessor/counters_fuzz_test.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/history_worktree_test.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_php.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_php.go21// counters_shared.go.COMMENT
LOWprocessor/counters_php.go61// l elseCOMMENT
LOWprocessor/counters_php.go101// phpStopTable picks the table the scan runs with. The global reads asCOMMENT
LOWprocessor/counters_php.go161COMMENT
LOWprocessor/counters_scala.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_scala.go21//COMMENT
LOWprocessor/counters_scala.go61//COMMENT
LOWprocessor/counters_scala.go181// checks anchored on their own first byte are looked for here; the rest areCOMMENT
LOWprocessor/summary_totals.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/detector_plan.go21// candidate languages and then:COMMENT
LOWprocessor/detector_plan.go41// isAnchorSkip reports whether a byte is one the line walk steps over beforeCOMMENT
LOWprocessor/detector_plan.go81// matches at the start of the text it is given, so it can be tried at a knownCOMMENT
LOWprocessor/counters_java.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_java.go61// h catchCOMMENT
LOWprocessor/counters_java.go101 return &javaStopNoComplexityCOMMENT
LOWprocessor/counters_java.go341 return index, stateCOMMENT
LOWprocessor/counters_swift.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_swift.go21// Swift also writes most of its keywords with a space and no bracket form:COMMENT
LOWprocessor/counters_swift.go61}COMMENT
LOWprocessor/counters_swift.go81// The bytes are chosen so that no check holds the anchor of another check in aCOMMENT
LOWprocessor/counters_swift.go181// swiftComplexityAtLineStart is swiftComplexityAnchored for the first byte ofCOMMENT
LOWprocessor/formatters_test.go781 Debug = falseCOMMENT
LOWprocessor/formatters_test.go1201 res := fileSummarize(inputChan)COMMENT
LOWprocessor/formatters_test.go1261# TYPE scc_code gaugeCOMMENT
LOWprocessor/counters_shared_test.go381 }COMMENT
LOWprocessor/processor.go581 // languages share extensions so we take the first registered languageCOMMENT
LOWprocessor/counters_ruby.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_ruby.go21// counters_shared.go.COMMENT
LOWprocessor/counters_ruby.go41// same flag.COMMENT
LOWprocessor/counters_ruby.go81// over 19.3MB of rails: f 1.18% against i 3.82%, o 4.40% and r 4.21% for if andCOMMENT
LOWprocessor/counters_ruby.go101// and pay the extra stops, or to prove the backwards read still cannot cross aCOMMENT
LOWprocessor/counters_ruby.go121// wants an i behind it, w an s, l an e, and = an = or a !. For any of those toCOMMENT
LOWprocessor/counters_ruby.go161COMMENT
LOWprocessor/counters_ruby.go241 return wordStartsAt(content, index, floor) && hasPrefixAt(content, index+1, floor, "& ")COMMENT
LOWprocessor/report_render.go101// - bare `--report` and the file doesn't exist: proceed.COMMENT
LOWprocessor/git_open.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_assembly.go1// SPDX-License-Identifier: MITCOMMENT
LOWprocessor/counters_assembly.go21// else, so the opener test for them is spaceOpens rather than cOpens. ReadingCOMMENT
LOWprocessor/counters_assembly.go61COMMENT
LOWprocessor/counters_assembly.go121// Where the anchor is not the first byte of the check the bytes in front of itCOMMENT
LOWprocessor/counters_assembly.go221//COMMENT
LOWprocessor/cocomo_test.go41// TestEstimateCostMonthlyWagePrecision guards the monthly-wage division: the annualCOMMENT
LOWprocessor/cognitive_nesting_test.go1// SPDX-License-Identifier: MITCOMMENT
102 more matches not shown…
Cross-Language Confusion13 hits · 92 pts
SeverityFileLineSnippetContext
HIGH⚡examples/performance_tests/create_performance_test.py55 if (o.toString().length() == word.length()) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py55 if (o.toString().length() == word.length()) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py56 bestMatch = o.toString();CODE
HIGH⚡examples/performance_tests/create_performance_test.py83 if (o.toString().length() == word.length()) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py83 if (o.toString().length() == word.length()) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py84 bestMatch = o.toString();CODE
HIGH⚡examples/performance_tests/create_performance_test.py110 for (int i = 1; i < word.length() + 1; i++) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py114 closeWords.add(sb.toString());CODE
HIGH⚡examples/performance_tests/create_performance_test.py118 for (int i = 1; i < word.length(); i++) {CODE
HIGH⚡examples/performance_tests/create_performance_test.py122 closeWords.add(sb.toString());CODE
HIGH⚡examples/performance_tests/create_performance_test.py126 closeWords.add(sb.toString());CODE
HIGHexamples/performance_tests/create_performance_test.py12 private Map<String, Integer> dictionary = null;CODE
HIGHexamples/performance_tests/create_performance_test.py31 if (word == null || word.trim().isEmpty()) {CODE
Self-Referential Comments16 hits · 62 pts
SeverityFileLineSnippetContext
MEDIUM⚡examples/performance_tests/create_folders_with_files.py15# Create a directory thats quite deep and put a 10000 files at the endCOMMENT
MEDIUM⚡examples/performance_tests/create_folders_with_files.py23# Create a directory thats quite deep and put 100 files in each folderCOMMENT
MEDIUM⚡examples/performance_tests/create_folders_with_files.py33# Create a directory that has a single level and put 10000 files in itCOMMENT
MEDIUM⚡examples/performance_tests/create_folders_with_files.py41# Create a directory that has a two levels with 10000 directories in the second with a single file in eachCOMMENT
MEDIUM⚡examples/performance_tests/create_folders_with_files.py51# Create a directory that with 10 subdirectories and 1000 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_folders_with_files.py62# Create a directory that with 20 subdirectories and 500 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_folders_with_files.py73# Create a directory that with 5 subdirectories and 2000 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_folders_with_files.py84# Create a directory that with 100 subdirectories and 100 files in eachCOMMENT
MEDIUM⚡examples/performance_tests/create_performance_test.py165# Create a directory thats quite deep and put a 10000 files at the endCOMMENT
MEDIUM⚡examples/performance_tests/create_performance_test.py173# Create a directory thats quite deep and put 100 files in each folderCOMMENT
MEDIUM⚡examples/performance_tests/create_performance_test.py183# Create a directory that has a single level and put 10000 files in itCOMMENT
MEDIUM⚡examples/performance_tests/create_performance_test.py191# Create a directory that has a two levels with 10000 directories in the second with a single file in eachCOMMENT
MEDIUM⚡examples/performance_tests/create_performance_test.py201# Create a directory that with 10 subdirectories and 1000 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_performance_test.py212# Create a directory that with 20 subdirectories and 500 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_performance_test.py223# Create a directory that with 5 subdirectories and 2000 files in eachCOMMENT
MEDIUMexamples/performance_tests/create_performance_test.py234# Create a directory that with 100 subdirectories and 100 files in eachCOMMENT
Hallucination Indicators2 hits · 25 pts
SeverityFileLineSnippetContext
CRITICALexamples/minified/jquery-3.1.1.min.js4void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"CODE
CRITICAL⚡examples/minified/app-5cddf2000f4491a89a40.js1(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(184)},function(e,t,n){CODE
Synthetic Comment Markers2 hits · 12 pts
SeverityFileLineSnippetContext
HIGHREADME.md667- < 55% (High Boilerplate): High repetition. Likely due to mandatory error handling, auto-generated code, or verbose conCODE
HIGHprocessor/processor.go708// LoadLanguageFeature will load a single feature as requested given the nameCOMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM⚡examples/minified/app-5cddf2000f4491a89a40.js1(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(184)},function(e,t,n){CODE
MEDIUM⚡examples/minified/app-5cddf2000f4491a89a40.js1(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(184)},function(e,t,n){CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWexamples/minified/jquery.dataTables.min.js41g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!thCODE
LOW⚡examples/minified/app-5cddf2000f4491a89a40.js1(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(184)},function(e,t,n){CODE
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcmd/badges/example.py10CODE
LOWexamples/oneline.py1CODE
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWprocessor/workers.go834 // If so we need to check if where we are falls into these conditionsCOMMENT
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcmd/badges/example.py100 except Exception:CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcmd/badges/example.py19CODE