A beautiful, powerful, self-hosted rom manager and player.
This report presents the forensic synthetic code analysis of rommapp/romm, a Python project with 11,143 GitHub stars. SynthScan v2.0 examined 319,143 lines of code across 1608 source files, recording 2621 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 11.2 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).
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.
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.
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.
The scanner identified 2621 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/utils/index.ts | 593 | export function areThreadsRequiredForEJSCore(core: string): boolean { | CODE |
| LOW | frontend/src/utils/index.ts | 650 | export function getControlSchemeForPlatform( | CODE |
| LOW | frontend/src/utils/index.ts | 666 | export function isRuffleEmulationSupported( | CODE |
| LOW | frontend/src/utils/indexdb-monitor.ts | 37 | export default async function createIndexedDBDiffMonitor({ | CODE |
| LOW | frontend/src/v2/composables/useCan/index.ts | 26 | export function installPermissionsHydration() { | CODE |
| LOW | frontend/src/v2/composables/useBreakpoint/index.ts | 94 | export function installBreakpointAttribute(): void { | CODE |
| LOW | …ontend/src/v2/composables/usePlatformPlayable/index.ts | 80 | export function usePlatformPlayableChecker(): { | CODE |
| LOW | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 307 | function setOrDelete(key: string, value: string | null) { | CODE |
| LOW | frontend/src/v2/composables/useGameActions/index.ts | 328 | async function removeFromContinuePlaying() { | CODE |
| LOW | frontend/src/v2/utils/smartCollectionCriteria.ts | 200 | export function hasAnySmartFilterCriteria(c: SmartFilterCriteria): boolean { | CODE |
| LOW | frontend/src/v2/utils/smartCollectionCriteria.ts | 436 | export function summarizeSmartFilterCriteria( | CODE |
| LOW | frontend/src/v2/components/GameDetails/ManualSubtab.vue | 120 | async function confirmFolderConversionIfNeeded(): Promise<boolean> { | CODE |
| LOW | frontend/src/v2/components/GameDetails/MediaTab.vue | 109 | async function confirmFolderConversionIfNeeded(): Promise<boolean> { | CODE |
| LOW | …nd/src/v2/components/GameDetails/ScreenshotsSubtab.vue | 66 | async function confirmFolderConversionIfNeeded(): Promise<boolean> { | CODE |
| LOW | frontend/src/v2/components/Dialogs/EditRomDialog.vue | 284 | function handleRomUpdateFromMetadata(updatedRom: UpdateRom) { | CODE |
| LOW | frontend/src/v2/views/Settings/UserInterface.vue | 146 | function onVirtualCollectionTypeChange(value: unknown) { | CODE |
| LOW | …ibraryManagement/Config/Dialog/CreateFolderMapping.vue | 190 | function getMappingTypeDescription(type: "alias" | "variant"): string { | CODE |
| LOW | frontend/src/components/Home/ContinuePlaying.vue | 24 | function toggleGridContinuePlaying() { | CODE |
| LOW | …nts/common/Collection/Dialog/CreateSmartCollection.vue | 109 | function toggleCollectionVisibility() { | CODE |
| LOW | frontend/src/components/common/Game/Dialog/EditRom.vue | 366 | function handleRomUpdateFromMetadata(updatedRom: UpdateRom) { | CODE |
| LOW | frontend/src/components/common/Dialog/SearchCover.vue | 29 | function handleShowSearchCoverDialog({ term }: { term: string }) { | CODE |
| LOW | frontend/src/views/Settings/MetadataSources.vue | 119 | function getConnectionStatusTooltip(source: { | CODE |
| LOW | …ntend/src/views/Gallery/Collection/SmartCollection.vue | 15 | function setCurrentSmartCollection(collection: CollectionType) { | CODE |
| LOW | …end/src/views/Gallery/Collection/VirtualCollection.vue | 15 | function setCurrentVirtualCollection(collection: CollectionType) { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 157 | export function invalidateEmulatorJSRomCacheIfRenamed(rom: { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 185 | function isIOSFullscreenShimRequired() { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 308 | export function createExitEmulationButton(): HTMLButtonElement { | CODE |
| LOW | frontend/src/services/api/config.ts | 37 | async function deletePlatformVersionConfig({ fsSlug }: { fsSlug: string }) { | CODE |
| LOW | backend/startup.py | 55 | def _enqueue_recompute_save_hashes_if_needed() -> None: | CODE |
| LOW | backend/startup.py | 102 | def _enqueue_convert_images_to_webp() -> None: | CODE |
| LOW | backend/sync_watcher.py | 46 | def _extract_device_and_platform(path: str) -> tuple[str, str, str] | None: | CODE |
| LOW | backend/handler/scan_handler.py | 86 | def get_main_platform_igdb_id(platform: Platform): | CODE |
| LOW | backend/handler/scan_handler.py | 104 | def get_priority_ordered_metadata_sources( | CODE |
| LOW | backend/handler/scan_handler.py | 404 | async def fetch_playmatch_hash_match() -> PlaymatchRomMatch: | CODE |
| LOW | backend/handler/scan_handler.py | 433 | async def fetch_hasheous_hash_match() -> HasheousRom: | CODE |
| LOW | backend/handler/play_session_handler.py | 40 | def _update_rom_user_last_played( | CODE |
| LOW | backend/handler/rom_conversion.py | 12 | async def promote_single_file_to_folder(rom: Rom) -> Rom: | CODE |
| LOW | backend/handler/database/devices_handler.py | 37 | def get_device_by_fingerprint( | CODE |
| LOW | backend/handler/database/devices_handler.py | 81 | def get_device_by_client_identifier( | CODE |
| LOW | backend/handler/database/devices_handler.py | 108 | def get_all_devices_by_sync_mode( | CODE |
| LOW | backend/handler/database/devices_handler.py | 149 | def update_last_seen_debounced( | CODE |
| LOW | backend/handler/database/roms_handler.py | 144 | def _filter_values_cache_version() -> str: | CODE |
| LOW | backend/handler/database/roms_handler.py | 148 | def _filter_values_cache_keys_key(version: str) -> str: | CODE |
| LOW | backend/handler/database/roms_handler.py | 392 | def _filter_by_virtual_collection_id( | CODE |
| LOW | backend/handler/database/roms_handler.py | 405 | def _filter_by_smart_collection_id( | CODE |
| LOW | backend/handler/database/roms_handler.py | 420 | def _build_fulltext_boolean_query(self, term: str) -> str | None: | CODE |
| LOW | backend/handler/database/roms_handler.py | 426 | def _build_fulltext_relevance(self, search_term: str) -> str | None: | CODE |
| LOW | backend/handler/database/roms_handler.py | 571 | def _filter_by_missing_from_fs(self, query: Query, value: bool) -> Query: | CODE |
| LOW | backend/handler/database/roms_handler.py | 759 | def _filter_by_metadata_providers( | CODE |
| LOW | backend/handler/database/roms_handler.py | 1635 | def get_rom_files_by_category( | CODE |
| LOW | backend/handler/database/roms_handler.py | 2197 | def invalidate_filter_values_cache(self) -> None: | CODE |
| LOW | backend/handler/database/device_save_sync_handler.py | 29 | def get_syncs_for_device_and_saves( | CODE |
| LOW | backend/handler/database/saves_handler.py | 136 | def get_latest_saves_for_roms( | CODE |
| LOW | backend/handler/database/saves_handler.py | 248 | def count_saves_missing_content_hash( | CODE |
| LOW | backend/handler/database/screenshots_handler.py | 86 | def get_rom_gallery_screenshots( | CODE |
| LOW | backend/handler/database/sync_sessions_handler.py | 85 | def increment_operations_completed( | CODE |
| LOW | backend/handler/database/collections_handler.py | 195 | def remove_roms_from_collection( | CODE |
| LOW | backend/handler/database/collections_handler.py | 284 | def get_smart_collection_by_name( | CODE |
| LOW | backend/handler/database/collections_handler.py | 346 | def get_smart_collection_roms( | CODE |
| LOW | backend/handler/database/stats_handler.py | 114 | def get_metadata_coverage_by_platform( | CODE |
| 1608 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …end/src/v2/composables/useGalleryVirtualItems/index.ts | 241 | // ── Structural sharing across re-packs ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 132 | // ── CD spin (+ launch drop) ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 206 | // ── Cartridge slot-in ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 218 | // ── Launch flourish (player view) ───────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 237 | // ── Hover video ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 282 | // ── Motion preference flips off mid-flight ──────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 135 | // ── URL → store ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 301 | // ── Store → URL ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Settings/SettingsSection.vue | 7 | // ├─────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM | frontend/src/v2/components/Settings/SettingsSection.vue | 10 | // └─────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepAdmin.vue | 58 | // ── Avatar picker ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 58 | // ── Detected platforms ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 110 | // ── Detected-pane filter ─────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 162 | // ── Supported (selectable) platforms ─────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 205 | // ── Search ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 225 | // ── Selection helpers ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 304 | // ── Structure banner copy ────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/SettingsTab.vue | 44 | // ── Name edit form ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/SettingsTab.vue | 100 | // ── Details (read-only) ──────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 116 | // ── Tri-state mapping helpers ────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 252 | // ── Multi-select sections ────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 385 | // ── Platform multi-select ────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 396 | // ── Active-filter count (footer badge) ──────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 79 | // ── Edit form state ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 163 | // ── Cover preview ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 202 | // ── Cover actions ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 238 | // ── Save ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 360 | // ── Toolbar two-layer state ───────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 452 | // ── Viewport range / AlphaStrip / dwell prefetch ──────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 482 | // ── Debug overlay bridge ──────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 671 | // ── Search filter (debounced) ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 690 | // ── List-mode sort ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 717 | // ── Scroll restoration ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 812 | // ── Slot helpers ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FirmwareTab.vue | 87 | // ── Inline upload (no dialog — the dropzone lives in the tab) ────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameCard/GameCard.vue | 199 | // ── Cover hover / focus ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/AssetList.stories.ts | 6 | // ── Mock builders ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/AssetList.stories.ts | 68 | // ── Stories ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/AssetStrip.stories.ts | 9 | // ── Mock builders ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/AssetStrip.stories.ts | 94 | // ── Meta ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/AssetStrip.stories.ts | 120 | // ── Stories ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/shared/IndexShell.vue | 56 | // ── Two-layer toolbar state ───────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameDetails/NotesTab.vue | 78 | // ── Selection (URL-synced via ?note=<id>) ──────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameDetails/NotesTab.vue | 143 | // ── Edit form ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Dialogs/EditRomDialog.vue | 106 | // ── Tabbed editing surface ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 75 | // ── Save (no screenshot) ──────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 89 | // ── Save without emulator chip ───────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 104 | // ── State (with screenshot) ───────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 118 | // ── State without a screenshot (placeholder pattern) ──────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 138 | // ── Long filename — ellipsis path ────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/AssetCard.stories.ts | 159 | // ── Grid layout (real picker context) ────────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/components/Player/ResumePanel.stories.ts | 15 | // ── Fixture builders ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/components/Player/ResumePanel.stories.ts | 117 | // ── Meta ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/components/Player/ResumePanel.stories.ts | 295 | // ── Stories ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 44 | // ── Defaults ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 48 | // ── Value badges ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 65 | // ── Steps + ticks ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 77 | // ── Range examples ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 102 | // ── Color tones ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 127 | // ── States ───────────────────────────────────────────────────────── | COMMENT |
| 291 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …end/src/v2/composables/useGalleryVirtualItems/types.ts | 1 | // Discriminated union describing every kind of row that can live inside a | COMMENT |
| LOW | …end/src/v2/composables/useGalleryVirtualItems/index.ts | 1 | // useGalleryVirtualItems — turns the gallery's structural state (mode, | COMMENT |
| LOW | …end/src/v2/composables/useGalleryVirtualItems/index.ts | 21 | // * Structural sharing — unchanged item objects are reused from the previous | COMMENT |
| LOW | …end/src/v2/composables/useGalleryVirtualItems/index.ts | 241 | // ── Structural sharing across re-packs ──────────────────────────────── | COMMENT |
| LOW | frontend/src/v2/composables/useWrapGridNav/index.ts | 1 | // useWrapGridNav | COMMENT |
| LOW | frontend/src/v2/composables/useSnackbar/index.ts | 1 | // useSnackbar — typed convenience wrapper around the global `snackbarShow` | COMMENT |
| LOW | frontend/src/v2/composables/useConfirm/index.ts | 1 | // useConfirm — open the global ConfirmDialog and await the user's choice. | COMMENT |
| LOW | frontend/src/v2/composables/useCoverAnimation/index.ts | 1 | // useCoverAnimation — the "juicy" motion layer for alt-art game covers. | COMMENT |
| LOW | …tend/src/v2/composables/useVirtualScrollDebug/index.ts | 1 | // useVirtualScrollDebug — shared diagnostics bridge from the active | COMMENT |
| LOW | frontend/src/v2/composables/useGamepad/index.ts | 1 | // useGamepad | COMMENT |
| LOW | frontend/src/v2/composables/useGamepad/index.ts | 21 | // Action buttons (A/B/Back/Start/LB/RB) fire once per press — no repeat — | COMMENT |
| LOW | frontend/src/v2/composables/useGamepad/index.ts | 181 | COMMENT | |
| LOW | …tend/src/v2/composables/useGalleryCoverRatios/index.ts | 1 | // useGalleryCoverRatios — the gallery's measured natural cover ratios. | COMMENT |
| LOW | …tend/src/v2/composables/useGalleryCoverRatios/index.ts | 21 | COMMENT | |
| LOW | frontend/src/v2/composables/useCan/index.ts | 1 | // useCan — reactive permission check against the v2 permissions store. | COMMENT |
| LOW | frontend/src/v2/composables/useGlobalHotkeys/index.ts | 1 | // useGlobalHotkeys — app-wide keyboard shortcuts. Kept intentionally | COMMENT |
| LOW | frontend/src/v2/composables/useCoverArt/index.ts | 1 | // useCoverArt — single source of truth for what image a game cover shows | COMMENT |
| LOW | frontend/src/v2/composables/useBoxFaces/index.ts | 1 | // useBoxFaces — resolves the three flat scans an interactive 3D box needs | COMMENT |
| LOW | …ontend/src/v2/composables/useServerConnection/index.ts | 1 | // useServerConnection — single orchestrator for backend reachability in v2. | COMMENT |
| LOW | frontend/src/v2/composables/useBreakpoint/index.ts | 1 | // useBreakpoint — reactive responsive breakpoints with the same names | COMMENT |
| LOW | frontend/src/v2/composables/useTileSearchUrl/index.ts | 1 | // useTileSearchUrl — bookmarkable per-view tile search backed by the | COMMENT |
| LOW | …ontend/src/v2/composables/usePlatformPlayable/index.ts | 1 | // usePlatformPlayable — reactive "can any ROM on this platform run | COMMENT |
| LOW | frontend/src/v2/composables/useSocketEvent/index.ts | 1 | // useSocketEvent — typed wrapper around the shared Socket.IO instance with | COMMENT |
| LOW | …ontend/src/v2/composables/useRightStickScroll/index.ts | 1 | // useRightStickScroll | COMMENT |
| LOW | frontend/src/v2/composables/useScanLifecycle/index.ts | 1 | // useScanLifecycle — global wire-up between the scan socket events and the | COMMENT |
| LOW | frontend/src/v2/composables/useGridNav/index.ts | 1 | // useGridNav | COMMENT |
| LOW | frontend/src/v2/composables/useGridNav/index.ts | 21 | // | COMMENT |
| LOW | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 1 | // useGalleryFilterUrl — bookmarkable gallery filters via URL query | COMMENT |
| LOW | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 21 | // ?filterStates=true|false | COMMENT |
| LOW | frontend/src/v2/composables/useGameActions/index.ts | 1 | // useGameActions — shared action handlers for a ROM. One place for | COMMENT |
| LOW | frontend/src/v2/composables/useGalleryMode/index.ts | 1 | // useGalleryMode — global gallery-view preferences backed by localStorage. | COMMENT |
| LOW | frontend/src/v2/composables/useCrtMode/index.ts | 1 | // useCrtMode — singleton toggle for the cosmetic "CRT mode" shader. | COMMENT |
| LOW | frontend/src/v2/composables/useWebpSupport/index.ts | 1 | // useWebpSupport — single-source resolution of whether the backend serves | COMMENT |
| LOW | frontend/src/v2/composables/useViewTransition/index.ts | 1 | // useViewTransition — tiny wrapper around the browser View Transitions API | COMMENT |
| LOW | frontend/src/v2/composables/useViewTransition/index.ts | 21 | // Graceful degradation: | COMMENT |
| LOW | frontend/src/v2/composables/useViewTransition/index.ts | 121 | if (name === "smart-collection" && params.collection) { | COMMENT |
| LOW | …tend/src/v2/composables/useGalleryViewModeUrl/index.ts | 1 | // useGalleryViewModeUrl — bookmarkable view-mode (groupBy + layout) via | COMMENT |
| LOW | …d/src/v2/composables/useGallerySelectionInput/index.ts | 1 | // useGallerySelectionInput — shared input plumbing that turns | COMMENT |
| LOW | …ntend/src/v2/composables/usePlatformIconCache/index.ts | 1 | // Singleton in-memory cache of platform icon SVGs as blob URLs. | COMMENT |
| LOW | frontend/src/v2/composables/useThemeMode/index.ts | 1 | // useThemeMode — reactive `isLight` / `isDark` driven by the same source | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 1 | // galleryRoms (v2) — windowed/sparse store for the active gallery list. | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 61 | // fewer requests but each one downloads more. | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 441 | if (!this.pendingWindows.has(offset)) return; | COMMENT |
| LOW | frontend/src/v2/stores/focusRestoration.ts | 1 | // focusRestoration (v2) — remembers each route's last focused tile so | COMMENT |
| LOW | frontend/src/v2/stores/scrollRestoration.ts | 1 | // scrollRestoration (v2) — remembers each route's last scrollTop on the | COMMENT |
| LOW | frontend/src/v2/stores/gallerySelection.ts | 1 | // v2GallerySelection — multi-select state for the gallery views | COMMENT |
| LOW | frontend/src/v2/stores/gallerySelection.ts | 21 | // "selection mode" is implicit (no separate flag) — first toggle | COMMENT |
| LOW | frontend/src/v2/utils/validation.ts | 1 | // Validation helpers for v2 forms. Each export returns a Vuetify-compatible | COMMENT |
| LOW | frontend/src/v2/utils/covers.ts | 1 | // Procedural "no cover" artwork — v2 port of v1's `utils/covers`. | COMMENT |
| LOW | frontend/src/v2/utils/smartCollectionCriteria.ts | 1 | // Smart-collection filter criteria helpers — single source of truth for | COMMENT |
| LOW | frontend/src/v2/utils/romArtwork.ts | 1 | // Resolves the art assets attached to a ROM into a flat, display-ready list. | COMMENT |
| LOW | frontend/src/v2/components/Settings/ScopeTree.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | …d/src/v2/components/Settings/FolderMappingTypeCell.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | frontend/src/v2/components/Settings/SettingsSection.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | …d/src/v2/components/Settings/FolderMappingsSection.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | …c/v2/components/Settings/FolderMappingPlatformCell.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | frontend/src/v2/components/Settings/SettingsSidebar.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | …src/v2/components/Settings/CreateClientTokenDialog.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | …end/src/v2/components/Settings/MissingGamesSection.vue | 1 | <script setup lang="ts"> | COMMENT |
| LOW | frontend/src/v2/components/Home/CardRow.vue | 1 | <script setup lang="ts"> | COMMENT |
| 152 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/tests/adapters/services/test_mobygames.py | 0 | test that the request reserves a rate-limiter slot before sending. | STRING |
| HIGH | …ckend/tests/adapters/services/test_retroachivements.py | 0 | test that the request reserves a rate-limiter slot before sending. | STRING |
| HIGH | backend/tests/adapters/services/test_igdb.py | 0 | test that the request reserves a rate-limiter slot before sending. | STRING |
| HIGH | backend/tests/adapters/services/test_mobygames.py | 0 | integration tests with real api calls using vcr cassettes. | STRING |
| HIGH | backend/tests/adapters/services/test_steamgriddb.py | 0 | integration tests with real api calls using vcr cassettes. | STRING |
| HIGH | backend/tests/adapters/services/test_screenscraper.py | 0 | integration tests with real api calls using vcr cassettes. | STRING |
| HIGH | backend/alembic/versions/0045_roms_metadata_update.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | backend/alembic/versions/0074_fix_empty_json_arrays.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | …kend/alembic/versions/0052_roms_metadata_flashpoint.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | …nd/alembic/versions/0063_roms_metadata_player_count.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | backend/alembic/versions/0061_manual_metadata.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | backend/alembic/versions/0070_ss_age_ratings.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | …ckend/alembic/versions/0058_roms_metadata_launchbox.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( (r.ma | STRING |
| HIGH | backend/alembic/versions/0045_roms_metadata_update.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_ | STRING |
| HIGH | backend/alembic/versions/0074_fix_empty_json_arrays.py | 0 | create 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.py | 0 | create 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.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_ | STRING |
| HIGH | backend/alembic/versions/0061_manual_metadata.py | 0 | create or replace view roms_metadata as select r.id as rom_id, now() as created_at, now() as updated_at, coalesce( json_ | STRING |
| HIGH | backend/alembic/versions/0070_ss_age_ratings.py | 0 | create 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.py | 0 | create 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.py | 0 | create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, n | STRING |
| HIGH | backend/alembic/versions/0048_sibling_roms_more_ids.py | 0 | create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, n | STRING |
| HIGH | backend/alembic/versions/0069_sibling_roms_fs_name.py | 0 | create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, n | STRING |
| HIGH | backend/alembic/versions/0071_sibling_roms_fs_name.py | 0 | create or replace view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, n | STRING |
| HIGH | …kend/alembic/versions/0038_add_ssid_to_sibling_roms.py | 0 | create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as cre | STRING |
| HIGH | backend/alembic/versions/0024_sibling_roms_db_view.py | 0 | create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as cre | STRING |
| HIGH | backend/alembic/versions/0048_sibling_roms_more_ids.py | 0 | create view sibling_roms as select r1.id as rom_id, r2.id as sibling_rom_id, r1.platform_id as platform_id, now() as cre | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | entrypoint.sh | 22 | # Define a signal handler to propagate termination signals | COMMENT |
| MEDIUM | backend/sync_watcher.py | 137 | # Create a sync session | COMMENT |
| MEDIUM | backend/handler/database/roms_handler.py | 954 | # Create a subquery that identifies the primary ROM in each group | COMMENT |
| MEDIUM | backend/handler/metadata/gamelist_handler.py | 257 | # Create a copy of the metadata to avoid modifying the cached version | COMMENT |
| MEDIUM | backend/endpoints/sync.py | 156 | # Create a new sync session | COMMENT |
| MEDIUM | backend/endpoints/sync.py | 462 | # Create a session and enqueue the job | COMMENT |
| MEDIUM | backend/endpoints/sockets/scan.py | 275 | # Create the entry early so we have the ID | COMMENT |
| MEDIUM | backend/tests/handler/auth/test_session_middleware.py | 198 | # Create a session | COMMENT |
| MEDIUM | backend/tests/handler/auth/test_session_middleware.py | 328 | # Create a session | COMMENT |
| MEDIUM⚡ | backend/tests/handler/filesystem/test_base_handler.py | 229 | # Create a file first | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_base_handler.py | 244 | # Create a file (should not be listed) | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 365 | # Create the test file | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 538 | # Create a test file to rename | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 698 | # Create a test file with known content for hash verification | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 796 | # Create a mock CHD v5 file in a temporary directory | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 812 | # Create a new handler instance with temp base path | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 1080 | # Create a CHD v4 file (should not use internal hash logic) | COMMENT |
| MEDIUM | …end/tests/handler/filesystem/test_resources_handler.py | 218 | # Create a mock image with high resolution | COMMENT |
| MEDIUM | …end/tests/handler/filesystem/test_resources_handler.py | 236 | # Create a mock image with low resolution | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_switch_titledb.py | 150 | # Create a large dataset to test batching | COMMENT |
| MEDIUM | backend/tests/tasks/test_tasks.py | 282 | # Create a proper HTTPStatusError | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 133 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 202 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 241 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 292 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_sync_push_pull.py | 157 | # Create an additional archival (null-slot) save with the same filename | COMMENT |
| MEDIUM⚡ | backend/tests/endpoints/test_tasks.py | 183 | # Create a token without TASKS_RUN scope | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_mobygames.py | 28 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_steamgriddb.py | 30 | # Create a real request-like object | COMMENT |
| MEDIUM | …ckend/tests/adapters/services/test_retroachivements.py | 23 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_screenscraper.py | 39 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/models/rom.py | 570 | # Create a deep copy to avoid mutating the original metadata | COMMENT |
| MEDIUM | backend/models/collection.py | 127 | # Create a reversible encoded ID | COMMENT |
| MEDIUM⚡ | backend/alembic/versions/0022_collections_.py | 36 | # Define the path for the new folder | COMMENT |
| MEDIUM⚡ | backend/alembic/versions/0022_collections_.py | 39 | # Create the new folder if it doesn't exist | COMMENT |
| MEDIUM | backend/alembic/versions/0057_multi_notes.py | 23 | # Create the new rom_notes table | COMMENT |
| MEDIUM | backend/alembic/versions/0047_smart_collections.py | 24 | # Create the smart collections table | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/startup.py | 64 | except Exception: | CODE |
| LOW | backend/startup.py | 96 | except Exception: | CODE |
| LOW | backend/startup.py | 128 | except Exception: | CODE |
| LOW | backend/sync_watcher.py | 167 | except Exception: | CODE |
| LOW | backend/handler/rom_conversion.py | 63 | except Exception: | CODE |
| LOW | backend/handler/rom_conversion.py | 66 | except Exception: | CODE |
| LOW | backend/handler/filesystem/assets_handler.py | 169 | except Exception as e: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 197 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 369 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 484 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 626 | except Exception as exc: | CODE |
| LOW⚡ | backend/handler/filesystem/base_handler.py | 251 | except Exception: | CODE |
| LOW | backend/handler/metadata/flashpoint_handler.py | 157 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/flashpoint_handler.py | 212 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/flashpoint_handler.py | 407 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 210 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 236 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 247 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 398 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 573 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/ra_handler.py | 142 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/ss_handler.py | 623 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/moby_handler.py | 91 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/sgdb_handler.py | 43 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/sgdb_handler.py | 77 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/sgdb_handler.py | 152 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/libretro_handler.py | 81 | except Exception as exc: | CODE |
| MEDIUM | backend/handler/metadata/libretro_handler.py | 78 | def heartbeat(self) -> bool: | CODE |
| LOW | backend/handler/metadata/hasheous_handler.py | 145 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/hasheous_handler.py | 298 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/gamelist_handler.py | 365 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/gamelist_handler.py | 460 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/playmatch_handler.py | 122 | except Exception as e: | CODE |
| LOW | backend/handler/metadata/playmatch_handler.py | 233 | except Exception as exc: | CODE |
| LOW | backend/handler/metadata/playmatch_handler.py | 329 | except Exception: | CODE |
| LOW | backend/handler/metadata/igdb_handler.py | 648 | except Exception as e: | CODE |
| LOW | …end/handler/metadata/launchbox_handler/local_source.py | 77 | except Exception: | CODE |
| LOW | backend/tasks/tasks.py | 27 | except Exception as e: | CODE |
| LOW | backend/tasks/sync_push_pull_task.py | 107 | except Exception as e: | CODE |
| LOW | backend/tasks/sync_push_pull_task.py | 161 | except Exception: | CODE |
| LOW | backend/tasks/sync_push_pull_task.py | 183 | except Exception as e: | CODE |
| LOW | backend/tasks/sync_push_pull_task.py | 409 | except Exception: | CODE |
| LOW | backend/tasks/manual/cleanup_missing_roms.py | 72 | except Exception as e: | CODE |
| LOW | backend/tasks/manual/cleanup_orphaned_resources.py | 125 | except Exception as e: | CODE |
| LOW | backend/tasks/manual/cleanup_orphaned_resources.py | 145 | except Exception as e: | CODE |
| LOW | backend/tasks/manual/recompute_save_content_hashes.py | 94 | except Exception as e: | CODE |
| LOW | backend/tasks/manual/recompute_save_content_hashes.py | 120 | except Exception as e: | CODE |
| LOW | backend/tasks/scheduled/convert_images_to_webp.py | 83 | except Exception as exc: | CODE |
| LOW | backend/tasks/scheduled/convert_images_to_webp.py | 181 | except Exception as exc: | CODE |
| LOW | …end/tasks/scheduled/sync_retroachievements_progress.py | 129 | except Exception as e: | CODE |
| LOW | backend/tools/generate_test_data.py | 771 | except Exception: | CODE |
| LOW⚡ | backend/tools/xml_diagnostics.py | 57 | except Exception as e: | CODE |
| MEDIUM⚡ | backend/tools/xml_diagnostics.py | 58 | print(f"Error reading file: {e}") | CODE |
| LOW⚡ | backend/tools/xml_diagnostics.py | 68 | except Exception as e: | CODE |
| LOW | backend/tools/xml_diagnostics.py | 88 | except Exception as context_error: | CODE |
| LOW | backend/endpoints/auth.py | 97 | except Exception: | CODE |
| LOW | backend/endpoints/tasks.py | 343 | except Exception as e: | CODE |
| LOW | backend/endpoints/firmware.py | 315 | except Exception as e: | CODE |
| LOW | backend/endpoints/device.py | 127 | except Exception: | CODE |
| LOW | backend/endpoints/activity.py | 121 | except Exception as e: # noqa: BLE001 | CODE |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/sync_watcher.py | 206 | CODE | |
| LOW | backend/handler/scan_handler.py | 169 | CODE | |
| LOW | backend/handler/scan_handler.py | 320 | CODE | |
| LOW | backend/handler/scan_handler.py | 689 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 671 | CODE | |
| LOW | backend/handler/database/collections_handler.py | 152 | CODE | |
| LOW | backend/handler/auth/hybrid_auth.py | 21 | CODE | |
| LOW | …nd/handler/auth/middleware/redis_session_middleware.py | 39 | CODE | |
| LOW | …nd/handler/auth/middleware/redis_session_middleware.py | 61 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 163 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 349 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 470 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 611 | CODE | |
| LOW | backend/handler/filesystem/roms_handler.py | 319 | CODE | |
| LOW | backend/handler/filesystem/roms_handler.py | 609 | CODE | |
| LOW | backend/handler/filesystem/base_handler.py | 187 | CODE | |
| LOW | backend/handler/filesystem/base_handler.py | 364 | CODE | |
| LOW | backend/handler/sync/ssh_handler.py | 128 | CODE | |
| LOW | backend/handler/metadata/ra_handler.py | 307 | CODE | |
| LOW | backend/handler/metadata/ss_handler.py | 231 | CODE | |
| LOW | backend/handler/metadata/sgdb_handler.py | 98 | CODE | |
| LOW | backend/handler/metadata/hasheous_handler.py | 234 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 185 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 269 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 328 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 370 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 431 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 218 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/handler.py | 48 | CODE | |
| LOW | …end/handler/metadata/launchbox_handler/local_source.py | 16 | CODE | |
| LOW | backend/tasks/sync_push_pull_task.py | 66 | CODE | |
| LOW | backend/tasks/sync_push_pull_task.py | 342 | CODE | |
| LOW | backend/tasks/manual/cleanup_orphaned_resources.py | 55 | CODE | |
| LOW | backend/tasks/scheduled/update_launchbox_metadata.py | 44 | CODE | |
| LOW | backend/tools/generate_test_data.py | 674 | CODE | |
| LOW | backend/tools/xml_diagnostics.py | 38 | CODE | |
| LOW | backend/endpoints/firmware.py | 263 | CODE | |
| LOW | backend/endpoints/feeds.py | 189 | CODE | |
| LOW | backend/endpoints/feeds.py | 210 | CODE | |
| LOW | backend/endpoints/collections.py | 428 | CODE | |
| LOW | backend/endpoints/saves.py | 157 | CODE | |
| LOW | backend/endpoints/heartbeat.py | 188 | CODE | |
| LOW | backend/endpoints/sockets/logs.py | 80 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 524 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 696 | CODE | |
| LOW | backend/endpoints/roms/upload.py | 253 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 1198 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 1855 | CODE | |
| LOW | backend/config/config_manager.py | 493 | CODE | |
| LOW | backend/tests/conftest.py | 43 | CODE | |
| LOW | backend/tests/utils/test_pegasus_exporter.py | 45 | CODE | |
| LOW | backend/tests/utils/test_rvz_hasher.py | 353 | CODE | |
| LOW | backend/tests/adapters/services/test_screenscraper.py | 891 | CODE | |
| LOW | backend/utils/psp_hasher.py | 65 | CODE | |
| LOW | backend/utils/gamelist_exporter.py | 110 | CODE | |
| LOW | backend/utils/archives.py | 75 | CODE | |
| LOW | backend/utils/archives.py | 89 | CODE | |
| LOW | backend/utils/archives.py | 111 | CODE | |
| LOW | backend/utils/archives.py | 210 | CODE | |
| LOW | backend/utils/archives.py | 243 | CODE | |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/main.py | 16 | CODE | |
| LOW | backend/main.py | 17 | CODE | |
| LOW | backend/main.py | 18 | CODE | |
| LOW | backend/main.py | 19 | CODE | |
| LOW | backend/main.py | 20 | CODE | |
| LOW | backend/handler/activity_handler.py | 9 | CODE | |
| LOW | backend/handler/database/stats_handler.py | 1 | CODE | |
| LOW | backend/handler/auth/permissions_map.py | 19 | CODE | |
| LOW | backend/handler/auth/permissions.py | 12 | CODE | |
| LOW | backend/handler/auth/dependencies.py | 16 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 3 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 3 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 7 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 7 | CODE | |
| LOW | backend/handler/sync/comparison.py | 1 | CODE | |
| LOW | backend/handler/sync/ssh_handler.py | 12 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/media.py | 12 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/__init__.py | 1 | CODE | |
| LOW | backend/tools/generate_test_data.py | 18 | CODE | |
| LOW | backend/tools/generate_test_data.py | 35 | CODE | |
| LOW | backend/endpoints/sockets/activity.py | 17 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 1 | CODE | |
| LOW | backend/endpoints/responses/rom.py | 1 | CODE | |
| LOW | backend/endpoints/responses/permission.py | 12 | CODE | |
| LOW | backend/endpoints/responses/music.py | 1 | CODE | |
| LOW | backend/endpoints/responses/collection.py | 6 | CODE | |
| LOW | backend/endpoints/responses/collection.py | 6 | CODE | |
| LOW | backend/utils/archives.py | 16 | CODE | |
| LOW | backend/utils/media_types.py | 1 | CODE | |
| LOW | backend/utils/json_module.py | 11 | CODE | |
| LOW | backend/utils/ssrf.py | 25 | CODE | |
| LOW | backend/utils/audio_tags.py | 1 | CODE | |
| LOW | backend/utils/rom_patcher/__init__.py | 1 | CODE | |
| LOW | backend/utils/rom_patcher/__init__.py | 1 | CODE | |
| LOW | backend/utils/rom_patcher/__init__.py | 1 | CODE | |
| LOW | backend/utils/rom_patcher/__init__.py | 1 | CODE | |
| LOW | backend/models/rom.py | 1 | CODE | |
| LOW | backend/models/user.py | 1 | CODE | |
| LOW | backend/models/user.py | 18 | CODE | |
| LOW | backend/models/user.py | 19 | CODE | |
| LOW | backend/models/user.py | 20 | CODE | |
| LOW | backend/models/user.py | 21 | CODE | |
| LOW | backend/models/permission.py | 1 | CODE | |
| LOW | backend/models/firmware.py | 1 | CODE | |
| LOW | backend/models/device.py | 1 | CODE | |
| LOW | backend/models/play_session.py | 1 | CODE | |
| LOW | backend/models/platform.py | 1 | CODE | |
| LOW | backend/models/assets.py | 1 | CODE | |
| LOW | backend/models/client_token.py | 1 | CODE | |
| LOW | backend/models/collection.py | 1 | CODE | |
| LOW | backend/models/collection.py | 15 | CODE | |
| LOW | backend/models/collection.py | 16 | CODE | |
| LOW | backend/models/sync_session.py | 1 | CODE | |
| LOW | backend/models/device_save_sync.py | 1 | CODE | |
| LOW | backend/adapters/services/igdb_types.py | 1 | CODE | |
| LOW | backend/adapters/services/igdb.py | 23 | CODE | |
| LOW | backend/alembic/env.py | 9 | CODE | |
| LOW | backend/alembic/env.py | 9 | CODE | |
| LOW | backend/alembic/env.py | 9 | CODE | |
| LOW | backend/alembic/env.py | 12 | CODE | |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/scan_handler.py | 347 | # Check if files have been parsed and hashed | COMMENT |
| LOW⚡ | backend/handler/auth/hybrid_auth.py | 24 | # Check if session key already stored in cache | COMMENT |
| LOW⚡ | backend/handler/auth/hybrid_auth.py | 30 | # Check if Authorization header exists | COMMENT |
| LOW⚡ | backend/handler/auth/hybrid_auth.py | 38 | # Check if basic auth header is valid | COMMENT |
| LOW | backend/handler/auth/hybrid_auth.py | 53 | # Check if bearer auth header is valid | COMMENT |
| LOW | backend/handler/auth/hybrid_auth.py | 104 | # Check if we're in KIOSK_MODE | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 211 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 383 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 506 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/roms_handler.py | 348 | # Check if rom is a multi-part rom | COMMENT |
| LOW⚡ | backend/handler/filesystem/roms_handler.py | 379 | # Check if file is excluded by extension. | COMMENT |
| LOW⚡ | backend/handler/filesystem/roms_handler.py | 387 | # Check if the file name matches a pattern in the excluded list. | COMMENT |
| LOW⚡ | backend/handler/filesystem/roms_handler.py | 394 | # Check if this is a top-level file (not in a subdirectory) | COMMENT |
| LOW | backend/handler/filesystem/base_handler.py | 284 | # Check if the file name matches a pattern in the excluded list. | COMMENT |
| LOW | backend/handler/filesystem/base_handler.py | 398 | # Write file atomically | COMMENT |
| LOW | backend/handler/filesystem/base_handler.py | 446 | # Open file for writing | COMMENT |
| LOW | backend/handler/metadata/flashpoint_handler.py | 246 | # Check if the filename is a UUID | COMMENT |
| LOW | backend/handler/metadata/hasheous_handler.py | 194 | # Check if its a 404 error | COMMENT |
| LOW | backend/handler/metadata/gamelist_handler.py | 348 | # Check if we already have cached data for this platform | COMMENT |
| LOW | backend/handler/metadata/launchbox_handler/handler.py | 144 | # Check if game is scummvm shortname | COMMENT |
| LOW | backend/tasks/sync_push_pull_task.py | 383 | # Check if device has synced this before (intentional delete) | COMMENT |
| LOW | backend/tasks/manual/cleanup_orphaned_resources.py | 112 | # Check if platform exists in database | COMMENT |
| LOW | backend/tasks/manual/cleanup_orphaned_resources.py | 134 | # Check if ROM exists in database | COMMENT |
| LOW | backend/endpoints/auth.py | 208 | # Check if user has access to requested scopes | COMMENT |
| LOW | backend/endpoints/roms/__init__.py | 910 | # Check if all requested ROMs were found | COMMENT |
| LOW | backend/endpoints/roms/__init__.py | 1289 | # Write file to ZIP | COMMENT |
| LOW | backend/logger/formatter.py | 109 | # Check if an explicit environment variable is set to control color behavior | COMMENT |
| LOW | backend/config/config_manager.py | 191 | # Check if the config file is mounted | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 330 | # Write file first | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 333 | # Read file | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 344 | # Write file first | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 392 | # Write file first | COMMENT |
| LOW | backend/utils/validation.py | 34 | # Check if any character is outside ASCII range (0-127) | COMMENT |
| LOW⚡ | backend/alembic/versions/0022_collections_.py | 46 | # Check if the item is a directory and not the new folder itself | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/handler/filesystem/base_handler.py | 316 | List all directories in a given path. Args: path: Relative path within base directory | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 418 | Write file to filesystem using a streamed approach. Args: path: Relative path within base | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 450 | Read file from filesystem. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 478 | Stream file from filesystem. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 607 | List all files in a directory. Args: directory: Relative path to the directory Re | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 655 | Get the size of a file. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/endpoints/auth.py | 111 | OAuth2 token endpoint Args: form_data (Annotated[OAuth2RequestForm, Depends): Form Data with OAuth2 info | STRING |
| HIGH | backend/endpoints/auth.py | 245 | OIDC login endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExcept | STRING |
| HIGH | backend/endpoints/auth.py | 269 | OIDC callback endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExc | STRING |
| HIGH | backend/endpoints/user.py | 343 | Update user endpoint Args: request (Request): Fastapi Requests object user_id (int): User internal | STRING |
| HIGH | backend/endpoints/firmware.py | 39 | Upload firmware files endpoint Args: request (Request): Fastapi Request object platform_slug (str): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/database/roms_handler.py | 793 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 1716 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 1762 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 1840 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 2060 | CODE | |
| LOW | backend/handler/database/saves_handler.py | 65 | CODE | |
| LOW | backend/handler/auth/middleware/csrf_middleware.py | 20 | CODE | |
| LOW | backend/endpoints/music.py | 58 | CODE | |
| LOW | backend/endpoints/music.py | 143 | CODE | |
| LOW | backend/endpoints/music.py | 173 | CODE | |
| LOW | backend/endpoints/music.py | 203 | CODE | |
| LOW | backend/endpoints/music.py | 233 | CODE | |
| LOW | backend/endpoints/saves.py | 157 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 209 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 301 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 955 | CODE | |
| LOW | backend/tests/endpoints/roms/test_upload.py | 65 | CODE | |
| LOW | backend/adapters/services/retroachievements.py | 129 | CODE | |
| LOW | backend/adapters/services/steamgriddb.py | 80 | CODE | |
| LOW | backend/adapters/services/steamgriddb.py | 133 | CODE | |
| LOW | backend/adapters/services/mobygames.py | 158 | CODE | |
| LOW | backend/adapters/services/mobygames.py | 171 | CODE | |
| LOW | backend/adapters/services/screenscraper.py | 263 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/handler/auth/middleware/session_middleware.py | 136 | "null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT;", | CODE |
| HIGH | …nd/handler/auth/middleware/redis_session_middleware.py | 91 | header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {self.se | CODE |
| HIGH | backend/tests/handler/database/test_saves_handler.py | 528 | wins (and is implicitly not-null), so slot_not_null=True is a no-op | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/activity_handler.py | 50 | async def set_active(self, entry: ActivityEntry) -> None: | CODE |
| LOW | backend/handler/auth/base_handler.py | 169 | async def set_user_new_password(self, user: Any, new_password: str) -> None: | CODE |
| LOW | backend/handler/filesystem/__init__.py | 15 | __all__ = [ | CODE |
| LOW | backend/handler/metadata/launchbox_handler/__init__.py | 3 | __all__ = [ | CODE |
| LOW | backend/tasks/tasks.py | 20 | def update_job_meta(metadata: dict[str, Any]) -> None: | CODE |
| LOW | backend/config/config_manager.py | 743 | def _update_config_file(self) -> None: | CODE |
| LOW | …ckend/tests/handler/database/test_roms_filter_cache.py | 51 | def _set_rom_genres(rom_id: int, genres: list[str]) -> None: | CODE |
| LOW | backend/utils/rate_limiter.py | 61 | def set_max_concurrency(self, max_concurrency: int) -> None: | CODE |
| LOW | backend/utils/rom_patcher/__init__.py | 8 | __all__ = [ | CODE |
| LOW | backend/adapters/services/screenscraper.py | 63 | def _update_thread_allowance(response: dict) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/utils/audio_tags.py | 153 | # Vorbis comments / FLAC pictures) was largely AI-generated against mutagen's | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/config.example.yml | 65 | # # In this example if you have a 'gc' folder, RomM will treat it like the 'ngc' folder | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 429 | // visually seamless. | COMMENT |
| MEDIUM | …ontend/src/v2/components/Player/ResumePanel.stories.ts | 363 | // helper picks the first as default, so we leverage the existing | COMMENT |
| MEDIUM | backend/tests/endpoints/sockets/test_scan.py | 330 | """Test comprehensive scenarios with different combinations""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/v2/components/shared/PlatformSelect.vue | 184 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/v2/lib/forms/RForm/RForm.stories.ts | 128 | <RTextField v-model="name" prefix-label="stacked" label="Display name" :rules="nameRules" placeholder="Jane | CODE |
| LOW | …tend/src/v2/lib/forms/RTextField/RTextField.stories.ts | 125 | placeholder: "Jane Doe", | CODE |
| LOW | frontend/src/v2/lib/forms/RSelect/RSelect.vue | 998 | <slot name="placeholder">{{ effectivePlaceholder }}</slot> | CODE |
| LOW | frontend/src/v2/lib/primitives/RImg/RImg.vue | 125 | <slot name="placeholder" /> | CODE |
| LOW | backend/tests/utils/test_validation.py | 135 | validate_email("user@example.com") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/BACKEND_ARCHITECTURE.md | 225 | │ ├── scan_handler.py # Library scan orchestration | CODE |