# Changelog

## Score

- CAI 66 → 61 (-4.7)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 99 → 70 (-29.1)
- Architecture 99 → 99 (+0.0)
- Maturity 48 → 45 (-2.4)
- Readiness 75 → 75 (+0.0)
- Security 82 → 82 (+0.0)

## Resolved (4)

- Off-boarding risk: anonymized user #1
- Redundant Interface Definition: Similar to the manager registry, `ConnectionRegistry` duplicates the `getConnection`, `getConnections`, `getConnectionNames`, and `getDefaultConnectionName` methods found in `AbstractManagerRegistry`. This splits the connection-related API across two types with overlapping responsibilities.
- Redundant Interface Definition: `ManagerRegistry` is a sub-interface of `AbstractManagerRegistry` (implied by context of Doctrine's hierarchy, though not explicitly shown in the snippet, `AbstractManagerRegistry` contains the implementation details and `ManagerRegistry` repeats the exact same method signatures for `getManager`, `getManagers`, `resetManager`, etc.). This creates a confusing API surface where users must choose between an abstract class and an interface that exposes identical public contracts for the same operations.
- Workflow token permissions not restricted

## New (17)

- Ambiguous naming and potential overlap. AbstractClassMetadataFactory exposes both getLoadedMetadata and getAllMetadata. ClassMetadataFactory (which likely extends or implements AbstractClassMetadataFactory) only exposes getAllMetadata. It is unclear if getLoadedMetadata is a subset of getAllMetadata or if they serve distinct purposes (e.g., lazy vs eager loading). This creates confusion for implementers.
- Off-boarding risk: anonymized user #1
- Orphaned file (src/Mapping/Driver/FileClassLocator.php)
- Orphaned files with no living knowledge
- Redundant interface definition. ManagerRegistry extends AbstractManagerRegistry (implied by context of Doctrine architecture) but re-declares the exact same method signature. This creates unnecessary duplication in the public API surface.
- Redundant interface definition. Same as above, getDefaultManagerName is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Redundant interface definition. Same as above, getManagerForClass is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Redundant interface definition. Same as above, getManagerNames is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Redundant interface definition. Same as above, getManagers is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Redundant interface definition. Same as above, getRepository is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Redundant interface definition. Same as above, resetManager is duplicated between AbstractManagerRegistry and ManagerRegistry.
- Workflow token permissions not restricted (.github/workflows/coding-standards.yml)
- Workflow token permissions not restricted (.github/workflows/continuous-integration.yml)
- Workflow token permissions not restricted (.github/workflows/documentation.yml)
- Workflow token permissions not restricted (.github/workflows/release-on-milestone-closed.yml)
- Workflow token permissions not restricted (.github/workflows/static-analysis.yml)
- Workflow token permissions not restricted (.github/workflows/website-schema.yml)

## Changes since last survey

- 2 commits — 2 feature/other, 0 fixes

## By area

- (repo) — 1 commit
- docs/en — 1 commit

## Notable commits

- change: Merge pull request #529 from dajiaohuang/docs/mapping-driver-examples-20261017-c7
- change: docs: align mapping driver examples with their contracts
