Repository Analysis

guzzle/guzzle

Guzzle, an extensible PHP HTTP client

17.5 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of guzzle/guzzle, a PHP project with 23,457 GitHub stars. SynthScan v2.0 examined 74,063 lines of code across 165 source files, recording 1746 pattern matches distributed across 3 syntactic categories. The overall adjusted score of 17.5 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

17.5
Adjusted Score
17.5
Raw Score
100%
Time Factor
2026-08-24
Last Push
23.5K
Stars
PHP
Language
74.1K
Lines of Code
165
Files
1.7K
Pattern Hits
2026-08-29
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 0MEDIUM 0LOW 1746

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1746 distinct pattern matches across 3 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers1739 hits · 1288 pts
SeverityFileLineSnippetContext
LOWtests/HandlerStackTest.php29 public function testCanSetDifferentHandlerAfterConstruction(): voidCODE
LOWtests/HandlerStackTest.php46 public function testResolveRejectsNonCallableHandler(): voidCODE
LOWtests/HandlerStackTest.php63 public function testResolveRejectsNonCallableMiddleware(): voidCODE
LOWtests/HandlerStackTest.php82 public function testRejectsNativePhpUnserialization(): voidCODE
LOWtests/HandlerStackTest.php92 public function testRejectsNativePhpUnserializationWithRuntimeClassName(): voidCODE
LOWtests/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
LOWtests/BodySummarizerTest.php15 public function testSummarizeReadsFromStartAndRestoresBodyCursor(): voidCODE
LOWtests/BodySummarizerTest.php25 public function testSummarizeWithCustomTruncationRestoresBodyCursor(): voidCODE
LOWtests/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
1679 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 7.83.1 added proxy TLS-SRP to the connection-reuse matchCOMMENT
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