AI Slop Code Risk Monitor

nodejs/undici

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

An HTTP/1.1 client, written from scratch for Node.js

1.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for nodejs/undici, a JavaScript project with 7,725 GitHub stars. SynthScan examined 204,121 lines of code across 812 source files, recording 179 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.0 (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.0
Adjusted Signal
1.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
7.7K
Stars
JavaScript
Language
204.1K
Lines of Code
812
Files
179
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.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 2.9/100 · LOW

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

PR Review Velocity Impact 4.5/100 · LOW

Which changes need focused human review? 179 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 0MEDIUM 5LOW 174

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 179 distinct pattern matches across 6 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 Identifiers99 hits · 99 pts
SeverityFileLineSnippetContext
LOWtest/retry-handler-controller-proxy.js22function activeConnectionController () {CODE
LOWtest/no-strict-content-length.js22 function assertEmitWarningCalledAndReset () {CODE
LOWtest/client-pipelining.js455function pipeliningNonIdempotentWithBody (bodyType) {CODE
LOWtest/mock-interceptor-unused-assertions.js30function mockAgentWithOneInterceptor () {CODE
LOWtest/websocket/pong-backpressure.js13function createBackpressuredSocket () {CODE
LOWtest/node-test/client-errors.js125function installErrorAndReconnectServer (server, p, { contentLength, trackPostWithPlan }) {CODE
LOWtest/node-test/client-errors.js238function errorAndChunkedEncodingPipelining (type) {CODE
LOWtest/node-test/abort-controller.js190 function writeHeadersStartedWithBody (body, type) {CODE
LOWtest/node-test/abort-event-emitter.js211function writeHeadersStartedWithBody (body, type) {CODE
LOWtest/utils/node-http.js12function closeClientAndServerAsPromise (client, server) {CODE
LOWtest/utils/redirecting-servers.js90async function startRedirectingWithBodyServer () {CODE
LOWtest/utils/redirecting-servers.js107function startRedirectingWithoutLocationServer () {CODE
LOWtest/utils/redirecting-servers.js125async function startRedirectingChainServers () {CODE
LOWtest/utils/redirecting-servers.js168async function startRedirectingWithAuthorization (authorization) {CODE
LOWtest/utils/redirecting-servers.js191async function startRedirectingWithCookie (cookie) {CODE
LOWtest/utils/redirecting-servers.js214async function startRedirectingWithRelativePath (t) {CODE
LOWtest/utils/redirecting-servers.js235async function startRedirectingWithQueryParams (t) {CODE
LOWtest/utils/h2-disconnect-guard.js13function guardAgainstUnexpectedDisconnect (t, client) {CODE
LOWtest/fetch/issue-4897.js6function createAssertingDispatcher (t, expectedPath) {CODE
LOWtest/fetch/issue-4897.js25async function assertCredentialsRejected (t, url) {CODE
LOWlib/handler/cache-handler.js108function appendConnectionHeaderTokens (headersToRemove, connectionHeader) {CODE
LOWlib/handler/cache-handler.js617function deleteCachedValueIfNotModified (statusCode, store, cacheKey) {CODE
LOWlib/handler/cache-handler.js629function revalidationResponseDisallowsCachedReuse (cacheType, resHeaders, cacheControlDirectives) {CODE
LOWlib/handler/retry-handler.js13function calculateRetryAfterHeader (retryAfter) {CODE
LOWlib/handler/retry-handler.js18function validatePartialResponseContentLength (headers, range, statusCode, retryCount) {CODE
LOWlib/core/util.js416function bufferToLowerCasedHeaderName (value) {CODE
LOWlib/core/util.js938function getProtocolFromUrlStringSlow (urlString) {CODE
LOWlib/core/request.js31function isValidContentLengthHeaderValue (val) {CODE
LOWlib/core/connect.js178function maybeNormalizeConnectError (err, socket, opts) {CODE
LOWlib/cache/sqlite-cache-store.js579function isCompressibleContentType (contentType) {CODE
LOWlib/util/cache.js55function splitCacheControlHeaderValue (value) {CODE
LOWlib/util/cache.js106function markInvalidCacheControlDirective (directives, key) {CODE
LOWlib/util/cache.js119function hasInvalidCacheControlDirective (directives, key) {CODE
LOWlib/util/cache.js123function getMalformedRestrictiveDirectiveName (key) {CODE
LOWlib/util/cache.js647function isInvalidOrWildcardVaryHeader (varyHeader) {CODE
LOWlib/util/runtime-features.js16function detectRuntimeFeatureByNodeModule (moduleName) {CODE
LOWlib/web/eventsource/eventsource-stream.js78function createMaxEventSizeExceededError () {CODE
LOWlib/web/eventsource/util.js28function createPotentialCORSRequest (url, destination, corsAttributeState, sameOriginFallback) {CODE
LOWlib/web/websocket/util.js288function validateCloseCodeAndReason (code, reason) {CODE
LOWlib/web/websocket/connection.js26function establishWebSocketConnection (url, protocols, client, handler, options) {CODE
LOWlib/web/websocket/stream/websocketerror.js8function createInheritableDOMException () {CODE
LOWlib/web/infra/index.js14function collectASequenceOfCodePoints (condition, input, position) {CODE
LOWlib/web/infra/index.js41function collectASequenceOfCodePointsFast (char, input, position) {CODE
LOWlib/web/infra/index.js216function serializeJavascriptValueToJSONString (value) {CODE
LOWlib/web/fetch/data-url.js397function collectAnHTTPQuotedString (input, position, extractValue = false) {CODE
LOWlib/web/fetch/data-url.js536function minimizeSupportedMimeType (mimeType) {CODE
LOWlib/web/fetch/util.js201function setRequestReferrerPolicyOnRedirect (request, actualResponse) {CODE
LOWlib/web/fetch/util.js213function crossOriginResourcePolicyCheck () {CODE
LOWlib/web/fetch/util.js261function appendRequestOriginHeader (request) {CODE
LOWlib/web/fetch/util.js322function clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {CODE
LOWlib/web/fetch/util.js345function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {CODE
LOWlib/web/fetch/util.js386function determineRequestsReferrer (request) {CODE
LOWlib/web/fetch/util.js575function isOriginIPPotentiallyTrustworthy (origin) {CODE
LOWlib/web/fetch/util.js600function isOriginPotentiallyTrustworthy (origin) {CODE
LOWlib/web/fetch/util.js661function isURLPotentiallyTrustworthy (url) {CODE
LOWlib/web/fetch/util.js688function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {CODE
LOWlib/web/fetch/response.js479function makeAppropriateNetworkError (fetchParams, err = null) {CODE
LOWlib/web/fetch/index.js79function appendHeadersListFromResponseHeaders (headersList, headers, rawHeaders) {CODE
LOWlib/web/fetch/index.js2217 function dispatchWithProtocolPreference (body, allowH2) {CODE
LOWlib/web/fetch/formdata-parser.js209function parseContentDispositionAttribute (input, position) {CODE
39 more matches not shown…
Over-Commented Block64 hits · 64 pts
SeverityFileLineSnippetContext
LOWtest/http2-resume-null-request.js1'use strict'COMMENT
LOWtest/issue-4880.js1'use strict'COMMENT
LOWtest/issue-5356.js1'use strict'COMMENT
LOWtest/http2-request-never-settles.js21// version gate here once a Node.js 22.x release carries the fix.COMMENT
LOWtest/tls.js1'use strict'COMMENT
LOWtest/tls.js21COMMENT
LOWtest/tls.js41// t.error(err)COMMENT
LOWtest/tls.js61// method: 'GET',COMMENT
LOWtest/tls.js81COMMENT
LOWtest/tls.js101COMMENT
LOWtest/tls.js121COMMENT
LOWtest/tls.js141// .resume()COMMENT
LOWtest/tls.js161// }, (err, data) => {COMMENT
LOWtest/tls.js181// headers: {COMMENT
LOWtest/http2-response-after-completion.js1'use strict'COMMENT
LOWtest/get-head-body.js121// // This URL will send double responses when receiving aCOMMENT
LOWtest/cookie/cookies.js1// MIT LicenseCOMMENT
LOWtest/cookie/npm-cookie.js1'use strict'COMMENT
LOWtest/busboy/test-parser.js1'use strict'COMMENT
LOWtest/busboy/formdata-test.js1'use strict'COMMENT
LOWdocs/docs/api/MockAgent.md461COMMENT
LOWdocs/docs/api/MockAgent.md521COMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/ci.yml261 with:COMMENT
LOWlib/handler/retry-handler.js41// flow-controlling the original (now-dead) controller while data flows on theCOMMENT
LOWlib/web/eventsource/eventsource-stream.js221 this.consumeCurrentByte()COMMENT
LOWlib/web/eventsource/eventsource.js261 fetchParams.processResponseEndOfBody = processEventSourceEndOfBodyCOMMENT
LOWlib/web/eventsource/eventsource.js361COMMENT
LOWlib/web/websocket/receiver.js21// This code was influenced by ws released under the MIT license.COMMENT
LOWlib/web/websocket/websocket.js261 // 2. Run the appropriate set of steps from the following list:COMMENT
LOWlib/web/websocket/websocket.js281COMMENT
LOWlib/web/websocket/websocket.js301 this.#bufferedAmount += data.byteLengthCOMMENT
LOWlib/web/websocket/websocket.js621 // at the WebSocket object.COMMENT
LOWlib/web/websocket/connection.js121 // list values given `Sec-WebSocket-Protocol` and response’sCOMMENT
LOWlib/web/websocket/connection.js141 failHandshake(handler, response, 1002, 'Server did not set Upgrade header to "websocket".')COMMENT
LOWlib/web/fetch/util.js261function appendRequestOriginHeader (request) {COMMENT
LOWlib/web/fetch/util.js761 // 1. Let interface be the interface for which the iterator prototype object exists.COMMENT
LOWlib/web/fetch/request.js241 unsafeRequest: request.unsafeRequest,COMMENT
LOWlib/web/fetch/index.js241 // 12. Let handleFetchDone given response response be to finalize andCOMMENT
LOWlib/web/fetch/index.js521 // "image"COMMENT
LOWlib/web/fetch/index.js601 // - request’s current URL’s scheme is "http"COMMENT
LOWlib/web/fetch/index.js681 }COMMENT
LOWlib/web/fetch/index.js721 internalResponse.urlList.push(...request.urlList)COMMENT
LOWlib/web/fetch/index.js1721 // 2. If request’s body is non-null, then:COMMENT
LOWlib/web/fetch/index.js1741 if (request.useURLCredentials === undefined || isAuthenticationFetch) {COMMENT
LOWlib/web/fetch/index.js1881 // 8. Switch on request’s mode:COMMENT
LOWlib/web/fetch/index.js1901COMMENT
LOWlib/web/fetch/index.js1921COMMENT
LOWlib/web/fetch/index.js2081 // 2. If response is not a network error and request’s cache mode isCOMMENT
LOWlib/web/cookies/parse.js161 // 6. If the attribute-value is longer than 1024 octets, ignore theCOMMENT
LOWlib/web/cookies/parse.js201 // character, ignore the cookie-av.COMMENT
LOWlib/web/cookies/parse.js261 }COMMENT
LOWlib/web/cookies/parse.js281 } else if (attributeNameLowercase === 'samesite') {COMMENT
LOWlib/dispatcher/fixed-queue.js1'use strict'COMMENT
LOWlib/dispatcher/fixed-queue.js21// | item | | item | | undefined |COMMENT
LOWlib/dispatcher/fixed-queue.js41// | undefined | | item |COMMENT
LOWdeps/llhttp/include/llhttp.h541} /* extern "C" */COMMENT
LOWdeps/llhttp/src/llhttp.c1#include <stdlib.h>COMMENT
LOWdeps/milo/README.md141 //COMMENT
LOWdeps/milo/parser/src/native.rs101#[unsafe(no_mangle)]COMMENT
4 more matches not shown…
Decorative Section Separators5 hits · 20 pts
SeverityFileLineSnippetContext
MEDIUMtest/issue-4880.js30// ── Server (runs in worker thread) ──────────────────────────────────────────COMMENT
MEDIUMtest/issue-4880.js60// ── Client / tests (runs in main thread) ────────────────────────────────────COMMENT
MEDIUM⚡docs/docs/api/MockAgent.md584// ┌─────────┬────────┬───────────────────────┬──────┬─────────────┬────────────┬─────────────┬───────────┐COMMENT
MEDIUM⚡docs/docs/api/MockAgent.md586// ├─────────┼────────┼───────────────────────┼──────┼─────────────┼────────────┼─────────────┼───────────┤COMMENT
MEDIUM⚡docs/docs/api/MockAgent.md588// └─────────┴────────┴───────────────────────┴──────┴─────────────┴────────────┴─────────────┴───────────┘COMMENT
Verbosity Indicators6 hits · 9 pts
SeverityFileLineSnippetContext
LOWtest/fetch/range-open-ended.js8// Step 18: "If rangeStartValue and rangeEndValue are numbers, andCOMMENT
LOWdocs/examples/snapshot-testing.js36 // Step 1: Record mode - capture API responsesCOMMENT
LOWdocs/examples/snapshot-testing.js62 // Step 2: Playback mode - use recorded responses (server can be down)COMMENT
LOWlib/web/eventsource/eventsource-stream.js224 // event. We need to check if the next character is anCOMMENT
LOWlib/web/eventsource/eventsource-stream.js239 // set the crlfCheck flag to true, as we need to check if theCOMMENT
LOWlib/web/eventsource/eventsource-stream.js263 // set the crlfCheck flag to true, as we need to check if theCOMMENT
TODO Padding3 hits · 4 pts
SeverityFileLineSnippetContext
LOWtest/interceptors/dump-interceptor.js11// TODO: Fix tests on windowsCOMMENT
LOWlib/web/fetch/util.js264 // TODO: implement "byte-serializing a request origin"COMMENT
LOWlib/web/fetch/index.js2242 // TODO: implement connection timingCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocs/examples/snapshot-testing.js36 // Step 1: Record mode - capture API responsesCOMMENT
LOWdocs/examples/snapshot-testing.js62 // Step 2: Playback mode - use recorded responses (server can be down)COMMENT