AI Slop Code Risk Monitor

fluentassertions/fluentassertions

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

A very extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests. Targets .NET Framework 4.7, as well as .NET Core 2.1, .NET Core 3.0, .NET 6, .NET Standard 2.0 and 2.1. Supports the unit test frameworks MSTest2, NUnit3, XUnit2, MSpec, and NSpec3.

3.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for fluentassertions/fluentassertions, a C# project with 3,813 GitHub stars. SynthScan examined 191,556 lines of code across 1000 source files, recording 641 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 3.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.

3.2
Adjusted Signal
3.2
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
3.8K
Stars
C#
Language
191.6K
Lines of Code
1.0K
Files
641
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 13.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.7/100 · LOW

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

Agent Over-Engineering Ratio 0.8/100 · LOW

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

PR Review Velocity Impact 16.1/100 · LOW

Which changes need focused human review? 641 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 1HIGH 0MEDIUM 11LOW 629

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 641 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.

Over-Commented Block612 hits · 544 pts
SeverityFileLineSnippetContext
LOWAcceptApiChanges.sh1#!/usr/bin/env shCOMMENT
LOWagents.md101 }COMMENT
LOW…rtions.Specs/Execution/AssertionChainSpecs.Chaining.cs601 //COMMENT
LOWdocs/staticman.yml1# Name of the property. You can have multiple properties with completelyCOMMENT
LOWdocs/staticman.yml21COMMENT
LOWdocs/staticman.yml41 # with a `type` property, which configures the generated field, or any valueCOMMENT
LOWdocs/staticman.yml61 # type: "comment"COMMENT
LOWdocs/_config.yml1# Welcome to Jekyll!COMMENT
LOWdocs/_config.yml221# TypeCOMMENT
LOWdocs/assets/js/lunr/lunr.js2681}COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js1/*!COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js21// Copyright (c) 2010 "Cowboy" Ben Alman,COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js41// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js61// $.method() or jQuery.method(), you'll need to use Cowboy.method().COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js81 // In this visualization, | is a throttled-function call and X is the actualCOMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js101 // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) );COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js161 exec();COMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js201 // very beginning of a series of calls, or at the very end. If you want toCOMMENT
LOWdocs/assets/js/plugins/jquery.ba-throttle-debounce.js221 // > jQuery('selector').unbind( 'someevent', debounced );COMMENT
LOW.github/workflows/code_quality_pr.yml1name: Qodana (PR)COMMENT
LOWBuild/Build.cs321 });COMMENT
LOWSrc/FluentAssertions/AndWhichConstraint.cs61 /// Creates an object that allows continuing an assertion executed through <paramref name="parent"/> andCOMMENT
LOWSrc/FluentAssertions/AsyncAssertionsExtensions.cs1using System.Diagnostics.CodeAnalysis;COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs21 /// Asserts that an object can be serialized and deserialized using the data contract serializer and that it stills COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs41 /// <param name="options">COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs61COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs101 assertions.Subject,COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs121 [StringSyntax("CompositeFormat")] string because = "", params object[] becauseArgs)COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs141 /// <exception cref="ArgumentNullException"><paramref name="options"/> is <see langword="null"/>.</exception>COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs161 public static AndConstraint<ObjectAssertions> BeJsonSerializable(this ObjectAssertions assertions,COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs181 /// is needed. If the phrase does not start with the word <i>because</i>, it is prepended automatically.COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs201 /// <see cref="AssertionConfiguration"/> class.COMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs221 /// A reference to the <see cref="EquivalencyOptions{T}"/> configuration object that can be usedCOMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs301 /// Asserts that an object can be serialized and deserialized using the XML serializer and that it stills retainsCOMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs321 /// to influence the way the object graphs are compared. You can also provide an alternative instance of theCOMMENT
LOWSrc/FluentAssertions/ObjectAssertionsExtensions.cs341 /// <param name="options">COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs21 /// Asserts an integral value is close to another value within a specified value.COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs61 }COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs101 because, becauseArgs);COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs141COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs241 /// </summary>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs281 return new AndConstraint<NumericAssertions<uint>>(parent);COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs321 /// <param name="nearbyValue">COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs381 /// <param name="parent">The <see cref="NumericAssertions{T}"/> object that is being extended.</param>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs421COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs461 distantValue, delta, actualValue,COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs561 /// The distant value to compare the actual value with.COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs601 /// <summary>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs641COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs681 /// <param name="parent">The <see cref="NumericAssertions{T}"/> object that is being extended.</param>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs741 #region BeApproximatelyCOMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs781 return new AndConstraint<NullableNumericAssertions<float>>(parent);COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs821COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs881 /// <summary>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs921COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs961 {COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs1021 /// </summary>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs1061 /// <summary>COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs1101 {COMMENT
LOWSrc/FluentAssertions/NumericAssertionsExtensions.cs1161COMMENT
552 more matches not shown…
Decorative Section Separators10 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMdocs/_data/ui-text.yml4# -----------------COMMENT
MEDIUMdocs/_data/ui-text.yml191# ----------COMMENT
MEDIUMdocs/_data/ui-text.yml316# --------------------------------COMMENT
MEDIUMdocs/_data/ui-text.yml402# ----------------COMMENT
MEDIUMdocs/_data/ui-text.yml457# --------------COMMENT
MEDIUMdocs/_data/ui-text.yml543# -----------------COMMENT
MEDIUMdocs/_data/ui-text.yml588# ------------------------COMMENT
MEDIUMdocs/_data/ui-text.yml766# ----------COMMENT
MEDIUMdocs/_data/ui-text.yml809# ----------COMMENT
MEDIUMdocs/_data/ui-text.yml985# --------------COMMENT
Fake / Example Data16 hits · 18 pts
SeverityFileLineSnippetContext
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs550 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs559 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs577 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs586 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs604 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs613 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs631 Address = "123 Main St",CODE
LOW…entAssertions.Equivalency.Specs/MemberMatchingSpecs.cs640 Address = "123 Main St",CODE
LOW…ons.Equivalency.Specs/SelectionRulesSpecs.Excluding.cs1198 Street = "123 Main St",CODE
LOW…ons.Equivalency.Specs/SelectionRulesSpecs.Excluding.cs1214 Street = "123 Main St",CODE
LOW⚡…ns.Specs/Primitives/StringAssertionSpecs.MatchRegex.cs225 string subject = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invCODE
LOW⚡…ns.Specs/Primitives/StringAssertionSpecs.MatchRegex.cs225 string subject = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invCODE
LOW⚡…ns.Specs/Primitives/StringAssertionSpecs.MatchRegex.cs227 "ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";CODE
LOW⚡…ns.Specs/Primitives/StringAssertionSpecs.MatchRegex.cs227 "ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";CODE
LOW…tions.Specs/Primitives/ReferenceTypeAssertionsSpecs.cs30 Name = "John Doe"CODE
LOW…tions.Specs/Primitives/ReferenceTypeAssertionsSpecs.cs49 Name = "John Doe"STRING
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALdocs/assets/js/main.min.js6!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):fCODE
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMAcceptApiChanges.sh3## If your change does change the API on purpose and you double-checked correctness of the changes you can use this scriCOMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWbuild.sh38# Check if any dotnet is installedCOMMENT