{"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-fde65b6ee89b493c", "name": "Possibly dead Python function: init_db", "shortDescription": {"text": "Possibly dead Python function: init_db"}, "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-5bb7892cabb21da2", "name": "Possibly dead Python function: parse_scan_sort", "shortDescription": {"text": "Possibly dead Python function: parse_scan_sort"}, "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-6b7e93320e8a8454", "name": "Possibly dead Python function: parse_page_spec", "shortDescription": {"text": "Possibly dead Python function: parse_page_spec"}, "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-d892ba780a3969b6", "name": "Possibly dead Python function: require_admin", "shortDescription": {"text": "Possibly dead Python function: require_admin"}, "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-bcec433c1e88b34e", "name": "Possibly dead Python function: wait_for_service", "shortDescription": {"text": "Possibly dead Python function: wait_for_service"}, "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-957082df2f24a452", "name": "Possibly dead Python function: wait_if_quota_exceeded", "shortDescription": {"text": "Possibly dead Python function: wait_if_quota_exceeded"}, "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-8fc43171c33f8f7e", "name": "Possibly dead Python function: should_refresh_cache", "shortDescription": {"text": "Possibly dead Python function: should_refresh_cache"}, "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-478f3eec2b87bc82", "name": "Possibly dead Python function: redacted_database_url", "shortDescription": {"text": "Possibly dead Python function: redacted_database_url"}, "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-c19db888e9b3da52", "name": "Possibly dead Python function: release_group_rank_gapfill_memory", "shortDescription": {"text": "Possibly dead Python function: release_group_rank_gapfill_memory"}, "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-94fe46b76c78d005", "name": "Possibly dead Python function: is_locked", "shortDescription": {"text": "Possibly dead Python function: is_locked"}, "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-88cb843e8deea14d", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "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-f8f6072aae29742c", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "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-309dfb106b14c8c0", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/api/client.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/api/client.js:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fae55a9dac00edc8", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a10d10eb03b0f644", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-245c29b33feb7b6a", "name": "Privileged port 8 in use", "shortDescription": {"text": "Privileged port 8 in use"}, "fullDescription": {"text": "Port 8 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60427b03771411b6", "name": "Dockerfile runs as root: frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-faa134129e5545ff", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b048d166901fd868", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cd20d539467d2c5", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf9aea5e5eff9ec3", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/MarketScan/TradingViewChart.jsx:17", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/MarketScan/TradingViewChart.jsx:17"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3cce207399195196", "name": "Possible secret in scripts/start_docker_assistant_stack.sh", "shortDescription": {"text": "Possible secret in scripts/start_docker_assistant_stack.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3477d86bae7dc6f3", "name": "Possible secret in scripts/run_local_hermes_gateway.sh", "shortDescription": {"text": "Possible secret in scripts/run_local_hermes_gateway.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30ea2c9795fa9e4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7af64cf43fcb9873", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7f691f077039ee5", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfdb0cde7251c17c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7737f58bedf29a6", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/login-action@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64192a3c67110d01", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4262967ea88f05ed", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb4d666c5c94f494", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00a1b16cc5598da6", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e9c7fd448d12b91", "name": "Very large file: backend/tests/unit/test_provider_snapshot_service.py (1975 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_provider_snapshot_service.py (1975 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-6db35f479e692088", "name": "Very large file: backend/tests/unit/test_static_site_export_service.py (2644 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_static_site_export_service.py (2644 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-9853d95158a1f93e", "name": "Very large file: backend/tests/unit/test_feature_store_tasks.py (1950 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_feature_store_tasks.py (1950 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-e65edd595d56291b", "name": "Very large file: backend/tests/unit/test_official_market_universe_source_service.py (2607 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_official_market_universe_source_service.py (2607 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-8dace7f45bd75233", "name": "Very large file: backend/tests/unit/test_stock_universe_service.py (2358 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_stock_universe_service.py (2358 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-0b560e037ea59962", "name": "Very large file: backend/tests/unit/test_theme_reprocessing.py (1938 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_theme_reprocessing.py (1938 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-d9f22ed89fc74c8a", "name": "Very large file: backend/tests/unit/test_weekly_reference_scripts.py (1787 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_weekly_reference_scripts.py (1787 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-2ddbc86062706c26", "name": "Very large file: backend/tests/unit/test_cache_refresh_unification.py (1412 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/test_cache_refresh_unification.py (1412 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-02915d1d47ef81c7", "name": "Very large file: backend/tests/unit/use_cases/feature_store/test_build_daily_snapshot.py (1419 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/use_cases/feature_store/test_build_daily_snapshot.py (1419 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-08197b47b6d74354", "name": "Very large file: backend/app/interfaces/mcp/market_copilot.py (1652 lines)", "shortDescription": {"text": "Very large file: backend/app/interfaces/mcp/market_copilot.py (1652 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-5cfe5c37ba4027f8", "name": "Very large file: backend/app/tasks/theme_discovery_tasks.py (1633 lines)", "shortDescription": {"text": "Very large file: backend/app/tasks/theme_discovery_tasks.py (1633 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-6c878879f65e182c", "name": "Very large file: backend/app/tasks/cache_tasks.py (1989 lines)", "shortDescription": {"text": "Very large file: backend/app/tasks/cache_tasks.py (1989 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-e4c26e24b3a7cdbb", "name": "Very large file: backend/app/tasks/fundamentals_tasks.py (1480 lines)", "shortDescription": {"text": "Very large file: backend/app/tasks/fundamentals_tasks.py (1480 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-4d0f80ec2b24eb53", "name": "Very large file: backend/app/services/static_site_export_service.py (2035 lines)", "shortDescription": {"text": "Very large file: backend/app/services/static_site_export_service.py (2035 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-b19ca20189243086", "name": "Very large file: backend/app/services/ibd_group_rank_service.py (1952 lines)", "shortDescription": {"text": "Very large file: backend/app/services/ibd_group_rank_service.py (1952 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-a5765d02f681a7b3", "name": "Very large file: backend/app/services/theme_extraction_service.py (1932 lines)", "shortDescription": {"text": "Very large file: backend/app/services/theme_extraction_service.py (1932 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-1e80eff0c8c72f0b", "name": "Very large file: backend/app/services/fundamentals_cache_service.py (1768 lines)", "shortDescription": {"text": "Very large file: backend/app/services/fundamentals_cache_service.py (1768 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-5d52b8e17de92e4a", "name": "Very large file: backend/app/services/bulk_data_fetcher.py (1243 lines)", "shortDescription": {"text": "Very large file: backend/app/services/bulk_data_fetcher.py (1243 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-6634a0136b38ea69", "name": "Very large file: backend/app/services/official_market_universe_source_service.py (2564 lines)", "shortDescription": {"text": "Very large file: backend/app/services/official_market_universe_source_service.py (2564 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-4b5b6ac2eac28f34", "name": "Very large file: backend/app/services/theme_discovery_service.py (2038 lines)", "shortDescription": {"text": "Very large file: backend/app/services/theme_discovery_service.py (2038 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-5cce4ea63f9ced81", "name": "Very large file: backend/app/services/provider_snapshot_service.py (1514 lines)", "shortDescription": {"text": "Very large file: backend/app/services/provider_snapshot_service.py (1514 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-5ad846d1ab7f68af", "name": "Very large file: backend/app/services/stock_universe_service.py (3123 lines)", "shortDescription": {"text": "Very large file: backend/app/services/stock_universe_service.py (3123 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-584e48aab8bb1a52", "name": "Very large file: backend/app/services/theme_merging_service.py (2923 lines)", "shortDescription": {"text": "Very large file: backend/app/services/theme_merging_service.py (2923 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-ba0c5153193e42b2", "name": "Very large file: backend/app/services/price_cache_service.py (2160 lines)", "shortDescription": {"text": "Very large file: backend/app/services/price_cache_service.py (2160 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-b31901655367f9db", "name": "Very large file: backend/alembic/versions/20260408_0001_baseline.py (1304 lines)", "shortDescription": {"text": "Very large file: backend/alembic/versions/20260408_0001_baseline.py (1304 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 400 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 51 placeholder/mock markers across 29 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-65d95f76e7748f87", "name": "Commented-code block (5 lines) in frontend/src/App.jsx:101", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/App.jsx:101"}, "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-e667a9f9df7714aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/assistant.js:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/assistant.js:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c473b21043103bdd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/static/dataClient.js:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/static/dataClient.js:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75311608de525f03", "name": "Commented-code block (5 lines) in frontend/src/components/Stock/MarketThemesList.jsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/Stock/MarketThemesList.jsx:64"}, "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-14424362db4d7b69", "name": "Commented-code block (5 lines) in frontend/src/components/Charts/rsBand.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/rsBand.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac3a1232073f894c", "name": "Commented-code block (5 lines) in frontend/src/components/Charts/useDragZoom.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/useDragZoom.js: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-dfb119f5e604f0ed", "name": "Commented-code block (5 lines) in frontend/src/components/Charts/CandlestickChart.jsx:256", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/CandlestickChart.jsx:256"}, "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-eb42f5c289e9998a", "name": "Commented-code block (5 lines) in frontend/src/components/Scan/ChartViewerModal.jsx:259", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/Scan/ChartViewerModal.jsx:259"}, "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-0a55c31af775376f", "name": "Legacy-named symbol `fundamentals_v1` in backend/tests/unit/test_provider_snapshot_service.py:482", "shortDescription": {"text": "Legacy-named symbol `fundamentals_v1` in backend/tests/unit/test_provider_snapshot_service.py:482"}, "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-1974fdf7de0ee23b", "name": "Commented-code block (5 lines) in backend/tests/unit/test_provider_snapshot_service.py:1759", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_provider_snapshot_service.py:1759"}, "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-bde063a9ca5cc0d6", "name": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_canonical_key_policy_adr.py", "shortDescription": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_canonical_key_policy_adr.py:11"}, "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-491c9ab7fd6ca67e", "name": "Commented-code block (5 lines) in backend/tests/unit/test_translation_service.py:400", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_translation_service.py:400"}, "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-ea288e92ba954543", "name": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_identity_normalization.py:2", "shortDescription": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_identity_normalization.py:22"}, "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-2786c0b306f8fc63", "name": "Legacy-named symbol `TestFromLegacy` in backend/tests/unit/test_universe_schema.py:366", "shortDescription": {"text": "Legacy-named symbol `TestFromLegacy` in backend/tests/unit/test_universe_schema.py:366"}, "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-f14f6ea694b6b6d6", "name": "Legacy-named symbol `used_legacy` in backend/tests/unit/test_universe_compat_adapter.py:20", "shortDescription": {"text": "Legacy-named symbol `used_legacy` in backend/tests/unit/test_universe_compat_adapter.py:20"}, "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-ff61a722b2d69cd3", "name": "Legacy-named symbol `test_promoted_dict_is_shallow_copy` in backend/tests/unit/test_setup_engine_persistence.py:161", "shortDescription": {"text": "Legacy-named symbol `test_promoted_dict_is_shallow_copy` in backend/tests/unit/test_setup_engine_persistence.py:161"}, "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-0989124fb6a71066", "name": "Legacy-named symbol `TestHealthDeprecated` in backend/tests/unit/test_health_endpoints.py:109", "shortDescription": {"text": "Legacy-named symbol `TestHealthDeprecated` in backend/tests/unit/test_health_endpoints.py:109"}, "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-c524ededc1047f84", "name": "Legacy-named symbol `test_build_universe_def_raises_on_invalid_legacy` in backend/tests/unit/test_scan_enqueue.py:76", "shortDescription": {"text": "Legacy-named symbol `test_build_universe_def_raises_on_invalid_legacy` in backend/tests/unit/test_scan_enqueue.py:76"}, "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-1dc9223b6933a0be", "name": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/test_detector_subtasks_c3a_c4a_c6a.py:104", "shortDescription": {"text": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/test_detector_subtasks_c3a_c4a_c6a.py:104"}, "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-9b8f56a86f179a73", "name": "Legacy-named symbol `seed_v1` in backend/tests/unit/test_index_membership_seeder.py:46", "shortDescription": {"text": "Legacy-named symbol `seed_v1` in backend/tests/unit/test_index_membership_seeder.py:46"}, "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-d2e126e4735f1458", "name": "Commented-code block (6 lines) in backend/tests/unit/test_multilingual_qa_harness.py:160", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_multilingual_qa_harness.py:160"}, "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-ad6057c8879be28f", "name": "Legacy-named symbol `TestUnboundScanFallsBackToLegacy` in backend/tests/unit/test_export_scan_results_use_case.py:206", "shortDescription": {"text": "Legacy-named symbol `TestUnboundScanFallsBackToLegacy` in backend/tests/unit/test_export_scan_results_use_case.py:206"}, "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-698ab72d3305e8d1", "name": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/tests/unit/test_price_contract_adr.py:11", "shortDescription": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/tests/unit/test_price_contract_adr.py:11"}, "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-5541dd7c1542b48f", "name": "Legacy-named symbol `s_legacy` in backend/tests/unit/test_scan_crud_endpoints.py:155", "shortDescription": {"text": "Legacy-named symbol `s_legacy` in backend/tests/unit/test_scan_crud_endpoints.py:155"}, "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-d2280668a7445223", "name": "Legacy-named symbol `cross_detector_v1` in backend/tests/unit/test_pattern_calibration.py:38", "shortDescription": {"text": "Legacy-named symbol `cross_detector_v1` in backend/tests/unit/test_pattern_calibration.py:38"}, "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-60907e298d88c332", "name": "Commented-code block (5 lines) in backend/tests/unit/test_scan_field_availability.py:98", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_scan_field_availability.py:98"}, "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-955d8b1e803713ac", "name": "Legacy-named symbol `adr_e1_pipeline_scoped_processing_state_v1` in backend/tests/unit/test_theme_pipeline_processing_ad", "shortDescription": {"text": "Legacy-named symbol `adr_e1_pipeline_scoped_processing_state_v1` in backend/tests/unit/test_theme_pipeline_processing_adr.py:11"}, "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-4774b3971c73214c", "name": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/golden/test_golden_detectors.py:322", "shortDescription": {"text": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/golden/test_golden_detectors.py:322"}, "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-2dddea194d3227e8", "name": "Commented-code block (5 lines) in backend/tests/load/conftest.py:21", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/load/conftest.py:21"}, "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-a73cd6ac642c0eb1", "name": "Commented-code block (6 lines) in backend/tests/load/measurement.py:21", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/load/measurement.py:21"}, "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-2492fddcf92d92fb", "name": "Legacy-named symbol `_query_legacy` in backend/tests/parity/test_scan_parity.py:38", "shortDescription": {"text": "Legacy-named symbol `_query_legacy` in backend/tests/parity/test_scan_parity.py:38"}, "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-e63e5c6b7c50ada5", "name": "Legacy-named symbol `seed_v1` in backend/scripts/seed_index_memberships.py:58", "shortDescription": {"text": "Legacy-named symbol `seed_v1` in backend/scripts/seed_index_memberships.py:58"}, "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-e16aa0b34a9c09d0", "name": "Commented-code block (5 lines) in backend/app/main.py:146", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/main.py:146"}, "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-a9f31be235f7b329", "name": "Commented-code block (10 lines) in backend/app/models/theme.py:88", "shortDescription": {"text": "Commented-code block (10 lines) in backend/app/models/theme.py:88"}, "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-757ee5ef8f028f0b", "name": "Commented-code block (6 lines) in backend/app/config/settings.py:165", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/config/settings.py:165"}, "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-fc5ff7d819a21dcc", "name": "Commented-code block (5 lines) in backend/app/use_cases/scanning/create_scan.py:358", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/create_scan.py:358"}, "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-cb1a374b35e347cf", "name": "Commented-code block (5 lines) in backend/app/use_cases/scanning/export_scan_results.py:135", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/export_scan_results.py:135"}, "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-d9dac819fb523fcd", "name": "Commented-code block (5 lines) in backend/app/use_cases/scanning/run_bulk_scan.py:258", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/run_bulk_scan.py:258"}, "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-96d57a0e7234da79", "name": "Legacy-named symbol `used_legacy` in backend/app/api/v1/scans.py:169", "shortDescription": {"text": "Legacy-named symbol `used_legacy` in backend/app/api/v1/scans.py:169"}, "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-a8342a350b58361f", "name": "Commented-code block (9 lines) in backend/app/scripts/export_static_site.py:429", "shortDescription": {"text": "Commented-code block (9 lines) in backend/app/scripts/export_static_site.py:429"}, "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-304252a73184854c", "name": "Commented-code block (6 lines) in backend/app/scripts/build_weekly_reference_bundle.py:571", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/scripts/build_weekly_reference_bundle.py:571"}, "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-1da0c3f0780ec22d", "name": "Network/subprocess call without timeout or try/except \u2014 backend/app/scripts/bootstrap_cn_daily_price_shard.py:124", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/scripts/bootstrap_cn_daily_price_shard.py:124"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9ab9e6c7b54ed9a", "name": "Commented-code block (5 lines) in backend/app/utils/rate_limiter.py:200", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/utils/rate_limiter.py:200"}, "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-136f388e45c391bc", "name": "Commented-code block (6 lines) in backend/app/tasks/cache_tasks.py:550", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/tasks/cache_tasks.py:550"}, "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-dd05a85b16691c7c", "name": "Commented-code block (5 lines) in backend/app/tasks/scan_tasks.py:221", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/tasks/scan_tasks.py:221"}, "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-393d2ed4c4e20e86", "name": "Legacy-named symbol `cross_detector_v1` in backend/app/analysis/patterns/calibration.py:199", "shortDescription": {"text": "Legacy-named symbol `cross_detector_v1` in backend/app/analysis/patterns/calibration.py:199"}, "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-9870060425c13bc6", "name": "Legacy-named symbol `distance_to_pivot_pct_legacy` in backend/app/analysis/patterns/vcp_wrapper.py:112", "shortDescription": {"text": "Legacy-named symbol `distance_to_pivot_pct_legacy` in backend/app/analysis/patterns/vcp_wrapper.py:112"}, "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-b5e6f44fe7e3f4cc", "name": "Commented-code block (5 lines) in backend/app/scanners/data_preparation.py:471", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/scanners/data_preparation.py:471"}, "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-5288d6339d6da84b", "name": "Commented-code block (6 lines) in backend/app/scanners/criteria/rs_sparkline.py:74", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/scanners/criteria/rs_sparkline.py:74"}, "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-a935af8a43c1b235", "name": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/yfinance_service.py:5", "shortDescription": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/yfinance_service.py:5"}, "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-c31ef186ff18ec09", "name": "Commented-code block (5 lines) in backend/app/services/de_universe_ingestion_adapter.py:295", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/de_universe_ingestion_adapter.py:295"}, "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-23dd5ff4d7a6e36a", "name": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/content_ingestion_service.py:162", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/content_ingestion_service.py:162"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae78be52ee1249a6", "name": "Commented-code block (7 lines) in backend/app/services/growth_cadence_service.py:245", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/services/growth_cadence_service.py:245"}, "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-5ceb2ac78c050371", "name": "Commented-code block (5 lines) in backend/app/services/ca_universe_ingestion_adapter.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/ca_universe_ingestion_adapter.py:42"}, "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-142adc6235fdd552", "name": "Legacy-named symbol `seed_v1` in backend/app/services/index_membership_seeder.py:50", "shortDescription": {"text": "Legacy-named symbol `seed_v1` in backend/app/services/index_membership_seeder.py:50"}, "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-5d4b496f2c104891", "name": "Commented-code block (6 lines) in backend/app/services/theme_extraction_service.py:458", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/theme_extraction_service.py:458"}, "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-1f4b249fea327e1a", "name": "Legacy-named symbol `model_copy` in backend/app/services/strategy_profile_service.py:212", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/app/services/strategy_profile_service.py:212"}, "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-8637b0da70f6a250", "name": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/bulk_data_fetcher.py:9", "shortDescription": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/bulk_data_fetcher.py:9"}, "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-d1726215950e1ea7", "name": "Commented-code block (5 lines) in backend/app/services/multi_market_ticker_validator.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/multi_market_ticker_validator.py:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-924f347543607335", "name": "Commented-code block (5 lines) in backend/app/services/cjk_alias_resolver_service.py:141", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/cjk_alias_resolver_service.py:141"}, "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-6ea1070e2981fcd4", "name": "Commented-code block (6 lines) in backend/app/services/official_market_universe_source_service.py:1192", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/official_market_universe_source_service.py:1192"}, "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-bcadde40110445de", "name": "Legacy-named symbol `fundamentals_v1` in backend/app/services/provider_snapshot_service.py:127", "shortDescription": {"text": "Legacy-named symbol `fundamentals_v1` in backend/app/services/provider_snapshot_service.py:127"}, "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-6a950919f98b7fc2", "name": "Commented-code block (6 lines) in backend/app/services/provider_snapshot_service.py:482", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/provider_snapshot_service.py:482"}, "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-774a0a380b8327e6", "name": "Commented-code block (5 lines) in backend/app/services/static_daily_price_refresh_service.py:23", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/static_daily_price_refresh_service.py:23"}, "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-d4d7629c6b01986f", "name": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/stock_universe_service.py:3058", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/stock_universe_service.py:3058"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c933e63da68d59ec", "name": "Commented-code block (6 lines) in backend/app/services/hybrid_fundamentals_service.py:422", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/hybrid_fundamentals_service.py:422"}, "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-2adbac3846ad3520", "name": "Legacy-named symbol `used_legacy` in backend/app/services/universe_compat_adapter.py:50", "shortDescription": {"text": "Legacy-named symbol `used_legacy` in backend/app/services/universe_compat_adapter.py:50"}, "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-a2038f87575348c3", "name": "Commented-code block (5 lines) in backend/app/services/rate_budget_policy.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/rate_budget_policy.py:90"}, "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-bdc455e740a06bec", "name": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/price_cache_service.py:11", "shortDescription": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/price_cache_service.py:11"}, "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-8eb112d511f2bd36", "name": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/app/services/theme_identity_normalization.py:4", "shortDescription": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/app/services/theme_identity_normalization.py:4"}, "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-249904e4e3809519", "name": "Commented-code block (6 lines) in backend/app/services/telemetry/alert_evaluator.py:232", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/telemetry/alert_evaluator.py:232"}, "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-03bb6649f823a3ea", "name": "Commented-code block (6 lines) in backend/app/services/telemetry/weekly_audit.py:186", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/telemetry/weekly_audit.py:186"}, "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-041a9a25b7ea516f", "name": "Commented-code block (5 lines) in backend/app/services/telemetry/alert_thresholds.py:61", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/telemetry/alert_thresholds.py:61"}, "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-82fca4015944979d", "name": "Commented-code block (5 lines) in backend/app/schemas/scanning.py:206", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/schemas/scanning.py:206"}, "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-4297004b2d808401", "name": "Legacy-named symbol `from_legacy` in backend/app/schemas/universe.py:306", "shortDescription": {"text": "Legacy-named symbol `from_legacy` in backend/app/schemas/universe.py:306"}, "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-204516fe62a39593", "name": "Stub function `_rebuild_theme_clusters_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_cluster_i", "shortDescription": {"text": "Stub function `_rebuild_theme_clusters_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_cluster_identity_migration.py:302"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e863d8ab01d8641d", "name": "Stub function `_rebuild_pipeline_state_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_pipeline_", "shortDescription": {"text": "Stub function `_rebuild_pipeline_state_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_pipeline_state_migration.py:205"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45ae60f6a2ead701", "name": "Stub function `emit` (body is just `pass`/`return`) \u2014 backend/app/domain/scanning/ports.py:291", "shortDescription": {"text": "Stub function `emit` (body is just `pass`/`return`) \u2014 backend/app/domain/scanning/ports.py:291"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee422a4634693740", "name": "Commented-code block (11 lines) in backend/app/domain/scanning/custom_criteria_compiler.py:31", "shortDescription": {"text": "Commented-code block (11 lines) in backend/app/domain/scanning/custom_criteria_compiler.py:31"}, "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-dc94d00e18d04bbf", "name": "Commented-code block (8 lines) in backend/alembic/versions/20260414_0011_add_stock_universe_index_membership.py:50", "shortDescription": {"text": "Commented-code block (8 lines) in backend/alembic/versions/20260414_0011_add_stock_universe_index_membership.py:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-582ef33f8e3862a3", "name": "Commented-code block (5 lines) in backend/alembic/versions/20260425_0016_add_market_to_market_breadth.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/versions/20260425_0016_add_market_to_market_breadth.py:55"}, "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-b0b5e7cb1208a7cd", "name": "13 env vars used in code but missing from .env.example", "shortDescription": {"text": "13 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ASIA_UNIVERSE_AUDIT_STALE_HOURS`, `BASE_URL`, `DEV`, `ENABLED_MARKETS`, `GITHUB_STEP_SUMMARY`, `LAUNCH_GATE_REPORT_DIR`, `OLLAMA_API_BASE`, `SITE_URL` + 5 more. 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:\nbackend/app/use_cases/scanning/create_scan.py:to_dict, backend/app/use_cases/scanning/create_scan.py:to_dict\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/interfaces/mcp/models.py:normalize_symbol, backend/app/interfaces/mcp/models.py:normalize_symbol, backend/app/interfaces/mcp/models.py:normalize_symbol\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/analysis/patterns/cup_handle.py:detect, backend/app/analysis/patterns/high_tight_flag.py:detect, backend/app/analysis/patterns/vcp_wrapper.py:detect, backend/app/analysis/patterns/nr7_inside_day.py:detect\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/analysis/patterns/report.py:to_payload, backend/app/analysis/patterns/report.py:to_payload, backend/app/analysis/patterns/report.py:to_payload, backend/app/analysis/patterns/report.py:to_payload\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:\nbackend/app/scanners/volume_breakthrough_scanner.py:scan_stock, backend/app/scanners/minervini_scanner.py:scan_stock, backend/app/scanners/canslim_scanner.py:scan_stock, backend/app/scanners/custom_scanner.py:scan_stock\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-380b7cb95b387b9c", "name": "Near-duplicate function bodies in 11 places", "shortDescription": {"text": "Near-duplicate function bodies in 11 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/services/de_universe_ingestion_adapter.py:normalize_source_name, backend/app/services/finviz_universe_ingestion_adapter.py:normalize_source_name, backend/app/services/au_universe_ingestion_adapter.py:normalize_source_name, backend/app/services/ca_universe_ingestion_adapter.py:normalize_source_name\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-6297377883dd7783", "name": "Near-duplicate function bodies in 13 places", "shortDescription": {"text": "Near-duplicate function bodies in 13 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/services/de_universe_ingestion_adapter.py:canonicalize_rows, backend/app/services/finviz_universe_ingestion_adapter.py:canonicalize_rows, backend/app/services/au_universe_ingestion_adapter.py:canonicalize_rows, backend/app/services/ca_universe_ingestion_adapter.py:canonicalize_rows\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-3763ee76ddbd6805", "name": "Frontend route `/stocks/:ticker` has no Link/navigate to it \u2014 frontend/src/components/Stock/StockDetails.test.jsx", "shortDescription": {"text": "Frontend route `/stocks/:ticker` has no Link/navigate to it \u2014 frontend/src/components/Stock/StockDetails.test.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b0039091cdb79f7", "name": "FastAPI POST `trigger_full_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:26", "shortDescription": {"text": "FastAPI POST `trigger_full_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:26"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-795492d7e875cb62", "name": "FastAPI POST `trigger_symbol_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:56", "shortDescription": {"text": "FastAPI POST `trigger_symbol_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:56"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bec3eba289254e07", "name": "FastAPI POST `trigger_initial_cache_population` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:97", "shortDescription": {"text": "FastAPI POST `trigger_initial_cache_population` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:97"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65f1dac16c62d823", "name": "FastAPI POST `cancel_operations_job` without auth dependency \u2014 backend/app/api/v1/operations.py:23", "shortDescription": {"text": "FastAPI POST `cancel_operations_job` without auth dependency \u2014 backend/app/api/v1/operations.py:23"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab30a9706eedc211", "name": "FastAPI POST `create_conversation` without auth dependency \u2014 backend/app/api/v1/assistant.py:38", "shortDescription": {"text": "FastAPI POST `create_conversation` without auth dependency \u2014 backend/app/api/v1/assistant.py:38"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f964b189dee8d63f", "name": "FastAPI POST `send_message` without auth dependency \u2014 backend/app/api/v1/assistant.py:70", "shortDescription": {"text": "FastAPI POST `send_message` without auth dependency \u2014 backend/app/api/v1/assistant.py:70"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e23ecc996b7d8943", "name": "FastAPI POST `watchlist_add_preview` without auth dependency \u2014 backend/app/api/v1/assistant.py:114", "shortDescription": {"text": "FastAPI POST `watchlist_add_preview` without auth dependency \u2014 backend/app/api/v1/assistant.py:114"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-286d0dc927077283", "name": "FastAPI POST `dismiss_alert` without auth dependency \u2014 backend/app/api/v1/themes_queries.py:207", "shortDescription": {"text": "FastAPI POST `dismiss_alert` without auth dependency \u2014 backend/app/api/v1/themes_queries.py:207"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f75ec8c46812aa3e", "name": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:79", "shortDescription": {"text": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:79"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf9e401ac2e6b66b", "name": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:80", "shortDescription": {"text": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:80"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ffc91983e5e6184", "name": "FastAPI PUT `update_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:101", "shortDescription": {"text": "FastAPI PUT `update_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:101"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68e71558469367e5", "name": "FastAPI DELETE `delete_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:122", "shortDescription": {"text": "FastAPI DELETE `delete_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:122"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf8104a400074df9", "name": "FastAPI PUT `reorder_watchlists` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:134", "shortDescription": {"text": "FastAPI PUT `reorder_watchlists` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:134"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1828b6e843c891ef", "name": "FastAPI POST `add_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:387", "shortDescription": {"text": "FastAPI POST `add_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:387"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a9fc1926a796c3a", "name": "FastAPI POST `bulk_add_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:439", "shortDescription": {"text": "FastAPI POST `bulk_add_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:439"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5ef42b9a99ac5e4", "name": "FastAPI POST `import_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:508", "shortDescription": {"text": "FastAPI POST `import_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:508"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c733b1c213e1bb0", "name": "FastAPI PUT `update_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:594", "shortDescription": {"text": "FastAPI PUT `update_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:594"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-519d166d998ea18e", "name": "FastAPI DELETE `remove_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:617", "shortDescription": {"text": "FastAPI DELETE `remove_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:617"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5aec2a24c539682", "name": "FastAPI PUT `reorder_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:629", "shortDescription": {"text": "FastAPI PUT `reorder_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:629"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-282ef06d0f4f7b91", "name": "FastAPI POST `post_acknowledge` without auth dependency \u2014 backend/app/api/v1/telemetry.py:173", "shortDescription": {"text": "FastAPI POST `post_acknowledge` without auth dependency \u2014 backend/app/api/v1/telemetry.py:173"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-331b199583a31ba2", "name": "FastAPI POST `approve_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:60", "shortDescription": {"text": "FastAPI POST `approve_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:60"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caa5ab9f01c6687d", "name": "FastAPI POST `reject_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:81", "shortDescription": {"text": "FastAPI POST `reject_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:81"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d01f00740911d8ad", "name": "FastAPI POST `run_theme_consolidation` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:115", "shortDescription": {"text": "FastAPI POST `run_theme_consolidation` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:115"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-761c8196669d12cc", "name": "FastAPI POST `run_theme_consolidation_async` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:130", "shortDescription": {"text": "FastAPI POST `run_theme_consolidation_async` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:130"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc9b48622352a918", "name": "FastAPI POST `run_embedding_refresh_campaign` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:168", "shortDescription": {"text": "FastAPI POST `run_embedding_refresh_campaign` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:168"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-501876ecb6e07cde", "name": "FastAPI POST `run_strict_auto_merge_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:193", "shortDescription": {"text": "FastAPI POST `run_strict_auto_merge_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:193"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b796e461228b8866", "name": "FastAPI POST `run_manual_review_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:214", "shortDescription": {"text": "FastAPI POST `run_manual_review_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:214"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-643d879116de58ae", "name": "FastAPI POST `review_candidate_themes` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:257", "shortDescription": {"text": "FastAPI POST `review_candidate_themes` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:257"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5137cda53d771879", "name": "FastAPI POST `check_for_alerts` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:309", "shortDescription": {"text": "FastAPI POST `check_for_alerts` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:309"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20793e9f320e0973", "name": "FastAPI POST `mark_alert_read` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:322", "shortDescription": {"text": "FastAPI POST `mark_alert_read` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:322"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e1e0eceb671b7de", "name": "FastAPI POST `create_theme_from_cluster` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:338", "shortDescription": {"text": "FastAPI POST `create_theme_from_cluster` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:338"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8262734b1a684265", "name": "FastAPI POST `add_theme_constituents` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:363", "shortDescription": {"text": "FastAPI POST `add_theme_constituents` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:363"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd72473cf05c860a", "name": "FastAPI DELETE `deactivate_theme` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:399", "shortDescription": {"text": "FastAPI DELETE `deactivate_theme` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:399"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b679af8c78d93c10", "name": "FastAPI POST `create_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:156", "shortDescription": {"text": "FastAPI POST `create_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:156"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbf088f303623173", "name": "FastAPI POST `refresh_scan_cache` without auth dependency \u2014 backend/app/api/v1/scans.py:227", "shortDescription": {"text": "FastAPI POST `refresh_scan_cache` without auth dependency \u2014 backend/app/api/v1/scans.py:227"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33c38c0db2bae94e", "name": "FastAPI POST `cancel_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:352", "shortDescription": {"text": "FastAPI POST `cancel_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:352"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59392a2885052a80", "name": "FastAPI DELETE `delete_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:485", "shortDescription": {"text": "FastAPI DELETE `delete_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:485"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f2ac307cdf9d269", "name": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:150", "shortDescription": {"text": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:150"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ec3fc3354afe3a8", "name": "FastAPI PUT `update_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:188", "shortDescription": {"text": "FastAPI PUT `update_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:188"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f6fbe1e9165cf88", "name": "FastAPI DELETE `remove_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:219", "shortDescription": {"text": "FastAPI DELETE `remove_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:219"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffda5916470f87e1", "name": "FastAPI PUT `reorder_symbols` without auth dependency \u2014 backend/app/api/v1/market_scan.py:243", "shortDescription": {"text": "FastAPI PUT `reorder_symbols` without auth dependency \u2014 backend/app/api/v1/market_scan.py:243"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85284bfff762dc8c", "name": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/breadth.py:230", "shortDescription": {"text": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/breadth.py:230"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-adfc90b03474da92", "name": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/breadth.py:276", "shortDescription": {"text": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/breadth.py:276"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95d53d77b24ad590", "name": "FastAPI POST `trigger_task` without auth dependency \u2014 backend/app/api/v1/tasks.py:45", "shortDescription": {"text": "FastAPI POST `trigger_task` without auth dependency \u2014 backend/app/api/v1/tasks.py:45"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7cf5fcfcb517f45", "name": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:56", "shortDescription": {"text": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:56"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd0a990b261de67e", "name": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:57", "shortDescription": {"text": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:57"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3221824029f46ed8", "name": "FastAPI PUT `update_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:91", "shortDescription": {"text": "FastAPI PUT `update_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:91"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa1cc8d86019ed6d", "name": "FastAPI DELETE `delete_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:137", "shortDescription": {"text": "FastAPI DELETE `delete_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:137"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93fd47966b060296", "name": "FastAPI PUT `reorder_presets` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:149", "shortDescription": {"text": "FastAPI PUT `reorder_presets` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:149"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33ffe3c314dd9fcf", "name": "FastAPI POST `refresh_universe` without auth dependency \u2014 backend/app/api/v1/universe.py:18", "shortDescription": {"text": "FastAPI POST `refresh_universe` without auth dependency \u2014 backend/app/api/v1/universe.py:18"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-024de03632e491cb", "name": "FastAPI POST `import_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:60", "shortDescription": {"text": "FastAPI POST `import_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:60"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1aa14180b783f056", "name": "FastAPI POST `import_hk_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:113", "shortDescription": {"text": "FastAPI POST `import_hk_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:113"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2729a1353bd991e9", "name": "FastAPI POST `import_jp_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:162", "shortDescription": {"text": "FastAPI POST `import_jp_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:162"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-864e4fd6d567624d", "name": "FastAPI POST `import_tw_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:211", "shortDescription": {"text": "FastAPI POST `import_tw_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:211"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e6d5bfc0335a18c", "name": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:305", "shortDescription": {"text": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:305"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f830efba12950bb", "name": "FastAPI DELETE `deactivate_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:344", "shortDescription": {"text": "FastAPI DELETE `deactivate_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:344"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-314ed056304f8615", "name": "FastAPI POST `refresh_sp500` without auth dependency \u2014 backend/app/api/v1/universe.py:381", "shortDescription": {"text": "FastAPI POST `refresh_sp500` without auth dependency \u2014 backend/app/api/v1/universe.py:381"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbc2bd7e46a02563", "name": "FastAPI POST `warm_spy_benchmark_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:141", "shortDescription": {"text": "FastAPI POST `warm_spy_benchmark_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:141"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22f61b0f87a9b375", "name": "FastAPI POST `warm_symbol_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:168", "shortDescription": {"text": "FastAPI POST `warm_symbol_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:168"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69a602bf69e076b9", "name": "FastAPI POST `warm_all_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:211", "shortDescription": {"text": "FastAPI POST `warm_all_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:211"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1f1aa0f632e03a8", "name": "FastAPI DELETE `invalidate_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:237", "shortDescription": {"text": "FastAPI DELETE `invalidate_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:237"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5ee8fcbcb119ad4", "name": "FastAPI POST `force_refresh_stale_data` without auth dependency \u2014 backend/app/api/v1/cache.py:316", "shortDescription": {"text": "FastAPI POST `force_refresh_stale_data` without auth dependency \u2014 backend/app/api/v1/cache.py:316"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96dd781cea299951", "name": "FastAPI POST `smart_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:454", "shortDescription": {"text": "FastAPI POST `smart_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:454"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ff146e59111c36f", "name": "FastAPI POST `force_cancel_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:486", "shortDescription": {"text": "FastAPI POST `force_cancel_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:486"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a4f431e3b5383ea", "name": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/groups.py:433", "shortDescription": {"text": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/groups.py:433"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58cd8c383862f24d", "name": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/groups.py:544", "shortDescription": {"text": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/groups.py:544"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e0041a9ee347ed6", "name": "FastAPI POST `trigger_gapfill` without auth dependency \u2014 backend/app/api/v1/groups.py:686", "shortDescription": {"text": "FastAPI POST `trigger_gapfill` without auth dependency \u2014 backend/app/api/v1/groups.py:686"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a724f6e8e469a3c", "name": "FastAPI POST `run_pipeline_async` without auth dependency \u2014 backend/app/api/v1/themes_content_pipeline.py:36", "shortDescription": {"text": "FastAPI POST `run_pipeline_async` without auth dependency \u2014 backend/app/api/v1/themes_content_pipeline.py:36"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6b979a6af187028", "name": "FastAPI POST `add_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:59", "shortDescription": {"text": "FastAPI POST `add_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:59"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-058adafa09bc6c04", "name": "FastAPI PUT `update_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:96", "shortDescription": {"text": "FastAPI PUT `update_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:96"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a7ba56b947946cc", "name": "FastAPI DELETE `delete_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:152", "shortDescription": {"text": "FastAPI DELETE `delete_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:152"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb237b4ee43d8422", "name": "FastAPI POST `seed_default_sources_endpoint` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:168", "shortDescription": {"text": "FastAPI POST `seed_default_sources_endpoint` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:168"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a360c4c313aaccf", "name": "FastAPI POST `run_ingestion` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:177", "shortDescription": {"text": "FastAPI POST `run_ingestion` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:177"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c0e5db49d88e19b", "name": "FastAPI POST `run_extraction` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:189", "shortDescription": {"text": "FastAPI POST `run_extraction` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:189"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d862da414afc0900", "name": "FastAPI POST `calculate_theme_metrics` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:204", "shortDescription": {"text": "FastAPI POST `calculate_theme_metrics` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:204"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88b1382a6c5a82a4", "name": "FastAPI POST `validate_all_themes` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:218", "shortDescription": {"text": "FastAPI POST `validate_all_themes` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:218"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34cb0a92a14831b7", "name": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:47", "shortDescription": {"text": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-316ba4fe1cb8696c", "name": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:48", "shortDescription": {"text": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:48"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c31c9937bef8341c", "name": "FastAPI PUT `update_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:69", "shortDescription": {"text": "FastAPI PUT `update_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:69"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b10767ba39127af", "name": "FastAPI DELETE `delete_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:90", "shortDescription": {"text": "FastAPI DELETE `delete_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:90"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd19cd12c1c94c09", "name": "FastAPI PUT `reorder_themes` without auth dependency \u2014 backend/app/api/v1/user_themes.py:102", "shortDescription": {"text": "FastAPI PUT `reorder_themes` without auth dependency \u2014 backend/app/api/v1/user_themes.py:102"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-132c0e3951a03bcb", "name": "FastAPI POST `create_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:313", "shortDescription": {"text": "FastAPI POST `create_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:313"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9aba59da6bec1822", "name": "FastAPI PUT `update_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:346", "shortDescription": {"text": "FastAPI PUT `update_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:346"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fb6bea0ec811b54", "name": "FastAPI DELETE `delete_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:369", "shortDescription": {"text": "FastAPI DELETE `delete_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:369"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0209218f39878b9e", "name": "FastAPI PUT `reorder_subgroups` without auth dependency \u2014 backend/app/api/v1/user_themes.py:381", "shortDescription": {"text": "FastAPI PUT `reorder_subgroups` without auth dependency \u2014 backend/app/api/v1/user_themes.py:381"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac39499ea173120f", "name": "FastAPI POST `add_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:401", "shortDescription": {"text": "FastAPI POST `add_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:401"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f924cac0349e958c", "name": "FastAPI PUT `update_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:436", "shortDescription": {"text": "FastAPI PUT `update_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:436"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5df4539c76a334f8", "name": "FastAPI DELETE `remove_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:466", "shortDescription": {"text": "FastAPI DELETE `remove_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:466"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ddc216a7032a131", "name": "FastAPI PUT `reorder_stocks` without auth dependency \u2014 backend/app/api/v1/user_themes.py:478", "shortDescription": {"text": "FastAPI PUT `reorder_stocks` without auth dependency \u2014 backend/app/api/v1/user_themes.py:478"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2462dcdc68554a67", "name": "FastAPI POST `resolve_failure` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:121", "shortDescription": {"text": "FastAPI POST `resolve_failure` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:121"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d89eb73e360d81c", "name": "FastAPI POST `resolve_all_for_symbol` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:152", "shortDescription": {"text": "FastAPI POST `resolve_all_for_symbol` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:152"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-923695a7b52d4c2a", "name": "FastAPI POST `get_price_history_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:871", "shortDescription": {"text": "FastAPI POST `get_price_history_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:871"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5be3e600e8cc5f60", "name": "FastAPI POST `get_stock_fundamentals_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:910", "shortDescription": {"text": "FastAPI POST `get_stock_fundamentals_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:910"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49cbc1529e5524f3", "name": "FastAPI POST `run_taxonomy_assignment` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:85", "shortDescription": {"text": "FastAPI POST `run_taxonomy_assignment` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:85"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95cffb2ad5ff00de", "name": "FastAPI POST `run_taxonomy_assignment_async` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:102", "shortDescription": {"text": "FastAPI POST `run_taxonomy_assignment_async` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:102"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bc85bae21e37c30", "name": "FastAPI PUT `reassign_l2_to_l1` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:116", "shortDescription": {"text": "FastAPI PUT `reassign_l2_to_l1` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:116"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b43b3a516eca8f48", "name": "FastAPI POST `force_release_lock` without auth dependency \u2014 backend/app/api/v1/data_fetch_status.py:39", "shortDescription": {"text": "FastAPI POST `force_release_lock` without auth dependency \u2014 backend/app/api/v1/data_fetch_status.py:39"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /` 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-6916b07fac62bea6", "name": "Unused endpoint: POST /refresh/all", "shortDescription": {"text": "Unused endpoint: POST /refresh/all"}, "fullDescription": {"text": "`backend/app/api/v1/fundamentals.py` declares `POST /refresh/all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d07f9dddb9e54b17", "name": "Unused endpoint: POST /refresh/symbol/{symbol}", "shortDescription": {"text": "Unused endpoint: POST /refresh/symbol/{symbol}"}, "fullDescription": {"text": "`backend/app/api/v1/fundamentals.py` declares `POST /refresh/symbol/{symbol}` 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-3f89c919cedfe483", "name": "Unused endpoint: POST /populate", "shortDescription": {"text": "Unused endpoint: POST /populate"}, "fullDescription": {"text": "`backend/app/api/v1/fundamentals.py` declares `POST /populate` 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-cd8dc4599ec52a08", "name": "Unused endpoint: GET /stats", "shortDescription": {"text": "Unused endpoint: GET /stats"}, "fullDescription": {"text": "`backend/app/api/v1/fundamentals.py` declares `GET /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-516f9374f9fcbbb5", "name": "Unused endpoint: GET /{symbol}/minervini", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/minervini"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/minervini` 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-6f3801b2d68aed1d", "name": "Unused endpoint: GET /{symbol}/rs-rating", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/rs-rating"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/rs-rating` 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-eab223b2e63f5a00", "name": "Unused endpoint: GET /{symbol}/stage", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/stage"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/stage` 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-680755652d6e68f0", "name": "Unused endpoint: GET /{symbol}/ma-analysis", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/ma-analysis"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/ma-analysis` 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-4ed9ab7c09f9e8a2", "name": "Unused endpoint: GET /{symbol}/vcp", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/vcp"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/vcp` 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-798e0333cecf2e36", "name": "Unused endpoint: GET /{symbol}/52-week-position", "shortDescription": {"text": "Unused endpoint: GET /{symbol}/52-week-position"}, "fullDescription": {"text": "`backend/app/api/v1/technical.py` declares `GET /{symbol}/52-week-position` 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-1008c575819b3d37", "name": "Unused endpoint: GET /jobs", "shortDescription": {"text": "Unused endpoint: GET /jobs"}, "fullDescription": {"text": "`backend/app/api/v1/operations.py` declares `GET /jobs` 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-a1f5994c1f21ad36", "name": "Unused endpoint: POST /jobs/{task_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /jobs/{task_id}/cancel"}, "fullDescription": {"text": "`backend/app/api/v1/operations.py` declares `POST /jobs/{task_id}/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81c3f56a60f5cb56", "name": "Unused endpoint: GET /{profile}", "shortDescription": {"text": "Unused endpoint: GET /{profile}"}, "fullDescription": {"text": "`backend/app/api/v1/strategy_profiles.py` declares `GET /{profile}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71ab5eb26a3c6f18", "name": "Unused endpoint: POST /api/v1/assistant/conversations", "shortDescription": {"text": "Unused endpoint: POST /api/v1/assistant/conversations"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `POST /api/v1/assistant/conversations` 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-02488cf8dfee6de4", "name": "Unused endpoint: GET /api/v1/assistant/conversations", "shortDescription": {"text": "Unused endpoint: GET /api/v1/assistant/conversations"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `GET /api/v1/assistant/conversations` 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-a7b68c68c4c45cdb", "name": "Unused endpoint: GET /api/v1/assistant/conversations/{conversation_id}", "shortDescription": {"text": "Unused endpoint: GET /api/v1/assistant/conversations/{conversation_id}"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `GET /api/v1/assistant/conversations/{conversation_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-f8a58575603e5059", "name": "Unused endpoint: POST /api/v1/assistant/conversations/{conversation_id}/messages", "shortDescription": {"text": "Unused endpoint: POST /api/v1/assistant/conversations/{conversation_id}/messages"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `POST /api/v1/assistant/conversations/{conversation_id}/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-c237ce61e78bc78b", "name": "Unused endpoint: GET /api/v1/assistant/health", "shortDescription": {"text": "Unused endpoint: GET /api/v1/assistant/health"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `GET /api/v1/assistant/health` 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-933e5e1470d866e0", "name": "Unused endpoint: POST /api/v1/assistant/watchlist-add-preview", "shortDescription": {"text": "Unused endpoint: POST /api/v1/assistant/watchlist-add-preview"}, "fullDescription": {"text": "`backend/app/api/v1/assistant.py` declares `POST /api/v1/assistant/watchlist-add-preview` 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-fe13dd0d9ffeb9cb", "name": "Unused endpoint: GET /bootstrap", "shortDescription": {"text": "Unused endpoint: GET /bootstrap"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /bootstrap` 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-2748808021f259ec", "name": "Unused endpoint: GET /pipelines", "shortDescription": {"text": "Unused endpoint: GET /pipelines"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /pipelines` 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-e738ffd9fc26accf", "name": "Unused endpoint: GET /rankings", "shortDescription": {"text": "Unused endpoint: GET /rankings"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /rankings` 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-a6cd0c3ef25476c2", "name": "Unused endpoint: GET /emerging", "shortDescription": {"text": "Unused endpoint: GET /emerging"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /emerging` 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-67db81ff589a2912", "name": "Unused endpoint: GET /alerts", "shortDescription": {"text": "Unused endpoint: GET /alerts"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /alerts` 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-f210ebc7e4e66cd3", "name": "Unused endpoint: GET /lifecycle-transitions", "shortDescription": {"text": "Unused endpoint: GET /lifecycle-transitions"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /lifecycle-transitions` 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-67508b1761d29094", "name": "Unused endpoint: POST /alerts/{alert_id}/dismiss", "shortDescription": {"text": "Unused endpoint: POST /alerts/{alert_id}/dismiss"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `POST /alerts/{alert_id}/dismiss` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-291911293a5fe4ab", "name": "Unused endpoint: GET /matching/telemetry", "shortDescription": {"text": "Unused endpoint: GET /matching/telemetry"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /matching/telemetry` 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-28eb93057fc426f9", "name": "Unused endpoint: GET /{theme_id}", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_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-c147a954c3db6eda", "name": "Unused endpoint: GET /{theme_id}/history", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}/history"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_id}/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-dd846e81ddef830f", "name": "Unused endpoint: GET /{theme_id}/mentions", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}/mentions"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_id}/mentions` 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-fe4fa2c8753b4171", "name": "Unused endpoint: GET /correlation/clusters", "shortDescription": {"text": "Unused endpoint: GET /correlation/clusters"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /correlation/clusters` 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-d1c0889fe4167fe5", "name": "Unused endpoint: GET /{theme_id}/validate", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}/validate"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_id}/validate` 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-af347a90c2e328f5", "name": "Unused endpoint: GET /{theme_id}/entrants", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}/entrants"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_id}/entrants` 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-bf75a8fb6e18d65c", "name": "Unused endpoint: GET /{theme_id}/similar", "shortDescription": {"text": "Unused endpoint: GET /{theme_id}/similar"}, "fullDescription": {"text": "`backend/app/api/v1/themes_queries.py` declares `GET /{theme_id}/similar` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `POST /` 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-10aae7611dee85d5", "name": "Unused endpoint: PUT /{watchlist_id}", "shortDescription": {"text": "Unused endpoint: PUT /{watchlist_id}"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `PUT /{watchlist_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-0ad4c184a364ad80", "name": "Unused endpoint: DELETE /{watchlist_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{watchlist_id}"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `DELETE /{watchlist_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-365510c67c130be0", "name": "Unused endpoint: PUT /reorder", "shortDescription": {"text": "Unused endpoint: PUT /reorder"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `PUT /reorder` 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-a7a0e9c3c67c5523", "name": "Unused endpoint: GET /{watchlist_id}/data", "shortDescription": {"text": "Unused endpoint: GET /{watchlist_id}/data"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `GET /{watchlist_id}/data` 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-f2745a1ebddde0f0", "name": "Unused endpoint: GET /{watchlist_id}/stewardship", "shortDescription": {"text": "Unused endpoint: GET /{watchlist_id}/stewardship"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `GET /{watchlist_id}/stewardship` 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-8370aeadd1e92913", "name": "Unused endpoint: POST /{watchlist_id}/items", "shortDescription": {"text": "Unused endpoint: POST /{watchlist_id}/items"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `POST /{watchlist_id}/items` 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-26b513a927f5bc63", "name": "Unused endpoint: POST /{watchlist_id}/items/bulk", "shortDescription": {"text": "Unused endpoint: POST /{watchlist_id}/items/bulk"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `POST /{watchlist_id}/items/bulk` 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-b01e042c6df99e09", "name": "Unused endpoint: POST /{watchlist_id}/items/import", "shortDescription": {"text": "Unused endpoint: POST /{watchlist_id}/items/import"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `POST /{watchlist_id}/items/import` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f174933dcc0cc60e", "name": "Unused endpoint: PUT /items/{item_id}", "shortDescription": {"text": "Unused endpoint: PUT /items/{item_id}"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `PUT /items/{item_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-6be2de44e33fa66e", "name": "Unused endpoint: DELETE /items/{item_id}", "shortDescription": {"text": "Unused endpoint: DELETE /items/{item_id}"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `DELETE /items/{item_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-f5fb5d3fbd7205c1", "name": "Unused endpoint: PUT /{watchlist_id}/items/reorder", "shortDescription": {"text": "Unused endpoint: PUT /{watchlist_id}/items/reorder"}, "fullDescription": {"text": "`backend/app/api/v1/user_watchlists.py` declares `PUT /{watchlist_id}/items/reorder` 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-92a4c5e0e3b2448a", "name": "Unused endpoint: GET /config/llm", "shortDescription": {"text": "Unused endpoint: GET /config/llm"}, "fullDescription": {"text": "`backend/app/api/v1/config.py` declares `GET /config/llm` 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-7c490bd31dd20e66", "name": "Unused endpoint: POST /config/llm", "shortDescription": {"text": "Unused endpoint: POST /config/llm"}, "fullDescription": {"text": "`backend/app/api/v1/config.py` declares `POST /config/llm` 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-e5bedb9e12d45bed", "name": "Unused endpoint: POST /config/ollama", "shortDescription": {"text": "Unused endpoint: POST /config/ollama"}, "fullDescription": {"text": "`backend/app/api/v1/config.py` declares `POST /config/ollama` 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/22956"}, "properties": {"repository": "xang1234/stock-screener", "repoUrl": "https://github.com/xang1234/stock-screener", "branch": "main"}, "results": [{"ruleId": "scanner-fde65b6ee89b493c", "level": "note", "message": {"text": "Possibly dead Python function: init_db"}, "properties": {"repobilityId": "a776a5dfbdf65853", "scanner": "scanner-primary", "fingerprint": "fde65b6ee89b493c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/database.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5bb7892cabb21da2", "level": "note", "message": {"text": "Possibly dead Python function: parse_scan_sort"}, "properties": {"repobilityId": "8d00e258383f29d7", "scanner": "scanner-primary", "fingerprint": "5bb7892cabb21da2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scan_filter_params.py:337"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b7e93320e8a8454", "level": "note", "message": {"text": "Possibly dead Python function: parse_page_spec"}, "properties": {"repobilityId": "70674988e36d2610", "scanner": "scanner-primary", "fingerprint": "6b7e93320e8a8454", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scan_filter_params.py:351"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d892ba780a3969b6", "level": "note", "message": {"text": "Possibly dead Python function: require_admin"}, "properties": {"repobilityId": "3c06db2e25566bf7", "scanner": "scanner-primary", "fingerprint": "d892ba780a3969b6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/config.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bcec433c1e88b34e", "level": "note", "message": {"text": "Possibly dead Python function: wait_for_service"}, "properties": {"repobilityId": "a4e374a40a4425fa", "scanner": "scanner-primary", "fingerprint": "bcec433c1e88b34e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/utils/rate_limiter.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-957082df2f24a452", "level": "note", "message": {"text": "Possibly dead Python function: wait_if_quota_exceeded"}, "properties": {"repobilityId": "fda553b6d39b3f53", "scanner": "scanner-primary", "fingerprint": "957082df2f24a452", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/utils/rate_limiter.py:168"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8fc43171c33f8f7e", "level": "note", "message": {"text": "Possibly dead Python function: should_refresh_cache"}, "properties": {"repobilityId": "34ba2f359de7f354", "scanner": "scanner-primary", "fingerprint": "8fc43171c33f8f7e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/utils/market_hours.py:284"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-478f3eec2b87bc82", "level": "note", "message": {"text": "Possibly dead Python function: redacted_database_url"}, "properties": {"repobilityId": "9bb8276b299870f8", "scanner": "scanner-primary", "fingerprint": "478f3eec2b87bc82", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/utils/db_url.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c19db888e9b3da52", "level": "note", "message": {"text": "Possibly dead Python function: release_group_rank_gapfill_memory"}, "properties": {"repobilityId": "565fc5613b7923ed", "scanner": "scanner-primary", "fingerprint": "c19db888e9b3da52", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/tasks/group_rank_memory.py:13"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-94fe46b76c78d005", "level": "note", "message": {"text": "Possibly dead Python function: is_locked"}, "properties": {"repobilityId": "ba3026708abbb7bb", "scanner": "scanner-primary", "fingerprint": "94fe46b76c78d005", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/tasks/data_fetch_lock.py:292"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-88cb843e8deea14d", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "88cb843e8deea14d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/tasks/data_fetch_lock.py:418"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8f6072aae29742c", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "f8f6072aae29742c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/tasks/workload_coordination.py:156"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-309dfb106b14c8c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/api/client.js:73"}, "properties": {"repobilityId": "336e9f35c04e63c4", "scanner": "scanner-primary", "fingerprint": "309dfb106b14c8c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fae55a9dac00edc8", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "fae55a9dac00edc8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a10d10eb03b0f644", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "a10d10eb03b0f644", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-245c29b33feb7b6a", "level": "warning", "message": {"text": "Privileged port 8 in use"}, "properties": {"repobilityId": "8e03f5632e703751", "scanner": "scanner-primary", "fingerprint": "245c29b33feb7b6a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ibd-classification.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60427b03771411b6", "level": "warning", "message": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "properties": {"repobilityId": "735c01d8531dfd2c", "scanner": "scanner-primary", "fingerprint": "60427b03771411b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "1d226f7474bc3dab", "scanner": "scanner-primary", "fingerprint": "faa134129e5545ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b048d166901fd868", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "53cbc0ab59718b8e", "scanner": "scanner-primary", "fingerprint": "b048d166901fd868", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-8cd20d539467d2c5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "06b87ac9439092d6", "scanner": "scanner-primary", "fingerprint": "8cd20d539467d2c5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8cd20d539467d2c5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "38c59ede2ed157df", "scanner": "scanner-primary", "fingerprint": "8cd20d539467d2c5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-cf9aea5e5eff9ec3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/MarketScan/TradingViewChart.jsx:17"}, "properties": {"repobilityId": "e8ab7277b09ac071", "scanner": "scanner-primary", "fingerprint": "cf9aea5e5eff9ec3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/MarketScan/TradingViewChart.jsx"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-3cce207399195196", "level": "error", "message": {"text": "Possible secret in scripts/start_docker_assistant_stack.sh"}, "properties": {"repobilityId": "8d0222769a1bbcaa", "scanner": "scanner-primary", "fingerprint": "3cce207399195196", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/start_docker_assistant_stack.sh"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-3477d86bae7dc6f3", "level": "error", "message": {"text": "Possible secret in scripts/run_local_hermes_gateway.sh"}, "properties": {"repobilityId": "56928d5ff2c9d477", "scanner": "scanner-primary", "fingerprint": "3477d86bae7dc6f3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run_local_hermes_gateway.sh"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-30ea2c9795fa9e4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7de427e4d7959242", "scanner": "scanner-primary", "fingerprint": "30ea2c9795fa9e4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-30ea2c9795fa9e4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7de427e4d7959242", "scanner": "scanner-primary", "fingerprint": "30ea2c9795fa9e4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 344}}}]}, {"ruleId": "scanner-30ea2c9795fa9e4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "21bcdf2c1bd295d5", "scanner": "scanner-primary", "fingerprint": "30ea2c9795fa9e4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 386}}}]}, {"ruleId": "scanner-30ea2c9795fa9e4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a716ab43a6f00d69", "scanner": "scanner-primary", "fingerprint": "30ea2c9795fa9e4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 709}}}]}, {"ruleId": "scanner-30ea2c9795fa9e4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ce9744ad40e78281", "scanner": "scanner-primary", "fingerprint": "30ea2c9795fa9e4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 782}}}]}, {"ruleId": "scanner-7af64cf43fcb9873", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8f5868a5b8ed8e29", "scanner": "scanner-primary", "fingerprint": "7af64cf43fcb9873", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/static-site.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7f691f077039ee5", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fac443e11c40d845", "scanner": "scanner-primary", "fingerprint": "d7f691f077039ee5", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ibd-classification.yml"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-d7f691f077039ee5", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "94baa4b015b9cc88", "scanner": "scanner-primary", "fingerprint": "d7f691f077039ee5", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ibd-classification.yml"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-bfdb0cde7251c17c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "948b142f319b000b", "scanner": "scanner-primary", "fingerprint": "bfdb0cde7251c17c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ibd-classification.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7737f58bedf29a6", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "aabe8a1311704e17", "scanner": "scanner-primary", "fingerprint": "a7737f58bedf29a6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-asset-cleanup.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3fda9e893c533ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4b845a5807c42de", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae63b315ae3ef32f", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4b845a5807c42de", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae63b315ae3ef32f", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e6c3cbcc23f4973", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-64192a3c67110d01", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "87338a8bfcb6f435", "scanner": "scanner-primary", "fingerprint": "64192a3c67110d01", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4262967ea88f05ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8b5000785e346e1b", "scanner": "scanner-primary", "fingerprint": "4262967ea88f05ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 260}}}]}, {"ruleId": "scanner-4262967ea88f05ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "21cc53d7e4070ea8", "scanner": "scanner-primary", "fingerprint": "4262967ea88f05ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 334}}}]}, {"ruleId": "scanner-4262967ea88f05ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8b5000785e346e1b", "scanner": "scanner-primary", "fingerprint": "4262967ea88f05ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 407}}}]}, {"ruleId": "scanner-4262967ea88f05ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "21cc53d7e4070ea8", "scanner": "scanner-primary", "fingerprint": "4262967ea88f05ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 459}}}]}, {"ruleId": "scanner-4262967ea88f05ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "21cc53d7e4070ea8", "scanner": "scanner-primary", "fingerprint": "4262967ea88f05ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 465}}}]}, {"ruleId": "scanner-cb4d666c5c94f494", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "d1ea55e26c774aaa", "scanner": "scanner-primary", "fingerprint": "cb4d666c5c94f494", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cn-daily-price-bootstrap.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00a1b16cc5598da6", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "1ad28bd2c9b9d55c", "scanner": "scanner-primary", "fingerprint": "00a1b16cc5598da6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-reference-data.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e9c7fd448d12b91", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_provider_snapshot_service.py (1975 lines)"}, "properties": {"repobilityId": "fab1beda9a1e1a6f", "scanner": "scanner-primary", "fingerprint": "2e9c7fd448d12b91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6db35f479e692088", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_static_site_export_service.py (2644 lines)"}, "properties": {"repobilityId": "9036dd0dd26ef09a", "scanner": "scanner-primary", "fingerprint": "6db35f479e692088", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9853d95158a1f93e", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_feature_store_tasks.py (1950 lines)"}, "properties": {"repobilityId": "c329e35ac4cbffd0", "scanner": "scanner-primary", "fingerprint": "9853d95158a1f93e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e65edd595d56291b", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_official_market_universe_source_service.py (2607 lines)"}, "properties": {"repobilityId": "bf6521018a878081", "scanner": "scanner-primary", "fingerprint": "e65edd595d56291b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8dace7f45bd75233", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_stock_universe_service.py (2358 lines)"}, "properties": {"repobilityId": "f47b195fb2ac0f3a", "scanner": "scanner-primary", "fingerprint": "8dace7f45bd75233", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0b560e037ea59962", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_theme_reprocessing.py (1938 lines)"}, "properties": {"repobilityId": "d0450a4e19db7544", "scanner": "scanner-primary", "fingerprint": "0b560e037ea59962", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d9f22ed89fc74c8a", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_weekly_reference_scripts.py (1787 lines)"}, "properties": {"repobilityId": "c5b812c3120e67d5", "scanner": "scanner-primary", "fingerprint": "d9f22ed89fc74c8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ddbc86062706c26", "level": "note", "message": {"text": "Very large file: backend/tests/unit/test_cache_refresh_unification.py (1412 lines)"}, "properties": {"repobilityId": "2c34b4f2a7f0ce59", "scanner": "scanner-primary", "fingerprint": "2ddbc86062706c26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-02915d1d47ef81c7", "level": "note", "message": {"text": "Very large file: backend/tests/unit/use_cases/feature_store/test_build_daily_snapshot.py (1419 lines)"}, "properties": {"repobilityId": "d08ce647a4673f38", "scanner": "scanner-primary", "fingerprint": "02915d1d47ef81c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-08197b47b6d74354", "level": "note", "message": {"text": "Very large file: backend/app/interfaces/mcp/market_copilot.py (1652 lines)"}, "properties": {"repobilityId": "7ed0499af05a21fa", "scanner": "scanner-primary", "fingerprint": "08197b47b6d74354", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5cfe5c37ba4027f8", "level": "note", "message": {"text": "Very large file: backend/app/tasks/theme_discovery_tasks.py (1633 lines)"}, "properties": {"repobilityId": "997999d8b66f4f0a", "scanner": "scanner-primary", "fingerprint": "5cfe5c37ba4027f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6c878879f65e182c", "level": "note", "message": {"text": "Very large file: backend/app/tasks/cache_tasks.py (1989 lines)"}, "properties": {"repobilityId": "59129cf21e820b99", "scanner": "scanner-primary", "fingerprint": "6c878879f65e182c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4c26e24b3a7cdbb", "level": "note", "message": {"text": "Very large file: backend/app/tasks/fundamentals_tasks.py (1480 lines)"}, "properties": {"repobilityId": "9417a1333716e664", "scanner": "scanner-primary", "fingerprint": "e4c26e24b3a7cdbb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d0f80ec2b24eb53", "level": "note", "message": {"text": "Very large file: backend/app/services/static_site_export_service.py (2035 lines)"}, "properties": {"repobilityId": "e09f3b7dd0d68e6f", "scanner": "scanner-primary", "fingerprint": "4d0f80ec2b24eb53", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b19ca20189243086", "level": "note", "message": {"text": "Very large file: backend/app/services/ibd_group_rank_service.py (1952 lines)"}, "properties": {"repobilityId": "b9ac1a80ae66c78d", "scanner": "scanner-primary", "fingerprint": "b19ca20189243086", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a5765d02f681a7b3", "level": "note", "message": {"text": "Very large file: backend/app/services/theme_extraction_service.py (1932 lines)"}, "properties": {"repobilityId": "cfc2eb35dc5472cd", "scanner": "scanner-primary", "fingerprint": "a5765d02f681a7b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e80eff0c8c72f0b", "level": "note", "message": {"text": "Very large file: backend/app/services/fundamentals_cache_service.py (1768 lines)"}, "properties": {"repobilityId": "d262ac737738a71b", "scanner": "scanner-primary", "fingerprint": "1e80eff0c8c72f0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d52b8e17de92e4a", "level": "note", "message": {"text": "Very large file: backend/app/services/bulk_data_fetcher.py (1243 lines)"}, "properties": {"repobilityId": "4c135a0cef5e5e54", "scanner": "scanner-primary", "fingerprint": "5d52b8e17de92e4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6634a0136b38ea69", "level": "note", "message": {"text": "Very large file: backend/app/services/official_market_universe_source_service.py (2564 lines)"}, "properties": {"repobilityId": "ebec0c94028e9eb0", "scanner": "scanner-primary", "fingerprint": "6634a0136b38ea69", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b5b6ac2eac28f34", "level": "note", "message": {"text": "Very large file: backend/app/services/theme_discovery_service.py (2038 lines)"}, "properties": {"repobilityId": "61718d953c388e60", "scanner": "scanner-primary", "fingerprint": "4b5b6ac2eac28f34", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5cce4ea63f9ced81", "level": "note", "message": {"text": "Very large file: backend/app/services/provider_snapshot_service.py (1514 lines)"}, "properties": {"repobilityId": "7345c729562d1882", "scanner": "scanner-primary", "fingerprint": "5cce4ea63f9ced81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5ad846d1ab7f68af", "level": "note", "message": {"text": "Very large file: backend/app/services/stock_universe_service.py (3123 lines)"}, "properties": {"repobilityId": "a268ae16f277c832", "scanner": "scanner-primary", "fingerprint": "5ad846d1ab7f68af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-584e48aab8bb1a52", "level": "note", "message": {"text": "Very large file: backend/app/services/theme_merging_service.py (2923 lines)"}, "properties": {"repobilityId": "4dc7786ed197e4aa", "scanner": "scanner-primary", "fingerprint": "584e48aab8bb1a52", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ba0c5153193e42b2", "level": "note", "message": {"text": "Very large file: backend/app/services/price_cache_service.py (2160 lines)"}, "properties": {"repobilityId": "701bfda54c56c78d", "scanner": "scanner-primary", "fingerprint": "ba0c5153193e42b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b31901655367f9db", "level": "note", "message": {"text": "Very large file: backend/alembic/versions/20260408_0001_baseline.py (1304 lines)"}, "properties": {"repobilityId": "778766b1822d9369", "scanner": "scanner-primary", "fingerprint": "b31901655367f9db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "bb1aeefc23015245", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "acb04293571601f2", "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": "d846a570590900d2", "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": "d704002cae417b9d", "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": "fcc1297b15d49287", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-65d95f76e7748f87", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/App.jsx:101"}, "properties": {"repobilityId": "d0fcae5d28809788", "scanner": "scanner-primary", "fingerprint": "65d95f76e7748f87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e667a9f9df7714aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/assistant.js:45"}, "properties": {"repobilityId": "a60ecbda4e2cdfef", "scanner": "scanner-primary", "fingerprint": "e667a9f9df7714aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c473b21043103bdd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/static/dataClient.js:6"}, "properties": {"repobilityId": "bc3d4d842cf09c20", "scanner": "scanner-primary", "fingerprint": "c473b21043103bdd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75311608de525f03", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/Stock/MarketThemesList.jsx:64"}, "properties": {"repobilityId": "cb1524bfdc96d8a6", "scanner": "scanner-primary", "fingerprint": "75311608de525f03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14424362db4d7b69", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/rsBand.js:1"}, "properties": {"repobilityId": "b740d9bda22dfe14", "scanner": "scanner-primary", "fingerprint": "14424362db4d7b69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac3a1232073f894c", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/useDragZoom.js:3"}, "properties": {"repobilityId": "734ba9653411aaad", "scanner": "scanner-primary", "fingerprint": "ac3a1232073f894c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfb119f5e604f0ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/Charts/CandlestickChart.jsx:256"}, "properties": {"repobilityId": "f6de1143b8c1c4d0", "scanner": "scanner-primary", "fingerprint": "dfb119f5e604f0ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb42f5c289e9998a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/Scan/ChartViewerModal.jsx:259"}, "properties": {"repobilityId": "a782592e08a6ab93", "scanner": "scanner-primary", "fingerprint": "eb42f5c289e9998a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a55c31af775376f", "level": "note", "message": {"text": "Legacy-named symbol `fundamentals_v1` in backend/tests/unit/test_provider_snapshot_service.py:482"}, "properties": {"repobilityId": "c45173d238223477", "scanner": "scanner-primary", "fingerprint": "0a55c31af775376f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1974fdf7de0ee23b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_provider_snapshot_service.py:1759"}, "properties": {"repobilityId": "d37584e829f32437", "scanner": "scanner-primary", "fingerprint": "1974fdf7de0ee23b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bde063a9ca5cc0d6", "level": "note", "message": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_canonical_key_policy_adr.py:11"}, "properties": {"repobilityId": "daae483f140b6e23", "scanner": "scanner-primary", "fingerprint": "bde063a9ca5cc0d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-491c9ab7fd6ca67e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_translation_service.py:400"}, "properties": {"repobilityId": "158842b082a42bb7", "scanner": "scanner-primary", "fingerprint": "491c9ab7fd6ca67e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea288e92ba954543", "level": "note", "message": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/tests/unit/test_theme_identity_normalization.py:22"}, "properties": {"repobilityId": "49e2fc4f55aef228", "scanner": "scanner-primary", "fingerprint": "ea288e92ba954543", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2786c0b306f8fc63", "level": "note", "message": {"text": "Legacy-named symbol `TestFromLegacy` in backend/tests/unit/test_universe_schema.py:366"}, "properties": {"repobilityId": "6bea4821810695fe", "scanner": "scanner-primary", "fingerprint": "2786c0b306f8fc63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f14f6ea694b6b6d6", "level": "note", "message": {"text": "Legacy-named symbol `used_legacy` in backend/tests/unit/test_universe_compat_adapter.py:20"}, "properties": {"repobilityId": "4bb1ae239e55cd00", "scanner": "scanner-primary", "fingerprint": "f14f6ea694b6b6d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ff61a722b2d69cd3", "level": "note", "message": {"text": "Legacy-named symbol `test_promoted_dict_is_shallow_copy` in backend/tests/unit/test_setup_engine_persistence.py:161"}, "properties": {"repobilityId": "c52275db9fa86377", "scanner": "scanner-primary", "fingerprint": "ff61a722b2d69cd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0989124fb6a71066", "level": "note", "message": {"text": "Legacy-named symbol `TestHealthDeprecated` in backend/tests/unit/test_health_endpoints.py:109"}, "properties": {"repobilityId": "4ed1a11c524364ad", "scanner": "scanner-primary", "fingerprint": "0989124fb6a71066", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c524ededc1047f84", "level": "note", "message": {"text": "Legacy-named symbol `test_build_universe_def_raises_on_invalid_legacy` in backend/tests/unit/test_scan_enqueue.py:76"}, "properties": {"repobilityId": "a9d22acca118df2d", "scanner": "scanner-primary", "fingerprint": "c524ededc1047f84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1dc9223b6933a0be", "level": "note", "message": {"text": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/test_detector_subtasks_c3a_c4a_c6a.py:104"}, "properties": {"repobilityId": "7a13503913e70601", "scanner": "scanner-primary", "fingerprint": "1dc9223b6933a0be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b8f56a86f179a73", "level": "note", "message": {"text": "Legacy-named symbol `seed_v1` in backend/tests/unit/test_index_membership_seeder.py:46"}, "properties": {"repobilityId": "c03a35276d6fcc21", "scanner": "scanner-primary", "fingerprint": "9b8f56a86f179a73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d2e126e4735f1458", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_multilingual_qa_harness.py:160"}, "properties": {"repobilityId": "1aa23f1180a46e71", "scanner": "scanner-primary", "fingerprint": "d2e126e4735f1458", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad6057c8879be28f", "level": "note", "message": {"text": "Legacy-named symbol `TestUnboundScanFallsBackToLegacy` in backend/tests/unit/test_export_scan_results_use_case.py:206"}, "properties": {"repobilityId": "e8368c407f6f694d", "scanner": "scanner-primary", "fingerprint": "ad6057c8879be28f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-698ab72d3305e8d1", "level": "note", "message": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/tests/unit/test_price_contract_adr.py:11"}, "properties": {"repobilityId": "d8a7e6630d3461dc", "scanner": "scanner-primary", "fingerprint": "698ab72d3305e8d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5541dd7c1542b48f", "level": "note", "message": {"text": "Legacy-named symbol `s_legacy` in backend/tests/unit/test_scan_crud_endpoints.py:155"}, "properties": {"repobilityId": "549183bc37360a0d", "scanner": "scanner-primary", "fingerprint": "5541dd7c1542b48f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d2280668a7445223", "level": "note", "message": {"text": "Legacy-named symbol `cross_detector_v1` in backend/tests/unit/test_pattern_calibration.py:38"}, "properties": {"repobilityId": "7926f2f05df71c2f", "scanner": "scanner-primary", "fingerprint": "d2280668a7445223", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-60907e298d88c332", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_scan_field_availability.py:98"}, "properties": {"repobilityId": "9a2b643b57b3292c", "scanner": "scanner-primary", "fingerprint": "60907e298d88c332", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-955d8b1e803713ac", "level": "note", "message": {"text": "Legacy-named symbol `adr_e1_pipeline_scoped_processing_state_v1` in backend/tests/unit/test_theme_pipeline_processing_adr.py:11"}, "properties": {"repobilityId": "db772a86411cfa31", "scanner": "scanner-primary", "fingerprint": "955d8b1e803713ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4774b3971c73214c", "level": "note", "message": {"text": "Legacy-named symbol `vcp_detected_by_legacy` in backend/tests/unit/golden/test_golden_detectors.py:322"}, "properties": {"repobilityId": "4ef6f80cd6110cae", "scanner": "scanner-primary", "fingerprint": "4774b3971c73214c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2dddea194d3227e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/load/conftest.py:21"}, "properties": {"repobilityId": "19723408922ff49e", "scanner": "scanner-primary", "fingerprint": "2dddea194d3227e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a73cd6ac642c0eb1", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/load/measurement.py:21"}, "properties": {"repobilityId": "24e6ec7e870112f1", "scanner": "scanner-primary", "fingerprint": "a73cd6ac642c0eb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2492fddcf92d92fb", "level": "note", "message": {"text": "Legacy-named symbol `_query_legacy` in backend/tests/parity/test_scan_parity.py:38"}, "properties": {"repobilityId": "ba57988ab0a72f46", "scanner": "scanner-primary", "fingerprint": "2492fddcf92d92fb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e63e5c6b7c50ada5", "level": "note", "message": {"text": "Legacy-named symbol `seed_v1` in backend/scripts/seed_index_memberships.py:58"}, "properties": {"repobilityId": "6907c0fcd3d56138", "scanner": "scanner-primary", "fingerprint": "e63e5c6b7c50ada5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e16aa0b34a9c09d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/main.py:146"}, "properties": {"repobilityId": "afe26ee31c577b2a", "scanner": "scanner-primary", "fingerprint": "e16aa0b34a9c09d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9f31be235f7b329", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/app/models/theme.py:88"}, "properties": {"repobilityId": "fcff6cdbf383fd0b", "scanner": "scanner-primary", "fingerprint": "a9f31be235f7b329", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-757ee5ef8f028f0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/config/settings.py:165"}, "properties": {"repobilityId": "50d49ed494a97c49", "scanner": "scanner-primary", "fingerprint": "757ee5ef8f028f0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc5ff7d819a21dcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/create_scan.py:358"}, "properties": {"repobilityId": "c1a0ff7ac7e776d4", "scanner": "scanner-primary", "fingerprint": "fc5ff7d819a21dcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb1a374b35e347cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/export_scan_results.py:135"}, "properties": {"repobilityId": "7236038f77451c7e", "scanner": "scanner-primary", "fingerprint": "cb1a374b35e347cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9dac819fb523fcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/use_cases/scanning/run_bulk_scan.py:258"}, "properties": {"repobilityId": "7509d6d815571f6b", "scanner": "scanner-primary", "fingerprint": "d9dac819fb523fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96d57a0e7234da79", "level": "note", "message": {"text": "Legacy-named symbol `used_legacy` in backend/app/api/v1/scans.py:169"}, "properties": {"repobilityId": "bfc8305f8df9fc17", "scanner": "scanner-primary", "fingerprint": "96d57a0e7234da79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a8342a350b58361f", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/app/scripts/export_static_site.py:429"}, "properties": {"repobilityId": "a24293b1caf7e90c", "scanner": "scanner-primary", "fingerprint": "a8342a350b58361f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-304252a73184854c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/scripts/build_weekly_reference_bundle.py:571"}, "properties": {"repobilityId": "5bf83e1944ebf003", "scanner": "scanner-primary", "fingerprint": "304252a73184854c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1da0c3f0780ec22d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/scripts/bootstrap_cn_daily_price_shard.py:124"}, "properties": {"repobilityId": "1c785a8129c69046", "scanner": "scanner-primary", "fingerprint": "1da0c3f0780ec22d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9ab9e6c7b54ed9a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/utils/rate_limiter.py:200"}, "properties": {"repobilityId": "697965d42e6be4c8", "scanner": "scanner-primary", "fingerprint": "e9ab9e6c7b54ed9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-136f388e45c391bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/tasks/cache_tasks.py:550"}, "properties": {"repobilityId": "6f67204bac8afa37", "scanner": "scanner-primary", "fingerprint": "136f388e45c391bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd05a85b16691c7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/tasks/scan_tasks.py:221"}, "properties": {"repobilityId": "9153c5b665f295ca", "scanner": "scanner-primary", "fingerprint": "dd05a85b16691c7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-393d2ed4c4e20e86", "level": "note", "message": {"text": "Legacy-named symbol `cross_detector_v1` in backend/app/analysis/patterns/calibration.py:199"}, "properties": {"repobilityId": "e0e8ac682bc963e0", "scanner": "scanner-primary", "fingerprint": "393d2ed4c4e20e86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9870060425c13bc6", "level": "note", "message": {"text": "Legacy-named symbol `distance_to_pivot_pct_legacy` in backend/app/analysis/patterns/vcp_wrapper.py:112"}, "properties": {"repobilityId": "54ed3331b5cc3a6f", "scanner": "scanner-primary", "fingerprint": "9870060425c13bc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b5e6f44fe7e3f4cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/scanners/data_preparation.py:471"}, "properties": {"repobilityId": "01b1c5dea9f03859", "scanner": "scanner-primary", "fingerprint": "b5e6f44fe7e3f4cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5288d6339d6da84b", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/scanners/criteria/rs_sparkline.py:74"}, "properties": {"repobilityId": "39b7a624a85abc27", "scanner": "scanner-primary", "fingerprint": "5288d6339d6da84b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a935af8a43c1b235", "level": "note", "message": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/yfinance_service.py:5"}, "properties": {"repobilityId": "613a612efb0abd1b", "scanner": "scanner-primary", "fingerprint": "a935af8a43c1b235", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c31ef186ff18ec09", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/de_universe_ingestion_adapter.py:295"}, "properties": {"repobilityId": "5ad2a1919ce3d9e9", "scanner": "scanner-primary", "fingerprint": "c31ef186ff18ec09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23dd5ff4d7a6e36a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/content_ingestion_service.py:162"}, "properties": {"repobilityId": "c60c9fb46319950a", "scanner": "scanner-primary", "fingerprint": "23dd5ff4d7a6e36a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae78be52ee1249a6", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/services/growth_cadence_service.py:245"}, "properties": {"repobilityId": "5adf79e0d6d54caf", "scanner": "scanner-primary", "fingerprint": "ae78be52ee1249a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ceb2ac78c050371", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/ca_universe_ingestion_adapter.py:42"}, "properties": {"repobilityId": "fd25094e135c58e5", "scanner": "scanner-primary", "fingerprint": "5ceb2ac78c050371", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-142adc6235fdd552", "level": "note", "message": {"text": "Legacy-named symbol `seed_v1` in backend/app/services/index_membership_seeder.py:50"}, "properties": {"repobilityId": "cbd2e4b47ed94af3", "scanner": "scanner-primary", "fingerprint": "142adc6235fdd552", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5d4b496f2c104891", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/theme_extraction_service.py:458"}, "properties": {"repobilityId": "a6e2e671b0229232", "scanner": "scanner-primary", "fingerprint": "5d4b496f2c104891", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f4b249fea327e1a", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/app/services/strategy_profile_service.py:212"}, "properties": {"repobilityId": "4abba3799c8b588f", "scanner": "scanner-primary", "fingerprint": "1f4b249fea327e1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8637b0da70f6a250", "level": "note", "message": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/bulk_data_fetcher.py:9"}, "properties": {"repobilityId": "42544835f13a42f9", "scanner": "scanner-primary", "fingerprint": "8637b0da70f6a250", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d1726215950e1ea7", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/multi_market_ticker_validator.py:50"}, "properties": {"repobilityId": "27ac0e3747837b0c", "scanner": "scanner-primary", "fingerprint": "d1726215950e1ea7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-924f347543607335", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/cjk_alias_resolver_service.py:141"}, "properties": {"repobilityId": "2f87b085998f6eaa", "scanner": "scanner-primary", "fingerprint": "924f347543607335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ea1070e2981fcd4", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/official_market_universe_source_service.py:1192"}, "properties": {"repobilityId": "cba5f69bce4f4d85", "scanner": "scanner-primary", "fingerprint": "6ea1070e2981fcd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcadde40110445de", "level": "note", "message": {"text": "Legacy-named symbol `fundamentals_v1` in backend/app/services/provider_snapshot_service.py:127"}, "properties": {"repobilityId": "bb7ae7f0db3fd3b6", "scanner": "scanner-primary", "fingerprint": "bcadde40110445de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6a950919f98b7fc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/provider_snapshot_service.py:482"}, "properties": {"repobilityId": "44cc673129aaaad4", "scanner": "scanner-primary", "fingerprint": "6a950919f98b7fc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-774a0a380b8327e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/static_daily_price_refresh_service.py:23"}, "properties": {"repobilityId": "37c73280a165578e", "scanner": "scanner-primary", "fingerprint": "774a0a380b8327e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4d7629c6b01986f", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/stock_universe_service.py:3058"}, "properties": {"repobilityId": "77888311232f43b4", "scanner": "scanner-primary", "fingerprint": "d4d7629c6b01986f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c933e63da68d59ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/hybrid_fundamentals_service.py:422"}, "properties": {"repobilityId": "3a3e53d6f747e92c", "scanner": "scanner-primary", "fingerprint": "c933e63da68d59ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2adbac3846ad3520", "level": "note", "message": {"text": "Legacy-named symbol `used_legacy` in backend/app/services/universe_compat_adapter.py:50"}, "properties": {"repobilityId": "6baeb25e7d801401", "scanner": "scanner-primary", "fingerprint": "2adbac3846ad3520", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a2038f87575348c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/rate_budget_policy.py:90"}, "properties": {"repobilityId": "5b9ed2054ebbf653", "scanner": "scanner-primary", "fingerprint": "a2038f87575348c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdc455e740a06bec", "level": "note", "message": {"text": "Legacy-named symbol `adr_ll2_e1_canonical_price_contract_v1` in backend/app/services/price_cache_service.py:11"}, "properties": {"repobilityId": "76bb0ee5e175ac66", "scanner": "scanner-primary", "fingerprint": "bdc455e740a06bec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8eb112d511f2bd36", "level": "note", "message": {"text": "Legacy-named symbol `adr_e2_canonical_key_normalization_v1` in backend/app/services/theme_identity_normalization.py:4"}, "properties": {"repobilityId": "650fcf089c0f9afb", "scanner": "scanner-primary", "fingerprint": "8eb112d511f2bd36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-249904e4e3809519", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/telemetry/alert_evaluator.py:232"}, "properties": {"repobilityId": "5764424949871a8b", "scanner": "scanner-primary", "fingerprint": "249904e4e3809519", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03bb6649f823a3ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/telemetry/weekly_audit.py:186"}, "properties": {"repobilityId": "766138b0c3c258e4", "scanner": "scanner-primary", "fingerprint": "03bb6649f823a3ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-041a9a25b7ea516f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/telemetry/alert_thresholds.py:61"}, "properties": {"repobilityId": "dbc266baa701fe5a", "scanner": "scanner-primary", "fingerprint": "041a9a25b7ea516f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82fca4015944979d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/schemas/scanning.py:206"}, "properties": {"repobilityId": "1ae8cd25e08e2f1f", "scanner": "scanner-primary", "fingerprint": "82fca4015944979d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4297004b2d808401", "level": "note", "message": {"text": "Legacy-named symbol `from_legacy` in backend/app/schemas/universe.py:306"}, "properties": {"repobilityId": "59cead606856172d", "scanner": "scanner-primary", "fingerprint": "4297004b2d808401", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-204516fe62a39593", "level": "note", "message": {"text": "Stub function `_rebuild_theme_clusters_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_cluster_identity_migration.py:302"}, "properties": {"repobilityId": "ac587107468a5343", "scanner": "scanner-primary", "fingerprint": "204516fe62a39593", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-e863d8ab01d8641d", "level": "note", "message": {"text": "Stub function `_rebuild_pipeline_state_table` (body is just `pass`/`return`) \u2014 backend/app/db_migrations/theme_pipeline_state_migration.py:205"}, "properties": {"repobilityId": "54c6b0a982040d8e", "scanner": "scanner-primary", "fingerprint": "e863d8ab01d8641d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-45ae60f6a2ead701", "level": "note", "message": {"text": "Stub function `emit` (body is just `pass`/`return`) \u2014 backend/app/domain/scanning/ports.py:291"}, "properties": {"repobilityId": "474a77d92946fd6b", "scanner": "scanner-primary", "fingerprint": "45ae60f6a2ead701", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-ee422a4634693740", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/app/domain/scanning/custom_criteria_compiler.py:31"}, "properties": {"repobilityId": "0ec01ab0526c883c", "scanner": "scanner-primary", "fingerprint": "ee422a4634693740", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc94d00e18d04bbf", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/alembic/versions/20260414_0011_add_stock_universe_index_membership.py:50"}, "properties": {"repobilityId": "c288d781b25d0e36", "scanner": "scanner-primary", "fingerprint": "dc94d00e18d04bbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-582ef33f8e3862a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/versions/20260425_0016_add_market_to_market_breadth.py:55"}, "properties": {"repobilityId": "1068cd3db55bc4b1", "scanner": "scanner-primary", "fingerprint": "582ef33f8e3862a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0b5e7cb1208a7cd", "level": "note", "message": {"text": "13 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "2737b8666c1f7eeb", "scanner": "scanner-primary", "fingerprint": "b0b5e7cb1208a7cd", "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": "796060d14195eec4", "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": "033fab246ad7f4d2", "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": "6c97df383a8fdf81", "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": "3ecb1702d9126d5c", "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": "e10d797b910c70ab", "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": "3ae3ff4759e4e75e", "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": "a6fe00b5dddb2e3e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "6d52343463d728cb", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0848caa49ec4402c", "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": "bb8d935102fb28e5", "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": "2c77cf87894b1d0a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "a12511066979139f", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6b912007559783a3", "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": "64d86472aa732ad4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "07fc5b36ae1a5344", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "eb5b27c4fbef711e", "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": "eeb820903487a5d0", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b4b5392a3c76aa46", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-380b7cb95b387b9c", "level": "note", "message": {"text": "Near-duplicate function bodies in 11 places"}, "properties": {"repobilityId": "fc7af07e482a8219", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6297377883dd7783", "level": "note", "message": {"text": "Near-duplicate function bodies in 13 places"}, "properties": {"repobilityId": "f86bbbeacd550e25", "scanner": "scanner-primary", "fingerprint": "6297377883dd7783", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-3763ee76ddbd6805", "level": "warning", "message": {"text": "Frontend route `/stocks/:ticker` has no Link/navigate to it \u2014 frontend/src/components/Stock/StockDetails.test.jsx"}, "properties": {"repobilityId": "be79957a762fb822", "scanner": "scanner-primary", "fingerprint": "3763ee76ddbd6805", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6b0039091cdb79f7", "level": "error", "message": {"text": "FastAPI POST `trigger_full_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:26"}, "properties": {"repobilityId": "be22802e2ce7a1d8", "scanner": "scanner-primary", "fingerprint": "6b0039091cdb79f7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/fundamentals.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-795492d7e875cb62", "level": "error", "message": {"text": "FastAPI POST `trigger_symbol_fundamentals_refresh` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:56"}, "properties": {"repobilityId": "b591cc6b55655acd", "scanner": "scanner-primary", "fingerprint": "795492d7e875cb62", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/fundamentals.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-bec3eba289254e07", "level": "error", "message": {"text": "FastAPI POST `trigger_initial_cache_population` without auth dependency \u2014 backend/app/api/v1/fundamentals.py:97"}, "properties": {"repobilityId": "43bce4314d04f16f", "scanner": "scanner-primary", "fingerprint": "bec3eba289254e07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/fundamentals.py"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-65f1dac16c62d823", "level": "error", "message": {"text": "FastAPI POST `cancel_operations_job` without auth dependency \u2014 backend/app/api/v1/operations.py:23"}, "properties": {"repobilityId": "67398639950cf3ba", "scanner": "scanner-primary", "fingerprint": "65f1dac16c62d823", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/operations.py"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-ab30a9706eedc211", "level": "error", "message": {"text": "FastAPI POST `create_conversation` without auth dependency \u2014 backend/app/api/v1/assistant.py:38"}, "properties": {"repobilityId": "38207eb027502c6f", "scanner": "scanner-primary", "fingerprint": "ab30a9706eedc211", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/assistant.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-f964b189dee8d63f", "level": "error", "message": {"text": "FastAPI POST `send_message` without auth dependency \u2014 backend/app/api/v1/assistant.py:70"}, "properties": {"repobilityId": "8e9c8d91990b12c7", "scanner": "scanner-primary", "fingerprint": "f964b189dee8d63f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/assistant.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-e23ecc996b7d8943", "level": "error", "message": {"text": "FastAPI POST `watchlist_add_preview` without auth dependency \u2014 backend/app/api/v1/assistant.py:114"}, "properties": {"repobilityId": "090dbdd3a77a3280", "scanner": "scanner-primary", "fingerprint": "e23ecc996b7d8943", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/assistant.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-286d0dc927077283", "level": "error", "message": {"text": "FastAPI POST `dismiss_alert` without auth dependency \u2014 backend/app/api/v1/themes_queries.py:207"}, "properties": {"repobilityId": "225b8cf81df7dce1", "scanner": "scanner-primary", "fingerprint": "286d0dc927077283", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_queries.py"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-f75ec8c46812aa3e", "level": "error", "message": {"text": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:79"}, "properties": {"repobilityId": "bbc769294b06812e", "scanner": "scanner-primary", "fingerprint": "f75ec8c46812aa3e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-bf9e401ac2e6b66b", "level": "error", "message": {"text": "FastAPI POST `create_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:80"}, "properties": {"repobilityId": "38d19aa93478ac3c", "scanner": "scanner-primary", "fingerprint": "bf9e401ac2e6b66b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-8ffc91983e5e6184", "level": "error", "message": {"text": "FastAPI PUT `update_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:101"}, "properties": {"repobilityId": "3ed54b7607451888", "scanner": "scanner-primary", "fingerprint": "8ffc91983e5e6184", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-68e71558469367e5", "level": "error", "message": {"text": "FastAPI DELETE `delete_watchlist` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:122"}, "properties": {"repobilityId": "e74ef4a0646439b3", "scanner": "scanner-primary", "fingerprint": "68e71558469367e5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-cf8104a400074df9", "level": "error", "message": {"text": "FastAPI PUT `reorder_watchlists` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:134"}, "properties": {"repobilityId": "ecca07858f76b2b7", "scanner": "scanner-primary", "fingerprint": "cf8104a400074df9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-1828b6e843c891ef", "level": "error", "message": {"text": "FastAPI POST `add_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:387"}, "properties": {"repobilityId": "724fcffa2c3f2864", "scanner": "scanner-primary", "fingerprint": "1828b6e843c891ef", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 387}}}]}, {"ruleId": "scanner-5a9fc1926a796c3a", "level": "error", "message": {"text": "FastAPI POST `bulk_add_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:439"}, "properties": {"repobilityId": "94c614b181feffdf", "scanner": "scanner-primary", "fingerprint": "5a9fc1926a796c3a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 439}}}]}, {"ruleId": "scanner-f5ef42b9a99ac5e4", "level": "error", "message": {"text": "FastAPI POST `import_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:508"}, "properties": {"repobilityId": "8a50cf32bef67094", "scanner": "scanner-primary", "fingerprint": "f5ef42b9a99ac5e4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 508}}}]}, {"ruleId": "scanner-6c733b1c213e1bb0", "level": "error", "message": {"text": "FastAPI PUT `update_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:594"}, "properties": {"repobilityId": "030566fc4c38eed3", "scanner": "scanner-primary", "fingerprint": "6c733b1c213e1bb0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 594}}}]}, {"ruleId": "scanner-519d166d998ea18e", "level": "error", "message": {"text": "FastAPI DELETE `remove_item` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:617"}, "properties": {"repobilityId": "4ef7ab15078ce319", "scanner": "scanner-primary", "fingerprint": "519d166d998ea18e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 617}}}]}, {"ruleId": "scanner-c5aec2a24c539682", "level": "error", "message": {"text": "FastAPI PUT `reorder_items` without auth dependency \u2014 backend/app/api/v1/user_watchlists.py:629"}, "properties": {"repobilityId": "aeffdf105fcceda9", "scanner": "scanner-primary", "fingerprint": "c5aec2a24c539682", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_watchlists.py"}, "region": {"startLine": 629}}}]}, {"ruleId": "scanner-282ef06d0f4f7b91", "level": "error", "message": {"text": "FastAPI POST `post_acknowledge` without auth dependency \u2014 backend/app/api/v1/telemetry.py:173"}, "properties": {"repobilityId": "2c89f5df3684a7bf", "scanner": "scanner-primary", "fingerprint": "282ef06d0f4f7b91", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/telemetry.py"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-331b199583a31ba2", "level": "error", "message": {"text": "FastAPI POST `approve_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:60"}, "properties": {"repobilityId": "d29a9c5d77404cf7", "scanner": "scanner-primary", "fingerprint": "331b199583a31ba2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-caa5ab9f01c6687d", "level": "error", "message": {"text": "FastAPI POST `reject_merge_suggestion` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:81"}, "properties": {"repobilityId": "e8da91092a923211", "scanner": "scanner-primary", "fingerprint": "caa5ab9f01c6687d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-d01f00740911d8ad", "level": "error", "message": {"text": "FastAPI POST `run_theme_consolidation` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:115"}, "properties": {"repobilityId": "9260c0989b7f5ccf", "scanner": "scanner-primary", "fingerprint": "d01f00740911d8ad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-761c8196669d12cc", "level": "error", "message": {"text": "FastAPI POST `run_theme_consolidation_async` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:130"}, "properties": {"repobilityId": "7785c38b4b0f00da", "scanner": "scanner-primary", "fingerprint": "761c8196669d12cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-fc9b48622352a918", "level": "error", "message": {"text": "FastAPI POST `run_embedding_refresh_campaign` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:168"}, "properties": {"repobilityId": "796d2df94420ad85", "scanner": "scanner-primary", "fingerprint": "fc9b48622352a918", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-501876ecb6e07cde", "level": "error", "message": {"text": "FastAPI POST `run_strict_auto_merge_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:193"}, "properties": {"repobilityId": "b79a5991a6fdcbf3", "scanner": "scanner-primary", "fingerprint": "501876ecb6e07cde", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-b796e461228b8866", "level": "error", "message": {"text": "FastAPI POST `run_manual_review_wave` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:214"}, "properties": {"repobilityId": "a43f4d337b9331c5", "scanner": "scanner-primary", "fingerprint": "b796e461228b8866", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-643d879116de58ae", "level": "error", "message": {"text": "FastAPI POST `review_candidate_themes` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:257"}, "properties": {"repobilityId": "33e7171c5d1fbd7b", "scanner": "scanner-primary", "fingerprint": "643d879116de58ae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 257}}}]}, {"ruleId": "scanner-5137cda53d771879", "level": "error", "message": {"text": "FastAPI POST `check_for_alerts` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:309"}, "properties": {"repobilityId": "6fe0c81a177d6fb0", "scanner": "scanner-primary", "fingerprint": "5137cda53d771879", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 309}}}]}, {"ruleId": "scanner-20793e9f320e0973", "level": "error", "message": {"text": "FastAPI POST `mark_alert_read` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:322"}, "properties": {"repobilityId": "d6f41d14b4a9937e", "scanner": "scanner-primary", "fingerprint": "20793e9f320e0973", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 322}}}]}, {"ruleId": "scanner-1e1e0eceb671b7de", "level": "error", "message": {"text": "FastAPI POST `create_theme_from_cluster` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:338"}, "properties": {"repobilityId": "83b0a52a0628ca34", "scanner": "scanner-primary", "fingerprint": "1e1e0eceb671b7de", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-8262734b1a684265", "level": "error", "message": {"text": "FastAPI POST `add_theme_constituents` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:363"}, "properties": {"repobilityId": "5a1d8a344a0cd298", "scanner": "scanner-primary", "fingerprint": "8262734b1a684265", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 363}}}]}, {"ruleId": "scanner-cd72473cf05c860a", "level": "error", "message": {"text": "FastAPI DELETE `deactivate_theme` without auth dependency \u2014 backend/app/api/v1/themes_review_merge.py:399"}, "properties": {"repobilityId": "1a7e02379369663d", "scanner": "scanner-primary", "fingerprint": "cd72473cf05c860a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_review_merge.py"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-b679af8c78d93c10", "level": "error", "message": {"text": "FastAPI POST `create_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:156"}, "properties": {"repobilityId": "9b8d77bc51e6e908", "scanner": "scanner-primary", "fingerprint": "b679af8c78d93c10", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scans.py"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-cbf088f303623173", "level": "error", "message": {"text": "FastAPI POST `refresh_scan_cache` without auth dependency \u2014 backend/app/api/v1/scans.py:227"}, "properties": {"repobilityId": "31c658a9372c47e4", "scanner": "scanner-primary", "fingerprint": "cbf088f303623173", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scans.py"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-33c38c0db2bae94e", "level": "error", "message": {"text": "FastAPI POST `cancel_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:352"}, "properties": {"repobilityId": "5add080c74f4be59", "scanner": "scanner-primary", "fingerprint": "33c38c0db2bae94e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scans.py"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-59392a2885052a80", "level": "error", "message": {"text": "FastAPI DELETE `delete_scan` without auth dependency \u2014 backend/app/api/v1/scans.py:485"}, "properties": {"repobilityId": "0c5eacdacdd5f6b5", "scanner": "scanner-primary", "fingerprint": "59392a2885052a80", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/scans.py"}, "region": {"startLine": 485}}}]}, {"ruleId": "scanner-3f2ac307cdf9d269", "level": "error", "message": {"text": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:150"}, "properties": {"repobilityId": "385339d344a7a8d3", "scanner": "scanner-primary", "fingerprint": "3f2ac307cdf9d269", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/market_scan.py"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-4ec3fc3354afe3a8", "level": "error", "message": {"text": "FastAPI PUT `update_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:188"}, "properties": {"repobilityId": "bc2a01f71d3410dc", "scanner": "scanner-primary", "fingerprint": "4ec3fc3354afe3a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/market_scan.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-7f6fbe1e9165cf88", "level": "error", "message": {"text": "FastAPI DELETE `remove_symbol` without auth dependency \u2014 backend/app/api/v1/market_scan.py:219"}, "properties": {"repobilityId": "b528f2aeb6f75c40", "scanner": "scanner-primary", "fingerprint": "7f6fbe1e9165cf88", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/market_scan.py"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-ffda5916470f87e1", "level": "error", "message": {"text": "FastAPI PUT `reorder_symbols` without auth dependency \u2014 backend/app/api/v1/market_scan.py:243"}, "properties": {"repobilityId": "9ec1604446f45913", "scanner": "scanner-primary", "fingerprint": "ffda5916470f87e1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/market_scan.py"}, "region": {"startLine": 243}}}]}, {"ruleId": "scanner-85284bfff762dc8c", "level": "error", "message": {"text": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/breadth.py:230"}, "properties": {"repobilityId": "41590602d87e33e4", "scanner": "scanner-primary", "fingerprint": "85284bfff762dc8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/breadth.py"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-adfc90b03474da92", "level": "error", "message": {"text": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/breadth.py:276"}, "properties": {"repobilityId": "9d61913a8e8546a6", "scanner": "scanner-primary", "fingerprint": "adfc90b03474da92", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/breadth.py"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-95d53d77b24ad590", "level": "error", "message": {"text": "FastAPI POST `trigger_task` without auth dependency \u2014 backend/app/api/v1/tasks.py:45"}, "properties": {"repobilityId": "b6ae48e9d0e31802", "scanner": "scanner-primary", "fingerprint": "95d53d77b24ad590", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/tasks.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-d7cf5fcfcb517f45", "level": "error", "message": {"text": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:56"}, "properties": {"repobilityId": "f2b47922e51664d7", "scanner": "scanner-primary", "fingerprint": "d7cf5fcfcb517f45", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/filter_presets.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-dd0a990b261de67e", "level": "error", "message": {"text": "FastAPI POST `create_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:57"}, "properties": {"repobilityId": "a5feb07b86df886b", "scanner": "scanner-primary", "fingerprint": "dd0a990b261de67e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/filter_presets.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-3221824029f46ed8", "level": "error", "message": {"text": "FastAPI PUT `update_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:91"}, "properties": {"repobilityId": "05fad0c8010f3627", "scanner": "scanner-primary", "fingerprint": "3221824029f46ed8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/filter_presets.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-fa1cc8d86019ed6d", "level": "error", "message": {"text": "FastAPI DELETE `delete_preset` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:137"}, "properties": {"repobilityId": "88f16801a8e3fb28", "scanner": "scanner-primary", "fingerprint": "fa1cc8d86019ed6d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/filter_presets.py"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-93fd47966b060296", "level": "error", "message": {"text": "FastAPI PUT `reorder_presets` without auth dependency \u2014 backend/app/api/v1/filter_presets.py:149"}, "properties": {"repobilityId": "a40780077a6294c8", "scanner": "scanner-primary", "fingerprint": "93fd47966b060296", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/filter_presets.py"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-33ffe3c314dd9fcf", "level": "error", "message": {"text": "FastAPI POST `refresh_universe` without auth dependency \u2014 backend/app/api/v1/universe.py:18"}, "properties": {"repobilityId": "5c843716b9867b38", "scanner": "scanner-primary", "fingerprint": "33ffe3c314dd9fcf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-024de03632e491cb", "level": "error", "message": {"text": "FastAPI POST `import_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:60"}, "properties": {"repobilityId": "eac40ea26b4aa8f8", "scanner": "scanner-primary", "fingerprint": "024de03632e491cb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-1aa14180b783f056", "level": "error", "message": {"text": "FastAPI POST `import_hk_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:113"}, "properties": {"repobilityId": "6c01b39588317778", "scanner": "scanner-primary", "fingerprint": "1aa14180b783f056", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-2729a1353bd991e9", "level": "error", "message": {"text": "FastAPI POST `import_jp_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:162"}, "properties": {"repobilityId": "427733cc2b8b29af", "scanner": "scanner-primary", "fingerprint": "2729a1353bd991e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-864e4fd6d567624d", "level": "error", "message": {"text": "FastAPI POST `import_tw_csv` without auth dependency \u2014 backend/app/api/v1/universe.py:211"}, "properties": {"repobilityId": "b75ffae06c463564", "scanner": "scanner-primary", "fingerprint": "864e4fd6d567624d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-6e6d5bfc0335a18c", "level": "error", "message": {"text": "FastAPI POST `add_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:305"}, "properties": {"repobilityId": "0e6ff715fb5d0b06", "scanner": "scanner-primary", "fingerprint": "6e6d5bfc0335a18c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 305}}}]}, {"ruleId": "scanner-3f830efba12950bb", "level": "error", "message": {"text": "FastAPI DELETE `deactivate_symbol` without auth dependency \u2014 backend/app/api/v1/universe.py:344"}, "properties": {"repobilityId": "a5f575b79b04aa0b", "scanner": "scanner-primary", "fingerprint": "3f830efba12950bb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 344}}}]}, {"ruleId": "scanner-314ed056304f8615", "level": "error", "message": {"text": "FastAPI POST `refresh_sp500` without auth dependency \u2014 backend/app/api/v1/universe.py:381"}, "properties": {"repobilityId": "a1f5e9691ddec756", "scanner": "scanner-primary", "fingerprint": "314ed056304f8615", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/universe.py"}, "region": {"startLine": 381}}}]}, {"ruleId": "scanner-dbc2bd7e46a02563", "level": "error", "message": {"text": "FastAPI POST `warm_spy_benchmark_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:141"}, "properties": {"repobilityId": "45cd41c434ce46a4", "scanner": "scanner-primary", "fingerprint": "dbc2bd7e46a02563", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-22f61b0f87a9b375", "level": "error", "message": {"text": "FastAPI POST `warm_symbol_cache` without auth dependency \u2014 backend/app/api/v1/cache.py:168"}, "properties": {"repobilityId": "00e55df76c9b118d", "scanner": "scanner-primary", "fingerprint": "22f61b0f87a9b375", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-69a602bf69e076b9", "level": "error", "message": {"text": "FastAPI POST `warm_all_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:211"}, "properties": {"repobilityId": "6124a959f5aa6795", "scanner": "scanner-primary", "fingerprint": "69a602bf69e076b9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-d1f1aa0f632e03a8", "level": "error", "message": {"text": "FastAPI DELETE `invalidate_caches` without auth dependency \u2014 backend/app/api/v1/cache.py:237"}, "properties": {"repobilityId": "a519ab5fe989dfec", "scanner": "scanner-primary", "fingerprint": "d1f1aa0f632e03a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 237}}}]}, {"ruleId": "scanner-a5ee8fcbcb119ad4", "level": "error", "message": {"text": "FastAPI POST `force_refresh_stale_data` without auth dependency \u2014 backend/app/api/v1/cache.py:316"}, "properties": {"repobilityId": "9076c5a3b4d24bac", "scanner": "scanner-primary", "fingerprint": "a5ee8fcbcb119ad4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-96dd781cea299951", "level": "error", "message": {"text": "FastAPI POST `smart_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:454"}, "properties": {"repobilityId": "9fd186fa966c5b03", "scanner": "scanner-primary", "fingerprint": "96dd781cea299951", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 454}}}]}, {"ruleId": "scanner-1ff146e59111c36f", "level": "error", "message": {"text": "FastAPI POST `force_cancel_refresh` without auth dependency \u2014 backend/app/api/v1/cache.py:486"}, "properties": {"repobilityId": "358958ba3c768846", "scanner": "scanner-primary", "fingerprint": "1ff146e59111c36f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/cache.py"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-5a4f431e3b5383ea", "level": "error", "message": {"text": "FastAPI POST `trigger_calculation` without auth dependency \u2014 backend/app/api/v1/groups.py:433"}, "properties": {"repobilityId": "dfe1509bce799391", "scanner": "scanner-primary", "fingerprint": "5a4f431e3b5383ea", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/groups.py"}, "region": {"startLine": 433}}}]}, {"ruleId": "scanner-58cd8c383862f24d", "level": "error", "message": {"text": "FastAPI POST `trigger_backfill` without auth dependency \u2014 backend/app/api/v1/groups.py:544"}, "properties": {"repobilityId": "d4fc3b72d71a8ace", "scanner": "scanner-primary", "fingerprint": "58cd8c383862f24d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/groups.py"}, "region": {"startLine": 544}}}]}, {"ruleId": "scanner-2e0041a9ee347ed6", "level": "error", "message": {"text": "FastAPI POST `trigger_gapfill` without auth dependency \u2014 backend/app/api/v1/groups.py:686"}, "properties": {"repobilityId": "9a0fac0d3f5a9d77", "scanner": "scanner-primary", "fingerprint": "2e0041a9ee347ed6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/groups.py"}, "region": {"startLine": 686}}}]}, {"ruleId": "scanner-3a724f6e8e469a3c", "level": "error", "message": {"text": "FastAPI POST `run_pipeline_async` without auth dependency \u2014 backend/app/api/v1/themes_content_pipeline.py:36"}, "properties": {"repobilityId": "485dfe3fdef36f89", "scanner": "scanner-primary", "fingerprint": "3a724f6e8e469a3c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_pipeline.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-b6b979a6af187028", "level": "error", "message": {"text": "FastAPI POST `add_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:59"}, "properties": {"repobilityId": "83032a9969b9ff81", "scanner": "scanner-primary", "fingerprint": "b6b979a6af187028", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-058adafa09bc6c04", "level": "error", "message": {"text": "FastAPI PUT `update_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:96"}, "properties": {"repobilityId": "46380b879a705b13", "scanner": "scanner-primary", "fingerprint": "058adafa09bc6c04", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-7a7ba56b947946cc", "level": "error", "message": {"text": "FastAPI DELETE `delete_content_source` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:152"}, "properties": {"repobilityId": "307e0315e3505a89", "scanner": "scanner-primary", "fingerprint": "7a7ba56b947946cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-fb237b4ee43d8422", "level": "error", "message": {"text": "FastAPI POST `seed_default_sources_endpoint` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:168"}, "properties": {"repobilityId": "27d92d6badb14dcb", "scanner": "scanner-primary", "fingerprint": "fb237b4ee43d8422", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-8a360c4c313aaccf", "level": "error", "message": {"text": "FastAPI POST `run_ingestion` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:177"}, "properties": {"repobilityId": "cee11fba7c474b51", "scanner": "scanner-primary", "fingerprint": "8a360c4c313aaccf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-1c0e5db49d88e19b", "level": "error", "message": {"text": "FastAPI POST `run_extraction` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:189"}, "properties": {"repobilityId": "80c578051105fdaa", "scanner": "scanner-primary", "fingerprint": "1c0e5db49d88e19b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-d862da414afc0900", "level": "error", "message": {"text": "FastAPI POST `calculate_theme_metrics` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:204"}, "properties": {"repobilityId": "46a43426c47d9703", "scanner": "scanner-primary", "fingerprint": "d862da414afc0900", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-88b1382a6c5a82a4", "level": "error", "message": {"text": "FastAPI POST `validate_all_themes` without auth dependency \u2014 backend/app/api/v1/themes_content_sources.py:218"}, "properties": {"repobilityId": "e324cccb23531264", "scanner": "scanner-primary", "fingerprint": "88b1382a6c5a82a4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_content_sources.py"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-34cb0a92a14831b7", "level": "error", "message": {"text": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:47"}, "properties": {"repobilityId": "67f52a664425a08a", "scanner": "scanner-primary", "fingerprint": "34cb0a92a14831b7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-316ba4fe1cb8696c", "level": "error", "message": {"text": "FastAPI POST `create_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:48"}, "properties": {"repobilityId": "4adc046274ef9b92", "scanner": "scanner-primary", "fingerprint": "316ba4fe1cb8696c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-c31c9937bef8341c", "level": "error", "message": {"text": "FastAPI PUT `update_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:69"}, "properties": {"repobilityId": "ea9e0db595b1edc5", "scanner": "scanner-primary", "fingerprint": "c31c9937bef8341c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-9b10767ba39127af", "level": "error", "message": {"text": "FastAPI DELETE `delete_theme` without auth dependency \u2014 backend/app/api/v1/user_themes.py:90"}, "properties": {"repobilityId": "d83906bcdcaaf2d1", "scanner": "scanner-primary", "fingerprint": "9b10767ba39127af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-dd19cd12c1c94c09", "level": "error", "message": {"text": "FastAPI PUT `reorder_themes` without auth dependency \u2014 backend/app/api/v1/user_themes.py:102"}, "properties": {"repobilityId": "4ab635006d999ca1", "scanner": "scanner-primary", "fingerprint": "dd19cd12c1c94c09", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-132c0e3951a03bcb", "level": "error", "message": {"text": "FastAPI POST `create_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:313"}, "properties": {"repobilityId": "1f3cf4bc390045dc", "scanner": "scanner-primary", "fingerprint": "132c0e3951a03bcb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 313}}}]}, {"ruleId": "scanner-9aba59da6bec1822", "level": "error", "message": {"text": "FastAPI PUT `update_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:346"}, "properties": {"repobilityId": "606c53cd3a8d3b34", "scanner": "scanner-primary", "fingerprint": "9aba59da6bec1822", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 346}}}]}, {"ruleId": "scanner-6fb6bea0ec811b54", "level": "error", "message": {"text": "FastAPI DELETE `delete_subgroup` without auth dependency \u2014 backend/app/api/v1/user_themes.py:369"}, "properties": {"repobilityId": "bfcc4d556cf99900", "scanner": "scanner-primary", "fingerprint": "6fb6bea0ec811b54", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 369}}}]}, {"ruleId": "scanner-0209218f39878b9e", "level": "error", "message": {"text": "FastAPI PUT `reorder_subgroups` without auth dependency \u2014 backend/app/api/v1/user_themes.py:381"}, "properties": {"repobilityId": "e131bc6d66ba8599", "scanner": "scanner-primary", "fingerprint": "0209218f39878b9e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 381}}}]}, {"ruleId": "scanner-ac39499ea173120f", "level": "error", "message": {"text": "FastAPI POST `add_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:401"}, "properties": {"repobilityId": "8ece75a5f0150533", "scanner": "scanner-primary", "fingerprint": "ac39499ea173120f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 401}}}]}, {"ruleId": "scanner-f924cac0349e958c", "level": "error", "message": {"text": "FastAPI PUT `update_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:436"}, "properties": {"repobilityId": "c1496695be127384", "scanner": "scanner-primary", "fingerprint": "f924cac0349e958c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 436}}}]}, {"ruleId": "scanner-5df4539c76a334f8", "level": "error", "message": {"text": "FastAPI DELETE `remove_stock` without auth dependency \u2014 backend/app/api/v1/user_themes.py:466"}, "properties": {"repobilityId": "81a644b088c8f9dc", "scanner": "scanner-primary", "fingerprint": "5df4539c76a334f8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 466}}}]}, {"ruleId": "scanner-9ddc216a7032a131", "level": "error", "message": {"text": "FastAPI PUT `reorder_stocks` without auth dependency \u2014 backend/app/api/v1/user_themes.py:478"}, "properties": {"repobilityId": "3b00f741ed86646c", "scanner": "scanner-primary", "fingerprint": "9ddc216a7032a131", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/user_themes.py"}, "region": {"startLine": 478}}}]}, {"ruleId": "scanner-2462dcdc68554a67", "level": "error", "message": {"text": "FastAPI POST `resolve_failure` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:121"}, "properties": {"repobilityId": "b435f549c7b61d22", "scanner": "scanner-primary", "fingerprint": "2462dcdc68554a67", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/ticker_validation.py"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-3d89eb73e360d81c", "level": "error", "message": {"text": "FastAPI POST `resolve_all_for_symbol` without auth dependency \u2014 backend/app/api/v1/ticker_validation.py:152"}, "properties": {"repobilityId": "22ed48df88137ff5", "scanner": "scanner-primary", "fingerprint": "3d89eb73e360d81c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/ticker_validation.py"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-923695a7b52d4c2a", "level": "error", "message": {"text": "FastAPI POST `get_price_history_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:871"}, "properties": {"repobilityId": "b42d7ba8ccc7d716", "scanner": "scanner-primary", "fingerprint": "923695a7b52d4c2a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/stocks.py"}, "region": {"startLine": 871}}}]}, {"ruleId": "scanner-5be3e600e8cc5f60", "level": "error", "message": {"text": "FastAPI POST `get_stock_fundamentals_batch` without auth dependency \u2014 backend/app/api/v1/stocks.py:910"}, "properties": {"repobilityId": "6f39188cf72de875", "scanner": "scanner-primary", "fingerprint": "5be3e600e8cc5f60", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/stocks.py"}, "region": {"startLine": 910}}}]}, {"ruleId": "scanner-49cbc1529e5524f3", "level": "error", "message": {"text": "FastAPI POST `run_taxonomy_assignment` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:85"}, "properties": {"repobilityId": "b2cfd6c23927e200", "scanner": "scanner-primary", "fingerprint": "49cbc1529e5524f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_taxonomy.py"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-95cffb2ad5ff00de", "level": "error", "message": {"text": "FastAPI POST `run_taxonomy_assignment_async` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:102"}, "properties": {"repobilityId": "3f4aae03dab5e3bb", "scanner": "scanner-primary", "fingerprint": "95cffb2ad5ff00de", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_taxonomy.py"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-9bc85bae21e37c30", "level": "error", "message": {"text": "FastAPI PUT `reassign_l2_to_l1` without auth dependency \u2014 backend/app/api/v1/themes_taxonomy.py:116"}, "properties": {"repobilityId": "bae0ec4d238e86ef", "scanner": "scanner-primary", "fingerprint": "9bc85bae21e37c30", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/themes_taxonomy.py"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-b43b3a516eca8f48", "level": "error", "message": {"text": "FastAPI POST `force_release_lock` without auth dependency \u2014 backend/app/api/v1/data_fetch_status.py:39"}, "properties": {"repobilityId": "ac84aa33eb960bff", "scanner": "scanner-primary", "fingerprint": "b43b3a516eca8f48", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/v1/data_fetch_status.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "9a7ab29051c0367b", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6916b07fac62bea6", "level": "note", "message": {"text": "Unused endpoint: POST /refresh/all"}, "properties": {"repobilityId": "4216bdb7db86dfb5", "scanner": "scanner-primary", "fingerprint": "6916b07fac62bea6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d07f9dddb9e54b17", "level": "note", "message": {"text": "Unused endpoint: POST /refresh/symbol/{symbol}"}, "properties": {"repobilityId": "5f502b18df2a1772", "scanner": "scanner-primary", "fingerprint": "d07f9dddb9e54b17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f89c919cedfe483", "level": "note", "message": {"text": "Unused endpoint: POST /populate"}, "properties": {"repobilityId": "eccd1d4b1a048f03", "scanner": "scanner-primary", "fingerprint": "3f89c919cedfe483", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd8dc4599ec52a08", "level": "note", "message": {"text": "Unused endpoint: GET /stats"}, "properties": {"repobilityId": "c98d90db02cfda42", "scanner": "scanner-primary", "fingerprint": "cd8dc4599ec52a08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-516f9374f9fcbbb5", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/minervini"}, "properties": {"repobilityId": "10ec1ef5b5520b3b", "scanner": "scanner-primary", "fingerprint": "516f9374f9fcbbb5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f3801b2d68aed1d", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/rs-rating"}, "properties": {"repobilityId": "d7975a71755ab391", "scanner": "scanner-primary", "fingerprint": "6f3801b2d68aed1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eab223b2e63f5a00", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/stage"}, "properties": {"repobilityId": "593d31c2036a3381", "scanner": "scanner-primary", "fingerprint": "eab223b2e63f5a00", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-680755652d6e68f0", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/ma-analysis"}, "properties": {"repobilityId": "02d692d0a7cda0f6", "scanner": "scanner-primary", "fingerprint": "680755652d6e68f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ed9ab7c09f9e8a2", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/vcp"}, "properties": {"repobilityId": "d4f0d086c9838050", "scanner": "scanner-primary", "fingerprint": "4ed9ab7c09f9e8a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-798e0333cecf2e36", "level": "note", "message": {"text": "Unused endpoint: GET /{symbol}/52-week-position"}, "properties": {"repobilityId": "a02abe0a0456affd", "scanner": "scanner-primary", "fingerprint": "798e0333cecf2e36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1008c575819b3d37", "level": "note", "message": {"text": "Unused endpoint: GET /jobs"}, "properties": {"repobilityId": "d784f24d6ebf4d1e", "scanner": "scanner-primary", "fingerprint": "1008c575819b3d37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1f5994c1f21ad36", "level": "note", "message": {"text": "Unused endpoint: POST /jobs/{task_id}/cancel"}, "properties": {"repobilityId": "92895c6bbdb2ebfe", "scanner": "scanner-primary", "fingerprint": "a1f5994c1f21ad36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81c3f56a60f5cb56", "level": "note", "message": {"text": "Unused endpoint: GET /{profile}"}, "properties": {"repobilityId": "cd2100e227d9bc57", "scanner": "scanner-primary", "fingerprint": "81c3f56a60f5cb56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71ab5eb26a3c6f18", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/assistant/conversations"}, "properties": {"repobilityId": "4c6a666f969f4de8", "scanner": "scanner-primary", "fingerprint": "71ab5eb26a3c6f18", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02488cf8dfee6de4", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/assistant/conversations"}, "properties": {"repobilityId": "2fe4d819a9c6321c", "scanner": "scanner-primary", "fingerprint": "02488cf8dfee6de4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7b68c68c4c45cdb", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/assistant/conversations/{conversation_id}"}, "properties": {"repobilityId": "67d4d413ac5d6196", "scanner": "scanner-primary", "fingerprint": "a7b68c68c4c45cdb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8a58575603e5059", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/assistant/conversations/{conversation_id}/messages"}, "properties": {"repobilityId": "39920e5c906aef4b", "scanner": "scanner-primary", "fingerprint": "f8a58575603e5059", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c237ce61e78bc78b", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/assistant/health"}, "properties": {"repobilityId": "7b6d6fd201d40209", "scanner": "scanner-primary", "fingerprint": "c237ce61e78bc78b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-933e5e1470d866e0", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/assistant/watchlist-add-preview"}, "properties": {"repobilityId": "c99a522bca222b1d", "scanner": "scanner-primary", "fingerprint": "933e5e1470d866e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe13dd0d9ffeb9cb", "level": "note", "message": {"text": "Unused endpoint: GET /bootstrap"}, "properties": {"repobilityId": "28bae20ffa5b7cea", "scanner": "scanner-primary", "fingerprint": "fe13dd0d9ffeb9cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2748808021f259ec", "level": "note", "message": {"text": "Unused endpoint: GET /pipelines"}, "properties": {"repobilityId": "1f7f842d2f032f64", "scanner": "scanner-primary", "fingerprint": "2748808021f259ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e738ffd9fc26accf", "level": "note", "message": {"text": "Unused endpoint: GET /rankings"}, "properties": {"repobilityId": "d11eb8d91e3da41e", "scanner": "scanner-primary", "fingerprint": "e738ffd9fc26accf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6cd0c3ef25476c2", "level": "note", "message": {"text": "Unused endpoint: GET /emerging"}, "properties": {"repobilityId": "49c2d67fc48e3e4e", "scanner": "scanner-primary", "fingerprint": "a6cd0c3ef25476c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67db81ff589a2912", "level": "note", "message": {"text": "Unused endpoint: GET /alerts"}, "properties": {"repobilityId": "641333c7aa0efaa1", "scanner": "scanner-primary", "fingerprint": "67db81ff589a2912", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f210ebc7e4e66cd3", "level": "note", "message": {"text": "Unused endpoint: GET /lifecycle-transitions"}, "properties": {"repobilityId": "d1180bd4f6af69be", "scanner": "scanner-primary", "fingerprint": "f210ebc7e4e66cd3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67508b1761d29094", "level": "note", "message": {"text": "Unused endpoint: POST /alerts/{alert_id}/dismiss"}, "properties": {"repobilityId": "52853f4a75e8c7fe", "scanner": "scanner-primary", "fingerprint": "67508b1761d29094", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-291911293a5fe4ab", "level": "note", "message": {"text": "Unused endpoint: GET /matching/telemetry"}, "properties": {"repobilityId": "af24c9a6bdb5c0cc", "scanner": "scanner-primary", "fingerprint": "291911293a5fe4ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28eb93057fc426f9", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}"}, "properties": {"repobilityId": "257112d457b80de3", "scanner": "scanner-primary", "fingerprint": "28eb93057fc426f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c147a954c3db6eda", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}/history"}, "properties": {"repobilityId": "a4aa5489ce321f8a", "scanner": "scanner-primary", "fingerprint": "c147a954c3db6eda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd846e81ddef830f", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}/mentions"}, "properties": {"repobilityId": "eb6376f01ceac50c", "scanner": "scanner-primary", "fingerprint": "dd846e81ddef830f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe4fa2c8753b4171", "level": "note", "message": {"text": "Unused endpoint: GET /correlation/clusters"}, "properties": {"repobilityId": "7ab2ea8e03390676", "scanner": "scanner-primary", "fingerprint": "fe4fa2c8753b4171", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1c0889fe4167fe5", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}/validate"}, "properties": {"repobilityId": "6ba0b0d6bbcb5c66", "scanner": "scanner-primary", "fingerprint": "d1c0889fe4167fe5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af347a90c2e328f5", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}/entrants"}, "properties": {"repobilityId": "97c56492ef273ed4", "scanner": "scanner-primary", "fingerprint": "af347a90c2e328f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf75a8fb6e18d65c", "level": "note", "message": {"text": "Unused endpoint: GET /{theme_id}/similar"}, "properties": {"repobilityId": "7dec05e041435c9d", "scanner": "scanner-primary", "fingerprint": "bf75a8fb6e18d65c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "282ce53dbcc0ada4", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10aae7611dee85d5", "level": "note", "message": {"text": "Unused endpoint: PUT /{watchlist_id}"}, "properties": {"repobilityId": "bb1f59ba9e3a3a10", "scanner": "scanner-primary", "fingerprint": "10aae7611dee85d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ad4c184a364ad80", "level": "note", "message": {"text": "Unused endpoint: DELETE /{watchlist_id}"}, "properties": {"repobilityId": "4d31d4e8f5788852", "scanner": "scanner-primary", "fingerprint": "0ad4c184a364ad80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-365510c67c130be0", "level": "note", "message": {"text": "Unused endpoint: PUT /reorder"}, "properties": {"repobilityId": "5c13e60e06d32f3d", "scanner": "scanner-primary", "fingerprint": "365510c67c130be0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7a0e9c3c67c5523", "level": "note", "message": {"text": "Unused endpoint: GET /{watchlist_id}/data"}, "properties": {"repobilityId": "f5495f895268a812", "scanner": "scanner-primary", "fingerprint": "a7a0e9c3c67c5523", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2745a1ebddde0f0", "level": "note", "message": {"text": "Unused endpoint: GET /{watchlist_id}/stewardship"}, "properties": {"repobilityId": "076554b25016a3ed", "scanner": "scanner-primary", "fingerprint": "f2745a1ebddde0f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8370aeadd1e92913", "level": "note", "message": {"text": "Unused endpoint: POST /{watchlist_id}/items"}, "properties": {"repobilityId": "c96c4c424a5e5e29", "scanner": "scanner-primary", "fingerprint": "8370aeadd1e92913", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26b513a927f5bc63", "level": "note", "message": {"text": "Unused endpoint: POST /{watchlist_id}/items/bulk"}, "properties": {"repobilityId": "8f4cfce57b5f722a", "scanner": "scanner-primary", "fingerprint": "26b513a927f5bc63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b01e042c6df99e09", "level": "note", "message": {"text": "Unused endpoint: POST /{watchlist_id}/items/import"}, "properties": {"repobilityId": "1f4951b0c6d89070", "scanner": "scanner-primary", "fingerprint": "b01e042c6df99e09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f174933dcc0cc60e", "level": "note", "message": {"text": "Unused endpoint: PUT /items/{item_id}"}, "properties": {"repobilityId": "e10c8c6642fdd20f", "scanner": "scanner-primary", "fingerprint": "f174933dcc0cc60e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6be2de44e33fa66e", "level": "note", "message": {"text": "Unused endpoint: DELETE /items/{item_id}"}, "properties": {"repobilityId": "ed9ae6d87c52fac6", "scanner": "scanner-primary", "fingerprint": "6be2de44e33fa66e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5fb5d3fbd7205c1", "level": "note", "message": {"text": "Unused endpoint: PUT /{watchlist_id}/items/reorder"}, "properties": {"repobilityId": "e8963ba29d62b73f", "scanner": "scanner-primary", "fingerprint": "f5fb5d3fbd7205c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92a4c5e0e3b2448a", "level": "note", "message": {"text": "Unused endpoint: GET /config/llm"}, "properties": {"repobilityId": "6fa009cd5beb2eb1", "scanner": "scanner-primary", "fingerprint": "92a4c5e0e3b2448a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c490bd31dd20e66", "level": "note", "message": {"text": "Unused endpoint: POST /config/llm"}, "properties": {"repobilityId": "6cdf4bc17f904268", "scanner": "scanner-primary", "fingerprint": "7c490bd31dd20e66", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5bedb9e12d45bed", "level": "note", "message": {"text": "Unused endpoint: POST /config/ollama"}, "properties": {"repobilityId": "80d55ab42c690ca4", "scanner": "scanner-primary", "fingerprint": "e5bedb9e12d45bed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}