AI Slop Code Risk Monitor

evanw/esbuild

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

An extremely fast bundler for the web

1.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for evanw/esbuild, a Go project with 40,120 GitHub stars. SynthScan examined 254,699 lines of code across 325 source files, recording 366 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.6 (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.6
Adjusted Signal
1.6
Raw Pattern Score
100%
Time Factor
2026-08-09
Last Push
40.1K
Stars
Go
Language
254.7K
Lines of Code
325
Files
366
Pattern Hits
2026-10-31
Scan Date
0.02
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.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.0/100 · LOW

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

Agent Over-Engineering Ratio 0.2/100 · LOW

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

PR Review Velocity Impact 8.0/100 · LOW

Which changes need focused human review? 366 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 5HIGH 0MEDIUM 7LOW 354

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 366 distinct pattern matches across 7 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 Block293 hits · 258 pts
SeverityFileLineSnippetContext
LOWCHANGELOG-2023.md241 #fffb77 40.62%,COMMENT
LOWcmd/esbuild/service.go721 build.OnEnd(func(result *api.BuildResult) (api.OnEndResult, error) {COMMENT
LOWcmd/esbuild/main.go321 }COMMENT
LOWinternal/js_lexer/js_lexer.go1package js_lexerCOMMENT
LOWinternal/js_lexer/js_lexer.go221// resolved to a symbol in the second pass. To avoid allocating extra memoryCOMMENT
LOWinternal/js_lexer/js_lexer.go1701 }COMMENT
LOWinternal/sourcemap/sourcemap.go641 return ChunkBuilder{COMMENT
LOWinternal/logger/logger.go401 base = base[:dot]COMMENT
LOWinternal/logger/logger.go441COMMENT
LOWinternal/cache/cache.go1package cacheCOMMENT
LOWinternal/cache/cache.go21// - The information in the cache must not depend at all on the contents ofCOMMENT
LOWinternal/linker/linker.go101 // This is the final path of this chunk relative to the output directory. ItCOMMENT
LOWinternal/linker/linker.go541COMMENT
LOWinternal/linker/linker.go1401 switch record.Kind {COMMENT
LOWinternal/linker/linker.go1901 // This is an external import. Check if it will be a "require()" call.COMMENT
LOWinternal/linker/linker.go1961 // by modifying the exports object itself because the same ESCOMMENT
LOWinternal/linker/linker.go2221 // shaking by letting you only import part of a JSON file.COMMENT
LOWinternal/linker/linker.go2421 }COMMENT
LOWinternal/linker/linker.go2641 // Make sure we avoid infinite loops trying to resolve cycles:COMMENT
LOWinternal/linker/linker.go2721 symbol := c.graph.Symbols.Get(tracker.importRef)COMMENT
LOWinternal/linker/linker.go2741COMMENT
LOWinternal/linker/linker.go3301 part.IsLive = trueCOMMENT
LOWinternal/linker/linker.go3381COMMENT
LOWinternal/linker/linker.go3401//COMMENT
LOWinternal/linker/linker.go3621 // The layer is anonymous if it's a "layer" token without anyCOMMENT
LOWinternal/linker/linker.go3641 }COMMENT
LOWinternal/linker/linker.go3701 for j := len(duplicates) - 1; j >= 0; j-- {COMMENT
LOWinternal/linker/linker.go3781 if !css_ast.TokensEqualIgnoringWhitespace(ai.Layers, bi.Layers) ||COMMENT
LOWinternal/linker/linker.go3801// @import "lib.css" screen;COMMENT
LOWinternal/linker/linker.go3841 continueCOMMENT
LOWinternal/linker/linker.go4741 // }COMMENT
LOWinternal/linker/linker.go5061 } else {COMMENT
LOWinternal/linker/linker.go5081 // when "file-from-esbuild.cjs" looks like this:COMMENT
LOWinternal/linker/linker.go5201 // Exports of imports need EImportIdentifier in case they need to be re-COMMENT
LOWinternal/linker/linker.go5221 //COMMENT
LOWinternal/linker/linker.go5261 // // esm-format.jsCOMMENT
LOWinternal/linker/linker.go5461 }COMMENT
LOWinternal/linker/linker.go5521 nestedScopes[sourceIndex] = []*js_ast.Scope{repr.AST.ModuleScope}COMMENT
LOWinternal/linker/linker.go6881 bytes := chunk.intermediateOutput.joiner.Done()COMMENT
LOWinternal/linker/linker.go7041 // better readability and to be independent of build directory.COMMENT
LOWinternal/config/config.go281}COMMENT
LOWinternal/config/config.go301 // ... bundled code ...COMMENT
LOWinternal/config/config.go401 ModuleTypeData js_ast.ModuleTypeDataCOMMENT
LOWinternal/config/config.go521 TSImportsNotUsedAsValues_PreserveCOMMENT
LOWinternal/config/config.go541// "import { type unused } from 'foo'" => ""COMMENT
LOWinternal/config/globals.go21// "if (a) console.log(b); else console.log(c)" to be reordered and transformedCOMMENT
LOWinternal/config/globals.go421 {"SVGTransform"},COMMENT
LOWinternal/config/globals.go901 {"stop"},COMMENT
LOWinternal/js_printer/js_printer.go1661// This function returns "nil" to indicate that the expression should be removedCOMMENT
LOWinternal/js_ast/js_ast.go1package js_astCOMMENT
LOWinternal/js_ast/js_ast.go261)COMMENT
LOWinternal/js_ast/js_ast.go381 // decorators on it. Note that this flag is not necessarily set to true ifCOMMENT
LOWinternal/js_ast/js_ast.go501 IsParenthesized boolCOMMENT
LOWinternal/js_ast/js_ast.go521 // Similarly the expression "delete (0, x)" must not become "delete x"COMMENT
LOWinternal/js_ast/js_ast.go721 // If we're inside a "with" statement, this identifier may be a propertyCOMMENT
LOWinternal/js_ast/js_ast.go741// Depending on how the code is linked, the file containing this EImportIdentifierCOMMENT
LOWinternal/js_ast/js_ast.go781type EJSXElement struct {COMMENT
LOWinternal/js_ast/js_ast.go1181// import defaultItem, {item1, item2} from 'path'COMMENT
LOWinternal/js_ast/js_ast.go1341 }COMMENT
LOWinternal/js_ast/js_ast.go1361//COMMENT
233 more matches not shown…
Hallucination Indicators5 hits · 50 pts
SeverityFileLineSnippetContext
CRITICALinternal/bundler/bundler.go2434 sb.Write(helpers.QuoteForJSON(result.file.inputFile.Source.PrettyPaths.Select(s.options.MetafilePathStyle), s.optionsCODE
CRITICALinternal/bundler/bundler.go2701 if attrs := result.file.inputFile.Source.KeyPath.ImportAttributes.DecodeIntoArray(); len(attrs) > 0 {CODE
CRITICALinternal/bundler/bundler.go2786 helpers.QuoteForJSON(result.file.inputFile.Source.PrettyPaths.Select(s.options.MetafilePathStyle), s.options.ASCIIOCODE
CRITICALinternal/bundler/bundler.go2793 helpers.QuoteForJSON(result.file.inputFile.Source.PrettyPaths.Select(s.options.MetafilePathStyle), s.options.ASCIICODE
CRITICALinternal/bundler/bundler.go2925 parentResult.file.inputFile.Source.PrettyPaths.Select(s.options.LogPathStyle),CODE
Structural Annotation Overuse22 hits · 38 pts
SeverityFileLineSnippetContext
LOWinternal/renamer/renamer.go182 // NOTE: This function is run in parallel. Make sure to avoid data races.COMMENT
LOWinternal/renamer/renamer.go195 // NOTE: This function is run in parallel. Make sure to avoid data races.COMMENT
LOWinternal/linker/linker.go1298 // Step 1: Figure out what modules must be CommonJSCOMMENT
LOWinternal/linker/linker.go1467 // Step 2: Propagate dynamic export status for export star statements thatCOMMENT
LOWinternal/linker/linker.go1504 // Step 3: Resolve "export * from" statements. This must be done after weCOMMENT
LOWinternal/linker/linker.go1537 // Step 4: Match imports with exports. This must be done after we process allCOMMENT
LOWinternal/linker/linker.go1570 // Step 5: Create namespace exports for every file. This is always necessaryCOMMENT
LOWinternal/linker/linker.go1762 // Step 6: Bind imports to exports. This adds non-local dependencies on theCOMMENT
LOWinternal/js_parser/js_parser_lower.go504 // Step 1: Get an array of all expressions in the chain. We're traversing theCOMMENT
LOWinternal/js_parser/js_parser_lower.go583 // Step 2: Figure out if we need to capture the value for "this" for theCOMMENT
LOW⚡internal/js_parser/js_parser_lower.go660 // Step 3: Figure out if we need to capture the starting value. We don't needCOMMENT
LOW⚡internal/js_parser/js_parser_lower.go668 // Step 4: Wrap the starting value by each expression in the chain. WeCOMMENT
LOWinternal/js_parser/js_parser_lower.go774 // Step 5: Wrap it all in a conditional that returns the chain or the defaultCOMMENT
LOWscripts/test262.js223 // Step 1: Try transforming the file normallyCOMMENT
LOW⚡scripts/test262.js241 // Step 2: Try transforming the output again (this should always succeed)COMMENT
LOW⚡scripts/test262.js250 // Step 3: The output should be the same the second timeCOMMENT
LOW⚡scripts/test262.js261 // Step 4: Try minifying the output onceCOMMENT
LOW⚡scripts/test262.js270 // Step 5: Try minifying the output againCOMMENT
LOWscripts/test262.js302 // Step 1: Try building the file normallyCOMMENT
LOWscripts/test262.js350 // Step 3: Try evaluating the file using nodeCOMMENT
LOWscripts/test262.js365 // Step 3: Try evaluating the file we generatedCOMMENT
LOWscripts/test262.js383 // Step 4: If evaluation worked and was supposed to work, check to seeCOMMENT
Verbosity Indicators20 hits · 34 pts
SeverityFileLineSnippetContext
LOWinternal/linker/linker.go1298 // Step 1: Figure out what modules must be CommonJSCOMMENT
LOWinternal/linker/linker.go1467 // Step 2: Propagate dynamic export status for export star statements thatCOMMENT
LOWinternal/linker/linker.go1504 // Step 3: Resolve "export * from" statements. This must be done after weCOMMENT
LOWinternal/linker/linker.go1537 // Step 4: Match imports with exports. This must be done after we process allCOMMENT
LOWinternal/linker/linker.go1570 // Step 5: Create namespace exports for every file. This is always necessaryCOMMENT
LOWinternal/linker/linker.go1762 // Step 6: Bind imports to exports. This adds non-local dependencies on theCOMMENT
LOWinternal/js_parser/js_parser_lower.go504 // Step 1: Get an array of all expressions in the chain. We're traversing theCOMMENT
LOWinternal/js_parser/js_parser_lower.go583 // Step 2: Figure out if we need to capture the value for "this" for theCOMMENT
LOW⚡internal/js_parser/js_parser_lower.go660 // Step 3: Figure out if we need to capture the starting value. We don't needCOMMENT
LOW⚡internal/js_parser/js_parser_lower.go668 // Step 4: Wrap the starting value by each expression in the chain. WeCOMMENT
LOWinternal/js_parser/js_parser_lower.go774 // Step 5: Wrap it all in a conditional that returns the chain or the defaultCOMMENT
LOWscripts/test262.js223 // Step 1: Try transforming the file normallyCOMMENT
LOW⚡scripts/test262.js241 // Step 2: Try transforming the output again (this should always succeed)COMMENT
LOW⚡scripts/test262.js250 // Step 3: The output should be the same the second timeCOMMENT
LOW⚡scripts/test262.js261 // Step 4: Try minifying the output onceCOMMENT
LOW⚡scripts/test262.js270 // Step 5: Try minifying the output againCOMMENT
LOWscripts/test262.js302 // Step 1: Try building the file normallyCOMMENT
LOWscripts/test262.js350 // Step 3: Try evaluating the file using nodeCOMMENT
LOWscripts/test262.js365 // Step 3: Try evaluating the file we generatedCOMMENT
LOWscripts/test262.js383 // Step 4: If evaluation worked and was supposed to work, check to seeCOMMENT
AI Slop Vocabulary7 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMinternal/js_ast/js_ast_helpers.go240 return PrimitiveMixed // Definitely some kind of primitiveCODE
MEDIUMinternal/js_ast/js_ast_helpers.go325 return left // Definitely not null or undefinedCODE
MEDIUMinternal/js_ast/js_ast_helpers.go328 return PrimitiveMixed // Definitely some kind of primitiveCODE
MEDIUMinternal/graph/meta.go69 // using 'export type'." But we try to be robust to such code anyway.COMMENT
MEDIUMinternal/js_parser/ts_parser.go928// expensive, and likely not as robust.COMMENT
MEDIUMinternal/js_parser/js_parser.go18659 // could therefore be processed by these buggy tools, it's more robust to putCOMMENT
MEDIUMscripts/esbuild.js281 // So we have to make our tests extra robust so they can still work with randomCOMMENT
Hyper-Verbose Identifiers12 hits · 12 pts
SeverityFileLineSnippetContext
LOWscripts/js-api-tests.js7541function registerClassPrivateTests(target) {CODE
LOWscripts/destructuring-fuzzer.js182function FunctionStatementArguments([pattern, value, ids]) {CODE
LOWscripts/destructuring-fuzzer.js188function FunctionExpressionArguments([pattern, value, ids]) {CODE
LOWscripts/destructuring-fuzzer.js206function ClassStatementMethodArguments([pattern, value, ids]) {CODE
LOWscripts/destructuring-fuzzer.js212function ClassExpressionMethodArguments([pattern, value, ids]) {CODE
LOWscripts/plugin-tests.js36function fetchUntilSuccessOrTimeout(host, port, path) {CODE
LOWscripts/browser/index.html29 async function assertSameColorsWithNestingTransform(esbuild, { css, html }) {CODE
LOWlib/shared/common.ts12function validateAndJoinStringArray(values: string[], what: string): string {CODE
LOWlib/shared/common.ts12function validateAndJoinStringArray(values: string[], what: string): string {CODE
LOWlib/shared/common.ts94export function validateInitializeOptions(options: types.InitializeOptions): types.InitializeOptions {CODE
LOWlib/npm/node-platform.ts57export function pkgAndSubpathForCurrentPlatform(): { pkg: string, subpath: string, isWASM: boolean } {CODE
LOWlib/npm/node-install.ts166function applyManualBinaryPathOverride(overridePath: string): void {CODE
Example Usage Blocks7 hits · 10 pts
SeverityFileLineSnippetContext
LOWinternal/js_parser/js_parser.go12014// Example usage:COMMENT
LOWpkg/cli/cli.go4// Example usage:COMMENT
LOWpkg/cli/cli.go44// Example usage:COMMENT
LOWpkg/cli/cli.go66// Example usage:COMMENT
LOWpkg/cli/cli.go89// Example usage:COMMENT
LOWpkg/api/api.go15// Example usage:COMMENT
LOWpkg/api/api.go46// Example usage:COMMENT