AI Slop Code Risk Monitor

universal-ctags/ctags

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

A maintained ctags implementation

2.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for universal-ctags/ctags, a C project with 7,307 GitHub stars. SynthScan examined 305,389 lines of code across 2602 source files, recording 870 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 2.8 (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.8
Adjusted Signal
2.8
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
7.3K
Stars
C
Language
305.4K
Lines of Code
2.6K
Files
870
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 11.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.3/100 · LOW

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

Agent Over-Engineering Ratio 0.2/100 · LOW

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

PR Review Velocity Impact 14.2/100 · LOW

Which changes need focused human review? 870 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 8MEDIUM 13LOW 849

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 870 distinct pattern matches across 13 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 Block792 hits · 705 pts
SeverityFileLineSnippetContext
LOWappveyor.yml1version: 1.0.{build}COMMENT
LOW.readthedocs.yaml21# install:COMMENT
LOWmisc/units.py1#!/usr/bin/env python3COMMENT
LOWmisc/units.py281 subprocess.run([SHELL, script, 'shrink',COMMENT
LOWmisc/enumstr.sh1#!/bin/shCOMMENT
LOWmisc/gencxxtypedumper.sh1#!/bin/shCOMMENT
LOWmisc/news.bash1#!/bin/bashCOMMENT
LOWmisc/man-test.py1#!/usr/bin/env python3COMMENT
LOWmisc/debuggen/rust.sh1#!/bin/shCOMMENT
LOWmisc/debuggen/typescript.sh1#!/bin/shCOMMENT
LOWmisc/debuggen/libdebuggen.sh1#!/bin/shCOMMENT
LOWmisc/validators/tsc-common.sh1#!/bin/shCOMMENT
LOWmisc/validators/g++-common.sh1#!/bin/shCOMMENT
LOWmisc/validators/gfortran-common.sh1#!/bin/shCOMMENT
LOWmisc/packcc/benchmark/benchmark.sh1#!/usr/bin/env bashCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1# Uncrustify_d-0.72.0_fCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg21COMMENT
LOWmisc/packcc/tests/uncrustify.cfg41disable_processing_nl_cont = false # true/falseCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg81COMMENT
LOWmisc/packcc/tests/uncrustify.cfg141# Add or remove space after assignment '=' in enum.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg221# Add or remove space before a reference sign '&'.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg241sp_before_byref_func = ignore # ignore/add/remove/forceCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg561# Add or remove space between ')' and '{' of a function call in objectCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg721COMMENT
LOWmisc/packcc/tests/uncrustify.cfg741# Default: removeCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg841#COMMENT
LOWmisc/packcc/tests/uncrustify.cfg901COMMENT
LOWmisc/packcc/tests/uncrustify.cfg941# Default: 8COMMENT
LOWmisc/packcc/tests/uncrustify.cfg961indent_param = 0 # unsigned numberCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1041# Whether to indent the stuff after a leading class initializer colon.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg1081# for function definitions, only if indent_func_def_param is falseCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1101indent_template_param = false # true/falseCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1161indent_case_brace = 4 # numberCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1181# <=0: Subtract from brace indentCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1241# followed by a newline, the next line is indent one tab.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg1261indent_oc_block = false # true/falseCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1301# reach this minimum indent.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg1321# false: only indent 1 level, don't add the indent for the open brace, only addCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg1601COMMENT
LOWmisc/packcc/tests/uncrustify.cfg1621COMMENT
LOWmisc/packcc/tests/uncrustify.cfg1661nl_class_init_args = ignore # ignore/add/remove/forceCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2041# Whether one-line method definitions inside a class body should be treatedCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2061nl_after_func_body_one_liner = 0 # unsigned numberCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2081#COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2121COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2141nl_inside_namespace = 0 # unsigned numberCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2161COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2201# (Java) Add or remove newline after an annotation statement. Only affectsCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2281# Whether to fully split long 'for' statements at semi-colons.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2321# Use a negative number for absolute thresholds.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2341align_constr_value_gap = 0 # unsigned numberCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2361# 0: Don't align (default).COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2401# The span for aligning on '=' in assignments.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2421# 1: Align with each other, ignoring regular assignmentsCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2441# The threshold for aligning class member definitions.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2461# The gap for aligning struct/union member definitions.COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2481# 2: Align the function type name with the other type namesCOMMENT
LOWmisc/packcc/tests/uncrustify.cfg2501#COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2521# 0: Ignore (default).COMMENT
LOWmisc/packcc/tests/uncrustify.cfg2561COMMENT
732 more matches not shown…
Cross-Language Confusion (JS/TS)8 hits · 40 pts
SeverityFileLineSnippetContext
HIGHUnits/parser-javascript.r/js-signature.d/input.js37 print(c.hello());CODE
HIGHUnits/parser-javascript.r/js-naked-blocks.d/input.js10print(v1);CODE
HIGHUnits/parser-javascript.r/js-naked-blocks.d/input.js11print(v2);CODE
HIGH…-javascript.r/js-class-related-unterminated.d/input.js57 print(d.dyn1);CODE
HIGH…-javascript.r/js-class-related-unterminated.d/input.js59 print(d.dyn1);CODE
HIGH…its/parser-javascript.r/js-scope-resolution.b/input.js3 print("hello")CODE
HIGH…its/parser-javascript.r/js-scope-resolution.b/input.js10 print("extended")CODE
HIGH…its/parser-javascript.r/js-scope-resolution.b/input.js21 print("dummy")CODE
Unused Imports31 hits · 30 pts
SeverityFileLineSnippetContext
LOWdocs/_ext/ctags_optlib_highlighter.py2CODE
LOWUnits/parser-python.r/python-comments.d/input.py2CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py1CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py2CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py3CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py4CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py6CODE
LOWUnits/parser-python.r/python-dot-in-import.d/input.py7CODE
LOWUnits/parser-python.r/typehint.d/input.py1CODE
LOWUnits/parser-python.r/python-import.d/input.py1CODE
LOWUnits/parser-python.r/python-import.d/input.py2CODE
LOWUnits/parser-python.r/python-import.d/input.py2CODE
LOWUnits/parser-python.r/python-import.d/input.py3CODE
LOWUnits/parser-python.r/python-import.d/input.py4CODE
LOWUnits/parser-python.r/python-import.d/input.py4CODE
LOWUnits/parser-python.r/python-import.d/input.py5CODE
LOWUnits/parser-python.r/python-import.d/input.py6CODE
LOWUnits/parser-python.r/python-import.d/input.py7CODE
LOWUnits/parser-python.r/python-import.d/input.py9CODE
LOWUnits/parser-python.r/python-import.d/input.py9CODE
LOWUnits/parser-python.r/python-import.d/input.py9CODE
LOWUnits/parser-python.r/python-import.d/input.py9CODE
LOWUnits/parser-python.r/python-import.d/input.py10CODE
LOWUnits/parser-python.r/python-import.d/input.py10CODE
LOWUnits/parser-python.r/python-import.d/input.py10CODE
LOWUnits/parser-python.r/python-import.d/input.py10CODE
LOWUnits/parser-python.r/python-import.d/input.py12CODE
LOWUnits/parser-python.r/python-import.d/input.py12CODE
LOWUnits/parser-python.r/python-import.d/input.py12CODE
LOWUnits/parser-python.r/python-import.d/input.py12CODE
LOW…rser-python.r/pep604-bar-operator-for-union.d/input.py1CODE
Slop Phrases6 hits · 13 pts
SeverityFileLineSnippetContext
LOWparsers/x-cpreprocessor.h89/* Don't forget to set useCort true in your parser.COMMENT
LOWparsers/cxx/cxx_token.h21// DON'T FORGET TO RUN misc/gencxxtypedumper.sh after updating the elements.COMMENT
MEDIUMUnits/parser-rdoc.r/run-as-guest.d/input.rb46# RDoc::Markup is extensible at runtime: you can add \new markup elements toCOMMENT
MEDIUMUnits/parser-rdoc.r/run-as-guest.d/input.rb58# the +convert+ method, so you can use the same RDoc::Markup converter toCOMMENT
MEDIUMUnits/parser-cxx.r/bug852368.cpp.d/input.cpp30let me know if you need more details.CODE
MEDIUMUnits/parser-cxx.r/bug849591.cpp.d/input.cpp54Let me know if you need any clarification with this issue.CODE
AI Slop Vocabulary5 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMmisc/units.py4# units.py - Units test harness for ctagsCOMMENT
MEDIUMmisc/units.py329 # TODO: use more robust wayCOMMENT
MEDIUMmisc/packcc/tests/uncrustify.cfg3034# Whether to apply special formatting for Qt SIGNAL/SLOT macros. Essentially,COMMENT
LOWTmain/errors-about-parser-specific-extras.d/run.sh20# not an error, just set all extras to false.COMMENT
LOWTmain/errors-about-parser-specific-extras.d/run.sh27# About --extras-Robot=, not an error, just set all extras to false.COMMENT
Fake / Example Data10 hits · 10 pts
SeverityFileLineSnippetContext
LOWmisc/packcc/benchmark/inputs/json.json3797 "about": "Reprehenderit est deserunt pariatur ut exercitation nulla proident qui incididunt exercitation magna aliquCODE
LOWmisc/packcc/benchmark/inputs/json.json6002 "about": "Esse irure adipisicing deserunt cupidatat consequat consectetur minim magna cupidatat exercitation veniam.CODE
LOWmisc/packcc/benchmark/inputs/json.json6047 "about": "Culpa exercitation Lorem ipsum fugiat dolore quis nostrud occaecat voluptate ea ut consequat sint. IncididCODE
LOWmisc/packcc/benchmark/inputs/json.json8882 "about": "Proident incididunt Lorem ipsum minim nisi culpa. Aute irure laboris incididunt eiusmod sit mollit nisi elCODE
LOWparsers/jscript.c3711 if (strcmp(scope_str, "placeholder") == 0)CODE
LOWparsers/jscript.c3736 return "placeholder";CODE
LOWparsers/jscript.c3751 return "placeholder";CODE
LOWparsers/bibtex.c285 * author="John Doe"}COMMENT
LOWoptlib/scss.c223 true, 'P', "placeholder", "placeholder classes",CODE
LOWmain/lregex.c647 { '\0', "placeholder", NULL, placeholder_ptrn_flag_eval,CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMdocs/conf.py5# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMUnits/parser-perl.r/package.pm.d/input.pm1# This file is intended to test package keyword support along withCOMMENT
MEDIUMUnits/parser-rdoc.r/run-as-guest.d/input.rb635# # This method is in the default categoryCOMMENT
Decorative Section Separators3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMUnits/parser-rdoc.r/run-as-guest.d/input.rb666# # ----------------------------------------COMMENT
MEDIUMUnits/parser-rdoc.r/run-as-guest.d/input.rb670# # ----------------------------------------COMMENT
MEDIUMUnits/parser-sql.r/sharp-comment.d/input.sql2# ------------------------------------------------------------------COMMENT
Deep Nesting6 hits · 6 pts
SeverityFileLineSnippetContext
LOWmisc/units.py132CODE
LOWmisc/units.py341CODE
LOWmisc/units.py424CODE
LOWmisc/units.py1069CODE
LOWmisc/man-test.py67CODE
LOWmisc/man-test.py168CODE
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWmisc/enumstr.sh21# Usage:COMMENT
LOWmisc/packcc/benchmark/benchmark.sh8# Usage:COMMENT
Hyper-Verbose Identifiers2 hits · 2 pts
SeverityFileLineSnippetContext
LOWmisc/units.py253def run_result_internal_error(msg, f, colorized, *args):CODE
LOWUnits/parser-javascript.r/github-issue-3641.d/input.js1function definedWithFunctionBefore() {};CODE
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWparsers/cpreprocessor.c533* This section handles preprocessor directives. It strips out allCOMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdocs/conf.py17# Check if we run on RTD or locallyCOMMENT