A beautiful, powerful, self-hosted ROM manager and player.
This report summarizes scanner evidence for rommapp/romm, a Python project with 13,312 GitHub stars. SynthScan examined 588,416 lines of code across 2754 source files, recording 7905 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 14.7 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 7054 finding(s).
Are imports declared and package/API names verified? 113 finding(s).
Are wrappers, guards, and repeated structures necessary? 7395 finding(s).
Which changes need focused human review? 7905 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 7905 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/test-utils/unhandledRejection.ts | 5 | export async function expectNoUnhandledRejection(run: () => Promise<void>) { | CODE |
| LOW | frontend/src/stores/streaming.ts | 72 | function containerLabelForPlatform( | CODE |
| LOW | frontend/src/stores/soundtrackPlayer.ts | 88 | export function resolveSoundtrackGameArtwork( | CODE |
| LOW | frontend/src/utils/index.ts | 553 | export function areThreadsRequiredForEJSCore(core: string): boolean { | CODE |
| LOW | frontend/src/utils/index.ts | 621 | export function getControlSchemeForPlatform( | CODE |
| LOW | frontend/src/utils/index.ts | 637 | export function isRuffleEmulationSupported( | CODE |
| LOW | frontend/src/utils/index.ts | 656 | export function isJsDosEmulationSupported( | CODE |
| LOW | frontend/src/utils/index.ts | 721 | export function isEasyRpgEmulationSupported( | CODE |
| LOW | …end/src/v2/composables/useOverlayRouteDismiss/index.ts | 23 | export function installOverlayRouteDismiss(router: Router): () => void { | CODE |
| LOW | frontend/src/v2/composables/useCan/index.ts | 27 | export function installPermissionsHydration() { | CODE |
| LOW | frontend/src/v2/composables/useRomSync/index.ts | 147 | function refreshAfterUserStateChange() { | CODE |
| LOW | frontend/src/v2/composables/useBreakpoint/index.ts | 99 | export function installBreakpointAttribute(): void { | CODE |
| LOW⚡ | …d/src/v2/composables/useSocketTransportHealth/index.ts | 17 | function syncDegradedFromTransport() { | CODE |
| LOW⚡ | …d/src/v2/composables/useSocketTransportHealth/index.ts | 27 | function clearEngineUpgradeListener() { | CODE |
| LOW⚡ | …d/src/v2/composables/useSocketTransportHealth/index.ts | 33 | function bindEngineUpgradeListener() { | CODE |
| LOW | …ontend/src/v2/composables/usePlatformPlayable/index.ts | 110 | export function usePlatformPlayableChecker(): { | CODE |
| LOW | frontend/src/v2/composables/useNativeLaunch/index.ts | 49 | export function installNativeLaunchFeedback(): void { | CODE |
| LOW | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 353 | function setOrDelete(key: string, value: string | null) { | CODE |
| LOW | frontend/src/v2/composables/useGameActions/index.ts | 610 | async function removeFromContinuePlaying() { | CODE |
| LOW | frontend/src/v2/utils/routeQuery.ts | 49 | export function installQueryNavigationGuard(router: Router): () => void { | CODE |
| LOW | frontend/src/v2/utils/autofocus.ts | 27 | export function shouldClaimFocusOnModality( | CODE |
| LOW | frontend/src/v2/utils/playerFullscreen.ts | 36 | export function installFullscreenFallback(): () => void { | CODE |
| LOW | frontend/src/v2/utils/smartCollectionCriteria.ts | 242 | export function hasAnySmartFilterCriteria(c: SmartFilterCriteria): boolean { | CODE |
| LOW | frontend/src/v2/utils/smartCollectionCriteria.ts | 562 | export function summarizeSmartFilterCriteria( | CODE |
| LOW | frontend/src/v2/utils/playerBezel.ts | 42 | export function resolveStoredBezelVisible(stored: string | null): boolean { | CODE |
| LOW | frontend/src/v2/utils/playerTouchGuard.ts | 12 | export function suppressVirtualGamepadZoneTouch(event: Event): void { | CODE |
| LOW | …nd/src/v2/components/GameDetails/WalkthroughSubtab.vue | 125 | async function confirmFolderConversionIfNeeded(): Promise<boolean> { | CODE |
| LOW | frontend/src/v2/components/Dialogs/EditRomDialog.vue | 297 | function handleRomUpdateFromMetadata(updatedRom: UpdateRom) { | CODE |
| LOW | frontend/src/v2/views/Settings/UserInterface.vue | 222 | function onVirtualCollectionTypeChange(value: unknown) { | CODE |
| LOW | …ibraryManagement/Config/Dialog/CreateFolderMapping.vue | 186 | 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 | 438 | export function invalidateEmulatorJSRomCacheIfRenamed(rom: { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 460 | function installDefaultOptionsFallback(emulator: any) { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 518 | function lookUpGamepadsByBrowserIndex(emulator: any) { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 586 | function skipDiskSelectionBeforeStart(emulator: any) { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 602 | export function installEJSDefaultOptionsTrap() { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 658 | export function installNetplayHostAudioTap(): PatchNetplayHostAudio { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 721 | function isIOSFullscreenShimRequired() { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/utils.ts | 853 | export function createExitEmulationButton(label: string): HTMLButtonElement { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/Player.vue | 127 | function baselineSaveTrackerFromEmulator() { | CODE |
| LOW | frontend/src/views/Player/EmulatorJS/Player.vue | 256 | function holdBackUntilStateApplied() { | CODE |
| LOW | frontend/src/services/api/collection.ts | 194 | async function setSmartCollectionVisibility({ | CODE |
| LOW | frontend/src/services/api/play-session.ts | 23 | function ingestPlaySessionsKeepalive({ | CODE |
| LOW | frontend/src/services/api/config.ts | 42 | async function deletePlatformVersionConfig({ fsSlug }: { fsSlug: string }) { | CODE |
| LOW⚡ | backend/startup.py | 72 | def _enqueue_recompute_save_hashes_if_needed() -> None: | CODE |
| LOW | backend/startup.py | 91 | def _enqueue_convert_images_to_webp() -> None: | CODE |
| LOW | backend/startup.py | 118 | async def _rebuild_outdated_metadata_stores() -> None: | CODE |
| LOW | backend/startup.py | 138 | def _drop_legacy_scheduler_state() -> None: | CODE |
| LOW | backend/sync_watcher.py | 42 | def _extract_device_and_platform(path: str) -> tuple[str, str, str] | None: | CODE |
| LOW | backend/watcher.py | 63 | def get_pending_scan_coverage() -> PendingScanCoverage: | CODE |
| LOW | backend/handler/socket_handler.py | 58 | def _login_session_sockets_key(self, session_id: str) -> str: | CODE |
| LOW | backend/handler/socket_handler.py | 182 | async def unbind_from_login_session(self, sid: str) -> None: | CODE |
| LOW | backend/handler/socket_handler.py | 207 | async def close_login_session_sockets(session_ids: Iterable[str]) -> None: | CODE |
| LOW | backend/handler/socket_handler.py | 216 | async def close_client_token_sockets(token_ids: Iterable[int]) -> None: | CODE |
| 6567 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/stores/streaming.ts | 37 | // ── Store ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/streaming.ts | 50 | // ── Actions ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/native.ts | 47 | // ── Store ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/native.ts | 99 | // ── Getters ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/native.ts | 156 | // ── Actions ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …end/src/v2/composables/useGalleryVirtualItems/index.ts | 273 | // ── Structural sharing across re-packs ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 128 | // ── CD spin (+ launch drop) ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 191 | // ── Cartridge slot-in ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 203 | // ── Launch flourish (player view) ───────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 222 | // ── Hover video ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/composables/useCoverAnimation/index.ts | 260 | // ── Motion preference flips off mid-flight ──────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 152 | // ── URL → store ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ontend/src/v2/composables/useGalleryFilterUrl/index.ts | 347 | // ── Store → URL ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Settings/SettingsSection.vue | 7 | // ├─────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM | frontend/src/v2/components/Settings/SettingsSection.vue | 10 | // └─────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM | …ontend/src/v2/components/Settings/ScanPriorityList.vue | 80 | // ── Free-text entry (allow-custom only) ───────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepAdmin.vue | 59 | // ── Avatar picker ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 59 | // ── Detected platforms ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 111 | // ── Detected-pane filter ─────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 163 | // ── Supported (selectable) platforms ─────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 212 | // ── Search ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 226 | // ── Selection helpers ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Auth/SetupStepPlatforms.vue | 305 | // ── Structure banner copy ────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/SettingsTab.vue | 48 | // ── Details edit form ────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/SettingsTab.vue | 124 | // ── Details (read-only) ──────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 135 | // ── Tri-state mapping helpers ────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 289 | // ── Multi-select sections ────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 438 | // ── Platform multi-select ────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 449 | // ── Game length (HowLongToBeat main story) ───────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FilterDrawer.vue | 482 | // ── Active-filter count (footer badge) ──────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 84 | // ── Edit form state ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 165 | // ── Cover preview ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 209 | // ── Cover actions ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/v2/components/Gallery/CollectionSettingsTab.vue | 238 | // ── Save ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 480 | // ── Toolbar ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 523 | // ── Viewport range / AlphaStrip / dwell prefetch ──────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 553 | // ── Debug overlay bridge ──────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 747 | // ── Search filter (debounced) ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 750 | // ── Sort ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 781 | // ── Scroll restoration ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/GalleryShell.vue | 866 | // ── Slot helpers ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/FirmwareTab.vue | 68 | // ── Inline upload (no dialog: the dropzone lives in the tab) ────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Gallery/SelectionBar.vue | 326 | // ── Outline ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameCard/GameCard.vue | 201 | // ── Cover hover / focus ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameDetails/NotesTab.vue | 113 | // ── Selection (URL-synced via ?note=<id>) ──────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/GameDetails/NotesTab.vue | 154 | // ── Edit form ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Dialogs/EditRomDialog.vue | 110 | // ── Tabbed editing surface ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardPicker.vue | 92 | // ── Create dialog ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardPicker.vue | 96 | // ── Manage dialog ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/StreamStage.vue | 266 | // ── Fullscreen ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardManager.vue | 68 | // ── Create ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardManager.vue | 101 | // ── Edit ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardManager.vue | 141 | // ── Delete ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardManager.vue | 177 | // ── Version history (lazy per card) ───────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/components/Player/MemoryCardManager.vue | 215 | // ── Download / upload ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 39 | // ── Defaults ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 43 | // ── Value badges ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 60 | // ── Steps + ticks ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 72 | // ── Range examples ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/v2/lib/forms/RSlider/RSlider.stories.ts | 97 | // ── Color tones ──────────────────────────────────────────────────── | COMMENT |
| 384 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/gme/romm_gme.cpp | 1 | // Entry points the soundtrack player's AudioWorklet calls on top of libgme's | COMMENT |
| LOW | frontend/.storybook/preview.ts | 21 | import { | COMMENT |
| 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 | frontend/src/v2/composables/useSnackbar/index.ts | 1 | // useSnackbar: typed convenience wrapper around the global `snackbarShow` | COMMENT |
| LOW | frontend/src/v2/composables/useReadingProgress/index.ts | 1 | // useReadingProgress: tracks how far through a document the reader is, and | 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 | …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 | import storeGalleryRoms from "@/v2/stores/galleryRoms"; | COMMENT |
| LOW | …end/src/v2/composables/useOverlayRouteDismiss/index.ts | 1 | // useOverlayRouteDismiss: a route change takes the open overlays with it. | COMMENT |
| LOW | frontend/src/v2/composables/useReducedMotion/index.ts | 1 | // useReducedMotion: the single "reduce motion / effects" control. | 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 | …ntend/src/v2/composables/useGalleryProvenance/index.ts | 1 | // useGalleryProvenance: did the user reach the details view by clicking | COMMENT |
| LOW | frontend/src/v2/composables/useCanPlay/index.ts | 1 | // useCanPlay: reactive "can this ROM be played in the browser?" check. | 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/useGalleryOrderUrl/index.ts | 1 | // useGalleryOrderUrl - bookmarkable gallery sort via URL query params. | 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 | // one cell), the first cell of the grid / the last. | 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 | // ?filterSaves=true|false | 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/usePlaySession/index.ts | 1 | // usePlaySession: records a single play session's wall-clock and ingests it | 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 | 41 | export interface MorphSource { | COMMENT |
| LOW | frontend/src/v2/composables/useViewTransition/index.ts | 141 | } | COMMENT |
| LOW | frontend/src/v2/composables/usePageTitle/index.ts | 1 | // usePageTitle | COMMENT |
| LOW | …tend/src/v2/composables/useGalleryViewModeUrl/index.ts | 1 | // useGalleryViewModeUrl: bookmarkable view-mode (groupBy + layout) via | COMMENT |
| LOW | frontend/src/v2/composables/useScanProviders/index.ts | 1 | // useScanProviders: the provider + hash-matcher model shared by every | 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 icons 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 | 101 | withCharIndex: false, | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 161 | // as a cancel in `fetchWindowAt` (no `failedWindows` entry, no retry) and | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 241 | failedWindows: Set<number>; | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 601 | if (offset === 0 && !this.metadataLoaded) this.initialFetching = true; | COMMENT |
| LOW | frontend/src/v2/stores/galleryRoms.ts | 641 | // the guard below leaves the established size alone. | 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 | // - `enabled` getter: true when at least one ROM is selected. The | 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/playerBezel.ts | 1 | // Resolving the bezel overlay image the EmulatorJS player draws around a | COMMENT |
| 175 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | backend/startup.py | 68 | except Exception: | CODE |
| LOW⚡ | backend/startup.py | 76 | except Exception: | CODE |
| LOW | backend/startup.py | 167 | except Exception: | CODE |
| LOW | backend/startup.py | 189 | except Exception: | CODE |
| LOW | backend/startup.py | 201 | except Exception: | CODE |
| LOW | backend/sync_watcher.py | 163 | except Exception: | CODE |
| LOW | backend/handler/socket_handler.py | 85 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/socket_handler.py | 141 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/socket_handler.py | 153 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/socket_handler.py | 160 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/socket_handler.py | 188 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/scan_handler.py | 1272 | except Exception as exc: | CODE |
| LOW | backend/handler/scan_handler.py | 1286 | except Exception as exc: | CODE |
| LOW | backend/handler/asset_store.py | 302 | except Exception: | CODE |
| LOW | backend/handler/asset_store.py | 463 | except Exception: | CODE |
| LOW | backend/handler/notification_handler.py | 139 | except Exception: # noqa: BLE001 - never fail the job that is reporting | CODE |
| LOW | backend/handler/notification_handler.py | 178 | except Exception: # noqa: BLE001 | CODE |
| LOW | backend/handler/audit_handler.py | 105 | except Exception: # noqa: BLE001 - the name is a nicety | CODE |
| LOW | backend/handler/audit_handler.py | 253 | except Exception: # noqa: BLE001 - never fail the action being recorded | CODE |
| LOW⚡ | backend/handler/audit_handler.py | 285 | except Exception: # noqa: BLE001 - better a duplicate than a gap | CODE |
| LOW⚡ | backend/handler/audit_handler.py | 295 | except Exception: # noqa: BLE001 - the claim expires with its window anyway | CODE |
| LOW⚡ | backend/handler/audit_handler.py | 303 | except Exception: # noqa: BLE001 - better a duplicate than a gap | CODE |
| LOW | backend/handler/rom_upload.py | 230 | except Exception as exc: | CODE |
| LOW | backend/handler/activity_handler.py | 183 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | backend/handler/activity_handler.py | 198 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | backend/handler/activity_handler.py | 213 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | backend/handler/activity_handler.py | 217 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | backend/handler/activity_handler.py | 360 | except Exception: # noqa: BLE001 - activity is best-effort, like its broadcast | CODE |
| LOW | backend/handler/rom_conversion.py | 112 | except Exception: | CODE |
| LOW | backend/handler/rom_conversion.py | 115 | except Exception: | CODE |
| LOW | backend/handler/database/roms_handler.py | 780 | except Exception: | CODE |
| LOW | backend/handler/database/roms_handler.py | 817 | except Exception: | CODE |
| LOW | backend/handler/auth/base_handler.py | 586 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | backend/handler/walkthrough/gamefaqs.py | 172 | except Exception as exc: | CODE |
| LOW | backend/handler/walkthrough/gamefaqs.py | 194 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/assets_handler.py | 77 | except Exception as e: | CODE |
| LOW | backend/handler/filesystem/assets_handler.py | 241 | except Exception as e: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 303 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 532 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 661 | except Exception as exc: | CODE |
| LOW | backend/handler/filesystem/resources_handler.py | 831 | except Exception as exc: | CODE |
| LOW | backend/handler/notification_channels/delivery.py | 84 | except Exception: # noqa: BLE001 - the inbox already has it | CODE |
| LOW | backend/handler/notification_channels/delivery.py | 159 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …ckend/handler/notification_channels/apprise_channel.py | 510 | except Exception as exc: # noqa: BLE001 - a plugin says why it refused the URL | CODE |
| LOW | …ckend/handler/notification_channels/apprise_channel.py | 622 | except Exception as exc: # noqa: BLE001 - a plugin says why it refused the URL | CODE |
| LOW | backend/handler/notification_channels/confirmation.py | 71 | except Exception: | CODE |
| LOW | backend/handler/notification_channels/channels.py | 135 | except Exception: | CODE |
| LOW | backend/handler/notification_channels/channels.py | 226 | except Exception as exc: # noqa: BLE001 - the error goes back to the user | CODE |
| LOW | backend/handler/streaming/memory_cards.py | 91 | except Exception as exc: | CODE |
| LOW | backend/handler/streaming/memory_cards.py | 138 | except Exception: | CODE |
| LOW | backend/handler/streaming/memory_cards.py | 293 | except Exception: | CODE |
| LOW | backend/handler/streaming/memory_cards.py | 323 | except Exception: | CODE |
| LOW | backend/handler/streaming/launch.py | 137 | except Exception as exc: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 220 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 288 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 305 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 313 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 328 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 379 | except Exception: | CODE |
| LOW | backend/handler/streaming/lifecycle.py | 456 | except Exception: | CODE |
| 131 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/handler/database/states_handler.py | 0 | ids only, so no `save` is built and no eager rom or user join fires. | STRING |
| HIGH | backend/handler/database/roms_handler.py | 0 | ids only, so no `save` is built and no eager rom or user join fires. | STRING |
| HIGH | backend/handler/database/saves_handler.py | 0 | ids only, so no `save` is built and no eager rom or user join fires. | STRING |
| HIGH | backend/tests/handler/metadata/test_igdb_handler.py | 0 | a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was pass | STRING |
| HIGH | backend/tests/handler/metadata/test_moby_handler.py | 0 | a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was pass | STRING |
| HIGH | backend/tests/handler/metadata/test_ss_handler.py | 0 | a serial in the first two characters of the filename must still hit the serial index. regression: re.ignorecase was pass | STRING |
| 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 | …nd/alembic/versions/0098_generated_metadata_columns.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 | …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 | backend/alembic/versions/0127_rom_identity_keys.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 | …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 | …end/alembic/versions/0112_publisher_developer_split.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | …ckend/alembic/versions/0123_recommendation_metadata.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | backend/alembic/versions/0148_rom_age_limits.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | …kend/alembic/versions/0103_roms_facets_provider_ids.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | backend/alembic/versions/0115_add_steam_metadata.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | …d/alembic/versions/0114_demozoo_pouet_csdb_metadata.py | 0 | create or replace function romm_sync_rom_facets() returns trigger language plpgsql as $$ begin insert into roms_facets ( | STRING |
| HIGH | …kend/alembic/versions/0038_add_ssid_to_sibling_roms.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 |
|---|---|---|---|---|
| HIGH | backend/handler/asset_store.py | 299 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/asset_store.py | 326 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/asset_store.py | 150 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/activity_handler.py | 351 | except WatchError: | CODE |
| HIGH | backend/handler/database/roms_handler.py | 521 | except WatchError: | CODE |
| HIGH | backend/handler/database/deleted_assets_handler.py | 23 | except IntegrityError: | CODE |
| HIGH | backend/handler/database/collections_handler.py | 228 | except IntegrityError: | CODE |
| HIGH | backend/handler/filesystem/resources_handler.py | 953 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/filesystem/resources_handler.py | 991 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/streaming/imports.py | 137 | except zipfile.BadZipFile: | CODE |
| HIGH | backend/handler/streaming/saves.py | 86 | except WatchError: | CODE |
| HIGH | backend/handler/streaming/saves.py | 205 | except FileNotFoundError: | CODE |
| HIGH | backend/handler/sync/ssh_handler.py | 204 | except asyncssh.SFTPError: | CODE |
| HIGH | backend/tasks/scheduled/cleanup_upload_tmp.py | 34 | except OSError: | CODE |
| HIGH | backend/endpoints/saves.py | 343 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/saves.py | 394 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/sockets/logs.py | 169 | except Exception: # noqa: BLE001 - best-effort cleanup # nosec B110 | CODE |
| HIGH | backend/endpoints/sockets/scan.py | 770 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/sockets/scan.py | 775 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/sockets/scan.py | 782 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/sockets/scan.py | 790 | except FileNotFoundError: | CODE |
| HIGH | backend/endpoints/roms/__init__.py | 1852 | except FileNotFoundError: | CODE |
| HIGH | backend/logger/log_stream_handler.py | 53 | except Exception: # noqa: BLE001 - never raise/spam # nosec B110 | CODE |
| HIGH | backend/config/config_manager.py | 1562 | except KeyError: | CODE |
| HIGH | backend/config/config_manager.py | 1586 | except KeyError: | CODE |
| HIGH | backend/config/config_manager.py | 1613 | except ValueError: | CODE |
| HIGH | backend/tests/handler/database/test_saves_handler.py | 1286 | except NoResultFound: | CODE |
| HIGH | backend/tests/endpoints/test_logs.py | 147 | except asyncio.CancelledError: | CODE |
| HIGH | backend/tests/utils/test_ssrf.py | 652 | except ValidationError: | CODE |
| HIGH | backend/tests/utils/test_tls.py | 118 | except ssl.SSLWantReadError: | CODE |
| HIGH | backend/tests/utils/test_tls.py | 125 | except ssl.SSLWantReadError: | CODE |
| HIGH | backend/utils/psp_hasher.py | 154 | except OSError: | CODE |
| HIGH | backend/utils/zip_cache.py | 142 | except TypeError: | CODE |
| HIGH | backend/utils/filesystem.py | 116 | except OSError: | CODE |
| HIGH | backend/utils/rvz_hasher.py | 325 | except OSError: | CODE |
| HIGH | backend/utils/datetime.py | 30 | except (TypeError, ValueError, AttributeError): | CODE |
| HIGH | backend/alembic/versions/0022_collections_.py | 71 | except json.JSONDecodeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | entrypoint.sh | 45 | # Define a signal handler to propagate termination signals | COMMENT |
| MEDIUM | backend/sync_watcher.py | 133 | # Create a sync session | COMMENT |
| MEDIUM | backend/handler/database/roms_handler.py | 1760 | # Create a subquery that identifies the primary ROM in each group. | COMMENT |
| MEDIUM | backend/handler/metadata/gamelist_handler.py | 415 | # Create a copy of the metadata to avoid modifying the cached version | COMMENT |
| MEDIUM | backend/endpoints/sync/__init__.py | 579 | # Create a session and enqueue the job | 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 | 309 | # Create a file first | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_base_handler.py | 324 | # Create a file (should not be listed) | COMMENT |
| MEDIUM⚡ | backend/tests/handler/filesystem/test_roms_handler.py | 1322 | # Create a test file with known content for hash verification | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 576 | # Create the test file | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 1171 | # Create a test file to rename | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 1458 | # Create a mock CHD v5 file in a temporary directory | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 1474 | # Create a new handler instance with temp base path | COMMENT |
| MEDIUM | backend/tests/handler/filesystem/test_roms_handler.py | 1790 | # Create a CHD v4 file (should not use internal hash logic) | COMMENT |
| MEDIUM | …end/tests/handler/filesystem/test_resources_handler.py | 248 | # Create a mock image with high resolution | COMMENT |
| MEDIUM | …end/tests/handler/filesystem/test_resources_handler.py | 266 | # 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_update_launchbox_metadata.py | 129 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 255 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 294 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_update_launchbox_metadata.py | 345 | # Create a mock pipeline with async context manager support | COMMENT |
| MEDIUM | backend/tests/tasks/test_sync_push_pull.py | 182 | # Create an additional archival (null-slot) save with the same filename | COMMENT |
| MEDIUM⚡ | backend/tests/endpoints/test_tasks.py | 238 | # Create a token without TASKS_RUN scope | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_mobygames.py | 59 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_steamgriddb.py | 42 | # Create a real request-like object | COMMENT |
| MEDIUM | …ckend/tests/adapters/services/test_retroachivements.py | 68 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/tests/adapters/services/test_screenscraper.py | 175 | # Create a real request-like object | COMMENT |
| MEDIUM | backend/models/rom.py | 1290 | # Create a deep copy to avoid mutating the original metadata | COMMENT |
| MEDIUM | backend/models/collection.py | 162 | # 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/main.py | 13 | CODE | |
| LOW | backend/main.py | 14 | CODE | |
| LOW | backend/main.py | 15 | CODE | |
| LOW | backend/main.py | 16 | CODE | |
| LOW | backend/main.py | 17 | CODE | |
| LOW | backend/main.py | 18 | CODE | |
| LOW | backend/handler/socket_handler.py | 13 | CODE | |
| LOW | backend/handler/audit_handler.py | 3 | CODE | |
| LOW | backend/handler/activity_handler.py | 9 | CODE | |
| LOW | backend/handler/recommendation/serving.py | 8 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 1 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 1 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 1 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 2 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 2 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 3 | CODE | |
| LOW | backend/handler/recommendation/__init__.py | 3 | CODE | |
| LOW | backend/handler/recommendation/builder.py | 9 | CODE | |
| LOW | backend/handler/recommendation/diversity.py | 8 | CODE | |
| LOW | backend/handler/database/recommendations_handler.py | 1 | CODE | |
| LOW | backend/handler/database/stats_handler.py | 1 | CODE | |
| LOW | backend/handler/auth/rom_visibility.py | 3 | 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/walkthrough/gamefaqs.py | 10 | CODE | |
| LOW | backend/handler/walkthrough/__init__.py | 1 | CODE | |
| LOW | backend/handler/walkthrough/__init__.py | 1 | CODE | |
| LOW | backend/handler/walkthrough/__init__.py | 1 | CODE | |
| LOW | backend/handler/walkthrough/__init__.py | 1 | CODE | |
| LOW | backend/handler/walkthrough/__init__.py | 1 | CODE | |
| LOW | backend/handler/filesystem/assets_handler.py | 22 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 3 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 3 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 8 | CODE | |
| LOW | backend/handler/filesystem/__init__.py | 8 | CODE | |
| LOW | backend/handler/streaming/protocol.py | 8 | CODE | |
| LOW | backend/handler/sync/comparison.py | 1 | CODE | |
| LOW | backend/handler/sync/ssh_handler.py | 11 | CODE | |
| LOW | backend/handler/sync/retroarch/psp.py | 6 | CODE | |
| LOW | backend/handler/sync/retroarch/browser.py | 4 | CODE | |
| LOW | backend/handler/sync/retroarch/sync_handler.py | 4 | CODE | |
| LOW | backend/handler/metadata/base_handler.py | 31 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/__init__.py | 1 | CODE | |
| LOW | backend/tools/generate_test_data.py | 18 | CODE | |
| LOW | backend/tools/inspect_recommendations.py | 25 | CODE | |
| LOW | backend/tools/backfill_igdb_tags.py | 20 | 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/recommendation.py | 1 | CODE | |
| LOW | backend/endpoints/responses/collection.py | 6 | CODE | |
| LOW | backend/endpoints/responses/collection.py | 6 | CODE | |
| LOW | backend/tests/handler/recommendation/test_diversity.py | 14 | CODE | |
| LOW | backend/utils/zip_cache.py | 1 | CODE | |
| LOW | backend/utils/conversion_cache.py | 1 | CODE | |
| LOW | backend/utils/m3u.py | 1 | CODE | |
| LOW | backend/utils/media_types.py | 1 | CODE | |
| LOW | backend/utils/age_ratings.py | 3 | CODE | |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/handler/database/saves_handler.py | 499 | Delete every version of a slot past the ``keep`` newest. The slot's record is locked while its versions are lis | STRING |
| HIGH | backend/handler/auth/base_handler.py | 61 | A valid, unused RomM username for the name an identity provider chose. Args: provided (str): The username a | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 577 | List all directories in a given path. Args: path: Relative path within base directory | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 681 | Write file to filesystem using a streamed approach. The stream lands in a temporary file that is renam | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 721 | Read file from filesystem. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 749 | Stream file from filesystem. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 978 | List all files in a directory. Args: directory: Relative path to the directory Re | STRING |
| HIGH | backend/handler/filesystem/base_handler.py | 1047 | Get the size of a file. Args: file_path: Relative path to the file Returns: | STRING |
| HIGH | backend/endpoints/auth.py | 196 | OAuth2 token endpoint Args: form_data (Annotated[OAuth2RequestForm, Depends): Form Data with OAuth2 info | STRING |
| HIGH | backend/endpoints/auth.py | 336 | OIDC login endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExcept | STRING |
| HIGH | backend/endpoints/auth.py | 363 | OIDC callback endpoint Args: request (Request): Fastapi Request object Raises: OIDCDisabledExc | STRING |
| HIGH | backend/endpoints/user.py | 407 | Update user endpoint Args: request (Request): Fastapi Requests object user_id (int): User internal | STRING |
| HIGH | backend/endpoints/firmware.py | 48 | Upload firmware files endpoint Args: request (Request): Fastapi Request object platform_slug (str): | STRING |
| HIGH | backend/utils/filesystem.py | 174 | Replace invalid characters in the filename to make it valid across common filesystems and prevent path-traversa | STRING |
| HIGH | backend/adapters/services/response_validation.py | 43 | Decode a provider reply, logging each new way it strays from `tp` once. Args: tp: The TypedDict (or contain | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/locales/check_i18n_sorted.py | 31 | CODE | |
| LOW | backend/handler/scan_handler.py | 593 | CODE | |
| LOW | backend/handler/scan_handler.py | 1041 | CODE | |
| LOW | backend/handler/asset_store.py | 343 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 1446 | CODE | |
| LOW | backend/handler/database/recommendations_handler.py | 150 | CODE | |
| LOW | backend/handler/database/collections_handler.py | 199 | CODE | |
| LOW | backend/handler/auth/hybrid_auth.py | 64 | CODE | |
| LOW | …nd/handler/auth/middleware/redis_session_middleware.py | 46 | CODE | |
| LOW | …nd/handler/auth/middleware/redis_session_middleware.py | 68 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 281 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 509 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 647 | CODE | |
| LOW | backend/handler/filesystem/resources_handler.py | 811 | CODE | |
| LOW | backend/handler/filesystem/base_handler.py | 403 | CODE | |
| LOW | backend/handler/filesystem/base_handler.py | 625 | CODE | |
| LOW | …ckend/handler/notification_channels/apprise_channel.py | 427 | CODE | |
| LOW | backend/handler/streaming/memory_cards.py | 118 | CODE | |
| LOW | backend/handler/streaming/launch.py | 42 | CODE | |
| LOW | backend/handler/sync/ssh_handler.py | 120 | CODE | |
| LOW | backend/handler/metadata/hltb_handler.py | 381 | CODE | |
| LOW | backend/handler/metadata/sgdb_handler.py | 88 | CODE | |
| LOW | backend/handler/metadata/hasheous_handler.py | 342 | CODE | |
| LOW | backend/handler/metadata/launchbox_handler/handler.py | 80 | CODE | |
| LOW | …end/handler/metadata/launchbox_handler/local_source.py | 17 | CODE | |
| LOW | backend/tasks/sync_push_pull_task.py | 67 | CODE | |
| LOW | backend/tasks/sync_push_pull_task.py | 376 | CODE | |
| LOW | backend/tasks/manual/recompute_save_content_hashes.py | 59 | CODE | |
| LOW | backend/tasks/scheduled/update_launchbox_metadata.py | 103 | CODE | |
| LOW | backend/tasks/scheduled/convert_images_to_webp.py | 60 | CODE | |
| LOW | backend/tasks/scheduled/cleanup_orphaned_resources.py | 76 | CODE | |
| LOW | backend/tools/generate_test_data.py | 734 | CODE | |
| LOW | backend/tools/backfill_igdb_tags.py | 143 | CODE | |
| LOW | backend/tools/measure_dump_cache.py | 115 | CODE | |
| LOW | backend/tools/xml_diagnostics.py | 39 | CODE | |
| LOW | backend/endpoints/firmware.py | 312 | CODE | |
| LOW | backend/endpoints/collections.py | 451 | CODE | |
| LOW | backend/endpoints/saves.py | 191 | CODE | |
| LOW | backend/endpoints/heartbeat.py | 287 | CODE | |
| LOW | backend/endpoints/sockets/logs.py | 115 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 322 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 959 | CODE | |
| LOW | backend/endpoints/sockets/scan.py | 1171 | CODE | |
| LOW | backend/endpoints/roms/upload.py | 481 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 1513 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 1874 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 2470 | CODE | |
| LOW | backend/config/config_manager.py | 141 | CODE | |
| LOW | backend/config/config_manager.py | 1127 | CODE | |
| LOW | backend/tests/conftest.py | 105 | CODE | |
| LOW | backend/tests/test_migrations.py | 98 | CODE | |
| LOW | backend/tests/handler/database/test_saves_handler.py | 1257 | CODE | |
| LOW | backend/tests/handler/database/test_saves_handler.py | 1267 | CODE | |
| LOW | backend/tests/handler/database/test_buffered_results.py | 94 | CODE | |
| LOW | backend/tests/utils/test_audio_tags.py | 254 | CODE | |
| LOW | backend/tests/utils/test_pegasus_exporter.py | 58 | CODE | |
| LOW | backend/tests/utils/test_conversion_cache.py | 308 | CODE | |
| LOW | backend/tests/utils/test_rvz_hasher.py | 355 | CODE | |
| LOW | backend/tests/adapters/services/test_screenscraper.py | 1122 | CODE | |
| LOW | backend/utils/psp_hasher.py | 65 | CODE | |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/auth/hybrid_auth.py | 67 | # Check if session key already stored in cache | COMMENT |
| LOW | backend/handler/auth/hybrid_auth.py | 82 | # Check if basic auth header is valid | COMMENT |
| LOW | backend/handler/auth/hybrid_auth.py | 101 | # Check if bearer auth header is valid | COMMENT |
| LOW | backend/handler/auth/hybrid_auth.py | 144 | # Check if we're in KIOSK_MODE | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 320 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 550 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/resources_handler.py | 685 | # Check if content is gzipped from response headers | COMMENT |
| LOW | backend/handler/filesystem/base_handler.py | 544 | # Check if the file name matches a pattern in the excluded list. | COMMENT |
| LOW | backend/handler/filesystem/base_handler.py | 658 | # Write file atomically | COMMENT |
| LOW | backend/handler/metadata/flashpoint_handler.py | 237 | # Check if the filename is a UUID | COMMENT |
| LOW | backend/handler/metadata/hasheous_handler.py | 294 | # Check if its a 404 error | COMMENT |
| LOW | backend/handler/metadata/launchbox_handler/handler.py | 182 | # Check if game is scummvm shortname | COMMENT |
| LOW | backend/tasks/sync_push_pull_task.py | 418 | # Check if device has synced this before (intentional delete) | COMMENT |
| LOW | backend/tasks/scheduled/cleanup_orphaned_resources.py | 135 | # Check if platform exists in database | COMMENT |
| LOW | backend/tasks/scheduled/cleanup_orphaned_resources.py | 157 | # Check if ROM exists in database | COMMENT |
| LOW | backend/endpoints/auth.py | 298 | # Check if user has access to requested scopes | COMMENT |
| LOW | backend/endpoints/roms/__init__.py | 1041 | # Check if all requested ROMs were found | COMMENT |
| LOW | backend/endpoints/roms/__init__.py | 1652 | # Write file to ZIP | COMMENT |
| LOW | backend/logger/formatter.py | 121 | # Check if an explicit environment variable is set to control color behavior | COMMENT |
| LOW | backend/config/config_manager.py | 620 | # Check if the config file is mounted | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 410 | # Write file first | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 413 | # Read file | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 424 | # Write file first | COMMENT |
| LOW⚡ | backend/tests/handler/filesystem/test_base_handler.py | 576 | # Write file first | COMMENT |
| LOW | backend/utils/validation.py | 84 | # 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/audit_handler.py | 167 | # A save writes "" over a column that was null, which is no change. | COMMENT |
| HIGH | backend/handler/auth/middleware/session_middleware.py | 137 | "null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT;", | CODE |
| HIGH | …nd/handler/auth/middleware/redis_session_middleware.py | 97 | header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {sel | CODE |
| HIGH | …nd/handler/auth/middleware/redis_session_middleware.py | 111 | header_value = f"{self.session_cookie}=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; {self.se | CODE |
| HIGH | backend/endpoints/roms/__init__.py | 597 | " sized; total then comes back null, unless the rom id index is" | CODE |
| HIGH | backend/tests/handler/database/test_saves_handler.py | 783 | wins (and is implicitly not-null), so slot_not_null=True is a no-op | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/database/roms_handler.py | 1538 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3128 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3174 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3295 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3396 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3475 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3534 | CODE | |
| LOW | backend/handler/database/roms_handler.py | 3793 | CODE | |
| LOW | backend/handler/database/saves_handler.py | 216 | CODE | |
| LOW | backend/handler/database/saves_handler.py | 272 | CODE | |
| LOW | backend/handler/database/permissions_handler.py | 283 | CODE | |
| LOW | backend/endpoints/music.py | 204 | CODE | |
| LOW | backend/endpoints/music.py | 236 | CODE | |
| LOW | backend/endpoints/music.py | 268 | CODE | |
| LOW | backend/endpoints/music.py | 300 | CODE | |
| LOW | backend/endpoints/music.py | 332 | CODE | |
| LOW | backend/endpoints/music.py | 377 | CODE | |
| LOW | backend/endpoints/music.py | 417 | CODE | |
| LOW | backend/endpoints/audit_events.py | 34 | CODE | |
| LOW | backend/endpoints/saves.py | 191 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 429 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 572 | CODE | |
| LOW | backend/endpoints/roms/__init__.py | 1129 | CODE | |
| LOW | backend/tests/handler/test_scan_complete_rescan_ids.py | 48 | CODE | |
| LOW | backend/tests/handler/recommendation/test_builder.py | 25 | CODE | |
| LOW | backend/tests/handler/metadata/test_sgdb_handler.py | 204 | CODE | |
| LOW | backend/adapters/services/steamgriddb.py | 85 | CODE | |
| LOW | backend/adapters/services/steamgriddb.py | 138 | CODE | |
| LOW | backend/adapters/services/mobygames.py | 128 | CODE | |
| LOW | backend/adapters/services/mobygames.py | 141 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/activity_handler.py | 228 | async def set_active(self, entry: ActivityEntry) -> None: | CODE |
| LOW | backend/handler/recommendation/__init__.py | 5 | __all__ = [ | CODE |
| LOW | backend/handler/recommendation/feed.py | 325 | def set_cached_feed(user_id: int, limit: int, feed: Sequence[RecommendedRom]) -> None: | CODE |
| LOW | backend/handler/auth/base_handler.py | 349 | async def set_user_new_password(self, user: Any, new_password: str) -> None: | CODE |
| LOW | backend/handler/walkthrough/__init__.py | 9 | __all__ = [ | CODE |
| LOW | backend/handler/filesystem/__init__.py | 17 | __all__ = [ | CODE |
| LOW | backend/handler/filesystem/roms_handler.py | 1122 | def update_hashes(chunk: bytes | bytearray) -> None: | CODE |
| LOW | backend/handler/metadata/hltb_handler.py | 310 | def _set_search_url(self, search_url: str) -> None: | CODE |
| LOW | backend/handler/metadata/launchbox_handler/__init__.py | 3 | __all__ = [ | CODE |
| LOW | backend/tasks/tasks.py | 137 | def update_job_meta(metadata: dict[str, Any]) -> None: | CODE |
| LOW | backend/endpoints/configs.py | 330 | async def update_scan_settings(request: Request, payload: ScanSettingsPayload) -> None: | CODE |
| LOW | backend/config/config_manager.py | 1448 | def _update_config_file(self) -> None: | CODE |
| LOW | backend/config/config_manager.py | 1657 | def update_converto_settings(self, converto: ConvertoConfig) -> None: | CODE |
| LOW | …ckend/tests/handler/database/test_roms_filter_cache.py | 57 | def _set_rom_genres(rom_id: int, genres: list[str]) -> None: | CODE |
| LOW | backend/tests/handler/database/test_rom_audience.py | 32 | def set_limit(age_limit: int | None) -> None: | CODE |
| LOW | …kend/tests/handler/database/test_roms_rom_user_sort.py | 41 | def _set_rom_user_fields(rom: Rom, user: User, fields: dict[str, object]) -> None: | CODE |
| LOW⚡ | backend/tests/endpoints/test_music.py | 565 | def _set_game_genres(rom_id: int, genres: list[str]) -> None: | CODE |
| LOW | backend/utils/rate_limiter.py | 23 | def set_requests_per_second(self, requests_per_second: float) -> None: | CODE |
| LOW | backend/utils/rate_limiter.py | 75 | def set_max_concurrency(self, max_concurrency: int) -> None: | CODE |
| LOW | backend/utils/rom_patcher/__init__.py | 9 | __all__ = [ | CODE |
| LOW | backend/models/rom.py | 1425 | def _set_search_titles(_mapper: Any, _connection: Any, rom: Rom) -> None: | CODE |
| LOW | backend/models/rom.py | 1446 | def _set_min_age(_mapper: Any, _connection: Any, rom: Rom) -> None: | CODE |
| LOW | backend/models/user.py | 174 | def set_last_active(self) -> None: | CODE |
| LOW | backend/adapters/services/rom_converto.py | 397 | def _settle_output(operation: Operation, out: Path) -> None: | CODE |
| LOW | backend/adapters/services/screenscraper.py | 546 | def _update_account_limits(response: object) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .claude/skills/humanizer/SKILL.md | 374 | The patterns come from Wikipedia's ["Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), | CODE |
| HIGH | backend/utils/audio_tags.py | 167 | # Vorbis comments / FLAC pictures) was largely AI-generated against mutagen's | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/v2/components/shared/PlatformSelect.vue | 252 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/v2/lib/forms/RForm/RForm.stories.ts | 126 | <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 | 115 | placeholder: "Jane Doe", | CODE |
| LOW | frontend/src/v2/lib/forms/RSelect/RSelect.vue | 1027 | <slot name="placeholder">{{ effectivePlaceholder }}</slot> | CODE |
| LOW | frontend/src/v2/lib/primitives/RImg/RImg.vue | 125 | <slot name="placeholder" /> | CODE |
| LOW⚡ | backend/tests/handler/walkthrough/test_gamefaqs.py | 21 | '<meta name="author" content="John Doe">' | CODE |
| LOW⚡ | backend/tests/handler/walkthrough/test_gamefaqs.py | 29 | assert guide["author"] == "John Doe" | CODE |
| LOW | backend/tests/endpoints/roms/test_walkthrough.py | 58 | assert created.doc_meta.author == "John Doe" | CODE |
| LOW | backend/tests/utils/test_validation.py | 169 | validate_email("user@example.com") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/v2/views/Auth/Setup.vue | 39 | // Step 1: library + platforms | COMMENT |
| LOW⚡ | frontend/src/v2/views/Auth/Setup.vue | 54 | // Step 2: admin user | COMMENT |
| LOW⚡ | frontend/src/v2/views/Auth/Setup.vue | 63 | // Step 3: metadata (purely informational) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/v2/views/Auth/Setup.vue | 39 | // Step 1: library + platforms | COMMENT |
| LOW⚡ | frontend/src/v2/views/Auth/Setup.vue | 54 | // Step 2: admin user | COMMENT |
| LOW⚡ | frontend/src/v2/views/Auth/Setup.vue | 63 | // Step 3: metadata (purely informational) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/handler/scan_handler.py | 1323 | # Same idea: Demozoo's Overview is richer; just add the CSDb page. | COMMENT |
| LOW | backend/tasks/sync_push_pull_task.py | 325 | # The server save's hash was just set to remote_hash, so both sides hold it. | COMMENT |
| MEDIUM | backend/tests/endpoints/sockets/test_scan.py | 687 | """Test comprehensive scenarios with different combinations""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | backend/tests/scan_job_stubs.py | 125 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/BACKEND_ARCHITECTURE.md | 230 | │ ├── scan_handler.py # Library scan orchestration | CODE |