AI Slop Code Risk Monitor

immerjs/immer

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

Create the next immutable state by mutating the current one

1.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for immerjs/immer, a JavaScript project with 28,999 GitHub stars. SynthScan examined 46,637 lines of code across 107 source files, recording 37 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.4 (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.4
Adjusted Signal
1.4
Raw Pattern Score
100%
Time Factor
2026-10-22
Last Push
29.0K
Stars
JavaScript
Language
46.6K
Lines of Code
107
Files
37
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 4.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.0/100 · LOW

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

Agent Over-Engineering Ratio 0.6/100 · LOW

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

PR Review Velocity Impact 5.2/100 · LOW

Which changes need focused human review? 37 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 2LOW 34

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

Verbosity Indicators7 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡src/plugins/patches.ts51 // Step 1: Check if state has a stored keyCOMMENT
LOW⚡src/plugins/patches.ts53 // Step 2: Validate the key is still valid in parentCOMMENT
LOWsrc/plugins/patches.ts73 // Step 3: Handle Set case speciallyCOMMENT
LOWsrc/plugins/patches.ts85 // Step 4: Validate key still exists in parentCOMMENT
LOW⚡src/plugins/patches.ts102 // Step 5: Add key to pathCOMMENT
LOW⚡src/plugins/patches.ts106 // Step 6: Recurse to parent if existsCOMMENT
LOW⚡src/plugins/patches.ts111 // Step 7: At root - reverse path and validateCOMMENT
Structural Annotation Overuse7 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡src/plugins/patches.ts51 // Step 1: Check if state has a stored keyCOMMENT
LOW⚡src/plugins/patches.ts53 // Step 2: Validate the key is still valid in parentCOMMENT
LOWsrc/plugins/patches.ts73 // Step 3: Handle Set case speciallyCOMMENT
LOWsrc/plugins/patches.ts85 // Step 4: Validate key still exists in parentCOMMENT
LOW⚡src/plugins/patches.ts102 // Step 5: Add key to pathCOMMENT
LOW⚡src/plugins/patches.ts106 // Step 6: Recurse to parent if existsCOMMENT
LOW⚡src/plugins/patches.ts111 // Step 7: At root - reverse path and validateCOMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICAL__tests__/patch.js1593 draft.queries.queryKey.data.items.push({name: "item2"})CODE
Fake / Example Data9 hits · 9 pts
SeverityFileLineSnippetContext
LOW__performance_tests__/data.json5777 "about": "Laboris aliqua labore esse officia Lorem. Ad occaecat ullamco est quis cillum Lorem ipsum eu laboris velitCODE
LOW__performance_tests__/data.json7577 "about": "Ut labore consequat occaecat deserunt qui in. Lorem ipsum commodo culpa minim proident amet voluptate eiusCODE
LOW__performance_tests__/data.json8657 "about": "Eu est esse Lorem ipsum aute non labore qui id ad exercitation deserunt. Velit nulla nostrud laboris velitCODE
LOW__performance_tests__/data.json11537 "about": "Enim Lorem ipsum Lorem culpa officia ad et esse ullamco fugiat. Eiusmod non tempor quis ad eu elit magna aCODE
LOW__performance_tests__/data.json12977 "about": "Commodo consectetur occaecat non nostrud est sunt sunt incididunt mollit qui eiusmod laboris do esse. Et eCODE
LOW__performance_tests__/data.json16442 "about": "Commodo elit eu irure ex eu eiusmod ipsum et laboris enim dolore nulla fugiat enim. Excepteur non dolor anCODE
LOW__performance_tests__/data.json17342 "about": "Est veniam irure dolore aliquip ex. Dolore minim sunt eu voluptate aliqua. Enim elit cupidatat cupidatat lCODE
LOW__performance_tests__/data.json21707 "about": "Et ea veniam amet nisi labore enim elit. Mollit eu laborum nulla fugiat qui mollit dolor. Reprehenderit noCODE
LOW__performance_tests__/data.json23057 "about": "Fugiat ad eu eu dolor nisi occaecat velit proident velit nostrud enim. Adipisicing aute dolore aute exerciCODE
Hyper-Verbose Identifiers6 hits · 6 pts
SeverityFileLineSnippetContext
LOWsrc/core/finalize.ts169export function registerChildFinalizationCallback(CODE
LOWsrc/core/finalize.ts194function generatePatchesAndFinalize(state: ImmerState, rootScope: ImmerScope) {CODE
LOWsrc/plugins/patches.ts247 function generatePatchesFromAssigned(CODE
LOWsrc/plugins/arrayMethods.ts299 function handleReorderingOperation(CODE
LOWsrc/plugins/arrayMethods.ts440 function handleNonMutatingOperation(CODE
LOWsrc/utils/common.ts291function dontMutateFrozenCollections() {CODE
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWperf-testing/read-cpuprofile.js441// .map(([category, funcMap]) => {COMMENT
LOWperf-testing/read-cpuprofile.js461// .sort((a, b) => b[1] - a[1])COMMENT
LOWperf-testing/read-cpuprofile.js481// if (funcKey.includes("[unknown]")) {COMMENT
LOWperf-testing/read-cpuprofile.js501// uncategorizedStats.forEach(([func, samples]) => {COMMENT
LOWperf-testing/read-cpuprofile.js521COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM__tests__/regressions.js167 // That's roughly what seamless-immutable doesCOMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUM_site/readme/index.html241 Here is a simple example of the difference that Immer could make in practice.CODE