{"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-a2725f2293d16d83", "name": "Possibly dead Python function: clear_daily_session", "shortDescription": {"text": "Possibly dead Python function: clear_daily_session"}, "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-9087a80bfe2671f0", "name": "Possibly dead Python function: derive_stretch_item", "shortDescription": {"text": "Possibly dead Python function: derive_stretch_item"}, "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-b5afa6d0615d16da", "name": "Possibly dead Python function: update_session", "shortDescription": {"text": "Possibly dead Python function: update_session"}, "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-b17d4ca0f0522179", "name": "Possibly dead Python function: create_transcription", "shortDescription": {"text": "Possibly dead Python function: create_transcription"}, "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-1f3655279c0a06e3", "name": "Possibly dead Python function: db_for_read", "shortDescription": {"text": "Possibly dead Python function: db_for_read"}, "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-aa7ce1511b35b6f9", "name": "Possibly dead Python function: db_for_write", "shortDescription": {"text": "Possibly dead Python function: db_for_write"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75bcfa717671a784", "name": "Very large file: rollcall/management/commands/run_ranking_trial.py (1204 lines)", "shortDescription": {"text": "Very large file: rollcall/management/commands/run_ranking_trial.py (1204 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "13 tests / 124 src (ratio 0.10)."}, "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 17 placeholder/mock markers across 8 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f1415bab713ed06", "name": "Commented-code block (5 lines) in daily/views.py:340", "shortDescription": {"text": "Commented-code block (5 lines) in daily/views.py:340"}, "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-8ab2e1cb8d65b907", "name": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:96", "shortDescription": {"text": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:96"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `msg.author.display_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-3952e686d9a1d7f2", "name": "Likely N+1 query: `for trans in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:317", "shortDescription": {"text": "Likely N+1 query: `for trans in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:317"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `trans.user.display_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-5a9a59196cba0181", "name": "Commented-code block (6 lines) in strongasan0x/settings.py:85", "shortDescription": {"text": "Commented-code block (6 lines) in strongasan0x/settings.py:85"}, "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-c9f0772631f3d18a", "name": "Likely N+1 query: `for r in \u2026` triggers a query per row \u2014 rollcall/views.py:149", "shortDescription": {"text": "Likely N+1 query: `for r in \u2026` triggers a query per row \u2014 rollcall/views.py:149"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `r.weekly_roll_call.week_start_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-bd0284e50461bf34", "name": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/views.py:572", "shortDescription": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/views.py:572"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `att.discord_user.linked_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-16d1e70bc7a53021", "name": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/warrior/views.py:303", "shortDescription": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/warrior/views.py:303"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `att.weekly_roll_call.week_start_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-2e2e4957e0f4ecd2", "name": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114", "shortDescription": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `ranking.name.lower` 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-9688d04555db5a16", "name": "Likely N+1 query: `for mapping in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114", "shortDescription": {"text": "Likely N+1 query: `for mapping in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `mapping.linked_name.lower` 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-7a36622cb3bb32de", "name": "Commented-code block (7 lines) in rollcall/telegram_bot/bot.py:58", "shortDescription": {"text": "Commented-code block (7 lines) in rollcall/telegram_bot/bot.py:58"}, "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-7ef81f694bb146b8", "name": "Commented-code block (7 lines) in rollcall/telegram_bot/handlers/messages.py:215", "shortDescription": {"text": "Commented-code block (7 lines) in rollcall/telegram_bot/handlers/messages.py:215"}, "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-4504c8641bd9edfe", "name": "Likely N+1 query: `for roll_call in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.", "shortDescription": {"text": "Likely N+1 query: `for roll_call in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.py:159"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `roll_call.week_start_date.strftime` 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-d17acfdde286c029", "name": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.py", "shortDescription": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.py:241"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `ranking.name.lower` 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-45b451275e588975", "name": "Legacy-named symbol `api_v1` in rollcall/management/commands/post_rankings_to_x.py:216", "shortDescription": {"text": "Legacy-named symbol `api_v1` in rollcall/management/commands/post_rankings_to_x.py:216"}, "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-a9da6206eef6503b", "name": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:112", "shortDescription": {"text": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:112"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `dm.linked_twitter_handle.lower` 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-252e797b4b6e8bfe", "name": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:118", "shortDescription": {"text": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:118"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `tm.linked_twitter_handle.lower` 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-542c7695bb92ef0f", "name": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:128", "shortDescription": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:128"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `ranking.name.lower` 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-b01afd93ea5d9064", "name": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:155", "shortDescription": {"text": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:155"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `dm.linked_name.lower` 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-6591ebecb81cddce", "name": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:162", "shortDescription": {"text": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:162"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `tm.linked_name.lower` 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-a22c7d38e64e941e", "name": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_substack_ode.py:185", "shortDescription": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_substack_ode.py:185"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `att.user_mapping.linked_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-61f843e7ea7d66b4", "name": "Likely N+1 query: `for em in \u2026` triggers a query per row \u2014 rollcall/management/commands/bot_query.py:142", "shortDescription": {"text": "Likely N+1 query: `for em in \u2026` triggers a query per row \u2014 rollcall/management/commands/bot_query.py:142"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `em.attestation.weekly_roll_call` 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-884be497a4d7b72e", "name": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/run_ranking_trial.py:1011", "shortDescription": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/run_ranking_trial.py:1011"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `att.parent_attestation.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-b7eedf108ef51be2", "name": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_twitter_rankings.p", "shortDescription": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_twitter_rankings.py:122"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `ranking.twitter_handle.strip` 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-6c9536a2a1024911", "name": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 rollcall/management/commands/backtest_attestation_detection.", "shortDescription": {"text": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 rollcall/management/commands/backtest_attestation_detection.py:80"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `msg.telegram_user.linked_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-c7307f6b1ff4f87f", "name": "Commented-code block (5 lines) in rollcall/migrations/0003_chatcontextreset_and_more.py:3", "shortDescription": {"text": "Commented-code block (5 lines) in rollcall/migrations/0003_chatcontextreset_and_more.py:3"}, "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-f64e88edbd49c03b", "name": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 rollcall/migrations/0003_chatcontextreset_and_more.py:39", "shortDescription": {"text": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 rollcall/migrations/0003_chatcontextreset_and_more.py:39"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `model.objects.filter` 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-9598c05149752ba3", "name": "Likely N+1 query: `for attestation in \u2026` triggers a query per row \u2014 rollcall/bot_commands/status.py:76", "shortDescription": {"text": "Likely N+1 query: `for attestation in \u2026` triggers a query per row \u2014 rollcall/bot_commands/status.py:76"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `attestation.discord_user.discord_username` 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-8e047ab7af03962f", "name": "7 env vars used in code but missing from .env.example", "shortDescription": {"text": "7 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BOT_QUERY_MODE`, `BOT_SCOPE`, `TRANSCRIPTION_CHUNK_DURATION`, `USE_POSTGRESQL`, `VIEWER_TELEGRAM_ID`, `VOICE_TRANSCRIPTION_ENABLED`, `WHISPER_MODEL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ndiscord_dashboard/bot/discord_bot.py:update_session, discord_dashboard/bot/discord_bot.py:update_session\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ndiscord_dashboard/bot/management/commands/runbot.py:handle, discord_dashboard/bot/management/commands/backfill_messages.py:handle, rollcall/management/commands/run_discord_bot.py:handle, rollcall/management/commands/assign_top_ten_role.py:handle\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-87ef01e98614136c", "name": "Django view `api_messages` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:135", "shortDescription": {"text": "Django view `api_messages` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:135"}, "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-cb209fe9ca67d9fd", "name": "Django view `api_stats` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:177", "shortDescription": {"text": "Django view `api_stats` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:177"}, "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-becf5a01aa486015", "name": "Django view `landing` may be unauthenticated \u2014 rollcall/views.py:243", "shortDescription": {"text": "Django view `landing` may be unauthenticated \u2014 rollcall/views.py:243"}, "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-8fa392ea219d1713", "name": "Django view `telegram_webhook` may be unauthenticated \u2014 rollcall/views.py:375", "shortDescription": {"text": "Django view `telegram_webhook` may be unauthenticated \u2014 rollcall/views.py:375"}, "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-34dcd3f6749157a2", "name": "Django view `telegram_callback` may be unauthenticated \u2014 rollcall/warrior/views.py:105", "shortDescription": {"text": "Django view `telegram_callback` may be unauthenticated \u2014 rollcall/warrior/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-0868e941ebba3c92", "name": "Django view `warrior_dashboard` may be unauthenticated \u2014 rollcall/warrior/views.py:175", "shortDescription": {"text": "Django view `warrior_dashboard` may be unauthenticated \u2014 rollcall/warrior/views.py:175"}, "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-4ea1bd7ceb231dd8", "name": "Django view `warrior_progress` may be unauthenticated \u2014 rollcall/warrior/views.py:254", "shortDescription": {"text": "Django view `warrior_progress` may be unauthenticated \u2014 rollcall/warrior/views.py:254"}, "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-1d541e6ae1a30c89", "name": "Django view `link_strava` may be unauthenticated \u2014 rollcall/warrior/views.py:405", "shortDescription": {"text": "Django view `link_strava` may be unauthenticated \u2014 rollcall/warrior/views.py:405"}, "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-a3a021841d002443", "name": "Django view `strava_callback` may be unauthenticated \u2014 rollcall/warrior/views.py:424", "shortDescription": {"text": "Django view `strava_callback` may be unauthenticated \u2014 rollcall/warrior/views.py:424"}, "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-4d016e391858bb2d", "name": "Unused endpoint: ANY /daily/checkin/", "shortDescription": {"text": "Unused endpoint: ANY /daily/checkin/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/checkin/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22079c71dc100b39", "name": "Unused endpoint: ANY /daily/c/<uuid:token>/", "shortDescription": {"text": "Unused endpoint: ANY /daily/c/<uuid:token>/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/c/<uuid:token>/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7078d8b85c2d5f69", "name": "Unused endpoint: ANY /daily/item/", "shortDescription": {"text": "Unused endpoint: ANY /daily/item/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/item/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f78a2946fa926830", "name": "Unused endpoint: ANY /daily/bonus/next/", "shortDescription": {"text": "Unused endpoint: ANY /daily/bonus/next/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/bonus/next/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f701eb7d00e50981", "name": "Unused endpoint: ANY /daily/wrap/", "shortDescription": {"text": "Unused endpoint: ANY /daily/wrap/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/wrap/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e5a853622da417a", "name": "Unused endpoint: ANY /daily/comment/", "shortDescription": {"text": "Unused endpoint: ANY /daily/comment/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/comment/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b06605d35fe0979b", "name": "Unused endpoint: ANY /daily/suggestion/<int:suggestion_id>/respond/", "shortDescription": {"text": "Unused endpoint: ANY /daily/suggestion/<int:suggestion_id>/respond/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/suggestion/<int:suggestion_id>/respond/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e13aeeedc548bc2", "name": "Unused endpoint: ANY /daily/baseline/", "shortDescription": {"text": "Unused endpoint: ANY /daily/baseline/"}, "fullDescription": {"text": "`daily/urls.py` declares `ANY /daily/baseline/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7309bf2446873ccc", "name": "Unused endpoint: ANY /admin/", "shortDescription": {"text": "Unused endpoint: ANY /admin/"}, "fullDescription": {"text": "`discord_dashboard/discord_intelligence/urls.py` declares `ANY /admin/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`discord_dashboard/discord_intelligence/urls.py` declares `ANY /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76c1617fc7e2c9cd", "name": "Unused endpoint: ANY /api/messages/", "shortDescription": {"text": "Unused endpoint: ANY /api/messages/"}, "fullDescription": {"text": "`discord_dashboard/dashboard/urls.py` declares `ANY /api/messages/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f98ca0e7fde2cfa", "name": "Unused endpoint: ANY /api/stats/", "shortDescription": {"text": "Unused endpoint: ANY /api/stats/"}, "fullDescription": {"text": "`discord_dashboard/dashboard/urls.py` declares `ANY /api/stats/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aec18d97d16dfcce", "name": "Unused endpoint: ANY /daily/", "shortDescription": {"text": "Unused endpoint: ANY /daily/"}, "fullDescription": {"text": "`strongasan0x/urls.py` declares `ANY /daily/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6970e25ff58fb04", "name": "Unused endpoint: ANY /warrior/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /warrior/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-308502e6096b4698", "name": "Unused endpoint: ANY /telegram/webhook/", "shortDescription": {"text": "Unused endpoint: ANY /telegram/webhook/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /telegram/webhook/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a55408f76c5a7c4", "name": "Unused endpoint: ANY /account/", "shortDescription": {"text": "Unused endpoint: ANY /account/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /account/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc9295c615814778", "name": "Unused endpoint: ANY /account/link-discord/", "shortDescription": {"text": "Unused endpoint: ANY /account/link-discord/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /account/link-discord/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fef9995643cd1c81", "name": "Unused endpoint: ANY /account/link-telegram/", "shortDescription": {"text": "Unused endpoint: ANY /account/link-telegram/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /account/link-telegram/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91a683800d730ef4", "name": "Unused endpoint: ANY /account/unlink-discord/", "shortDescription": {"text": "Unused endpoint: ANY /account/unlink-discord/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /account/unlink-discord/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e190abebd82eac6f", "name": "Unused endpoint: ANY /account/unlink-telegram/", "shortDescription": {"text": "Unused endpoint: ANY /account/unlink-telegram/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /account/unlink-telegram/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-837e838b103ede17", "name": "Unused endpoint: ANY /login/", "shortDescription": {"text": "Unused endpoint: ANY /login/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /login/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be369c41a2c4f445", "name": "Unused endpoint: ANY /logout/", "shortDescription": {"text": "Unused endpoint: ANY /logout/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /logout/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae069a5f811cd6c8", "name": "Unused endpoint: ANY /review-attestations/", "shortDescription": {"text": "Unused endpoint: ANY /review-attestations/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /review-attestations/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac6516bd6cf0bec5", "name": "Unused endpoint: ANY /review-attestations/toggle-hidden/<int:attestation_id>/", "shortDescription": {"text": "Unused endpoint: ANY /review-attestations/toggle-hidden/<int:attestation_id>/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /review-attestations/toggle-hidden/<int:attestation_id>/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bf3629cc0692e57", "name": "Unused endpoint: ANY /review-attestations/add/", "shortDescription": {"text": "Unused endpoint: ANY /review-attestations/add/"}, "fullDescription": {"text": "`rollcall/urls.py` declares `ANY /review-attestations/add/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ecd122d878d1716", "name": "Unused endpoint: ANY /warrior/login/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/login/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/login/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f5982c1543aef1e", "name": "Unused endpoint: ANY /warrior/check-login/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/check-login/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/check-login/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a91a2825ae824b9", "name": "Unused endpoint: ANY /warrior/callback/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/callback/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/callback/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ac5d2991babaef2", "name": "Unused endpoint: ANY /warrior/logout/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/logout/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/logout/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b467fac40fd95a39", "name": "Unused endpoint: ANY /warrior/dashboard/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/dashboard/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/dashboard/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3608532005cf5a6f", "name": "Unused endpoint: ANY /warrior/history/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/history/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/history/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4bba99110292dfd3", "name": "Unused endpoint: ANY /warrior/progress/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/progress/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/progress/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a97e6ec5f1377cd2", "name": "Unused endpoint: ANY /warrior/edit/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/edit/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/edit/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d031a9f0cb5aa43", "name": "Unused endpoint: ANY /warrior/strava/link/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/strava/link/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/strava/link/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc59df65522b722e", "name": "Unused endpoint: ANY /warrior/strava/callback/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/strava/callback/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/strava/callback/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b602c6d11101a246", "name": "Unused endpoint: ANY /warrior/strava/unlink/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/strava/unlink/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/strava/unlink/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-721aa752cdc3cc9d", "name": "Unused endpoint: ANY /warrior/strava/attestation/", "shortDescription": {"text": "Unused endpoint: ANY /warrior/strava/attestation/"}, "fullDescription": {"text": "`rollcall/warrior/urls.py` declares `ANY /warrior/strava/attestation/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23552"}, "properties": {"repository": "zcor/strongasan0x", "repoUrl": "https://github.com/zcor/strongasan0x", "branch": "main"}, "results": [{"ruleId": "scanner-a2725f2293d16d83", "level": "note", "message": {"text": "Possibly dead Python function: clear_daily_session"}, "properties": {"repobilityId": "bae2c25bdb32221a", "scanner": "scanner-primary", "fingerprint": "a2725f2293d16d83", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "daily/auth.py:120"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9087a80bfe2671f0", "level": "note", "message": {"text": "Possibly dead Python function: derive_stretch_item"}, "properties": {"repobilityId": "654341583cafb607", "scanner": "scanner-primary", "fingerprint": "9087a80bfe2671f0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "daily/services/ai_coach.py:225"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5afa6d0615d16da", "level": "note", "message": {"text": "Possibly dead Python function: update_session"}, "properties": {"repobilityId": "fb808e3e681939c3", "scanner": "scanner-primary", "fingerprint": "b5afa6d0615d16da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/bot/discord_bot.py:327"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b17d4ca0f0522179", "level": "note", "message": {"text": "Possibly dead Python function: create_transcription"}, "properties": {"repobilityId": "3bf6a007ab0f3d9d", "scanner": "scanner-primary", "fingerprint": "b17d4ca0f0522179", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/bot/discord_bot.py:274"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f3655279c0a06e3", "level": "note", "message": {"text": "Possibly dead Python function: db_for_read"}, "properties": {"repobilityId": "025ed583d1e7418d", "scanner": "scanner-primary", "fingerprint": "1f3655279c0a06e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/db_routers.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa7ce1511b35b6f9", "level": "note", "message": {"text": "Possibly dead Python function: db_for_write"}, "properties": {"repobilityId": "4f16c6f02c42e1d3", "scanner": "scanner-primary", "fingerprint": "aa7ce1511b35b6f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/db_routers.py:26"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-75bcfa717671a784", "level": "note", "message": {"text": "Very large file: rollcall/management/commands/run_ranking_trial.py (1204 lines)"}, "properties": {"repobilityId": "b838932b0d4d22ee", "scanner": "scanner-primary", "fingerprint": "75bcfa717671a784", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "bfb447124ab606ab", "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": "de0530f3705a89f8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "1e974186f954a70d", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "baca9bb2042d9e16", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7f1415bab713ed06", "level": "none", "message": {"text": "Commented-code block (5 lines) in daily/views.py:340"}, "properties": {"repobilityId": "a624bb54d548f578", "scanner": "scanner-primary", "fingerprint": "7f1415bab713ed06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ab2e1cb8d65b907", "level": "warning", "message": {"text": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:96"}, "properties": {"repobilityId": "a6995853fa8df721", "scanner": "scanner-primary", "fingerprint": "8ab2e1cb8d65b907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/bot/discord_bot.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-3952e686d9a1d7f2", "level": "warning", "message": {"text": "Likely N+1 query: `for trans in \u2026` triggers a query per row \u2014 discord_dashboard/bot/discord_bot.py:317"}, "properties": {"repobilityId": "060f139ca1b683be", "scanner": "scanner-primary", "fingerprint": "3952e686d9a1d7f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/bot/discord_bot.py"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-5a9a59196cba0181", "level": "none", "message": {"text": "Commented-code block (6 lines) in strongasan0x/settings.py:85"}, "properties": {"repobilityId": "a955b1d5a603c0df", "scanner": "scanner-primary", "fingerprint": "5a9a59196cba0181", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9f0772631f3d18a", "level": "warning", "message": {"text": "Likely N+1 query: `for r in \u2026` triggers a query per row \u2014 rollcall/views.py:149"}, "properties": {"repobilityId": "534e6fbdb41ed309", "scanner": "scanner-primary", "fingerprint": "c9f0772631f3d18a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/views.py"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-bd0284e50461bf34", "level": "warning", "message": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/views.py:572"}, "properties": {"repobilityId": "823319efbf3daa0c", "scanner": "scanner-primary", "fingerprint": "bd0284e50461bf34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/views.py"}, "region": {"startLine": 572}}}]}, {"ruleId": "scanner-16d1e70bc7a53021", "level": "warning", "message": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/warrior/views.py:303"}, "properties": {"repobilityId": "50eaee3d7a7b70ae", "scanner": "scanner-primary", "fingerprint": "16d1e70bc7a53021", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-2e2e4957e0f4ecd2", "level": "warning", "message": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114"}, "properties": {"repobilityId": "3f60dbb4d11b1fb3", "scanner": "scanner-primary", "fingerprint": "2e2e4957e0f4ecd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/discord_bot/cogs/ranking.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-9688d04555db5a16", "level": "warning", "message": {"text": "Likely N+1 query: `for mapping in \u2026` triggers a query per row \u2014 rollcall/discord_bot/cogs/ranking.py:114"}, "properties": {"repobilityId": "3f05d045fc0a1d7b", "scanner": "scanner-primary", "fingerprint": "9688d04555db5a16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/discord_bot/cogs/ranking.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-7a36622cb3bb32de", "level": "none", "message": {"text": "Commented-code block (7 lines) in rollcall/telegram_bot/bot.py:58"}, "properties": {"repobilityId": "75893dfb176aba97", "scanner": "scanner-primary", "fingerprint": "7a36622cb3bb32de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ef81f694bb146b8", "level": "none", "message": {"text": "Commented-code block (7 lines) in rollcall/telegram_bot/handlers/messages.py:215"}, "properties": {"repobilityId": "f611b12aea3a6067", "scanner": "scanner-primary", "fingerprint": "7ef81f694bb146b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4504c8641bd9edfe", "level": "warning", "message": {"text": "Likely N+1 query: `for roll_call in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.py:159"}, "properties": {"repobilityId": "bee354dd13e356ef", "scanner": "scanner-primary", "fingerprint": "4504c8641bd9edfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/post_rankings_to_discord.py"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-d17acfdde286c029", "level": "warning", "message": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/post_rankings_to_discord.py:241"}, "properties": {"repobilityId": "4c0564b03ceabf2d", "scanner": "scanner-primary", "fingerprint": "d17acfdde286c029", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/post_rankings_to_discord.py"}, "region": {"startLine": 241}}}]}, {"ruleId": "scanner-45b451275e588975", "level": "note", "message": {"text": "Legacy-named symbol `api_v1` in rollcall/management/commands/post_rankings_to_x.py:216"}, "properties": {"repobilityId": "62f1d4009612af41", "scanner": "scanner-primary", "fingerprint": "45b451275e588975", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a9da6206eef6503b", "level": "warning", "message": {"text": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:112"}, "properties": {"repobilityId": "a8da8803927c11df", "scanner": "scanner-primary", "fingerprint": "a9da6206eef6503b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/list_user_mappings.py"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-252e797b4b6e8bfe", "level": "warning", "message": {"text": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:118"}, "properties": {"repobilityId": "110f33d075b8b563", "scanner": "scanner-primary", "fingerprint": "252e797b4b6e8bfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/list_user_mappings.py"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-542c7695bb92ef0f", "level": "warning", "message": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:128"}, "properties": {"repobilityId": "581c2cb1ac370b44", "scanner": "scanner-primary", "fingerprint": "542c7695bb92ef0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/list_user_mappings.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-b01afd93ea5d9064", "level": "warning", "message": {"text": "Likely N+1 query: `for dm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:155"}, "properties": {"repobilityId": "0fdb9aa159fb4244", "scanner": "scanner-primary", "fingerprint": "b01afd93ea5d9064", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/list_user_mappings.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-6591ebecb81cddce", "level": "warning", "message": {"text": "Likely N+1 query: `for tm in \u2026` triggers a query per row \u2014 rollcall/management/commands/list_user_mappings.py:162"}, "properties": {"repobilityId": "ec5c39cb7ac2ffe3", "scanner": "scanner-primary", "fingerprint": "6591ebecb81cddce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/list_user_mappings.py"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-a22c7d38e64e941e", "level": "warning", "message": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_substack_ode.py:185"}, "properties": {"repobilityId": "089a368d33a9c103", "scanner": "scanner-primary", "fingerprint": "a22c7d38e64e941e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/generate_substack_ode.py"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-61f843e7ea7d66b4", "level": "warning", "message": {"text": "Likely N+1 query: `for em in \u2026` triggers a query per row \u2014 rollcall/management/commands/bot_query.py:142"}, "properties": {"repobilityId": "9bec1fef0cd2432d", "scanner": "scanner-primary", "fingerprint": "61f843e7ea7d66b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/bot_query.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-884be497a4d7b72e", "level": "warning", "message": {"text": "Likely N+1 query: `for att in \u2026` triggers a query per row \u2014 rollcall/management/commands/run_ranking_trial.py:1011"}, "properties": {"repobilityId": "b5442013829905a7", "scanner": "scanner-primary", "fingerprint": "884be497a4d7b72e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/run_ranking_trial.py"}, "region": {"startLine": 1011}}}]}, {"ruleId": "scanner-b7eedf108ef51be2", "level": "warning", "message": {"text": "Likely N+1 query: `for ranking in \u2026` triggers a query per row \u2014 rollcall/management/commands/generate_twitter_rankings.py:122"}, "properties": {"repobilityId": "d56bcad85ab549ae", "scanner": "scanner-primary", "fingerprint": "b7eedf108ef51be2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/generate_twitter_rankings.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-6c9536a2a1024911", "level": "warning", "message": {"text": "Likely N+1 query: `for msg in \u2026` triggers a query per row \u2014 rollcall/management/commands/backtest_attestation_detection.py:80"}, "properties": {"repobilityId": "58f32c5c9d2d45fb", "scanner": "scanner-primary", "fingerprint": "6c9536a2a1024911", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/management/commands/backtest_attestation_detection.py"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-c7307f6b1ff4f87f", "level": "none", "message": {"text": "Commented-code block (5 lines) in rollcall/migrations/0003_chatcontextreset_and_more.py:3"}, "properties": {"repobilityId": "7349b6757205e802", "scanner": "scanner-primary", "fingerprint": "c7307f6b1ff4f87f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f64e88edbd49c03b", "level": "warning", "message": {"text": "Likely N+1 query: `for model in \u2026` triggers a query per row \u2014 rollcall/migrations/0003_chatcontextreset_and_more.py:39"}, "properties": {"repobilityId": "d68634c13409069a", "scanner": "scanner-primary", "fingerprint": "f64e88edbd49c03b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/migrations/0003_chatcontextreset_and_more.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-9598c05149752ba3", "level": "warning", "message": {"text": "Likely N+1 query: `for attestation in \u2026` triggers a query per row \u2014 rollcall/bot_commands/status.py:76"}, "properties": {"repobilityId": "1ffedb670b2b7634", "scanner": "scanner-primary", "fingerprint": "9598c05149752ba3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/bot_commands/status.py"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-8e047ab7af03962f", "level": "note", "message": {"text": "7 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5a0455f6498c27ad", "scanner": "scanner-primary", "fingerprint": "8e047ab7af03962f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "45910091bbc8f305", "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": "58d39773f217eafc", "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": "dad58cd5e666377f", "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": "8ce609d1cb1a2a39", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "50bb2b2ca12b5beb", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "c65ca8699cc4500c", "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": "6d7efb379109c49a", "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": "77ce20cc09bfded3", "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": "aadc54e4c66f67b1", "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": "42f17c4c50a1ab6c", "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": "f9868270f8705f9e", "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": "7cbb6cecccb894d6", "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": "039adb5ed17324e1", "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": "bd586255a131145b", "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": "69e264580d8bf4d6", "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": "58cfce50ce545a70", "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": "2e8f6407ad9892ee", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-87ef01e98614136c", "level": "warning", "message": {"text": "Django view `api_messages` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:135"}, "properties": {"repobilityId": "c12f8fcadaaa8a22", "scanner": "scanner-primary", "fingerprint": "87ef01e98614136c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/dashboard/views.py"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-cb209fe9ca67d9fd", "level": "warning", "message": {"text": "Django view `api_stats` may be unauthenticated \u2014 discord_dashboard/dashboard/views.py:177"}, "properties": {"repobilityId": "7410d34ea2f94b73", "scanner": "scanner-primary", "fingerprint": "cb209fe9ca67d9fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "discord_dashboard/dashboard/views.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-becf5a01aa486015", "level": "warning", "message": {"text": "Django view `landing` may be unauthenticated \u2014 rollcall/views.py:243"}, "properties": {"repobilityId": "aa9355ede6039a7e", "scanner": "scanner-primary", "fingerprint": "becf5a01aa486015", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/views.py"}, "region": {"startLine": 243}}}]}, {"ruleId": "scanner-8fa392ea219d1713", "level": "warning", "message": {"text": "Django view `telegram_webhook` may be unauthenticated \u2014 rollcall/views.py:375"}, "properties": {"repobilityId": "8a917051a2f73a25", "scanner": "scanner-primary", "fingerprint": "8fa392ea219d1713", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/views.py"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-34dcd3f6749157a2", "level": "warning", "message": {"text": "Django view `telegram_callback` may be unauthenticated \u2014 rollcall/warrior/views.py:105"}, "properties": {"repobilityId": "acb9f86a9af286e3", "scanner": "scanner-primary", "fingerprint": "34dcd3f6749157a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-0868e941ebba3c92", "level": "warning", "message": {"text": "Django view `warrior_dashboard` may be unauthenticated \u2014 rollcall/warrior/views.py:175"}, "properties": {"repobilityId": "25d3c67fe03911d6", "scanner": "scanner-primary", "fingerprint": "0868e941ebba3c92", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 175}}}]}, {"ruleId": "scanner-4ea1bd7ceb231dd8", "level": "warning", "message": {"text": "Django view `warrior_progress` may be unauthenticated \u2014 rollcall/warrior/views.py:254"}, "properties": {"repobilityId": "6cc3c83bc2ed6d49", "scanner": "scanner-primary", "fingerprint": "4ea1bd7ceb231dd8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-1d541e6ae1a30c89", "level": "warning", "message": {"text": "Django view `link_strava` may be unauthenticated \u2014 rollcall/warrior/views.py:405"}, "properties": {"repobilityId": "936afb1c66bfded9", "scanner": "scanner-primary", "fingerprint": "1d541e6ae1a30c89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 405}}}]}, {"ruleId": "scanner-a3a021841d002443", "level": "warning", "message": {"text": "Django view `strava_callback` may be unauthenticated \u2014 rollcall/warrior/views.py:424"}, "properties": {"repobilityId": "9328e9cdb65b69fa", "scanner": "scanner-primary", "fingerprint": "a3a021841d002443", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rollcall/warrior/views.py"}, "region": {"startLine": 424}}}]}, {"ruleId": "scanner-4d016e391858bb2d", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/checkin/"}, "properties": {"repobilityId": "b3f668015bfdd058", "scanner": "scanner-primary", "fingerprint": "4d016e391858bb2d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-22079c71dc100b39", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/c/<uuid:token>/"}, "properties": {"repobilityId": "fca4368da6b99ae5", "scanner": "scanner-primary", "fingerprint": "22079c71dc100b39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7078d8b85c2d5f69", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/item/"}, "properties": {"repobilityId": "d493eff89842f1ab", "scanner": "scanner-primary", "fingerprint": "7078d8b85c2d5f69", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f78a2946fa926830", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/bonus/next/"}, "properties": {"repobilityId": "afb67a20ff1678b9", "scanner": "scanner-primary", "fingerprint": "f78a2946fa926830", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f701eb7d00e50981", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/wrap/"}, "properties": {"repobilityId": "ac4721a310b50b5b", "scanner": "scanner-primary", "fingerprint": "f701eb7d00e50981", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e5a853622da417a", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/comment/"}, "properties": {"repobilityId": "6f740d8b86b8b233", "scanner": "scanner-primary", "fingerprint": "2e5a853622da417a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b06605d35fe0979b", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/suggestion/<int:suggestion_id>/respond/"}, "properties": {"repobilityId": "27b0e4db7530e205", "scanner": "scanner-primary", "fingerprint": "b06605d35fe0979b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e13aeeedc548bc2", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/baseline/"}, "properties": {"repobilityId": "0bdf57749ded552e", "scanner": "scanner-primary", "fingerprint": "9e13aeeedc548bc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7309bf2446873ccc", "level": "note", "message": {"text": "Unused endpoint: ANY /admin/"}, "properties": {"repobilityId": "28b7d10343a6fffd", "scanner": "scanner-primary", "fingerprint": "7309bf2446873ccc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "988a2d7d232452b2", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-76c1617fc7e2c9cd", "level": "note", "message": {"text": "Unused endpoint: ANY /api/messages/"}, "properties": {"repobilityId": "1aa578e53782b48d", "scanner": "scanner-primary", "fingerprint": "76c1617fc7e2c9cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f98ca0e7fde2cfa", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stats/"}, "properties": {"repobilityId": "1c2d5a829808e94f", "scanner": "scanner-primary", "fingerprint": "0f98ca0e7fde2cfa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aec18d97d16dfcce", "level": "note", "message": {"text": "Unused endpoint: ANY /daily/"}, "properties": {"repobilityId": "67b829482ee18bab", "scanner": "scanner-primary", "fingerprint": "aec18d97d16dfcce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6970e25ff58fb04", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/"}, "properties": {"repobilityId": "be0f78a12a67efc1", "scanner": "scanner-primary", "fingerprint": "f6970e25ff58fb04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-308502e6096b4698", "level": "note", "message": {"text": "Unused endpoint: ANY /telegram/webhook/"}, "properties": {"repobilityId": "5421fd510d6355f4", "scanner": "scanner-primary", "fingerprint": "308502e6096b4698", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a55408f76c5a7c4", "level": "note", "message": {"text": "Unused endpoint: ANY /account/"}, "properties": {"repobilityId": "6c76d36e14e38995", "scanner": "scanner-primary", "fingerprint": "5a55408f76c5a7c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc9295c615814778", "level": "note", "message": {"text": "Unused endpoint: ANY /account/link-discord/"}, "properties": {"repobilityId": "558b4a58675b7dc6", "scanner": "scanner-primary", "fingerprint": "bc9295c615814778", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fef9995643cd1c81", "level": "note", "message": {"text": "Unused endpoint: ANY /account/link-telegram/"}, "properties": {"repobilityId": "513d08dfc25f939a", "scanner": "scanner-primary", "fingerprint": "fef9995643cd1c81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91a683800d730ef4", "level": "note", "message": {"text": "Unused endpoint: ANY /account/unlink-discord/"}, "properties": {"repobilityId": "b203c4e5b0c29b2a", "scanner": "scanner-primary", "fingerprint": "91a683800d730ef4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e190abebd82eac6f", "level": "note", "message": {"text": "Unused endpoint: ANY /account/unlink-telegram/"}, "properties": {"repobilityId": "9b8dcfdae6cc28d8", "scanner": "scanner-primary", "fingerprint": "e190abebd82eac6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-837e838b103ede17", "level": "note", "message": {"text": "Unused endpoint: ANY /login/"}, "properties": {"repobilityId": "6ec665b30901a600", "scanner": "scanner-primary", "fingerprint": "837e838b103ede17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be369c41a2c4f445", "level": "note", "message": {"text": "Unused endpoint: ANY /logout/"}, "properties": {"repobilityId": "1a5c50e721c9fb5d", "scanner": "scanner-primary", "fingerprint": "be369c41a2c4f445", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae069a5f811cd6c8", "level": "note", "message": {"text": "Unused endpoint: ANY /review-attestations/"}, "properties": {"repobilityId": "ad044048495661d3", "scanner": "scanner-primary", "fingerprint": "ae069a5f811cd6c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac6516bd6cf0bec5", "level": "note", "message": {"text": "Unused endpoint: ANY /review-attestations/toggle-hidden/<int:attestation_id>/"}, "properties": {"repobilityId": "190c9f3288a85102", "scanner": "scanner-primary", "fingerprint": "ac6516bd6cf0bec5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bf3629cc0692e57", "level": "note", "message": {"text": "Unused endpoint: ANY /review-attestations/add/"}, "properties": {"repobilityId": "81e73fedfee87fe2", "scanner": "scanner-primary", "fingerprint": "3bf3629cc0692e57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ecd122d878d1716", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/login/"}, "properties": {"repobilityId": "a138cd9e82976b6e", "scanner": "scanner-primary", "fingerprint": "9ecd122d878d1716", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f5982c1543aef1e", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/check-login/"}, "properties": {"repobilityId": "6e7aa625910b3768", "scanner": "scanner-primary", "fingerprint": "1f5982c1543aef1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a91a2825ae824b9", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/callback/"}, "properties": {"repobilityId": "8dafce3a660ae53e", "scanner": "scanner-primary", "fingerprint": "6a91a2825ae824b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ac5d2991babaef2", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/logout/"}, "properties": {"repobilityId": "54543c8969a2c24c", "scanner": "scanner-primary", "fingerprint": "1ac5d2991babaef2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b467fac40fd95a39", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/dashboard/"}, "properties": {"repobilityId": "3d19224370038b31", "scanner": "scanner-primary", "fingerprint": "b467fac40fd95a39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3608532005cf5a6f", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/history/"}, "properties": {"repobilityId": "6b3d9a79e1fadfc1", "scanner": "scanner-primary", "fingerprint": "3608532005cf5a6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4bba99110292dfd3", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/progress/"}, "properties": {"repobilityId": "8ca0a5b831e493a8", "scanner": "scanner-primary", "fingerprint": "4bba99110292dfd3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a97e6ec5f1377cd2", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/edit/"}, "properties": {"repobilityId": "7b6e4bfd581f84df", "scanner": "scanner-primary", "fingerprint": "a97e6ec5f1377cd2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d031a9f0cb5aa43", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/strava/link/"}, "properties": {"repobilityId": "2067731e7168c7f1", "scanner": "scanner-primary", "fingerprint": "4d031a9f0cb5aa43", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fc59df65522b722e", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/strava/callback/"}, "properties": {"repobilityId": "c3527df1d38097de", "scanner": "scanner-primary", "fingerprint": "fc59df65522b722e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b602c6d11101a246", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/strava/unlink/"}, "properties": {"repobilityId": "b41a36a518fe064e", "scanner": "scanner-primary", "fingerprint": "b602c6d11101a246", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-721aa752cdc3cc9d", "level": "note", "message": {"text": "Unused endpoint: ANY /warrior/strava/attestation/"}, "properties": {"repobilityId": "c4d12e84d5b10542", "scanner": "scanner-primary", "fingerprint": "721aa752cdc3cc9d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}