AI Slop Code Risk Monitor

zircote/swagger-php

SlopCodeMonitor badge for zircote/swagger-php Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A php swagger annotation and parsing library

3.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for zircote/swagger-php, a PHP project with 5,304 GitHub stars. SynthScan examined 125,535 lines of code across 1652 source files, recording 440 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 3.7 (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.

3.7
Adjusted Signal
3.7
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
5.3K
Stars
PHP
Language
125.5K
Lines of Code
1.7K
Files
440
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 16.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

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

Agent Over-Engineering Ratio 16.6/100 · LOW

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

PR Review Velocity Impact 16.1/100 · LOW

Which changes need focused human review? 440 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 440

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 440 distinct pattern matches across 2 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 Identifiers434 hits · 457 pts
SeverityFileLineSnippetContext
LOWtools/tests/TypeAlias/AliasExpanderTest.php14 public function testParsesADeclarationAndAnImport(): voidCODE
LOWtools/tests/TypeAlias/AliasExpanderTest.php31 public function testParsesNothingFromAnEmptyDocblock(): voidCODE
LOW⚡tools/tests/TypeAlias/AliasExpanderTest.php44 public function testFollowsAnImportToItsDeclaringClass(): voidCODE
LOW⚡tools/tests/TypeAlias/AliasExpanderTest.php52 public function testFindsAnAliasImportedByATraitTheClassUses(): voidCODE
LOW⚡tools/tests/TypeAlias/AliasExpanderTest.php62 public function testLeavesAnUnknownNameAlone(): voidCODE
LOW⚡tools/tests/TypeAlias/AliasExpanderTest.php70 public function testPrefersTheLongerAliasName(): voidCODE
LOW⚡tools/tests/TypeAlias/AliasExpanderTest.php78 public function testReturnsTheTypeUntouchedWhenNothingIsDeclared(): voidCODE
LOWtools/tests/Docs/DocGeneratorTest.php52 public function testSplitUnionKeepsARepeatedNameOutsideItsGeneric(): voidCODE
LOWtools/tests/Docs/DocGeneratorTest.php60 public function testParseDocblockKeepsStaticAnalysisTagsOutOfTheDescription(): voidCODE
LOWtools/src/CSFixer/SpecNamespaceAliasFixer.php275 protected function collectUseStatementIndices(array $declarations): arrayCODE
LOWtools/src/Docs/Reference/AttributeGenerator.php139 protected function collectAnnotationsDetails(string $name, string $fqdn, string $filename): arrayCODE
LOWtests/CommandlineTest.php44 public function testDiagnosticsGoToStderr(): voidCODE
LOWtests/CommandlineTest.php172 public function testCleanupIsConfigurable(string $args, bool $kept): voidCODE
LOWtests/SerializerTest.php114 public function testDeserializeAllOfProperty(): voidCODE
LOWtests/SerializerTest.php159 public function testValidAnnotationsListComplete(string $annotation): voidCODE
LOWtests/CompilerTest.php248 public static function referenceSiblingsProvider(): iterableCODE
LOWtests/CompilerTest.php256 public function testReferenceObjectSiblings(CompilerInterface $compiler, bool $kept): voidCODE
LOWtests/CompilerTest.php441 public static function defaultAndExampleProvider(): iterableCODE
LOWtests/CompilerTest.php465 public function testDefaultAndExampleEmitted(OA\Schema $schema, string $key, mixed $expected): voidCODE
LOWtests/CompilerTest.php473 public function testUndefinedDefaultNotEmitted(): voidCODE
LOWtests/CompilerTest.php495 public function testOperationsGroupedByPath(): voidCODE
LOWtests/CompilerTest.php512 public function testSecuritySchemeCompiled(): voidCODE
LOWtests/CompilerTest.php709 public function testComponentResponseKeyIsNotValidatedAsStatusCode(): voidCODE
LOWtests/CompilerTest.php725 public function testUnemittedOperationDoesNotCollide(): voidCODE
LOWtests/CompilerTest.php738 public function testValidSchemaTypesAreAccepted(): voidCODE
LOWtests/CompilerTest.php776 public function testOperationMethodsPerVersion(CompilerInterface $compiler, string $method, bool $supported): voidCODE
LOWtests/CompilerTest.php822 public function testAMediaTypeWithoutATypeIsReportedAndOmitted(): voidCODE
LOWtests/CompilerTest.php837 public function testARepeatedMediaTypeKeepsTheLastWithAWarning(): voidCODE
LOWtests/CompilerTest.php852 public function testOperationWithoutAMethodIsReportedAndOmitted(): voidCODE
LOWtests/CompilerTest.php904 public function testDiscriminatorCompiled(): voidCODE
LOWtests/CompilerTest.php924 public function testSecurityWithRequirementDto(): voidCODE
LOWtests/CompilerTest.php939 public function testSecurityWithRawArrayBc(): voidCODE
LOWtests/CompilerTest.php957 public function testUnnamedSchemaIsOmittedFromComponents(): voidCODE
LOWtests/CompilerTest.php972 public function testUnnamedComponentsAreOmittedFromEveryBucket(): voidCODE
LOWtests/CompilerTest.php995 public function testUnnamedNestedEntriesAreOmittedFromEveryMap(): voidCODE
LOWtests/CompilerTest.php1029 public function testNestedLinkIsNotNamedAfterItsOperationId(): voidCODE
LOWtests/CompilerTest.php1046 public function testDuplicateComponentKeyKeepsTheLast(): voidCODE
LOWtests/CompilerTest.php1059 public function testUnnamedPropertyIsOmittedFromSchema(): voidCODE
LOWtests/CompilerTest.php1072 public function testExampleValueNullIsEmitted(): voidCODE
LOWtests/CompilerTest.php1083 public function testExampleValueUnsetIsOmitted(): voidCODE
LOWtests/CompilerTest.php1093 public function testLinkRequestBodyNullIsEmitted(): voidCODE
LOWtests/CompilerTest.php1104 public function testLinkRequestBodyUnsetIsOmitted(): voidCODE
LOWtests/CompilerTest.php1153 public function testExampleEmptyArrayIsEmitted(\Closure $build, \Closure $extract): voidCODE
LOWtests/CompilerTest.php1165 public function testExampleUnsetIsOmitted(\Closure $build, \Closure $extract): voidCODE
LOWtests/DocsAccuracyTest.php23 public function testCliHelpOutputMatchesDocs(): voidCODE
LOWtests/DocsAccuracyTest.php40 public function testIsRootClassificationMatchesDocs(): voidCODE
LOWtests/DocsAccuracyTest.php115 public function testCompilerTableMatchesDocs(): voidCODE
LOWtests/DocsAccuracyTest.php150 public function testConcernsTableMatchesDocs(): voidCODE
LOWtests/DocsAccuracyTest.php171 public function testResultMethodListingMatchesDocs(): voidCODE
LOWtests/DocsAccuracyTest.php193 public function testNoRequestBodyOnReadOnlyOperations(): voidCODE
LOWtests/AnalysisTest.php33 public function testGetAllAncestorClasses(): voidCODE
LOWtests/AnalysisTest.php55 public function testGetDirectAncestorClass(): voidCODE
LOWtests/OpenApiTestCase.php174 protected function annotationsFromDocBlockParser(string $docBlock, array $extraAliases = [], string $version = OA\OpCODE
LOWtests/ResolverTest.php22 public function testResolvesRefAndTransitivePropertyTypeByDefault(): voidCODE
LOWtests/ResolverTest.php42 public function testUnannotatedClassIsNotResolved(): voidCODE
LOWtests/ResolverTest.php52 public function testFailedFqcnIsAttemptedOnlyOncePerRun(): voidCODE
LOWtests/ResolverTest.php68 public function testUnloadableClassIsSkippedAndTheRestResolved(): voidCODE
LOWtests/ResolverTest.php82 public function testALoggerAwareResolverGetsTheResolversLogger(): voidCODE
LOWtests/ResolverTest.php97 public function testALoggerAwareResolverLogsToTheBuildersLogger(): voidCODE
LOWtests/CookbookFragmentsSnippetTest.php29 public function testPartsMatchTheDocumentedOutput(): voidCODE
374 more matches not shown…
Fake / Example Data6 hits · 6 pts
SeverityFileLineSnippetContext
LOW…ers/schema-query-parameter/schema-query-parameter.yaml46 example: 'Lorem ipsum'CODE
LOW…ers/schema-query-parameter/schema-query-parameter.yaml72 example: 'Lorem ipsum'CODE
LOW…ples/augmenters/schema-query-parameter/app/Product.php27 example: 'Lorem ipsum',CODE
LOW…ors/schema-query-parameter/schema-query-parameter.yaml44 example: 'Lorem ipsum'CODE
LOW…ors/schema-query-parameter/schema-query-parameter.yaml67 example: 'Lorem ipsum'CODE
LOW…ples/processors/schema-query-parameter/app/Product.php25 example: 'Lorem ipsum',CODE