{"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-db63119d125afad3", "name": "Stray `console.log` in TS/JS \u2014 web/static/js/htmx.min.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/static/js/htmx.min.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1927e0ef2b485009", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7debdbbf092a1af7", "name": "Privileged port 59 in use", "shortDescription": {"text": "Privileged port 59 in use"}, "fullDescription": {"text": "Port 59 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a75178bc06be0fc8", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0178361dcfaeac02", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "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-bd2b685c5d124f65", "name": "Insecure pattern 'cors_wildcard' in internal/api/handlers_docs.go:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in internal/api/handlers_docs.go:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-718722579203adce", "name": "Insecure pattern 'new_function_used' in web/static/js/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'new_function_used' in web/static/js/htmx.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-703f011ee0cefd64", "name": "Insecure pattern 'insert_adjacent_html' in web/static/js/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in web/static/js/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d991a07b2458598", "name": "Insecure pattern 'domparser_html_parse' in web/static/js/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in web/static/js/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-180feefa04a759d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/driver.min.js:2", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/driver.min.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae1b4d0a09955a39", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/cropper.min.js:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/cropper.min.js:10"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-871a27e85d8d896d", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/filter-flyout.js:146", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/filter-flyout.js:146"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6af0cddf7836a151", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/help.js:85", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/help.js:85"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec802cd9c3bbe295", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/library.js:85", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/library.js:85"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7dafa044b667fd8b", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/settings-export.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/settings-export.js:63"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7521dcd40345ec6c", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/updates.js:773", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/updates.js:773"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79f537743b1961ad", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/log-viewer.js:213", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/log-viewer.js:213"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-525aa95a837bb8ce", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/maintenance.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/maintenance.js:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5029b6fd0d80ff8d", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/profile-naming.js:78", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/profile-naming.js:78"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92254e046364fe1a", "name": "Insecure pattern 'direct_outerhtml_assignment' in web/static/js/artist-detail/members-apply.js:53", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in web/static/js/artist-detail/members-apply.js:53"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-750c4d5fe812dd5d", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/artist-detail/artwork-modal.js:329", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/artist-detail/artwork-modal.js:329"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a738adc2dc307aa", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/components/progress_pill_templ.go:286", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/progress_pill_templ.go:286"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92d82d1cc0b52e95", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/components/field_provider_modal_templ.go:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/field_provider_modal_templ.go:44"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-428b5baeda38ed4d", "name": "Insecure pattern 'direct_innerhtml_assignment' in web/components/language_picker_templ.go:316", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/language_picker_templ.go:316"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6aaf403b9c8ec6f", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65a716a27d2be993", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64192a3c67110d01", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37716d9c0a33ad5c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee252b4a1468bf6e", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-448d8837178ae57a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a0afb468e89e566", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-471fc65bcb1e51af", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0233c02539647de", "name": "Very large file: internal/library/service_test.go (2036 lines)", "shortDescription": {"text": "Very large file: internal/library/service_test.go (2036 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-c8fc5754bb8b3927", "name": "Very large file: internal/provider/orchestrator.go (1592 lines)", "shortDescription": {"text": "Very large file: internal/provider/orchestrator.go (1592 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-2096f73c71e98112", "name": "Very large file: internal/provider/orchestrator_test.go (3298 lines)", "shortDescription": {"text": "Very large file: internal/provider/orchestrator_test.go (3298 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-a6bd6ecde14f8fa4", "name": "Very large file: internal/provider/musicbrainz/musicbrainz_test.go (2476 lines)", "shortDescription": {"text": "Very large file: internal/provider/musicbrainz/musicbrainz_test.go (2476 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-927d6d234c7306e4", "name": "Very large file: internal/updater/updater_test.go (2178 lines)", "shortDescription": {"text": "Very large file: internal/updater/updater_test.go (2178 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-39b47729c217a271", "name": "Very large file: internal/updater/updater.go (1597 lines)", "shortDescription": {"text": "Very large file: internal/updater/updater.go (1597 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-ed2e216c391089fe", "name": "Very large file: internal/api/handlers.go (1469 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers.go (1469 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-3de4d2f8095cf5ff", "name": "Very large file: internal/api/handlers_image.go (2346 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_image.go (2346 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-a6bb67db08403f86", "name": "Very large file: internal/api/handlers_connection_library.go (1623 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_connection_library.go (1623 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-99bca41aa59a6558", "name": "Very large file: internal/api/handlers_history_test.go (1848 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_history_test.go (1848 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-5c4e5bd34e729d78", "name": "Very large file: internal/api/handlers_updater_test.go (1534 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_updater_test.go (1534 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-ada63d9642d8c3d2", "name": "Very large file: internal/api/handlers_connection_library_test.go (3891 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_connection_library_test.go (3891 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-4c99b2fb70243fb8", "name": "Very large file: internal/api/handlers_image_test.go (2886 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_image_test.go (2886 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-5d988fc6894053c5", "name": "Very large file: internal/api/handlers_preferences_test.go (1778 lines)", "shortDescription": {"text": "Very large file: internal/api/handlers_preferences_test.go (1778 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-01cd352cda6d141d", "name": "Very large file: internal/api/router.go (972 lines)", "shortDescription": {"text": "Very large file: internal/api/router.go (972 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-0429f6f8aadffdb4", "name": "Very large file: internal/connection/jellyfin/client_test.go (1918 lines)", "shortDescription": {"text": "Very large file: internal/connection/jellyfin/client_test.go (1918 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-3b4ee1550d43ea22", "name": "Very large file: internal/connection/emby/client_test.go (1877 lines)", "shortDescription": {"text": "Very large file: internal/connection/emby/client_test.go (1877 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-95992862073f24e0", "name": "Very large file: internal/artist/service.go (2156 lines)", "shortDescription": {"text": "Very large file: internal/artist/service.go (2156 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-fa5b157c08357122", "name": "Very large file: internal/scraper/executor_test.go (1500 lines)", "shortDescription": {"text": "Very large file: internal/scraper/executor_test.go (1500 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-1f694eced55f314c", "name": "Very large file: internal/database/migrate_test.go (1807 lines)", "shortDescription": {"text": "Very large file: internal/database/migrate_test.go (1807 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-d290de8bb76f6dec", "name": "Very large file: internal/rule/checkers_test.go (2261 lines)", "shortDescription": {"text": "Very large file: internal/rule/checkers_test.go (2261 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-b2e4fd508e271cc9", "name": "Very large file: internal/rule/fixer.go (1933 lines)", "shortDescription": {"text": "Very large file: internal/rule/fixer.go (1933 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-560b68d462776a46", "name": "Very large file: internal/rule/fixers.go (1624 lines)", "shortDescription": {"text": "Very large file: internal/rule/fixers.go (1624 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-5e329b5f8cc8cbb6", "name": "Very large file: internal/rule/service_test.go (3594 lines)", "shortDescription": {"text": "Very large file: internal/rule/service_test.go (3594 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-afbc46cd278ba04c", "name": "Very large file: internal/rule/fixer_test.go (3301 lines)", "shortDescription": {"text": "Very large file: internal/rule/fixer_test.go (3301 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-e668c5b9d2cefc03", "name": "Very large file: internal/rule/service.go (2010 lines)", "shortDescription": {"text": "Very large file: internal/rule/service.go (2010 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-2ed30d94bd98a540", "name": "Very large file: internal/scanner/scanner_test.go (2011 lines)", "shortDescription": {"text": "Very large file: internal/scanner/scanner_test.go (2011 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-7ed667471c88c5ac", "name": "Very large file: scripts/smoke.sh (1956 lines)", "shortDescription": {"text": "Very large file: scripts/smoke.sh (1956 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-a97b36283c425011", "name": "Very large file: cmd/stillwater/main.go (1517 lines)", "shortDescription": {"text": "Very large file: cmd/stillwater/main.go (1517 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-b0733d408d8d21e4", "name": "Very large file: cmd/gen-settings-reference/main.go (1774 lines)", "shortDescription": {"text": "Very large file: cmd/gen-settings-reference/main.go (1774 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-fb62442c0f31c818", "name": "Very large file: cmd/gen-settings-reference/main_test.go (1764 lines)", "shortDescription": {"text": "Very large file: cmd/gen-settings-reference/main_test.go (1764 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-33774610f74cf519", "name": "Very large file: web/components/icon_templ.go (1708 lines)", "shortDescription": {"text": "Very large file: web/components/icon_templ.go (1708 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-97257bdf43d4ac2a", "name": "Very large file: web/components/filter_flyout_templ.go (1479 lines)", "shortDescription": {"text": "Very large file: web/components/filter_flyout_templ.go (1479 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-70f5387e9634503d", "name": "Very large file: web/templates/settings_templ.go (10411 lines)", "shortDescription": {"text": "Very large file: web/templates/settings_templ.go (10411 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-8f56f2da110c2d13", "name": "Very large file: web/templates/artist_violations_tab_templ.go (1098 lines)", "shortDescription": {"text": "Very large file: web/templates/artist_violations_tab_templ.go (1098 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-eb30e412e7d0bb09", "name": "Very large file: web/templates/artist_detail_templ.go (4993 lines)", "shortDescription": {"text": "Very large file: web/templates/artist_detail_templ.go (4993 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-b343fb01d229e01f", "name": "Very large file: web/templates/artists_templ.go (3953 lines)", "shortDescription": {"text": "Very large file: web/templates/artists_templ.go (3953 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-6e808ed3b81f9f25", "name": "Very large file: web/templates/artist_refresh_templ.go (1178 lines)", "shortDescription": {"text": "Very large file: web/templates/artist_refresh_templ.go (1178 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-1c570dd543a5068e", "name": "Very large file: web/templates/compliance_templ.go (1966 lines)", "shortDescription": {"text": "Very large file: web/templates/compliance_templ.go (1966 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-c17c1ac22a15ddaf", "name": "Very large file: web/templates/reidentify_wizard_templ.go (988 lines)", "shortDescription": {"text": "Very large file: web/templates/reidentify_wizard_templ.go (988 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-7bb6becf4d703b39", "name": "Very large file: web/templates/artist_field_templ.go (3820 lines)", "shortDescription": {"text": "Very large file: web/templates/artist_field_templ.go (3820 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-73d4ce4b957280de", "name": "Very large file: web/templates/settings_users_templ.go (2015 lines)", "shortDescription": {"text": "Very large file: web/templates/settings_users_templ.go (2015 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-7fd1d277c977ee0f", "name": "Very large file: web/templates/artist_images_tab_templ.go (1157 lines)", "shortDescription": {"text": "Very large file: web/templates/artist_images_tab_templ.go (1157 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-b16eccafcd631ab0", "name": "Very large file: web/templates/conflict_banner_templ.go (2104 lines)", "shortDescription": {"text": "Very large file: web/templates/conflict_banner_templ.go (2104 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-43e48ffec88094a4", "name": "Very large file: web/templates/settings_sections_templ.go (6510 lines)", "shortDescription": {"text": "Very large file: web/templates/settings_sections_templ.go (6510 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-a0b399191c10d523", "name": "Very large file: web/templates/dashboard_templ.go (2302 lines)", "shortDescription": {"text": "Very large file: web/templates/dashboard_templ.go (2302 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-5b5d53eabc0366f1", "name": "Very large file: web/templates/register_templ.go (1012 lines)", "shortDescription": {"text": "Very large file: web/templates/register_templ.go (1012 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-b5613ab6bc185588", "name": "Very large file: web/templates/layout_templ.go (958 lines)", "shortDescription": {"text": "Very large file: web/templates/layout_templ.go (958 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-af7c36044caa5235", "name": "Very large file: web/templates/guide_templ.go (2208 lines)", "shortDescription": {"text": "Very large file: web/templates/guide_templ.go (2208 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-827b65b141a00e9d", "name": "Very large file: web/templates/image_search_templ.go (2244 lines)", "shortDescription": {"text": "Very large file: web/templates/image_search_templ.go (2244 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-85b121660c604c57", "name": "Very large file: web/templates/preferences_templ.go (1097 lines)", "shortDescription": {"text": "Very large file: web/templates/preferences_templ.go (1097 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-ac7ad4bd283dcfbc", "name": "Very large file: web/templates/activity_templ.go (1397 lines)", "shortDescription": {"text": "Very large file: web/templates/activity_templ.go (1397 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-a9dd1159d03ecf2b", "name": "Very large file: web/templates/settings_auth_providers_templ.go (1977 lines)", "shortDescription": {"text": "Very large file: web/templates/settings_auth_providers_templ.go (1977 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-2d22b31aec2bb3e1", "name": "Very large file: web/templates/onboarding_templ.go (3868 lines)", "shortDescription": {"text": "Very large file: web/templates/onboarding_templ.go (3868 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-933ab872024feb5a", "name": "Very large file: web/templates/next/artist_detail_templ.go (2659 lines)", "shortDescription": {"text": "Very large file: web/templates/next/artist_detail_templ.go (2659 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-55aff343f4edee2e", "name": "Very large file: web/templates/next/artists_templ.go (1128 lines)", "shortDescription": {"text": "Very large file: web/templates/next/artists_templ.go (1128 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-c98328fe27bc202a", "name": "Very large file: web/templates/next/artists_table_templ.go (1148 lines)", "shortDescription": {"text": "Very large file: web/templates/next/artists_table_templ.go (1148 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-5f3c81d6a9a38693", "name": "Very large file: web/templates/next/prefs_drawer_templ.go (2083 lines)", "shortDescription": {"text": "Very large file: web/templates/next/prefs_drawer_templ.go (2083 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-9fa1de64cd82372f", "name": "Very large file: web/templates/next/dashboard_templ.go (2184 lines)", "shortDescription": {"text": "Very large file: web/templates/next/dashboard_templ.go (2184 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-c872ff44fc3f9825", "name": "Very large file: web/templates/next/artist_artwork_templ.go (1297 lines)", "shortDescription": {"text": "Very large file: web/templates/next/artist_artwork_templ.go (1297 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 738 placeholder/mock markers across 146 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-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-defd4c37703d5c6c", "name": "Commented-code block (7 lines) in tests/unit/artwork-modal.test.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/artwork-modal.test.js:9"}, "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-14aef444aef4894f", "name": "Commented-code block (6 lines) in tests/unit/prefs-drawer-bg-opacity.test.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/prefs-drawer-bg-opacity.test.js:4"}, "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-23b2e20b5d930c2d", "name": "Commented-code block (5 lines) in tests/unit/column-toggle-localstorage-guard.test.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/column-toggle-localstorage-guard.test.js:4"}, "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-be25e77e0298bb5f", "name": "Commented-code block (6 lines) in web/static/js/prefs-drawer.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/prefs-drawer.js:7"}, "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-18db599da0f62410", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/prefs-drawer.js:175", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/prefs-drawer.js:175"}, "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-b5f1fc8fba068f4c", "name": "Commented-code block (5 lines) in web/static/js/preferences.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/preferences.js:6"}, "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-a64bd8561306180e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/preferences.js:204", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/preferences.js:204"}, "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-fb6bb13c00e1f179", "name": "Commented-code block (7 lines) in web/static/js/conflict-gate.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/conflict-gate.js:4"}, "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-299b675ea7cf96ac", "name": "Commented-code block (7 lines) in web/static/js/sidebar.js:150", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/sidebar.js:150"}, "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-addb1d6bacd75df4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/sidebar.js:342", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/sidebar.js:342"}, "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-48e201877330b7e9", "name": "Commented-code block (12 lines) in web/static/js/polling.js:5", "shortDescription": {"text": "Commented-code block (12 lines) in web/static/js/polling.js:5"}, "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-e91337c98a6ef090", "name": "Commented-code block (6 lines) in web/static/js/filter-flyout.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/filter-flyout.js:5"}, "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-ac120aca7676c907", "name": "Commented-code block (5 lines) in web/static/js/sse.js:25", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/sse.js:25"}, "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-609416149aa438e9", "name": "Commented-code block (5 lines) in web/static/js/keyboard.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/keyboard.js:1"}, "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-e62b08b7befcb2ee", "name": "Commented-code block (7 lines) in web/static/js/settings/symlink.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/settings/symlink.js:1"}, "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-250f01896e045f85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/symlink.js:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/symlink.js:35"}, "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-f3c74c5e8082bfb6", "name": "Commented-code block (6 lines) in web/static/js/settings/base-path.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/base-path.js:1"}, "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-da1e6c503dccc401", "name": "Commented-code block (6 lines) in web/static/js/settings/library.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/library.js:1"}, "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-845e2c884836ab33", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/library.js:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/library.js:33"}, "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-9dedab802468e527", "name": "Commented-code block (5 lines) in web/static/js/settings/sortable-init.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/settings/sortable-init.js:1"}, "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-535999fa6c8b04aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/sortable-init.js:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/sortable-init.js:68"}, "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-ef9cc4390b8c5281", "name": "Commented-code block (6 lines) in web/static/js/settings/api-token.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/api-token.js:1"}, "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-2af83d1726bdec85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/api-token.js:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/api-token.js:36"}, "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-eae6e4fc80482328", "name": "Commented-code block (5 lines) in web/static/js/settings/search.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/settings/search.js:1"}, "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-cf92c93067c0f1d4", "name": "Commented-code block (6 lines) in web/static/js/settings/settings-export.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/settings-export.js:1"}, "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-fac12988ecdff6fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/settings-export.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/settings-export.js:31"}, "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-1531d7f7c18b04a2", "name": "Commented-code block (6 lines) in web/static/js/settings/rule-schedule.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/rule-schedule.js:1"}, "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-5b41ca271669457a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-schedule.js:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-schedule.js:47"}, "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-e9354bb24978dcce", "name": "Commented-code block (5 lines) in web/static/js/settings/tabs.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/settings/tabs.js:6"}, "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-442d4a12efa67d8d", "name": "Commented-code block (6 lines) in web/static/js/settings/rule-toggle.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/rule-toggle.js:1"}, "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-9ad3726618eb519b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-toggle.js:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-toggle.js:50"}, "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-52d92f79e5793456", "name": "Commented-code block (8 lines) in web/static/js/settings/updates.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in web/static/js/settings/updates.js:1"}, "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-e5fa1a0f5547e579", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/updates.js:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/updates.js:72"}, "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-20c2077fe80e3ad2", "name": "Commented-code block (7 lines) in web/static/js/settings/platform-debug.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/settings/platform-debug.js:1"}, "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-444eb55cb42a2a7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/platform-debug.js:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/platform-debug.js:34"}, "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-14f130fd4d06d6a2", "name": "Commented-code block (7 lines) in web/static/js/settings/connection-feature-toggle.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/settings/connection-feature-toggle.js:1"}, "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-b5cddd2cb9e9e1bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connection-feature-toggle.js:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connection-feature-toggle.js:63"}, "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-d7154786562aa2fd", "name": "Commented-code block (5 lines) in web/static/js/settings/notif-badges.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/settings/notif-badges.js:6"}, "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-bb56f51114d9d3c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/notif-badges.js:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/notif-badges.js:59"}, "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-9e0e4c9e51636ae1", "name": "Commented-code block (5 lines) in web/static/js/settings/image-cache.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/settings/image-cache.js:1"}, "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-732b33cb2a7bed08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/image-cache.js:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/image-cache.js:43"}, "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-d630de7ae08fe808", "name": "Commented-code block (6 lines) in web/static/js/settings/log-viewer.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/log-viewer.js:1"}, "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-fd9bd3b673f8114e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/log-viewer.js:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/log-viewer.js:108"}, "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-3a10e42b6d9e5350", "name": "Commented-code block (6 lines) in web/static/js/settings/romanization-fallback.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/romanization-fallback.js:1"}, "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-6ead99927f126f4f", "name": "Commented-code block (6 lines) in web/static/js/settings/maintenance.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/maintenance.js:1"}, "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-c9a8c3dd0a916461", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/maintenance.js:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/maintenance.js:24"}, "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-b38ccc73e116a85d", "name": "Commented-code block (7 lines) in web/static/js/settings/connections.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/settings/connections.js:1"}, "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-f355152869208811", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connections.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connections.js:31"}, "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-97a23ff17636e914", "name": "Commented-code block (6 lines) in web/static/js/settings/profile-naming.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/profile-naming.js:1"}, "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-c1c4b58b295e034f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/profile-naming.js:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/profile-naming.js:116"}, "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-3c7ec4ee4f67556f", "name": "Commented-code block (6 lines) in web/static/js/settings/logging.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/settings/logging.js:1"}, "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-9861afe2bd9f79c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/logging.js:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/logging.js:111"}, "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-dd91c201f2a50c89", "name": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-manage.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-manage.js:5"}, "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-3e914899a9740685", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/fanart-manage.js:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/fanart-manage.js:29"}, "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-e079a9c7a4c05d92", "name": "Commented-code block (6 lines) in web/static/js/artist-detail/violations-sync.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/artist-detail/violations-sync.js:1"}, "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-10f34b6904678ca1", "name": "Commented-code block (6 lines) in web/static/js/artist-detail/members-apply.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in web/static/js/artist-detail/members-apply.js:1"}, "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-357c624669a7e0ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/members-apply.js:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/members-apply.js:43"}, "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-34bd5691599f827a", "name": "Commented-code block (5 lines) in web/static/js/artist-detail/field-lock-save.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/artist-detail/field-lock-save.js:4"}, "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-02db63365e8d8f47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/field-lock-save.js:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/field-lock-save.js:62"}, "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-31be570336dba36f", "name": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-slideshow.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-slideshow.js:6"}, "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-b92345a8aa5f4ab1", "name": "Commented-code block (5 lines) in web/static/js/artist-detail/lightbox.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/artist-detail/lightbox.js:4"}, "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-e623b0f3cee323be", "name": "Commented-code block (8 lines) in web/static/js/artist-detail/artwork-modal.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in web/static/js/artist-detail/artwork-modal.js:1"}, "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-2cbfa1a6404f133d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/artwork-modal.js:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/artwork-modal.js:101"}, "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}}]}}, "automationDetails": {"id": "repobility/20660"}, "properties": {"repository": "sydlexius/stillwater", "repoUrl": "https://github.com/sydlexius/stillwater", "branch": "main"}, "results": [{"ruleId": "scanner-db63119d125afad3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/static/js/htmx.min.js:1"}, "properties": {"repobilityId": "97302910f5544207", "scanner": "scanner-primary", "fingerprint": "db63119d125afad3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1927e0ef2b485009", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "1927e0ef2b485009", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "internal/api/openapi.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7debdbbf092a1af7", "level": "warning", "message": {"text": "Privileged port 59 in use"}, "properties": {"repobilityId": "6c14a9dab4958e92", "scanner": "scanner-primary", "fingerprint": "7debdbbf092a1af7", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "internal/api/openapi.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a75178bc06be0fc8", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "a75178bc06be0fc8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mutation.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0178361dcfaeac02", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "0178361dcfaeac02", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "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-bd2b685c5d124f65", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in internal/api/handlers_docs.go:36"}, "properties": {"repobilityId": "ed4540341e986178", "scanner": "scanner-primary", "fingerprint": "bd2b685c5d124f65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "internal/api/handlers_docs.go"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-718722579203adce", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in web/static/js/htmx.min.js:1"}, "properties": {"repobilityId": "fae884793845288c", "scanner": "scanner-primary", "fingerprint": "718722579203adce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-703f011ee0cefd64", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in web/static/js/htmx.min.js:1"}, "properties": {"repobilityId": "603d0de2438b6435", "scanner": "scanner-primary", "fingerprint": "703f011ee0cefd64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d991a07b2458598", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in web/static/js/htmx.min.js:1"}, "properties": {"repobilityId": "2bc6996ebe530f5c", "scanner": "scanner-primary", "fingerprint": "8d991a07b2458598", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-180feefa04a759d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/driver.min.js:2"}, "properties": {"repobilityId": "4b7b8984b638ddd9", "scanner": "scanner-primary", "fingerprint": "180feefa04a759d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/driver.min.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-ae1b4d0a09955a39", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/cropper.min.js:10"}, "properties": {"repobilityId": "d76ecfe32da54049", "scanner": "scanner-primary", "fingerprint": "ae1b4d0a09955a39", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/cropper.min.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-871a27e85d8d896d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/filter-flyout.js:146"}, "properties": {"repobilityId": "14bde75db70209db", "scanner": "scanner-primary", "fingerprint": "871a27e85d8d896d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/filter-flyout.js"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-6af0cddf7836a151", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/help.js:85"}, "properties": {"repobilityId": "12ecb268c0acdd30", "scanner": "scanner-primary", "fingerprint": "6af0cddf7836a151", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/help.js"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-ec802cd9c3bbe295", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/library.js:85"}, "properties": {"repobilityId": "91a40b7bf17b84a0", "scanner": "scanner-primary", "fingerprint": "ec802cd9c3bbe295", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/library.js"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-7dafa044b667fd8b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/settings-export.js:63"}, "properties": {"repobilityId": "9c61a7b75b44da23", "scanner": "scanner-primary", "fingerprint": "7dafa044b667fd8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/settings-export.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-7521dcd40345ec6c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/updates.js:773"}, "properties": {"repobilityId": "7812e922834e626a", "scanner": "scanner-primary", "fingerprint": "7521dcd40345ec6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/updates.js"}, "region": {"startLine": 773}}}]}, {"ruleId": "scanner-79f537743b1961ad", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/log-viewer.js:213"}, "properties": {"repobilityId": "ec0b267d1a4a421c", "scanner": "scanner-primary", "fingerprint": "79f537743b1961ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/log-viewer.js"}, "region": {"startLine": 213}}}]}, {"ruleId": "scanner-525aa95a837bb8ce", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/maintenance.js:38"}, "properties": {"repobilityId": "663db33e470291ef", "scanner": "scanner-primary", "fingerprint": "525aa95a837bb8ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/maintenance.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-5029b6fd0d80ff8d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/settings/profile-naming.js:78"}, "properties": {"repobilityId": "b26958e023ba9dad", "scanner": "scanner-primary", "fingerprint": "5029b6fd0d80ff8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/settings/profile-naming.js"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-92254e046364fe1a", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in web/static/js/artist-detail/members-apply.js:53"}, "properties": {"repobilityId": "e95568471436ef5f", "scanner": "scanner-primary", "fingerprint": "92254e046364fe1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/artist-detail/members-apply.js"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-750c4d5fe812dd5d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/static/js/artist-detail/artwork-modal.js:329"}, "properties": {"repobilityId": "d02a2db50c5512b1", "scanner": "scanner-primary", "fingerprint": "750c4d5fe812dd5d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/static/js/artist-detail/artwork-modal.js"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-2a738adc2dc307aa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/progress_pill_templ.go:286"}, "properties": {"repobilityId": "7d53605f2ccc25f7", "scanner": "scanner-primary", "fingerprint": "2a738adc2dc307aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/components/progress_pill_templ.go"}, "region": {"startLine": 286}}}]}, {"ruleId": "scanner-92d82d1cc0b52e95", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/field_provider_modal_templ.go:44"}, "properties": {"repobilityId": "f88485d857f85fdf", "scanner": "scanner-primary", "fingerprint": "92d82d1cc0b52e95", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/components/field_provider_modal_templ.go"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-428b5baeda38ed4d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in web/components/language_picker_templ.go:316"}, "properties": {"repobilityId": "f4cf325c7c9fb972", "scanner": "scanner-primary", "fingerprint": "428b5baeda38ed4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/components/language_picker_templ.go"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-b6aaf403b9c8ec6f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b5929a4ce62a2011", "scanner": "scanner-primary", "fingerprint": "b6aaf403b9c8ec6f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-nightly.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65a716a27d2be993", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "3133a88ce98acc76", "scanner": "scanner-primary", "fingerprint": "65a716a27d2be993", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scorecard.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64192a3c67110d01", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "87338a8bfcb6f435", "scanner": "scanner-primary", "fingerprint": "64192a3c67110d01", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee252b4a1468bf6e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8410a23fe51251b5", "scanner": "scanner-primary", "fingerprint": "ee252b4a1468bf6e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-448d8837178ae57a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "13af6451e15656fc", "scanner": "scanner-primary", "fingerprint": "448d8837178ae57a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pages.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a0afb468e89e566", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "066944deed25cf78", "scanner": "scanner-primary", "fingerprint": "6a0afb468e89e566", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-471fc65bcb1e51af", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0cff08baf8e3733a", "scanner": "scanner-primary", "fingerprint": "471fc65bcb1e51af", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-merge.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0233c02539647de", "level": "note", "message": {"text": "Very large file: internal/library/service_test.go (2036 lines)"}, "properties": {"repobilityId": "c2ec787a8376c91d", "scanner": "scanner-primary", "fingerprint": "b0233c02539647de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c8fc5754bb8b3927", "level": "note", "message": {"text": "Very large file: internal/provider/orchestrator.go (1592 lines)"}, "properties": {"repobilityId": "f92df05078145eb5", "scanner": "scanner-primary", "fingerprint": "c8fc5754bb8b3927", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2096f73c71e98112", "level": "note", "message": {"text": "Very large file: internal/provider/orchestrator_test.go (3298 lines)"}, "properties": {"repobilityId": "ef895f0001baf0c9", "scanner": "scanner-primary", "fingerprint": "2096f73c71e98112", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a6bd6ecde14f8fa4", "level": "note", "message": {"text": "Very large file: internal/provider/musicbrainz/musicbrainz_test.go (2476 lines)"}, "properties": {"repobilityId": "eae2bb648d172e6f", "scanner": "scanner-primary", "fingerprint": "a6bd6ecde14f8fa4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-927d6d234c7306e4", "level": "note", "message": {"text": "Very large file: internal/updater/updater_test.go (2178 lines)"}, "properties": {"repobilityId": "7102e301f897419c", "scanner": "scanner-primary", "fingerprint": "927d6d234c7306e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39b47729c217a271", "level": "note", "message": {"text": "Very large file: internal/updater/updater.go (1597 lines)"}, "properties": {"repobilityId": "5fb3db380e8f5363", "scanner": "scanner-primary", "fingerprint": "39b47729c217a271", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ed2e216c391089fe", "level": "note", "message": {"text": "Very large file: internal/api/handlers.go (1469 lines)"}, "properties": {"repobilityId": "9a8aadc2b9018be2", "scanner": "scanner-primary", "fingerprint": "ed2e216c391089fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3de4d2f8095cf5ff", "level": "note", "message": {"text": "Very large file: internal/api/handlers_image.go (2346 lines)"}, "properties": {"repobilityId": "efe6ae19727c92cf", "scanner": "scanner-primary", "fingerprint": "3de4d2f8095cf5ff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a6bb67db08403f86", "level": "note", "message": {"text": "Very large file: internal/api/handlers_connection_library.go (1623 lines)"}, "properties": {"repobilityId": "3d8193d5b73b7f77", "scanner": "scanner-primary", "fingerprint": "a6bb67db08403f86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99bca41aa59a6558", "level": "note", "message": {"text": "Very large file: internal/api/handlers_history_test.go (1848 lines)"}, "properties": {"repobilityId": "b8b020f51e59f669", "scanner": "scanner-primary", "fingerprint": "99bca41aa59a6558", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c4e5bd34e729d78", "level": "note", "message": {"text": "Very large file: internal/api/handlers_updater_test.go (1534 lines)"}, "properties": {"repobilityId": "7ba31c81b849af75", "scanner": "scanner-primary", "fingerprint": "5c4e5bd34e729d78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ada63d9642d8c3d2", "level": "note", "message": {"text": "Very large file: internal/api/handlers_connection_library_test.go (3891 lines)"}, "properties": {"repobilityId": "95e505fa8cb65950", "scanner": "scanner-primary", "fingerprint": "ada63d9642d8c3d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4c99b2fb70243fb8", "level": "note", "message": {"text": "Very large file: internal/api/handlers_image_test.go (2886 lines)"}, "properties": {"repobilityId": "2851fcd22755bfe5", "scanner": "scanner-primary", "fingerprint": "4c99b2fb70243fb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d988fc6894053c5", "level": "note", "message": {"text": "Very large file: internal/api/handlers_preferences_test.go (1778 lines)"}, "properties": {"repobilityId": "c350c96e9fc3ee50", "scanner": "scanner-primary", "fingerprint": "5d988fc6894053c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-01cd352cda6d141d", "level": "note", "message": {"text": "Very large file: internal/api/router.go (972 lines)"}, "properties": {"repobilityId": "f81797da97473af9", "scanner": "scanner-primary", "fingerprint": "01cd352cda6d141d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0429f6f8aadffdb4", "level": "note", "message": {"text": "Very large file: internal/connection/jellyfin/client_test.go (1918 lines)"}, "properties": {"repobilityId": "ca37e2aac4d40b36", "scanner": "scanner-primary", "fingerprint": "0429f6f8aadffdb4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b4ee1550d43ea22", "level": "note", "message": {"text": "Very large file: internal/connection/emby/client_test.go (1877 lines)"}, "properties": {"repobilityId": "a7f049a853b3bd05", "scanner": "scanner-primary", "fingerprint": "3b4ee1550d43ea22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-95992862073f24e0", "level": "note", "message": {"text": "Very large file: internal/artist/service.go (2156 lines)"}, "properties": {"repobilityId": "a1f95a098e68b57d", "scanner": "scanner-primary", "fingerprint": "95992862073f24e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fa5b157c08357122", "level": "note", "message": {"text": "Very large file: internal/scraper/executor_test.go (1500 lines)"}, "properties": {"repobilityId": "9ef121d5cd877b1d", "scanner": "scanner-primary", "fingerprint": "fa5b157c08357122", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1f694eced55f314c", "level": "note", "message": {"text": "Very large file: internal/database/migrate_test.go (1807 lines)"}, "properties": {"repobilityId": "8cfaac005113054c", "scanner": "scanner-primary", "fingerprint": "1f694eced55f314c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d290de8bb76f6dec", "level": "note", "message": {"text": "Very large file: internal/rule/checkers_test.go (2261 lines)"}, "properties": {"repobilityId": "07b41a221779516d", "scanner": "scanner-primary", "fingerprint": "d290de8bb76f6dec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2e4fd508e271cc9", "level": "note", "message": {"text": "Very large file: internal/rule/fixer.go (1933 lines)"}, "properties": {"repobilityId": "dac0935632d62e67", "scanner": "scanner-primary", "fingerprint": "b2e4fd508e271cc9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-560b68d462776a46", "level": "note", "message": {"text": "Very large file: internal/rule/fixers.go (1624 lines)"}, "properties": {"repobilityId": "17a8d508292e967f", "scanner": "scanner-primary", "fingerprint": "560b68d462776a46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e329b5f8cc8cbb6", "level": "note", "message": {"text": "Very large file: internal/rule/service_test.go (3594 lines)"}, "properties": {"repobilityId": "3fd8cf8f1f3e1be2", "scanner": "scanner-primary", "fingerprint": "5e329b5f8cc8cbb6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-afbc46cd278ba04c", "level": "note", "message": {"text": "Very large file: internal/rule/fixer_test.go (3301 lines)"}, "properties": {"repobilityId": "61f5f6c9e80506e6", "scanner": "scanner-primary", "fingerprint": "afbc46cd278ba04c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e668c5b9d2cefc03", "level": "note", "message": {"text": "Very large file: internal/rule/service.go (2010 lines)"}, "properties": {"repobilityId": "d4505165b8326431", "scanner": "scanner-primary", "fingerprint": "e668c5b9d2cefc03", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ed30d94bd98a540", "level": "note", "message": {"text": "Very large file: internal/scanner/scanner_test.go (2011 lines)"}, "properties": {"repobilityId": "2652ab687776e934", "scanner": "scanner-primary", "fingerprint": "2ed30d94bd98a540", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7ed667471c88c5ac", "level": "note", "message": {"text": "Very large file: scripts/smoke.sh (1956 lines)"}, "properties": {"repobilityId": "f23f13ba963cae4d", "scanner": "scanner-primary", "fingerprint": "7ed667471c88c5ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a97b36283c425011", "level": "note", "message": {"text": "Very large file: cmd/stillwater/main.go (1517 lines)"}, "properties": {"repobilityId": "3aea7d237ebd3b9e", "scanner": "scanner-primary", "fingerprint": "a97b36283c425011", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b0733d408d8d21e4", "level": "note", "message": {"text": "Very large file: cmd/gen-settings-reference/main.go (1774 lines)"}, "properties": {"repobilityId": "3179f461135ba613", "scanner": "scanner-primary", "fingerprint": "b0733d408d8d21e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fb62442c0f31c818", "level": "note", "message": {"text": "Very large file: cmd/gen-settings-reference/main_test.go (1764 lines)"}, "properties": {"repobilityId": "9b3d14152188c5ce", "scanner": "scanner-primary", "fingerprint": "fb62442c0f31c818", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-33774610f74cf519", "level": "note", "message": {"text": "Very large file: web/components/icon_templ.go (1708 lines)"}, "properties": {"repobilityId": "57bdd50fd6a5ed16", "scanner": "scanner-primary", "fingerprint": "33774610f74cf519", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-97257bdf43d4ac2a", "level": "note", "message": {"text": "Very large file: web/components/filter_flyout_templ.go (1479 lines)"}, "properties": {"repobilityId": "634d0225061015bf", "scanner": "scanner-primary", "fingerprint": "97257bdf43d4ac2a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-70f5387e9634503d", "level": "note", "message": {"text": "Very large file: web/templates/settings_templ.go (10411 lines)"}, "properties": {"repobilityId": "f16a3133c5a66b60", "scanner": "scanner-primary", "fingerprint": "70f5387e9634503d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f56f2da110c2d13", "level": "note", "message": {"text": "Very large file: web/templates/artist_violations_tab_templ.go (1098 lines)"}, "properties": {"repobilityId": "489703e39aef2057", "scanner": "scanner-primary", "fingerprint": "8f56f2da110c2d13", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eb30e412e7d0bb09", "level": "note", "message": {"text": "Very large file: web/templates/artist_detail_templ.go (4993 lines)"}, "properties": {"repobilityId": "6aa7987461f26c9c", "scanner": "scanner-primary", "fingerprint": "eb30e412e7d0bb09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b343fb01d229e01f", "level": "note", "message": {"text": "Very large file: web/templates/artists_templ.go (3953 lines)"}, "properties": {"repobilityId": "064db5cdc9bbd4c4", "scanner": "scanner-primary", "fingerprint": "b343fb01d229e01f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6e808ed3b81f9f25", "level": "note", "message": {"text": "Very large file: web/templates/artist_refresh_templ.go (1178 lines)"}, "properties": {"repobilityId": "785c14c7d2437ec5", "scanner": "scanner-primary", "fingerprint": "6e808ed3b81f9f25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1c570dd543a5068e", "level": "note", "message": {"text": "Very large file: web/templates/compliance_templ.go (1966 lines)"}, "properties": {"repobilityId": "93dde138f17f1e9e", "scanner": "scanner-primary", "fingerprint": "1c570dd543a5068e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c17c1ac22a15ddaf", "level": "note", "message": {"text": "Very large file: web/templates/reidentify_wizard_templ.go (988 lines)"}, "properties": {"repobilityId": "258cb8f7fd157b5d", "scanner": "scanner-primary", "fingerprint": "c17c1ac22a15ddaf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7bb6becf4d703b39", "level": "note", "message": {"text": "Very large file: web/templates/artist_field_templ.go (3820 lines)"}, "properties": {"repobilityId": "de2145a909a704cb", "scanner": "scanner-primary", "fingerprint": "7bb6becf4d703b39", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-73d4ce4b957280de", "level": "note", "message": {"text": "Very large file: web/templates/settings_users_templ.go (2015 lines)"}, "properties": {"repobilityId": "fa2b2cbacc96c9a1", "scanner": "scanner-primary", "fingerprint": "73d4ce4b957280de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7fd1d277c977ee0f", "level": "note", "message": {"text": "Very large file: web/templates/artist_images_tab_templ.go (1157 lines)"}, "properties": {"repobilityId": "5babb6b602a756b4", "scanner": "scanner-primary", "fingerprint": "7fd1d277c977ee0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b16eccafcd631ab0", "level": "note", "message": {"text": "Very large file: web/templates/conflict_banner_templ.go (2104 lines)"}, "properties": {"repobilityId": "0274eb0c869cef6e", "scanner": "scanner-primary", "fingerprint": "b16eccafcd631ab0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43e48ffec88094a4", "level": "note", "message": {"text": "Very large file: web/templates/settings_sections_templ.go (6510 lines)"}, "properties": {"repobilityId": "c568ba71878012e3", "scanner": "scanner-primary", "fingerprint": "43e48ffec88094a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a0b399191c10d523", "level": "note", "message": {"text": "Very large file: web/templates/dashboard_templ.go (2302 lines)"}, "properties": {"repobilityId": "64d607e966d0b901", "scanner": "scanner-primary", "fingerprint": "a0b399191c10d523", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5b5d53eabc0366f1", "level": "note", "message": {"text": "Very large file: web/templates/register_templ.go (1012 lines)"}, "properties": {"repobilityId": "5003f6bc719e7e2d", "scanner": "scanner-primary", "fingerprint": "5b5d53eabc0366f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b5613ab6bc185588", "level": "note", "message": {"text": "Very large file: web/templates/layout_templ.go (958 lines)"}, "properties": {"repobilityId": "fb0aea8d1900dd44", "scanner": "scanner-primary", "fingerprint": "b5613ab6bc185588", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-af7c36044caa5235", "level": "note", "message": {"text": "Very large file: web/templates/guide_templ.go (2208 lines)"}, "properties": {"repobilityId": "75cd5b9bc27796cf", "scanner": "scanner-primary", "fingerprint": "af7c36044caa5235", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-827b65b141a00e9d", "level": "note", "message": {"text": "Very large file: web/templates/image_search_templ.go (2244 lines)"}, "properties": {"repobilityId": "21267dd30c2fa50d", "scanner": "scanner-primary", "fingerprint": "827b65b141a00e9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-85b121660c604c57", "level": "note", "message": {"text": "Very large file: web/templates/preferences_templ.go (1097 lines)"}, "properties": {"repobilityId": "ca557ff844b3afda", "scanner": "scanner-primary", "fingerprint": "85b121660c604c57", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ac7ad4bd283dcfbc", "level": "note", "message": {"text": "Very large file: web/templates/activity_templ.go (1397 lines)"}, "properties": {"repobilityId": "5db13e982e0548b0", "scanner": "scanner-primary", "fingerprint": "ac7ad4bd283dcfbc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a9dd1159d03ecf2b", "level": "note", "message": {"text": "Very large file: web/templates/settings_auth_providers_templ.go (1977 lines)"}, "properties": {"repobilityId": "a6dc924d1827f100", "scanner": "scanner-primary", "fingerprint": "a9dd1159d03ecf2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d22b31aec2bb3e1", "level": "note", "message": {"text": "Very large file: web/templates/onboarding_templ.go (3868 lines)"}, "properties": {"repobilityId": "3a9010385b937743", "scanner": "scanner-primary", "fingerprint": "2d22b31aec2bb3e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-933ab872024feb5a", "level": "note", "message": {"text": "Very large file: web/templates/next/artist_detail_templ.go (2659 lines)"}, "properties": {"repobilityId": "1020a896b7470692", "scanner": "scanner-primary", "fingerprint": "933ab872024feb5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-55aff343f4edee2e", "level": "note", "message": {"text": "Very large file: web/templates/next/artists_templ.go (1128 lines)"}, "properties": {"repobilityId": "0431139c30ebf75a", "scanner": "scanner-primary", "fingerprint": "55aff343f4edee2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c98328fe27bc202a", "level": "note", "message": {"text": "Very large file: web/templates/next/artists_table_templ.go (1148 lines)"}, "properties": {"repobilityId": "e90dc6f7c0d377c6", "scanner": "scanner-primary", "fingerprint": "c98328fe27bc202a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f3c81d6a9a38693", "level": "note", "message": {"text": "Very large file: web/templates/next/prefs_drawer_templ.go (2083 lines)"}, "properties": {"repobilityId": "6006e2afa36455c5", "scanner": "scanner-primary", "fingerprint": "5f3c81d6a9a38693", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9fa1de64cd82372f", "level": "note", "message": {"text": "Very large file: web/templates/next/dashboard_templ.go (2184 lines)"}, "properties": {"repobilityId": "808b0937b7e8a407", "scanner": "scanner-primary", "fingerprint": "9fa1de64cd82372f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c872ff44fc3f9825", "level": "note", "message": {"text": "Very large file: web/templates/next/artist_artwork_templ.go (1297 lines)"}, "properties": {"repobilityId": "fc59f372fbfef68a", "scanner": "scanner-primary", "fingerprint": "c872ff44fc3f9825", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "c5b5e835259803cd", "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": "3cdb10ad5dc8305d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d57546f398b922b9", "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": "7b3cd9c431d81306", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-defd4c37703d5c6c", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/artwork-modal.test.js:9"}, "properties": {"repobilityId": "681e5d2ef129bc5b", "scanner": "scanner-primary", "fingerprint": "defd4c37703d5c6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14aef444aef4894f", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/prefs-drawer-bg-opacity.test.js:4"}, "properties": {"repobilityId": "5947a1446aea0678", "scanner": "scanner-primary", "fingerprint": "14aef444aef4894f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23b2e20b5d930c2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/column-toggle-localstorage-guard.test.js:4"}, "properties": {"repobilityId": "0d0a5e0214f6d206", "scanner": "scanner-primary", "fingerprint": "23b2e20b5d930c2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be25e77e0298bb5f", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/prefs-drawer.js:7"}, "properties": {"repobilityId": "a401824b41c3a5dc", "scanner": "scanner-primary", "fingerprint": "be25e77e0298bb5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18db599da0f62410", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/prefs-drawer.js:175"}, "properties": {"repobilityId": "529b30e5bc5407ec", "scanner": "scanner-primary", "fingerprint": "18db599da0f62410", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5f1fc8fba068f4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/preferences.js:6"}, "properties": {"repobilityId": "cd8dcdb519922763", "scanner": "scanner-primary", "fingerprint": "b5f1fc8fba068f4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a64bd8561306180e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/preferences.js:204"}, "properties": {"repobilityId": "5c39ca3b4eed4822", "scanner": "scanner-primary", "fingerprint": "a64bd8561306180e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb6bb13c00e1f179", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/conflict-gate.js:4"}, "properties": {"repobilityId": "42fd425ddd2074ea", "scanner": "scanner-primary", "fingerprint": "fb6bb13c00e1f179", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-299b675ea7cf96ac", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/sidebar.js:150"}, "properties": {"repobilityId": "aad317785cc0e48c", "scanner": "scanner-primary", "fingerprint": "299b675ea7cf96ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-addb1d6bacd75df4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/sidebar.js:342"}, "properties": {"repobilityId": "86d4a4d41d649141", "scanner": "scanner-primary", "fingerprint": "addb1d6bacd75df4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48e201877330b7e9", "level": "none", "message": {"text": "Commented-code block (12 lines) in web/static/js/polling.js:5"}, "properties": {"repobilityId": "bd455fc60cae2583", "scanner": "scanner-primary", "fingerprint": "48e201877330b7e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e91337c98a6ef090", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/filter-flyout.js:5"}, "properties": {"repobilityId": "155b23ef38711f0d", "scanner": "scanner-primary", "fingerprint": "e91337c98a6ef090", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac120aca7676c907", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/sse.js:25"}, "properties": {"repobilityId": "12db82487884c4dc", "scanner": "scanner-primary", "fingerprint": "ac120aca7676c907", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-609416149aa438e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/keyboard.js:1"}, "properties": {"repobilityId": "08a2549db640ab7e", "scanner": "scanner-primary", "fingerprint": "609416149aa438e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e62b08b7befcb2ee", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/settings/symlink.js:1"}, "properties": {"repobilityId": "424ed8571268b8d2", "scanner": "scanner-primary", "fingerprint": "e62b08b7befcb2ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-250f01896e045f85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/symlink.js:35"}, "properties": {"repobilityId": "f01ef4b141611da2", "scanner": "scanner-primary", "fingerprint": "250f01896e045f85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3c74c5e8082bfb6", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/base-path.js:1"}, "properties": {"repobilityId": "1279ec0f7998a9a2", "scanner": "scanner-primary", "fingerprint": "f3c74c5e8082bfb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da1e6c503dccc401", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/library.js:1"}, "properties": {"repobilityId": "d3613440ccd06237", "scanner": "scanner-primary", "fingerprint": "da1e6c503dccc401", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-845e2c884836ab33", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/library.js:33"}, "properties": {"repobilityId": "5790f9227aaaebc7", "scanner": "scanner-primary", "fingerprint": "845e2c884836ab33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9dedab802468e527", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/settings/sortable-init.js:1"}, "properties": {"repobilityId": "3b2d9cbd2e829098", "scanner": "scanner-primary", "fingerprint": "9dedab802468e527", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-535999fa6c8b04aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/sortable-init.js:68"}, "properties": {"repobilityId": "baf8af908d2ba12d", "scanner": "scanner-primary", "fingerprint": "535999fa6c8b04aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef9cc4390b8c5281", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/api-token.js:1"}, "properties": {"repobilityId": "0116751f08468cf1", "scanner": "scanner-primary", "fingerprint": "ef9cc4390b8c5281", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2af83d1726bdec85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/api-token.js:36"}, "properties": {"repobilityId": "8ead113f5d6bd244", "scanner": "scanner-primary", "fingerprint": "2af83d1726bdec85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eae6e4fc80482328", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/settings/search.js:1"}, "properties": {"repobilityId": "4bd4e0d1ecc3a947", "scanner": "scanner-primary", "fingerprint": "eae6e4fc80482328", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf92c93067c0f1d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/settings-export.js:1"}, "properties": {"repobilityId": "8d43865112c3b2cf", "scanner": "scanner-primary", "fingerprint": "cf92c93067c0f1d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fac12988ecdff6fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/settings-export.js:31"}, "properties": {"repobilityId": "40ef33099d3d0877", "scanner": "scanner-primary", "fingerprint": "fac12988ecdff6fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1531d7f7c18b04a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/rule-schedule.js:1"}, "properties": {"repobilityId": "c0c76928d9e491fd", "scanner": "scanner-primary", "fingerprint": "1531d7f7c18b04a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b41ca271669457a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-schedule.js:47"}, "properties": {"repobilityId": "d3518288a49ee959", "scanner": "scanner-primary", "fingerprint": "5b41ca271669457a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9354bb24978dcce", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/settings/tabs.js:6"}, "properties": {"repobilityId": "31f1d7975764f893", "scanner": "scanner-primary", "fingerprint": "e9354bb24978dcce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-442d4a12efa67d8d", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/rule-toggle.js:1"}, "properties": {"repobilityId": "bef43fcfd41fb9da", "scanner": "scanner-primary", "fingerprint": "442d4a12efa67d8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ad3726618eb519b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/rule-toggle.js:50"}, "properties": {"repobilityId": "3092f06815c3642a", "scanner": "scanner-primary", "fingerprint": "9ad3726618eb519b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52d92f79e5793456", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/static/js/settings/updates.js:1"}, "properties": {"repobilityId": "98753f34819dd8db", "scanner": "scanner-primary", "fingerprint": "52d92f79e5793456", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5fa1a0f5547e579", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/updates.js:72"}, "properties": {"repobilityId": "661f230e3e1b7eb7", "scanner": "scanner-primary", "fingerprint": "e5fa1a0f5547e579", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20c2077fe80e3ad2", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/settings/platform-debug.js:1"}, "properties": {"repobilityId": "0c9b769f954e1e57", "scanner": "scanner-primary", "fingerprint": "20c2077fe80e3ad2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-444eb55cb42a2a7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/platform-debug.js:34"}, "properties": {"repobilityId": "ca24faf047ab96ad", "scanner": "scanner-primary", "fingerprint": "444eb55cb42a2a7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14f130fd4d06d6a2", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/settings/connection-feature-toggle.js:1"}, "properties": {"repobilityId": "eb99d01a339e70f5", "scanner": "scanner-primary", "fingerprint": "14f130fd4d06d6a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5cddd2cb9e9e1bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connection-feature-toggle.js:63"}, "properties": {"repobilityId": "0d28e709a0a452c0", "scanner": "scanner-primary", "fingerprint": "b5cddd2cb9e9e1bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7154786562aa2fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/settings/notif-badges.js:6"}, "properties": {"repobilityId": "03f1d5f0cd84a217", "scanner": "scanner-primary", "fingerprint": "d7154786562aa2fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb56f51114d9d3c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/notif-badges.js:59"}, "properties": {"repobilityId": "5387c370f9ccf3e1", "scanner": "scanner-primary", "fingerprint": "bb56f51114d9d3c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e0e4c9e51636ae1", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/settings/image-cache.js:1"}, "properties": {"repobilityId": "941656b720383e01", "scanner": "scanner-primary", "fingerprint": "9e0e4c9e51636ae1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-732b33cb2a7bed08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/image-cache.js:43"}, "properties": {"repobilityId": "f6a1c8c17569e630", "scanner": "scanner-primary", "fingerprint": "732b33cb2a7bed08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d630de7ae08fe808", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/log-viewer.js:1"}, "properties": {"repobilityId": "668579762aa36141", "scanner": "scanner-primary", "fingerprint": "d630de7ae08fe808", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd9bd3b673f8114e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/log-viewer.js:108"}, "properties": {"repobilityId": "4b998c8de92cb449", "scanner": "scanner-primary", "fingerprint": "fd9bd3b673f8114e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a10e42b6d9e5350", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/romanization-fallback.js:1"}, "properties": {"repobilityId": "e7144b2e90c5a85a", "scanner": "scanner-primary", "fingerprint": "3a10e42b6d9e5350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ead99927f126f4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/maintenance.js:1"}, "properties": {"repobilityId": "b4257ecd3e60ac68", "scanner": "scanner-primary", "fingerprint": "6ead99927f126f4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9a8c3dd0a916461", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/maintenance.js:24"}, "properties": {"repobilityId": "b7d61a404c813560", "scanner": "scanner-primary", "fingerprint": "c9a8c3dd0a916461", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b38ccc73e116a85d", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/settings/connections.js:1"}, "properties": {"repobilityId": "06a14bc7d952884b", "scanner": "scanner-primary", "fingerprint": "b38ccc73e116a85d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f355152869208811", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/connections.js:31"}, "properties": {"repobilityId": "3db80e734d72e39b", "scanner": "scanner-primary", "fingerprint": "f355152869208811", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-97a23ff17636e914", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/profile-naming.js:1"}, "properties": {"repobilityId": "c7f32a2d268cd896", "scanner": "scanner-primary", "fingerprint": "97a23ff17636e914", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1c4b58b295e034f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/profile-naming.js:116"}, "properties": {"repobilityId": "56d3ae9fb7cf4eba", "scanner": "scanner-primary", "fingerprint": "c1c4b58b295e034f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c7ec4ee4f67556f", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/settings/logging.js:1"}, "properties": {"repobilityId": "6c9857f51b9abb1e", "scanner": "scanner-primary", "fingerprint": "3c7ec4ee4f67556f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9861afe2bd9f79c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/settings/logging.js:111"}, "properties": {"repobilityId": "74d24bacc131c224", "scanner": "scanner-primary", "fingerprint": "9861afe2bd9f79c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd91c201f2a50c89", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-manage.js:5"}, "properties": {"repobilityId": "a60023d98dbb288b", "scanner": "scanner-primary", "fingerprint": "dd91c201f2a50c89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e914899a9740685", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/fanart-manage.js:29"}, "properties": {"repobilityId": "6b9db7c75899086e", "scanner": "scanner-primary", "fingerprint": "3e914899a9740685", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e079a9c7a4c05d92", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/artist-detail/violations-sync.js:1"}, "properties": {"repobilityId": "61263ec762504879", "scanner": "scanner-primary", "fingerprint": "e079a9c7a4c05d92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10f34b6904678ca1", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/static/js/artist-detail/members-apply.js:1"}, "properties": {"repobilityId": "f0fafb1ef0c8b931", "scanner": "scanner-primary", "fingerprint": "10f34b6904678ca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-357c624669a7e0ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/members-apply.js:43"}, "properties": {"repobilityId": "9dd68adb4dd554ad", "scanner": "scanner-primary", "fingerprint": "357c624669a7e0ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34bd5691599f827a", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/artist-detail/field-lock-save.js:4"}, "properties": {"repobilityId": "418a1d1d4f305d29", "scanner": "scanner-primary", "fingerprint": "34bd5691599f827a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02db63365e8d8f47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/field-lock-save.js:62"}, "properties": {"repobilityId": "7a332444a43f53c0", "scanner": "scanner-primary", "fingerprint": "02db63365e8d8f47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31be570336dba36f", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/static/js/artist-detail/fanart-slideshow.js:6"}, "properties": {"repobilityId": "4cfa18d26cc5f8ad", "scanner": "scanner-primary", "fingerprint": "31be570336dba36f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b92345a8aa5f4ab1", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/artist-detail/lightbox.js:4"}, "properties": {"repobilityId": "6d874c53acda37b7", "scanner": "scanner-primary", "fingerprint": "b92345a8aa5f4ab1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e623b0f3cee323be", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/static/js/artist-detail/artwork-modal.js:1"}, "properties": {"repobilityId": "b3da886dc058c61e", "scanner": "scanner-primary", "fingerprint": "e623b0f3cee323be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cbfa1a6404f133d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/artist-detail/artwork-modal.js:101"}, "properties": {"repobilityId": "d3ad8b635684a2f6", "scanner": "scanner-primary", "fingerprint": "2cbfa1a6404f133d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}