Repository Analysis

rommapp/romm

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

12.3 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of rommapp/romm, a Python project with 12,345 GitHub stars. SynthScan v2.0 examined 367,261 lines of code across 1775 source files, recording 3550 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 12.3 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

12.3
Adjusted Score
12.3
Raw Score
100%
Time Factor
2026-08-28
Last Push
12.3K
Stars
Python
Language
367.3K
Lines of Code
1.8K
Files
3.5K
Pattern Hits
2026-08-29
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 53MEDIUM 434LOW 3063

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 3550 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers2486 hits · 2300 pts
SeverityFileLineSnippetContext
LOWfrontend/vite.config.js79function cssTargetsFromBrowserslist() {CODE
LOWfrontend/src/stores/soundtrackPlayer.ts60export function resolveSoundtrackGameArtwork(CODE
LOWfrontend/src/utils/index.ts610export function areThreadsRequiredForEJSCore(core: string): boolean {CODE
LOWfrontend/src/utils/index.ts667export function getControlSchemeForPlatform(CODE
LOWfrontend/src/utils/index.ts683export function isRuffleEmulationSupported(CODE
LOWfrontend/src/utils/indexdb-monitor.ts37export default async function createIndexedDBDiffMonitor({CODE
LOW…end/src/v2/composables/useOverlayRouteDismiss/index.ts23export function installOverlayRouteDismiss(router: Router): () => void {CODE
LOWfrontend/src/v2/composables/useCan/index.ts26export function installPermissionsHydration() {CODE
LOWfrontend/src/v2/composables/useRomSync/index.ts129 function refreshAfterUserStateChange() {CODE
LOWfrontend/src/v2/composables/useBreakpoint/index.ts94export function installBreakpointAttribute(): void {CODE
LOW…ontend/src/v2/composables/usePlatformPlayable/index.ts80export function usePlatformPlayableChecker(): {CODE
LOW…ontend/src/v2/composables/useGalleryFilterUrl/index.ts337 function setOrDelete(key: string, value: string | null) {CODE
LOWfrontend/src/v2/composables/useGameActions/index.ts427 async function removeFromContinuePlaying() {CODE
LOWfrontend/src/v2/utils/smartCollectionCriteria.ts231export function hasAnySmartFilterCriteria(c: SmartFilterCriteria): boolean {CODE
LOWfrontend/src/v2/utils/smartCollectionCriteria.ts536export function summarizeSmartFilterCriteria(CODE
LOWfrontend/src/v2/utils/playerBezel.ts42export function resolveStoredBezelVisible(stored: string | null): boolean {CODE
LOWfrontend/src/v2/components/GameDetails/ManualSubtab.vue135async function confirmFolderConversionIfNeeded(): Promise<boolean> {CODE
LOW…nd/src/v2/components/GameDetails/WalkthroughSubtab.vue119async function confirmFolderConversionIfNeeded(): Promise<boolean> {CODE
LOWfrontend/src/v2/components/GameDetails/MediaTab.vue120async function confirmFolderConversionIfNeeded(): Promise<boolean> {CODE
LOW…nd/src/v2/components/GameDetails/ScreenshotsSubtab.vue73async function confirmFolderConversionIfNeeded(): Promise<boolean> {CODE
LOWfrontend/src/v2/components/Dialogs/EditRomDialog.vue286function handleRomUpdateFromMetadata(updatedRom: UpdateRom) {CODE
LOWfrontend/src/v2/views/Settings/UserInterface.vue198function onVirtualCollectionTypeChange(value: unknown) {CODE
LOW…ibraryManagement/Config/Dialog/CreateFolderMapping.vue190function 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.ts157export function invalidateEmulatorJSRomCacheIfRenamed(rom: {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts179function installDefaultOptionsFallback(emulator: any) {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts239export function installEJSDefaultOptionsTrap() {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts266function isIOSFullscreenShimRequired() {CODE
LOWfrontend/src/views/Player/EmulatorJS/utils.ts389export function createExitEmulationButton(): HTMLButtonElement {CODE
LOWfrontend/src/services/api/play-session.ts24function ingestPlaySessionsKeepalive({CODE
LOWfrontend/src/services/api/config.ts41async function deletePlatformVersionConfig({ fsSlug }: { fsSlug: string }) {CODE
LOWbackend/startup.py57def _enqueue_recompute_save_hashes_if_needed() -> None:CODE
LOWbackend/startup.py104def _enqueue_convert_images_to_webp() -> None:CODE
LOWbackend/sync_watcher.py46def _extract_device_and_platform(path: str) -> tuple[str, str, str] | None:CODE
LOWbackend/handler/scan_handler.py134def get_main_platform_igdb_id(platform: Platform):CODE
LOWbackend/handler/scan_handler.py152def get_priority_ordered_metadata_sources(CODE
LOWbackend/handler/scan_handler.py519 async def fetch_playmatch_hash_match() -> PlaymatchRomMatch:CODE
LOWbackend/handler/scan_handler.py548 async def fetch_hasheous_hash_match() -> tuple[HasheousRom, bool]:CODE
LOWbackend/handler/rom_conversion.py12async def promote_single_file_to_folder(rom: Rom) -> Rom:CODE
LOWbackend/handler/database/devices_handler.py37 def get_device_by_fingerprint(CODE
LOWbackend/handler/database/devices_handler.py81 def get_device_by_client_identifier(CODE
LOWbackend/handler/database/devices_handler.py108 def get_all_devices_by_sync_mode(CODE
LOWbackend/handler/database/devices_handler.py149 def update_last_seen_debounced(CODE
LOWbackend/handler/database/roms_handler.py283def _filter_values_cache_version() -> str:CODE
LOWbackend/handler/database/roms_handler.py287def _filter_values_cache_keys_key(version: str) -> str:CODE
LOWbackend/handler/database/roms_handler.py668 def _filter_by_virtual_collection_id(CODE
LOWbackend/handler/database/roms_handler.py681 def _filter_by_smart_collection_id(CODE
LOWbackend/handler/database/roms_handler.py717 def get_smart_collection_matches(CODE
LOWbackend/handler/database/roms_handler.py744 def _build_fulltext_boolean_query(self, term: str) -> str | None:CODE
LOWbackend/handler/database/roms_handler.py750 def _build_fulltext_relevance(self, search_term: str) -> str | None:CODE
LOWbackend/handler/database/roms_handler.py939 def _filter_by_missing_from_fs(self, query: Query, value: bool) -> Query:CODE
LOWbackend/handler/database/roms_handler.py1166 def _filter_by_metadata_providers(CODE
LOWbackend/handler/database/roms_handler.py2336 def get_rom_files_by_category(CODE
LOWbackend/handler/database/roms_handler.py3050 def invalidate_filter_values_cache(self) -> None:CODE
2426 more matches not shown…
Decorative Section Separators389 hits · 1199 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/src/stores/streaming.ts23// ── Store ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/stores/streaming.ts33 // ── Actions ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…end/src/v2/composables/useGalleryVirtualItems/index.ts258 // ── Structural sharing across re-packs ────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts127 // ── CD spin (+ launch drop) ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts201 // ── Cartridge slot-in ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts213 // ── Launch flourish (player view) ─────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts232 // ── Hover video ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/composables/useCoverAnimation/index.ts277 // ── Motion preference flips off mid-flight ────────────────────────COMMENT
MEDIUM…ontend/src/v2/composables/useGalleryFilterUrl/index.ts145 // ── URL → store ──────────────────────────────────────────────COMMENT
MEDIUM…ontend/src/v2/composables/useGalleryFilterUrl/index.ts331 // ── 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.vue58// ── Avatar picker ──────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue58// ── Detected platforms ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue110// ── Detected-pane filter ───────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue162// ── Supported (selectable) platforms ───────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue205// ── Search ─────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue225// ── Selection helpers ──────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Auth/SetupStepPlatforms.vue304// ── Structure banner copy ──────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/SettingsTab.vue46// ── Details edit form ──────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/SettingsTab.vue131// ── Details (read-only) ────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue124// ── Tri-state mapping helpers ──────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue278// ── Multi-select sections ──────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue427// ── Platform multi-select ──────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FilterDrawer.vue438// ── Active-filter count (footer badge) ────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue78// ── Edit form state ─────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue165// ── Cover preview ───────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue204// ── Cover actions ───────────────────────────────────────────────COMMENT
MEDIUM…nd/src/v2/components/Gallery/CollectionSettingsTab.vue240// ── Save ────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue405// ── Toolbar two-layer state ─────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue497// ── Viewport range / AlphaStrip / dwell prefetch ────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue527// ── Debug overlay bridge ────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue696// ── Search filter (debounced) ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue715// ── List-mode sort ────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue742// ── Scroll restoration ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue834// ── Slot helpers ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Gallery/FirmwareTab.vue88// ── Inline upload (no dialog — the dropzone lives in the tab) ──────COMMENT
MEDIUMfrontend/src/v2/components/GameCard/GameCard.vue200// ── Cover hover / focus ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/AssetList.stories.ts6// ── Mock builders ────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/AssetList.stories.ts69// ── Stories ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/AssetStrip.stories.ts9// ── Mock builders ────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/AssetStrip.stories.ts94// ── Meta ─────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/AssetStrip.stories.ts120// ── Stories ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/shared/IndexShell.vue56// ── Two-layer toolbar state ─────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/GameDetails/NotesTab.vue78// ── Selection (URL-synced via ?note=<id>) ────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/GameDetails/NotesTab.vue143// ── Edit form ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Dialogs/EditRomDialog.vue108// ── Tabbed editing surface ───────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts76// ── Save (no screenshot) ────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts90// ── Save without emulator chip ─────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts105// ── State (with screenshot) ─────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts119// ── State without a screenshot (placeholder pattern) ────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts139// ── Long filename — ellipsis path ──────────────────────────────COMMENT
MEDIUMfrontend/src/v2/components/Player/AssetCard.stories.ts160// ── Grid layout (real picker context) ──────────────────────────COMMENT
MEDIUM…ontend/src/v2/components/Player/ResumePanel.stories.ts15// ── Fixture builders ─────────────────────────────────────────────COMMENT
MEDIUM…ontend/src/v2/components/Player/ResumePanel.stories.ts117// ── Meta ─────────────────────────────────────────────────────────COMMENT
MEDIUM…ontend/src/v2/components/Player/ResumePanel.stories.ts295// ── Stories ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts44// ── Defaults ────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts48// ── Value badges ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/v2/lib/forms/RSlider/RSlider.stories.ts65// ── Steps + ticks ──────────────────────────────────────────────────COMMENT
329 more matches not shown…
Over-Commented Block236 hits · 236 pts
SeverityFileLineSnippetContext
LOWfrontend/playwright.config.ts41 },COMMENT
LOWfrontend/e2e/game-media-files.spec.ts1import { expect, type Locator, type Page, test } from "@playwright/test";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/useWrapGridNav/index.ts1// useWrapGridNavCOMMENT
LOWfrontend/src/v2/composables/useSnackbar/index.ts1// useSnackbar — typed convenience wrapper around the global `snackbarShow`COMMENT
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
LOWfrontend/src/v2/composables/useGamepad/index.ts181 // `data-user-menu-trigger` so we can find it regardless of which viewCOMMENT
LOW…tend/src/v2/composables/useGalleryCoverRatios/index.ts1// useGalleryCoverRatios — the gallery's measured natural cover ratios.COMMENT
LOW…tend/src/v2/composables/useGalleryCoverRatios/index.ts21COMMENT
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
LOWfrontend/src/v2/composables/useTileSearchUrl/index.ts1// useTileSearchUrl — bookmarkable per-view tile search backed by theCOMMENT
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 "is this ROM playable in-browser?" check, sharedCOMMENT
LOW…ontend/src/v2/composables/usePlatformPlayable/index.ts1// usePlatformPlayable — reactive "can any ROM on this platform runCOMMENT
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//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/useGameActions/index.ts1// useGameActions — shared action handlers for a ROM. One place forCOMMENT
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.ts21// Graceful degradation:COMMENT
LOWfrontend/src/v2/composables/useViewTransition/index.ts121 return null;COMMENT
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
LOWfrontend/src/v2/composables/useCoverFilters/index.ts1// useCoverFilters — client-side filtering + sorting over the SGDB coverCOMMENT
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 icon SVGs 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.ts61// fewer requests but each one downloads more.COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts121}COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts521 const params = this._buildRequestParams(galleryFilter, offset);COMMENT
LOWfrontend/src/v2/stores/galleryRoms.ts561 // aggregations (a window reached before the bootstrap resolved).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// "selection mode" is implicit (no separate flag) — first toggleCOMMENT
LOWfrontend/src/v2/utils/validation.ts1// Validation helpers for v2 forms. Each export returns a Vuetify-compatibleCOMMENT
LOWfrontend/src/v2/utils/autofocus.ts1// Whether a search field should grab focus as soon as it appears (a dropdownCOMMENT
LOWfrontend/src/v2/utils/covers.ts1// Procedural "no cover" artwork — v2 port of v1's `utils/covers`.COMMENT
176 more matches not shown…
Cross-File Repetition35 hits · 175 pts
SeverityFileLineSnippetContext
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
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( 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
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( 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
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…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
HIGH…ckend/alembic/versions/0101_virtual_collection_roms.py0create or replace view virtual_collections as with base as ( select r.id as rom_id, r.path_cover_s as path_cover_s, r.paSTRING
HIGH…ckend/alembic/versions/0096_fix_virtual_collections.py0create or replace view virtual_collections as with base as ( select r.id as rom_id, r.path_cover_s as path_cover_s, r.paSTRING
HIGH…nd/alembic/versions/0095_virtual_collections_source.py0create or replace view virtual_collections as with base as ( select r.id as rom_id, r.path_cover_s as path_cover_s, r.paSTRING
Excessive Try-Catch Wrapping115 hits · 122 pts
SeverityFileLineSnippetContext
LOWbackend/startup.py66 except Exception:CODE
LOWbackend/startup.py98 except Exception:CODE
LOWbackend/startup.py130 except Exception:CODE
LOWbackend/sync_watcher.py167 except Exception:CODE
LOWbackend/handler/rom_conversion.py63 except Exception:CODE
LOWbackend/handler/rom_conversion.py66 except Exception:CODE
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.py169 except Exception as e:CODE
LOWbackend/handler/filesystem/resources_handler.py200 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py430 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py552 except Exception as exc:CODE
LOWbackend/handler/filesystem/resources_handler.py706 except Exception as exc:CODE
LOWbackend/handler/metadata/flashpoint_handler.py164 except Exception as e:CODE
LOWbackend/handler/metadata/flashpoint_handler.py219 except Exception as exc:CODE
LOWbackend/handler/metadata/flashpoint_handler.py414 except Exception as exc:CODE
LOWbackend/handler/metadata/upc_handler.py63 except Exception as e:CODE
LOWbackend/handler/metadata/hltb_handler.py332 except Exception as e:CODE
LOWbackend/handler/metadata/hltb_handler.py358 except Exception as e:CODE
LOWbackend/handler/metadata/hltb_handler.py371 except Exception as e:CODE
LOWbackend/handler/metadata/hltb_handler.py537 except Exception as exc:CODE
LOWbackend/handler/metadata/hltb_handler.py824 except Exception as exc:CODE
LOWbackend/handler/metadata/ra_handler.py147 except Exception as e:CODE
LOWbackend/handler/metadata/ss_handler.py752 except Exception as e:CODE
LOWbackend/handler/metadata/moby_handler.py90 except Exception as e:CODE
LOWbackend/handler/metadata/sgdb_handler.py51 except Exception as e:CODE
LOWbackend/handler/metadata/sgdb_handler.py85 except Exception as e:CODE
LOWbackend/handler/metadata/sgdb_handler.py167 except Exception as e:CODE
LOWbackend/handler/metadata/libretro_handler.py81 except Exception as exc:CODE
MEDIUMbackend/handler/metadata/libretro_handler.py78def heartbeat(self) -> bool:CODE
LOWbackend/handler/metadata/hasheous_handler.py160 except Exception as e:CODE
LOWbackend/handler/metadata/hasheous_handler.py315 except Exception as exc:CODE
LOWbackend/handler/metadata/gamelist_handler.py506 except Exception as e:CODE
LOWbackend/handler/metadata/playmatch_handler.py147 except Exception as e:CODE
LOWbackend/handler/metadata/playmatch_handler.py257 except Exception as exc:CODE
LOWbackend/handler/metadata/playmatch_handler.py347 except Exception:CODE
LOWbackend/handler/metadata/igdb_handler.py726 except Exception as e:CODE
LOWbackend/tasks/tasks.py31 except Exception as e:CODE
LOWbackend/tasks/sync_push_pull_task.py107 except Exception as e:CODE
LOWbackend/tasks/sync_push_pull_task.py161 except Exception:CODE
LOWbackend/tasks/sync_push_pull_task.py183 except Exception as e:CODE
LOWbackend/tasks/sync_push_pull_task.py409 except Exception:CODE
LOWbackend/tasks/manual/cleanup_missing_roms.py72 except Exception as e:CODE
LOWbackend/tasks/manual/recompute_save_content_hashes.py94 except Exception as e:CODE
LOWbackend/tasks/manual/recompute_save_content_hashes.py120 except Exception as e:CODE
LOWbackend/tasks/scheduled/convert_images_to_webp.py83 except Exception as exc:CODE
LOWbackend/tasks/scheduled/convert_images_to_webp.py181 except Exception as exc:CODE
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py174 except Exception as e:CODE
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py194 except Exception as e:CODE
LOW…end/tasks/scheduled/sync_retroachievements_progress.py129 except Exception as e:CODE
LOWbackend/tools/generate_test_data.py773 except Exception:CODE
LOWbackend/tools/xml_diagnostics.py57 except Exception as e:CODE
MEDIUMbackend/tools/xml_diagnostics.py58 print(f"Error reading file: {e}")CODE
LOWbackend/tools/xml_diagnostics.py68 except Exception as e:CODE
LOWbackend/tools/xml_diagnostics.py88 except Exception as context_error:CODE
LOWbackend/endpoints/auth.py97 except Exception:CODE
LOWbackend/endpoints/tasks.py350 except Exception as e:CODE
LOWbackend/endpoints/firmware.py315 except Exception as e:CODE
LOWbackend/endpoints/device.py127 except Exception:CODE
LOWbackend/endpoints/activity.py121 except Exception as e: # noqa: BLE001CODE
55 more matches not shown…
Self-Referential Comments36 hits · 114 pts
SeverityFileLineSnippetContext
MEDIUMentrypoint.sh22# Define a signal handler to propagate termination signalsCOMMENT
MEDIUMbackend/sync_watcher.py137 # Create a sync sessionCOMMENT
MEDIUMbackend/handler/database/roms_handler.py1420 # Create a subquery that identifies the primary ROM in each group.COMMENT
MEDIUMbackend/handler/metadata/gamelist_handler.py268 # Create a copy of the metadata to avoid modifying the cached versionCOMMENT
MEDIUMbackend/endpoints/sync.py156 # Create a new sync sessionCOMMENT
MEDIUMbackend/endpoints/sync.py462 # 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
MEDIUMbackend/tests/handler/filesystem/test_base_handler.py239 # Create a file firstCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_base_handler.py254 # Create a file (should not be listed)COMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py455 # Create the test fileCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py676 # Create a test file to renameCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py836 # Create a test file with known content for hash verificationCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py934 # Create a mock CHD v5 file in a temporary directoryCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py950 # Create a new handler instance with temp base pathCOMMENT
MEDIUMbackend/tests/handler/filesystem/test_roms_handler.py1266 # Create a CHD v4 file (should not use internal hash logic)COMMENT
MEDIUM…end/tests/handler/filesystem/test_resources_handler.py228 # Create a mock image with high resolutionCOMMENT
MEDIUM…end/tests/handler/filesystem/test_resources_handler.py246 # 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_tasks.py282 # Create a proper HTTPStatusErrorCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py138 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py234 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py273 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_update_launchbox_metadata.py324 # Create a mock pipeline with async context manager supportCOMMENT
MEDIUMbackend/tests/tasks/test_sync_push_pull.py157 # Create an additional archival (null-slot) save with the same filenameCOMMENT
MEDIUMbackend/tests/endpoints/test_tasks.py193 # Create a token without TASKS_RUN scopeCOMMENT
MEDIUMbackend/tests/adapters/services/test_mobygames.py28 # Create a real request-like objectCOMMENT
MEDIUMbackend/tests/adapters/services/test_steamgriddb.py30 # Create a real request-like objectCOMMENT
MEDIUM…ckend/tests/adapters/services/test_retroachivements.py23 # Create a real request-like objectCOMMENT
MEDIUMbackend/tests/adapters/services/test_screenscraper.py87 # Create a real request-like objectCOMMENT
MEDIUMbackend/models/rom.py842 # Create a deep copy to avoid mutating the original metadataCOMMENT
MEDIUMbackend/models/collection.py156 # Create a reversible encoded IDCOMMENT
MEDIUMbackend/alembic/versions/0022_collections_.py36 # Define the path for the new folderCOMMENT
MEDIUMbackend/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 Imports80 hits · 80 pts
SeverityFileLineSnippetContext
LOWbackend/main.py16CODE
LOWbackend/main.py17CODE
LOWbackend/main.py18CODE
LOWbackend/main.py19CODE
LOWbackend/main.py20CODE
LOWbackend/handler/activity_handler.py9CODE
LOWbackend/handler/database/stats_handler.py1CODE
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/__init__.py3CODE
LOWbackend/handler/filesystem/__init__.py3CODE
LOWbackend/handler/filesystem/__init__.py7CODE
LOWbackend/handler/filesystem/__init__.py7CODE
LOWbackend/handler/sync/comparison.py1CODE
LOWbackend/handler/sync/ssh_handler.py12CODE
LOWbackend/handler/metadata/launchbox_handler/media.py12CODE
LOWbackend/handler/metadata/launchbox_handler/__init__.py1CODE
LOWbackend/tools/generate_test_data.py18CODE
LOWbackend/tools/generate_test_data.py35CODE
LOWbackend/endpoints/sockets/activity.py17CODE
LOWbackend/endpoints/sockets/scan.py1CODE
LOWbackend/endpoints/responses/rom.py1CODE
LOWbackend/endpoints/responses/permission.py12CODE
LOWbackend/endpoints/responses/music.py1CODE
LOWbackend/endpoints/responses/collection.py6CODE
LOWbackend/endpoints/responses/collection.py6CODE
LOWbackend/utils/zip_cache.py1CODE
LOWbackend/utils/archives.py19CODE
LOWbackend/utils/m3u.py1CODE
LOWbackend/utils/media_types.py1CODE
LOWbackend/utils/json_module.py11CODE
LOWbackend/utils/ssrf.py25CODE
LOWbackend/utils/audio_tags.py1CODE
LOWbackend/utils/rom_patcher/__init__.py1CODE
LOWbackend/utils/rom_patcher/__init__.py1CODE
LOWbackend/utils/rom_patcher/__init__.py1CODE
LOWbackend/utils/rom_patcher/__init__.py1CODE
LOWbackend/models/rom.py1CODE
LOWbackend/models/user.py1CODE
LOWbackend/models/user.py18CODE
LOWbackend/models/user.py19CODE
LOWbackend/models/user.py20CODE
LOWbackend/models/user.py21CODE
LOWbackend/models/user.py22CODE
LOWbackend/models/permission.py1CODE
LOWbackend/models/firmware.py1CODE
LOWbackend/models/device.py1CODE
LOWbackend/models/play_session.py1CODE
LOWbackend/models/platform.py1CODE
LOWbackend/models/music.py1CODE
LOWbackend/models/music.py11CODE
LOWbackend/models/assets.py1CODE
LOWbackend/models/client_token.py1CODE
20 more matches not shown…
Deep Nesting72 hits · 71 pts
SeverityFileLineSnippetContext
LOWfrontend/src/locales/check_i18n_sorted.py31CODE
LOWbackend/sync_watcher.py206CODE
LOWbackend/handler/scan_handler.py226CODE
LOWbackend/handler/scan_handler.py432CODE
LOWbackend/handler/database/roms_handler.py1078CODE
LOWbackend/handler/database/roms_handler.py1572CODE
LOWbackend/handler/database/collections_handler.py171CODE
LOWbackend/handler/auth/hybrid_auth.py21CODE
LOW…nd/handler/auth/middleware/redis_session_middleware.py39CODE
LOW…nd/handler/auth/middleware/redis_session_middleware.py61CODE
LOWbackend/handler/filesystem/resources_handler.py178CODE
LOWbackend/handler/filesystem/resources_handler.py410CODE
LOWbackend/handler/filesystem/resources_handler.py538CODE
LOWbackend/handler/filesystem/resources_handler.py686CODE
LOWbackend/handler/filesystem/roms_handler.py336CODE
LOWbackend/handler/filesystem/roms_handler.py628CODE
LOWbackend/handler/filesystem/base_handler.py248CODE
LOWbackend/handler/filesystem/base_handler.py427CODE
LOWbackend/handler/sync/ssh_handler.py128CODE
LOWbackend/handler/metadata/hltb_handler.py377CODE
LOWbackend/handler/metadata/ra_handler.py312CODE
LOWbackend/handler/metadata/ss_handler.py354CODE
LOWbackend/handler/metadata/sgdb_handler.py113CODE
LOWbackend/handler/metadata/hasheous_handler.py249CODE
LOWbackend/handler/metadata/launchbox_handler/media.py185CODE
LOWbackend/handler/metadata/launchbox_handler/media.py269CODE
LOWbackend/handler/metadata/launchbox_handler/media.py328CODE
LOWbackend/handler/metadata/launchbox_handler/media.py370CODE
LOWbackend/handler/metadata/launchbox_handler/media.py431CODE
LOWbackend/handler/metadata/launchbox_handler/media.py218CODE
LOWbackend/handler/metadata/launchbox_handler/handler.py72CODE
LOW…end/handler/metadata/launchbox_handler/local_source.py17CODE
LOWbackend/tasks/sync_push_pull_task.py66CODE
LOWbackend/tasks/sync_push_pull_task.py342CODE
LOWbackend/tasks/scheduled/update_launchbox_metadata.py118CODE
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py99CODE
LOWbackend/tools/generate_test_data.py676CODE
LOWbackend/tools/xml_diagnostics.py38CODE
LOWbackend/endpoints/firmware.py263CODE
LOWbackend/endpoints/feeds.py201CODE
LOWbackend/endpoints/feeds.py222CODE
LOWbackend/endpoints/collections.py431CODE
LOWbackend/endpoints/saves.py161CODE
LOWbackend/endpoints/heartbeat.py189CODE
LOWbackend/endpoints/sockets/logs.py80CODE
LOWbackend/endpoints/sockets/scan.py201CODE
LOWbackend/endpoints/sockets/scan.py709CODE
LOWbackend/endpoints/sockets/scan.py928CODE
LOWbackend/endpoints/roms/upload.py248CODE
LOWbackend/endpoints/roms/__init__.py1474CODE
LOWbackend/endpoints/roms/__init__.py2271CODE
LOWbackend/config/config_manager.py578CODE
LOWbackend/tests/conftest.py43CODE
LOWbackend/tests/utils/test_pegasus_exporter.py45CODE
LOWbackend/tests/utils/test_rvz_hasher.py353CODE
LOWbackend/tests/adapters/services/test_screenscraper.py996CODE
LOWbackend/utils/psp_hasher.py65CODE
LOWbackend/utils/gamelist_exporter.py113CODE
LOWbackend/utils/archives.py95CODE
LOWbackend/utils/archives.py109CODE
12 more matches not shown…
Docstring Block Structure12 hits · 60 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/filesystem/base_handler.py379 List all directories in a given path. Args: path: Relative path within base directory STRING
HIGHbackend/handler/filesystem/base_handler.py482 Write file to filesystem using a streamed approach. The stream lands in a temporary file that is renamSTRING
HIGHbackend/handler/filesystem/base_handler.py523 Read file from filesystem. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/handler/filesystem/base_handler.py551 Stream file from filesystem. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/handler/filesystem/base_handler.py680 List all files in a directory. Args: directory: Relative path to the directory ReSTRING
HIGHbackend/handler/filesystem/base_handler.py749 Get the size of a file. Args: file_path: Relative path to the file Returns: STRING
HIGHbackend/endpoints/auth.py111OAuth2 token endpoint Args: form_data (Annotated[OAuth2RequestForm, Depends): Form Data with OAuth2 info STRING
HIGHbackend/endpoints/auth.py245OIDC login endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExceptSTRING
HIGHbackend/endpoints/auth.py269OIDC callback endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExcSTRING
HIGHbackend/endpoints/user.py343Update user endpoint Args: request (Request): Fastapi Requests object user_id (int): User internal STRING
HIGHbackend/endpoints/firmware.py39Upload firmware files endpoint Args: request (Request): Fastapi Request object platform_slug (str):STRING
HIGHbackend/utils/filesystem.py95 Replace invalid characters in the filename to make it valid across common filesystems and prevent path-traversaSTRING
Redundant / Tautological Comments33 hits · 58 pts
SeverityFileLineSnippetContext
LOWbackend/handler/scan_handler.py462 # Check if files have been parsed and hashedCOMMENT
LOWbackend/handler/auth/hybrid_auth.py24 # Check if session key already stored in cacheCOMMENT
LOWbackend/handler/auth/hybrid_auth.py30 # Check if Authorization header existsCOMMENT
LOWbackend/handler/auth/hybrid_auth.py38 # Check if basic auth header is validCOMMENT
LOWbackend/handler/auth/hybrid_auth.py53 # Check if bearer auth header is validCOMMENT
LOWbackend/handler/auth/hybrid_auth.py104 # Check if we're in KIOSK_MODECOMMENT
LOWbackend/handler/filesystem/resources_handler.py217 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/resources_handler.py448 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/resources_handler.py576 # Check if content is gzipped from response headersCOMMENT
LOWbackend/handler/filesystem/roms_handler.py365 # Check if rom is a multi-part romCOMMENT
LOWbackend/handler/filesystem/roms_handler.py396 # Check if file is excluded by extension.COMMENT
LOWbackend/handler/filesystem/roms_handler.py403 # Check if the file name matches a pattern in the excluded list.COMMENT
LOWbackend/handler/filesystem/roms_handler.py410 # Check if this is a top-level file (not in a subdirectory)COMMENT
LOWbackend/handler/filesystem/base_handler.py346 # Check if the file name matches a pattern in the excluded list.COMMENT
LOWbackend/handler/filesystem/base_handler.py461 # Write file atomicallyCOMMENT
LOWbackend/handler/metadata/flashpoint_handler.py253 # Check if the filename is a UUIDCOMMENT
LOWbackend/handler/metadata/hasheous_handler.py209 # Check if its a 404 errorCOMMENT
LOWbackend/handler/metadata/gamelist_handler.py406 # Check if we already have cached data for this platformCOMMENT
LOWbackend/handler/metadata/launchbox_handler/handler.py175 # Check if game is scummvm shortnameCOMMENT
LOWbackend/tasks/sync_push_pull_task.py383 # Check if device has synced this before (intentional delete)COMMENT
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py161 # Check if platform exists in databaseCOMMENT
LOWbackend/tasks/scheduled/cleanup_orphaned_resources.py183 # Check if ROM exists in databaseCOMMENT
LOWbackend/endpoints/auth.py208 # Check if user has access to requested scopesCOMMENT
LOWbackend/endpoints/roms/__init__.py1143 # Check if all requested ROMs were foundCOMMENT
LOWbackend/endpoints/roms/__init__.py1576 # Write file to ZIPCOMMENT
LOWbackend/logger/formatter.py110 # Check if an explicit environment variable is set to control color behaviorCOMMENT
LOWbackend/config/config_manager.py261 # Check if the config file is mountedCOMMENT
LOWbackend/tests/handler/filesystem/test_base_handler.py340 # Write file firstCOMMENT
LOWbackend/tests/handler/filesystem/test_base_handler.py343 # Read fileCOMMENT
LOWbackend/tests/handler/filesystem/test_base_handler.py354 # Write file firstCOMMENT
LOWbackend/tests/handler/filesystem/test_base_handler.py402 # Write file firstCOMMENT
LOWbackend/utils/validation.py34 # Check if any character is outside ASCII range (0-127)COMMENT
LOWbackend/alembic/versions/0022_collections_.py46 # Check if the item is a directory and not the new folder itselfCOMMENT
AI Structural Patterns24 hits · 24 pts
SeverityFileLineSnippetContext
LOWbackend/handler/database/roms_handler.py1200CODE
LOWbackend/handler/database/roms_handler.py2494CODE
LOWbackend/handler/database/roms_handler.py2543CODE
LOWbackend/handler/database/roms_handler.py2654CODE
LOWbackend/handler/database/roms_handler.py2868CODE
LOWbackend/handler/database/saves_handler.py84CODE
LOWbackend/handler/auth/middleware/csrf_middleware.py20CODE
LOWbackend/endpoints/music.py62CODE
LOWbackend/endpoints/music.py116CODE
LOWbackend/endpoints/music.py225CODE
LOWbackend/endpoints/music.py255CODE
LOWbackend/endpoints/music.py285CODE
LOWbackend/endpoints/music.py315CODE
LOWbackend/endpoints/saves.py161CODE
LOWbackend/endpoints/roms/__init__.py268CODE
LOWbackend/endpoints/roms/__init__.py361CODE
LOWbackend/endpoints/roms/__init__.py1211CODE
LOWbackend/tests/endpoints/roms/test_upload.py65CODE
LOWbackend/adapters/services/retroachievements.py129CODE
LOWbackend/adapters/services/steamgriddb.py80CODE
LOWbackend/adapters/services/steamgriddb.py133CODE
LOWbackend/adapters/services/mobygames.py158CODE
LOWbackend/adapters/services/mobygames.py171CODE
LOWbackend/adapters/services/screenscraper.py712CODE
Cross-Language Confusion4 hits · 18 pts
SeverityFileLineSnippetContext
HIGHbackend/handler/auth/middleware/session_middleware.py136 "null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT;",CODE
HIGH…nd/handler/auth/middleware/redis_session_middleware.py91 header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {self.seCODE
HIGHbackend/endpoints/roms/__init__.py384 " sized; total then comes back null, unless the rom id index is"CODE
HIGHbackend/tests/handler/database/test_saves_handler.py601 wins (and is implicitly not-null), so slot_not_null=True is a no-opSTRING
Modern Structural Boilerplate13 hits · 13 pts
SeverityFileLineSnippetContext
LOWbackend/handler/activity_handler.py50 async def set_active(self, entry: ActivityEntry) -> None:CODE
LOWbackend/handler/auth/base_handler.py169 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__.py15__all__ = [CODE
LOWbackend/handler/metadata/launchbox_handler/__init__.py3__all__ = [CODE
LOWbackend/tasks/tasks.py24def update_job_meta(metadata: dict[str, Any]) -> None:CODE
LOWbackend/endpoints/configs.py254async def update_scan_settings(request: Request, payload: ScanSettingsPayload) -> None:CODE
LOWbackend/config/config_manager.py852 def _update_config_file(self) -> None:CODE
LOW…ckend/tests/handler/database/test_roms_filter_cache.py51def _set_rom_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__.py8__all__ = [CODE
LOWbackend/adapters/services/screenscraper.py459def _update_account_limits(response: dict) -> None:CODE
Fake / Example Data9 hits · 10 pts
SeverityFileLineSnippetContext
LOWfrontend/src/v2/components/shared/PlatformSelect.vue191 :placeholder="placeholder"CODE
LOWfrontend/src/v2/lib/forms/RForm/RForm.stories.ts128 <RTextField v-model="name" prefix-label="stacked" label="Display name" :rules="nameRules" placeholder="Jane CODE
LOW…tend/src/v2/lib/forms/RTextField/RTextField.stories.ts125 placeholder: "Jane Doe",CODE
LOWfrontend/src/v2/lib/forms/RSelect/RSelect.vue997 <slot name="placeholder">{{ effectivePlaceholder }}</slot>CODE
LOWfrontend/src/v2/lib/primitives/RImg/RImg.vue125 <slot name="placeholder" />CODE
LOWbackend/tests/handler/walkthrough/test_gamefaqs.py21 '<meta name="author" content="John Doe">'CODE
LOWbackend/tests/handler/walkthrough/test_gamefaqs.py29 assert guide["author"] == "John Doe"CODE
LOWbackend/tests/endpoints/roms/test_walkthrough.py90 assert created.doc_meta.author == "John Doe"CODE
LOWbackend/tests/utils/test_validation.py135 validate_email("user@example.com")CODE
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHbackend/utils/audio_tags.py153# Vorbis comments / FLAC pictures) was largely AI-generated against mutagen'sCOMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHexamples/config.example.yml65# # In this example if you have a 'gc' folder, RomM will treat it like the 'ngc' folderCOMMENT
AI Slop Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/src/v2/components/Gallery/GalleryShell.vue474// visually seamless.COMMENT
MEDIUM…ontend/src/v2/components/Player/ResumePanel.stories.ts363 // helper picks the first as default, so we leverage the existingCOMMENT
MEDIUMbackend/tests/endpoints/sockets/test_scan.py455 """Test comprehensive scenarios with different combinations"""STRING
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMdocs/BACKEND_ARCHITECTURE.md225│ ├── scan_handler.py # Library scan orchestrationCODE