{"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-5beb358367357b48", "name": "Possibly dead Python function: clear_override", "shortDescription": {"text": "Possibly dead Python function: clear_override"}, "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-bd343db2a0165ab9", "name": "Possibly dead Python function: reader_loop", "shortDescription": {"text": "Possibly dead Python function: reader_loop"}, "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-31ca14bae666174a", "name": "Possibly dead Python function: transcribe_loop", "shortDescription": {"text": "Possibly dead Python function: transcribe_loop"}, "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-be57567159b1cdd7", "name": "Possibly dead Python function: rds_lyrics_loop", "shortDescription": {"text": "Possibly dead Python function: rds_lyrics_loop"}, "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-0d0d5c2c2354c796", "name": "Possibly dead Python function: fingerprint_loop", "shortDescription": {"text": "Possibly dead Python function: fingerprint_loop"}, "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-f5c3111def1c6fc9", "name": "Possibly dead Python function: lyric_id_loop", "shortDescription": {"text": "Possibly dead Python function: lyric_id_loop"}, "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-d52eee2206ce32c0", "name": "Possibly dead Python function: lyrics_tick_loop", "shortDescription": {"text": "Possibly dead Python function: lyrics_tick_loop"}, "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-3385dad4c9e9bd46", "name": "Possibly dead Python function: tune_watcher_loop", "shortDescription": {"text": "Possibly dead Python function: tune_watcher_loop"}, "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-09d645c498435742", "name": "Dockerfile runs as root: scripts/whisper-svc/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: scripts/whisper-svc/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-c7b52c649e7a2f8d", "name": "Docker base image is tag-pinned but not digest-pinned: nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5dcf4c246782d1f", "name": "Insecure pattern 'new_function_used' in files/opt/sdr-tuner/static/butterchurn.min.js:1", "shortDescription": {"text": "Insecure pattern 'new_function_used' in files/opt/sdr-tuner/static/butterchurn.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 24 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 99 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. 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": "low", "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 ci, tests. 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-cafe9e407672c029", "name": "Commented-code block (5 lines) in files/opt/sdr-tuner/caption_orchestrator.py:40", "shortDescription": {"text": "Commented-code block (5 lines) in files/opt/sdr-tuner/caption_orchestrator.py:40"}, "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-1112a58cfca7b854", "name": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_stream.py:50", "shortDescription": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_stream.py:50"}, "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-6f0304ff8003d4b5", "name": "Commented-code block (7 lines) in files/opt/sdr-tuner/app.py:38", "shortDescription": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/app.py:38"}, "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-5514ea28397f86c6", "name": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/app.py:239", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/app.py:239"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8efea380379b3343", "name": "Commented-code block (6 lines) in files/opt/sdr-tuner/stereo_decode.py:123", "shortDescription": {"text": "Commented-code block (6 lines) in files/opt/sdr-tuner/stereo_decode.py:123"}, "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-4c7ce01958551189", "name": "Commented-code block (8 lines) in files/opt/sdr-tuner/iq_capture.py:126", "shortDescription": {"text": "Commented-code block (8 lines) in files/opt/sdr-tuner/iq_capture.py:126"}, "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-a929d59a3e41c4a9", "name": "Commented-code block (5 lines) in files/opt/sdr-tuner/wxsat_scheduler.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in files/opt/sdr-tuner/wxsat_scheduler.py:47"}, "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-ad4c9bf99ad361d3", "name": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/hd_stream.py:27", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/hd_stream.py:27"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d54e39e3151cce2", "name": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_scan.py:110", "shortDescription": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_scan.py:110"}, "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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nfiles/opt/sdr-tuner/wbfm_stream.py:stop, files/opt/sdr-tuner/am_stream.py:stop, files/opt/sdr-tuner/am_diag_scan.py:stop, files/opt/sdr-tuner/iq_capture.py:stop\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:\nfiles/opt/sdr-tuner/mux_supervisor.py:read_env, files/opt/sdr-tuner/iq_capture.py:read_env\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-ff8963db8fe40e34", "name": "FastAPI POST `transcribe` without auth dependency \u2014 scripts/whisper-svc/whisper_service.py:22", "shortDescription": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 scripts/whisper-svc/whisper_service.py:22"}, "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-ac1c89c07fcfb629", "name": "Flask mutation route `tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:341", "shortDescription": {"text": "Flask mutation route `tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:341"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ce46d9b133388b4", "name": "Flask mutation route `stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:360", "shortDescription": {"text": "Flask mutation route `stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:360"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34e61255e9cf3272", "name": "Flask mutation route `scan_fm` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:367", "shortDescription": {"text": "Flask mutation route `scan_fm` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:367"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9cca690cfd87801", "name": "Flask mutation route `scan_am` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:373", "shortDescription": {"text": "Flask mutation route `scan_am` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:373"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69de3c0b81ab2f15", "name": "Flask mutation route `reload_stations` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:379", "shortDescription": {"text": "Flask mutation route `reload_stations` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:379"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ebff11af7a0aa342", "name": "Flask mutation route `settings_save` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:385", "shortDescription": {"text": "Flask mutation route `settings_save` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:385"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c82ada6875c65c8a", "name": "Flask mutation route `api_station_override` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:531", "shortDescription": {"text": "Flask mutation route `api_station_override` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:531"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-060a61e3eaefecf2", "name": "Flask mutation route `api_tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:565", "shortDescription": {"text": "Flask mutation route `api_tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:565"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e197e348a521c11", "name": "Flask mutation route `api_bitrate` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:595", "shortDescription": {"text": "Flask mutation route `api_bitrate` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:595"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3b2dd8954bd531b", "name": "Flask mutation route `api_stereo` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:622", "shortDescription": {"text": "Flask mutation route `api_stereo` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:622"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ef9fb06f8c1c6a8", "name": "Flask mutation route `api_antenna` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:645", "shortDescription": {"text": "Flask mutation route `api_antenna` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:645"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85e83d27c7129b92", "name": "Flask mutation route `api_mux_channels` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:721", "shortDescription": {"text": "Flask mutation route `api_mux_channels` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:721"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-908ef4cc61518b80", "name": "Flask mutation route `api_mux_start` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:764", "shortDescription": {"text": "Flask mutation route `api_mux_start` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:764"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0aaae7014b551b39", "name": "Flask mutation route `api_mux_stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:774", "shortDescription": {"text": "Flask mutation route `api_mux_stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:774"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e406b86d142c11a8", "name": "Flask mutation route `api_wxsat_rebuild` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:925", "shortDescription": {"text": "Flask mutation route `api_wxsat_rebuild` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:925"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bde86e3237e1988", "name": "Flask mutation route `api_wxsat_authorize` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:951", "shortDescription": {"text": "Flask mutation route `api_wxsat_authorize` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:951"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31e1a74f60268cf2", "name": "Flask mutation route `api_wxsat_delete` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:1005", "shortDescription": {"text": "Flask mutation route `api_wxsat_delete` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:1005"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7de4e88d608e05fe", "name": "Unused endpoint: POST /transcribe", "shortDescription": {"text": "Unused endpoint: POST /transcribe"}, "fullDescription": {"text": "`scripts/whisper-svc/whisper_service.py` declares `POST /transcribe` 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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /` 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-0e206f1f7d6537ff", "name": "Unused endpoint: ANY /radio", "shortDescription": {"text": "Unused endpoint: ANY /radio"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /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-b6f1a83fedb28703", "name": "Unused endpoint: ANY /wxsat", "shortDescription": {"text": "Unused endpoint: ANY /wxsat"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /wxsat` 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-87324b98ec92d17f", "name": "Unused endpoint: ANY /multi", "shortDescription": {"text": "Unused endpoint: ANY /multi"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /multi` 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-339971ed02944aa9", "name": "Unused endpoint: ANY /tune", "shortDescription": {"text": "Unused endpoint: ANY /tune"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /tune` 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-0a1e697c60921d89", "name": "Unused endpoint: ANY /stop", "shortDescription": {"text": "Unused endpoint: ANY /stop"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /stop` 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-e3a14aed6682cec1", "name": "Unused endpoint: ANY /scan-fm", "shortDescription": {"text": "Unused endpoint: ANY /scan-fm"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /scan-fm` 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-16abb0f00c941b50", "name": "Unused endpoint: ANY /scan-am", "shortDescription": {"text": "Unused endpoint: ANY /scan-am"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /scan-am` 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-04e9ebd88240ac11", "name": "Unused endpoint: ANY /reload-stations", "shortDescription": {"text": "Unused endpoint: ANY /reload-stations"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /reload-stations` 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-730243f5702f0b8a", "name": "Unused endpoint: ANY /settings", "shortDescription": {"text": "Unused endpoint: ANY /settings"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /settings` 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-e1a61ead29e17012", "name": "Unused endpoint: ANY /api/status", "shortDescription": {"text": "Unused endpoint: ANY /api/status"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/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-bd20c56b961e3458", "name": "Unused endpoint: ANY /api/art", "shortDescription": {"text": "Unused endpoint: ANY /api/art"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/art` 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-9e0201f4cb6619a5", "name": "Unused endpoint: ANY /api/scan_status", "shortDescription": {"text": "Unused endpoint: ANY /api/scan_status"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/scan_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-d7a396f409b3445b", "name": "Unused endpoint: ANY /api/rfi_status", "shortDescription": {"text": "Unused endpoint: ANY /api/rfi_status"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/rfi_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-d3db3218f0199268", "name": "Unused endpoint: ANY /api/now_playing", "shortDescription": {"text": "Unused endpoint: ANY /api/now_playing"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/now_playing` 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-a8ba8716265fcce4", "name": "Unused endpoint: ANY /api/station-override", "shortDescription": {"text": "Unused endpoint: ANY /api/station-override"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/station-override` 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-58579f6daa6254c7", "name": "Unused endpoint: ANY /api/stations", "shortDescription": {"text": "Unused endpoint: ANY /api/stations"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/stations` 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-1f146691cf73520b", "name": "Unused endpoint: ANY /api/tune", "shortDescription": {"text": "Unused endpoint: ANY /api/tune"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/tune` 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-4b450d009ba68ebe", "name": "Unused endpoint: ANY /api/bitrate", "shortDescription": {"text": "Unused endpoint: ANY /api/bitrate"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/bitrate` 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-87776e02e5b3891e", "name": "Unused endpoint: ANY /api/stereo", "shortDescription": {"text": "Unused endpoint: ANY /api/stereo"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/stereo` 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-63cc06146c379efa", "name": "Unused endpoint: ANY /api/antenna", "shortDescription": {"text": "Unused endpoint: ANY /api/antenna"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/antenna` 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-8a136d4be206d428", "name": "Unused endpoint: ANY /api/mux/status", "shortDescription": {"text": "Unused endpoint: ANY /api/mux/status"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/mux/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-be4641c41c832822", "name": "Unused endpoint: ANY /api/mux/channels", "shortDescription": {"text": "Unused endpoint: ANY /api/mux/channels"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/mux/channels` 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-804235dffd31ef31", "name": "Unused endpoint: ANY /api/mux/start", "shortDescription": {"text": "Unused endpoint: ANY /api/mux/start"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/mux/start` 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-eec9c78149488abf", "name": "Unused endpoint: ANY /api/mux/stop", "shortDescription": {"text": "Unused endpoint: ANY /api/mux/stop"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/mux/stop` 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-568948eb92614851", "name": "Unused endpoint: ANY /api/wxsat/captures", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/captures"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/captures` 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-6e22242951ff527b", "name": "Unused endpoint: ANY /api/wxsat/passes", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/passes"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/passes` 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-eb4dd9f56cad933c", "name": "Unused endpoint: ANY /api/wxsat/status", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/status"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/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-969f4ee257483be4", "name": "Unused endpoint: ANY /api/wxsat/live", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/live"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/live` 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-14981367d52311a2", "name": "Unused endpoint: ANY /api/wxsat/pass/<cid>", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/pass/<cid>"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/pass/<cid>` 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-a059ded36388b9d0", "name": "Unused endpoint: ANY /api/wxsat/rebuild", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/rebuild"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/rebuild` 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-edc8b67dc93f9b0f", "name": "Unused endpoint: ANY /api/wxsat/authorize", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/authorize"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/authorize` 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-f6a22d0ad76dd15c", "name": "Unused endpoint: ANY /api/wxsat/space", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/space"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/space` 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-45e4d0ba7f996156", "name": "Unused endpoint: ANY /api/wxsat/image/<path:relpath>", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/image/<path:relpath>"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/image/<path:relpath>` 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-1a2391a6b5d239b8", "name": "Unused endpoint: ANY /api/wxsat/delete", "shortDescription": {"text": "Unused endpoint: ANY /api/wxsat/delete"}, "fullDescription": {"text": "`files/opt/sdr-tuner/app.py` declares `ANY /api/wxsat/delete` 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/18280"}, "properties": {"repository": "robertegardner/radio", "repoUrl": "https://github.com/robertegardner/radio", "branch": "main"}, "results": [{"ruleId": "scanner-5beb358367357b48", "level": "note", "message": {"text": "Possibly dead Python function: clear_override"}, "properties": {"repobilityId": "bc4e567bf97058be", "scanner": "scanner-primary", "fingerprint": "5beb358367357b48", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/station_db.py:135"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bd343db2a0165ab9", "level": "note", "message": {"text": "Possibly dead Python function: reader_loop"}, "properties": {"repobilityId": "b138c1b2e619658e", "scanner": "scanner-primary", "fingerprint": "bd343db2a0165ab9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:127"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31ca14bae666174a", "level": "note", "message": {"text": "Possibly dead Python function: transcribe_loop"}, "properties": {"repobilityId": "dee0a6d1a7cf0d80", "scanner": "scanner-primary", "fingerprint": "31ca14bae666174a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-be57567159b1cdd7", "level": "note", "message": {"text": "Possibly dead Python function: rds_lyrics_loop"}, "properties": {"repobilityId": "d8d7fbfb7678c2d4", "scanner": "scanner-primary", "fingerprint": "be57567159b1cdd7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:474"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d0d5c2c2354c796", "level": "note", "message": {"text": "Possibly dead Python function: fingerprint_loop"}, "properties": {"repobilityId": "17ce8b297ca8a015", "scanner": "scanner-primary", "fingerprint": "0d0d5c2c2354c796", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:561"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f5c3111def1c6fc9", "level": "note", "message": {"text": "Possibly dead Python function: lyric_id_loop"}, "properties": {"repobilityId": "7fb885461ecc0424", "scanner": "scanner-primary", "fingerprint": "f5c3111def1c6fc9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:605"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d52eee2206ce32c0", "level": "note", "message": {"text": "Possibly dead Python function: lyrics_tick_loop"}, "properties": {"repobilityId": "2572ddc5f61995c3", "scanner": "scanner-primary", "fingerprint": "d52eee2206ce32c0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:647"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3385dad4c9e9bd46", "level": "note", "message": {"text": "Possibly dead Python function: tune_watcher_loop"}, "properties": {"repobilityId": "9fd38af3cb332fc0", "scanner": "scanner-primary", "fingerprint": "3385dad4c9e9bd46", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/caption_orchestrator.py:678"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09d645c498435742", "level": "warning", "message": {"text": "Dockerfile runs as root: scripts/whisper-svc/Dockerfile"}, "properties": {"repobilityId": "f3d773a0383e83a4", "scanner": "scanner-primary", "fingerprint": "09d645c498435742", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-c7b52c649e7a2f8d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04"}, "properties": {"repobilityId": "35e9d41ebb813703", "scanner": "scanner-primary", "fingerprint": "c7b52c649e7a2f8d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/whisper-svc/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-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d5dcf4c246782d1f", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in files/opt/sdr-tuner/static/butterchurn.min.js:1"}, "properties": {"repobilityId": "6e437009e9704d40", "scanner": "scanner-primary", "fingerprint": "d5dcf4c246782d1f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/static/butterchurn.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"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-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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ff7f489fb109757a", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "492dc3c89bad80de", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "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": "d3753dcd923c3fe3", "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": "0d02d7693d285848", "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": "3c751ce7a2eafb55", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cafe9e407672c029", "level": "none", "message": {"text": "Commented-code block (5 lines) in files/opt/sdr-tuner/caption_orchestrator.py:40"}, "properties": {"repobilityId": "4cde7b3345e9b6bb", "scanner": "scanner-primary", "fingerprint": "cafe9e407672c029", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1112a58cfca7b854", "level": "none", "message": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_stream.py:50"}, "properties": {"repobilityId": "df0f93f94a8cc884", "scanner": "scanner-primary", "fingerprint": "1112a58cfca7b854", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f0304ff8003d4b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/app.py:38"}, "properties": {"repobilityId": "ddeaa212acff8898", "scanner": "scanner-primary", "fingerprint": "6f0304ff8003d4b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5514ea28397f86c6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/app.py:239"}, "properties": {"repobilityId": "46920911266a1430", "scanner": "scanner-primary", "fingerprint": "5514ea28397f86c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8efea380379b3343", "level": "none", "message": {"text": "Commented-code block (6 lines) in files/opt/sdr-tuner/stereo_decode.py:123"}, "properties": {"repobilityId": "8e7bd7c875539774", "scanner": "scanner-primary", "fingerprint": "8efea380379b3343", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c7ce01958551189", "level": "none", "message": {"text": "Commented-code block (8 lines) in files/opt/sdr-tuner/iq_capture.py:126"}, "properties": {"repobilityId": "3fbd9d7f21c1a131", "scanner": "scanner-primary", "fingerprint": "4c7ce01958551189", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a929d59a3e41c4a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in files/opt/sdr-tuner/wxsat_scheduler.py:47"}, "properties": {"repobilityId": "d083d4f16a131094", "scanner": "scanner-primary", "fingerprint": "a929d59a3e41c4a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad4c9bf99ad361d3", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 files/opt/sdr-tuner/hd_stream.py:27"}, "properties": {"repobilityId": "7fa4df6be7f5040d", "scanner": "scanner-primary", "fingerprint": "ad4c9bf99ad361d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d54e39e3151cce2", "level": "none", "message": {"text": "Commented-code block (7 lines) in files/opt/sdr-tuner/am_scan.py:110"}, "properties": {"repobilityId": "45373c08f77b9fac", "scanner": "scanner-primary", "fingerprint": "8d54e39e3151cce2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "4666efec1e938543", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "e4c05aad9b73dc89", "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": "c789b5a3b80a9c5d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ff8963db8fe40e34", "level": "error", "message": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 scripts/whisper-svc/whisper_service.py:22"}, "properties": {"repobilityId": "24f835cf1d0751dc", "scanner": "scanner-primary", "fingerprint": "ff8963db8fe40e34", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/whisper-svc/whisper_service.py"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-ac1c89c07fcfb629", "level": "error", "message": {"text": "Flask mutation route `tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:341"}, "properties": {"repobilityId": "fa822149627b1fa4", "scanner": "scanner-primary", "fingerprint": "ac1c89c07fcfb629", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 341}}}]}, {"ruleId": "scanner-2ce46d9b133388b4", "level": "error", "message": {"text": "Flask mutation route `stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:360"}, "properties": {"repobilityId": "b515b249804b5d8e", "scanner": "scanner-primary", "fingerprint": "2ce46d9b133388b4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 360}}}]}, {"ruleId": "scanner-34e61255e9cf3272", "level": "error", "message": {"text": "Flask mutation route `scan_fm` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:367"}, "properties": {"repobilityId": "cd437fc20b175938", "scanner": "scanner-primary", "fingerprint": "34e61255e9cf3272", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 367}}}]}, {"ruleId": "scanner-e9cca690cfd87801", "level": "error", "message": {"text": "Flask mutation route `scan_am` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:373"}, "properties": {"repobilityId": "1e7474addece8abf", "scanner": "scanner-primary", "fingerprint": "e9cca690cfd87801", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-69de3c0b81ab2f15", "level": "error", "message": {"text": "Flask mutation route `reload_stations` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:379"}, "properties": {"repobilityId": "71d164c46eaecbe8", "scanner": "scanner-primary", "fingerprint": "69de3c0b81ab2f15", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 379}}}]}, {"ruleId": "scanner-ebff11af7a0aa342", "level": "error", "message": {"text": "Flask mutation route `settings_save` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:385"}, "properties": {"repobilityId": "f644d3ee39cd265a", "scanner": "scanner-primary", "fingerprint": "ebff11af7a0aa342", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 385}}}]}, {"ruleId": "scanner-c82ada6875c65c8a", "level": "error", "message": {"text": "Flask mutation route `api_station_override` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:531"}, "properties": {"repobilityId": "442c3aa7a7f709fe", "scanner": "scanner-primary", "fingerprint": "c82ada6875c65c8a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 531}}}]}, {"ruleId": "scanner-060a61e3eaefecf2", "level": "error", "message": {"text": "Flask mutation route `api_tune` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:565"}, "properties": {"repobilityId": "14610e5eb06214c9", "scanner": "scanner-primary", "fingerprint": "060a61e3eaefecf2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 565}}}]}, {"ruleId": "scanner-3e197e348a521c11", "level": "error", "message": {"text": "Flask mutation route `api_bitrate` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:595"}, "properties": {"repobilityId": "a8686347da0eb1a5", "scanner": "scanner-primary", "fingerprint": "3e197e348a521c11", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 595}}}]}, {"ruleId": "scanner-d3b2dd8954bd531b", "level": "error", "message": {"text": "Flask mutation route `api_stereo` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:622"}, "properties": {"repobilityId": "08ff37ea315ecc2b", "scanner": "scanner-primary", "fingerprint": "d3b2dd8954bd531b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 622}}}]}, {"ruleId": "scanner-8ef9fb06f8c1c6a8", "level": "error", "message": {"text": "Flask mutation route `api_antenna` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:645"}, "properties": {"repobilityId": "8b51426d8ad2705f", "scanner": "scanner-primary", "fingerprint": "8ef9fb06f8c1c6a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 645}}}]}, {"ruleId": "scanner-85e83d27c7129b92", "level": "error", "message": {"text": "Flask mutation route `api_mux_channels` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:721"}, "properties": {"repobilityId": "688d347d68cc75c6", "scanner": "scanner-primary", "fingerprint": "85e83d27c7129b92", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 721}}}]}, {"ruleId": "scanner-908ef4cc61518b80", "level": "error", "message": {"text": "Flask mutation route `api_mux_start` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:764"}, "properties": {"repobilityId": "4ef84cf99f9eb61b", "scanner": "scanner-primary", "fingerprint": "908ef4cc61518b80", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 764}}}]}, {"ruleId": "scanner-0aaae7014b551b39", "level": "error", "message": {"text": "Flask mutation route `api_mux_stop` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:774"}, "properties": {"repobilityId": "406a7c2eae25743c", "scanner": "scanner-primary", "fingerprint": "0aaae7014b551b39", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 774}}}]}, {"ruleId": "scanner-e406b86d142c11a8", "level": "error", "message": {"text": "Flask mutation route `api_wxsat_rebuild` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:925"}, "properties": {"repobilityId": "807005894cb0add1", "scanner": "scanner-primary", "fingerprint": "e406b86d142c11a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 925}}}]}, {"ruleId": "scanner-8bde86e3237e1988", "level": "error", "message": {"text": "Flask mutation route `api_wxsat_authorize` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:951"}, "properties": {"repobilityId": "4197305e9780218f", "scanner": "scanner-primary", "fingerprint": "8bde86e3237e1988", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 951}}}]}, {"ruleId": "scanner-31e1a74f60268cf2", "level": "error", "message": {"text": "Flask mutation route `api_wxsat_delete` without `@login_required` \u2014 files/opt/sdr-tuner/app.py:1005"}, "properties": {"repobilityId": "30c4c8890c932db0", "scanner": "scanner-primary", "fingerprint": "31e1a74f60268cf2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "files/opt/sdr-tuner/app.py"}, "region": {"startLine": 1005}}}]}, {"ruleId": "scanner-7de4e88d608e05fe", "level": "note", "message": {"text": "Unused endpoint: POST /transcribe"}, "properties": {"repobilityId": "a64e2a79fe614974", "scanner": "scanner-primary", "fingerprint": "7de4e88d608e05fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "8e1ee62f7509e1c6", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e206f1f7d6537ff", "level": "note", "message": {"text": "Unused endpoint: ANY /radio"}, "properties": {"repobilityId": "58a1e27a218580aa", "scanner": "scanner-primary", "fingerprint": "0e206f1f7d6537ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b6f1a83fedb28703", "level": "note", "message": {"text": "Unused endpoint: ANY /wxsat"}, "properties": {"repobilityId": "c0c840b5d0dea961", "scanner": "scanner-primary", "fingerprint": "b6f1a83fedb28703", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87324b98ec92d17f", "level": "note", "message": {"text": "Unused endpoint: ANY /multi"}, "properties": {"repobilityId": "ff6927284fa9ad74", "scanner": "scanner-primary", "fingerprint": "87324b98ec92d17f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-339971ed02944aa9", "level": "note", "message": {"text": "Unused endpoint: ANY /tune"}, "properties": {"repobilityId": "83a1fdadfbcc7a38", "scanner": "scanner-primary", "fingerprint": "339971ed02944aa9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a1e697c60921d89", "level": "note", "message": {"text": "Unused endpoint: ANY /stop"}, "properties": {"repobilityId": "bcee2888266c2ea2", "scanner": "scanner-primary", "fingerprint": "0a1e697c60921d89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3a14aed6682cec1", "level": "note", "message": {"text": "Unused endpoint: ANY /scan-fm"}, "properties": {"repobilityId": "1f633b487dbac94d", "scanner": "scanner-primary", "fingerprint": "e3a14aed6682cec1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16abb0f00c941b50", "level": "note", "message": {"text": "Unused endpoint: ANY /scan-am"}, "properties": {"repobilityId": "d98626403a4bc10a", "scanner": "scanner-primary", "fingerprint": "16abb0f00c941b50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04e9ebd88240ac11", "level": "note", "message": {"text": "Unused endpoint: ANY /reload-stations"}, "properties": {"repobilityId": "6fe7ce193bb9b217", "scanner": "scanner-primary", "fingerprint": "04e9ebd88240ac11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-730243f5702f0b8a", "level": "note", "message": {"text": "Unused endpoint: ANY /settings"}, "properties": {"repobilityId": "32a0042f329f32d2", "scanner": "scanner-primary", "fingerprint": "730243f5702f0b8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1a61ead29e17012", "level": "note", "message": {"text": "Unused endpoint: ANY /api/status"}, "properties": {"repobilityId": "ddcc3a80d25fead1", "scanner": "scanner-primary", "fingerprint": "e1a61ead29e17012", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd20c56b961e3458", "level": "note", "message": {"text": "Unused endpoint: ANY /api/art"}, "properties": {"repobilityId": "fe42527eae2ae0e4", "scanner": "scanner-primary", "fingerprint": "bd20c56b961e3458", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e0201f4cb6619a5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/scan_status"}, "properties": {"repobilityId": "e23437ef8965d8c2", "scanner": "scanner-primary", "fingerprint": "9e0201f4cb6619a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7a396f409b3445b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/rfi_status"}, "properties": {"repobilityId": "c3b5a3d46fa4bb97", "scanner": "scanner-primary", "fingerprint": "d7a396f409b3445b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3db3218f0199268", "level": "note", "message": {"text": "Unused endpoint: ANY /api/now_playing"}, "properties": {"repobilityId": "85fe45ca1d8c2ce3", "scanner": "scanner-primary", "fingerprint": "d3db3218f0199268", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8ba8716265fcce4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/station-override"}, "properties": {"repobilityId": "994d988e7a60e5ce", "scanner": "scanner-primary", "fingerprint": "a8ba8716265fcce4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58579f6daa6254c7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stations"}, "properties": {"repobilityId": "eb245c9173e4fc0c", "scanner": "scanner-primary", "fingerprint": "58579f6daa6254c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f146691cf73520b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tune"}, "properties": {"repobilityId": "eba5fc90b5dfd479", "scanner": "scanner-primary", "fingerprint": "1f146691cf73520b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b450d009ba68ebe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/bitrate"}, "properties": {"repobilityId": "2c163cfd4cde1162", "scanner": "scanner-primary", "fingerprint": "4b450d009ba68ebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87776e02e5b3891e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stereo"}, "properties": {"repobilityId": "27659db99a655ffe", "scanner": "scanner-primary", "fingerprint": "87776e02e5b3891e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63cc06146c379efa", "level": "note", "message": {"text": "Unused endpoint: ANY /api/antenna"}, "properties": {"repobilityId": "0620ac3772fb57e0", "scanner": "scanner-primary", "fingerprint": "63cc06146c379efa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a136d4be206d428", "level": "note", "message": {"text": "Unused endpoint: ANY /api/mux/status"}, "properties": {"repobilityId": "98d1ecff8188937f", "scanner": "scanner-primary", "fingerprint": "8a136d4be206d428", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be4641c41c832822", "level": "note", "message": {"text": "Unused endpoint: ANY /api/mux/channels"}, "properties": {"repobilityId": "5215717069c000f5", "scanner": "scanner-primary", "fingerprint": "be4641c41c832822", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-804235dffd31ef31", "level": "note", "message": {"text": "Unused endpoint: ANY /api/mux/start"}, "properties": {"repobilityId": "1f83c89fbeec5aaa", "scanner": "scanner-primary", "fingerprint": "804235dffd31ef31", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eec9c78149488abf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/mux/stop"}, "properties": {"repobilityId": "e9382987f9078732", "scanner": "scanner-primary", "fingerprint": "eec9c78149488abf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-568948eb92614851", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/captures"}, "properties": {"repobilityId": "83ca954d8f3ac94a", "scanner": "scanner-primary", "fingerprint": "568948eb92614851", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e22242951ff527b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/passes"}, "properties": {"repobilityId": "57ed92b5c76b07ac", "scanner": "scanner-primary", "fingerprint": "6e22242951ff527b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb4dd9f56cad933c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/status"}, "properties": {"repobilityId": "5a0ee6d6adad3615", "scanner": "scanner-primary", "fingerprint": "eb4dd9f56cad933c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-969f4ee257483be4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/live"}, "properties": {"repobilityId": "9143434077b64752", "scanner": "scanner-primary", "fingerprint": "969f4ee257483be4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-14981367d52311a2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/pass/<cid>"}, "properties": {"repobilityId": "90219635ec940e24", "scanner": "scanner-primary", "fingerprint": "14981367d52311a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a059ded36388b9d0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/rebuild"}, "properties": {"repobilityId": "068e68eaabbbcc4d", "scanner": "scanner-primary", "fingerprint": "a059ded36388b9d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-edc8b67dc93f9b0f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/authorize"}, "properties": {"repobilityId": "58c17380eeace63c", "scanner": "scanner-primary", "fingerprint": "edc8b67dc93f9b0f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6a22d0ad76dd15c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/space"}, "properties": {"repobilityId": "807af7dea8e7ed3b", "scanner": "scanner-primary", "fingerprint": "f6a22d0ad76dd15c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45e4d0ba7f996156", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/image/<path:relpath>"}, "properties": {"repobilityId": "15c634d7a954a18c", "scanner": "scanner-primary", "fingerprint": "45e4d0ba7f996156", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a2391a6b5d239b8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/wxsat/delete"}, "properties": {"repobilityId": "2260e775378b8fab", "scanner": "scanner-primary", "fingerprint": "1a2391a6b5d239b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}