AI Slop Code Risk Monitor

remix-run/react-router

SlopCodeMonitor badge for remix-run/react-router Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Declarative routing for React

0.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for remix-run/react-router, a TypeScript project with 56,626 GitHub stars. SynthScan examined 295,821 lines of code across 1128 source files, recording 241 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 0.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.

0.9
Adjusted Signal
0.9
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
56.6K
Stars
TypeScript
Language
295.8K
Lines of Code
1.1K
Files
241
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 4.4/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

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

Agent Over-Engineering Ratio 2.7/100 · LOW

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

PR Review Velocity Impact 4.5/100 · LOW

Which changes need focused human review? 241 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 1MEDIUM 8LOW 231

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 241 distinct pattern matches across 8 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.

Hyper-Verbose Identifiers164 hits · 164 pts
SeverityFileLineSnippetContext
LOW…p/routes/client-loader-without-server-loader/route.tsx7export default function ClientLoaderWithoutServerLoaderRoute({CODE
LOW…p/routes/client-loader-without-server-loader/route.tsx7export default function ClientLoaderWithoutServerLoaderRoute({CODE
LOWintegration/prefetch-test.ts97function getRouteModulePreloadHrefs(fixture: Fixture, routeIds: string[]) {CODE
LOWintegration/prefetch-test.ts109function getInitialScriptsPreloadHrefs(fixture: Fixture, routeIds: string[]) {CODE
LOWintegration/rsc-client-version-test.ts85async function interceptWithStaleClientVersion(page: Page) {CODE
LOW⚡integration/split-route-modules-test.ts231async function splittableHydrateFallbackDownloaded(page: Page) {CODE
LOW⚡integration/split-route-modules-test.ts237async function unsplittableHydrateFallbackDownloaded(page: Page) {CODE
LOW⚡integration/split-route-modules-test.ts242async function mixedHydrateFallbackDownloaded(page: Page) {CODE
LOWintegration/vite-hmr-hdr-rsc-test.ts147 export function ImportedServerComponentClientMounted() {CODE
LOWintegration/vite-css-lazy-loading-test.ts178 export default function SiblingsWithLazyCssComponent() {CODE
LOWintegration/vite-css-lazy-loading-test.ts190 export default function WithStaticOnlyCssComponent() {CODE
LOWintegration/error-data-request-test.ts103 function assertLoggedErrorInstance(message: string) {CODE
LOWdocs/explanation/sessions-and-cookies.md334function createDatabaseSessionStorage({CODE
LOWscripts/docs.ts207function getReactRouterApiDocsVersion() {CODE
LOWscripts/docs.ts357function getDeclarationDescription(child: JSONOutput.DeclarationReflection) {CODE
LOWscripts/docs.ts415function generateMarkdownForComment(comment: SimplifiedComment): string {CODE
LOWscripts/release-comments.ts122async function commentOnPrAndLinkedIssues(pr: MergedPR, latest: Tag) {CODE
LOWscripts/release-comments.ts304function getIssuesLinkedToPullRequest(prHtmlUrl: string): Array<number> {CODE
LOWscripts/changes/validate.ts6function getMissingChangelogPackageDirNames(): string[] {CODE
LOWscripts/changes/version.ts160function formatWhatsChangedSection(content: string): string {CODE
LOWscripts/utils/packages.ts39 return function getNpmPackageNameToDirectoryMap(): Map<string, string> {CODE
LOWscripts/utils/packages.ts75export function packageNameToDirectoryName(packageName: string): string | null {CODE
LOWscripts/previews/branch.ts94async function updatePackageDependencies() {CODE
LOW…s/react-router-remix-routes-option-adapter/manifest.ts16export function routeManifestToRouteConfig(CODE
LOWpackages/create-react-router/loading-indicator.ts98function getGradientAnimationFrames() {CODE
LOWpackages/create-react-router/utils.ts307export async function getDirectoryFilesRecursive(dir: string) {CODE
LOWpackages/create-react-router/copy-template.ts86async function copyTemplateFromRemoteTarball(CODE
LOWpackages/create-react-router/copy-template.ts94async function copyTemplateFromGithubRepoShorthand(CODE
LOW⚡packages/create-react-router/copy-template.ts109async function copyTemplateFromGithubRepoUrl(CODE
LOW⚡packages/create-react-router/copy-template.ts117async function copyTemplateFromGenericUrl(CODE
LOW⚡packages/create-react-router/copy-template.ts125async function copyTemplateFromLocalFilePath(CODE
LOWpackages/create-react-router/copy-template.ts172async function downloadAndExtractRepoTarball(CODE
LOWpackages/create-react-router/copy-template.ts206async function downloadAndExtractTarball(CODE
LOWpackages/create-react-router/copy-template.ts349async function writeReadableStreamToWritable(CODE
LOWpackages/create-react-router/copy-template.ts427function getGithubReleaseAssetInfo(browserUrl: string): ReleaseAssetInfo {CODE
LOWpackages/create-react-router/index.ts246async function copyTemplateToTempDirStep(ctx: Context) {CODE
LOWpackages/create-react-router/index.ts314async function copyAgentSkillsToAppDirStep(ctx: Context) {CODE
LOWpackages/create-react-router/index.ts432async function installDependenciesQuestionStep(ctx: Context) {CODE
LOWpackages/react-router-fs-routes/flatRoutes.ts513export function getRoutePathConflictErrorMessage(CODE
LOWpackages/react-router-fs-routes/flatRoutes.ts532export function getRouteIdConflictErrorMessage(CODE
LOWpackages/react-router-fs-routes/manifest.ts16export function routeManifestToRouteConfig(CODE
LOWpackages/react-router-node/stream.ts4export async function writeReadableStreamToWritable(CODE
LOWpackages/react-router-node/stream.ts187export async function writeAsyncIterableToWritable(CODE
LOWpackages/react-router-node/__tests__/stream-test.ts15function createBackpressureSamplingWritable(CODE
LOWpackages/react-router-dev/config/routes.ts357export function configRoutesToRouteManifest(CODE
LOWpackages/react-router-dev/typegen/index.ts25async function clearRouteModuleAnnotations(ctx: Context) {CODE
LOWpackages/react-router-dev/vite/vite.ts70export function defineOptimizeDepsCompilerOptions(options: {CODE
LOWpackages/react-router-dev/vite/vite.ts86export function getUserBuildRollupOptions(CODE
LOWpackages/react-router-dev/vite/remove-exports.ts161function validateDestructuredExports(CODE
LOWpackages/react-router-dev/vite/plugin.ts171function isSsrBundleEnvironmentName(CODE
LOWpackages/react-router-dev/vite/plugin.ts192function isReactRouterServerEnvironment(CODE
LOWpackages/react-router-dev/vite/plugin.ts3228async function validateSsrFalsePrerenderExports(CODE
LOWpackages/react-router-dev/vite/plugin.ts3365function getRoutesByServerBundleId(CODE
LOWpackages/react-router-dev/vite/plugin.ts3415async function detectRouteChunksIfEnabled(CODE
LOWpackages/react-router-dev/vite/plugin.ts3649export async function getEnvironmentOptionsResolvers(CODE
LOWpackages/react-router-dev/vite/plugin.ts3865export function resolveEnvironmentsOptions(CODE
LOWpackages/react-router-dev/vite/plugin.ts3917function assertPrerenderPathsMatchRoutes(CODE
LOWpackages/react-router-dev/vite/plugin.ts3933function getPrerenderConcurrencyConfig(CODE
LOWpackages/react-router-dev/vite/plugin.ts3996function createResourceRouteRequest(CODE
LOWpackages/react-router-dev/vite/route-chunks.ts54function assertNodePathIsStatement(CODE
104 more matches not shown…
Over-Commented Block43 hits · 42 pts
SeverityFileLineSnippetContext
LOWCHANGELOG.md2441 // ^ cursor is here and you ask for autocompletionCOMMENT
LOWplayground/rsc-vite/src/routes/root/root.tsx41// return (COMMENT
LOWplayground/rsc-vite/src/routes/root/root.tsx61// );COMMENT
LOWplayground/rsc-vite/src/routes/root/root.tsx81// {" | "}COMMENT
LOWintegration/bug-report-test.ts21//COMMENT
LOWintegration/bug-report-test.ts41//COMMENT
LOWintegration/bug-report-test.ts121 // Go check out the other tests to see what else you can do.COMMENT
LOWintegration/helpers/vite-8-template/env.d.ts1/// <reference types="@react-router/node" />COMMENT
LOWintegration/helpers/vite-7-template/env.d.ts1/// <reference types="@react-router/node" />COMMENT
LOWpackages/react-router-dev/vite/plugin.ts381 isRootRouteCOMMENT
LOWpackages/react-router-dev/vite/plugin.ts2001 }COMMENT
LOWpackages/react-router/index.ts341// DANGER! PLEASE READ ME!COMMENT
LOWpackages/react-router/__tests__/router/fetchers-test.ts4261 root: "ROOT**",COMMENT
LOWpackages/react-router/lib/hooks.tsx801 // it will never match /blog/post/123 */}COMMENT
LOWpackages/react-router/lib/dom/lib.tsx101////////////////////////////////////////////////////////////////////////////////COMMENT
LOWpackages/react-router/lib/dom/lib.tsx3381 stripBasename(vtContext.currentLocation.pathname, basename) ||COMMENT
LOWpackages/react-router/lib/dom/ssr/single-fetch.tsx61}COMMENT
LOWpackages/react-router/lib/dom/ssr/single-fetch.tsx261 // SPA mode because we may load a SPA fallback page but then navigate intoCOMMENT
LOWpackages/react-router/lib/dom/ssr/single-fetch.tsx281 // - We opt out of revalidation automatically for routes with a `loader`COMMENT
LOWpackages/react-router/lib/dom/ssr/single-fetch.tsx461 }),COMMENT
LOWpackages/react-router/lib/dom/ssr/routes.tsx581 }COMMENT
LOWpackages/react-router/lib/router/router.ts1701 // replace with an optional submissionCOMMENT
LOWpackages/react-router/lib/router/router.ts4481COMMENT
LOWpackages/react-router/lib/router/utils.ts1961 `Cannot include a '${char}' character in a manually specified ` +COMMENT
LOWpackages/react-router/lib/router/utils.ts2041 let from: string;COMMENT
LOW.github/workflows/aw-comment-router.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6e4dccd86ee1b1616ec82523bae740eddc4d8e6653da39ec16caa3844b1COMMENT
LOW.github/workflows/aw-comment-router.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-comment-router.lock.yml41# - actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0COMMENT
LOW.github/workflows/aw-command-iterate.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"e336fe480b06a8803ced7a7f5e288e060b3f943027decc59f50cf705ae8COMMENT
LOW.github/workflows/aw-command-iterate.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-command-iterate.lock.yml41# - OPENAI_API_KEYCOMMENT
LOW.github/workflows/aw-command-review-proposal.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d895812522c59471d439f4988fec05189576ee43233c0935aa6a19f6ab2COMMENT
LOW.github/workflows/aw-command-review-proposal.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-command-review-proposal.lock.yml41# - SHOPIFY_AI_PROXYCOMMENT
LOW…thub/workflows/aw-command-review-pull-request.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"852c40c7c825a06668e56551f3dc30c12121dc6cd7a78b8051c4914fd24COMMENT
LOW…thub/workflows/aw-command-review-pull-request.lock.yml21# gh aw compileCOMMENT
LOW…thub/workflows/aw-command-review-pull-request.lock.yml41# - SHOPIFY_AI_PROXYCOMMENT
LOW.github/workflows/aw-command-review-issue.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"82baeae8246e058d8b8c6c669e384f10b72b553d02fa30a69fdcce383d5COMMENT
LOW.github/workflows/aw-command-review-issue.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-command-review-issue.lock.yml41# - SHOPIFY_AI_PROXYCOMMENT
LOW.github/workflows/aw-command-implement.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"34c9ad22618038a603f663c252a577d8845ee98854df9939debbe28aaedCOMMENT
LOW.github/workflows/aw-command-implement.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-command-implement.lock.yml41#COMMENT
AI Slop Vocabulary6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMscripts/docs.ts303 // to leverage the same description for the `@param` JSDoc tag. Mostly neededCOMMENT
MEDIUMpackages/react-router/lib/components.tsx1987// Indirection to leverage useAsyncValue for a render-prop API on `<Await>`COMMENT
MEDIUMpackages/react-router/lib/router/router.ts4493 // such as not being able to leverage `headers()`, or respectCOMMENT
MEDIUMpackages/react-router/lib/router/router.ts5701 // provide this value so they can leverage it if needed after they checkCOMMENT
MEDIUMpackages/react-router/lib/router/router.ts6675 // Opt-ing into the `shouldCallHandler` API changes some nuanced behaviorCOMMENT
MEDIUM.github/workflows/test-integration.yml3# Incrementally comprehensive based on the type of change:COMMENT
Overly Generic Function Names15 hits · 16 pts
SeverityFileLineSnippetContext
LOWintegration/vite-dev-custom-entry-test.ts17 export default function handleRequest(CODE
LOWintegration/server-entry-test.ts17 export default function handleRequest() {CODE
LOWintegration/single-fetch-test.ts1748 export default function handleRequest(CODE
LOWintegration/single-fetch-test.ts1844 export default function handleRequest(CODE
LOWintegration/single-fetch-test.ts4421 export default function handleRequest(CODE
LOWintegration/vite-spa-mode-test.ts200 export default function handleRequest(CODE
LOWintegration/vite-spa-mode-test.ts468 export default function handleRequest(CODE
LOWintegration/custom-entry-server-test.ts22 export default function handleRequest(CODE
LOWintegration/error-sanitization-test.ts494 export default function handleRequest(CODE
LOWintegration/middleware-test.ts2004 export default function handleRequest(CODE
LOW…/react-router-dev/config/defaults/entry.server.web.tsx8export default async function handleRequest(CODE
LOW…react-router-dev/config/defaults/entry.server.node.tsx12export default function handleRequest(CODE
LOWpackages/react-router/lib/dom/server.tsx134 * export async function handleRequest(request: Request) {COMMENT
LOWpackages/react-router/lib/dom/server.tsx337 * export async function handleRequest(request: Request) {COMMENT
LOWpackages/react-router/lib/router/router.ts4311 * export async function handleRequest(request: Request) {COMMENT
Structural Annotation Overuse9 hits · 14 pts
SeverityFileLineSnippetContext
LOWCHANGELOG.md2533// Step 1: Enable middlewareCOMMENT
LOWCHANGELOG.md2540// Step 2: Enable middleware typesCOMMENT
LOWCHANGELOG.md2555// Step 1: Enable middlewareCOMMENT
LOWdecisions/0016-plan-remove-agnostic-types.md49#### Step 1: Update `lib/router/utils.ts`COMMENT
LOWdecisions/0016-plan-remove-agnostic-types.md153#### Step 2: Update `lib/context.ts`COMMENT
LOWdecisions/0016-plan-remove-agnostic-types.md228#### Step 5: Update Helper FunctionsCOMMENT
LOWpackages/react-router-dev/CHANGELOG.md1069 // Step 1: Enable middlewareCOMMENT
LOWpackages/react-router-dev/CHANGELOG.md1076 // Step 2: Enable middleware typesCOMMENT
LOWpackages/react-router-dev/CHANGELOG.md1093 // Step 1: Enable middlewareCOMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALscripts/release-comments.ts386 return (parsed as IssueLabelsResult).data.repository.issue.labels.nodes.map(CODE
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGH…act-router/__tests__/router/utils/data-router-setup.ts236 // Enhance routes with loaders/actions as requested that will call theCOMMENT
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM.github/aw/README.md1# React Router agentic workflowsCOMMENT
MEDIUM.github/workflows/aw-comment-router.lock.yml26# Route administrator mentions to an agentic workflowCOMMENT