AI Slop Code Risk Monitor

plausible/analytics

SlopCodeMonitor badge for plausible/analytics Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Open source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.

0.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for plausible/analytics, a Elixir project with 29,731 GitHub stars. SynthScan examined 171,641 lines of code across 445 source files, recording 86 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 0.5 (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.

0.5
Adjusted Signal
0.5
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
29.7K
Stars
Elixir
Language
171.6K
Lines of Code
445
Files
86
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 2.4/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 2.1/100 · LOW

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

PR Review Velocity Impact 2.5/100 · LOW

Which changes need focused human review? 86 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 1LOW 85

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 86 distinct pattern matches across 5 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 Identifiers73 hits · 73 pts
SeverityFileLineSnippetContext
LOWtracker/installation_support/autoconsent-to-cookies.js25export function initializeCookieConsentEngine({CODE
LOWtracker/installation_support/verifier.js14async function verifyPlausibleInstallation(options) {CODE
LOWtracker/installation_support/verifier.js121function getNormalizedPlausibleEventBody(fetchOptions) {CODE
LOWtracker/installation_support/verifier.js144function startRecordingEventFetchCalls() {CODE
LOWtracker/installation_support/verifier.js310function forceIgnoreWebdriverCondition() {CODE
LOWtracker/test/support/initialize-page-dynamically.ts73export function getConfiguredPlausibleWebSnippet({CODE
LOWtracker/test/support/initialize-page-dynamically.ts112export async function initializePageDynamically(CODE
LOWtracker/test/support/test-utils.js243export function ensurePlausibleInitialized(page) {CODE
LOWtracker/compiler/index.js112function wrapInstantlyEvaluatingFunction(baseCode) {CODE
LOWtracker/src/engagement.js105function registerEngagementListener() {CODE
LOWtracker/src/custom-events.js53function shouldInterceptNavigation(event, link) {CODE
LOWtracker/src/custom-events.js278 function handleTaggedFormSubmitEvent(event) {CODE
LOWtracker/src/custom-events.js321 function handleTaggedElementClickEvent(event) {CODE
LOWe2e/tests/dashboard/team-setup.spec.ts146async function expectCurrentTeamOnSitesPage(page: Page, teamName: string) {CODE
LOWe2e/tests/dashboard/csv-export.spec.ts389async function triggerExportAndAwaitDownload(CODE
LOWassets/js/app.js74function showChangelogNotification(el) {CODE
LOWassets/js/dashboard/api.ts89export function dashboardStateToSearchParams(CODE
LOWassets/js/dashboard/api.ts164function getSharedLinkSearchParams(): Record<string, string> {CODE
LOWassets/js/dashboard/dashboard-time-periods.ts572export function useSaveTimePreferencesToStorage({CODE
LOWassets/js/dashboard/dashboard-time-periods.ts599export function getSavedTimePreferencesFromStorage({CODE
LOWassets/js/dashboard/dashboard-time-periods.ts672export function getCurrentPeriodDisplayName({CODE
LOWassets/js/dashboard/dashboard-time-periods.ts731export function getCurrentComparisonPeriodDisplayName({CODE
LOWassets/js/dashboard/dashboard-state-context.tsx41export default function DashboardStateContextProvider({CODE
LOWassets/js/dashboard/dashboard-state.ts134export function isDateOnOrAfterStatsStartDate({CODE
LOWassets/js/dashboard/dashboard-state.ts146export function isDateBeforeOrOnCurrentDate({CODE
LOWassets/js/dashboard/dashboard-state.ts195function setDashboardPeriodAndDate({CODE
LOWassets/js/dashboard/util/fetch-suggestions.ts28export function getValueSuggestionsRequest(CODE
LOWassets/js/dashboard/util/filters.js17export function getAvailableFilterDimensions(site) {CODE
LOWassets/js/dashboard/util/filters.js72export function isFreeChoiceFilterOperation(operation) {CODE
LOWassets/js/dashboard/util/filters.js89export function getPropertyKeyFromFilterKey(filterKey) {CODE
LOWassets/js/dashboard/util/url-search-params.ts78function searchWithApiVersionReload(search: string, value: string): string {CODE
LOWassets/js/dashboard/util/url-search-params.ts229export function serializeSimpleSearchEntry([key, value]: [string, unknown]): [CODE
LOWassets/js/dashboard/util/url-search-params.ts257export function encodeURIComponentPermissive(CODE
LOWassets/js/dashboard/util/url-search-params.ts300export function maybeGetLatestReadableSearch(CODE
LOWassets/js/dashboard/util/url-search-params.ts337export function getSearchWithEnforcedSegment(CODE
LOWassets/js/dashboard/util/storage.js8function testLocalStorageAvailability() {CODE
LOWassets/js/dashboard/nav-menu/dashboard-options-menu.tsx45function DashboardOptionsMenuItems({CODE
LOW…board/nav-menu/query-periods/dashboard-period-menu.tsx45function DashboardPeriodMenuKeybinds({CODE
LOWassets/js/dashboard/filtering/segments.ts97export function formatSegmentIdAsLabelKey(id: number | string): string {CODE
LOWassets/js/dashboard/filtering/segments.ts119export function getSearchToSetSegmentFilter(CODE
LOWassets/js/dashboard/filtering/segments.ts259export function getNavigationToExpandSegment(CODE
LOW…s/js/dashboard/navigation/routeless-modals-context.tsx23export function RoutelessModalsContextProvider({CODE
LOWassets/js/dashboard/annotations/annotations.ts113export function canShowAddAnnotationButton(props: {CODE
LOWassets/js/dashboard/verification/portal.tsx24 function handleVerificationFinished(event: Event) {CODE
LOWassets/js/dashboard/verification/portal.test.tsx33function dispatchVerificationFinished(queryParams: string[]) {CODE
LOWassets/js/dashboard/components/feature-setup-notice.tsx74 function renderSecondaryCallToAction() {CODE
LOWassets/js/dashboard/extra/exploration/index.tsx30function trackExploreEntrySelected(direction: ExplorationDirection): void {CODE
LOWassets/js/dashboard/extra/exploration/index.tsx35function useScrollActiveColumnIntoView(CODE
LOWassets/js/dashboard/extra/exploration/journey.ts316export function updateJourneyOnRateLimitError({CODE
LOWassets/js/dashboard/hooks/use-query-api.ts151export function useSearchAndPaginateQueryAPI(CODE
LOWassets/js/dashboard/error/something-went-wrong.tsx8export function SomethingWentWrongMessage({CODE
LOWassets/js/dashboard/stats/imported-warning-bubble.tsx33export function FunnelsApiImportedWarningBubble({CODE
LOWassets/js/dashboard/stats/breakdowns.tsx117export function MetricValueTooltipContent({CODE
LOWassets/js/dashboard/stats/breakdowns.tsx254export function useColumnsHiddenForAllNull(CODE
LOWassets/js/dashboard/stats/graph/intervals.ts46export function extractIntervalFromDimensions(dimensions: string[]): Interval {CODE
LOWassets/js/dashboard/stats/graph/intervals.ts136function validIntervalsForMainPeriod(CODE
LOWassets/js/dashboard/stats/graph/intervals.ts152function validIntervalsForCustomComparison(CODE
LOWassets/js/dashboard/stats/graph/intervals.ts200function validIntervalsForCustomPeriod({ to, from }: DayjsRange): Interval[] {CODE
LOWassets/js/dashboard/stats/graph/intervals.ts216function validIntervalsForAllTimePeriod(CODE
LOWassets/js/dashboard/stats/graph/visitor-graph.tsx187function getStoredTopStatsHeightKey(site: Pick<PlausibleSite, 'domain'>) {CODE
13 more matches not shown…
Over-Commented Block7 hits · 7 pts
SeverityFileLineSnippetContext
LOWpriv/ua_inspector/device.shell_tv.yml1###############COMMENT
LOWpriv/ua_inspector/device.televisions.yml1###############COMMENT
LOWpriv/ua_inspector/os.oss.yml1###############COMMENT
LOWpriv/ref_inspector/referers.yml1# #######################################################################################################COMMENT
LOWe2e/playwright.config.ts41 }COMMENT
LOWassets/js/liveview/member-rows.js1// Lets people add/remove member rows and pick a role instantly, withoutCOMMENT
LOWassets/js/dashboard/email-reports-cta-banner.tsx1import React, { useState } from 'react'COMMENT
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtracker/test/transform-request.spec.ts198 return { ...payload, p: { author: 'Jane Doe' } }CODE
LOWtracker/test/transform-request.spec.ts225 author: 'Jane Doe'CODE
LOWextra/fixture/authsources.php10 'email' => 'user@example.com',CODE
LOWassets/js/dashboard/components/search-input.tsx37 | 'placeholder'CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMassets/package-lock.json9270 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",CODE
Verbosity Indicators1 hit · 1 pts
SeverityFileLineSnippetContext
LOWassets/js/dashboard/util/url-search-params.ts297 The purpose of this function is to redirect users from one of the previous versions to the current version,CODE