AI Slop Code Risk Monitor

fish-shell/fish-shell

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

The user-friendly command line shell.

2.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for fish-shell/fish-shell, a Rust project with 34,374 GitHub stars. SynthScan examined 119,425 lines of code across 359 source files, recording 212 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-27
Last Push
34.4K
Stars
Rust
Language
119.4K
Lines of Code
359
Files
212
Pattern Hits
2026-10-31
Scan Date
0.06
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 7.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.3/100 · LOW

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

Agent Over-Engineering Ratio 3.7/100 · LOW

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

PR Review Velocity Impact 13.9/100 · LOW

Which changes need focused human review? 212 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 21MEDIUM 20LOW 171

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 212 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 Block114 hits · 114 pts
SeverityFileLineSnippetContext
LOWcrates/gettext-mo-file-parser/src/lib.rs21 }COMMENT
LOWcrates/gettext-extraction/src/lib.rs81/// the message ID is written into a new file in this directory,COMMENT
LOWcrates/wgetopt/src/lib.rs41/// regardless of [Ordering].COMMENT
LOWcrates/wgetopt/src/lib.rs61/// Indicates whether an option takes an argument, and whether that argumentCOMMENT
LOWcrates/wgetopt/src/lib.rs121 shortopts: &'opts wstr,COMMENT
LOWcrates/util/src/lib.rs1//! Generic utilities library.COMMENT
LOWcrates/util/src/lib.rs21/// file1.txtCOMMENT
LOWcrates/color/src/lib.rs141 } else {COMMENT
LOWcrates/fluent/src/lib.rs181 }COMMENT
LOWcrates/fluent/src/lib.rs201///COMMENT
LOWcrates/fluent/src/lib.rs221 $(COMMENT
LOWcrates/printf/src/lib.rs21/// let s = sprintf!("%0.5g", 123456.0);COMMENT
LOWcrates/printf/src/lib.rs61 };COMMENT
LOWcrates/printf/src/lib.rs81/// let mut output = String::new();COMMENT
LOWcrates/printf/src/printf_impl.rs321/// Formats a string using the provided format specifiers, arguments, and locale,COMMENT
LOWcrates/printf/src/locale.rs1/// The numeric locale. Note this is a pure value type.COMMENT
LOWcrates/printf/src/fmt_fp/decimal.rs241 // which is given by remainder (that is, remainder = self[digit_idx] % mod_base).COMMENT
LOWcrates/printf/src/fmt_fp/mod.rs101COMMENT
LOWcrates/common/src/lib.rs1221 /// let cell = ScopedCell::new(5);COMMENT
LOWcrates/common/src/lib.rs1261COMMENT
LOWcrates/common/src/lib.rs1301 }COMMENT
LOWcrates/common/src/lib.rs1321 pub fn scoped_replace(&self, value: T) -> impl DerefMut + use<T> {COMMENT
LOWcrates/common/src/lib.rs1341/// use fish_common::ScopeGuard;COMMENT
LOWcrates/common/src/lib.rs1381 }COMMENT
LOWcrates/common/src/lib.rs1401/// const COLORS: &[(&wstr, u32)] = &[COMMENT
LOWcrates/widestring/src/lib.rs41//COMMENT
LOWcrates/widestring/src/lib.rs81/// Character representing process expansion for %self.COMMENT
LOWcrates/widestring/src/lib.rs341 const ENCODED_PUA_CHAR_SECOND_CHAR_RANGE: Range<char> =COMMENT
LOWcrates/widestring/src/lib.rs361 /// The buffers have to be considered before taking more chars from `encoded_chars`.COMMENT
LOWcrates/widestring/src/lib.rs581pub unsafe fn charptr2wcstring(input: *const libc::c_char) -> WString {COMMENT
LOWcrates/xtask/src/gettext.rs21COMMENT
LOWcrates/xtask/src/fluent.rs41 from_source: Option<Option<PathBuf>>,COMMENT
LOWcrates/xtask/src/fluent.rs61 /// If a Fluent variable is renamed or removed, the translations of the message will be deleted.COMMENT
LOWcrates/xtask/src/fluent.rs81 /// The message ID.COMMENT
LOWcrates/xtask/src/fluent.rs101 /// indicate that translators should have a look at it.COMMENT
LOWcrates/xtask/src/main.rs41 /// Run ShellCheck on non-fish shell scriptsCOMMENT
LOWdoc_src/conf.py141# This is also used if you do content translation via gettext catalogs.COMMENT
LOWdoc_src/conf.py161# a list of builtin themes.COMMENT
LOWdoc_src/conf.py281# Bibliographic Dublin Core info.COMMENT
LOWtests/fish_test_helper.c1// fish_test_helper is a little program with no fish dependencies that acts like certain otherCOMMENT
LOWtests/pexpects/commandline.py121# send(control("u") * 6)COMMENT
LOWtests/pexpects/bind.py141# Delay needed to allow fish to transition to vi "normal" mode.COMMENT
LOWtests/pexpects/history.py1#!/usr/bin/env python3COMMENT
LOWsrc/job_group.rs41}COMMENT
LOWsrc/job_group.rs61 /// the terminal to the same state when resuming a stopped job.COMMENT
LOWsrc/job_group.rs121COMMENT
LOWsrc/timer.rs1//! This module houses `TimerSnapshot` which can be used to calculate the elapsed time (system CPUCOMMENT
LOWsrc/exec.rs121 return false;COMMENT
LOWsrc/exec.rs361}COMMENT
LOWsrc/exec.rs1221/// the pipeline should be cancelled.COMMENT
LOWsrc/exec.rs1241 // so that stdout and stderr both wind up referencing the pipe.COMMENT
LOWsrc/tty_handoff.rs341// Called from a signal handler to mark the tty as invalid (e.g. SIGHUP).COMMENT
LOWsrc/tty_handoff.rs441COMMENT
LOWsrc/parse_util.rs101COMMENT
LOWsrc/parse_util.rs981 inc_dec = (1, 1);COMMENT
LOWsrc/terminal.rs341 pub fn style_writer(&mut self) -> OutputterStyleWriter<'_> {COMMENT
LOWsrc/proc.rs341}COMMENT
LOWsrc/screen.rs221COMMENT
LOWsrc/topic_monitor.rs261}COMMENT
LOWsrc/topic_monitor.rs301COMMENT
54 more matches not shown…
Cross-Language Confusion15 hits · 74 pts
SeverityFileLineSnippetContext
HIGHtests/pexpects/wildcard_tab.py67sendline(r"mkdir benchmarks && mkdir benchmarks/somedir && touch benchmarks/somefile")CODE
HIGHtests/pexpects/pipeline.py28# 'not' because we expect to have no jobs, in which case `jobs` will return falseCOMMENT
HIGH⚡tests/pexpects/isatty.py20test -t 0 && echo stdinSTRING
HIGH⚡tests/pexpects/isatty.py21test -t 1 && echo stdoutSTRING
HIGH⚡tests/pexpects/isatty.py22test -t 2 && echo stderrSTRING
HIGHtests/pexpects/isatty.py60sendline("isatty stdin && echo yes")CODE
HIGHtests/pexpects/isatty.py64sendline("cat </dev/null | isatty stdin || echo no")CODE
HIGHtests/pexpects/autosuggest.py77run("touch configure && chmod +x configure")CODE
HIGHtests/pexpects/status.py28sendline("true 7 && status current-commandline")CODE
HIGHtests/pexpects/status.py29expect_prompt("\r\n.*true 7 && status current-commandline\r\n")CODE
HIGHtests/pexpects/read.py58sendline(r"read -c init_text somevar && echo $somevar")CODE
HIGHtests/pexpects/read.py63sendline(r"read --command='some other text' somevar && echo $somevar")CODE
HIGHshare/tools/web_config/webconfig.py807 + "if set -q __fish_initialized && test $__fish_initialized -lt 4300\n"CODE
HIGHshare/tools/web_config/webconfig.py999 + "funcsave fish_prompt && funcsave fish_right_prompt 2>/dev/null"CODE
HIGHshare/tools/web_config/webconfig.py1019 + '" \n false \n functions -q fish_right_prompt && fish_right_prompt\n'CODE
Decorative Section Separators13 hits · 54 pts
SeverityFileLineSnippetContext
MEDIUMtests/pexpects/read.py126# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py32# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py37# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py39# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py41# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py50# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py52# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py54# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py60# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py65# ==========COMMENT
MEDIUM⚡tests/pexpects/history.py72# ==========COMMENT
MEDIUMtests/pexpects/history.py99# ==========COMMENT
MEDIUMtests/pexpects/history.py106# ==========COMMENT
Deep Nesting25 hits · 25 pts
SeverityFileLineSnippetContext
LOWdoc_src/fish_synopsis.py85CODE
LOWdoc_src/conf.py216CODE
LOWtests/test_driver.py111CODE
LOWtests/test_driver.py306CODE
LOWtests/pexpect_helper.py75CODE
LOWtests/littlecheck.py796CODE
LOWtests/littlecheck.py207CODE
LOWshare/tools/create_manpage_completions.py1251CODE
LOWshare/tools/create_manpage_completions.py1872CODE
LOWshare/tools/create_manpage_completions.py2088CODE
LOWshare/tools/create_manpage_completions.py468CODE
LOWshare/tools/create_manpage_completions.py517CODE
LOWshare/tools/create_manpage_completions.py588CODE
LOWshare/tools/create_manpage_completions.py655CODE
LOWshare/tools/create_manpage_completions.py680CODE
LOWshare/tools/create_manpage_completions.py885CODE
LOWshare/tools/create_manpage_completions.py930CODE
LOWshare/tools/create_manpage_completions.py1092CODE
LOWshare/tools/create_manpage_completions.py1708CODE
LOWshare/tools/web_config/webconfig.py229CODE
LOWshare/tools/web_config/webconfig.py1429CODE
LOWshare/tools/web_config/webconfig.py1125CODE
LOWshare/tools/web_config/webconfig.py1146CODE
LOWshare/tools/web_config/webconfig.py1183CODE
LOWshare/tools/web_config/webconfig.py267CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHdoc_src/conf.py24except ImportError:CODE
HIGHshare/tools/create_manpage_completions.py1868except (OSError, IOError):CODE
HIGHshare/tools/create_manpage_completions.py2116except FileNotFoundError:CODE
HIGHshare/tools/web_config/webconfig.py1472except socket.error:CODE
Synthetic Comment Markers2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHsrc/ast.rs2396 // exhausted the stream as requested.COMMENT
HIGHsrc/builtins/read.rs309/// Read from the fd in chunks until we see newline or null, as requested, is seen. This is onlyCOMMENT
Hyper-Verbose Identifiers14 hits · 12 pts
SeverityFileLineSnippetContext
LOWtests/pexpect_helper.py197 def send_cursor_position_report(self, *, y: int, x: int):CODE
LOWtests/pexpect_helper.py202 def send_primary_device_attribute(self):CODE
LOWtests/pexpect_helper.py285 def report_exception_and_exit(self, pat, unmatched, err):CODE
LOWshare/tools/create_manpage_completions.py1851def cleanup_autogenerated_completions_in_directory(dir):STRING
LOWshare/tools/create_manpage_completions.py1864def cleanup_autogenerated_file(path):STRING
LOWshare/tools/create_manpage_completions.py2018def parse_and_output_man_pages(paths, output_directory, show_progress):STRING
LOWshare/tools/create_manpage_completions.py2088def get_paths_from_man_locations():STRING
LOWshare/tools/web_config/webconfig.py356def html_color_for_ansi_color_index(val):CODE
LOWshare/tools/web_config/webconfig.py625def append_html_for_ansi_escape(full_val, result, span_open):CODE
LOWshare/tools/web_config/webconfig.py800class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):CODE
LOWshare/tools/web_config/webconfig.py963 def do_set_color_for_variable(self, name, color):CODE
LOWshare/tools/web_config/webconfig.py1053 def parse_one_sample_prompt_hash(self, line, result_dict):CODE
LOWshare/tools/web_config/webconfig.py1094 def do_get_sample_prompts_list(self):CODE
LOWshare/tools/web_config/webconfig.py1125 def font_size_for_ansi_prompt(self, prompt_demo_ansi):CODE
AI Slop Vocabulary4 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMtests/littlecheck.py838 # To facilitate integration with testing frameworks, use exit code 125 to indicate that allCOMMENT
MEDIUMtests/pexpects/history.py8# meant to be a comprehensive test of the history subsystem. Those types ofCOMMENT
LOWbuild_tools/make_linux_packages.sh72# just use dpkg-buildpackage directlyCOMMENT
LOWshare/tools/create_manpage_completions.py2104 # If we can't have the OS interpret $MANPATH, just use it as-is (gulp).STRING
Self-Referential Comments4 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMsrc/env_universal_common.rs641const SAVE_MSG: &[u8] = b"# This file contains fish universal variable definitions.\n";CODE
MEDIUMsrc/env_universal_common.rs948 "# This file contains fish universal variable definitions.\n",CODE
MEDIUMsrc/env_universal_common.rs966 "# This file contains fish universal variable definitions.\n",CODE
MEDIUMsrc/env_universal_common.rs1029 "# This file contains fish universal variable definitions.\n",CODE
Slop Phrases4 hits · 8 pts
SeverityFileLineSnippetContext
LOWCargo.toml10# don't forget to update COPYING and debian/copyright tooCOMMENT
LOWCargo.toml10# don't forget to update COPYING and debian/copyright tooCOMMENT
LOWsrc/parser_keywords.rs40// Don't forget to add any new reserved keywords to the documentationCOMMENT
MEDIUMsrc/builtins/string/shorten.rs155 // This should work for most cases considering the combiners typically have width 0.COMMENT
Unused Imports7 hits · 7 pts
SeverityFileLineSnippetContext
LOWdoc_src/fish_indent_lexer.py7CODE
LOWdoc_src/conf.py19CODE
LOWtests/test_driver.py21CODE
LOWtests/pexpect_helper.py16CODE
LOWtests/littlecheck.py5CODE
LOWtests/littlecheck.py6CODE
LOWshare/tools/web_config/webconfig.py4CODE
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWshare/tools/create_manpage_completions.py1362CODE
LOWshare/tools/web_config/webconfig.py1045CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdoc_src/fish_synopsis.py3# Example usage:COMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/fs.rs280/// # Return valueCOMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/env_dispatch.rs510 // TODO: Add tests for the locale vars.COMMENT
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtests/test_driver.py233 except Exception as e:CODE