AI Slop Code Risk Monitor

remix-run/remix

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

The fully-stacked web framework

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for remix-run/remix, a TypeScript project with 33,437 GitHub stars. SynthScan examined 431,453 lines of code across 2337 source files, recording 679 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.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.

1.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
33.4K
Stars
TypeScript
Language
431.5K
Lines of Code
2.3K
Files
679
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 7.4/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.3/100 · LOW

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

Agent Over-Engineering Ratio 6.9/100 · LOW

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

PR Review Velocity Impact 8.6/100 · LOW

Which changes need focused human review? 679 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 8HIGH 1MEDIUM 10LOW 660

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 679 distinct pattern matches across 9 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 Identifiers590 hits · 605 pts
SeverityFileLineSnippetContext
LOW.agents/skills/write-api-docs/SKILL.md87export function createCredentialsAuthProvider(...) {}CODE
LOWdocs/shared/ui/docs-header.tsx22export function createDocsNavigationLinks(): Map<DocsNavigationLinkId, DocsNavigationLink> {CODE
LOWdocs/shared/ui/table-of-contents.test.browser.tsx99function createTableOfContentsFixture(options: { startBehavior?: boolean } = {}) {CODE
LOWdocs/shared/ui/public/selection-indicator.ts4export function positionSelectionIndicator(container: HTMLElement, selected: HTMLElement): void {CODE
LOWdocs/shared/ui/public/code-block-copy.tsx21function startCodeBlockCopyBehavior(root: HTMLElement, signal: AbortSignal) {CODE
LOWdocs/shared/ui/public/docs-shell.tsx107 function updateNavigationScrollable() {CODE
LOWdocs/shared/ui/public/docs-shell.tsx145 function toggleMobileSecondaryNavigation() {CODE
LOW⚡docs/shared/ui/public/docs-shell.tsx156 function closeMobileSecondaryNavigationFromLink(event: MouseEvent) {CODE
LOW⚡docs/shared/ui/public/docs-shell.tsx162 function closeMobileNavigationAfterNavigation() {CODE
LOW⚡docs/shared/ui/public/docs-shell.tsx167 function closeMobileNavigationFromKeyboard(event: KeyboardEvent) {CODE
LOWdocs/shared/ui/public/docs-shell.tsx220 function updateMobileNavigationTop() {CODE
LOWdocs/shared/ui/public/table-of-contents.tsx24export function startTableOfContentsBehavior(list: HTMLOListElement, signal: AbortSignal) {CODE
LOWdocs/shared/markdown/code-blocks.ts89export async function renderHighlightedCodeBlock(CODE
LOWdocs/shared/markdown/code-blocks.ts145export function readCodeBlockMetaParameter(meta: string, key: string): string | undefined {CODE
LOWdocs/shared/markdown/parser.ts69export function getMarkdownLinkDestinations(source: string): MarkdownLinkDestination[] {CODE
LOWdocs/shared/markdown/parser.ts88export function rewriteMarkdownLinkDestinations(CODE
LOWdocs/shared/markdown/headings.ts51export function readMarkdownHeadingsFromRoot(root: Root): MarkdownHeading[] {CODE
LOWdocs/shared/prerender/public-modules.ts5export async function discoverPublicModuleHrefs(CODE
LOWdocs/shared/prerender/crawl.ts126function createStaticRedirectResponse(location: string): Response {CODE
LOWdocs/shared/prerender/bench/src/html-parser.bench.ts30function extractLinksAndAssetsNodeHtml(root: NodeHTMLElement): {CODE
LOWdocs/site/app/actions/guides/markdown-chapters.tsx79export async function docsChapterMarkdownHandler(context: DocsChapterRouteContext) {CODE
LOWdocs/site/app/actions/guides/markdown-chapters.tsx266function createDocsNavigationItems(CODE
LOWdocs/site/app/actions/guides/markdown/frames.ts10export function readMarkdownFrameReferences(source: string): MarkdownFrameReference[] {CODE
LOWdocs/site/app/actions/guides/markdown/render.tsx24export function readMarkdownChapterSummary(CODE
LOW…ctivity/public/controlled-uncontrolled-inputs.demo.tsx6export function ControlledUncontrolledInputs(handle: Handle) {CODE
LOWdocs/site/app/actions/reference/controller.tsx95export function createReferenceController(options: ReferenceControllerOptions) {CODE
LOWdocs/site/app/data/markdown.ts151function createApiCodeLinkTransformer(CODE
LOWdocs/site/app/data/registry.ts292function getOrSet<key, value>(map: Map<key, value>, key: key, init: () => value): value {CODE
LOWdocs/site/scripts/generate/markdown.ts209async function getInterfaceFunctionMarkdown(comment: DocumentedInterfaceFunction): Promise<string> {CODE
LOWdocs/site/scripts/generate/markdown.ts242async function getVariableFunctionMarkdown(comment: DocumentedVariableFunction): Promise<string> {CODE
LOWdocs/site/scripts/generate/typedoc.ts178function warnOnCrossPackageCollisions(apisToDocument: Set<string>): void {CODE
LOWdocs/site/scripts/generate/packages.ts75async function discoverPackageSubpathOverviews(CODE
LOWdocs/site/scripts/generate/packages.ts108export async function writePackageOverviewFiles(overviews: PackageOverview[], docsDir: string) {CODE
LOWdocs/site/scripts/generate/packages.ts152function shouldUsePackageReadmeForSubpath(packageName: string, exportSubpath: string): boolean {CODE
LOWdocs/site/scripts/generate/packages.ts211function warnOnInvalidReadmeSyntax(markdown: string, readmePath: string) {CODE
LOWdocs/site/scripts/generate/packages.ts240function warnOnInvalidReadmeCodeFenceSyntax(CODE
LOWdocs/site/scripts/generate/packages.ts262function hasUmbrellaImportSpecifier(code: string): boolean {CODE
LOWdocs/site/scripts/generate/packages.ts272function hasUmbrellaInstallSpecifier(code: string): boolean {CODE
LOWdocs/site/scripts/generate/documented-api.ts210function getDocumentedInterfaceFunction(CODE
LOWdocs/site/scripts/generate/documented-api.ts392function getVariableCallSignatures(CODE
LOWdocs/site/scripts/generate/documented-api.ts467function getDocumentedVariableFunction(CODE
LOWdocs/site/scripts/generate/documented-api.ts589function getApiPropertiesAndMethods(CODE
LOWdocs/site/scripts/generate/documented-api.ts750function getApiParameterOrProperty(CODE
LOWdocs/site/scripts/generate/documented-api.ts820function warnOnInvalidImportSyntax(api: DocumentedAPI) {CODE
LOWscripts/changes-validate.ts6function getMissingChangelogPackageDirNames(): string[] {CODE
LOWscripts/publish.ts170async function getPublishedPackagesMissingTags(): Promise<PublishedPackage[]> {CODE
LOWscripts/publish.ts203async function getPublishedPackagesMissingReleases(): Promise<PublishedPackage[]> {CODE
LOWscripts/publish.ts263function ensureGitHistoryForVersionLookup() {CODE
LOWscripts/setup-installable-branch.ts112async function updatePackageDependencies() {CODE
LOWscripts/generate-remix.ts221function getSourceFileForManifestEntry(remixPath: string, specifier: string): string {CODE
LOWscripts/generate-remix.ts233function getGeneratedSideEffectFiles(): string[] {CODE
LOWscripts/generate-remix.ts519async function getExportClassificationForSpecifier(CODE
LOWscripts/generate-remix.ts531function getPackageSideEffectsForSpecifier(CODE
LOWscripts/generate-remix.ts573async function getPackageExportClassification(CODE
LOWscripts/validate-package-meta.ts194function validatePackageDescriptions(packageInfos: PublishedPackageInfo[]): string[] {CODE
LOWscripts/validate-package-meta.ts202function validateExplicitConsumerDependencyRanges(packageInfos: PublishedPackageInfo[]): string[] {CODE
LOWscripts/validate-package-meta.ts225function validateConsumerDependencyRangesMatchCatalog(CODE
LOWscripts/validate-package-meta.ts254function validateConsistentConsumerDependencyRanges(CODE
LOWscripts/postinstall.ts60function getPlaywrightInstallLocations(): string[] {CODE
LOW⚡scripts/postinstall.ts89function isPlaywrightBrowserInstalled(installLocation: string): boolean {CODE
530 more matches not shown…
Hallucination Indicators8 hits · 80 pts
SeverityFileLineSnippetContext
CRITICALdocs/site/scripts/validate-guides.ts75 `Frame source must match ${routes.guides.examples.show.pattern.toString()}: ${frame.src}`,CODE
CRITICALpackages/auth/README.md116 return redirect(routes.auth.session.login.index.href())CODE
CRITICALpackages/auth/README.md129 return redirect(routes.auth.session.login.index.href())CODE
CRITICALpackages/remix/src/auth/README.md116 return redirect(routes.auth.session.login.index.href())CODE
CRITICALpackages/remix/src/auth/README.md129 return redirect(routes.auth.session.login.index.href())CODE
CRITICALdemos/frame-navigation/app/app.test.e2e.ts259 new URL(request.url()).pathname === routes.main.account.edit.action.href(),CODE
CRITICAL…e-navigation/app/actions/main/account/account-page.tsx42 href={routes.main.account.edit.index.href()}CODE
CRITICAL…navigation/app/actions/main/account/edit/edit-page.tsx29 <form method="POST" action={routes.main.account.edit.action.href()} mix={formStyle}>CODE
Over-Commented Block43 hits · 43 pts
SeverityFileLineSnippetContext
LOWdocs/shared/prerender/utils.ts41 await fs.writeFile(outputPath, new Uint8Array(await response.arrayBuffer()))COMMENT
LOWdocs/site/scripts/generate/typedoc.ts221// Module = 2,COMMENT
LOWdocs/site/scripts/generate/typedoc.ts241// TypeAlias = 2097152,COMMENT
LOWpackages/tar-parser/src/lib/tar.ts261 let allowUnknownFormat = options?.allowUnknownFormat ?? trueCOMMENT
LOWpackages/tar-parser/src/lib/tar.ts461 #entryCount = 0COMMENT
LOWpackages/component/src/style/stylesheet.ts1import { REMIX_UI_STYLE_LAYER } from './layers.ts'COMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml1#:schema node_modules/wrangler/config-schema.jsonCOMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml21COMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml41# database_name = "my-database"COMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml61# new_classes = ["MyDurableObject"]COMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml81# Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer.COMMENT
LOW…ckages/multipart-parser/demos/cf-workers/wrangler.toml101# binding = "MY_SERVICE"COMMENT
LOWpackages/multipart-parser/src/lib/multipart.ts241 */COMMENT
LOWpackages/multipart-parser/src/lib/future/multipart.ts101COMMENT
LOWpackages/fetch-router/README.md521})COMMENT
LOWpackages/fetch-router/README.md541type Routes = typeof routesCOMMENT
LOWpackages/fetch-router/README.md601// index: Route<'GET', '/users'> - Lists all usersCOMMENT
LOW…etch-router/demos/cf-workers/worker-configuration.d.ts8221// The message includes metadata about the broker, the client, and the payloadCOMMENT
LOW…etch-router/demos/cf-workers/worker-configuration.d.ts8341 type MaybeProvider<T> = T extends object ? Provider<T> : unknown;COMMENT
LOW…etch-router/demos/cf-workers/worker-configuration.d.ts8361 // Base type for all other types providing RPC-like interfaces.COMMENT
LOW…etch-router/demos/cf-workers/worker-configuration.d.ts8381 //COMMENT
LOW…etch-router/demos/cf-workers/worker-configuration.d.ts8681 readonly type: "attributes";COMMENT
LOWpackages/remix/src/fetch-router/README.md521})COMMENT
LOWpackages/remix/src/fetch-router/README.md541type Routes = typeof routesCOMMENT
LOWpackages/remix/src/fetch-router/README.md601// index: Route<'GET', '/users'> - Lists all usersCOMMENT
LOW.github/workflows/aw-comment-router.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"5f77807cd19a30ef00ec51377a0a2c15c56c74f2c88dd97ce7353d18777COMMENT
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":"bb5a023f950d5442ff291a145458f6ea9fb64aaa2fdfb7634905346ef29COMMENT
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":"123b6777e0e3755f6d66bed1610e7d819dbf44374d31d3675ddb37ebe30COMMENT
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":"0ad014ce8de442177123deb2d78a1d4531923e948cc2ccf338e4f23ba1cCOMMENT
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":"f09945cd11365d6874e86ceed22bafc607ab51b9100ab0d60ee9ad12bfbCOMMENT
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":"fa335576fa81db43a28038970f17e0816b62d85257cc046589d2ebf535dCOMMENT
LOW.github/workflows/aw-command-implement.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/aw-command-implement.lock.yml41#COMMENT
Fake / Example Data25 hits · 28 pts
SeverityFileLineSnippetContext
LOW.agents/skills/write-ui-examples/SKILL.md27- Choose the scenario and content together. A compact set of familiar statuses can make a filter list self-explanatory. CODE
LOWpackages/auth/src/lib/test-utils.ts58 sub: 'fake-user',CODE
LOWpackages/auth/src/lib/providers/oidc.test.ts257 email: 'user@example.com',CODE
LOWpackages/auth/src/lib/providers/oidc.test.ts293 email: 'user@example.com',CODE
LOWpackages/data-schema/src/lib/checks.test.ts46 let ok = schema['~standard'].validate('user@example.com')CODE
LOWpackages/data-table-sqlite/src/lib/sql-compiler.test.ts347 .where(or({ status: 'enabled' }, { email: 'admin@example.com' }))CODE
LOWpackages/data-table-sqlite/src/lib/sql-compiler.test.ts353 values: ['enabled', 'admin@example.com'],CODE
LOWpackages/data-table/src/lib/sql.ts21 * let email = 'user@example.com'COMMENT
LOWpackages/data-table/src/lib/sql.ts23 * // => { text: 'select * from users where email = ?', values: ['user@example.com'] }COMMENT
LOWpackages/data-table/src/lib/operators.test.ts246 let input = 'user@example.com'CODE
LOWdemos/bookstore/app/actions/account/controller.test.ts32 assertContains(html, 'John Doe')CODE
LOW⚡demos/bookstore/db/seed.sql14 (2, 'customer@example.com', 'pbkdf2_sha256$100000$R-GBp6yHQBgiqGkXZm70IQ$PmYoRXgmMoFYh2ONKFQ-KDg-QvfPAfBduyMlsX7tveA',CODE
LOW⚡demos/bookstore/db/seed.sql17 (1001, 2, 45.98, 'delivered', '{"street":"123 Main St","city":"Boston","state":"MA","zip":"02101"}', 1726358400000),CODE
LOW⚡demos/bookstore/db/seed.sql18 (1002, 2, 54.0, 'shipped', '{"street":"123 Main St","city":"Boston","state":"MA","zip":"02101"}', 1727740800000);CODE
LOWdemos/social-auth/app/db.test.ts14 let admin = await db.findOne(users, { where: { email: 'admin@example.com' } })CODE
LOWdemos/social-auth/app/db.test.ts15 let user = await db.findOne(users, { where: { email: 'user@example.com' } })CODE
LOWdemos/social-auth/app/db.test.ts26 let admin = await db.findOne(users, { where: { email: 'admin@example.com' } })CODE
LOWdemos/social-auth/app/router.test.ts40 body: new URLSearchParams({ email: 'user@example.com', password: 'password123' }),CODE
LOWdemos/social-auth/app/router.test.ts64 body: new URLSearchParams({ email: 'user@example.com', password: 'wrong-password' }),CODE
LOWdemos/social-auth/app/router.test.ts205 body: new URLSearchParams({ email: 'user@example.com' }),CODE
LOWdemos/social-auth/app/router.test.ts232 body: new URLSearchParams({ email: 'user@example.com', password: 'newpassword123' }),CODE
LOWdemos/social-auth/app/router.test.ts243 body: new URLSearchParams({ email: 'user@example.com', password: 'password123' }),CODE
LOW…al-auth/app/actions/auth/resolve-external-auth.test.ts19 email: 'user@example.com',CODE
LOWdemos/social-auth/db/seed.sql7 (1, 'admin@example.com', 'pbkdf2_sha256$100000$_QBCG3pPbKgGCIvh7Xat2A$cIkwiKE-rAEVcKacgbtYL5l2ab5lrQKiIkXPCry38Xo', 'DCODE
LOWdemos/social-auth/db/seed.sql8 (2, 'user@example.com', 'pbkdf2_sha256$100000$rSZlEp0rbzaRXm8aefQWpA$vU8GiCvUW0Q3qwJHsOY3rv42iiFHaKfVQmkXtdYYPWA', 'DeCODE
Decorative Section Separators5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMpackages/test/src/test/framework.test.ts23// ── describe ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/test/src/test/framework.test.ts191// ── it ────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/test/src/test/framework.test.ts328// ── Duplicate detection ───────────────────────────────────────────────────────COMMENT
MEDIUMpackages/test/src/test/framework.test.ts384// ── Aliases ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/test/src/test/framework.test.ts398// ── Lifecycle hooks ───────────────────────────────────────────────────────────COMMENT
Modern AI Meta-Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMdocs/site/app/actions/guides/chapters/01-start-here.md70Your new app includes an [Agent Skill](https://agentskills.io), a folder of instructions that coding agents load when thCODE
MEDIUMpackages/remix/guides/01-start-here.md70Your new app includes an [Agent Skill](https://agentskills.io), a folder of instructions that coding agents load when thCODE
MEDIUM.github/workflows/aw-comment-router.lock.yml26# Route administrator mentions to an agentic workflowCOMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMpackages/test/src/lib/framework.ts101// We implement this standalone so we can leverage multiple signatures throughCOMMENT
MEDIUMpackages/test/src/lib/framework.ts157// We implement this standalone so we can leverage multiple signatures throughCOMMENT
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/cli/src/lib/completion.ts136elif type compdef &>/dev/null; thenCODE
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpackages/component-hmr/test/hmr.test.e2e.tsx2533async function handleRequest(CODE
LOWpackages/assets/test/hmr.test.e2e.tsx2506async function handleRequest(CODE