AI Slop Code RIsk Monitor

guzzle/guzzle

Guzzle, an extensible PHP HTTP client

17.5 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for guzzle/guzzle, a PHP project with 23,445 GitHub stars. SynthScan examined 74,414 lines of code across 165 source files, recording 1757 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 17.5 (Elevated 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.

17.5
Adjusted Signal
17.5
Raw Pattern Score
100%
Time Factor
2026-09-06
Last Push
23.4K
Stars
PHP
Language
74.4K
Lines of Code
165
Files
1.8K
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 58.3/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 58.1/100 · HIGH

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

PR Review Velocity Impact 69.3/100 · HIGH

Which changes need focused human review? 1757 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 0LOW 1757

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 1757 distinct pattern matches across 3 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 Identifiers1750 hits · 1296 pts
SeverityFileLineSnippetContext
LOWtests/HandlerStackTest.php29 public function testCanSetDifferentHandlerAfterConstruction(): voidCODE
LOWtests/HandlerStackTest.php46 public function testResolveRejectsNonCallableHandler(): voidCODE
LOWtests/HandlerStackTest.php63 public function testResolveRejectsNonCallableMiddleware(): voidCODE
LOW⚡tests/HandlerStackTest.php82 public function testRejectsNativePhpUnserialization(): voidCODE
LOW⚡tests/HandlerStackTest.php92 public function testRejectsNativePhpUnserializationWithRuntimeClassName(): voidCODE
LOW⚡tests/HandlerStackTest.php102 public function testResolveRejectsMiddlewareReturningNonCallable(): voidCODE
LOWtests/HandlerStackTest.php133 public function testUnshiftsInReverseOrder(): voidCODE
LOWtests/HandlerStackTest.php149 public function testCanRemoveMiddlewareByInstance(): voidCODE
LOWtests/HandlerStackTest.php164 public function testCanRemoveMiddlewareByCallableStringName(): voidCODE
LOWtests/HandlerStackTest.php178 public function testCanRemoveMiddlewareByCallableStringInstance(): voidCODE
LOWtests/HandlerStackTest.php192 public function testRemovePrefersNameWhenStringIsAlsoCallable(): voidCODE
LOWtests/HandlerStackTest.php209 public function testRemoveRejectsNonStringNonCallable(): voidCODE
LOWtests/HandlerStackTest.php236 public function testEnsuresHandlerExistsByName(): voidCODE
LOWtests/HandlerStackTest.php263 public function testPicksUpCookiesFromRedirects(): voidCODE
LOW⚡tests/BodySummarizerTest.php15 public function testSummarizeReadsFromStartAndRestoresBodyCursor(): voidCODE
LOW⚡tests/BodySummarizerTest.php25 public function testSummarizeWithCustomTruncationRestoresBodyCursor(): voidCODE
LOW⚡tests/BodySummarizerTest.php35 public function testSummarizeReturnsNullWhenBodySummaryFails(): voidCODE
LOWtests/BodySummarizerTest.php47 public function testSummarizePropagatesBodySummaryError(): voidCODE
LOWtests/AuthMiddlewareTest.php57 public function testRejectsInvalidBasicAuth(array $auth, string $message): voidCODE
LOWtests/AuthMiddlewareTest.php76 public function testBasicAuthReplacesExistingAuthorizationHeader(): voidCODE
LOWtests/AuthMiddlewareTest.php89 public function testCustomAuthStringPassesThrough(): voidCODE
LOWtests/AuthMiddlewareTest.php100 public function testHandlesDigestChallenge(): voidCODE
LOWtests/AuthMiddlewareTest.php130 public function testDigestAuthIntOnlyChallengeDoesNotRetry(): voidCODE
LOWtests/AuthMiddlewareTest.php147 public function testDigestUnsafeUsernameReturnsChallengeWithoutRetry(): voidCODE
LOWtests/AuthMiddlewareTest.php164 public function testDigestUnsafeCnonceReturnsChallengeWithoutRetry(): voidCODE
LOWtests/AuthMiddlewareTest.php183 public function testDigestStaleChallengeRetriesOnceMore(): voidCODE
LOWtests/AuthMiddlewareTest.php216 public function testDigestProbeOmitsRequestBodyAndEntityHeaders(): voidCODE
LOWtests/AuthMiddlewareTest.php257 public function testDigestProbeStripsPayloadDescriptorHeaders(): voidCODE
LOWtests/AuthMiddlewareTest.php302 public function testDigestProbeUsesConfiguredStreamFactory(): voidCODE
LOWtests/AuthMiddlewareTest.php332 public function testDigestWithNonSeekableRequestBodySucceeds(): voidCODE
LOWtests/AuthMiddlewareTest.php358 public function testDigestWithNonTellableRequestBodySucceeds(): voidCODE
LOWtests/AuthMiddlewareTest.php389 public function testDigestProbeRewindsPrePositionedSeekableBody(): voidCODE
LOWtests/AuthMiddlewareTest.php417 public function testDigestProbeStripsBodyWhenSizeCannotBeDetermined(): voidCODE
LOWtests/AuthMiddlewareTest.php451 public function testDigestStaleRetryRewindsAndResendsSeekableBody(): voidCODE
LOWtests/AuthMiddlewareTest.php482 public function testDigestStaleRetryStillFailsWhenConsumedBodyCannotRewind(): voidCODE
LOWtests/AuthMiddlewareTest.php518 public function testDigestUnchallengedBodyWithheldProbeRejects(ResponseInterface $probeResponse): voidCODE
LOWtests/AuthMiddlewareTest.php534 public static function nonRedirectLikeProbeResponseProvider(): iterableCODE
LOWtests/AuthMiddlewareTest.php543 public function testDigestUnchallengedBodyWithheldProbeRejectsAfterRestoringSink(): voidCODE
LOWtests/AuthMiddlewareTest.php571 public function testDigestUnchallengedProbeWithoutBodyReturnsResponse(): voidCODE
LOWtests/AuthMiddlewareTest.php597 public function testDigestRedirectLikeProbeResponsePassesThrough(): voidCODE
LOWtests/AuthMiddlewareTest.php612 public function testDigestProbeOmitsBodyThroughDefaultStack(): voidCODE
LOWtests/AuthMiddlewareTest.php643 public function testDigestProbeDoesNotRegainExpectWithUnknownSizeProbeStream(): voidCODE
LOWtests/AuthMiddlewareTest.php694 public function testDigestHandshakeRepeatsAfterBodyPreservingRedirect(): voidCODE
LOWtests/AuthMiddlewareTest.php730 public function testDigestHandshakeRunsAfterBodyWithheldProbeRedirect(int $statusCode): voidCODE
LOWtests/AuthMiddlewareTest.php764 public static function bodyPreservingRedirectStatusProvider(): iterableCODE
LOWtests/AuthMiddlewareTest.php773 public function testDigestHandshakeRunsAfterMethodRewritingProbeRedirect(int $statusCode): voidCODE
LOWtests/AuthMiddlewareTest.php810 public static function methodRewritingRedirectStatusProvider(): iterableCODE
LOWtests/AuthMiddlewareTest.php817 public function testDigestGetWithBodyProbesBodyless(): voidCODE
LOWtests/AuthMiddlewareTest.php842 public function testDigestZeroSizeNonTellableRequestBodySucceeds(): voidCODE
LOWtests/AuthMiddlewareTest.php874 public function testDigestBodyRewindFailureRejects(): voidCODE
LOWtests/AuthMiddlewareTest.php899 public function testDigestBodyRewindFailureRestoresOriginalSink(): voidCODE
LOWtests/AuthMiddlewareTest.php940 public function testDigestBodyRewindErrorPropagates(): voidCODE
LOWtests/AuthMiddlewareTest.php977 public function testDigestDoesNotWriteChallengeBodyToUserSink(): voidCODE
LOWtests/AuthMiddlewareTest.php1002 public function testDigestTemporarySinkUsesConfiguredStreamFactory(): voidCODE
LOWtests/AuthMiddlewareTest.php1031 public function testDigestRestoredResourceSinkDetachesOnClose(): voidCODE
LOWtests/AuthMiddlewareTest.php1059 public function testDigestChallengeBodyDoesNotReachSinkWhenStreamRequested(): voidCODE
LOWtests/AuthMiddlewareTest.php1086 public function testDigestChallengeBodyDoesNotReachStreamSinkWhenStreamRequested(): voidCODE
LOWtests/AuthMiddlewareTest.php1107 public function testDigestRestoreDrainsStreamedBodyIntoSinkWhenHandlerHonorsStream(): voidCODE
LOWtests/AuthMiddlewareTest.php1141 public function testDigestRetriesDoNotReapplyDelay(): voidCODE
LOWtests/AuthMiddlewareTest.php1175 public function testDigestSinkRestoreFailureRejectsWithResponseException(): voidCODE
1690 more matches not shown…
Over-Commented Block6 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/Handler/CurlFactory.php1241 // Two transfer outcomes warrant rewinding the body and retrying:COMMENT
LOWsrc/Handler/CurlFactory.php2081 }COMMENT
LOWsrc/Handler/CurlFactory.php2801 throw new InvalidArgumentException('progress client option must be callable');COMMENT
LOWsrc/Handler/CurlVersion.php21 // multiplexed by default since 7.62.0 - but a 7.65.0-7.65.1 regressionCOMMENT
LOWsrc/Handler/CurlVersion.php41 // lower-version connections to prior-knowledge transfers in 8.14.0; belowCOMMENT
LOWsrc/Handler/CurlVersion.php81 // curl 8.22.0 applies the cURL multi connection caps from the transfer'sCOMMENT
Fake / Example Data1 hit · 0 pts
SeverityFileLineSnippetContext
LOWtests/Auth/DigestAuthTest.php406 'WWW-Authenticate' => 'Digest realm="api@example.org", qop="auth", algorithm=SHA-512-256, nonce="5TsQWLVdgBdCODE