AI Slop Code Risk Monitor

github-linguist/linguist

SlopCodeMonitor badge for github-linguist/linguist Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

2.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for github-linguist/linguist, a Ruby project with 13,759 GitHub stars. SynthScan examined 217,219 lines of code across 590 source files, recording 527 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 2.9 (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.

2.9
Adjusted Signal
2.9
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
13.8K
Stars
Ruby
Language
217.2K
Lines of Code
590
Files
527
Pattern Hits
2026-10-31
Scan Date
0.01
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 10.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.4/100 · LOW

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

Agent Over-Engineering Ratio 2.0/100 · LOW

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

PR Review Velocity Impact 14.3/100 · LOW

Which changes need focused human review? 527 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 5HIGH 1MEDIUM 46LOW 475

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 527 distinct pattern matches across 16 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 Block435 hits · 388 pts
SeverityFileLineSnippetContext
LOWtest/test_repository.rb41 new_repo = Linguist::Repository.incremental(source_repository, master_oid, old_commit, old_repo.cache)COMMENT
LOWext/linguist/lex.linguist_yy.h1#ifndef linguist_yyHEADER_HCOMMENT
LOWext/linguist/lex.linguist_yy.h21#elseCOMMENT
LOWext/linguist/lex.linguist_yy.h41#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h61#ifdef yy_load_buffer_stateCOMMENT
LOWext/linguist/lex.linguist_yy.h81#elseCOMMENT
LOWext/linguist/lex.linguist_yy.h101#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h121#ifdef yyget_debugCOMMENT
LOWext/linguist/lex.linguist_yy.h141#elseCOMMENT
LOWext/linguist/lex.linguist_yy.h161#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h181#ifdef yyget_linenoCOMMENT
LOWext/linguist/lex.linguist_yy.h201#elseCOMMENT
LOWext/linguist/lex.linguist_yy.h261typedef uint32_t flex_uint32_t;COMMENT
LOWext/linguist/lex.linguist_yy.h281#define INT8_MAX (127)COMMENT
LOWext/linguist/lex.linguist_yy.h301#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h321typedef void* yyscan_t;COMMENT
LOWext/linguist/lex.linguist_yy.h341 */COMMENT
LOWext/linguist/lex.linguist_yy.h421void *yyalloc ( yy_size_t , yyscan_t yyscanner );COMMENT
LOWext/linguist/lex.linguist_yy.h501#ifndef yytext_ptrCOMMENT
LOWext/linguist/lex.linguist_yy.h541#undef YY_NEW_FILECOMMENT
LOWext/linguist/lex.linguist_yy.h561#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h581#undef yypush_buffer_stateCOMMENT
LOWext/linguist/lex.linguist_yy.h601#ifndef linguist_yylex_destroy_ALREADY_DEFINEDCOMMENT
LOWext/linguist/lex.linguist_yy.h621#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h641#undef yyget_columnCOMMENT
LOWext/linguist/lex.linguist_yy.h661#ifndef linguist_yyalloc_ALREADY_DEFINEDCOMMENT
LOWext/linguist/lex.linguist_yy.h681#endifCOMMENT
LOWext/linguist/lex.linguist_yy.h701#line 702 "lex.linguist_yy.h"COMMENT
LOWext/linguist/lex.linguist_yy.c1COMMENT
LOWext/linguist/lex.linguist_yy.c21COMMENT
LOWext/linguist/lex.linguist_yy.c41#define linguist_yy_scan_bytes_ALREADY_DEFINEDCOMMENT
LOWext/linguist/lex.linguist_yy.c61#define yy_load_buffer_state linguist_yy_load_buffer_stateCOMMENT
LOWext/linguist/lex.linguist_yy.c81COMMENT
LOWext/linguist/lex.linguist_yy.c101#define linguist_yylex_init_ALREADY_DEFINEDCOMMENT
LOWext/linguist/lex.linguist_yy.c121#define yyget_debug linguist_yyget_debugCOMMENT
LOWext/linguist/lex.linguist_yy.c141COMMENT
LOWext/linguist/lex.linguist_yy.c161#define linguist_yyset_out_ALREADY_DEFINEDCOMMENT
LOWext/linguist/lex.linguist_yy.c181#define yyget_lineno linguist_yyget_linenoCOMMENT
LOWext/linguist/lex.linguist_yy.c201COMMENT
LOWext/linguist/lex.linguist_yy.c261typedef short int flex_int16_t;COMMENT
LOWext/linguist/lex.linguist_yy.c281#define INT16_MAX (32767)COMMENT
LOWext/linguist/lex.linguist_yy.c321#define YY_SC_TO_UI(c) ((YY_CHAR) (c))COMMENT
LOWext/linguist/lex.linguist_yy.c361 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.COMMENT
LOWsamples/Rez/Rezilla_DITL.r1// ===========================================================================COMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt1# This file was autogenerated by uv via the following command:COMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt21colorama==0.4.6COMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt41 # torchCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt61jinja2==3.1.6COMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt81 # via torchCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt101 # scikit-learnCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt121 # via diffusersCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt141 # via pyside6COMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt161 # diffusersCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt181 # librosaCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt201 # viaCOMMENT
LOW…mples/Pip Requirements/filenames/requirements.lock.txt221 # chatterbox-ttsCOMMENT
LOWsamples/C++/json_writer.cpp21NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BECOMMENT
LOWsamples/C++/protocol-buffer.pb.h1// Generated by the protocol buffer compiler. DO NOT EDIT!COMMENT
LOWsamples/C++/v8.h1// Copyright 2011 the V8 project authors. All rights reserved.COMMENT
LOWsamples/C++/v8.h21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOTCOMMENT
375 more matches not shown…
Self-Referential Comments24 hits · 71 pts
SeverityFileLineSnippetContext
MEDIUMtest/test_cli_integration.rb27 # Create a test file with a non-Ruby extension but Ruby contentCOMMENT
MEDIUMtest/test_cli_integration.rb46 # Create a normal Ruby fileCOMMENT
MEDIUMtest/test_cli_integration.rb92 # Create a simple test fileCOMMENT
MEDIUMtest/test_cli_integration.rb117 # Create a more complex repository structureCOMMENT
MEDIUMtest/test_basic_instrumenter.rb99 # This file is overridden by .gitattributes to be detectable and language MarkdownCOMMENT
MEDIUMtest/test_repository.rb251 # Create a minimal git bomb in a temp directoryCOMMENT
MEDIUMsamples/Python/django-models-base.py41 # Create the class.COMMENT
MEDIUMsamples/Ruby/sinatra.rb1094 # Define a custom error handler. Optionally takes either an ExceptionCOMMENT
MEDIUMsamples/Ruby/sinatra.rb1109 # Define a named template. The block must return the template source.COMMENT
MEDIUMsamples/Ruby/sinatra.rb1115 # Define the layout template. The block must return the template source.COMMENT
MEDIUMsamples/Ruby/sinatra.rb1169 # Define a before filter; runs before all requests within the sameCOMMENT
MEDIUMsamples/Ruby/sinatra.rb1176 # Define an after filter; runs after all requests within the sameCOMMENT
MEDIUMsamples/Ruby/sinatra.rb1407 # Create a new instance without middleware in front of it.COMMENT
MEDIUMsamples/Ruby/sinatra.rb1410 # Create a new instance of the class fronted by its middlewareCOMMENT
MEDIUMsamples/Ruby/sinatra.rb1753 # Create a new Sinatra application. The block is evaluated in the new app'sCOMMENT
MEDIUMsamples/Ruby/racc.rb3# This file is automatically generated by Racc 1.4.7COMMENT
MEDIUMsamples/Ruby/inflector.rb114 # Create the name of a table like Rails does for models to table names. This methodCOMMENT
MEDIUMsamples/Ruby/inflector.rb124 # Create a class name from a plural table name like Rails does for table names to models.COMMENT
MEDIUMsamples/Ruby/resque.rb233 # This method is considered part of the `stable` API.COMMENT
MEDIUMsamples/Ruby/resque.rb246 # This method is considered part of the `stable` API.COMMENT
MEDIUMsamples/Ruby/resque.rb289 # This method is considered part of the `stable` API.COMMENT
MEDIUMsamples/Ruby/resque.rb315 # This method is considered part of the `stable` API.COMMENT
MEDIUMlib/linguist/generated.rb705 # # This file is automatically generated by Racc x.y.zCOMMENT
MEDIUMlib/linguist/generated.rb712 return lines[2].start_with?("# This file is automatically generated by Racc")CODE
Decorative Section Separators20 hits · 66 pts
SeverityFileLineSnippetContext
MEDIUMsamples/TypeScript/demo.ts25// ═══════════════════════════════════════════════════════════════════COMMENT
MEDIUMsamples/TypeScript/demo.ts27// ═══════════════════════════════════════════════════════════════════COMMENT
MEDIUMsamples/TypeScript/demo.ts38// ═══════════════════════════════════════════════════════════════════COMMENT
MEDIUMsamples/TypeScript/demo.ts40// ═══════════════════════════════════════════════════════════════════COMMENT
MEDIUMsamples/TypeScript/demo.ts77// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts79// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts94// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts96// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts111// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts113// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts133// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/TypeScript/demo.ts135// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡samples/TypeScript/demo.ts146// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡samples/TypeScript/demo.ts148// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡samples/TypeScript/demo.ts156// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡samples/TypeScript/demo.ts158// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsamples/Raku/Simple.pm1# ----------------------COMMENT
MEDIUMsamples/Raku/Simple.pm3# ----------------------COMMENT
MEDIUMsamples/C/sgd_fast.c725 * # ----------------------------------------COMMENT
MEDIUMsamples/C/sgd_fast.c941 * # ----------------------------------------COMMENT
Hallucination Indicators5 hits · 50 pts
SeverityFileLineSnippetContext
CRITICALsamples/Java/JFlexLexer.java257 zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer);CODE
CRITICALsamples/Java/gen-java-linguist-thrift.java114 org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(PullRequest.class, metaDataMap);CODE
CRITICALsamples/Java/gen-java-linguist-thrift.java334 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);CODE
CRITICALsamples/Java/gen-java-linguist-thrift.java338 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);CODE
CRITICALsamples/Java/ProtocolBuffer.java508 new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {CODE
Hyper-Verbose Identifiers15 hits · 17 pts
SeverityFileLineSnippetContext
LOWtest/test_generated.rb16 def generated_without_loading_data(blob, negate = false)CODE
LOW⚡test/test_generated.rb35 def generated_fixture_without_loading_data(name, negate = false)CODE
LOW⚡test/test_generated.rb39 def generated_fixture_loading_data(name, negate = false)CODE
LOW⚡test/test_generated.rb43 def generated_sample_without_loading_data(name, negate = false)CODE
LOW⚡test/test_generated.rb47 def generated_sample_loading_data(name, negate = false)CODE
LOWsamples/Python/django-models-base.py237 def make_foreign_order_accessors(field, model, cls):CODE
LOWsamples/Python/django-models-base.py621 def _get_next_or_previous_in_order(self, is_next):CODE
LOWsamples/PHP/Application.php879 protected function getDefaultInputDefinition()CODE
LOWsamples/PHP/Application.php974 private function getAbbreviationSuggestions($abbrevs)CODE
LOWsamples/JavaScript/ccalc-parse.js1072 function locateNearestErrorRecoveryRule(state) {CODE
LOWsamples/JavaScript/jquery-1.7.2.js7034function addToPrefiltersOrTransports( structure ) {CODE
LOWsamples/JavaScript/jquery-1.7.2.js7070function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,CODE
LOWsamples/JavaScript/jquery-1.6.1.js6643function addToPrefiltersOrTransports( structure ) {CODE
LOWsamples/JavaScript/jquery-1.6.1.js6679function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,CODE
LOWsamples/JavaScript/http.js1644 function serverSocketCloseListener() {CODE
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMsamples/JavaScript/jquery-1.7.2.js9393// AMD modules. A named AMD is safest and most robust way to register.COMMENT
MEDIUMsamples/Ruby/formula.rb241 # libraries before trying to utilize Frameworks, many of which will be fromCOMMENT
LOWsamples/Ruby/formula.rb321 # If an instance of Formula is passed, just return itCOMMENT
Unused Imports7 hits · 7 pts
SeverityFileLineSnippetContext
LOWsamples/Python/gen-py-linguist-thrift.py9CODE
LOWsamples/Python/gen-py-linguist-thrift.py9CODE
LOWsamples/Python/gen-py-linguist-thrift.py9CODE
LOWsamples/Python/gen-py-linguist-thrift.py12CODE
LOWsamples/Python/django-models-base.py1CODE
LOWsamples/Python/django-models-base.py8CODE
LOWsamples/Python/protocol_buffer_pb2.py7CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsamples/Python/django-models-base.py366except AttributeError:CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsamples/Rust/task.rs403 * # Return valueCOMMENT
LOWlib/linguist/classifier.rb49 # Set hash to autoincremented index valueCOMMENT
LOWlib/linguist/strategy/modeline.rb60 # Check if specific Vim version(s) are requested (won't work in vi/ex)COMMENT
Slop Phrases3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsamples/Mercury/options.m3504 % don't forget to update the user_guide.texiCODE
LOWsamples/Objective-C/ASIHTTPRequest.m2004// If you do this, don't forget to call [super requestFinished] to let the queue / delegate know we're doneCOMMENT
LOWsamples/Objective-C/ASIHTTPRequest.m2071// If you do this, don't forget to call [super failWithError:] to let the queue / delegate know we're doneCOMMENT
Deep Nesting4 hits · 4 pts
SeverityFileLineSnippetContext
LOWsamples/Python/django-models-base.py34CODE
LOWsamples/Python/django-models-base.py280CODE
LOWsamples/Python/django-models-base.py482CODE
LOWsamples/Python/django-models-base.py665CODE
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWtest/test_repository.rb255 system("git", "-C", dir, "config", "user.email", "test@test.com")CODE
LOWsamples/SQL/db.sql23('Welcome', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum, felis ac pellentesque feugiat, maCODE
LOWsamples/SQL/db.sql23('Welcome', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum, felis ac pellentesque feugiat, maCODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsamples/Raku/Win32.pm142 # TODO: implement _getdcwd call ( Windows maintains separate CWD for each volume )COMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsamples/Python/tornado-httpserver.py60 def handle_request(request):CODE
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsamples/Python/tornado-httpserver.py422 except Exception:CODE
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsamples/Python/gen-py-linguist-thrift.py72CODE