AI Slop Code RIsk Monitor

raineorshine/npm-check-updates

Find newer versions of package dependencies than what your package.json allows

11.0 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for raineorshine/npm-check-updates, a TypeScript project with 10,317 GitHub stars. SynthScan examined 48,443 lines of code across 293 source files, recording 103 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 11.0 (Moderate 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.

11.0
Adjusted Signal
11.0
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
10.3K
Stars
TypeScript
Language
48.4K
Lines of Code
293
Files
103
Pattern Hits
2026-10-12
Scan Date
0.28
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 2.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 41.1/100 · MEDIUM

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

Agent Over-Engineering Ratio 1.8/100 · LOW

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

PR Review Velocity Impact 41.5/100 · MEDIUM

Which changes need focused human review? 103 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 0HIGH 83MEDIUM 1LOW 19

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 103 distinct pattern matches across 4 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.

Cross-Language Confusion (JS/TS)83 hits · 512 pts
SeverityFileLineSnippetContext
HIGHtest/logging.test.ts286 print({ loglevel: 'silent' }, errorText(new Error('boom')), null, 'error'),CODE
HIGHtest/logging.test.ts295 print(CODE
HIGHsrc/index.ts51 print(lastRunOptions ?? {}, errorText(reason), null, 'error')CODE
HIGHsrc/index.ts84 print(options, message, 'error')CODE
HIGHsrc/index.ts128 print(options, '')CODE
HIGHsrc/index.ts153 print(options, '')CODE
HIGHsrc/index.ts171 print(options, '')CODE
HIGHsrc/index.ts173 print(options, 'Installing dependencies...')CODE
HIGH⚡src/index.ts213 print(options, stdout)CODE
HIGH⚡src/index.ts214 print(options, 'Done')CODE
HIGH⚡src/index.ts220 print(options, errorText(output), null, 'error')CODE
HIGHsrc/index.ts232 print(options, `\n${installHint}.`)CODE
HIGH⚡src/index.ts304 print(pkgOptions, '')CODE
HIGH⚡src/index.ts306 print(pkgOptions, `${pkgOptions.upgrade ? 'Upgrading' : 'Checking'} ${relPathToPackage} catalog dependencies`)CODE
HIGH⚡src/index.ts310 print(pkgOptions, '')CODE
HIGHsrc/index.ts358 print(options, '')CODE
HIGHsrc/index.ts398 print(options, 'Initializing', 'verbose')CODE
HIGHsrc/index.ts433 print(options, `Usage: ncu --doctor\n\n${help}`, 'warn')CODE
HIGHsrc/lib/doctor.ts300 print(options, style.red(errorText(e)), null, 'error')CODE
HIGHsrc/lib/initOptions.ts125 print(options, `Using config file ${options.rcConfigPath}`)CODE
HIGHsrc/lib/initOptions.ts141 print(options, style.yellow(deprecationMessage), 'warn')CODE
HIGHsrc/lib/initOptions.ts143 print(options, '', 'warn')CODE
HIGHsrc/lib/initOptions.ts247 print({ ...options, json }, message)CODE
HIGHsrc/lib/initOptions.ts298 print(resolvedOptionsFiltered, `Using ${packageManager}`)CODE
HIGHsrc/lib/runGlobal.ts13 print(options, '\nOptions:', 'verbose')CODE
HIGHsrc/lib/runGlobal.ts16 print(options, '\nGetting installed packages', 'verbose')CODE
HIGH⚡src/lib/runGlobal.ts36 print(options, 'globalPackages:', 'verbose')CODE
HIGH⚡src/lib/runGlobal.ts37 print(options, globalPackages, 'verbose')CODE
HIGH⚡src/lib/runGlobal.ts38 print(options, '', 'verbose')CODE
HIGH⚡src/lib/runGlobal.ts39 print(options, `Fetching ${options.target} versions`, 'verbose')CODE
HIGH⚡src/lib/runGlobal.ts42 print(options, latest, 'verbose')CODE
HIGHsrc/lib/runGlobal.ts74 print(CODE
HIGHsrc/lib/programError.ts21 print(options, color ? style.red(safe) : safe, null, 'error')CODE
HIGHsrc/lib/getPeerDependenciesFromRegistry.ts92 print(options, `\nFailed to get the peer dependencies of ${pkg}@${version}:\n${errorText(err)}`, 'verbose')CODE
HIGHsrc/lib/getPeerDependenciesFromRegistry.ts122 print(CODE
HIGHsrc/lib/runLocal.ts114 print(options, '')CODE
HIGHsrc/lib/runLocal.ts171 print(options, '\nOptions:', 'verbose')CODE
HIGHsrc/lib/runLocal.ts191 print(options, '\nCurrent versions:', 'verbose')CODE
HIGHsrc/lib/runLocal.ts192 print(options, current, 'verbose')CODE
HIGH⚡src/lib/runLocal.ts223 print(options, '\nupgradedPeerDependencies:', 'verbose')CODE
HIGH⚡src/lib/runLocal.ts224 print(options, upgradedPeerDependencies, 'verbose')CODE
HIGH⚡src/lib/runLocal.ts227 print(CODE
HIGH⚡src/lib/runLocal.ts234 print(options, latest, 'verbose')CODE
HIGH⚡src/lib/runLocal.ts236 print(options, '\nUpgraded versions:', 'verbose')CODE
HIGH⚡src/lib/runLocal.ts237 print(options, upgraded, 'verbose')CODE
HIGHsrc/lib/runLocal.ts331 print(options, upgradeHint)CODE
HIGHsrc/lib/cache.ts129 print(CODE
HIGHsrc/lib/cache.ts134 print(options, cacheHits, 'verbose')CODE
HIGHsrc/lib/findPackage.ts34 print(options, `${options.upgrade ? 'Upgrading' : 'Checking'} ${relPathToPackage}`)CODE
HIGH⚡src/lib/findPackage.ts56 print(options, 'Running in local mode', 'verbose')CODE
HIGH⚡src/lib/findPackage.ts57 print(options, 'Finding package file data', 'verbose')CODE
HIGH⚡src/lib/findPackage.ts67 print(options, 'Waiting for package data on stdin', 'verbose')CODE
HIGH⚡src/lib/logging.ts403 print(options, '\n' + heading)CODE
HIGH⚡src/lib/logging.ts404 print(options, table)CODE
HIGH⚡src/lib/logging.ts410 print(CODE
HIGH⚡src/lib/logging.ts486 print(options, '\n' + style.blue(style.bold('Updates')))CODE
HIGH⚡src/lib/logging.ts488 print(options, '')CODE
HIGH⚡src/lib/logging.ts497 print(options, 'No dependencies.')CODE
HIGH⚡src/lib/logging.ts506 print(CODE
HIGH⚡src/lib/logging.ts515 print(options, `All global packages are up-to-date ${smiley}`)CODE
23 more matches not shown…
Hyper-Verbose Identifiers18 hits · 18 pts
SeverityFileLineSnippetContext
LOWsrc/lib/getIgnoredUpgradesDueToEnginesNode.ts17export async function getIgnoredUpgradesDueToEnginesNode(CODE
LOWsrc/lib/version-util.ts478export function upgradeDependencyDeclaration(CODE
LOWsrc/lib/upgradePackageDefinitions.ts84export async function upgradePackageDefinitions(CODE
LOWsrc/lib/lockfiles.ts19export function packageManagerForLockfile(filename: string): PackageManagerName | null {CODE
LOWsrc/lib/resolveDistTagsInPeerDependencies.ts36async function resolveDistTagsInPeerDependencies(CODE
LOWsrc/lib/getDevEnginesPackageManagers.ts10export default function getDevEnginesPackageManagers(pkg: PackageFile): DevEnginesPackageManager[] {CODE
LOWsrc/lib/upgradeJsonCatalogDependencies.ts15export async function upgradeJsonCatalogDependencies(CODE
LOWsrc/lib/getPeerDependenciesFromRegistry.ts59async function getPeerDependenciesFromRegistry(packageMap: Index<Version>, options: Options) {CODE
LOWsrc/lib/queryVersions.ts39 async function getPackageVersionProtected(dep: VersionSpec): Promise<VersionResult> {CODE
LOWsrc/lib/upgradePackageData.ts31function replaceDependencySections(CODE
LOWsrc/lib/getEnginesNodeFromRegistry.ts16async function getEnginesNodeFromRegistry(packageMap: Index<Version>, options: Options) {CODE
LOWsrc/lib/upgradeYamlCatalogDependencies.ts146export function updateYamlCatalogDependencies({CODE
LOWsrc/lib/upgradeYamlCatalogDependencies.ts189export function updateYamlCatalogDependenciesAll({CODE
LOWsrc/lib/getIgnoredUpgradesDueToPeerDeps.ts12export async function getIgnoredUpgradesDueToPeerDeps(CODE
LOW⚡src/lib/logging.ts561export function printIgnoredUpdatesDueToEnginesNode(CODE
LOWsrc/lib/logging.ts301async function printSkippedByCooldownTable({CODE
LOWsrc/lib/logging.ts544export function printIgnoredUpdatesDueToPeerDeps(options: Options, ignoredUpdates: Index<IgnoredUpgradeDueToPeerDeps>) {CODE
LOWsrc/package-managers/filters.ts16export function allowDeprecatedOrIsNotDeprecated(versionResult: Partial<Packument>, options: Options): boolean {CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtest/e2e.sh120# Create a package.json file with a dependency on npm-check-updates since it is already published to the local registryCOMMENT
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/bin/cli.ts21 //COMMENT