AI Slop Code Risk Monitor

FastEndpoints/FastEndpoints

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

A light-weight REST API development framework for ASP.NET 8 and newer.

2.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for FastEndpoints/FastEndpoints, a C# project with 6,024 GitHub stars. SynthScan examined 201,800 lines of code across 1118 source files, recording 463 pattern matches distributed across 6 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-10-31
Last Push
6.0K
Stars
C#
Language
201.8K
Lines of Code
1.1K
Files
463
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.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.8/100 · LOW

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

Agent Over-Engineering Ratio 0.7/100 · LOW

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

PR Review Velocity Impact 13.3/100 · LOW

Which changes need focused human review? 463 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 11HIGH 0MEDIUM 6LOW 446

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 463 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 Block424 hits · 422 pts
SeverityFileLineSnippetContext
LOWTestHarness/Web/DocumentRegistration.cs161 return services;COMMENT
LOWTestHarness/Web/DocumentRegistration.cs181 // o =>COMMENT
LOWTestHarness/Web/DocumentRegistration.cs201 // FastEndpoints.Swagger.Extensions.SwaggerDocument(COMMENT
LOWTestHarness/Web/DocumentRegistration.cs221 //COMMENT
LOWTestHarness/Web/DocumentRegistration.cs241 // o.ShowDeprecatedOps = true;COMMENT
LOWTestHarness/Web/DocumentRegistration.cs261 // o.ShowDeprecatedOps = true;COMMENT
LOWTestHarness/Web/DocumentRegistration.cs281 // });COMMENT
LOWTestHarness/Web/DocumentRegistration.cs301 // };COMMENT
LOW…s/Web/[Features]/TestCases/Swagger/Review/Endpoints.cs1081/// </summary>COMMENT
LOWTestHarness/Sandbox/Contracts/MyENDPOINT.cs1// using FastEndpoints;COMMENT
LOWTestHarness/Sandbox/Contracts/MyENDPOINT.cs21// await SendAsync(req);COMMENT
LOW…stHarness/Sandbox/Tests/EndpointTests/EndpointTests.cs1// using Tests.Fixtures;COMMENT
LOW…/FastEndpoints.OpenApi/XmlDocSchemaTransformerTests.cs281 {COMMENT
LOW…/IntegrationTests/FastEndpoints/RPCTests/EventQueue.cs41COMMENT
LOWSrc/JobQueues/JobQueueOptions.cs1namespace FastEndpoints;COMMENT
LOWSrc/JobQueues/JobQueueOptions.cs21COMMENT
LOWSrc/JobQueues/JobQueueOptions.cs41 /// <summary>COMMENT
LOWSrc/JobQueues/JobQueueOptions.cs61 /// <para>COMMENT
LOWSrc/JobQueues/JobResult.cs1using System.Diagnostics.CodeAnalysis;COMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs1namespace FastEndpoints;COMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs21 /// row exists (including completed jobs). after purge/delete, the same key may be reused. null/empty keys are not sCOMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs41 /// <para>COMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs61 /// <summary>COMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs81 /// </para>COMMENT
LOWSrc/JobQueues/IJobStorageProvider.cs101}COMMENT
LOWSrc/JobQueues/PendingJobSearchParams.cs1using System.Linq.Expressions;COMMENT
LOWSrc/JobQueues/PendingJobSearchParams.cs21 /// r.ExecuteAfter &lt;= now &amp;&amp;COMMENT
LOWSrc/JobQueues/PendingJobSearchParams.cs41COMMENT
LOWSrc/JobQueues/JobQueueExtensions.cs161 MessagingExtensions.WarmupMessaging(provider);COMMENT
LOWSrc/JobQueues/JobQueueExtensions.cs201 /// <param name="cmd">the command to be queued</param>COMMENT
LOWSrc/JobQueues/JobTracker.cs1namespace FastEndpoints;COMMENT
LOWSrc/JobQueues/JobTracker.cs21 => JobQueueBase.CancelJobAsync<TCommand>(trackingId, ct);COMMENT
LOWSrc/JobQueues/JobTracker.cs41 => JobQueueBase.GetJobResultAsync<TCommand, TResult>(trackingId, ct);COMMENT
LOWSrc/JobQueues/JobTracker.cs61 public static Task CancelJobAsync(Guid trackingId, CancellationToken ct = default)COMMENT
LOWSrc/JobQueues/StaleJobSearchParams.cs1using System.Linq.Expressions;COMMENT
LOWSrc/JobQueues/IJobStorageRecord.cs1// ReSharper disable PropertyCanBeMadeInitOnly.GlobalCOMMENT
LOWSrc/JobQueues/IJobStorageRecord.cs21 /// the actual command object that will be embedded in the storage record.COMMENT
LOWSrc/JobQueues/IJobStorageRecord.cs41 /// </summary>COMMENT
LOWSrc/JobQueues/IJobStorageRecord.cs81 /// </summary>COMMENT
LOWSrc/JobQueues/IJobStorageRecord.cs121{COMMENT
LOWSrc/JobQueues/DuplicateJobException.cs1namespace FastEndpoints;COMMENT
LOWSrc/Core/ServiceResolver/ServiceScopeExtensions.cs21 /// try to resolve an instance for the given type from the dependency injection container. will return null if uCOMMENT
LOWSrc/Core/ServiceResolver/ServiceScopeExtensions.cs61 throw new InvalidOperationException("Keyed services not supported!");COMMENT
LOWSrc/Core/ServiceResolver/IServiceResolver.cs1using Microsoft.Extensions.DependencyInjection;COMMENT
LOWSrc/Core/ServiceResolver/IServiceResolver.cs21 IServiceScope CreateScope(); //todo: need to figure out how to get rid of this from this interface!COMMENT
LOWSrc/Core/ServiceResolver/IServiceResolver.cs41COMMENT
LOWSrc/Core/ServiceResolver/IServiceResolver.cs61 object? TryResolve(Type typeOfService, string keyName);COMMENT
LOWSrc/Core/ServiceResolver/IServiceResolver.cs81/// interface used by fastendpoints for resolving services from the DI container.COMMENT
LOWSrc/HealthChecks/HealthChecksExtensions.cs1using Microsoft.AspNetCore.Hosting;COMMENT
LOWSrc/HealthChecks/HealthChecksExtensions.cs21 /// <term>/health/live (liveness)</term>COMMENT
LOWSrc/HealthChecks/HealthChecksExtensions.cs41 /// builder.Services.AddServiceHealthChecks();COMMENT
LOWSrc/HealthChecks/ServiceHealthChecksOptions.cs1using Microsoft.AspNetCore.Http;COMMENT
LOWSrc/HealthChecks/ServiceHealthChecksOptions.cs21 /// The liveness probe indicates whether the application process is running.COMMENT
LOWSrc/HealthChecks/ServiceHealthChecksOptions.cs41COMMENT
LOWSrc/Swagger/DocumentOptions.cs21 /// <summary>COMMENT
LOWSrc/Swagger/DocumentOptions.cs41COMMENT
LOWSrc/Swagger/DocumentOptions.cs61 /// </summary>COMMENT
LOWSrc/Swagger/DocumentOptions.cs81 /// by default deprecated endpoints/operations will not show up in the swagger doc.COMMENT
LOWSrc/Swagger/DocumentOptions.cs101COMMENT
LOWSrc/Swagger/DocumentOptions.cs121 public Action<Dictionary<string, string>>? TagDescriptions { get; set; }COMMENT
364 more matches not shown…
Hallucination Indicators11 hits · 100 pts
SeverityFileLineSnippetContext
CRITICALTests/UnitTests/FastEndpoints/WebTests.cs240 ep.HttpContext.Response.Headers.CacheControl.ShouldBe(new("no-cache"));CODE
CRITICALTests/UnitTests/FastEndpoints/WebTests.cs241 ep.HttpContext.Response.Headers.Connection.ShouldBe(new("keep-alive"));CODE
CRITICAL…/UnitTests/FastEndpoints/ResponseCacheExecutorTests.cs20 ctx.Response.Headers.CacheControl.Count.ShouldBe(0);CODE
CRITICAL…/UnitTests/FastEndpoints/ResponseCacheExecutorTests.cs73 ctx.Response.Headers.Pragma.Count.ShouldBe(0);CODE
CRITICAL…/UnitTests/FastEndpoints/ResponseCacheExecutorTests.cs139 ctx.Response.Headers.Pragma.Count.ShouldBe(0);CODE
CRITICAL…/UnitTests/FastEndpoints/ResponseCacheExecutorTests.cs140 ctx.Response.Headers.Vary.Count.ShouldBe(0);CODE
CRITICAL…rationTests/FastEndpoints/BindingTests/BindingTests.cs755 x.MainAuthor.MainAddress.MainImage.Name.ShouldBe("MainAuthor.MainAddress.MainImage");CODE
CRITICAL…rationTests/FastEndpoints/BindingTests/BindingTests.cs756 x.MainAuthor.MainAddress.AlternativeImages.Count.ShouldBe(2);CODE
CRITICALSrc/Swagger/OperationProcessor.cs963 state.OpCtx.Document.Components.Schemas.Remove(oldBodyName);CODE
CRITICALSrc/Swagger/Extensions.cs439 var allProperties = mediaType.Value.Schema.ActualSchema.ActualProperties.ToList();STRING
CRITICALSrc/Generator/AccessControlGenerator.cs553 var desc = m.Invocation.ArgumentList.OpenParenToken.TrailingTrivia.SingleOrDefault(t => t.IsKind(SyntaxKind.STRING
Decorative Section Separators6 hits · 26 pts
SeverityFileLineSnippetContext
MEDIUM…ts/UnitTests/FastEndpoints/ReflectionGeneratorTests.cs473 // ── helpers ───────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡…rationTests/FastEndpoints.Agents/NamingHelpersTests.cs5 // ── PascalCase (endpoint type names) ───────────────────────────────────COMMENT
MEDIUM⚡…rationTests/FastEndpoints.Agents/NamingHelpersTests.cs15 // ── Title-case / space-separated (OpenAPI Summary values) ─────────────COMMENT
MEDIUM⚡…rationTests/FastEndpoints.Agents/NamingHelpersTests.cs25 // ── Hyphen-separated ───────────────────────────────────────────────────COMMENT
MEDIUM⚡…rationTests/FastEndpoints.Agents/NamingHelpersTests.cs32 // ── Already snake_case or lowercase ───────────────────────────────────COMMENT
MEDIUM⚡…rationTests/FastEndpoints.Agents/NamingHelpersTests.cs40 // ── Edge cases ─────────────────────────────────────────────────────────COMMENT
Fake / Example Data15 hits · 15 pts
SeverityFileLineSnippetContext
LOW…ndpoints/SerializerCtxGen/FluentNoReqResMapEndpoint.cs39 FullName = "John Doe",CODE
LOWTestHarness/OData/Model/AppDbContextExtensions.cs20 Name = "John Doe",CODE
LOW…sts/IntegrationTests/FastEndpoints.OData/ODataTests.cs31 res.Value[2].Name.ShouldBe("John Doe");CODE
LOW…sts/IntegrationTests/FastEndpoints.OData/ODataTests.cs55 "/odata/customers?$filter=Name eq 'John Doe'&$expand=*",CODE
LOW…sts/IntegrationTests/FastEndpoints.OData/ODataTests.cs61 res.Value[0].Name.ShouldBe("John Doe");CODE
LOW…AotTests/NativeAotCheckerTests/Mapping/MappingTests.cs21 res.FullName.ShouldBe("John Doe");CODE
LOW…AotTests/NativeAotCheckerTests/Binding/BindingTests.cs73 Name = "John Doe",CODE
LOW…AotTests/NativeAotCheckerTests/Binding/BindingTests.cs86 res.Person.Name.ShouldBe("John Doe");CODE
LOW…AotTests/NativeAotCheckerTests/Binding/BindingTests.cs113 res.Editor.Name.ShouldBe("John Doe");CODE
LOW…AotTests/NativeAotCheckerTests/Binding/BindingTests.cs144 Name = "John Doe"CODE
LOW…AotTests/NativeAotCheckerTests/Binding/BindingTests.cs175 res.Editor.Name.ShouldBe("John Doe");CODE
LOW…eckerTests/SerializerContext/SerializerContextTests.cs35 res.First().FullName.ShouldBe("John Doe");CODE
LOW…eckerTests/SerializerContext/SerializerContextTests.cs69 res.ShouldBe("John Doe");CODE
LOW…eckerTests/SerializerContext/SerializerContextTests.cs116 res.FullName.ShouldBe("John Doe");CODE
LOW…eckerTests/SerializerContext/SerializerContextTests.cs140 res.FullName.ShouldBe("John Doe");CODE
Slop Phrases6 hits · 9 pts
SeverityFileLineSnippetContext
LOW…egrationTests/FastEndpoints.Swagger/SwaggerDocTests.cs8 // don't forget to 'false' afterward. because if you don't you're always comparing against newly generated outpCOMMENT
LOW…rationTests/FastEndpoints.OpenApi/HttpSnapshotTests.cs7 // don't forget to 'false' afterward. because if you don't you're always comparing against newly generated outpCOMMENT
LOW…ntegrationTests/FastEndpoints.OpenApi/SnapshotTests.cs7 // don't forget to 'false' afterward. because if you don't you're always comparing against newly generated outpCOMMENT
LOWSrc/Security/JwtCreationOptions.cs43 /// <remarks>don't forget to set an appropriate <see cref="SigningAlgorithm" /> if changing to <see cref="TokenSigniCOMMENT
LOWSrc/Security/JwtCreationOptions.cs50 /// defaults to HmacSha256 for symmetric keys. don't forget to set an appropriate algorithm when changing <see cref=COMMENT
LOWSrc/Library/Config/ErrorOptions.cs25 /// if you're specifying your own <see cref="ResponseBuilder" />, don't forget to set this property to the correct tCOMMENT
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippetContext
LOWSrc/Library/Main/FeRequestHandler.cs9internal sealed class FeRequestHandler : IResultCODE