AI Slop Code RIsk Monitor

rommapp/romm

A beautiful, powerful, self-hosted ROM manager and player.

14.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for rommapp/romm, a Python project with 13,312 GitHub stars. SynthScan examined 588,416 lines of code across 2754 source files, recording 7905 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 14.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.

14.7
Adjusted Signal
14.7
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
13.3K
Stars
Python
Language
588.4K
Lines of Code
2.8K
Files
7.9K
Pattern Hits
2026-10-12
Scan Date
0.04
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 42.8/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 1.2/100 · LOW

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

Agent Over-Engineering Ratio 49.2/100 · MEDIUM

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

PR Review Velocity Impact 54.9/100 · HIGH

Which changes need focused human review? 7905 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 100MEDIUM 486LOW 7319

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 7905 distinct pattern matches across 21 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 Identifiers6627 hits · 5980 pts
SeverityFileLineSnippetContext
LOWfrontend/src/test-utils/unhandledRejection.ts5export async function expectNoUnhandledRejection(run: () => Promise<void>) {CODE
LOWfrontend/src/stores/streaming.ts72 function containerLabelForPlatform(CODE
LOWfrontend/src/stores/soundtrackPlayer.ts88export function resolveSoundtrackGameArtwork(CODE
LOWfrontend/src/utils/index.ts553export function areThreadsRequiredForEJSCore(core: string): boolean {CODE
LOWfrontend/src/utils/index.ts621export function getControlSchemeForPlatform(CODE
LOWfrontend/src/utils/index.ts637export function isRuffleEmulationSupported(CODE
LOWfrontend/src/utils/index.ts656export function isJsDosEmulationSupported(CODE
LOWfrontend/src/utils/index.ts721export function isEasyRpgEmulationSupported(CODE
LOW…end/src/v2/composables/useOverlayRouteDismiss/index.ts23export function installOverlayRouteDismiss(router: Router): () => void {CODE
LOWfrontend/src/v2/composables/useCan/index.ts27export function installPermissionsHydration() {CODE
LOWfrontend/src/v2/composables/useRomSync/index.ts147 function refreshAfterUserStateChange() {CODE
LOWfrontend/src/v2/composables/useBreakpoint/index.ts99export function installBreakpointAttribute(): void {CODE
LOW⚡…d/src/v2/composables/useSocketTransportHealth/index.ts17function syncDegradedFromTransport() {CODE
LOW⚡…d/src/v2/composables/useSocketTransportHealth/index.ts27function clearEngineUpgradeListener() {CODE
LOW⚡…d/src/v2/composables/useSocketTransportHealth/index.ts33function bindEngineUpgradeListener() {CODE
LOW…ontend/src/v2/composables/usePlatformPlayable/index.ts110export function usePlatformPlayableChecker(): {CODE
LOWfrontend/src/v2/composables/useNativeLaunch/index.ts49export function installNativeLaunchFeedback(): void {CODE
LOW…ontend/src/v2/composables/useGalleryFilterUrl/index.ts353 function setOrDelete(key: string, value: string | null) {CODE
LOWfrontend/src/v2/composables/useGameActions/index.ts610 async function removeFromContinuePlaying() {CODE
LOWfrontend/src/v2/utils/routeQuery.ts49export function installQueryNavigationGuard(router: Router): () => void {CODE
LOWfrontend/src/v2/utils/autofocus.ts27export function shouldClaimFocusOnModality(CODE
LOWfrontend/src/v2/utils/playerFullscreen.ts36export function installFullscreenFallback(): () => void {CODE
LOWfrontend/src/v2/utils/smartCollectionCriteria.ts242export function hasAnySmartFilterCriteria(c: SmartFilterCriteria): boolean {CODE
LOWfrontend/src/v2/utils/smartCollectionCriteria.ts562export function summarizeSmartFilterCriteria(CODE
LOWfrontend/src/v2/utils/playerBezel.ts42export function resolveStoredBezelVisible(stored: string | null): boolean {CODE
LOWfrontend/src/v2/utils/playerTouchGuard.ts12export function suppressVirtualGamepadZoneTouch(event: Event): void {CODE
LOW…nd/src/v2/components/GameDetails/WalkthroughSubtab.vue125async function confirmFolderConversionIfNeeded(): Promise<boolean> {CODE
LOWfrontend/src/v2/components/Dialogs/EditRomDialog.vue297function handleRomUpdateFromMetadata(updatedRom: UpdateRom) {CODE
LOWfrontend/src/v2/views/Settings/UserInterface.vue222function onVirtualCollectionTypeChange(value: unknown) {CODE
LOW…ibraryManagement/Config/Dialog/CreateFolderMapping.vue186function getMappingTypeDescription(type: "alias" | "variant"): string {CODE
LOWfrontend/src/components/Home/ContinuePlaying.vue24function toggleGridContinuePlaying() {CODE
LOW…nts/common/Collection/Dialog/CreateSmartCollection.vue109function toggleCollectionVisibility() {CODE
LOWfrontend/src/components/common/Game/Dialog/EditRom.vue366function handleRomUpdateFromMetadata(updatedRom: UpdateRom) {CODE
LOWfrontend/src/components/common/Dialog/SearchCover.vue29function handleShowSearchCoverDialog({ term }: { term: string }) {CODE
LOWfrontend/src/views/Settings/MetadataSources.vue119function getConnectionStatusTooltip(source: {CODE
LOW…ntend/src/views/Gallery/Collection/SmartCollection.vue15function setCurrentSmartCollection(collection: CollectionType) {CODE
LOW…end/src/views/Gallery/Collection/VirtualCollection.vue15function setCurrentVirtualCollection(collection: CollectionType) {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts438export function invalidateEmulatorJSRomCacheIfRenamed(rom: {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts460function installDefaultOptionsFallback(emulator: any) {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts518function lookUpGamepadsByBrowserIndex(emulator: any) {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts586function skipDiskSelectionBeforeStart(emulator: any) {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts602export function installEJSDefaultOptionsTrap() {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts658export function installNetplayHostAudioTap(): PatchNetplayHostAudio {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts721function isIOSFullscreenShimRequired() {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts853export function createExitEmulationButton(label: string): HTMLButtonElement {CODE
LOWfrontend/src/views/Player/EmulatorJS/Player.vue127function baselineSaveTrackerFromEmulator() {CODE
LOWfrontend/src/views/Player/EmulatorJS/Player.vue256function holdBackUntilStateApplied() {CODE
LOWfrontend/src/services/api/collection.ts194async function setSmartCollectionVisibility({CODE
LOWfrontend/src/services/api/play-session.ts23function ingestPlaySessionsKeepalive({CODE
LOWfrontend/src/services/api/config.ts42async function deletePlatformVersionConfig({ fsSlug }: { fsSlug: string }) {CODE
LOW⚡backend/startup.py72def _enqueue_recompute_save_hashes_if_needed() -> None:CODE
LOWbackend/startup.py91def _enqueue_convert_images_to_webp() -> None:CODE
LOWbackend/startup.py118async def _rebuild_outdated_metadata_stores() -> None:CODE
LOWbackend/startup.py138def _drop_legacy_scheduler_state() -> None:CODE
LOWbackend/sync_watcher.py42def _extract_device_and_platform(path: str) -> tuple[str, str, str] | None:CODE
LOWbackend/watcher.py63def get_pending_scan_coverage() -> PendingScanCoverage:CODE
LOWbackend/handler/socket_handler.py58 def _login_session_sockets_key(self, session_id: str) -> str:CODE
LOWbackend/handler/socket_handler.py182 async def unbind_from_login_session(self, sid: str) -> None:CODE
LOWbackend/handler/socket_handler.py207async def close_login_session_sockets(session_ids: Iterable[str]) -> None:CODE
LOWbackend/handler/socket_handler.py216async def close_client_token_sockets(token_ids: Iterable[int]) -> None:CODE
6567 more matches not shown…
Decorative Section Separators444 hits · 1349 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/src/stores/streaming.ts37// ── Store ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/stores/streaming.ts50 // ── Actions ────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/stores/native.ts47// ── Store ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/stores/native.ts99 // ── Getters ────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/stores/native.ts156 // ── Actions ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…end/src/v2/composables/useGalleryVirtualItems/index.ts273 // ── Structural sharing across re-packs ────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts128 // ── CD spin (+ launch drop) ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts191 // ── Cartridge slot-in ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts203 // ── Launch flourish (player view) ─────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts222 // ── Hover video ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts260 // ── Motion preference flips off mid-flight ────────────────────────COMMENT
MEDIUM…ontend/src/v2/composables/useGalleryFilterUrl/index.ts152 // ── URL → store ──────────────────────────────────────────────COMMENT
MEDIUM…ontend/src/v2/composables/useGalleryFilterUrl/index.ts347 // ── Store → URL ──────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Settings/SettingsSection.vue7// ├─────────────────────────────────────────────────────┤COMMENT
MEDIUMfrontend/src/v2/components/Settings/SettingsSection.vue10// └─────────────────────────────────────────────────────┘COMMENT
MEDIUM…ontend/src/v2/components/Settings/ScanPriorityList.vue80// ── Free-text entry (allow-custom only) ─────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepAdmin.vue59// ── Avatar picker ──────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue59// ── Detected platforms ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue111// ── Detected-pane filter ───────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue163// ── Supported (selectable) platforms ───────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue212// ── Search ─────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue226// ── Selection helpers ──────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue305// ── Structure banner copy ──────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/SettingsTab.vue48// ── Details edit form ──────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/SettingsTab.vue124// ── Details (read-only) ────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue135// ── Tri-state mapping helpers ──────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue289// ── Multi-select sections ──────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue438// ── Platform multi-select ──────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue449// ── Game length (HowLongToBeat main story) ─────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue482// ── Active-filter count (footer badge) ────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue84// ── Edit form state ─────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue165// ── Cover preview ───────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue209// ── Cover actions ───────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue238// ── Save ────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue480// ── Toolbar ─────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue523// ── Viewport range / AlphaStrip / dwell prefetch ────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue553// ── Debug overlay bridge ────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue747// ── Search filter (debounced) ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue750// ── Sort ──────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue781// ── Scroll restoration ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue866// ── Slot helpers ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FirmwareTab.vue68// ── Inline upload (no dialog: the dropzone lives in the tab) ──────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/SelectionBar.vue326// ── Outline ─────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/GameCard/GameCard.vue201// ── Cover hover / focus ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/GameDetails/NotesTab.vue113// ── Selection (URL-synced via ?note=<id>) ────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/GameDetails/NotesTab.vue154// ── Edit form ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Dialogs/EditRomDialog.vue110// ── Tabbed editing surface ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardPicker.vue92// ── Create dialog ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardPicker.vue96// ── Manage dialog ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/StreamStage.vue266// ── Fullscreen ─────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardManager.vue68// ── Create ──────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardManager.vue101// ── Edit ────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardManager.vue141// ── Delete ──────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardManager.vue177// ── Version history (lazy per card) ─────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/MemoryCardManager.vue215// ── Download / upload ───────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts39// ── Defaults ────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts43// ── Value badges ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts60// ── Steps + ticks ──────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts72// ── Range examples ─────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts97// ── Color tones ────────────────────────────────────────────────────COMMENT
384 more matches not shown…
Over-Commented Block235 hits · 235 pts
SeverityFileLineSnippetContext
LOWdocker/gme/romm_gme.cpp1// Entry points the soundtrack player's AudioWorklet calls on top of libgme'sCOMMENT
LOWfrontend/.storybook/preview.ts21import {COMMENT
LOW…end/src/v2/composables/useGalleryVirtualItems/types.ts1// Discriminated union describing every kind of row that can live inside aCOMMENT
LOW…end/src/v2/composables/useGalleryVirtualItems/index.ts1// useGalleryVirtualItems turns the gallery's structural state (mode,COMMENT
LOW…end/src/v2/composables/useGalleryVirtualItems/index.ts21// * Structural sharing: unchanged item objects are reused from the previousCOMMENT
LOWfrontend/src/v2/composables/useSnackbar/index.ts1// useSnackbar: typed convenience wrapper around the global `snackbarShow`COMMENT
LOWfrontend/src/v2/composables/useReadingProgress/index.ts1// useReadingProgress: tracks how far through a document the reader is, andCOMMENT
LOWfrontend/src/v2/composables/useConfirm/index.ts1// useConfirm: open the global ConfirmDialog and await the user's choice.COMMENT
LOWfrontend/src/v2/composables/useCoverAnimation/index.ts1// useCoverAnimation: the "juicy" motion layer for alt-art game covers.COMMENT
LOW…tend/src/v2/composables/useVirtualScrollDebug/index.ts1// useVirtualScrollDebug: shared diagnostics bridge from the activeCOMMENT
LOWfrontend/src/v2/composables/useGamepad/index.ts1// useGamepadCOMMENT
LOWfrontend/src/v2/composables/useGamepad/index.ts21// Action buttons (A/B/Back/Start/LB/RB) fire once per press (no repeat),COMMENT
LOW…tend/src/v2/composables/useGalleryCoverRatios/index.ts1// useGalleryCoverRatios: the gallery's measured natural cover ratios.COMMENT
LOW…tend/src/v2/composables/useGalleryCoverRatios/index.ts21import storeGalleryRoms from "@/v2/stores/galleryRoms";COMMENT
LOW…end/src/v2/composables/useOverlayRouteDismiss/index.ts1// useOverlayRouteDismiss: a route change takes the open overlays with it.COMMENT
LOWfrontend/src/v2/composables/useReducedMotion/index.ts1// useReducedMotion: the single "reduce motion / effects" control.COMMENT
LOWfrontend/src/v2/composables/useCan/index.ts1// useCan: reactive permission check against the v2 permissions store.COMMENT
LOWfrontend/src/v2/composables/useGlobalHotkeys/index.ts1// useGlobalHotkeys: app-wide keyboard shortcuts. Kept intentionallyCOMMENT
LOWfrontend/src/v2/composables/useCoverArt/index.ts1// useCoverArt: single source of truth for what image a game cover showsCOMMENT
LOWfrontend/src/v2/composables/useBoxFaces/index.ts1// useBoxFaces: resolves the three flat scans an interactive 3D box needsCOMMENT
LOW…ontend/src/v2/composables/useServerConnection/index.ts1// useServerConnection: single orchestrator for backend reachability in v2.COMMENT
LOWfrontend/src/v2/composables/useBreakpoint/index.ts1// useBreakpoint: reactive responsive breakpoints with the same namesCOMMENT
LOW…ntend/src/v2/composables/useGalleryProvenance/index.ts1// useGalleryProvenance: did the user reach the details view by clickingCOMMENT
LOWfrontend/src/v2/composables/useCanPlay/index.ts1// useCanPlay: reactive "can this ROM be played in the browser?" check.COMMENT
LOW…ontend/src/v2/composables/usePlatformPlayable/index.ts1// usePlatformPlayable: reactive "can any ROM on this platform runCOMMENT
LOWfrontend/src/v2/composables/useGalleryOrderUrl/index.ts1// useGalleryOrderUrl - bookmarkable gallery sort via URL query params.COMMENT
LOWfrontend/src/v2/composables/useSocketEvent/index.ts1// useSocketEvent: typed wrapper around the shared Socket.IO instance withCOMMENT
LOW…ontend/src/v2/composables/useRightStickScroll/index.ts1// useRightStickScrollCOMMENT
LOWfrontend/src/v2/composables/useScanLifecycle/index.ts1// useScanLifecycle: global wire-up between the scan socket events and theCOMMENT
LOWfrontend/src/v2/composables/useGridNav/index.ts1// useGridNavCOMMENT
LOWfrontend/src/v2/composables/useGridNav/index.ts21// one cell), the first cell of the grid / the last.COMMENT
LOW…ontend/src/v2/composables/useGalleryFilterUrl/index.ts1// useGalleryFilterUrl: bookmarkable gallery filters via URL queryCOMMENT
LOW…ontend/src/v2/composables/useGalleryFilterUrl/index.ts21// ?filterSaves=true|falseCOMMENT
LOWfrontend/src/v2/composables/useGalleryMode/index.ts1// useGalleryMode: global gallery-view preferences backed by localStorage.COMMENT
LOWfrontend/src/v2/composables/useCrtMode/index.ts1// useCrtMode: singleton toggle for the cosmetic "CRT mode" shader.COMMENT
LOWfrontend/src/v2/composables/usePlaySession/index.ts1// usePlaySession: records a single play session's wall-clock and ingests itCOMMENT
LOWfrontend/src/v2/composables/useWebpSupport/index.ts1// useWebpSupport: single-source resolution of whether the backend servesCOMMENT
LOWfrontend/src/v2/composables/useViewTransition/index.ts1// useViewTransition: tiny wrapper around the browser View Transitions APICOMMENT
LOWfrontend/src/v2/composables/useViewTransition/index.ts41export interface MorphSource {COMMENT
LOWfrontend/src/v2/composables/useViewTransition/index.ts141}COMMENT
LOWfrontend/src/v2/composables/usePageTitle/index.ts1// usePageTitleCOMMENT
LOW…tend/src/v2/composables/useGalleryViewModeUrl/index.ts1// useGalleryViewModeUrl: bookmarkable view-mode (groupBy + layout) viaCOMMENT
LOWfrontend/src/v2/composables/useScanProviders/index.ts1// useScanProviders: the provider + hash-matcher model shared by everyCOMMENT
LOW…d/src/v2/composables/useGallerySelectionInput/index.ts1// useGallerySelectionInput: shared input plumbing that turnsCOMMENT
LOW…ntend/src/v2/composables/usePlatformIconCache/index.ts1// Singleton in-memory cache of platform icons as blob URLs.COMMENT
LOWfrontend/src/v2/composables/useThemeMode/index.ts1// useThemeMode: reactive `isLight` / `isDark` driven by the same sourceCOMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts1// galleryRoms (v2): windowed/sparse store for the active gallery list.COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts101 withCharIndex: false,COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts161// as a cancel in `fetchWindowAt` (no `failedWindows` entry, no retry) andCOMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts241 failedWindows: Set<number>;COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts601 if (offset === 0 && !this.metadataLoaded) this.initialFetching = true;COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts641 // the guard below leaves the established size alone.COMMENT
LOWfrontend/src/v2/stores/focusRestoration.ts1// focusRestoration (v2): remembers each route's last focused tile soCOMMENT
LOWfrontend/src/v2/stores/scrollRestoration.ts1// scrollRestoration (v2): remembers each route's last scrollTop on theCOMMENT
LOWfrontend/src/v2/stores/gallerySelection.ts1// v2GallerySelection: multi-select state for the gallery viewsCOMMENT
LOWfrontend/src/v2/stores/gallerySelection.ts21// - `enabled` getter: true when at least one ROM is selected. TheCOMMENT
LOWfrontend/src/v2/utils/validation.ts1// Validation helpers for v2 forms. Each export returns a Vuetify-compatibleCOMMENT
LOWfrontend/src/v2/utils/covers.ts1// Procedural "no cover" artwork: v2 port of v1's `utils/covers`.COMMENT
LOWfrontend/src/v2/utils/smartCollectionCriteria.ts1// Smart-collection filter criteria helpers: single source of truth forCOMMENT
LOWfrontend/src/v2/utils/playerBezel.ts1// Resolving the bezel overlay image the EmulatorJS player draws around aCOMMENT
175 more matches not shown…
Excessive Try-Catch Wrapping191 hits · 204 pts
SeverityFileLineSnippetContext
LOW⚡backend/startup.py68 except Exception:CODE
LOW⚡backend/startup.py76 except Exception:CODE
LOWbackend/startup.py167 except Exception:CODE
LOWbackend/startup.py189 except Exception:CODE
LOWbackend/startup.py201 except Exception:CODE
LOWbackend/sync_watcher.py163 except Exception:CODE
LOWbackend/handler/socket_handler.py85 except Exception: # noqa: BLE001CODE
LOWbackend/handler/socket_handler.py141 except Exception: # noqa: BLE001CODE
LOWbackend/handler/socket_handler.py153 except Exception: # noqa: BLE001CODE
LOWbackend/handler/socket_handler.py160 except Exception: # noqa: BLE001CODE
LOWbackend/handler/socket_handler.py188 except Exception: # noqa: BLE001CODE
LOWbackend/handler/scan_handler.py1272 except Exception as exc:CODE
LOWbackend/handler/scan_handler.py1286 except Exception as exc:CODE
LOWbackend/handler/asset_store.py302 except Exception:CODE
LOWbackend/handler/asset_store.py463 except Exception:CODE
LOWbackend/handler/notification_handler.py139 except Exception: # noqa: BLE001 - never fail the job that is reportingCODE
LOWbackend/handler/notification_handler.py178 except Exception: # noqa: BLE001CODE
LOWbackend/handler/audit_handler.py105 except Exception: # noqa: BLE001 - the name is a nicetyCODE
LOWbackend/handler/audit_handler.py253 except Exception: # noqa: BLE001 - never fail the action being recordedCODE
LOW⚡backend/handler/audit_handler.py285 except Exception: # noqa: BLE001 - better a duplicate than a gapCODE
LOW⚡backend/handler/audit_handler.py295 except Exception: # noqa: BLE001 - the claim expires with its window anywayCODE
LOW⚡backend/handler/audit_handler.py303 except Exception: # noqa: BLE001 - better a duplicate than a gapCODE
LOWbackend/handler/rom_upload.py230 except Exception as exc:CODE
LOWbackend/handler/activity_handler.py183 except Exception as e: # noqa: BLE001CODE
LOWbackend/handler/activity_handler.py198 except Exception as e: # noqa: BLE001CODE
LOWbackend/handler/activity_handler.py213 except Exception as e: # noqa: BLE001CODE
LOWbackend/handler/activity_handler.py217 except Exception as e: # noqa: BLE001CODE
LOWbackend/handler/activity_handler.py360 except Exception: # noqa: BLE001 - activity is best-effort, like its broadcastCODE
LOWbackend/handler/rom_conversion.py112 except Exception:CODE
LOWbackend/handler/rom_conversion.py115 except Exception:CODE
LOWbackend/handler/database/roms_handler.py780 except Exception:CODE
LOWbackend/handler/database/roms_handler.py817 except Exception:CODE
LOWbackend/handler/auth/base_handler.py586 except Exception as exc: # noqa: BLE001CODE
LOWbackend/handler/walkthrough/gamefaqs.py172 except Exception as exc:CODE
LOWbackend/handler/walkthrough/gamefaqs.py194 except Exception as exc:CODE
LOWbackend/handler/filesystem/assets_handler.py77 except Exception as e:CODE
LOWbackend/handler/filesystem/assets_handler.py241 except Exception as e:CODE
LOWbackend/handler/filesystem/resources_handler.py303 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py532 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py661 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py831 except Exception as exc:CODE
LOWbackend/handler/notification_channels/delivery.py84 except Exception: # noqa: BLE001 - the inbox already has itCODE
LOWbackend/handler/notification_channels/delivery.py159 except Exception as exc: # noqa: BLE001CODE
LOW…ckend/handler/notification_channels/apprise_channel.py510 except Exception as exc: # noqa: BLE001 - a plugin says why it refused the URLCODE
LOW…ckend/handler/notification_channels/apprise_channel.py622 except Exception as exc: # noqa: BLE001 - a plugin says why it refused the URLCODE
LOWbackend/handler/notification_channels/confirmation.py71 except Exception:CODE
LOWbackend/handler/notification_channels/channels.py135 except Exception:CODE
LOWbackend/handler/notification_channels/channels.py226 except Exception as exc: # noqa: BLE001 - the error goes back to the userCODE
LOWbackend/handler/streaming/memory_cards.py91 except Exception as exc:CODE
LOWbackend/handler/streaming/memory_cards.py138 except Exception:CODE
LOWbackend/handler/streaming/memory_cards.py293 except Exception:CODE
LOWbackend/handler/streaming/memory_cards.py323 except Exception:CODE
LOWbackend/handler/streaming/launch.py137 except Exception as exc:CODE
LOWbackend/handler/streaming/lifecycle.py220 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py288 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py305 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py313 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py328 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py379 except Exception:CODE
LOWbackend/handler/streaming/lifecycle.py456 except Exception:CODE
131 more matches not shown…
Cross-File Repetition40 hits · 200 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/database/states_handler.py0ids only, so no `save` is built and no eager rom or user join fires.STRING
HIGHbackend/handler/database/roms_handler.py0ids only, so no `save` is built and no eager rom or user join fires.STRING
HIGHbackend/handler/database/saves_handler.py0ids only, so no `save` is built and no eager rom or user join fires.STRING
HIGHbackend/tests/handler/metadata/test_igdb_handler.py0a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was passSTRING
HIGHbackend/tests/handler/metadata/test_moby_handler.py0a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was passSTRING
HIGHbackend/tests/handler/metadata/test_ss_handler.py0a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was passSTRING
HIGHbackend/tests/adapters/services/test_mobygames.py0test that the request reserves a rate-limiter slot before sending.STRING
HIGH…ckend/tests/adapters/services/test_retroachivements.py0test that the request reserves a rate-limiter slot before sending.STRING
HIGHbackend/tests/adapters/services/test_igdb.py0test that the request reserves a rate-limiter slot before sending.STRING
HIGHbackend/tests/adapters/services/test_mobygames.py0integration tests with real api calls using vcr cassettes.STRING
HIGHbackend/tests/adapters/services/test_steamgriddb.py0integration tests with real api calls using vcr cassettes.STRING
HIGHbackend/tests/adapters/services/test_screenscraper.py0integration tests with real api calls using vcr cassettes.STRING
HIGHbackend/alembic/versions/0045_roms_metadata_update.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGHbackend/alembic/versions/0074_fix_empty_json_arrays.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGH…kend/alembic/versions/0052_roms_metadata_flashpoint.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGH…nd/alembic/versions/0063_roms_metadata_player_count.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGH…nd/alembic/versions/0098_generated_metadata_columns.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGHbackend/alembic/versions/0061_manual_metadata.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGHbackend/alembic/versions/0070_ss_age_ratings.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGH…ckend/alembic/versions/0058_roms_metadata_launchbox.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.maSTRING
HIGHbackend/alembic/versions/0045_roms_metadata_update.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGH…kend/alembic/versions/0052_roms_metadata_flashpoint.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGH…nd/alembic/versions/0063_roms_metadata_player_count.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGHbackend/alembic/versions/0061_manual_metadata.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGHbackend/alembic/versions/0070_ss_age_ratings.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGH…ckend/alembic/versions/0058_roms_metadata_launchbox.py0create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_STRING
HIGHbackend/alembic/versions/0127_rom_identity_keys.py0create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, nSTRING
HIGH…nd/alembic/versions/0073_sibling_roms_metadata_only.py0create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, nSTRING
HIGHbackend/alembic/versions/0048_sibling_roms_more_ids.py0create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, nSTRING
HIGHbackend/alembic/versions/0069_sibling_roms_fs_name.py0create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, nSTRING
HIGHbackend/alembic/versions/0071_sibling_roms_fs_name.py0create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, nSTRING
HIGH…end/alembic/versions/0112_publisher_developer_split.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGH…ckend/alembic/versions/0123_recommendation_metadata.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGHbackend/alembic/versions/0148_rom_age_limits.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGH…kend/alembic/versions/0103_roms_facets_provider_ids.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGHbackend/alembic/versions/0115_add_steam_metadata.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGH…d/alembic/versions/0114_demozoo_pouet_csdb_metadata.py0create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets (STRING
HIGH…kend/alembic/versions/0038_add_ssid_to_sibling_roms.py0create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as creSTRING
HIGHbackend/alembic/versions/0024_sibling_roms_db_view.py0create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as creSTRING
HIGHbackend/alembic/versions/0048_sibling_roms_more_ids.py0create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as creSTRING
Empty Error Handlers37 hits · 185 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/asset_store.py299except FileNotFoundError:CODE
HIGHbackend/handler/asset_store.py326except FileNotFoundError:CODE
HIGHbackend/handler/asset_store.py150except FileNotFoundError:CODE
HIGHbackend/handler/activity_handler.py351except WatchError:CODE
HIGHbackend/handler/database/roms_handler.py521except WatchError:CODE
HIGHbackend/handler/database/deleted_assets_handler.py23except IntegrityError:CODE
HIGHbackend/handler/database/collections_handler.py228except IntegrityError:CODE
HIGHbackend/handler/filesystem/resources_handler.py953except FileNotFoundError:CODE
HIGHbackend/handler/filesystem/resources_handler.py991except FileNotFoundError:CODE
HIGHbackend/handler/streaming/imports.py137except zipfile.BadZipFile:CODE
HIGHbackend/handler/streaming/saves.py86except WatchError:CODE
HIGHbackend/handler/streaming/saves.py205except FileNotFoundError:CODE
HIGHbackend/handler/sync/ssh_handler.py204except asyncssh.SFTPError:CODE
HIGHbackend/tasks/scheduled/cleanup_upload_tmp.py34except OSError:CODE
HIGHbackend/endpoints/saves.py343except FileNotFoundError:CODE
HIGHbackend/endpoints/saves.py394except FileNotFoundError:CODE
HIGHbackend/endpoints/sockets/logs.py169except Exception: # noqa: BLE001 - best-effort cleanup # nosec B110CODE
HIGHbackend/endpoints/sockets/scan.py770except FileNotFoundError:CODE
HIGHbackend/endpoints/sockets/scan.py775except FileNotFoundError:CODE
HIGHbackend/endpoints/sockets/scan.py782except FileNotFoundError:CODE
HIGHbackend/endpoints/sockets/scan.py790except FileNotFoundError:CODE
HIGHbackend/endpoints/roms/__init__.py1852except FileNotFoundError:CODE
HIGHbackend/logger/log_stream_handler.py53except Exception: # noqa: BLE001 - never raise/spam # nosec B110CODE
HIGHbackend/config/config_manager.py1562except KeyError:CODE
HIGHbackend/config/config_manager.py1586except KeyError:CODE
HIGHbackend/config/config_manager.py1613except ValueError:CODE
HIGHbackend/tests/handler/database/test_saves_handler.py1286except NoResultFound:CODE
HIGHbackend/tests/endpoints/test_logs.py147except asyncio.CancelledError:CODE
HIGHbackend/tests/utils/test_ssrf.py652except ValidationError:CODE
HIGHbackend/tests/utils/test_tls.py118except ssl.SSLWantReadError:CODE
HIGHbackend/tests/utils/test_tls.py125except ssl.SSLWantReadError:CODE
HIGHbackend/utils/psp_hasher.py154except OSError:CODE
HIGHbackend/utils/zip_cache.py142except TypeError:CODE
HIGHbackend/utils/filesystem.py116except OSError:CODE
HIGHbackend/utils/rvz_hasher.py325except OSError:CODE
HIGHbackend/utils/datetime.py30except (TypeError, ValueError, AttributeError):CODE
HIGHbackend/alembic/versions/0022_collections_.py71except json.JSONDecodeError:CODE
Self-Referential Comments34 hits · 110 pts
SeverityFileLineSnippetContext
MEDIUMentrypoint.sh45# Define a signal handler to propagate termination signalsCOMMENT
MEDIUMbackend/sync_watcher.py133 # Create a sync sessionCOMMENT
MEDIUMbackend/handler/database/roms_handler.py1760 # Create a subquery that identifies the primary ROM in each group.COMMENT
MEDIUMbackend/handler/metadata/gamelist_handler.py415 # Create a copy of the metadata to avoid modifying the cached versionCOMMENT
MEDIUMbackend/endpoints/sync/__init__.py579 # Create a session and enqueue the jobCOMMENT
MEDIUMbackend/tests/handler/auth/test_session_middleware.py198 # Create a sessionCOMMENT
MEDIUMbackend/tests/handler/auth/test_session_middleware.py328 # Create a sessionCOMMENT
MEDIUM⚡backend/tests/handler/filesystem/test_base_handler.py309 # Create a file firstCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_base_handler.py324 # Create a file (should not be listed)COMMENT
MEDIUM⚡backend/tests/handler/filesystem/test_roms_handler.py1322 # Create a test file with known content for hash verificationCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py576 # Create the test fileCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py1171 # Create a test file to renameCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py1458 # Create a mock CHD v5 file in a temporary directoryCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py1474 # Create a new handler instance with temp base pathCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py1790 # Create a CHD v4 file (should not use internal hash logic)COMMENT
MEDIUM…end/tests/handler/filesystem/test_resources_handler.py248 # Create a mock image with high resolutionCOMMENT
MEDIUM…end/tests/handler/filesystem/test_resources_handler.py266 # Create a mock image with low resolutionCOMMENT
MEDIUMbackend/tests/tasks/test_update_switch_titledb.py150 # Create a large dataset to test batchingCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py129 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py255 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py294 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py345 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_sync_push_pull.py182 # Create an additional archival (null-slot) save with the same filenameCOMMENT
MEDIUM⚡backend/tests/endpoints/test_tasks.py238 # Create a token without TASKS_RUN scopeCOMMENT
MEDIUMbackend/tests/adapters/services/test_mobygames.py59 # Create a real request-like objectCOMMENT
MEDIUMbackend/tests/adapters/services/test_steamgriddb.py42 # Create a real request-like objectCOMMENT
MEDIUM…ckend/tests/adapters/services/test_retroachivements.py68 # Create a real request-like objectCOMMENT
MEDIUMbackend/tests/adapters/services/test_screenscraper.py175 # Create a real request-like objectCOMMENT
MEDIUMbackend/models/rom.py1290 # Create a deep copy to avoid mutating the original metadataCOMMENT
MEDIUMbackend/models/collection.py162 # Create a reversible encoded IDCOMMENT
MEDIUM⚡backend/alembic/versions/0022_collections_.py36 # Define the path for the new folderCOMMENT
MEDIUM⚡backend/alembic/versions/0022_collections_.py39 # Create the new folder if it doesn't existCOMMENT
MEDIUMbackend/alembic/versions/0057_multi_notes.py23 # Create the new rom_notes tableCOMMENT
MEDIUMbackend/alembic/versions/0047_smart_collections.py24 # Create the smart collections tableCOMMENT
Unused Imports98 hits · 98 pts
SeverityFileLineSnippetContext
LOWbackend/main.py13CODE
LOWbackend/main.py14CODE
LOWbackend/main.py15CODE
LOWbackend/main.py16CODE
LOWbackend/main.py17CODE
LOWbackend/main.py18CODE
LOWbackend/handler/socket_handler.py13CODE
LOWbackend/handler/audit_handler.py3CODE
LOWbackend/handler/activity_handler.py9CODE
LOWbackend/handler/recommendation/serving.py8CODE
LOWbackend/handler/recommendation/__init__.py1CODE
LOWbackend/handler/recommendation/__init__.py1CODE
LOWbackend/handler/recommendation/__init__.py1CODE
LOWbackend/handler/recommendation/__init__.py2CODE
LOWbackend/handler/recommendation/__init__.py2CODE
LOWbackend/handler/recommendation/__init__.py3CODE
LOWbackend/handler/recommendation/__init__.py3CODE
LOWbackend/handler/recommendation/builder.py9CODE
LOWbackend/handler/recommendation/diversity.py8CODE
LOWbackend/handler/database/recommendations_handler.py1CODE
LOWbackend/handler/database/stats_handler.py1CODE
LOWbackend/handler/auth/rom_visibility.py3CODE
LOWbackend/handler/auth/permissions_map.py19CODE
LOWbackend/handler/auth/permissions.py12CODE
LOWbackend/handler/auth/dependencies.py16CODE
LOWbackend/handler/walkthrough/gamefaqs.py10CODE
LOWbackend/handler/walkthrough/__init__.py1CODE
LOWbackend/handler/walkthrough/__init__.py1CODE
LOWbackend/handler/walkthrough/__init__.py1CODE
LOWbackend/handler/walkthrough/__init__.py1CODE
LOWbackend/handler/walkthrough/__init__.py1CODE
LOWbackend/handler/filesystem/assets_handler.py22CODE
LOWbackend/handler/filesystem/__init__.py3CODE
LOWbackend/handler/filesystem/__init__.py3CODE
LOWbackend/handler/filesystem/__init__.py8CODE
LOWbackend/handler/filesystem/__init__.py8CODE
LOWbackend/handler/streaming/protocol.py8CODE
LOWbackend/handler/sync/comparison.py1CODE
LOWbackend/handler/sync/ssh_handler.py11CODE
LOWbackend/handler/sync/retroarch/psp.py6CODE
LOWbackend/handler/sync/retroarch/browser.py4CODE
LOWbackend/handler/sync/retroarch/sync_handler.py4CODE
LOWbackend/handler/metadata/base_handler.py31CODE
LOWbackend/handler/metadata/launchbox_handler/__init__.py1CODE
LOWbackend/tools/generate_test_data.py18CODE
LOWbackend/tools/inspect_recommendations.py25CODE
LOWbackend/tools/backfill_igdb_tags.py20CODE
LOWbackend/endpoints/sockets/scan.py1CODE
LOWbackend/endpoints/responses/rom.py1CODE
LOWbackend/endpoints/responses/permission.py12CODE
LOWbackend/endpoints/responses/music.py1CODE
LOWbackend/endpoints/responses/recommendation.py1CODE
LOWbackend/endpoints/responses/collection.py6CODE
LOWbackend/endpoints/responses/collection.py6CODE
LOWbackend/tests/handler/recommendation/test_diversity.py14CODE
LOWbackend/utils/zip_cache.py1CODE
LOWbackend/utils/conversion_cache.py1CODE
LOWbackend/utils/m3u.py1CODE
LOWbackend/utils/media_types.py1CODE
LOWbackend/utils/age_ratings.py3CODE
38 more matches not shown…
Docstring Block Structure15 hits · 75 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/database/saves_handler.py499Delete every version of a slot past the ``keep`` newest. The slot's record is locked while its versions are lisSTRING
HIGHbackend/handler/auth/base_handler.py61A valid, unused RomM username for the name an identity provider chose. Args: provided (str): The username aSTRING
HIGHbackend/handler/filesystem/base_handler.py577 List all directories in a given path. Args: path: Relative path within base directory STRING
HIGHbackend/handler/filesystem/base_handler.py681 Write file to filesystem using a streamed approach. The stream lands in a temporary file that is renamSTRING
HIGHbackend/handler/filesystem/base_handler.py721 Read file from filesystem. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/handler/filesystem/base_handler.py749 Stream file from filesystem. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/handler/filesystem/base_handler.py978 List all files in a directory. Args: directory: Relative path to the directory ReSTRING
HIGHbackend/handler/filesystem/base_handler.py1047 Get the size of a file. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/endpoints/auth.py196OAuth2 token endpoint Args: form_data (Annotated[OAuth2RequestForm, Depends): Form Data with OAuth2 info STRING
HIGHbackend/endpoints/auth.py336OIDC login endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExceptSTRING
HIGHbackend/endpoints/auth.py363OIDC callback endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExcSTRING
HIGHbackend/endpoints/user.py407Update user endpoint Args: request (Request): Fastapi Requests object user_id (int): User internal STRING
HIGHbackend/endpoints/firmware.py48Upload firmware files endpoint Args: request (Request): Fastapi Request object platform_slug (str):STRING
HIGHbackend/utils/filesystem.py174 Replace invalid characters in the filename to make it valid across common filesystems and prevent path-traversaSTRING
HIGHbackend/adapters/services/response_validation.py43Decode a provider reply, logging each new way it strays from `tp` once. Args: tp: The TypedDict (or containSTRING
Deep Nesting75 hits · 71 pts
SeverityFileLineSnippetContext
LOWfrontend/src/locales/check_i18n_sorted.py31CODE
LOWbackend/handler/scan_handler.py593CODE
LOWbackend/handler/scan_handler.py1041CODE
LOWbackend/handler/asset_store.py343CODE
LOWbackend/handler/database/roms_handler.py1446CODE
LOWbackend/handler/database/recommendations_handler.py150CODE
LOWbackend/handler/database/collections_handler.py199CODE
LOWbackend/handler/auth/hybrid_auth.py64CODE
LOW…nd/handler/auth/middleware/redis_session_middleware.py46CODE
LOW…nd/handler/auth/middleware/redis_session_middleware.py68CODE
LOWbackend/handler/filesystem/resources_handler.py281CODE
LOWbackend/handler/filesystem/resources_handler.py509CODE
LOWbackend/handler/filesystem/resources_handler.py647CODE
LOWbackend/handler/filesystem/resources_handler.py811CODE
LOWbackend/handler/filesystem/base_handler.py403CODE
LOWbackend/handler/filesystem/base_handler.py625CODE
LOW…ckend/handler/notification_channels/apprise_channel.py427CODE
LOWbackend/handler/streaming/memory_cards.py118CODE
LOWbackend/handler/streaming/launch.py42CODE
LOWbackend/handler/sync/ssh_handler.py120CODE
LOWbackend/handler/metadata/hltb_handler.py381CODE
LOWbackend/handler/metadata/sgdb_handler.py88CODE
LOWbackend/handler/metadata/hasheous_handler.py342CODE
LOWbackend/handler/metadata/launchbox_handler/handler.py80CODE
LOW…end/handler/metadata/launchbox_handler/local_source.py17CODE
LOWbackend/tasks/sync_push_pull_task.py67CODE
LOWbackend/tasks/sync_push_pull_task.py376CODE
LOWbackend/tasks/manual/recompute_save_content_hashes.py59CODE
LOWbackend/tasks/scheduled/update_launchbox_metadata.py103CODE
LOWbackend/tasks/scheduled/convert_images_to_webp.py60CODE
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py76CODE
LOWbackend/tools/generate_test_data.py734CODE
LOWbackend/tools/backfill_igdb_tags.py143CODE
LOWbackend/tools/measure_dump_cache.py115CODE
LOWbackend/tools/xml_diagnostics.py39CODE
LOWbackend/endpoints/firmware.py312CODE
LOWbackend/endpoints/collections.py451CODE
LOWbackend/endpoints/saves.py191CODE
LOWbackend/endpoints/heartbeat.py287CODE
LOWbackend/endpoints/sockets/logs.py115CODE
LOWbackend/endpoints/sockets/scan.py322CODE
LOWbackend/endpoints/sockets/scan.py959CODE
LOWbackend/endpoints/sockets/scan.py1171CODE
LOWbackend/endpoints/roms/upload.py481CODE
LOWbackend/endpoints/roms/__init__.py1513CODE
LOWbackend/endpoints/roms/__init__.py1874CODE
LOWbackend/endpoints/roms/__init__.py2470CODE
LOWbackend/config/config_manager.py141CODE
LOWbackend/config/config_manager.py1127CODE
LOWbackend/tests/conftest.py105CODE
LOWbackend/tests/test_migrations.py98CODE
LOWbackend/tests/handler/database/test_saves_handler.py1257CODE
LOWbackend/tests/handler/database/test_saves_handler.py1267CODE
LOWbackend/tests/handler/database/test_buffered_results.py94CODE
LOWbackend/tests/utils/test_audio_tags.py254CODE
LOWbackend/tests/utils/test_pegasus_exporter.py58CODE
LOWbackend/tests/utils/test_conversion_cache.py308CODE
LOWbackend/tests/utils/test_rvz_hasher.py355CODE
LOWbackend/tests/adapters/services/test_screenscraper.py1122CODE
LOWbackend/utils/psp_hasher.py65CODE
15 more matches not shown…
Redundant / Tautological Comments26 hits · 43 pts
SeverityFileLineSnippetContext
LOWbackend/handler/auth/hybrid_auth.py67 # Check if session key already stored in cacheCOMMENT
LOWbackend/handler/auth/hybrid_auth.py82 # Check if basic auth header is validCOMMENT
LOWbackend/handler/auth/hybrid_auth.py101 # Check if bearer auth header is validCOMMENT
LOWbackend/handler/auth/hybrid_auth.py144 # Check if we're in KIOSK_MODECOMMENT
LOWbackend/handler/filesystem/resources_handler.py320 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/resources_handler.py550 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/resources_handler.py685 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/base_handler.py544 # Check if the file name matches a pattern in the excluded list.COMMENT
LOWbackend/handler/filesystem/base_handler.py658 # Write file atomicallyCOMMENT
LOWbackend/handler/metadata/flashpoint_handler.py237 # Check if the filename is a UUIDCOMMENT
LOWbackend/handler/metadata/hasheous_handler.py294 # Check if its a 404 errorCOMMENT
LOWbackend/handler/metadata/launchbox_handler/handler.py182 # Check if game is scummvm shortnameCOMMENT
LOWbackend/tasks/sync_push_pull_task.py418 # Check if device has synced this before (intentional delete)COMMENT
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py135 # Check if platform exists in databaseCOMMENT
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py157 # Check if ROM exists in databaseCOMMENT
LOWbackend/endpoints/auth.py298 # Check if user has access to requested scopesCOMMENT
LOWbackend/endpoints/roms/__init__.py1041 # Check if all requested ROMs were foundCOMMENT
LOWbackend/endpoints/roms/__init__.py1652 # Write file to ZIPCOMMENT
LOWbackend/logger/formatter.py121 # Check if an explicit environment variable is set to control color behaviorCOMMENT
LOWbackend/config/config_manager.py620 # Check if the config file is mountedCOMMENT
LOW⚡backend/tests/handler/filesystem/test_base_handler.py410 # Write file firstCOMMENT
LOW⚡backend/tests/handler/filesystem/test_base_handler.py413 # Read fileCOMMENT
LOW⚡backend/tests/handler/filesystem/test_base_handler.py424 # Write file firstCOMMENT
LOW⚡backend/tests/handler/filesystem/test_base_handler.py576 # Write file firstCOMMENT
LOWbackend/utils/validation.py84 # Check if any character is outside ASCII range (0-127)COMMENT
LOW⚡backend/alembic/versions/0022_collections_.py46 # Check if the item is a directory and not the new folder itselfCOMMENT
Cross-Language Confusion6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/audit_handler.py167 # A save writes "" over a column that was null, which is no change.COMMENT
HIGHbackend/handler/auth/middleware/session_middleware.py137 "null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT;",CODE
HIGH…nd/handler/auth/middleware/redis_session_middleware.py97 header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {selCODE
HIGH…nd/handler/auth/middleware/redis_session_middleware.py111 header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {self.seCODE
HIGHbackend/endpoints/roms/__init__.py597 " sized; total then comes back null, unless the rom id index is"CODE
HIGHbackend/tests/handler/database/test_saves_handler.py783 wins (and is implicitly not-null), so slot_not_null=True is a no-opSTRING
AI Structural Patterns30 hits · 26 pts
SeverityFileLineSnippetContext
LOWbackend/handler/database/roms_handler.py1538CODE
LOWbackend/handler/database/roms_handler.py3128CODE
LOWbackend/handler/database/roms_handler.py3174CODE
LOWbackend/handler/database/roms_handler.py3295CODE
LOWbackend/handler/database/roms_handler.py3396CODE
LOWbackend/handler/database/roms_handler.py3475CODE
LOWbackend/handler/database/roms_handler.py3534CODE
LOWbackend/handler/database/roms_handler.py3793CODE
LOWbackend/handler/database/saves_handler.py216CODE
LOWbackend/handler/database/saves_handler.py272CODE
LOWbackend/handler/database/permissions_handler.py283CODE
LOWbackend/endpoints/music.py204CODE
LOWbackend/endpoints/music.py236CODE
LOWbackend/endpoints/music.py268CODE
LOWbackend/endpoints/music.py300CODE
LOWbackend/endpoints/music.py332CODE
LOWbackend/endpoints/music.py377CODE
LOWbackend/endpoints/music.py417CODE
LOWbackend/endpoints/audit_events.py34CODE
LOWbackend/endpoints/saves.py191CODE
LOWbackend/endpoints/roms/__init__.py429CODE
LOWbackend/endpoints/roms/__init__.py572CODE
LOWbackend/endpoints/roms/__init__.py1129CODE
LOWbackend/tests/handler/test_scan_complete_rescan_ids.py48CODE
LOWbackend/tests/handler/recommendation/test_builder.py25CODE
LOWbackend/tests/handler/metadata/test_sgdb_handler.py204CODE
LOWbackend/adapters/services/steamgriddb.py85CODE
LOWbackend/adapters/services/steamgriddb.py138CODE
LOWbackend/adapters/services/mobygames.py128CODE
LOWbackend/adapters/services/mobygames.py141CODE
Modern Structural Boilerplate25 hits · 26 pts
SeverityFileLineSnippetContext
LOWbackend/handler/activity_handler.py228 async def set_active(self, entry: ActivityEntry) -> None:CODE
LOWbackend/handler/recommendation/__init__.py5__all__ = [CODE
LOWbackend/handler/recommendation/feed.py325def set_cached_feed(user_id: int, limit: int, feed: Sequence[RecommendedRom]) -> None:CODE
LOWbackend/handler/auth/base_handler.py349 async def set_user_new_password(self, user: Any, new_password: str) -> None:CODE
LOWbackend/handler/walkthrough/__init__.py9__all__ = [CODE
LOWbackend/handler/filesystem/__init__.py17__all__ = [CODE
LOWbackend/handler/filesystem/roms_handler.py1122 def update_hashes(chunk: bytes | bytearray) -> None:CODE
LOWbackend/handler/metadata/hltb_handler.py310 def _set_search_url(self, search_url: str) -> None:CODE
LOWbackend/handler/metadata/launchbox_handler/__init__.py3__all__ = [CODE
LOWbackend/tasks/tasks.py137def update_job_meta(metadata: dict[str, Any]) -> None:CODE
LOWbackend/endpoints/configs.py330async def update_scan_settings(request: Request, payload: ScanSettingsPayload) -> None:CODE
LOWbackend/config/config_manager.py1448 def _update_config_file(self) -> None:CODE
LOWbackend/config/config_manager.py1657 def update_converto_settings(self, converto: ConvertoConfig) -> None:CODE
LOW…ckend/tests/handler/database/test_roms_filter_cache.py57def _set_rom_genres(rom_id: int, genres: list[str]) -> None:CODE
LOWbackend/tests/handler/database/test_rom_audience.py32 def set_limit(age_limit: int | None) -> None:CODE
LOW…kend/tests/handler/database/test_roms_rom_user_sort.py41def _set_rom_user_fields(rom: Rom, user: User, fields: dict[str, object]) -> None:CODE
LOW⚡backend/tests/endpoints/test_music.py565def _set_game_genres(rom_id: int, genres: list[str]) -> None:CODE
LOWbackend/utils/rate_limiter.py23 def set_requests_per_second(self, requests_per_second: float) -> None:CODE
LOWbackend/utils/rate_limiter.py75 def set_max_concurrency(self, max_concurrency: int) -> None:CODE
LOWbackend/utils/rom_patcher/__init__.py9__all__ = [CODE
LOWbackend/models/rom.py1425def _set_search_titles(_mapper: Any, _connection: Any, rom: Rom) -> None:CODE
LOWbackend/models/rom.py1446def _set_min_age(_mapper: Any, _connection: Any, rom: Rom) -> None:CODE
LOWbackend/models/user.py174 def set_last_active(self) -> None:CODE
LOWbackend/adapters/services/rom_converto.py397def _settle_output(operation: Operation, out: Path) -> None:CODE
LOWbackend/adapters/services/screenscraper.py546def _update_account_limits(response: object) -> None:CODE
Synthetic Comment Markers2 hits · 12 pts
SeverityFileLineSnippetContext
HIGH.claude/skills/humanizer/SKILL.md374The patterns come from Wikipedia's ["Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing),CODE
HIGHbackend/utils/audio_tags.py167# Vorbis comments / FLAC pictures) was largely AI-generated against mutagen'sCOMMENT
Fake / Example Data9 hits · 10 pts
SeverityFileLineSnippetContext
LOWfrontend/src/v2/components/shared/PlatformSelect.vue252 :placeholder="placeholder"CODE
LOWfrontend/src/v2/lib/forms/RForm/RForm.stories.ts126 <RTextField v-model="name" prefix-label="stacked" label="Display name" :rules="nameRules" placeholder="Jane CODE
LOW…tend/src/v2/lib/forms/RTextField/RTextField.stories.ts115 placeholder: "Jane Doe",CODE
LOWfrontend/src/v2/lib/forms/RSelect/RSelect.vue1027 <slot name="placeholder">{{ effectivePlaceholder }}</slot>CODE
LOWfrontend/src/v2/lib/primitives/RImg/RImg.vue125 <slot name="placeholder" />CODE
LOW⚡backend/tests/handler/walkthrough/test_gamefaqs.py21 '<meta name="author" content="John Doe">'CODE
LOW⚡backend/tests/handler/walkthrough/test_gamefaqs.py29 assert guide["author"] == "John Doe"CODE
LOWbackend/tests/endpoints/roms/test_walkthrough.py58 assert created.doc_meta.author == "John Doe"CODE
LOWbackend/tests/utils/test_validation.py169 validate_email("user@example.com")CODE
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOWfrontend/src/v2/views/Auth/Setup.vue39// Step 1: library + platformsCOMMENT
LOW⚡frontend/src/v2/views/Auth/Setup.vue54// Step 2: admin userCOMMENT
LOW⚡frontend/src/v2/views/Auth/Setup.vue63// Step 3: metadata (purely informational)COMMENT
Structural Annotation Overuse3 hits · 6 pts
SeverityFileLineSnippetContext
LOWfrontend/src/v2/views/Auth/Setup.vue39// Step 1: library + platformsCOMMENT
LOW⚡frontend/src/v2/views/Auth/Setup.vue54// Step 2: admin userCOMMENT
LOW⚡frontend/src/v2/views/Auth/Setup.vue63// Step 3: metadata (purely informational)COMMENT
AI Slop Vocabulary3 hits · 4 pts
SeverityFileLineSnippetContext
LOWbackend/handler/scan_handler.py1323 # Same idea: Demozoo's Overview is richer; just add the CSDb page.COMMENT
LOWbackend/tasks/sync_push_pull_task.py325 # The server save's hash was just set to remote_hash, so both sides hold it.COMMENT
MEDIUMbackend/tests/endpoints/sockets/test_scan.py687 """Test comprehensive scenarios with different combinations"""STRING
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMbackend/tests/scan_job_stubs.py125CODE
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMdocs/BACKEND_ARCHITECTURE.md230│ ├── scan_handler.py # Library scan orchestrationCODE