AI Slop Code RIsk Monitor

ampache/ampache

A web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.

5.5 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for ampache/ampache, a PHP project with 3,833 GitHub stars. SynthScan examined 564,171 lines of code across 3422 source files, recording 2845 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 5.5 (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.

5.5
Adjusted Signal
5.5
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
3.8K
Stars
PHP
Language
564.2K
Lines of Code
3.4K
Files
2.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 23.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

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

Agent Over-Engineering Ratio 23.6/100 · LOW

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

PR Review Velocity Impact 22.8/100 · LOW

Which changes need focused human review? 2845 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 3MEDIUM 27LOW 2815

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 2845 distinct pattern matches across 11 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 Identifiers2764 hits · 2939 pts
SeverityFileLineSnippetContext
LOWresources/scripts/api-docs/generate_openapi_schemas.py116def build_collection_items_schema(collection: dict) -> dict:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py139def build_playlist_folder_items_schema(folder: dict) -> dict:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py177def build_quickconnect_status_schema(handshake: dict) -> dict:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py832def apply_property_descriptions(object_name: str, schema: dict) -> None:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1310def document_binary_responses(spec: dict) -> list[str]:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1411def apply_parameter_components(spec: dict) -> list[str]:CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1539def apply_operation_descriptions(spec: dict) -> list[str]:CODE
LOWresources/scripts/api-docs/lint_openapi.py79def check_no_additional_false(spec: dict) -> list[str]:CODE
LOWresources/scripts/api-docs/lint_openapi.py109def check_shared_params_not_inline(spec: dict) -> list[str]:CODE
LOWresources/scripts/api-docs/lint_openapi.py128def check_no_identical_schemas(spec: dict) -> list[str]:CODE
LOWtests/PluginFactoryMockTrait.php44 protected function buildWithMockedDependencies(string $className): objectCODE
LOWtests/Repository/MetadataRepositoryTest.php44 public function testCollectGarbageExecutesQuery(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php53 public function testFindByIdReturnsFoundObject(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php83 public function testFindByIdReturnsNullIfNothingWasFound(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php111 public function testFindByObjectIdAndFieldAndTypeReturnsFoundObject(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php150 public function testFindByObjectIdAndFieldAndTypeReturnsNullIfNothingWasFound(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php187 public function testFindByObjectIdAndTypeReturnsFoundObject(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php241 public function testPersistUpdatesExistingItem(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php288 public function testPersistWritesNewItemAndReturnsId(): voidCODE
LOWtests/Repository/MetadataRepositoryTest.php335 public function testPrototypeReturnsObject(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php51 public function testCollectGarbageCollects(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php94 public function testFindIdByFileReturnsTheEpisode(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php104 public function testGetEpisodeCountReturnsValue(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php129 public function testGetEpisodeEligibleForDeletionReturnsNothingIfDisabled(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php142 public function testGetEpisodeEligibleForDeletionYieldsEpisodes(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php187 public function testGetEpisodeEligibleForDownloadYieldsEpisodes(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php249 public function testGetEpisodeEligibleForDownloadYieldsEpisodesWithoutLimit(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php310 public function testGetEpisodesReturnsEpisodesWithoutStateFilterAndDisabledCatalogs(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php345 public function testGetEpisodesReturnsEpisodesWithStateFilter(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php381 public function testGetNewestIdsByCatalogAppliesTheCountAsALimit(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php400 public function testGetNewestIdsByCatalogOmitsTheLimitForACountOfZero(): voidCODE
LOW⚡tests/Repository/PodcastEpisodeRepositoryTest.php428 public function testSetPlayedFlagsTheEpisode(): voidCODE
LOW⚡tests/Repository/PodcastEpisodeRepositoryTest.php437 public function testSetUpdateTimeStampsTheEpisode(): voidCODE
LOW⚡tests/Repository/PodcastEpisodeRepositoryTest.php446 public function testUpdateAllCountsClearsEachTotalAgainstItsOwnCountType(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php467 public function testUpdateAllCountsRunsTheSixEpisodeSweeps(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php486 public function testUpdateDescriptionWritesTheDescription(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php495 public function testUpdateFromTagsFallsBackToVbrForAnUnknownMode(): voidCODE
LOWtests/Repository/PodcastEpisodeRepositoryTest.php533 public function testUpdateWritesTheEditableProperties(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php47 public function testDeleteByCatalogRemovesTheCatalogsPodcasts(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php76 public function testFindAllByCatalogsBindsOnePlaceholderPerCatalog(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php108 public function testFindAllByCatalogsWithoutCatalogsQueriesNothing(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php119 public function testFindAllReturnsAllItems(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php148 public function testFindByFeedUrlReturnsFoundPodcast(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php176 public function testFindByFeedUrlReturnsNullIfNothingWasFound(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php195 public function testFindByIdReturnsNullIfNotFound(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php215 public function testFindByIdReturnsObject(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php236 public function testGetIdsByCatalogReadsTheCatalogsPodcasts(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php348 public function testPersistUpdatesItemIfNotNew(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php436 public function testPrototypeReturnsNewObject(): voidCODE
LOWtests/Repository/PodcastRepositoryTest.php444 public function testUpdateAllCountsRollsBothTotalsUpFromTheEpisodes(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php90 public function testDeleteSubTypeRowNamesTheBackendsOwnTable(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php99 public function testDeleteSubTypeRowReportsAFailure(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php108 public function testDropSubTypeTableToleratesATableThatIsAlreadyGone(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php118 public function testFindEnabledSeparatesADisabledCatalogFromAMissingOne(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php129 public function testFindNameFallsBackToAnEmptyString(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php139 public function testFindSubTypeIdReturnsNullWhenTheBackendsTableIsGone(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php149 public function testFindTypeReturnsNullForAMissingCatalog(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php159 public function testGetIdsAppliesNoWhereClauseWithoutNarrowing(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php304 public function testReleaseActionLockCallsReleaseLockWithTheNamespacedName(): voidCODE
LOW⚡tests/Repository/CatalogRepositoryTest.php313 public function testReleaseProcessingLockCallsReleaseLockWithTheNamespacedName(): voidCODE
2704 more matches not shown…
Decorative Section Separators26 hits · 81 pts
SeverityFileLineSnippetContext
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py56# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py608# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py610# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py645# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py647# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py811# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py813# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py1232# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_openapi_schemas.py1234# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py56# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py58# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py108# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py110# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py282# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/generate_api_methods_md.py284# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py89# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py91# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡resources/scripts/api-docs/verify_openapi_shapes.py172# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡resources/scripts/api-docs/verify_openapi_shapes.py174# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py231# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py233# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py280# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py282# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py348# ---------------------------------------------------------------------------COMMENT
MEDIUMresources/scripts/api-docs/verify_openapi_shapes.py350# ---------------------------------------------------------------------------COMMENT
Fake / Example Data13 hits · 16 pts
SeverityFileLineSnippetContext
LOW⚡tests/Repository/UserRepositoryTest.php334 ->with('UPDATE `user` SET `email` = ? WHERE `id` = ?', ['some@example.org', 666]);CODE
LOW⚡tests/Repository/UserRepositoryTest.php336 self::assertTrue($this->subject->setField(666, UserFieldEnum::EMAIL, 'some@example.org'));CODE
LOW⚡tests/Repository/Model/UserTest.php91 User::create($username, 'Full Name', 'user@example.com', '', 'password', AccessLevelEnum::USER)CODE
LOW⚡tests/Module/User/NewPasswordSenderTest.php48 ->with('admin@example.com')CODE
LOW⚡tests/Module/User/NewPasswordSenderTest.php54 self::assertFalse($this->subject->send('admin@example.com', '127.0.0.1'));CODE
LOWtests/Fixtures/Api/subsonic/getUser.xml3 <user username="admin" email="admin@example.com" scrobblingEnabled="true" adminRole="true" settingsRole="true" downloaCODE
LOWtests/Fixtures/Api/subsonic/getUsers.json9 "email": "admin@example.com",CODE
LOWtests/Fixtures/Api/subsonic/getUsers.xml4 <user username="admin" email="admin@example.com" scrobblingEnabled="true" adminRole="true" settingsRole="true" downlCODE
LOWtests/Fixtures/Api/subsonic/getUser.json7 "email": "admin@example.com",CODE
LOWtests/Fixtures/Api/opensubsonic/getUser.xml3 <user username="admin" email="admin@example.com" scrobblingEnabled="true" adminRole="true" settingsRole="true" downloaCODE
LOWtests/Fixtures/Api/opensubsonic/getUsers.json12 "email": "admin@example.com",CODE
LOWtests/Fixtures/Api/opensubsonic/getUsers.xml4 <user username="admin" email="admin@example.com" scrobblingEnabled="true" adminRole="true" settingsRole="true" downlCODE
LOWtests/Fixtures/Api/opensubsonic/getUser.json10 "email": "admin@example.com",CODE
Over-Commented Block15 hits · 15 pts
SeverityFileLineSnippetContext
LOWlocale/base/gather-messages.sh1#!/bin/bashCOMMENT
LOWresources/scripts/tests/spec_refresh.php21 * You should have received a copy of the GNU Affero General Public LicenseCOMMENT
LOWtests/Module/User/Tracking/UserTrackerTest.php61COMMENT
LOWdocs/examples/inotifywait.sh1#!/bin/bashCOMMENT
LOWdocs/examples/inotifywait.sh21# Perform catalog actions for a single fileCOMMENT
LOWdocs/examples/update_from_git.sh41COMMENT
LOWdocs/examples/catalog_update.sh1#!/bin/shCOMMENT
LOWdocs/examples/catalog_update.sh21# Arguments:COMMENT
LOWdocs/examples/catalog_update.sh41#COMMENT
LOWdocs/examples/catalog_update.sh61php bin/cli run:updateCatalog -tCOMMENT
LOWpublic/templates/jplayer.midnight.black-iframed.css1321#jp_container_1 .jp-controls-holder a.jp-volume-max { order: 7; }COMMENT
LOWpublic/themes/reborn/templates/dark.css261 color: #999;COMMENT
LOWpublic/themes/reborn/templates/light.css241COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql-analysis.yml61 # 📚 https://git.io/JvXDlCOMMENT
Unused Imports10 hits · 10 pts
SeverityFileLineSnippetContext
LOWresources/scripts/xss-probe/xss_probe.py14CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py27CODE
LOWresources/scripts/api-docs/generate_api_methods_md.py24CODE
LOWresources/scripts/api-docs/capture_reads.py11CODE
LOWresources/scripts/api-docs/format_md_tables.py21CODE
LOWresources/scripts/api-docs/verify_openapi_shapes.py31CODE
LOWresources/scripts/api-docs/lint_openapi.py25CODE
LOWresources/scripts/api-docs/generate_browse_docs.py22CODE
LOWresources/scripts/api-docs/check_openapi_examples.py23CODE
LOWresources/scripts/api-docs/browse_reference.py21CODE
Magic Placeholder Names1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHdocs/API.md156* ampache://yourapikey@localhost:993/ampache#ssl=trueCOMMENT
Deep Nesting8 hits · 7 pts
SeverityFileLineSnippetContext
LOWresources/scripts/xss-probe/xss_probe.py285CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1411CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1514CODE
LOWresources/scripts/api-docs/generate_openapi_schemas.py1617CODE
LOWresources/scripts/api-docs/generate_api_methods_md.py72CODE
LOWresources/scripts/api-docs/verify_openapi_shapes.py353CODE
LOWresources/scripts/api-docs/generate_browse_docs.py123CODE
LOWresources/scripts/api-docs/check_openapi_examples.py54CODE
Excessive Try-Catch Wrapping5 hits · 6 pts
SeverityFileLineSnippetContext
LOWresources/scripts/api-docs/capture_reads.py47 except Exception:CODE
LOW⚡resources/scripts/api-docs/verify_openapi_shapes.py163 except Exception:CODE
LOWresources/scripts/api-docs/verify_openapi_shapes.py254 except Exception:CODE
LOWresources/scripts/api-docs/verify_openapi_shapes.py401 except Exception as exc:CODE
LOWresources/scripts/api-docs/verify_openapi_shapes.py427 except Exception as exc:CODE
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHresources/scripts/api-docs/generate_openapi_schemas.py689 Json8_Data: array{...}, array<int, T>, array<string, T>, unions with null,CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHresources/scripts/api-docs/capture_reads.py47except Exception:CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMdocker/data/bin/run.sh77 # Create an initial admin account if requestedCOMMENT