{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-91a1ecd45cdbfd9b", "name": "Possibly dead Python function: utcnow", "shortDescription": {"text": "Possibly dead Python function: utcnow"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9de0ba8f38dcbcf1", "name": "Possibly dead Python function: uuid_pk", "shortDescription": {"text": "Possibly dead Python function: uuid_pk"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3421be9c9b6c523", "name": "Possibly dead Python function: ts_now", "shortDescription": {"text": "Possibly dead Python function: ts_now"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-196b9096de7051fd", "name": "Possibly dead Python function: extract_mood_from_stored_vector", "shortDescription": {"text": "Possibly dead Python function: extract_mood_from_stored_vector"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f1f908ef411f937", "name": "Possibly dead Python function: import_artist_discography", "shortDescription": {"text": "Possibly dead Python function: import_artist_discography"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-260204922fa52af5", "name": "Possibly dead Python function: search_tracks", "shortDescription": {"text": "Possibly dead Python function: search_tracks"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e95f7e3c441f0f97", "name": "Possibly dead Python function: download_artist_discography", "shortDescription": {"text": "Possibly dead Python function: download_artist_discography"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-406f4fbaf545a283", "name": "Possibly dead Python function: identify_recording", "shortDescription": {"text": "Possibly dead Python function: identify_recording"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db9066e6c2e4025f", "name": "Possibly dead Python function: require_auth", "shortDescription": {"text": "Possibly dead Python function: require_auth"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88c089b6267445c7", "name": "Possibly dead Python function: upgrade_bad_quality_downloads", "shortDescription": {"text": "Possibly dead Python function: upgrade_bad_quality_downloads"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a218711c8cc300a", "name": "Possibly dead Python function: enforce_no_upload", "shortDescription": {"text": "Possibly dead Python function: enforce_no_upload"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50643a99b7229e15", "name": "Possibly dead Python function: retry_missing_covers", "shortDescription": {"text": "Possibly dead Python function: retry_missing_covers"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ed9a547ec7abf23", "name": "Possibly dead Python function: poll_completed_downloads", "shortDescription": {"text": "Possibly dead Python function: poll_completed_downloads"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-674b8a210f5810cc", "name": "Possibly dead Python function: retry_playlist_songs", "shortDescription": {"text": "Possibly dead Python function: retry_playlist_songs"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd1ffb5dd9f0f3d9", "name": "Possibly dead Python function: morning_playlist_readiness", "shortDescription": {"text": "Possibly dead Python function: morning_playlist_readiness"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7de5789bfa96bf8a", "name": "Possibly dead Python function: cleanup_unresolvable_playlist_songs", "shortDescription": {"text": "Possibly dead Python function: cleanup_unresolvable_playlist_songs"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eeef45a1284c57a7", "name": "Possibly dead Python function: cleanup_tmp", "shortDescription": {"text": "Possibly dead Python function: cleanup_tmp"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-216401d0c5116231", "name": "Possibly dead Python function: do_run_migrations", "shortDescription": {"text": "Possibly dead Python function: do_run_migrations"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75d39a4147fd063d", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8b1f4693e9b55ec", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9139a4916767a456", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-105ad30409493375", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-353cc4682072386c", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83d89d3dfc314b1f", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23a135109c8bba76", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea6e85caf309ddf1", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6afc0b70e51d08a9", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-714c31ca9f474ae6", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da08fa0108dff7d4", "name": "Very large file: backend/app/services/download_pipeline.py (1160 lines)", "shortDescription": {"text": "Very large file: backend/app/services/download_pipeline.py (1160 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 161 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 37 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 33 placeholder/mock markers across 17 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24f2ea4bd14badc1", "name": "Agent instruction contains unpinned remote install: CLAUDE.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: CLAUDE.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2241c04aa2b554b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/api.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/api.ts:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0056bad77ccbc0c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/PlaybackService.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/PlaybackService.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33e958d1dcbb6764", "name": "Legacy-named symbol `download_track_v2` in backend/app/api/downloads.py:177", "shortDescription": {"text": "Legacy-named symbol `download_track_v2` in backend/app/api/downloads.py:177"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8202321fbe2d553f", "name": "Commented-code block (6 lines) in backend/app/services/download_pipeline.py:953", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/download_pipeline.py:953"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba545cf2e1ad88a3", "name": "Commented-code block (5 lines) in backend/app/jobs/playlist_health.py:70", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/jobs/playlist_health.py:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed82876dc1566566", "name": "Commented-code block (7 lines) in music-app/project/tweaks-panel.jsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in music-app/project/tweaks-panel.jsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/api/downloads.py:retry_download, backend/app/api/downloads.py:cancel_download, backend/app/api/downloads.py:delete_download\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/services/essentia_svc.py:analyse_pending_songs, backend/app/services/essentia_svc.py:analyse_all_songs\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9aa3b7faac83055", "name": "FastAPI POST `dismiss_notification` without auth dependency \u2014 backend/app/api/notifications.py:59", "shortDescription": {"text": "FastAPI POST `dismiss_notification` without auth dependency \u2014 backend/app/api/notifications.py:59"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-203a55c79ab85ab9", "name": "FastAPI POST `dismiss_all_notifications` without auth dependency \u2014 backend/app/api/notifications.py:73", "shortDescription": {"text": "FastAPI POST `dismiss_all_notifications` without auth dependency \u2014 backend/app/api/notifications.py:73"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7ebda4e0e8b4c07", "name": "FastAPI POST `notification_action` without auth dependency \u2014 backend/app/api/notifications.py:88", "shortDescription": {"text": "FastAPI POST `notification_action` without auth dependency \u2014 backend/app/api/notifications.py:88"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b71b20cf535a6d64", "name": "FastAPI DELETE `delete_song` without auth dependency \u2014 backend/app/api/library.py:196", "shortDescription": {"text": "FastAPI DELETE `delete_song` without auth dependency \u2014 backend/app/api/library.py:196"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09818bcb1ceeb641", "name": "FastAPI PATCH `set_song_profile` without auth dependency \u2014 backend/app/api/library.py:221", "shortDescription": {"text": "FastAPI PATCH `set_song_profile` without auth dependency \u2014 backend/app/api/library.py:221"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-013d50a2dc55886e", "name": "FastAPI POST `download_track` without auth dependency \u2014 backend/app/api/library.py:285", "shortDescription": {"text": "FastAPI POST `download_track` without auth dependency \u2014 backend/app/api/library.py:285"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5c9c4882b3e616d", "name": "FastAPI POST `download_all_artist` without auth dependency \u2014 backend/app/api/library.py:296", "shortDescription": {"text": "FastAPI POST `download_all_artist` without auth dependency \u2014 backend/app/api/library.py:296"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed6d3d6f72158ca2", "name": "FastAPI POST `import_artist` without auth dependency \u2014 backend/app/api/library.py:364", "shortDescription": {"text": "FastAPI POST `import_artist` without auth dependency \u2014 backend/app/api/library.py:364"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89c684e48fa9cd78", "name": "FastAPI POST `add_artist` without auth dependency \u2014 backend/app/api/library.py:461", "shortDescription": {"text": "FastAPI POST `add_artist` without auth dependency \u2014 backend/app/api/library.py:461"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4fa78ffd227302a", "name": "FastAPI POST `follow_artist` without auth dependency \u2014 backend/app/api/library.py:474", "shortDescription": {"text": "FastAPI POST `follow_artist` without auth dependency \u2014 backend/app/api/library.py:474"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fe8185869983456", "name": "FastAPI DELETE `unfollow_artist` without auth dependency \u2014 backend/app/api/library.py:492", "shortDescription": {"text": "FastAPI DELETE `unfollow_artist` without auth dependency \u2014 backend/app/api/library.py:492"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1eebe02d61a4cdb1", "name": "FastAPI POST `lidarr_webhook` without auth dependency \u2014 backend/app/api/webhooks.py:10", "shortDescription": {"text": "FastAPI POST `lidarr_webhook` without auth dependency \u2014 backend/app/api/webhooks.py:10"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8130432b8758aa73", "name": "FastAPI POST `review_download` without auth dependency \u2014 backend/app/api/downloads.py:114", "shortDescription": {"text": "FastAPI POST `review_download` without auth dependency \u2014 backend/app/api/downloads.py:114"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c9280a74d70ff86", "name": "FastAPI POST `download_track_v2` without auth dependency \u2014 backend/app/api/downloads.py:176", "shortDescription": {"text": "FastAPI POST `download_track_v2` without auth dependency \u2014 backend/app/api/downloads.py:176"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ef68e5996402040", "name": "FastAPI POST `download_artist` without auth dependency \u2014 backend/app/api/downloads.py:190", "shortDescription": {"text": "FastAPI POST `download_artist` without auth dependency \u2014 backend/app/api/downloads.py:190"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a532fac6d039fa32", "name": "FastAPI POST `retry_download` without auth dependency \u2014 backend/app/api/downloads.py:210", "shortDescription": {"text": "FastAPI POST `retry_download` without auth dependency \u2014 backend/app/api/downloads.py:210"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c928fa5e0ddc3904", "name": "FastAPI POST `cancel_download` without auth dependency \u2014 backend/app/api/downloads.py:222", "shortDescription": {"text": "FastAPI POST `cancel_download` without auth dependency \u2014 backend/app/api/downloads.py:222"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7830c5c619873bb", "name": "FastAPI DELETE `delete_download` without auth dependency \u2014 backend/app/api/downloads.py:246", "shortDescription": {"text": "FastAPI DELETE `delete_download` without auth dependency \u2014 backend/app/api/downloads.py:246"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57b5db311d99df1e", "name": "FastAPI POST `rescue_song` without auth dependency \u2014 backend/app/api/deletion.py:47", "shortDescription": {"text": "FastAPI POST `rescue_song` without auth dependency \u2014 backend/app/api/deletion.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85a8fedce7515dcd", "name": "FastAPI POST `mark_for_deletion` without auth dependency \u2014 backend/app/api/deletion.py:62", "shortDescription": {"text": "FastAPI POST `mark_for_deletion` without auth dependency \u2014 backend/app/api/deletion.py:62"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5131ff498d065a5", "name": "FastAPI POST `create_playlist` without auth dependency \u2014 backend/app/api/playlists.py:72", "shortDescription": {"text": "FastAPI POST `create_playlist` without auth dependency \u2014 backend/app/api/playlists.py:72"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-125c3a42cc8e5b3d", "name": "FastAPI PUT `rename_playlist` without auth dependency \u2014 backend/app/api/playlists.py:93", "shortDescription": {"text": "FastAPI PUT `rename_playlist` without auth dependency \u2014 backend/app/api/playlists.py:93"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0850ddf6d66dc4e9", "name": "FastAPI DELETE `delete_playlist` without auth dependency \u2014 backend/app/api/playlists.py:108", "shortDescription": {"text": "FastAPI DELETE `delete_playlist` without auth dependency \u2014 backend/app/api/playlists.py:108"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27a6ba2f56c042f0", "name": "FastAPI POST `add_song` without auth dependency \u2014 backend/app/api/playlists.py:117", "shortDescription": {"text": "FastAPI POST `add_song` without auth dependency \u2014 backend/app/api/playlists.py:117"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff183b5d2e4343c1", "name": "FastAPI DELETE `remove_song` without auth dependency \u2014 backend/app/api/playlists.py:149", "shortDescription": {"text": "FastAPI DELETE `remove_song` without auth dependency \u2014 backend/app/api/playlists.py:149"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3761bdf681fa2bc", "name": "FastAPI POST `import_spotify_playlist` without auth dependency \u2014 backend/app/api/playlists.py:174", "shortDescription": {"text": "FastAPI POST `import_spotify_playlist` without auth dependency \u2014 backend/app/api/playlists.py:174"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-faae303523fbb408", "name": "FastAPI POST `create_profile` without auth dependency \u2014 backend/app/api/profiles.py:59", "shortDescription": {"text": "FastAPI POST `create_profile` without auth dependency \u2014 backend/app/api/profiles.py:59"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ab9ca481091426f", "name": "FastAPI PUT `update_profile` without auth dependency \u2014 backend/app/api/profiles.py:72", "shortDescription": {"text": "FastAPI PUT `update_profile` without auth dependency \u2014 backend/app/api/profiles.py:72"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23eacef22be36b1a", "name": "FastAPI DELETE `delete_profile` without auth dependency \u2014 backend/app/api/profiles.py:87", "shortDescription": {"text": "FastAPI DELETE `delete_profile` without auth dependency \u2014 backend/app/api/profiles.py:87"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f7964acc4778828", "name": "FastAPI POST `report_progress` without auth dependency \u2014 backend/app/api/playback.py:44", "shortDescription": {"text": "FastAPI POST `report_progress` without auth dependency \u2014 backend/app/api/playback.py:44"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25963383a1f3f1d1", "name": "FastAPI POST `skip_song` without auth dependency \u2014 backend/app/api/playback.py:75", "shortDescription": {"text": "FastAPI POST `skip_song` without auth dependency \u2014 backend/app/api/playback.py:75"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7196afbef5ebb0c", "name": "FastAPI POST `listen_through` without auth dependency \u2014 backend/app/api/playback.py:109", "shortDescription": {"text": "FastAPI POST `listen_through` without auth dependency \u2014 backend/app/api/playback.py:109"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e9137c113573db0", "name": "Dangling fetch: GET https://api.github.com/repos/sirBenhenry/musicplayer/releases/latest (mobile/app/settings.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/sirBenhenry/musicplayer/releases/latest (mobile/app/settings.tsx:59)"}, "fullDescription": {"text": "`mobile/app/settings.tsx:59` calls `GET https://api.github.com/repos/sirBenhenry/musicplayer/releases/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/sirbenhenry/musicplayer/releases/latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8a41cf73af37529", "name": "Unused endpoint: GET /api/v1/notifications", "shortDescription": {"text": "Unused endpoint: GET /api/v1/notifications"}, "fullDescription": {"text": "`backend/app/api/notifications.py` declares `GET /api/v1/notifications` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aae40fa22c6f3b8f", "name": "Unused endpoint: GET /api/v1/notifications/count", "shortDescription": {"text": "Unused endpoint: GET /api/v1/notifications/count"}, "fullDescription": {"text": "`backend/app/api/notifications.py` declares `GET /api/v1/notifications/count` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4c7cd14d1c6307f", "name": "Unused endpoint: POST /api/v1/notifications/{notif_id}/dismiss", "shortDescription": {"text": "Unused endpoint: POST /api/v1/notifications/{notif_id}/dismiss"}, "fullDescription": {"text": "`backend/app/api/notifications.py` declares `POST /api/v1/notifications/{notif_id}/dismiss` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56d7c8cd6d287699", "name": "Unused endpoint: POST /api/v1/notifications/dismiss-all", "shortDescription": {"text": "Unused endpoint: POST /api/v1/notifications/dismiss-all"}, "fullDescription": {"text": "`backend/app/api/notifications.py` declares `POST /api/v1/notifications/dismiss-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00aca0f0b1203761", "name": "Unused endpoint: POST /api/v1/notifications/{notif_id}/action", "shortDescription": {"text": "Unused endpoint: POST /api/v1/notifications/{notif_id}/action"}, "fullDescription": {"text": "`backend/app/api/notifications.py` declares `POST /api/v1/notifications/{notif_id}/action` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d04ddb18e3ae4ee3", "name": "Unused endpoint: GET /api/v1", "shortDescription": {"text": "Unused endpoint: GET /api/v1"}, "fullDescription": {"text": "`backend/app/api/history.py` declares `GET /api/v1` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0457749c692538f8", "name": "Unused endpoint: POST /api/v1/{history_id}/redownload", "shortDescription": {"text": "Unused endpoint: POST /api/v1/{history_id}/redownload"}, "fullDescription": {"text": "`backend/app/api/history.py` declares `POST /api/v1/{history_id}/redownload` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5e8e146b74ffe9a", "name": "Unused endpoint: GET /stream/{navidrome_id}", "shortDescription": {"text": "Unused endpoint: GET /stream/{navidrome_id}"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /stream/{navidrome_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1df4ae3bf43e7d15", "name": "Unused endpoint: GET /cover/{navidrome_id}", "shortDescription": {"text": "Unused endpoint: GET /cover/{navidrome_id}"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /cover/{navidrome_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b66eb07d40f48c25", "name": "Unused endpoint: GET /songs", "shortDescription": {"text": "Unused endpoint: GET /songs"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /songs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c7f3150b937ea2c", "name": "Unused endpoint: GET /songs/stamp", "shortDescription": {"text": "Unused endpoint: GET /songs/stamp"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /songs/stamp` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-872ee55c8941c3ac", "name": "Unused endpoint: GET /songs/{song_id}", "shortDescription": {"text": "Unused endpoint: GET /songs/{song_id}"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /songs/{song_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9025a9c10ed0746d", "name": "Unused endpoint: DELETE /songs/{song_id}", "shortDescription": {"text": "Unused endpoint: DELETE /songs/{song_id}"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `DELETE /songs/{song_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-280a6dbad0d94c60", "name": "Unused endpoint: PATCH /songs/{song_id}/profile", "shortDescription": {"text": "Unused endpoint: PATCH /songs/{song_id}/profile"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `PATCH /songs/{song_id}/profile` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90b98c84863b5e57", "name": "Unused endpoint: GET /tracks/search", "shortDescription": {"text": "Unused endpoint: GET /tracks/search"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /tracks/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0fc83e0843d63ac5", "name": "Unused endpoint: POST /tracks/download", "shortDescription": {"text": "Unused endpoint: POST /tracks/download"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `POST /tracks/download` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1271f2406d93c0b9", "name": "Unused endpoint: POST /artists/{artist_id}/download-all", "shortDescription": {"text": "Unused endpoint: POST /artists/{artist_id}/download-all"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `POST /artists/{artist_id}/download-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b3b67b53a87edd8", "name": "Unused endpoint: GET /artists/search", "shortDescription": {"text": "Unused endpoint: GET /artists/search"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /artists/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27c132f29e389423", "name": "Unused endpoint: POST /artists/import", "shortDescription": {"text": "Unused endpoint: POST /artists/import"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `POST /artists/import` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68e2549afab6a507", "name": "Unused endpoint: GET /artists", "shortDescription": {"text": "Unused endpoint: GET /artists"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /artists` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8404059d4ca944ce", "name": "Unused endpoint: GET /artists/{artist_id}", "shortDescription": {"text": "Unused endpoint: GET /artists/{artist_id}"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /artists/{artist_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85ac1838590cdc23", "name": "Unused endpoint: POST /artists/{artist_id}/add", "shortDescription": {"text": "Unused endpoint: POST /artists/{artist_id}/add"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `POST /artists/{artist_id}/add` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a746676864e9bcc2", "name": "Unused endpoint: POST /artists/{artist_id}/follow", "shortDescription": {"text": "Unused endpoint: POST /artists/{artist_id}/follow"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `POST /artists/{artist_id}/follow` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b1d5bfbb0a6b84e", "name": "Unused endpoint: DELETE /artists/{artist_id}/follow", "shortDescription": {"text": "Unused endpoint: DELETE /artists/{artist_id}/follow"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `DELETE /artists/{artist_id}/follow` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-186692de65e847fc", "name": "Unused endpoint: GET /albums", "shortDescription": {"text": "Unused endpoint: GET /albums"}, "fullDescription": {"text": "`backend/app/api/library.py` declares `GET /albums` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72530ed44ad5a45a", "name": "Unused endpoint: POST /api/v1/auth/login", "shortDescription": {"text": "Unused endpoint: POST /api/v1/auth/login"}, "fullDescription": {"text": "`backend/app/api/auth.py` declares `POST /api/v1/auth/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20be5e1997003150", "name": "Unused endpoint: GET /api/v1/auto-radio", "shortDescription": {"text": "Unused endpoint: GET /api/v1/auto-radio"}, "fullDescription": {"text": "`backend/app/api/queue.py` declares `GET /api/v1/auto-radio` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-454a4ba17c367757", "name": "Unused endpoint: GET /api/v1/auto-radio-batch", "shortDescription": {"text": "Unused endpoint: GET /api/v1/auto-radio-batch"}, "fullDescription": {"text": "`backend/app/api/queue.py` declares `GET /api/v1/auto-radio-batch` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6bea99fd6b49b774", "name": "Unused endpoint: POST /api/v1/lidarr", "shortDescription": {"text": "Unused endpoint: POST /api/v1/lidarr"}, "fullDescription": {"text": "`backend/app/api/webhooks.py` declares `POST /api/v1/lidarr` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97b004f94932867c", "name": "Unused endpoint: GET /api/v1/downloads", "shortDescription": {"text": "Unused endpoint: GET /api/v1/downloads"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `GET /api/v1/downloads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c896d8e6dfe37696", "name": "Unused endpoint: GET /api/v1/downloads/failed", "shortDescription": {"text": "Unused endpoint: GET /api/v1/downloads/failed"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `GET /api/v1/downloads/failed` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99e6cc7bc11cc883", "name": "Unused endpoint: GET /api/v1/downloads/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /api/v1/downloads/{job_id}"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `GET /api/v1/downloads/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16aae86124ddc14a", "name": "Unused endpoint: GET /api/v1/downloads/{job_id}/pipeline", "shortDescription": {"text": "Unused endpoint: GET /api/v1/downloads/{job_id}/pipeline"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `GET /api/v1/downloads/{job_id}/pipeline` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f54847497d66a5c", "name": "Unused endpoint: POST /api/v1/downloads/{job_id}/review", "shortDescription": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/review"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `POST /api/v1/downloads/{job_id}/review` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db632702fca74abd", "name": "Unused endpoint: POST /api/v1/downloads/track", "shortDescription": {"text": "Unused endpoint: POST /api/v1/downloads/track"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `POST /api/v1/downloads/track` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ac8a0f89f91d0bd", "name": "Unused endpoint: POST /api/v1/downloads/artist", "shortDescription": {"text": "Unused endpoint: POST /api/v1/downloads/artist"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `POST /api/v1/downloads/artist` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba33b6996a8a0310", "name": "Unused endpoint: POST /api/v1/downloads/{job_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/retry"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `POST /api/v1/downloads/{job_id}/retry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1008bcc4c0fa219e", "name": "Unused endpoint: POST /api/v1/downloads/{job_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/cancel"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `POST /api/v1/downloads/{job_id}/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-315efc90864fde28", "name": "Unused endpoint: DELETE /api/v1/downloads/{job_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/v1/downloads/{job_id}"}, "fullDescription": {"text": "`backend/app/api/downloads.py` declares `DELETE /api/v1/downloads/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c20611e6d8a315f9", "name": "Unused endpoint: GET /api/v1/import-guide", "shortDescription": {"text": "Unused endpoint: GET /api/v1/import-guide"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `GET /api/v1/import-guide` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf2221b1db605098", "name": "Unused endpoint: GET /api/v1/system-status", "shortDescription": {"text": "Unused endpoint: GET /api/v1/system-status"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `GET /api/v1/system-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4dea1f7da7d86552", "name": "Unused endpoint: POST /api/v1/sync", "shortDescription": {"text": "Unused endpoint: POST /api/v1/sync"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7803216d4855a98", "name": "Unused endpoint: POST /api/v1/analyse", "shortDescription": {"text": "Unused endpoint: POST /api/v1/analyse"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/analyse` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60ea3d652b970892", "name": "Unused endpoint: POST /api/v1/analyse-all", "shortDescription": {"text": "Unused endpoint: POST /api/v1/analyse-all"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/analyse-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17669df0f2e4de83", "name": "Unused endpoint: POST /api/v1/analyse-resume", "shortDescription": {"text": "Unused endpoint: POST /api/v1/analyse-resume"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/analyse-resume` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c955bf2a40e6770", "name": "Unused endpoint: GET /api/v1/analysis-status", "shortDescription": {"text": "Unused endpoint: GET /api/v1/analysis-status"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `GET /api/v1/analysis-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9e2d69601def2ea", "name": "Unused endpoint: POST /api/v1/analysis-retry-failed", "shortDescription": {"text": "Unused endpoint: POST /api/v1/analysis-retry-failed"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/analysis-retry-failed` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10f0f6fb41b0389f", "name": "Unused endpoint: POST /api/v1/retry-downloads", "shortDescription": {"text": "Unused endpoint: POST /api/v1/retry-downloads"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/retry-downloads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a9c6af00e8496f8", "name": "Unused endpoint: POST /api/v1/generate", "shortDescription": {"text": "Unused endpoint: POST /api/v1/generate"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a14740bdb50b1e64", "name": "Unused endpoint: POST /api/v1/fetch-covers", "shortDescription": {"text": "Unused endpoint: POST /api/v1/fetch-covers"}, "fullDescription": {"text": "`backend/app/api/admin.py` declares `POST /api/v1/fetch-covers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19735"}, "properties": {"repository": "sirBenhenry/musicplayer", "repoUrl": "https://github.com/sirBenhenry/musicplayer", "branch": "main"}, "results": [{"ruleId": "scanner-91a1ecd45cdbfd9b", "level": "note", "message": {"text": "Possibly dead Python function: utcnow"}, "properties": {"repobilityId": "3764ddf6d1326a6d", "scanner": "scanner-primary", "fingerprint": "91a1ecd45cdbfd9b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/models/base.py:8"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9de0ba8f38dcbcf1", "level": "note", "message": {"text": "Possibly dead Python function: uuid_pk"}, "properties": {"repobilityId": "5894bad0d78770d0", "scanner": "scanner-primary", "fingerprint": "9de0ba8f38dcbcf1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/models/base.py:12"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a3421be9c9b6c523", "level": "note", "message": {"text": "Possibly dead Python function: ts_now"}, "properties": {"repobilityId": "3ac210289767db54", "scanner": "scanner-primary", "fingerprint": "a3421be9c9b6c523", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/models/base.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-196b9096de7051fd", "level": "note", "message": {"text": "Possibly dead Python function: extract_mood_from_stored_vector"}, "properties": {"repobilityId": "86b1713e5c507ece", "scanner": "scanner-primary", "fingerprint": "196b9096de7051fd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/essentia_svc.py:228"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7f1f908ef411f937", "level": "note", "message": {"text": "Possibly dead Python function: import_artist_discography"}, "properties": {"repobilityId": "78ef742300c1484d", "scanner": "scanner-primary", "fingerprint": "7f1f908ef411f937", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/discography_importer.py:10"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-260204922fa52af5", "level": "note", "message": {"text": "Possibly dead Python function: search_tracks"}, "properties": {"repobilityId": "e19fb2945ecead04", "scanner": "scanner-primary", "fingerprint": "260204922fa52af5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/lidarr.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e95f7e3c441f0f97", "level": "note", "message": {"text": "Possibly dead Python function: download_artist_discography"}, "properties": {"repobilityId": "623372a2848c24e8", "scanner": "scanner-primary", "fingerprint": "e95f7e3c441f0f97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/lidarr.py:116"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-406f4fbaf545a283", "level": "note", "message": {"text": "Possibly dead Python function: identify_recording"}, "properties": {"repobilityId": "9d4ae26610fb5152", "scanner": "scanner-primary", "fingerprint": "406f4fbaf545a283", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/fingerprint_svc.py:66"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db9066e6c2e4025f", "level": "note", "message": {"text": "Possibly dead Python function: require_auth"}, "properties": {"repobilityId": "d7855475dea79341", "scanner": "scanner-primary", "fingerprint": "db9066e6c2e4025f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/core/auth.py:33"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-88c089b6267445c7", "level": "note", "message": {"text": "Possibly dead Python function: upgrade_bad_quality_downloads"}, "properties": {"repobilityId": "b7defc04358e2806", "scanner": "scanner-primary", "fingerprint": "88c089b6267445c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/download_retry.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a218711c8cc300a", "level": "note", "message": {"text": "Possibly dead Python function: enforce_no_upload"}, "properties": {"repobilityId": "f4055f9c6a169c0b", "scanner": "scanner-primary", "fingerprint": "6a218711c8cc300a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/qbit_watchdog.py:37"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50643a99b7229e15", "level": "note", "message": {"text": "Possibly dead Python function: retry_missing_covers"}, "properties": {"repobilityId": "f87190da1e0cfaae", "scanner": "scanner-primary", "fingerprint": "50643a99b7229e15", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/cover_art_job.py:206"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ed9a547ec7abf23", "level": "note", "message": {"text": "Possibly dead Python function: poll_completed_downloads"}, "properties": {"repobilityId": "9005e2ee94e91b95", "scanner": "scanner-primary", "fingerprint": "5ed9a547ec7abf23", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/download_poller.py:173"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-674b8a210f5810cc", "level": "note", "message": {"text": "Possibly dead Python function: retry_playlist_songs"}, "properties": {"repobilityId": "f25e63155769b28d", "scanner": "scanner-primary", "fingerprint": "674b8a210f5810cc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/playlist_health.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd1ffb5dd9f0f3d9", "level": "note", "message": {"text": "Possibly dead Python function: morning_playlist_readiness"}, "properties": {"repobilityId": "463f578051ece6ed", "scanner": "scanner-primary", "fingerprint": "dd1ffb5dd9f0f3d9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/playlist_health.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7de5789bfa96bf8a", "level": "note", "message": {"text": "Possibly dead Python function: cleanup_unresolvable_playlist_songs"}, "properties": {"repobilityId": "fe2f8961dc56f4b1", "scanner": "scanner-primary", "fingerprint": "7de5789bfa96bf8a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/playlist_health.py:158"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eeef45a1284c57a7", "level": "note", "message": {"text": "Possibly dead Python function: cleanup_tmp"}, "properties": {"repobilityId": "13832b2a4fc02541", "scanner": "scanner-primary", "fingerprint": "eeef45a1284c57a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/janitor.py:24"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-216401d0c5116231", "level": "note", "message": {"text": "Possibly dead Python function: do_run_migrations"}, "properties": {"repobilityId": "087acb17722cfd2f", "scanner": "scanner-primary", "fingerprint": "216401d0c5116231", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/env.py:41"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75d39a4147fd063d", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "75d39a4147fd063d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0004_user_playlists.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8b1f4693e9b55ec", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "c8b1f4693e9b55ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0004_user_playlists.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9139a4916767a456", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "9139a4916767a456", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0014_song_mb_recording_id.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-105ad30409493375", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "105ad30409493375", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0014_song_mb_recording_id.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-353cc4682072386c", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "353cc4682072386c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0002_download_jobs_extend.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83d89d3dfc314b1f", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "83d89d3dfc314b1f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0002_download_jobs_extend.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23a135109c8bba76", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "23a135109c8bba76", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0001_initial.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea6e85caf309ddf1", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "ea6e85caf309ddf1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0001_initial.py:164"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6afc0b70e51d08a9", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "6afc0b70e51d08a9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0010_mood_features.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-714c31ca9f474ae6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "f614a1e41f331b37", "scanner": "scanner-primary", "fingerprint": "714c31ca9f474ae6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-da08fa0108dff7d4", "level": "note", "message": {"text": "Very large file: backend/app/services/download_pipeline.py (1160 lines)"}, "properties": {"repobilityId": "6c4e1672f6d2518a", "scanner": "scanner-primary", "fingerprint": "da08fa0108dff7d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "84456ce7fd0b2de9", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "ec569fcd241feda4", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c16d5dc900a6d7d0", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "66b68fff4981ff12", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "d03c8739d4b82bcc", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "0b174bf298ed9e19", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "06a4b89ca1ff9812", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "0f80776c5b7d3bce", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "0d713edffdd222a9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-24f2ea4bd14badc1", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: CLAUDE.md"}, "properties": {"repobilityId": "0f6049734704e537", "scanner": "scanner-primary", "fingerprint": "24f2ea4bd14badc1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-2241c04aa2b554b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/api.ts:151"}, "properties": {"repobilityId": "79b3fce6af6dd4da", "scanner": "scanner-primary", "fingerprint": "2241c04aa2b554b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0056bad77ccbc0c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile/lib/PlaybackService.ts:20"}, "properties": {"repobilityId": "d981f41f7a234f4d", "scanner": "scanner-primary", "fingerprint": "0056bad77ccbc0c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33e958d1dcbb6764", "level": "note", "message": {"text": "Legacy-named symbol `download_track_v2` in backend/app/api/downloads.py:177"}, "properties": {"repobilityId": "abb89640f640552a", "scanner": "scanner-primary", "fingerprint": "33e958d1dcbb6764", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8202321fbe2d553f", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/download_pipeline.py:953"}, "properties": {"repobilityId": "699bcacd431f3fa9", "scanner": "scanner-primary", "fingerprint": "8202321fbe2d553f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba545cf2e1ad88a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/jobs/playlist_health.py:70"}, "properties": {"repobilityId": "9c2561175cea51fd", "scanner": "scanner-primary", "fingerprint": "ba545cf2e1ad88a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed82876dc1566566", "level": "none", "message": {"text": "Commented-code block (7 lines) in music-app/project/tweaks-panel.jsx:12"}, "properties": {"repobilityId": "ac4aae70db95fc87", "scanner": "scanner-primary", "fingerprint": "ed82876dc1566566", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "2aca92c2ad9a48e2", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "dcc9557ed3379749", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a33c0db77086654e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b02553dd1e48517e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7ce9873e7bb1fe36", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "0f318698b1ef7dc7", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-b9aa3b7faac83055", "level": "error", "message": {"text": "FastAPI POST `dismiss_notification` without auth dependency \u2014 backend/app/api/notifications.py:59"}, "properties": {"repobilityId": "01cd663a80d9f7e4", "scanner": "scanner-primary", "fingerprint": "b9aa3b7faac83055", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/notifications.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-203a55c79ab85ab9", "level": "error", "message": {"text": "FastAPI POST `dismiss_all_notifications` without auth dependency \u2014 backend/app/api/notifications.py:73"}, "properties": {"repobilityId": "74180ed96b8b40f7", "scanner": "scanner-primary", "fingerprint": "203a55c79ab85ab9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/notifications.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-a7ebda4e0e8b4c07", "level": "error", "message": {"text": "FastAPI POST `notification_action` without auth dependency \u2014 backend/app/api/notifications.py:88"}, "properties": {"repobilityId": "732096de3a934724", "scanner": "scanner-primary", "fingerprint": "a7ebda4e0e8b4c07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/notifications.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-b71b20cf535a6d64", "level": "error", "message": {"text": "FastAPI DELETE `delete_song` without auth dependency \u2014 backend/app/api/library.py:196"}, "properties": {"repobilityId": "f35228f648185648", "scanner": "scanner-primary", "fingerprint": "b71b20cf535a6d64", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 196}}}]}, {"ruleId": "scanner-09818bcb1ceeb641", "level": "error", "message": {"text": "FastAPI PATCH `set_song_profile` without auth dependency \u2014 backend/app/api/library.py:221"}, "properties": {"repobilityId": "a8384114afddd8e5", "scanner": "scanner-primary", "fingerprint": "09818bcb1ceeb641", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-013d50a2dc55886e", "level": "error", "message": {"text": "FastAPI POST `download_track` without auth dependency \u2014 backend/app/api/library.py:285"}, "properties": {"repobilityId": "bf086972f567dd1f", "scanner": "scanner-primary", "fingerprint": "013d50a2dc55886e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 285}}}]}, {"ruleId": "scanner-d5c9c4882b3e616d", "level": "error", "message": {"text": "FastAPI POST `download_all_artist` without auth dependency \u2014 backend/app/api/library.py:296"}, "properties": {"repobilityId": "fed8049386177e8a", "scanner": "scanner-primary", "fingerprint": "d5c9c4882b3e616d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 296}}}]}, {"ruleId": "scanner-ed6d3d6f72158ca2", "level": "error", "message": {"text": "FastAPI POST `import_artist` without auth dependency \u2014 backend/app/api/library.py:364"}, "properties": {"repobilityId": "d54984c269283212", "scanner": "scanner-primary", "fingerprint": "ed6d3d6f72158ca2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 364}}}]}, {"ruleId": "scanner-89c684e48fa9cd78", "level": "error", "message": {"text": "FastAPI POST `add_artist` without auth dependency \u2014 backend/app/api/library.py:461"}, "properties": {"repobilityId": "1a62b9a1cfd67f7f", "scanner": "scanner-primary", "fingerprint": "89c684e48fa9cd78", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 461}}}]}, {"ruleId": "scanner-e4fa78ffd227302a", "level": "error", "message": {"text": "FastAPI POST `follow_artist` without auth dependency \u2014 backend/app/api/library.py:474"}, "properties": {"repobilityId": "d01bf4cb050206ed", "scanner": "scanner-primary", "fingerprint": "e4fa78ffd227302a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 474}}}]}, {"ruleId": "scanner-3fe8185869983456", "level": "error", "message": {"text": "FastAPI DELETE `unfollow_artist` without auth dependency \u2014 backend/app/api/library.py:492"}, "properties": {"repobilityId": "88c3d093a61833e9", "scanner": "scanner-primary", "fingerprint": "3fe8185869983456", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/library.py"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-1eebe02d61a4cdb1", "level": "error", "message": {"text": "FastAPI POST `lidarr_webhook` without auth dependency \u2014 backend/app/api/webhooks.py:10"}, "properties": {"repobilityId": "f653b29963fcd80a", "scanner": "scanner-primary", "fingerprint": "1eebe02d61a4cdb1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/webhooks.py"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-8130432b8758aa73", "level": "error", "message": {"text": "FastAPI POST `review_download` without auth dependency \u2014 backend/app/api/downloads.py:114"}, "properties": {"repobilityId": "0eb010fc3949d742", "scanner": "scanner-primary", "fingerprint": "8130432b8758aa73", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-5c9280a74d70ff86", "level": "error", "message": {"text": "FastAPI POST `download_track_v2` without auth dependency \u2014 backend/app/api/downloads.py:176"}, "properties": {"repobilityId": "e7868916bdf46616", "scanner": "scanner-primary", "fingerprint": "5c9280a74d70ff86", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 176}}}]}, {"ruleId": "scanner-9ef68e5996402040", "level": "error", "message": {"text": "FastAPI POST `download_artist` without auth dependency \u2014 backend/app/api/downloads.py:190"}, "properties": {"repobilityId": "095c87cb38c3072e", "scanner": "scanner-primary", "fingerprint": "9ef68e5996402040", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-a532fac6d039fa32", "level": "error", "message": {"text": "FastAPI POST `retry_download` without auth dependency \u2014 backend/app/api/downloads.py:210"}, "properties": {"repobilityId": "bb912d0b22e6f7c5", "scanner": "scanner-primary", "fingerprint": "a532fac6d039fa32", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-c928fa5e0ddc3904", "level": "error", "message": {"text": "FastAPI POST `cancel_download` without auth dependency \u2014 backend/app/api/downloads.py:222"}, "properties": {"repobilityId": "93372199f7fc5728", "scanner": "scanner-primary", "fingerprint": "c928fa5e0ddc3904", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 222}}}]}, {"ruleId": "scanner-b7830c5c619873bb", "level": "error", "message": {"text": "FastAPI DELETE `delete_download` without auth dependency \u2014 backend/app/api/downloads.py:246"}, "properties": {"repobilityId": "563f0270cda9ea20", "scanner": "scanner-primary", "fingerprint": "b7830c5c619873bb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/downloads.py"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-57b5db311d99df1e", "level": "error", "message": {"text": "FastAPI POST `rescue_song` without auth dependency \u2014 backend/app/api/deletion.py:47"}, "properties": {"repobilityId": "5906a86edd69ed97", "scanner": "scanner-primary", "fingerprint": "57b5db311d99df1e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/deletion.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-85a8fedce7515dcd", "level": "error", "message": {"text": "FastAPI POST `mark_for_deletion` without auth dependency \u2014 backend/app/api/deletion.py:62"}, "properties": {"repobilityId": "1bf797f07cb55990", "scanner": "scanner-primary", "fingerprint": "85a8fedce7515dcd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/deletion.py"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-f5131ff498d065a5", "level": "error", "message": {"text": "FastAPI POST `create_playlist` without auth dependency \u2014 backend/app/api/playlists.py:72"}, "properties": {"repobilityId": "02ff1bdbaaca5b11", "scanner": "scanner-primary", "fingerprint": "f5131ff498d065a5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-125c3a42cc8e5b3d", "level": "error", "message": {"text": "FastAPI PUT `rename_playlist` without auth dependency \u2014 backend/app/api/playlists.py:93"}, "properties": {"repobilityId": "53edddfa804cdcca", "scanner": "scanner-primary", "fingerprint": "125c3a42cc8e5b3d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-0850ddf6d66dc4e9", "level": "error", "message": {"text": "FastAPI DELETE `delete_playlist` without auth dependency \u2014 backend/app/api/playlists.py:108"}, "properties": {"repobilityId": "a9f3f17194c7d400", "scanner": "scanner-primary", "fingerprint": "0850ddf6d66dc4e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-27a6ba2f56c042f0", "level": "error", "message": {"text": "FastAPI POST `add_song` without auth dependency \u2014 backend/app/api/playlists.py:117"}, "properties": {"repobilityId": "e65c8f138af79509", "scanner": "scanner-primary", "fingerprint": "27a6ba2f56c042f0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-ff183b5d2e4343c1", "level": "error", "message": {"text": "FastAPI DELETE `remove_song` without auth dependency \u2014 backend/app/api/playlists.py:149"}, "properties": {"repobilityId": "a2e3cc4835630de1", "scanner": "scanner-primary", "fingerprint": "ff183b5d2e4343c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-a3761bdf681fa2bc", "level": "error", "message": {"text": "FastAPI POST `import_spotify_playlist` without auth dependency \u2014 backend/app/api/playlists.py:174"}, "properties": {"repobilityId": "c69f6bb8a28adc03", "scanner": "scanner-primary", "fingerprint": "a3761bdf681fa2bc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playlists.py"}, "region": {"startLine": 174}}}]}, {"ruleId": "scanner-faae303523fbb408", "level": "error", "message": {"text": "FastAPI POST `create_profile` without auth dependency \u2014 backend/app/api/profiles.py:59"}, "properties": {"repobilityId": "dfb1acf7a322bb56", "scanner": "scanner-primary", "fingerprint": "faae303523fbb408", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/profiles.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-6ab9ca481091426f", "level": "error", "message": {"text": "FastAPI PUT `update_profile` without auth dependency \u2014 backend/app/api/profiles.py:72"}, "properties": {"repobilityId": "5c4b630dd1c4d909", "scanner": "scanner-primary", "fingerprint": "6ab9ca481091426f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/profiles.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-23eacef22be36b1a", "level": "error", "message": {"text": "FastAPI DELETE `delete_profile` without auth dependency \u2014 backend/app/api/profiles.py:87"}, "properties": {"repobilityId": "68d5d5eb87e93993", "scanner": "scanner-primary", "fingerprint": "23eacef22be36b1a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/profiles.py"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-5f7964acc4778828", "level": "error", "message": {"text": "FastAPI POST `report_progress` without auth dependency \u2014 backend/app/api/playback.py:44"}, "properties": {"repobilityId": "6e7e712941243451", "scanner": "scanner-primary", "fingerprint": "5f7964acc4778828", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playback.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-25963383a1f3f1d1", "level": "error", "message": {"text": "FastAPI POST `skip_song` without auth dependency \u2014 backend/app/api/playback.py:75"}, "properties": {"repobilityId": "676f96b5e68f8555", "scanner": "scanner-primary", "fingerprint": "25963383a1f3f1d1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playback.py"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-f7196afbef5ebb0c", "level": "error", "message": {"text": "FastAPI POST `listen_through` without auth dependency \u2014 backend/app/api/playback.py:109"}, "properties": {"repobilityId": "6d45d41799a4f236", "scanner": "scanner-primary", "fingerprint": "f7196afbef5ebb0c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/playback.py"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-8e9137c113573db0", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/sirBenhenry/musicplayer/releases/latest (mobile/app/settings.tsx:59)"}, "properties": {"repobilityId": "0a69500436e14df4", "scanner": "scanner-primary", "fingerprint": "8e9137c113573db0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8a41cf73af37529", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/notifications"}, "properties": {"repobilityId": "b43a55ebe358ff4c", "scanner": "scanner-primary", "fingerprint": "e8a41cf73af37529", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aae40fa22c6f3b8f", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/notifications/count"}, "properties": {"repobilityId": "48fc613bc84ed73a", "scanner": "scanner-primary", "fingerprint": "aae40fa22c6f3b8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4c7cd14d1c6307f", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/notifications/{notif_id}/dismiss"}, "properties": {"repobilityId": "cb9f78e1201b360d", "scanner": "scanner-primary", "fingerprint": "e4c7cd14d1c6307f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56d7c8cd6d287699", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/notifications/dismiss-all"}, "properties": {"repobilityId": "ef19453cf6f1421b", "scanner": "scanner-primary", "fingerprint": "56d7c8cd6d287699", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00aca0f0b1203761", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/notifications/{notif_id}/action"}, "properties": {"repobilityId": "bb09353472826332", "scanner": "scanner-primary", "fingerprint": "00aca0f0b1203761", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d04ddb18e3ae4ee3", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1"}, "properties": {"repobilityId": "1b09037b700e6a56", "scanner": "scanner-primary", "fingerprint": "d04ddb18e3ae4ee3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0457749c692538f8", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/{history_id}/redownload"}, "properties": {"repobilityId": "617973dc6a7e49d2", "scanner": "scanner-primary", "fingerprint": "0457749c692538f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5e8e146b74ffe9a", "level": "note", "message": {"text": "Unused endpoint: GET /stream/{navidrome_id}"}, "properties": {"repobilityId": "3821bd48246ba0d6", "scanner": "scanner-primary", "fingerprint": "c5e8e146b74ffe9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1df4ae3bf43e7d15", "level": "note", "message": {"text": "Unused endpoint: GET /cover/{navidrome_id}"}, "properties": {"repobilityId": "a787fe141770a6d6", "scanner": "scanner-primary", "fingerprint": "1df4ae3bf43e7d15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b66eb07d40f48c25", "level": "note", "message": {"text": "Unused endpoint: GET /songs"}, "properties": {"repobilityId": "afde442a00f58479", "scanner": "scanner-primary", "fingerprint": "b66eb07d40f48c25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c7f3150b937ea2c", "level": "note", "message": {"text": "Unused endpoint: GET /songs/stamp"}, "properties": {"repobilityId": "d8011728fb2b60d3", "scanner": "scanner-primary", "fingerprint": "6c7f3150b937ea2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-872ee55c8941c3ac", "level": "note", "message": {"text": "Unused endpoint: GET /songs/{song_id}"}, "properties": {"repobilityId": "df84b8d78732ac2d", "scanner": "scanner-primary", "fingerprint": "872ee55c8941c3ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9025a9c10ed0746d", "level": "note", "message": {"text": "Unused endpoint: DELETE /songs/{song_id}"}, "properties": {"repobilityId": "c0603004844aec93", "scanner": "scanner-primary", "fingerprint": "9025a9c10ed0746d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-280a6dbad0d94c60", "level": "note", "message": {"text": "Unused endpoint: PATCH /songs/{song_id}/profile"}, "properties": {"repobilityId": "065a48e9f1c07ea6", "scanner": "scanner-primary", "fingerprint": "280a6dbad0d94c60", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90b98c84863b5e57", "level": "note", "message": {"text": "Unused endpoint: GET /tracks/search"}, "properties": {"repobilityId": "d9cefdf8f39490dd", "scanner": "scanner-primary", "fingerprint": "90b98c84863b5e57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0fc83e0843d63ac5", "level": "note", "message": {"text": "Unused endpoint: POST /tracks/download"}, "properties": {"repobilityId": "b6f26eb7ada4cf7d", "scanner": "scanner-primary", "fingerprint": "0fc83e0843d63ac5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1271f2406d93c0b9", "level": "note", "message": {"text": "Unused endpoint: POST /artists/{artist_id}/download-all"}, "properties": {"repobilityId": "7276d427b18a4ee0", "scanner": "scanner-primary", "fingerprint": "1271f2406d93c0b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b3b67b53a87edd8", "level": "note", "message": {"text": "Unused endpoint: GET /artists/search"}, "properties": {"repobilityId": "7633b36a362527c9", "scanner": "scanner-primary", "fingerprint": "5b3b67b53a87edd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-27c132f29e389423", "level": "note", "message": {"text": "Unused endpoint: POST /artists/import"}, "properties": {"repobilityId": "ccd1283e47501bb8", "scanner": "scanner-primary", "fingerprint": "27c132f29e389423", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68e2549afab6a507", "level": "note", "message": {"text": "Unused endpoint: GET /artists"}, "properties": {"repobilityId": "8fd416a58af6f14a", "scanner": "scanner-primary", "fingerprint": "68e2549afab6a507", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8404059d4ca944ce", "level": "note", "message": {"text": "Unused endpoint: GET /artists/{artist_id}"}, "properties": {"repobilityId": "1d62f8947c94c00d", "scanner": "scanner-primary", "fingerprint": "8404059d4ca944ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85ac1838590cdc23", "level": "note", "message": {"text": "Unused endpoint: POST /artists/{artist_id}/add"}, "properties": {"repobilityId": "25829d50db8c8139", "scanner": "scanner-primary", "fingerprint": "85ac1838590cdc23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a746676864e9bcc2", "level": "note", "message": {"text": "Unused endpoint: POST /artists/{artist_id}/follow"}, "properties": {"repobilityId": "1b91cb8eece9f779", "scanner": "scanner-primary", "fingerprint": "a746676864e9bcc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b1d5bfbb0a6b84e", "level": "note", "message": {"text": "Unused endpoint: DELETE /artists/{artist_id}/follow"}, "properties": {"repobilityId": "afbd44b04add2e94", "scanner": "scanner-primary", "fingerprint": "4b1d5bfbb0a6b84e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-186692de65e847fc", "level": "note", "message": {"text": "Unused endpoint: GET /albums"}, "properties": {"repobilityId": "289da93db9b32aab", "scanner": "scanner-primary", "fingerprint": "186692de65e847fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72530ed44ad5a45a", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/auth/login"}, "properties": {"repobilityId": "4791f3ba023e478d", "scanner": "scanner-primary", "fingerprint": "72530ed44ad5a45a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20be5e1997003150", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/auto-radio"}, "properties": {"repobilityId": "ba5b661825e31063", "scanner": "scanner-primary", "fingerprint": "20be5e1997003150", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-454a4ba17c367757", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/auto-radio-batch"}, "properties": {"repobilityId": "37cbb405bc612a7f", "scanner": "scanner-primary", "fingerprint": "454a4ba17c367757", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bea99fd6b49b774", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/lidarr"}, "properties": {"repobilityId": "6eb1fc6f7f6ab0b5", "scanner": "scanner-primary", "fingerprint": "6bea99fd6b49b774", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97b004f94932867c", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/downloads"}, "properties": {"repobilityId": "3f71610e5ac1294d", "scanner": "scanner-primary", "fingerprint": "97b004f94932867c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c896d8e6dfe37696", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/downloads/failed"}, "properties": {"repobilityId": "316a6dd0e61ce288", "scanner": "scanner-primary", "fingerprint": "c896d8e6dfe37696", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99e6cc7bc11cc883", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/downloads/{job_id}"}, "properties": {"repobilityId": "134fbb6518d23867", "scanner": "scanner-primary", "fingerprint": "99e6cc7bc11cc883", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16aae86124ddc14a", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/downloads/{job_id}/pipeline"}, "properties": {"repobilityId": "b10fb2693ba01b39", "scanner": "scanner-primary", "fingerprint": "16aae86124ddc14a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f54847497d66a5c", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/review"}, "properties": {"repobilityId": "f3e7f2d46fc450b0", "scanner": "scanner-primary", "fingerprint": "3f54847497d66a5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db632702fca74abd", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/downloads/track"}, "properties": {"repobilityId": "8b7dff04f336bebf", "scanner": "scanner-primary", "fingerprint": "db632702fca74abd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ac8a0f89f91d0bd", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/downloads/artist"}, "properties": {"repobilityId": "76b904b5737aa882", "scanner": "scanner-primary", "fingerprint": "5ac8a0f89f91d0bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba33b6996a8a0310", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/retry"}, "properties": {"repobilityId": "e5a985810b8c596b", "scanner": "scanner-primary", "fingerprint": "ba33b6996a8a0310", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1008bcc4c0fa219e", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/downloads/{job_id}/cancel"}, "properties": {"repobilityId": "e3653f7146baee72", "scanner": "scanner-primary", "fingerprint": "1008bcc4c0fa219e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-315efc90864fde28", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/v1/downloads/{job_id}"}, "properties": {"repobilityId": "d6439cf2453955b5", "scanner": "scanner-primary", "fingerprint": "315efc90864fde28", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c20611e6d8a315f9", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/import-guide"}, "properties": {"repobilityId": "7a751319dcd8593b", "scanner": "scanner-primary", "fingerprint": "c20611e6d8a315f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf2221b1db605098", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/system-status"}, "properties": {"repobilityId": "477c99d7bc9b8754", "scanner": "scanner-primary", "fingerprint": "bf2221b1db605098", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4dea1f7da7d86552", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/sync"}, "properties": {"repobilityId": "8403e5e4e56737e9", "scanner": "scanner-primary", "fingerprint": "4dea1f7da7d86552", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7803216d4855a98", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/analyse"}, "properties": {"repobilityId": "9bf74993de5bca0d", "scanner": "scanner-primary", "fingerprint": "f7803216d4855a98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60ea3d652b970892", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/analyse-all"}, "properties": {"repobilityId": "4c35a740f4132f0f", "scanner": "scanner-primary", "fingerprint": "60ea3d652b970892", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17669df0f2e4de83", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/analyse-resume"}, "properties": {"repobilityId": "611cf1c48b3f58f4", "scanner": "scanner-primary", "fingerprint": "17669df0f2e4de83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c955bf2a40e6770", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/analysis-status"}, "properties": {"repobilityId": "d484a4791d90dc60", "scanner": "scanner-primary", "fingerprint": "2c955bf2a40e6770", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9e2d69601def2ea", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/analysis-retry-failed"}, "properties": {"repobilityId": "a8f3d52cabc5d4e4", "scanner": "scanner-primary", "fingerprint": "c9e2d69601def2ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10f0f6fb41b0389f", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/retry-downloads"}, "properties": {"repobilityId": "e660c58f05244344", "scanner": "scanner-primary", "fingerprint": "10f0f6fb41b0389f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a9c6af00e8496f8", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/generate"}, "properties": {"repobilityId": "d9cf437e26d6d91b", "scanner": "scanner-primary", "fingerprint": "7a9c6af00e8496f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a14740bdb50b1e64", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/fetch-covers"}, "properties": {"repobilityId": "929d65aac58a963d", "scanner": "scanner-primary", "fingerprint": "a14740bdb50b1e64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}