AI Slop Code RIsk Monitor

doctrine/orm

Doctrine Object Relational Mapper (ORM)

13.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for doctrine/orm, a PHP project with 10,164 GitHub stars. SynthScan examined 183,767 lines of code across 1630 source files, recording 2540 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 13.7 (Moderate 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.

13.7
Adjusted Signal
13.7
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
10.2K
Stars
PHP
Language
183.8K
Lines of Code
1.6K
Files
2.5K
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 48.7/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 1.6/100 · LOW

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

Agent Over-Engineering Ratio 48.4/100 · MEDIUM

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

PR Review Velocity Impact 49.9/100 · MEDIUM

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

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 2540 distinct pattern matches across 4 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 Identifiers2474 hits · 2434 pts
SeverityFileLineSnippetContext
LOWtests/Tests/TestUtil.php168 private static function getPrivilegedConnectionParameters(): arrayCODE
LOWtests/Tests/TestUtil.php181 private static function getTestConnectionParameters(): arrayCODE
LOWtests/Tests/OrmTestCase.php84 protected function createTestEntityManagerWithConnection(Connection $connection): EntityManagerMockCODE
LOWtests/Tests/OrmTestCase.php89 protected function createTestEntityManagerWithPlatform(AbstractPlatform $platform): EntityManagerMockCODE
LOWtests/Tests/OrmTestCase.php110 private function buildTestEntityManagerWithPlatform(Connection $connection): EntityManagerMockCODE
LOWtests/Tests/OrmTestCase.php147 private static function getSharedMetadataCacheImpl(): CacheItemPoolInterfaceCODE
LOWtests/Tests/OrmTestCase.php159 protected function getSharedSecondLevelCache(): CacheItemPoolInterfaceCODE
LOWtests/Tests/OrmFunctionalTestCase.php502 final protected function getUpdateSchemaSqlForModels(string ...$models): arrayCODE
LOWtests/Tests/Mocks/ArrayResultFactory.php20 public static function createDriverResultFromArray(array $resultSet): ArrayResultCODE
LOWtests/Tests/Mocks/ArrayResultFactory.php35 public static function createWrapperResultFromArray(array $resultSet, Connection|null $connection = null): ResultCODE
LOWtests/Tests/Mocks/EntityPersisterMock.php107 public function countOfExecuteInsertCalls(): intCODE
LOWtests/Tests/DbalTypes/UpperCaseStringType.php22 public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform): stringCODE
LOWtests/Tests/DbalTypes/NegativeToPositiveType.php30 public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform): stringCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php66 public function setUpPersistentCollection(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php74 public function testCanBePutInLazyLoadingMode(): voidCODE
LOW⚡tests/Tests/ORM/PersistentCollectionTest.php85 public function testCurrentInitializesCollection(): voidCODE
LOW⚡tests/Tests/ORM/PersistentCollectionTest.php94 public function testKeyInitializesCollection(): voidCODE
LOW⚡tests/Tests/ORM/PersistentCollectionTest.php103 public function testNextInitializesCollection(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php130 public function testRemovingElementsAlsoRemovesKeys(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php142 public function testClearWillAlsoClearKeys(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php150 public function testClearWillAlsoResetKeyPositions(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php164 public function testWillKeepNewItemsInDirtyCollectionAfterInitialization(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php197 public function testWillDeDuplicateNewItemsThatWerePreviouslyPersistedInDirtyCollectionAfterInitialization(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php239 public function testWillNotMarkCollectionAsDirtyAfterInitializationIfNoElementsWereAdded(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php276 public function testModifyUOWForDeferredImplicitOwnerOnClear(): voidCODE
LOWtests/Tests/ORM/PersistentCollectionTest.php285 public function testItCanBeSerializedAndUnserializedBack(): voidCODE
LOWtests/Tests/ORM/AbstractQueryTest.php17 public function testItMakesHydrationCacheProfilesAwareOfTheResultCache(): voidCODE
LOWtests/Tests/ORM/AbstractQueryTest.php32 public function testItMakesResultCacheProfilesAwareOfTheResultCache(): voidCODE
LOWtests/Tests/ORM/AbstractQueryTest.php46 public function testSettingTheResultCacheIsPossibleWithoutCallingDeprecatedMethods(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php80 public function testDeleteWithLimitNotSupported(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php90 public function testUpdateWithLimitNotSupported(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php135 public function testSimpleSelectWithFromIndexBy(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php144 public function testSimpleSelectWithIndexBy(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php186 public function testComplexInnerJoinWithComparisonCondition(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php200 public function testComplexInnerJoinWithCompositeCondition(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php217 public function testComplexInnerJoinWithFuncCondition(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php234 public function testComplexInnerJoinWithIndexBy(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php277 public function testMultipleFromWithIndexBy(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php299 public function testMultipleFromWithMultipleJoin(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php322 public function testWhereWithUnexpectedNamedArguments(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php367 public function testComplexAndWhereOrWhereNesting(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php482 public function testOrderByWithExpression(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php541 public function testLegacyAddOrderByString(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php553 public function testAddOrderByWithExpression(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php579 public function testAddMultipleSameCriteriaWhere(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php598 public function testAddCriteriaWhereWithMultipleParametersWithSameField(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php615 public function testAddCriteriaWhereWithMultipleParametersWithDifferentFields(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php632 public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndDifferentProperties(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php649 public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndSameProperty(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php681 public function testAddCriteriaOrderOnJoinAlias(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php713 public function testAddCriteriaUndefinedLimit(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php845 public function testWhereInWithStringLiterals(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php859 public function testWhereInWithObjectLiterals(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php901 public function testMultipleIsolatedQueryConstruction(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php933 public function testSelectWithFuncExpression(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php1005 public function testAddCriteriaWhereWithJoinAlias(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php1023 public function testAddCriteriaWhereWithDefaultAndJoinAlias(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php1041 public function testAddCriteriaWhereOnJoinAliasWithDuplicateFields(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php1102 public function testGetSeveralRootAliases(): voidCODE
LOWtests/Tests/ORM/QueryBuilderTest.php1114 public function testBCAddJoinWithoutRootAlias(): voidCODE
2414 more matches not shown…
Fake / Example Data47 hits · 61 pts
SeverityFileLineSnippetContext
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php24 $reflection->setValue($author, 'John Doe');CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php26 self::assertSame('John Doe', $wrappedReflection->getValue($author));CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php27 self::assertSame('John Doe', $reflection->getValue($author));CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php29 $reflection->setValue($author, 'John Doe');CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php31 self::assertSame('John Doe', $wrappedReflection->getValue($author));CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php32 self::assertSame('John Doe', $reflection->getValue($author));CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php42 $reflection->setValue($author, 'John Doe');CODE
LOW⚡…s/Tests/ORM/Mapping/ReflectionReadonlyPropertyTest.php46 $reflection->setValue($author, 'Jane Doe');CODE
LOW⚡…ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php21 $query->setHint('dummy-hint', 'dummy-value');CODE
LOW⚡…ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php28 self::assertSame('dummy-value', $walker->getQuery()->getHint('dummy-hint'));CODE
LOW…s/Tests/ORM/Functional/StandardEntityPersisterTest.php34 $customer->setName('John Doe');CODE
LOWtests/Tests/ORM/Functional/QueryParameterTest.php26 $user->name = 'John Doe';CODE
LOWtests/Tests/ORM/Functional/QueryParameterTest.php29 $user2->name = 'Jane Doe';CODE
LOWtests/Tests/ORM/Functional/QueryParameterTest.php55 self::assertSame([['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/QueryParameterTest.php68 self::assertSame([['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/QueryParameterTest.php81 self::assertSame([['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/QueryParameterTest.php94 self::assertSame([['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/QueryParameterTest.php108 self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/QueryParameterTest.php108 self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);CODE
LOWtests/Tests/ORM/Functional/QueryParameterTest.php122 self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);CODE
LOWtests/Tests/ORM/Functional/QueryParameterTest.php122 self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);CODE
LOW⚡tests/Tests/ORM/Functional/BasicFunctionalTest.php667 self::assertEquals('Lorem ipsum dolor sunt.', $articleNew->text);CODE
LOW⚡tests/Tests/ORM/Functional/BasicFunctionalTest.php671 $articleNew->text = 'Lorem ipsum dolor sunt. And stuff!';CODE
LOW⚡tests/Tests/ORM/Functional/BasicFunctionalTest.php677 self::assertEquals('Lorem ipsum dolor sunt. And stuff!', $articleNew->text);CODE
LOWtests/Tests/ORM/Functional/BasicFunctionalTest.php654 $article->text = 'Lorem ipsum dolor sunt.';CODE
LOWtests/Tests/ORM/Functional/BasicFunctionalTest.php697 $article->text = 'Lorem ipsum dolor sunt.';CODE
LOWtests/Tests/ORM/Functional/GH11345Test.php124 $auction1->setData('lorem ipsum');CODE
LOWtests/Tests/ORM/Functional/PropertyHooksTest.php37 $user->fullName = 'John Doe';CODE
LOWtests/Tests/ORM/Functional/PropertyHooksTest.php48 self::assertEquals('John Doe', $user->fullName);CODE
LOW⚡…RM/Functional/OneToOneBidirectionalAssociationTest.php28 $this->customer->setName('John Doe');CODE
LOWtests/Tests/ORM/Functional/Ticket/GH5762Test.php83 $driver = new GH5762Driver(1, 'John Doe');CODE
LOWtests/Tests/ORM/Functional/Ticket/DDC211Test.php32 $user->setName('John Doe');CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/GH6937Test.php32 $manager->phoneNumber = '555-5555';CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/GH6937Test.php42 self::assertSame('555-5555', $persistedManager->phoneNumber);CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/GH6937Test.php50 $manager->phoneNumber = '555-5555';CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/GH6937Test.php65 self::assertSame('555-5555', $persistedManager->phoneNumber);CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/GH6937Test.php73 $manager->phoneNumber = '555-5555';CODE
LOWtests/Tests/ORM/Functional/Ticket/GH6937Test.php88 self::assertSame('555-5555', $persistedManager->phoneNumber);CODE
LOWtests/Tests/ORM/Functional/Ticket/GH7012Test.php32 $user->name = 'John Doe';CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/DDC3303Test.php36 'John Doe',CODE
LOW⚡tests/Tests/ORM/Functional/Ticket/DDC3303Test.php45 self::assertEquals($employee, $this->_em->find(DDC3303Employee::class, 'John Doe'));CODE
LOWtests/Tests/ORM/Functional/Ticket/DDC1884Test.php96 $john->setName('John Doe');CODE
LOWtests/Tests/ORM/Functional/Ticket/DDC1884Test.php120 ->setParameter(1, 'John Doe')CODE
LOWtests/Tests/ORM/Functional/Ticket/DDC1884Test.php142 ->setParameter(1, 'John Doe')CODE
LOWtests/Tests/ORM/Functional/Ticket/DDC1884Test.php162 ->setParameter(1, 'John Doe')CODE
LOW⚡…ts/Tests/ORM/Functional/Ticket/GH11386/GH11386Test.php27 $customer->setName('John Doe')CODE
LOW⚡…ts/Tests/ORM/Functional/Ticket/GH11386/GH11386Test.php37 self::assertEquals('John Doe', $customer->getName());CODE
Over-Commented Block16 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/Tests/Models/Cache/Attraction.php21#[Table('cache_attraction')]COMMENT
LOWtests/Tests/Models/DDC117/DDC117Editor.php21{COMMENT
LOWtests/Tests/Models/Routing/RoutingRoute.php21#[Entity]COMMENT
LOWtests/Tests/Models/Company/CompanyContract.php21#[ORM\InheritanceType('SINGLE_TABLE')]COMMENT
LOWtests/Tests/ORM/Mapping/BasicInheritanceMappingTest.php321 #[Id]COMMENT
LOWtests/Tests/ORM/Tools/SchemaToolTest.php1181 #[Id]COMMENT
LOWtests/Tests/ORM/Tools/SchemaToolTest.php1201 #[ManyToOne(targetEntity: GH12651Target::class)]COMMENT
LOWtests/Tests/ORM/Tools/SchemaToolTest.php1481COMMENT
LOWtests/Tests/ORM/Tools/SchemaToolTest.php1521#[UniqueConstraint(name: 'uniq_name', columns: ['name'])]COMMENT
LOW…ests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php321COMMENT
LOWtests/Tests/ORM/Functional/Ticket/GH10531Test.php121#[ORM\Table(name: 'gh10531_a')]COMMENT
LOW…ts/ORM/Functional/Ticket/GH12225/AbstractDirectory.php21COMMENT
LOWsrc/UnitOfWork.php421 // Perform entity insertions first, so that all new entities have their rows in the databaseCOMMENT
LOWsrc/UnitOfWork.php1321COMMENT
LOWsrc/Tools/SchemaTool.php1341 // Both associations reference the same foreign table and columns, so aCOMMENT
LOWsrc/Persisters/Entity/BasicEntityPersister.php641 }COMMENT
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/Mapping/Driver/DatabaseDriver.php503 // Here we need to check if $fkColumns are the same as $primaryKeysCOMMENT
LOWsrc/Query/Parser.php1433 // We need to check if we are in a IdentificationVariable or SingleValuedPathExpressionCOMMENT
LOWsrc/Query/Parser.php3246 // We need to check if we are in a IdentificationVariable or SingleValuedPathExpressionCOMMENT