{"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-9e478753fbe52201", "name": "Possibly dead Python function: iter_all_python_module_files", "shortDescription": {"text": "Possibly dead Python function: iter_all_python_module_files"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dbc81d1d5e81d7d", "name": "Possibly dead Python function: create_event_cash_receipt", "shortDescription": {"text": "Possibly dead Python function: create_event_cash_receipt"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-322a36703b092f3b", "name": "Possibly dead Python function: czech_cup_avg", "shortDescription": {"text": "Possibly dead Python function: czech_cup_avg"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bee7eb29ed0b310b", "name": "Possibly dead Python function: czech_league_avg", "shortDescription": {"text": "Possibly dead Python function: czech_league_avg"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc828b1a181cf236", "name": "Possibly dead Python function: moravian_league_avg", "shortDescription": {"text": "Possibly dead Python function: moravian_league_avg"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-894f48b18cac7525", "name": "Possibly dead Python function: sort_20", "shortDescription": {"text": "Possibly dead Python function: sort_20"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dda24cb29d1eec0", "name": "Possibly dead Python function: sort_24", "shortDescription": {"text": "Possibly dead Python function: sort_24"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aee70fdb86135e53", "name": "Stray `console.log` in TS/JS \u2014 static/js/collapsible.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/collapsible.js:12"}, "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-5599f732ca15045a", "name": "Stray `console.log` in TS/JS \u2014 static/js/show_spinner.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/show_spinner.js:5"}, "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-3f90c63f48c1a549", "name": "Stray `console.log` in TS/JS \u2014 static/js/dropdown.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/dropdown.js:24"}, "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-1996a4ab53701b70", "name": "Stray `console.log` in TS/JS \u2014 static/js/arrow.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/arrow.js:17"}, "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-6fbda9bd96dd5b67", "name": "Stray `console.log` in TS/JS \u2014 static/rest_framework/js/prettify-min.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/rest_framework/js/prettify-min.js:17"}, "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-9c32b091382e7108", "name": "Stray `console.log` in TS/JS \u2014 tests/js/theme_smoke_test.js:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/theme_smoke_test.js:105"}, "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-60bb8bd3792260a9", "name": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_ec_smoke_test.js:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_ec_smoke_test.js:174"}, "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-2dad5d834acb2f21", "name": "Stray `console.log` in TS/JS \u2014 tests/js/import_stats_smoke_test.js:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/import_stats_smoke_test.js:171"}, "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-08c2fca9e118587d", "name": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_smoke_test.js:256", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_smoke_test.js:256"}, "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-a37c508751f8367b", "name": "Stray `console.log` in TS/JS \u2014 tests/js/base_smoke_test.js:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/base_smoke_test.js:116"}, "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-13b257ea27c4f5aa", "name": "Stray `console.log` in TS/JS \u2014 tests/js/rider_inactive_smoke_test.js:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/rider_inactive_smoke_test.js:167"}, "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-e09969ad702e4f07", "name": "Stray `console.log` in TS/JS \u2014 tests/js/navbar_smoke_test.js:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/navbar_smoke_test.js:148"}, "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-be295bda89e563d8", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/entry.js:182", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/entry.js:182"}, "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-daf530ff0e3dc9ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin_ec.js:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin_ec.js:93"}, "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-4e34e428037f0267", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/import_stats.js:34", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/import_stats.js:34"}, "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-1b51084b783d3129", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/rider_request.js:49", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/rider_request.js:49"}, "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-973edd821e52ada0", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin.js:203", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin.js:203"}, "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-8201626b183ba4e2", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/bootstrap.min.js:6", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/bootstrap.min.js:6"}, "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-bf3fcf0e396f1e98", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/jquery-3.5.1.min.js:2", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/jquery-3.5.1.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-530ca3e311aad2cf", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/prettify-min.js:25", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/prettify-min.js:25"}, "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-6774834f3f2ec7c8", "name": "Insecure pattern 'weak_hash' in static/rest_framework/docs/js/api.js:26", "shortDescription": {"text": "Insecure pattern 'weak_hash' in static/rest_framework/docs/js/api.js:26"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5399eb91d9cdaafe", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/docs/js/highlight.pack.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/docs/js/highlight.pack.js:1"}, "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-b7c415491a4c114e", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/admin/js/SelectBox.js:17", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/admin/js/SelectBox.js:17"}, "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-2be29c1f1bc299b2", "name": "Possible secret in accounts/tests_signup.py", "shortDescription": {"text": "Possible secret in accounts/tests_signup.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-11210e3329425645", "name": "Possible secret in rider/tests_mobile_subscriptions.py", "shortDescription": {"text": "Possible secret in rider/tests_mobile_subscriptions.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc8a114168f14c62", "name": "Very large file: static/js/flowbite.js (3379 lines)", "shortDescription": {"text": "Very large file: static/js/flowbite.js (3379 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-d6f764bb71f13e99", "name": "Very large file: static/rest_framework/js/coreapi-0.1.1.js (2042 lines)", "shortDescription": {"text": "Very large file: static/rest_framework/js/coreapi-0.1.1.js (2042 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-4ac1a9571bc4c755", "name": "Very large file: eshop/views.py (1364 lines)", "shortDescription": {"text": "Very large file: eshop/views.py (1364 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-be8836414df8c55d", "name": "Very large file: eshop/tests.py (1538 lines)", "shortDescription": {"text": "Very large file: eshop/tests.py (1538 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-8936577fac27bb1e", "name": "Very large file: bmx/tests.py (1438 lines)", "shortDescription": {"text": "Very large file: bmx/tests.py (1438 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-6d4a008a38ed6579", "name": "Very large file: event/tests.py (4610 lines)", "shortDescription": {"text": "Very large file: event/tests.py (4610 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-64d2c22e15745f07", "name": "Very large file: event/views/views_admin.py (2604 lines)", "shortDescription": {"text": "Very large file: event/views/views_admin.py (2604 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-73c430dcbcaa8b26", "name": "Very large file: rider/tests.py (1413 lines)", "shortDescription": {"text": "Very large file: rider/tests.py (1413 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-713cf70f3048a565", "name": "Very large file: rider/views/_common.py (1561 lines)", "shortDescription": {"text": "Very large file: rider/views/_common.py (1561 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "23 test file(s) for 581 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 5 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 25 placeholder/mock markers across 11 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35d7871148e5f38e", "name": "Commented-code block (7 lines) in static/js/flowbite.js:799", "shortDescription": {"text": "Commented-code block (7 lines) in static/js/flowbite.js:799"}, "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-946ff322b9f7af00", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/entry_foreign.js:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/entry_foreign.js:146"}, "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-5c2c47b33cfae631", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/rest_framework/js/coreapi-0.1.1.js:741", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/rest_framework/js/coreapi-0.1.1.js:741"}, "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-402048cd7b2d3013", "name": "Legacy-named symbol `glim_v1` in static/rest_framework/docs/js/highlight.pack.js:1", "shortDescription": {"text": "Legacy-named symbol `glim_v1` in static/rest_framework/docs/js/highlight.pack.js:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d2a3a4316363a59", "name": "Commented-code block (5 lines) in static/admin/js/calendar.js:162", "shortDescription": {"text": "Commented-code block (5 lines) in static/admin/js/calendar.js:162"}, "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-8acc81d05530476a", "name": "Commented-code block (12 lines) in static/admin/js/admin/DateTimeShortcuts.js:138", "shortDescription": {"text": "Commented-code block (12 lines) in static/admin/js/admin/DateTimeShortcuts.js:138"}, "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-330deb2c0a700465", "name": "Likely N+1 query: `for ct in \u2026` triggers a query per row \u2014 finance/views.py:163", "shortDescription": {"text": "Likely N+1 query: `for ct in \u2026` triggers a query per row \u2014 finance/views.py:163"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `ct.user.id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c08b42ccc584b96d", "name": "Likely N+1 query: `for refund in \u2026` triggers a query per row \u2014 finance/views.py:240", "shortDescription": {"text": "Likely N+1 query: `for refund in \u2026` triggers a query per row \u2014 finance/views.py:240"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `refund.source_entry.rider` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1f53a637bba356cd", "name": "Likely N+1 query: `for d in \u2026` triggers a query per row \u2014 finance/views.py:349", "shortDescription": {"text": "Likely N+1 query: `for d in \u2026` triggers a query per row \u2014 finance/views.py:349"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `d.rider.first_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-973b79d42632fe6f", "name": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 finance/invoices.py:148", "shortDescription": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 finance/invoices.py:148"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `entry.rider.club` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6ab290f3b13feb1", "name": "Likely N+1 query: `for news in \u2026` triggers a query per row \u2014 bmx/views.py:180", "shortDescription": {"text": "Likely N+1 query: `for news in \u2026` triggers a query per row \u2014 bmx/views.py:180"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `news.publish_date.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44c5159f5e1b8db7", "name": "Likely N+1 query: `for event in \u2026` triggers a query per row \u2014 bmx/views.py:190", "shortDescription": {"text": "Likely N+1 query: `for event in \u2026` triggers a query per row \u2014 bmx/views.py:190"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `event.updated.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1695153fcd7ad282", "name": "Likely N+1 query: `for club in \u2026` triggers a query per row \u2014 bmx/views.py:200", "shortDescription": {"text": "Likely N+1 query: `for club in \u2026` triggers a query per row \u2014 bmx/views.py:200"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `club.updated.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-645c63af26437aec", "name": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 bmx/views.py:210", "shortDescription": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 bmx/views.py:210"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider.created.date` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-889bb40fceb855bc", "name": "Legacy-named symbol `_gzip_backup` in bmx/cron.py:70", "shortDescription": {"text": "Legacy-named symbol `_gzip_backup` in bmx/cron.py:70"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec9e824361f76387", "name": "Commented-code block (5 lines) in bmx/storage.py:10", "shortDescription": {"text": "Commented-code block (5 lines) in bmx/storage.py:10"}, "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-40f932ed5e86fca1", "name": "Legacy-named symbol `_gzip_backup` in bmx/tests.py:1307", "shortDescription": {"text": "Legacy-named symbol `_gzip_backup` in bmx/tests.py:1307"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc778c7c2af700fd", "name": "Legacy-named symbol `bem_backup` in event/admin.py:283", "shortDescription": {"text": "Legacy-named symbol `bem_backup` in event/admin.py:283"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45bafcb652b17126", "name": "Legacy-named symbol `bem_backup` in event/signals.py:34", "shortDescription": {"text": "Legacy-named symbol `bem_backup` in event/signals.py:34"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e335db0097646c9", "name": "Legacy-named symbol `bem_backup` in event/models_events.py:267", "shortDescription": {"text": "Legacy-named symbol `bem_backup` in event/models_events.py:267"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5da2c65b67f20660", "name": "Commented-code block (6 lines) in event/entry.py:171", "shortDescription": {"text": "Commented-code block (6 lines) in event/entry.py:171"}, "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-f6d6f12b54c25114", "name": "Likely N+1 query: `for rider_beginner in \u2026` triggers a query per row \u2014 event/entry.py:137", "shortDescription": {"text": "Likely N+1 query: `for rider_beginner in \u2026` triggers a query per row \u2014 event/entry.py:137"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider_beginner.last_name.upper` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e10db63b85039af", "name": "Likely N+1 query: `for rider_20 in \u2026` triggers a query per row \u2014 event/entry.py:145", "shortDescription": {"text": "Likely N+1 query: `for rider_20 in \u2026` triggers a query per row \u2014 event/entry.py:145"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider_20.last_name.upper` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7429c38a6cdb55f0", "name": "Likely N+1 query: `for rider_24 in \u2026` triggers a query per row \u2014 event/entry.py:153", "shortDescription": {"text": "Likely N+1 query: `for rider_24 in \u2026` triggers a query per row \u2014 event/entry.py:153"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider_24.last_name.upper` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-505a8507607ec565", "name": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:669", "shortDescription": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:669"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `entry.rider.nationality` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a71fac056ae01eda", "name": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:677", "shortDescription": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:677"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `entry.rider.nationality` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d96591118c8f46e3", "name": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/views/views_admin.py:1638", "shortDescription": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/views/views_admin.py:1638"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `entry.rider.club_id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4443e9e97c661da7", "name": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 event/views/views_pdf.py:365", "shortDescription": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 event/views/views_pdf.py:365"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider.club.team_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f142b580aaeb541c", "name": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:358", "shortDescription": {"text": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:358"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `debet.rider.first_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-474f0d5b8cd15b79", "name": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:373", "shortDescription": {"text": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:373"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `debet.club.team_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d376357d3013340", "name": "Likely N+1 query: `for e in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:37", "shortDescription": {"text": "Likely N+1 query: `for e in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:37"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `e.rider.uci_id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5e599137bef48c4", "name": "Likely N+1 query: `for run in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:69", "shortDescription": {"text": "Likely N+1 query: `for run in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:69"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `run.rider.uci_id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a79cbceda09e220", "name": "Legacy-named symbol `bem_backup` in event/migrations/0001_initial.py:153", "shortDescription": {"text": "Legacy-named symbol `bem_backup` in event/migrations/0001_initial.py:153"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09a65d4154f0912b", "name": "Stub function `noop_reverse` (body is just `pass`/`return`) \u2014 event/migrations/0077_event_commissar_role_constraints.py:", "shortDescription": {"text": "Stub function `noop_reverse` (body is just `pass`/`return`) \u2014 event/migrations/0077_event_commissar_role_constraints.py:59"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1eac51a4eee69be9", "name": "Likely N+1 query: `for field in \u2026` triggers a query per row \u2014 club/forms.py:40", "shortDescription": {"text": "Likely N+1 query: `for field in \u2026` triggers a query per row \u2014 club/forms.py:40"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `field.widget.attrs` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de4ede060bf8210a", "name": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 club/func.py:53", "shortDescription": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 club/func.py:53"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider.date_of_birth.year` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4b7619214fb4835", "name": "Legacy-named symbol `bem_backup` in news/management/commands/cleanup_orphaned_media.py:23", "shortDescription": {"text": "Legacy-named symbol `bem_backup` in news/management/commands/cleanup_orphaned_media.py:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-437091f163ad4cc5", "name": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 news/management/commands/cleanup_orphaned_media.py:94", "shortDescription": {"text": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 news/management/commands/cleanup_orphaned_media.py:94"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `model._meta.get_fields` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-456c30e902fc02aa", "name": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 rider/admin.py:547", "shortDescription": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 rider/admin.py:547"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `entry.event.name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0478ce13cddda3cc", "name": "Likely N+1 query: `for cruiser in \u2026` triggers a query per row \u2014 rider/rider.py:451", "shortDescription": {"text": "Likely N+1 query: `for cruiser in \u2026` triggers a query per row \u2014 rider/rider.py:451"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `cruiser.date_of_birth.year` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64d40c2f6e4e9bba", "name": "Likely N+1 query: `for result in \u2026` triggers a query per row \u2014 rider/views/_common.py:705", "shortDescription": {"text": "Likely N+1 query: `for result in \u2026` triggers a query per row \u2014 rider/views/_common.py:705"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `result.rider.uci_id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed330775a4333a3d", "name": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 rider/views/directory.py:435", "shortDescription": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 rider/views/directory.py:435"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `rider.club.team_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nfinance/invoices.py:showPage, eshop/invoice.py:showPage\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nfinance/models.py:pdf_url, finance/models.py:pdf_url, finance/models.py:pdf_url\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nfinance/tests.py:setUp, finance/tests.py:setUp, finance/tests.py:setUp, finance/tests.py:setUp\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nranking/tests.py:setUp, ranking/tests.py:setUp, ranking/tests.py:setUp, ranking/tests.py:setUp\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee53e8e0c58609d8", "name": "Near-duplicate function bodies in 15 places", "shortDescription": {"text": "Near-duplicate function bodies in 15 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/tests.py:setUp, api/tests.py:setUp, api/tests.py:setUp, api/tests.py:setUp\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9207d00967a47953", "name": "Django view `ranking_view` may be unauthenticated \u2014 ranking/views.py:13", "shortDescription": {"text": "Django view `ranking_view` may be unauthenticated \u2014 ranking/views.py:13"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44f98bad234e127c", "name": "Django view `shop` may be unauthenticated \u2014 eshop/views.py:563", "shortDescription": {"text": "Django view `shop` may be unauthenticated \u2014 eshop/views.py:563"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2954e51664b3674c", "name": "Django view `product_detail` may be unauthenticated \u2014 eshop/views.py:621", "shortDescription": {"text": "Django view `product_detail` may be unauthenticated \u2014 eshop/views.py:621"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e97c37ad556d01ab", "name": "Django view `request_stock_alert` may be unauthenticated \u2014 eshop/views.py:649", "shortDescription": {"text": "Django view `request_stock_alert` may be unauthenticated \u2014 eshop/views.py:649"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72d340236c0f78cd", "name": "Django view `add_to_cart` may be unauthenticated \u2014 eshop/views.py:721", "shortDescription": {"text": "Django view `add_to_cart` may be unauthenticated \u2014 eshop/views.py:721"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae778473ee5e81fc", "name": "Django view `cart` may be unauthenticated \u2014 eshop/views.py:756", "shortDescription": {"text": "Django view `cart` may be unauthenticated \u2014 eshop/views.py:756"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ac2fea03328a254", "name": "Django view `checkout` may be unauthenticated \u2014 eshop/views.py:801", "shortDescription": {"text": "Django view `checkout` may be unauthenticated \u2014 eshop/views.py:801"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5d91e964d258fd3", "name": "Django view `order_confirmation` may be unauthenticated \u2014 eshop/views.py:945", "shortDescription": {"text": "Django view `order_confirmation` may be unauthenticated \u2014 eshop/views.py:945"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1b7d8892ee5848c", "name": "Django view `size_guide` may be unauthenticated \u2014 eshop/views.py:1057", "shortDescription": {"text": "Django view `size_guide` may be unauthenticated \u2014 eshop/views.py:1057"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eef40def44b24416", "name": "Django view `csp_report_view` may be unauthenticated \u2014 bmx/views.py:29", "shortDescription": {"text": "Django view `csp_report_view` may be unauthenticated \u2014 bmx/views.py:29"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f08773b84d090b04", "name": "Django view `csrf_failure_view` may be unauthenticated \u2014 bmx/views.py:95", "shortDescription": {"text": "Django view `csrf_failure_view` may be unauthenticated \u2014 bmx/views.py:95"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8fc0bcbc6af297c0", "name": "Django view `healthz_view` may be unauthenticated \u2014 bmx/views.py:110", "shortDescription": {"text": "Django view `healthz_view` may be unauthenticated \u2014 bmx/views.py:110"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e7f4b4ea959b824", "name": "Django view `readyz_view` may be unauthenticated \u2014 bmx/views.py:114", "shortDescription": {"text": "Django view `readyz_view` may be unauthenticated \u2014 bmx/views.py:114"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c6b8c96a0cae0da", "name": "Django view `send_activation_email` may be unauthenticated \u2014 accounts/views.py:81", "shortDescription": {"text": "Django view `send_activation_email` may be unauthenticated \u2014 accounts/views.py:81"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb56b146c9218530", "name": "Django view `activation_sent` may be unauthenticated \u2014 accounts/views.py:105", "shortDescription": {"text": "Django view `activation_sent` may be unauthenticated \u2014 accounts/views.py:105"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4fd0f72c75ec12c1", "name": "Django view `sign_up` may be unauthenticated \u2014 accounts/views.py:113", "shortDescription": {"text": "Django view `sign_up` may be unauthenticated \u2014 accounts/views.py:113"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2077541097c6e10b", "name": "Django view `sign_in` may be unauthenticated \u2014 accounts/views.py:189", "shortDescription": {"text": "Django view `sign_in` may be unauthenticated \u2014 accounts/views.py:189"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-972fa44a1e950f14", "name": "Django view `activate_account` may be unauthenticated \u2014 accounts/views.py:256", "shortDescription": {"text": "Django view `activate_account` may be unauthenticated \u2014 accounts/views.py:256"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-285a7ba855790eb5", "name": "Django view `resend_activation_email` may be unauthenticated \u2014 accounts/views.py:327", "shortDescription": {"text": "Django view `resend_activation_email` may be unauthenticated \u2014 accounts/views.py:327"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79c6ff7ba609ad06", "name": "Django view `sign_out` may be unauthenticated \u2014 accounts/views.py:366", "shortDescription": {"text": "Django view `sign_out` may be unauthenticated \u2014 accounts/views.py:366"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ab30121c115fb00", "name": "Django view `list_of_commisars_view` may be unauthenticated \u2014 commissar/views.py:4", "shortDescription": {"text": "Django view `list_of_commisars_view` may be unauthenticated \u2014 commissar/views.py:4"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e76cc3ea8116b597", "name": "Django view `visit_stats` may be unauthenticated \u2014 admin_stats/views.py:18", "shortDescription": {"text": "Django view `visit_stats` may be unauthenticated \u2014 admin_stats/views.py:18"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1cbb6ed3c848d32", "name": "Django view `clubs_list_view` may be unauthenticated \u2014 club/views.py:24", "shortDescription": {"text": "Django view `clubs_list_view` may be unauthenticated \u2014 club/views.py:24"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36d9e5ecfa8be54b", "name": "Django view `club_detail_view` may be unauthenticated \u2014 club/views.py:183", "shortDescription": {"text": "Django view `club_detail_view` may be unauthenticated \u2014 club/views.py:183"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26425f8369864820", "name": "Django view `participation_in_races` may be unauthenticated \u2014 club/views.py:217", "shortDescription": {"text": "Django view `participation_in_races` may be unauthenticated \u2014 club/views.py:217"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a34c9dde0551eacb", "name": "Django view `mapa_klubu` may be unauthenticated \u2014 club/views.py:252", "shortDescription": {"text": "Django view `mapa_klubu` may be unauthenticated \u2014 club/views.py:252"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1431f2ae382fc0d3", "name": "Django view `prvi_zavod_view` may be unauthenticated \u2014 news/views.py:103", "shortDescription": {"text": "Django view `prvi_zavod_view` may be unauthenticated \u2014 news/views.py:103"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62735c90d6fb05f1", "name": "Django view `rules_view` may be unauthenticated \u2014 news/views.py:107", "shortDescription": {"text": "Django view `rules_view` may be unauthenticated \u2014 news/views.py:107"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0906b5358a6cd99", "name": "Django view `news_list_view` may be unauthenticated \u2014 news/views.py:121", "shortDescription": {"text": "Django view `news_list_view` may be unauthenticated \u2014 news/views.py:121"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-38d9a106f8a349e1", "name": "Django view `news_detail_view` may be unauthenticated \u2014 news/views.py:169", "shortDescription": {"text": "Django view `news_detail_view` may be unauthenticated \u2014 news/views.py:169"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bbd6e746abf58cd", "name": "Django view `downloads_view` may be unauthenticated \u2014 news/views.py:210", "shortDescription": {"text": "Django view `downloads_view` may be unauthenticated \u2014 news/views.py:210"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4367085715b15d3f", "name": "Django view `download_file_view` may be unauthenticated \u2014 news/views.py:216", "shortDescription": {"text": "Django view `download_file_view` may be unauthenticated \u2014 news/views.py:216"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24853"}, "properties": {"repository": "CaveBushman/django-bmx", "repoUrl": "https://github.com/CaveBushman/django-bmx", "branch": "main"}, "results": [{"ruleId": "scanner-9e478753fbe52201", "level": "note", "message": {"text": "Possibly dead Python function: iter_all_python_module_files"}, "properties": {"repobilityId": "5579aebe817592fa", "scanner": "scanner-primary", "fingerprint": "9e478753fbe52201", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "manage.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0dbc81d1d5e81d7d", "level": "note", "message": {"text": "Possibly dead Python function: create_event_cash_receipt"}, "properties": {"repobilityId": "669d9cd67c8c23f0", "scanner": "scanner-primary", "fingerprint": "0dbc81d1d5e81d7d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/cash_receipts.py:340"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-322a36703b092f3b", "level": "note", "message": {"text": "Possibly dead Python function: czech_cup_avg"}, "properties": {"repobilityId": "42a4cec25fe7f2fe", "scanner": "scanner-primary", "fingerprint": "322a36703b092f3b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/func.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bee7eb29ed0b310b", "level": "note", "message": {"text": "Possibly dead Python function: czech_league_avg"}, "properties": {"repobilityId": "61c7814abe6e6ec3", "scanner": "scanner-primary", "fingerprint": "bee7eb29ed0b310b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/func.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc828b1a181cf236", "level": "note", "message": {"text": "Possibly dead Python function: moravian_league_avg"}, "properties": {"repobilityId": "d152909ccd31403d", "scanner": "scanner-primary", "fingerprint": "dc828b1a181cf236", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/func.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-894f48b18cac7525", "level": "note", "message": {"text": "Possibly dead Python function: sort_20"}, "properties": {"repobilityId": "4fd685b007ee541e", "scanner": "scanner-primary", "fingerprint": "894f48b18cac7525", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ranking/ranking.py:33"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8dda24cb29d1eec0", "level": "note", "message": {"text": "Possibly dead Python function: sort_24"}, "properties": {"repobilityId": "fa7b898ed725ddd3", "scanner": "scanner-primary", "fingerprint": "8dda24cb29d1eec0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ranking/ranking.py:41"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aee70fdb86135e53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/collapsible.js:12"}, "properties": {"repobilityId": "bf99ffba45c7fe17", "scanner": "scanner-primary", "fingerprint": "aee70fdb86135e53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5599f732ca15045a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/show_spinner.js:5"}, "properties": {"repobilityId": "d3e0c6718fff06e2", "scanner": "scanner-primary", "fingerprint": "5599f732ca15045a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f90c63f48c1a549", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/dropdown.js:24"}, "properties": {"repobilityId": "e602482e0bb7f1a8", "scanner": "scanner-primary", "fingerprint": "3f90c63f48c1a549", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1996a4ab53701b70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/arrow.js:17"}, "properties": {"repobilityId": "712ca3b0b170ce02", "scanner": "scanner-primary", "fingerprint": "1996a4ab53701b70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fbda9bd96dd5b67", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/rest_framework/js/prettify-min.js:17"}, "properties": {"repobilityId": "d4fd4f5bc727260e", "scanner": "scanner-primary", "fingerprint": "6fbda9bd96dd5b67", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c32b091382e7108", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/theme_smoke_test.js:105"}, "properties": {"repobilityId": "2395e5247936ac33", "scanner": "scanner-primary", "fingerprint": "9c32b091382e7108", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60bb8bd3792260a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_ec_smoke_test.js:174"}, "properties": {"repobilityId": "77a3b1372811f61f", "scanner": "scanner-primary", "fingerprint": "60bb8bd3792260a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2dad5d834acb2f21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/import_stats_smoke_test.js:171"}, "properties": {"repobilityId": "f881145d7d713c96", "scanner": "scanner-primary", "fingerprint": "2dad5d834acb2f21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08c2fca9e118587d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/event_admin_smoke_test.js:256"}, "properties": {"repobilityId": "f052c874a96278c9", "scanner": "scanner-primary", "fingerprint": "08c2fca9e118587d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a37c508751f8367b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/base_smoke_test.js:116"}, "properties": {"repobilityId": "91918a3a0c60f504", "scanner": "scanner-primary", "fingerprint": "a37c508751f8367b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13b257ea27c4f5aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/rider_inactive_smoke_test.js:167"}, "properties": {"repobilityId": "c5709ccb864cbedf", "scanner": "scanner-primary", "fingerprint": "13b257ea27c4f5aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e09969ad702e4f07", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/js/navbar_smoke_test.js:148"}, "properties": {"repobilityId": "c35e57984ef67f50", "scanner": "scanner-primary", "fingerprint": "e09969ad702e4f07", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be295bda89e563d8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/entry.js:182"}, "properties": {"repobilityId": "eee975d4e0c4a0fb", "scanner": "scanner-primary", "fingerprint": "be295bda89e563d8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/entry.js"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-daf530ff0e3dc9ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin_ec.js:93"}, "properties": {"repobilityId": "e8b26a3ac34fc570", "scanner": "scanner-primary", "fingerprint": "daf530ff0e3dc9ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/event_admin_ec.js"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-4e34e428037f0267", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/import_stats.js:34"}, "properties": {"repobilityId": "520902ec3b341e33", "scanner": "scanner-primary", "fingerprint": "4e34e428037f0267", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/import_stats.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-1b51084b783d3129", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/rider_request.js:49"}, "properties": {"repobilityId": "1b6eff61a1e914c5", "scanner": "scanner-primary", "fingerprint": "1b51084b783d3129", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/rider_request.js"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-973edd821e52ada0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/event_admin.js:203"}, "properties": {"repobilityId": "200f0310778049c5", "scanner": "scanner-primary", "fingerprint": "973edd821e52ada0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/event_admin.js"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-8201626b183ba4e2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/bootstrap.min.js:6"}, "properties": {"repobilityId": "96ed7c1ab35ad9b8", "scanner": "scanner-primary", "fingerprint": "8201626b183ba4e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/rest_framework/js/bootstrap.min.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-bf3fcf0e396f1e98", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/jquery-3.5.1.min.js:2"}, "properties": {"repobilityId": "bddb0b5c55c12a30", "scanner": "scanner-primary", "fingerprint": "bf3fcf0e396f1e98", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/rest_framework/js/jquery-3.5.1.min.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-530ca3e311aad2cf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/js/prettify-min.js:25"}, "properties": {"repobilityId": "728b1769c6c1a180", "scanner": "scanner-primary", "fingerprint": "530ca3e311aad2cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/rest_framework/js/prettify-min.js"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-6774834f3f2ec7c8", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in static/rest_framework/docs/js/api.js:26"}, "properties": {"repobilityId": "22941b58473dedd6", "scanner": "scanner-primary", "fingerprint": "6774834f3f2ec7c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/rest_framework/docs/js/api.js"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-5399eb91d9cdaafe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/rest_framework/docs/js/highlight.pack.js:1"}, "properties": {"repobilityId": "ff54bc279a508eb7", "scanner": "scanner-primary", "fingerprint": "5399eb91d9cdaafe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/rest_framework/docs/js/highlight.pack.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b7c415491a4c114e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/admin/js/SelectBox.js:17"}, "properties": {"repobilityId": "2c98d54b3c294988", "scanner": "scanner-primary", "fingerprint": "b7c415491a4c114e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/admin/js/SelectBox.js"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-2be29c1f1bc299b2", "level": "error", "message": {"text": "Possible secret in accounts/tests_signup.py"}, "properties": {"repobilityId": "443c1f7e4e590605", "scanner": "scanner-primary", "fingerprint": "2be29c1f1bc299b2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/tests_signup.py"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-2be29c1f1bc299b2", "level": "error", "message": {"text": "Possible secret in accounts/tests_signup.py"}, "properties": {"repobilityId": "443c1f7e4e590605", "scanner": "scanner-primary", "fingerprint": "2be29c1f1bc299b2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/tests_signup.py"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-11210e3329425645", "level": "error", "message": {"text": "Possible secret in rider/tests_mobile_subscriptions.py"}, "properties": {"repobilityId": "193006027884e2ad", "scanner": "scanner-primary", "fingerprint": "11210e3329425645", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rider/tests_mobile_subscriptions.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-fc8a114168f14c62", "level": "note", "message": {"text": "Very large file: static/js/flowbite.js (3379 lines)"}, "properties": {"repobilityId": "41389e0af8cc60c4", "scanner": "scanner-primary", "fingerprint": "fc8a114168f14c62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d6f764bb71f13e99", "level": "note", "message": {"text": "Very large file: static/rest_framework/js/coreapi-0.1.1.js (2042 lines)"}, "properties": {"repobilityId": "11601409f2444d01", "scanner": "scanner-primary", "fingerprint": "d6f764bb71f13e99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4ac1a9571bc4c755", "level": "note", "message": {"text": "Very large file: eshop/views.py (1364 lines)"}, "properties": {"repobilityId": "635c08c03224d68b", "scanner": "scanner-primary", "fingerprint": "4ac1a9571bc4c755", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-be8836414df8c55d", "level": "note", "message": {"text": "Very large file: eshop/tests.py (1538 lines)"}, "properties": {"repobilityId": "85115f68082442ad", "scanner": "scanner-primary", "fingerprint": "be8836414df8c55d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8936577fac27bb1e", "level": "note", "message": {"text": "Very large file: bmx/tests.py (1438 lines)"}, "properties": {"repobilityId": "a0e951ae0769f759", "scanner": "scanner-primary", "fingerprint": "8936577fac27bb1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d4a008a38ed6579", "level": "note", "message": {"text": "Very large file: event/tests.py (4610 lines)"}, "properties": {"repobilityId": "5cdfc00d4810126b", "scanner": "scanner-primary", "fingerprint": "6d4a008a38ed6579", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-64d2c22e15745f07", "level": "note", "message": {"text": "Very large file: event/views/views_admin.py (2604 lines)"}, "properties": {"repobilityId": "d07f6c54657174ab", "scanner": "scanner-primary", "fingerprint": "64d2c22e15745f07", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-73c430dcbcaa8b26", "level": "note", "message": {"text": "Very large file: rider/tests.py (1413 lines)"}, "properties": {"repobilityId": "b84d8bc6626a0268", "scanner": "scanner-primary", "fingerprint": "73c430dcbcaa8b26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-713cf70f3048a565", "level": "note", "message": {"text": "Very large file: rider/views/_common.py (1561 lines)"}, "properties": {"repobilityId": "2f636c6fb7236acc", "scanner": "scanner-primary", "fingerprint": "713cf70f3048a565", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "7ac9641074ae4e9b", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "0ef450279071cb44", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "d5e9fc31f0a31d7d", "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": "43a169377c2b12a4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "09ae37583b4e60cd", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-35d7871148e5f38e", "level": "none", "message": {"text": "Commented-code block (7 lines) in static/js/flowbite.js:799"}, "properties": {"repobilityId": "0f3ba86f1c48fe26", "scanner": "scanner-primary", "fingerprint": "35d7871148e5f38e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-946ff322b9f7af00", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/entry_foreign.js:146"}, "properties": {"repobilityId": "22a96d179c4590f9", "scanner": "scanner-primary", "fingerprint": "946ff322b9f7af00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c2c47b33cfae631", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/rest_framework/js/coreapi-0.1.1.js:741"}, "properties": {"repobilityId": "c8c58a748da0489e", "scanner": "scanner-primary", "fingerprint": "5c2c47b33cfae631", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-402048cd7b2d3013", "level": "note", "message": {"text": "Legacy-named symbol `glim_v1` in static/rest_framework/docs/js/highlight.pack.js:1"}, "properties": {"repobilityId": "d9e8a51a91032897", "scanner": "scanner-primary", "fingerprint": "402048cd7b2d3013", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d2a3a4316363a59", "level": "none", "message": {"text": "Commented-code block (5 lines) in static/admin/js/calendar.js:162"}, "properties": {"repobilityId": "8df754f8d577546c", "scanner": "scanner-primary", "fingerprint": "7d2a3a4316363a59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8acc81d05530476a", "level": "none", "message": {"text": "Commented-code block (12 lines) in static/admin/js/admin/DateTimeShortcuts.js:138"}, "properties": {"repobilityId": "eb1631a22ba58a83", "scanner": "scanner-primary", "fingerprint": "8acc81d05530476a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-330deb2c0a700465", "level": "warning", "message": {"text": "Likely N+1 query: `for ct in \u2026` triggers a query per row \u2014 finance/views.py:163"}, "properties": {"repobilityId": "aeca26af561f45cc", "scanner": "scanner-primary", "fingerprint": "330deb2c0a700465", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/views.py"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-c08b42ccc584b96d", "level": "warning", "message": {"text": "Likely N+1 query: `for refund in \u2026` triggers a query per row \u2014 finance/views.py:240"}, "properties": {"repobilityId": "9e0b9ea7db944540", "scanner": "scanner-primary", "fingerprint": "c08b42ccc584b96d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/views.py"}, "region": {"startLine": 240}}}]}, {"ruleId": "scanner-1f53a637bba356cd", "level": "warning", "message": {"text": "Likely N+1 query: `for d in \u2026` triggers a query per row \u2014 finance/views.py:349"}, "properties": {"repobilityId": "b54197950d1921cb", "scanner": "scanner-primary", "fingerprint": "1f53a637bba356cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/views.py"}, "region": {"startLine": 349}}}]}, {"ruleId": "scanner-973b79d42632fe6f", "level": "warning", "message": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 finance/invoices.py:148"}, "properties": {"repobilityId": "d0dcc11770bdf48d", "scanner": "scanner-primary", "fingerprint": "973b79d42632fe6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "finance/invoices.py"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-c6ab290f3b13feb1", "level": "warning", "message": {"text": "Likely N+1 query: `for news in \u2026` triggers a query per row \u2014 bmx/views.py:180"}, "properties": {"repobilityId": "770a19344cc93455", "scanner": "scanner-primary", "fingerprint": "c6ab290f3b13feb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-44c5159f5e1b8db7", "level": "warning", "message": {"text": "Likely N+1 query: `for event in \u2026` triggers a query per row \u2014 bmx/views.py:190"}, "properties": {"repobilityId": "d1b5ba22c2317de5", "scanner": "scanner-primary", "fingerprint": "44c5159f5e1b8db7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-1695153fcd7ad282", "level": "warning", "message": {"text": "Likely N+1 query: `for club in \u2026` triggers a query per row \u2014 bmx/views.py:200"}, "properties": {"repobilityId": "2ed73358aaf3a289", "scanner": "scanner-primary", "fingerprint": "1695153fcd7ad282", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-645c63af26437aec", "level": "warning", "message": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 bmx/views.py:210"}, "properties": {"repobilityId": "90f4e684cf68be36", "scanner": "scanner-primary", "fingerprint": "645c63af26437aec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-889bb40fceb855bc", "level": "note", "message": {"text": "Legacy-named symbol `_gzip_backup` in bmx/cron.py:70"}, "properties": {"repobilityId": "ef1fe9ae08c78886", "scanner": "scanner-primary", "fingerprint": "889bb40fceb855bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ec9e824361f76387", "level": "none", "message": {"text": "Commented-code block (5 lines) in bmx/storage.py:10"}, "properties": {"repobilityId": "40ab8b5dd68db7d4", "scanner": "scanner-primary", "fingerprint": "ec9e824361f76387", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40f932ed5e86fca1", "level": "note", "message": {"text": "Legacy-named symbol `_gzip_backup` in bmx/tests.py:1307"}, "properties": {"repobilityId": "96ba9854436771de", "scanner": "scanner-primary", "fingerprint": "40f932ed5e86fca1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc778c7c2af700fd", "level": "note", "message": {"text": "Legacy-named symbol `bem_backup` in event/admin.py:283"}, "properties": {"repobilityId": "35722486af9957d4", "scanner": "scanner-primary", "fingerprint": "dc778c7c2af700fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-45bafcb652b17126", "level": "note", "message": {"text": "Legacy-named symbol `bem_backup` in event/signals.py:34"}, "properties": {"repobilityId": "c917a7069267aa8e", "scanner": "scanner-primary", "fingerprint": "45bafcb652b17126", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e335db0097646c9", "level": "note", "message": {"text": "Legacy-named symbol `bem_backup` in event/models_events.py:267"}, "properties": {"repobilityId": "5fc0367b027ed88b", "scanner": "scanner-primary", "fingerprint": "9e335db0097646c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5da2c65b67f20660", "level": "none", "message": {"text": "Commented-code block (6 lines) in event/entry.py:171"}, "properties": {"repobilityId": "45a82af409a67a2c", "scanner": "scanner-primary", "fingerprint": "5da2c65b67f20660", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6d6f12b54c25114", "level": "warning", "message": {"text": "Likely N+1 query: `for rider_beginner in \u2026` triggers a query per row \u2014 event/entry.py:137"}, "properties": {"repobilityId": "0b317dfe49da2c3d", "scanner": "scanner-primary", "fingerprint": "f6d6f12b54c25114", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/entry.py"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-9e10db63b85039af", "level": "warning", "message": {"text": "Likely N+1 query: `for rider_20 in \u2026` triggers a query per row \u2014 event/entry.py:145"}, "properties": {"repobilityId": "e0912f81c09003a6", "scanner": "scanner-primary", "fingerprint": "9e10db63b85039af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/entry.py"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-7429c38a6cdb55f0", "level": "warning", "message": {"text": "Likely N+1 query: `for rider_24 in \u2026` triggers a query per row \u2014 event/entry.py:153"}, "properties": {"repobilityId": "28bf19465d529076", "scanner": "scanner-primary", "fingerprint": "7429c38a6cdb55f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/entry.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-505a8507607ec565", "level": "warning", "message": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:669"}, "properties": {"repobilityId": "2a2240eda8bd159c", "scanner": "scanner-primary", "fingerprint": "505a8507607ec565", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/func.py"}, "region": {"startLine": 669}}}]}, {"ruleId": "scanner-a71fac056ae01eda", "level": "warning", "message": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/func.py:677"}, "properties": {"repobilityId": "4e5b803c91c22847", "scanner": "scanner-primary", "fingerprint": "a71fac056ae01eda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/func.py"}, "region": {"startLine": 677}}}]}, {"ruleId": "scanner-d96591118c8f46e3", "level": "warning", "message": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 event/views/views_admin.py:1638"}, "properties": {"repobilityId": "ec4ddbfa3f4e3f73", "scanner": "scanner-primary", "fingerprint": "d96591118c8f46e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/views/views_admin.py"}, "region": {"startLine": 1638}}}]}, {"ruleId": "scanner-4443e9e97c661da7", "level": "warning", "message": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 event/views/views_pdf.py:365"}, "properties": {"repobilityId": "9286df8d91eec39d", "scanner": "scanner-primary", "fingerprint": "4443e9e97c661da7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/views/views_pdf.py"}, "region": {"startLine": 365}}}]}, {"ruleId": "scanner-f142b580aaeb541c", "level": "warning", "message": {"text": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:358"}, "properties": {"repobilityId": "4271bc703eb13bf4", "scanner": "scanner-primary", "fingerprint": "f142b580aaeb541c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/views/payment_helpers.py"}, "region": {"startLine": 358}}}]}, {"ruleId": "scanner-474f0d5b8cd15b79", "level": "warning", "message": {"text": "Likely N+1 query: `for debet in \u2026` triggers a query per row \u2014 event/views/payment_helpers.py:373"}, "properties": {"repobilityId": "3f2cf6147b8090e0", "scanner": "scanner-primary", "fingerprint": "474f0d5b8cd15b79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/views/payment_helpers.py"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-1d376357d3013340", "level": "warning", "message": {"text": "Likely N+1 query: `for e in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:37"}, "properties": {"repobilityId": "878eeef9470dcaab", "scanner": "scanner-primary", "fingerprint": "1d376357d3013340", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/management/commands/debug_moto_report.py"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-e5e599137bef48c4", "level": "warning", "message": {"text": "Likely N+1 query: `for run in \u2026` triggers a query per row \u2014 event/management/commands/debug_moto_report.py:69"}, "properties": {"repobilityId": "9fb52756a1035354", "scanner": "scanner-primary", "fingerprint": "e5e599137bef48c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "event/management/commands/debug_moto_report.py"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-4a79cbceda09e220", "level": "note", "message": {"text": "Legacy-named symbol `bem_backup` in event/migrations/0001_initial.py:153"}, "properties": {"repobilityId": "95262031912277cf", "scanner": "scanner-primary", "fingerprint": "4a79cbceda09e220", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-09a65d4154f0912b", "level": "note", "message": {"text": "Stub function `noop_reverse` (body is just `pass`/`return`) \u2014 event/migrations/0077_event_commissar_role_constraints.py:59"}, "properties": {"repobilityId": "cfcaad53ace8b56f", "scanner": "scanner-primary", "fingerprint": "09a65d4154f0912b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-1eac51a4eee69be9", "level": "warning", "message": {"text": "Likely N+1 query: `for field in \u2026` triggers a query per row \u2014 club/forms.py:40"}, "properties": {"repobilityId": "4842c6de4ae78f60", "scanner": "scanner-primary", "fingerprint": "1eac51a4eee69be9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/forms.py"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-de4ede060bf8210a", "level": "warning", "message": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 club/func.py:53"}, "properties": {"repobilityId": "64b2c56735359cb0", "scanner": "scanner-primary", "fingerprint": "de4ede060bf8210a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/func.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-b4b7619214fb4835", "level": "note", "message": {"text": "Legacy-named symbol `bem_backup` in news/management/commands/cleanup_orphaned_media.py:23"}, "properties": {"repobilityId": "2adb40c69615feb1", "scanner": "scanner-primary", "fingerprint": "b4b7619214fb4835", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-437091f163ad4cc5", "level": "warning", "message": {"text": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 news/management/commands/cleanup_orphaned_media.py:94"}, "properties": {"repobilityId": "43e59d264e3c283c", "scanner": "scanner-primary", "fingerprint": "437091f163ad4cc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/management/commands/cleanup_orphaned_media.py"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-456c30e902fc02aa", "level": "warning", "message": {"text": "Likely N+1 query: `for entry in \u2026` triggers a query per row \u2014 rider/admin.py:547"}, "properties": {"repobilityId": "f1b7e42ccab2b1a2", "scanner": "scanner-primary", "fingerprint": "456c30e902fc02aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rider/admin.py"}, "region": {"startLine": 547}}}]}, {"ruleId": "scanner-0478ce13cddda3cc", "level": "warning", "message": {"text": "Likely N+1 query: `for cruiser in \u2026` triggers a query per row \u2014 rider/rider.py:451"}, "properties": {"repobilityId": "0bf36b5cb9218ae2", "scanner": "scanner-primary", "fingerprint": "0478ce13cddda3cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rider/rider.py"}, "region": {"startLine": 451}}}]}, {"ruleId": "scanner-64d40c2f6e4e9bba", "level": "warning", "message": {"text": "Likely N+1 query: `for result in \u2026` triggers a query per row \u2014 rider/views/_common.py:705"}, "properties": {"repobilityId": "b26d772732e9a53b", "scanner": "scanner-primary", "fingerprint": "64d40c2f6e4e9bba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rider/views/_common.py"}, "region": {"startLine": 705}}}]}, {"ruleId": "scanner-ed330775a4333a3d", "level": "warning", "message": {"text": "Likely N+1 query: `for rider in \u2026` triggers a query per row \u2014 rider/views/directory.py:435"}, "properties": {"repobilityId": "e42aa947b8f0adc9", "scanner": "scanner-primary", "fingerprint": "ed330775a4333a3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rider/views/directory.py"}, "region": {"startLine": 435}}}]}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e24add641f5d9c88", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "507b5b288428694c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9d0af2751ecc9194", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "3f11b8b9bd60afb6", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "97d8c5bd948d3bfa", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "8679b86356557837", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e48199e378577499", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5cfe3e9a26461521", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e2a4987755b5fd1e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6874e6678b860094", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "cdbf81bbadffc5bf", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bbcd9729ce9d830b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "81aef25a03e86189", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ee53e8e0c58609d8", "level": "note", "message": {"text": "Near-duplicate function bodies in 15 places"}, "properties": {"repobilityId": "e76fd2dd38d3f00c", "scanner": "scanner-primary", "fingerprint": "ee53e8e0c58609d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "fa876de1520afa3e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "86ee5d7665163a3e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "10d76e8e34e6c6fa", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "eaf5ce21a21eb19d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "aba5d0005c72c00d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ccea24f97c151a24", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9207d00967a47953", "level": "warning", "message": {"text": "Django view `ranking_view` may be unauthenticated \u2014 ranking/views.py:13"}, "properties": {"repobilityId": "0b4a37440149986e", "scanner": "scanner-primary", "fingerprint": "9207d00967a47953", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ranking/views.py"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-44f98bad234e127c", "level": "warning", "message": {"text": "Django view `shop` may be unauthenticated \u2014 eshop/views.py:563"}, "properties": {"repobilityId": "5765aa02209dea2e", "scanner": "scanner-primary", "fingerprint": "44f98bad234e127c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 563}}}]}, {"ruleId": "scanner-2954e51664b3674c", "level": "warning", "message": {"text": "Django view `product_detail` may be unauthenticated \u2014 eshop/views.py:621"}, "properties": {"repobilityId": "253bb40a69a07c74", "scanner": "scanner-primary", "fingerprint": "2954e51664b3674c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 621}}}]}, {"ruleId": "scanner-e97c37ad556d01ab", "level": "warning", "message": {"text": "Django view `request_stock_alert` may be unauthenticated \u2014 eshop/views.py:649"}, "properties": {"repobilityId": "5a74d246776a5174", "scanner": "scanner-primary", "fingerprint": "e97c37ad556d01ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 649}}}]}, {"ruleId": "scanner-72d340236c0f78cd", "level": "warning", "message": {"text": "Django view `add_to_cart` may be unauthenticated \u2014 eshop/views.py:721"}, "properties": {"repobilityId": "379e7683a53caba0", "scanner": "scanner-primary", "fingerprint": "72d340236c0f78cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 721}}}]}, {"ruleId": "scanner-ae778473ee5e81fc", "level": "warning", "message": {"text": "Django view `cart` may be unauthenticated \u2014 eshop/views.py:756"}, "properties": {"repobilityId": "c495199f9523bb2b", "scanner": "scanner-primary", "fingerprint": "ae778473ee5e81fc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 756}}}]}, {"ruleId": "scanner-6ac2fea03328a254", "level": "warning", "message": {"text": "Django view `checkout` may be unauthenticated \u2014 eshop/views.py:801"}, "properties": {"repobilityId": "ad52c821bdf757bd", "scanner": "scanner-primary", "fingerprint": "6ac2fea03328a254", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 801}}}]}, {"ruleId": "scanner-b5d91e964d258fd3", "level": "warning", "message": {"text": "Django view `order_confirmation` may be unauthenticated \u2014 eshop/views.py:945"}, "properties": {"repobilityId": "06360023ba47b327", "scanner": "scanner-primary", "fingerprint": "b5d91e964d258fd3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 945}}}]}, {"ruleId": "scanner-f1b7d8892ee5848c", "level": "warning", "message": {"text": "Django view `size_guide` may be unauthenticated \u2014 eshop/views.py:1057"}, "properties": {"repobilityId": "0cdf6fc061bf471f", "scanner": "scanner-primary", "fingerprint": "f1b7d8892ee5848c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eshop/views.py"}, "region": {"startLine": 1057}}}]}, {"ruleId": "scanner-eef40def44b24416", "level": "warning", "message": {"text": "Django view `csp_report_view` may be unauthenticated \u2014 bmx/views.py:29"}, "properties": {"repobilityId": "a5810dbd5de7ea90", "scanner": "scanner-primary", "fingerprint": "eef40def44b24416", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-f08773b84d090b04", "level": "warning", "message": {"text": "Django view `csrf_failure_view` may be unauthenticated \u2014 bmx/views.py:95"}, "properties": {"repobilityId": "989903724c9073cb", "scanner": "scanner-primary", "fingerprint": "f08773b84d090b04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-8fc0bcbc6af297c0", "level": "warning", "message": {"text": "Django view `healthz_view` may be unauthenticated \u2014 bmx/views.py:110"}, "properties": {"repobilityId": "a3ff1cc3f7c220a2", "scanner": "scanner-primary", "fingerprint": "8fc0bcbc6af297c0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-7e7f4b4ea959b824", "level": "warning", "message": {"text": "Django view `readyz_view` may be unauthenticated \u2014 bmx/views.py:114"}, "properties": {"repobilityId": "7f81e067d8f26b93", "scanner": "scanner-primary", "fingerprint": "7e7f4b4ea959b824", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bmx/views.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-6c6b8c96a0cae0da", "level": "warning", "message": {"text": "Django view `send_activation_email` may be unauthenticated \u2014 accounts/views.py:81"}, "properties": {"repobilityId": "9fe61fbaf1dcdd01", "scanner": "scanner-primary", "fingerprint": "6c6b8c96a0cae0da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-bb56b146c9218530", "level": "warning", "message": {"text": "Django view `activation_sent` may be unauthenticated \u2014 accounts/views.py:105"}, "properties": {"repobilityId": "e1d05408e8d85bcb", "scanner": "scanner-primary", "fingerprint": "bb56b146c9218530", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-4fd0f72c75ec12c1", "level": "warning", "message": {"text": "Django view `sign_up` may be unauthenticated \u2014 accounts/views.py:113"}, "properties": {"repobilityId": "c8e64c83bd50d979", "scanner": "scanner-primary", "fingerprint": "4fd0f72c75ec12c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-2077541097c6e10b", "level": "warning", "message": {"text": "Django view `sign_in` may be unauthenticated \u2014 accounts/views.py:189"}, "properties": {"repobilityId": "0983655ed7f3d275", "scanner": "scanner-primary", "fingerprint": "2077541097c6e10b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-972fa44a1e950f14", "level": "warning", "message": {"text": "Django view `activate_account` may be unauthenticated \u2014 accounts/views.py:256"}, "properties": {"repobilityId": "e39c48d1d4a792c7", "scanner": "scanner-primary", "fingerprint": "972fa44a1e950f14", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-285a7ba855790eb5", "level": "warning", "message": {"text": "Django view `resend_activation_email` may be unauthenticated \u2014 accounts/views.py:327"}, "properties": {"repobilityId": "1c47b85a809617fb", "scanner": "scanner-primary", "fingerprint": "285a7ba855790eb5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-79c6ff7ba609ad06", "level": "warning", "message": {"text": "Django view `sign_out` may be unauthenticated \u2014 accounts/views.py:366"}, "properties": {"repobilityId": "e2a33ee6944a0ccd", "scanner": "scanner-primary", "fingerprint": "79c6ff7ba609ad06", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounts/views.py"}, "region": {"startLine": 366}}}]}, {"ruleId": "scanner-1ab30121c115fb00", "level": "warning", "message": {"text": "Django view `list_of_commisars_view` may be unauthenticated \u2014 commissar/views.py:4"}, "properties": {"repobilityId": "6f517fd8bfadae5a", "scanner": "scanner-primary", "fingerprint": "1ab30121c115fb00", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "commissar/views.py"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-e76cc3ea8116b597", "level": "warning", "message": {"text": "Django view `visit_stats` may be unauthenticated \u2014 admin_stats/views.py:18"}, "properties": {"repobilityId": "7e4fd8a7cdbde1fc", "scanner": "scanner-primary", "fingerprint": "e76cc3ea8116b597", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin_stats/views.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-c1cbb6ed3c848d32", "level": "warning", "message": {"text": "Django view `clubs_list_view` may be unauthenticated \u2014 club/views.py:24"}, "properties": {"repobilityId": "a0d525076809ff29", "scanner": "scanner-primary", "fingerprint": "c1cbb6ed3c848d32", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/views.py"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-36d9e5ecfa8be54b", "level": "warning", "message": {"text": "Django view `club_detail_view` may be unauthenticated \u2014 club/views.py:183"}, "properties": {"repobilityId": "efe20b5e95952415", "scanner": "scanner-primary", "fingerprint": "36d9e5ecfa8be54b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/views.py"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-26425f8369864820", "level": "warning", "message": {"text": "Django view `participation_in_races` may be unauthenticated \u2014 club/views.py:217"}, "properties": {"repobilityId": "aaa01ed7e277f55b", "scanner": "scanner-primary", "fingerprint": "26425f8369864820", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/views.py"}, "region": {"startLine": 217}}}]}, {"ruleId": "scanner-a34c9dde0551eacb", "level": "warning", "message": {"text": "Django view `mapa_klubu` may be unauthenticated \u2014 club/views.py:252"}, "properties": {"repobilityId": "3eedac71e45a22b3", "scanner": "scanner-primary", "fingerprint": "a34c9dde0551eacb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "club/views.py"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-1431f2ae382fc0d3", "level": "warning", "message": {"text": "Django view `prvi_zavod_view` may be unauthenticated \u2014 news/views.py:103"}, "properties": {"repobilityId": "cf9c8b19f7a934a3", "scanner": "scanner-primary", "fingerprint": "1431f2ae382fc0d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-62735c90d6fb05f1", "level": "warning", "message": {"text": "Django view `rules_view` may be unauthenticated \u2014 news/views.py:107"}, "properties": {"repobilityId": "e0d2310a677abe6e", "scanner": "scanner-primary", "fingerprint": "62735c90d6fb05f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-a0906b5358a6cd99", "level": "warning", "message": {"text": "Django view `news_list_view` may be unauthenticated \u2014 news/views.py:121"}, "properties": {"repobilityId": "51cb9973057b3ff1", "scanner": "scanner-primary", "fingerprint": "a0906b5358a6cd99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-38d9a106f8a349e1", "level": "warning", "message": {"text": "Django view `news_detail_view` may be unauthenticated \u2014 news/views.py:169"}, "properties": {"repobilityId": "90c682c814ee1cb9", "scanner": "scanner-primary", "fingerprint": "38d9a106f8a349e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-8bbd6e746abf58cd", "level": "warning", "message": {"text": "Django view `downloads_view` may be unauthenticated \u2014 news/views.py:210"}, "properties": {"repobilityId": "127c25dc5b83859b", "scanner": "scanner-primary", "fingerprint": "8bbd6e746abf58cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-4367085715b15d3f", "level": "warning", "message": {"text": "Django view `download_file_view` may be unauthenticated \u2014 news/views.py:216"}, "properties": {"repobilityId": "3eaa180eea048067", "scanner": "scanner-primary", "fingerprint": "4367085715b15d3f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news/views.py"}, "region": {"startLine": 216}}}]}]}]}