{"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-4e01cf0c811f66b5", "name": "Possibly dead Python function: websocket_endpoint", "shortDescription": {"text": "Possibly dead Python function: websocket_endpoint"}, "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-978e94559bd86f1d", "name": "Possibly dead Python function: provider", "shortDescription": {"text": "Possibly dead Python function: provider"}, "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-33c265ed3cd0f4a5", "name": "Possibly dead Python function: simulate_scalping_time", "shortDescription": {"text": "Possibly dead Python function: simulate_scalping_time"}, "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-9cc0afbf99412c1d", "name": "Possibly dead Python function: force_liquidate_all", "shortDescription": {"text": "Possibly dead Python function: force_liquidate_all"}, "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-d81323bf6698a910", "name": "Possibly dead Python function: reset_daily", "shortDescription": {"text": "Possibly dead Python function: reset_daily"}, "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-11b1339d734a77c6", "name": "Possibly dead Python function: format_text", "shortDescription": {"text": "Possibly dead Python function: format_text"}, "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-4602b8a815e1abf1", "name": "Possibly dead Python function: generate_weekly_trend", "shortDescription": {"text": "Possibly dead Python function: generate_weekly_trend"}, "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-12be8ba8a7c64e41", "name": "Possibly dead Python function: format_text_report", "shortDescription": {"text": "Possibly dead Python function: format_text_report"}, "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-b73b19f643de0fab", "name": "Possibly dead Python function: execute_buy", "shortDescription": {"text": "Possibly dead Python function: execute_buy"}, "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-a87fb50485a26bd4", "name": "Possibly dead Python function: execute_sell", "shortDescription": {"text": "Possibly dead Python function: execute_sell"}, "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-e371911b803f87f9", "name": "Possibly dead Python function: force_liquidate_all", "shortDescription": {"text": "Possibly dead Python function: force_liquidate_all"}, "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-bde95507263be8d8", "name": "Possibly dead Python function: buy_market_order", "shortDescription": {"text": "Possibly dead Python function: buy_market_order"}, "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-25823f506eb4660b", "name": "Possibly dead Python function: sort_key", "shortDescription": {"text": "Possibly dead Python function: sort_key"}, "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-c9cc7e2e368d6dc6", "name": "Possibly dead Python function: load_watchlist", "shortDescription": {"text": "Possibly dead Python function: load_watchlist"}, "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-a21e9978d661a730", "name": "Possibly dead Python function: is_fresh", "shortDescription": {"text": "Possibly dead Python function: is_fresh"}, "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-a127faefd7e3746f", "name": "Possibly dead Python function: find_recent_by_source", "shortDescription": {"text": "Possibly dead Python function: find_recent_by_source"}, "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-d13515ad41a88699", "name": "Possibly dead Python function: build_performance_summary", "shortDescription": {"text": "Possibly dead Python function: build_performance_summary"}, "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-87edf944f8f8460c", "name": "File has no detected symbols: backend/db/_legacy_sqlite.py", "shortDescription": {"text": "File has no detected symbols: backend/db/_legacy_sqlite.py"}, "fullDescription": {"text": "Source file with no class/function declarations \u2014 possible config, dead code, or scratch file."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fc9b0aac5e5e767", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/monitor/page.tsx:366", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/monitor/page.tsx:366"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-751d057aabc44068", "name": "Stray `console.log` in TS/JS \u2014 frontend/lib/api.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/lib/api.ts:53"}, "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-f90fea260f75bfb3", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 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-0b82badf057de446", "name": "Privileged port 35 in use", "shortDescription": {"text": "Privileged port 35 in use"}, "fullDescription": {"text": "Port 35 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-d0acbb4a8c0a3846", "name": "Privileged port 14 in use", "shortDescription": {"text": "Privileged port 14 in use"}, "fullDescription": {"text": "Port 14 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-5d17e4b5afb1b810", "name": "Privileged port 50 in use", "shortDescription": {"text": "Privileged port 50 in use"}, "fullDescription": {"text": "Port 50 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-db69db7af8c2c05d", "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-7474fe50d88a0246", "name": "Privileged port 16 in use", "shortDescription": {"text": "Privileged port 16 in use"}, "fullDescription": {"text": "Port 16 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-42324fa42f6ebf5d", "name": "Privileged port 21 in use", "shortDescription": {"text": "Privileged port 21 in use"}, "fullDescription": {"text": "Port 21 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-b367301ae0efb8c9", "name": "Privileged port 11 in use", "shortDescription": {"text": "Privileged port 11 in use"}, "fullDescription": {"text": "Port 11 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-0d91aeed882bac65", "name": "Privileged port 12 in use", "shortDescription": {"text": "Privileged port 12 in use"}, "fullDescription": {"text": "Port 12 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-36d3be8ef63e1ce5", "name": "Privileged port 40 in use", "shortDescription": {"text": "Privileged port 40 in use"}, "fullDescription": {"text": "Port 40 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-068adcc485e7337f", "name": "Privileged port 20 in use", "shortDescription": {"text": "Privileged port 20 in use"}, "fullDescription": {"text": "Port 20 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-a213345d777b40c2", "name": "Insecure pattern 'exec_used' in Makefile:144", "shortDescription": {"text": "Insecure pattern 'exec_used' in Makefile:144"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c7fb097ea9c408d7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 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-e0662b204e97cff6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "returntocorp/semgrep-action@v1 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-9cceb8bdc6d6f7ab", "name": "Very large file: backend/tests/test_supertrend_auto_trader.py (1056 lines)", "shortDescription": {"text": "Very large file: backend/tests/test_supertrend_auto_trader.py (1056 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-dec2fa60b24c95f7", "name": "Very large file: backend/legacy_scalping/main.py (2419 lines)", "shortDescription": {"text": "Very large file: backend/legacy_scalping/main.py (2419 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-2888185f5ff89ee3", "name": "Very large file: backend/legacy_scalping/execution/kiwoom_api.py (1569 lines)", "shortDescription": {"text": "Very large file: backend/legacy_scalping/execution/kiwoom_api.py (1569 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-2b25dbf3160345b3", "name": "Very large file: backend/core/supertrend_auto_trader.py (1064 lines)", "shortDescription": {"text": "Very large file: backend/core/supertrend_auto_trader.py (1064 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-621d179e9a19906b", "name": "Very large file: scripts/intraday_buy_daemon.py (1619 lines)", "shortDescription": {"text": "Very large file: scripts/intraday_buy_daemon.py (1619 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 1098 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 53 placeholder/mock markers across 25 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5330e2722751121", "name": "Agent authority lacks a verifier contract: backend/legacy_scalping/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: backend/legacy_scalping/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31afc3551708bc02", "name": "Legacy-named symbol `test_v1` in backend/tests/conftest.py:64", "shortDescription": {"text": "Legacy-named symbol `test_v1` in backend/tests/conftest.py:64"}, "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-21c43419c8ffb978", "name": "Legacy-named symbol `_analyze_v2` in backend/tests/test_ob_scalp.py:92", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/test_ob_scalp.py:92"}, "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-81c49ba6e0015afe", "name": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_orchestration.py:56", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_orchestration.py:56"}, "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-b9f0de7f74fb5c6a", "name": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_order_wiring.py:83", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_order_wiring.py:83"}, "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-80c6252dbf07e6fa", "name": "Legacy-named symbol `auth_v2` in backend/tests/api/test_auth_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `auth_v2` in backend/tests/api/test_auth_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f47458a5c03816a", "name": "Commented-code block (6 lines) in backend/tests/strategy/test_short_term_high_exit.py:127", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/strategy/test_short_term_high_exit.py:127"}, "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-b581fa9ff77f337d", "name": "Legacy-named symbol `test_c8_from_legacy` in backend/tests/strategy/test_strategy_models.py:40", "shortDescription": {"text": "Legacy-named symbol `test_c8_from_legacy` in backend/tests/strategy/test_strategy_models.py:40"}, "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-77d0d0e1803fcfdc", "name": "Legacy-named symbol `scalping_consensus_v1` in backend/tests/strategy/test_scalping_consensus.py:57", "shortDescription": {"text": "Legacy-named symbol `scalping_consensus_v1` in backend/tests/strategy/test_scalping_consensus.py:57"}, "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-d09895d2af8414ba", "name": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_f_zone.py:4", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_f_zone.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-ed2b3da48a6b4e86", "name": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_base.py:21", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_base.py:21"}, "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-7d9b414157eafc08", "name": "Legacy-named symbol `swing_38_v1` in backend/tests/strategy/test_swing_38.py:84", "shortDescription": {"text": "Legacy-named symbol `swing_38_v1` in backend/tests/strategy/test_swing_38.py:84"}, "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-609aa97a2dc89199", "name": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_blue_line.py:52", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_blue_line.py:52"}, "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-61fcefd3f11c1cfb", "name": "Legacy-named symbol `gold_zone_v1` in backend/tests/strategy/test_gold_zone.py:64", "shortDescription": {"text": "Legacy-named symbol `gold_zone_v1` in backend/tests/strategy/test_gold_zone.py:64"}, "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-9276d989403e93fd", "name": "Legacy-named symbol `sf_zone_v1` in backend/tests/strategy/test_sf_zone.py:25", "shortDescription": {"text": "Legacy-named symbol `sf_zone_v1` in backend/tests/strategy/test_sf_zone.py:25"}, "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-01d118f3faddb9d5", "name": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_supertrend_whipsaw.py:75", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_supertrend_whipsaw.py:75"}, "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-1af0b027e8c61a57", "name": "Legacy-named symbol `sor_v2` in backend/tests/execution/test_sor_v2_and_extensions.py:9", "shortDescription": {"text": "Legacy-named symbol `sor_v2` in backend/tests/execution/test_sor_v2_and_extensions.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-544f60fa3eb4d04a", "name": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_three_tier.py:45", "shortDescription": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_three_tier.py:45"}, "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-c25adce6cb160f35", "name": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_tfidf_lr.py:41", "shortDescription": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_tfidf_lr.py:41"}, "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-7ed4de42a449faa6", "name": "Legacy-named symbol `claude_haiku_v1` in backend/tests/themes/test_claude_haiku.py:28", "shortDescription": {"text": "Legacy-named symbol `claude_haiku_v1` in backend/tests/themes/test_claude_haiku.py:28"}, "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-ff292f298da20a1e", "name": "Legacy-named symbol `embedding_cosine_v1` in backend/tests/themes/test_embedding_cosine.py:67", "shortDescription": {"text": "Legacy-named symbol `embedding_cosine_v1` in backend/tests/themes/test_embedding_cosine.py:67"}, "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-9c96c671e1e04639", "name": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_classification_result.py:13", "shortDescription": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_classification_result.py:13"}, "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-83e4eb21a459ef6f", "name": "Commented-code block (5 lines) in backend/tests/journal/test_active_positions.py:125", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/journal/test_active_positions.py:125"}, "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-38e7d29fe6f088d1", "name": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_scanner.py:73", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_scanner.py:73"}, "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-968c103e9e43f734", "name": "Legacy-named symbol `test_insufficient_data_returns_copy` in backend/tests/scanner/test_indicators.py:110", "shortDescription": {"text": "Legacy-named symbol `test_insufficient_data_returns_copy` in backend/tests/scanner/test_indicators.py:110"}, "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-c3e8220950c70446", "name": "Legacy-named symbol `gold_zone_v1` in backend/tests/scanner/test_signal_scanner_phase_c.py:122", "shortDescription": {"text": "Legacy-named symbol `gold_zone_v1` in backend/tests/scanner/test_signal_scanner_phase_c.py:122"}, "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-56f2d0ecbee42247", "name": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_exit_watcher.py:44", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_exit_watcher.py:44"}, "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-c6c4f3124cd52798", "name": "Commented-code block (5 lines) in backend/tests/gateway/test_kiwoom_native_rank.py:140", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/gateway/test_kiwoom_native_rank.py:140"}, "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-2c4ffd70bfdd5875", "name": "Legacy-named symbol `test_migrate_dry_run_does_not_copy` in backend/tests/db/test_migrate_script.py:27", "shortDescription": {"text": "Legacy-named symbol `test_migrate_dry_run_does_not_copy` in backend/tests/db/test_migrate_script.py:27"}, "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-fa55b2e3b595c405", "name": "Legacy-named symbol `swing_38_v1` in backend/tests/risk/test_holding_evaluator.py:245", "shortDescription": {"text": "Legacy-named symbol `swing_38_v1` in backend/tests/risk/test_holding_evaluator.py:245"}, "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-816ffa2a2a0cd254", "name": "Legacy-named symbol `model_copy` in backend/tests/news/test_news_id_round_trip.py:1", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/tests/news/test_news_id_round_trip.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0693da24aa836f91", "name": "Legacy-named symbol `test_regime_weights_returns_copy` in backend/tests/backtester/test_market_regime.py:89", "shortDescription": {"text": "Legacy-named symbol `test_regime_weights_returns_copy` in backend/tests/backtester/test_market_regime.py:89"}, "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-23b9aa88a45271f1", "name": "Legacy-named symbol `sim_legacy` in backend/tests/backtester/test_intraday_realistic.py:40", "shortDescription": {"text": "Legacy-named symbol `sim_legacy` in backend/tests/backtester/test_intraday_realistic.py:40"}, "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-56660c2d6088a153", "name": "Commented-code block (5 lines) in backend/api/routes/signals.py:71", "shortDescription": {"text": "Commented-code block (5 lines) in backend/api/routes/signals.py:71"}, "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-0ef3f74d59332b83", "name": "Legacy-named symbol `auth_v2` in backend/api/routes/auth_v2.py:92", "shortDescription": {"text": "Legacy-named symbol `auth_v2` in backend/api/routes/auth_v2.py:92"}, "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-8df601acb6c6b13e", "name": "Legacy-named symbol `model_copy` in backend/api/routes/risk.py:160", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/api/routes/risk.py:160"}, "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-f532c9a7b0d8d177", "name": "Commented-code block (13 lines) in backend/legacy_scalping/strategy/scalping_team/coordinator.py:50", "shortDescription": {"text": "Commented-code block (13 lines) in backend/legacy_scalping/strategy/scalping_team/coordinator.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-fd309872bf168a79", "name": "Legacy-named symbol `tfidf_lr_v1` in backend/models/theme.py:20", "shortDescription": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/models/theme.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-72c784684a42752f", "name": "Legacy-named symbol `from_legacy` in backend/models/strategy.py:47", "shortDescription": {"text": "Legacy-named symbol `from_legacy` in backend/models/strategy.py:47"}, "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-cb729e5103332251", "name": "Commented-code block (5 lines) in backend/models/strategy.py:144", "shortDescription": {"text": "Commented-code block (5 lines) in backend/models/strategy.py:144"}, "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-7cef7efb560717d3", "name": "Legacy-named symbol `model_copy` in backend/models/news.py:36", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/models/news.py:36"}, "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-b21b1c5a1d51463f", "name": "Legacy-named symbol `model_copy` in backend/db/repositories/news_repo.py:30", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/db/repositories/news_repo.py:30"}, "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-4eb4aba24dc23279", "name": "Legacy-named symbol `supertrend_v1` in backend/core/orchestrator.py:526", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/orchestrator.py:526"}, "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-d97570804302d76c", "name": "Commented-code block (5 lines) in backend/core/orchestrator.py:43", "shortDescription": {"text": "Commented-code block (5 lines) in backend/core/orchestrator.py:43"}, "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-f09a91568eed27ae", "name": "Commented-code block (6 lines) in backend/core/supertrend_auto_trader.py:77", "shortDescription": {"text": "Commented-code block (6 lines) in backend/core/supertrend_auto_trader.py:77"}, "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-79961558c5dff10e", "name": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/f_zone.py:214", "shortDescription": {"text": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/f_zone.py:214"}, "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-1b74da56c4acb576", "name": "Commented-code block (7 lines) in backend/core/strategy/f_zone.py:58", "shortDescription": {"text": "Commented-code block (7 lines) in backend/core/strategy/f_zone.py:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e3154f15c2308b0", "name": "Legacy-named symbol `swing_38_v1` in backend/core/strategy/swing_38.py:102", "shortDescription": {"text": "Legacy-named symbol `swing_38_v1` in backend/core/strategy/swing_38.py:102"}, "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-233a156967758896", "name": "Commented-code block (5 lines) in backend/core/strategy/swing_38.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in backend/core/strategy/swing_38.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-ae18c6b064bfea1c", "name": "Legacy-named symbol `scalping_consensus_v1` in backend/core/strategy/scalping_consensus.py:50", "shortDescription": {"text": "Legacy-named symbol `scalping_consensus_v1` in backend/core/strategy/scalping_consensus.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-7d674dbfb6a9f72f", "name": "Legacy-named symbol `stock_v1` in backend/core/strategy/stock_strategy.py:77", "shortDescription": {"text": "Legacy-named symbol `stock_v1` in backend/core/strategy/stock_strategy.py:77"}, "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-253a90fdf8a01108", "name": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/backtester.py:63", "shortDescription": {"text": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/backtester.py:63"}, "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-99f48aed0140e06a", "name": "Legacy-named symbol `sf_zone_v1` in backend/core/strategy/sf_zone.py:36", "shortDescription": {"text": "Legacy-named symbol `sf_zone_v1` in backend/core/strategy/sf_zone.py:36"}, "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-0c1902e79f38e3a6", "name": "Legacy-named symbol `ob_scalp_v1` in backend/core/strategy/ob_scalp.py:150", "shortDescription": {"text": "Legacy-named symbol `ob_scalp_v1` in backend/core/strategy/ob_scalp.py:150"}, "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-f12f7f4eb1a20eae", "name": "Legacy-named symbol `supertrend_v1` in backend/core/strategy/supertrend.py:283", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/strategy/supertrend.py:283"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09c5c078424fdff9", "name": "Commented-code block (9 lines) in backend/core/strategy/supertrend.py:244", "shortDescription": {"text": "Commented-code block (9 lines) in backend/core/strategy/supertrend.py:244"}, "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-87d5d4577567b0e2", "name": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/gold_zone.py:51", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/gold_zone.py:51"}, "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-ecb544d0d9a5b543", "name": "Commented-code block (9 lines) in backend/core/strategy/gold_zone.py:50", "shortDescription": {"text": "Commented-code block (9 lines) in backend/core/strategy/gold_zone.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-3d230e9c78d7de7e", "name": "Legacy-named symbol `blue_line_v1` in backend/core/strategy/blue_line.py:49", "shortDescription": {"text": "Legacy-named symbol `blue_line_v1` in backend/core/strategy/blue_line.py:49"}, "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-fada7a8c7eed0036", "name": "Legacy-named symbol `crypto_breakout_v1` in backend/core/strategy/crypto_breakout.py:41", "shortDescription": {"text": "Legacy-named symbol `crypto_breakout_v1` in backend/core/strategy/crypto_breakout.py:41"}, "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-e78fd3e8d90c262c", "name": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/base.py:52", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/base.py:52"}, "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-cffeddd245af840e", "name": "Stub function `inc` (body is just `pass`/`return`) \u2014 backend/core/monitoring/metrics.py:45", "shortDescription": {"text": "Stub function `inc` (body is just `pass`/`return`) \u2014 backend/core/monitoring/metrics.py:45"}, "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-909af6e08c68d2c0", "name": "Legacy-named symbol `model_copy` in backend/core/execution/position_manager.py:52", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/core/execution/position_manager.py:52"}, "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-1999bc507deeefc8", "name": "Legacy-named symbol `model_copy` in backend/core/execution/exit_engine.py:164", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/core/execution/exit_engine.py:164"}, "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-f18dbde4740e94ad", "name": "Legacy-named symbol `embedder_v1` in backend/core/embeddings/worker.py:4", "shortDescription": {"text": "Legacy-named symbol `embedder_v1` in backend/core/embeddings/worker.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-ac64d16967bf722d", "name": "Legacy-named symbol `tfidf_lr_v1` in backend/core/themes/classifier.py:65", "shortDescription": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/core/themes/classifier.py:65"}, "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-b6736c2f6acaec41", "name": "Legacy-named symbol `too_old` in backend/core/journal/active_positions.py:275", "shortDescription": {"text": "Legacy-named symbol `too_old` in backend/core/journal/active_positions.py:275"}, "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-e5bdf2c667582bd7", "name": "Legacy-named symbol `screener_v1` in backend/core/scanner/stock_screener.py:41", "shortDescription": {"text": "Legacy-named symbol `screener_v1` in backend/core/scanner/stock_screener.py:41"}, "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-504f29c1d09584a4", "name": "Legacy-named symbol `supertrend_v1` in backend/core/scanner/supertrend_exit_watcher.py:31", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/scanner/supertrend_exit_watcher.py:31"}, "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-44360e8a36da3bb9", "name": "Legacy-named symbol `gold_zone_v1` in backend/core/risk/holding_evaluator.py:152", "shortDescription": {"text": "Legacy-named symbol `gold_zone_v1` in backend/core/risk/holding_evaluator.py:152"}, "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-61c0f9bc4d16f6c6", "name": "Commented-code block (7 lines) in backend/core/risk/holding_evaluator.py:61", "shortDescription": {"text": "Commented-code block (7 lines) in backend/core/risk/holding_evaluator.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-b9239116a1284990", "name": "Legacy-named symbol `embedder_v1` in backend/core/news/publisher.py:9", "shortDescription": {"text": "Legacy-named symbol `embedder_v1` in backend/core/news/publisher.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-b7595ffe7886e010", "name": "Legacy-named symbol `model_copy` in backend/core/news/collector.py:115", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/core/news/collector.py:115"}, "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-705708052e83952f", "name": "Legacy-named symbol `model_copy` in backend/core/telemetry/tracer.py:89", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/core/telemetry/tracer.py:89"}, "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-feda1679d7fccfcd", "name": "Commented-code block (5 lines) in backend/core/backtester/market_regime.py:94", "shortDescription": {"text": "Commented-code block (5 lines) in backend/core/backtester/market_regime.py:94"}, "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-0e4822dacfd1b283", "name": "Legacy-named symbol `model_copy` in backend/core/backtester/intraday_simulator.py:537", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/core/backtester/intraday_simulator.py:537"}, "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-0b850fb542dba08f", "name": "Commented-code block (6 lines) in backend/core/backtester/intraday_simulator.py:231", "shortDescription": {"text": "Commented-code block (6 lines) in backend/core/backtester/intraday_simulator.py:231"}, "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-848b26641bf39842", "name": "Legacy-named symbol `model_copy` in scripts/_strategy_minute_ledger_sim.py:129", "shortDescription": {"text": "Legacy-named symbol `model_copy` in scripts/_strategy_minute_ledger_sim.py:129"}, "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-75497afa4964ed0b", "name": "Commented-code block (5 lines) in scripts/update_ohlcv_cache.py:111", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/update_ohlcv_cache.py:111"}, "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-16b47c7747283f24", "name": "Legacy-named symbol `_analyze_v2` in scripts/_ob_scalp_shadow.py:290", "shortDescription": {"text": "Legacy-named symbol `_analyze_v2` in scripts/_ob_scalp_shadow.py:290"}, "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-867e1a66b6c0a868", "name": "Commented-code block (5 lines) in scripts/simulate_leaders.py:357", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/simulate_leaders.py:357"}, "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-94340db529b58722", "name": "Commented-code block (5 lines) in scripts/intraday_buy_daemon.py:66", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/intraday_buy_daemon.py:66"}, "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-f3c293df92f750c8", "name": "Commented-code block (6 lines) in scripts/evaluate_holdings.py:83", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/evaluate_holdings.py:83"}, "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-bf17cff80d0222f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx:42"}, "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-2c28d02edd4f918d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/audit/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/audit/page.tsx:41"}, "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-f0226d83c8480bb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/users/page.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/users/page.tsx:22"}, "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-c84944167c06f4e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/settings/page.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/settings/page.tsx:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3b2f2feb16ff2aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/watchlist/page.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/watchlist/page.tsx:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25980749296428e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/balance/page.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/balance/page.tsx:76"}, "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-4cac2a1bd86525ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/markets/market-table.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/markets/market-table.tsx:42"}, "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-ffc458d7001ae39c", "name": "Legacy-named symbol `supertrend_v1` in analysis/imports/2026-06-03/rsi_tf_sweep.py:359", "shortDescription": {"text": "Legacy-named symbol `supertrend_v1` in analysis/imports/2026-06-03/rsi_tf_sweep.py:359"}, "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-106b24f0f865e534", "name": "90 env vars used in code but missing from .env.example", "shortDescription": {"text": "90 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BARRO_CARRY_LIMIT_RATIO`, `BARRO_COMMISSION_RATE`, `BARRO_MAX_FLU_RATE`, `BARRO_TAX_RATE_SELL`, `BARRO_ZONE_ENTRY_CUTOFF`, `BARRO_ZONE_MAX_FLU`, `DATABASE_URL`, `DRY_RUN` + 82 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/legacy_scalping/scripts/trade_path_analysis.py:load_stock_names, backend/legacy_scalping/scripts/scalping_intraday_backtest.py:load_stock_names\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/legacy_scalping/strategy/verification_team/coordinator.py:verify, backend/legacy_scalping/strategy/verification_team/coordinator.py:verify, backend/legacy_scalping/strategy/verification_team/coordinator.py:verify, backend/legacy_scalping/strategy/verification_team/coordinator.py:verify\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/legacy_scalping/strategy/scalping_team/candle_pattern_agent.py:analyze, backend/legacy_scalping/strategy/scalping_team/breakout_confirm_agent.py:analyze, backend/legacy_scalping/strategy/scalping_team/spread_tape_agent.py:analyze, backend/legacy_scalping/strategy/scalping_team/golden_time_agent.py:analyze\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/legacy_scalping/strategy/strategy_team/trade_pattern_agent.py:analyze, backend/legacy_scalping/strategy/strategy_team/exit_optimizer_agent.py:analyze, backend/legacy_scalping/strategy/strategy_team/sizing_agent.py:analyze, backend/legacy_scalping/strategy/strategy_team/risk_reward_agent.py:analyze\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-0f12b55b9baa998c", "name": "FastAPI POST `toggle_strategy` without auth dependency \u2014 backend/api/routes/admin.py:95", "shortDescription": {"text": "FastAPI POST `toggle_strategy` without auth dependency \u2014 backend/api/routes/admin.py:95"}, "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-983d8ab194c0bfe2", "name": "FastAPI PUT `update_config` without auth dependency \u2014 backend/api/routes/config.py:58", "shortDescription": {"text": "FastAPI PUT `update_config` without auth dependency \u2014 backend/api/routes/config.py:58"}, "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-9a07082d25ae1f10", "name": "FastAPI POST `add_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.py:48", "shortDescription": {"text": "FastAPI POST `add_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.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-95ce6e85aa2451ad", "name": "FastAPI DELETE `remove_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.py:91", "shortDescription": {"text": "FastAPI DELETE `remove_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.py:91"}, "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-3bbc9841809010f3", "name": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth_v2.py:140", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth_v2.py:140"}, "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-65e7a783bf7c3d93", "name": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth_v2.py:155", "shortDescription": {"text": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth_v2.py:155"}, "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-3e1024527438e5d4", "name": "FastAPI POST `start_trading` without auth dependency \u2014 backend/api/routes/trading.py:33", "shortDescription": {"text": "FastAPI POST `start_trading` without auth dependency \u2014 backend/api/routes/trading.py:33"}, "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-8c7ed4b9655e7c84", "name": "FastAPI POST `stop_trading` without auth dependency \u2014 backend/api/routes/trading.py:56", "shortDescription": {"text": "FastAPI POST `stop_trading` without auth dependency \u2014 backend/api/routes/trading.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-74931ab435635f3e", "name": "FastAPI POST `place_order` without auth dependency \u2014 backend/api/routes/trading.py:89", "shortDescription": {"text": "FastAPI POST `place_order` without auth dependency \u2014 backend/api/routes/trading.py:89"}, "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-99200d5b1b5a6d99", "name": "FastAPI DELETE `cancel_order` without auth dependency \u2014 backend/api/routes/trading.py:170", "shortDescription": {"text": "FastAPI DELETE `cancel_order` without auth dependency \u2014 backend/api/routes/trading.py:170"}, "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-fd5cc250cfe54f7e", "name": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth.py:106", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth.py:106"}, "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-bae0baf0bf1ba0ce", "name": "FastAPI POST `mfa_setup` without auth dependency \u2014 backend/api/routes/auth.py:122", "shortDescription": {"text": "FastAPI POST `mfa_setup` without auth dependency \u2014 backend/api/routes/auth.py:122"}, "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-14d818d4495bf268", "name": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth.py:142", "shortDescription": {"text": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth.py:142"}, "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-9daf9b1d807f4ce9", "name": "FastAPI PUT `update_risk_limits` without auth dependency \u2014 backend/api/routes/risk.py:134", "shortDescription": {"text": "FastAPI PUT `update_risk_limits` without auth dependency \u2014 backend/api/routes/risk.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-a89eafe3ace35a3e", "name": "FastAPI POST `force_close_all` without auth dependency \u2014 backend/api/routes/risk.py:229", "shortDescription": {"text": "FastAPI POST `force_close_all` without auth dependency \u2014 backend/api/routes/risk.py:229"}, "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-f05ff351d70b414c", "name": "Dangling fetch: GET /api/admin/audit/recent?limit=${limit} (frontend/app/admin/audit/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/audit/recent?limit=${limit} (frontend/app/admin/audit/page.tsx:41)"}, "fullDescription": {"text": "`frontend/app/admin/audit/page.tsx:41` calls `GET /api/admin/audit/recent?limit=${limit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/audit/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f0d60bc36f10b39", "name": "Dangling fetch: GET /api/admin/users (frontend/app/admin/users/page.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (frontend/app/admin/users/page.tsx:22)"}, "fullDescription": {"text": "`frontend/app/admin/users/page.tsx:22` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a2d193a24b3bded", "name": "Unused endpoint: GET /reports/performance", "shortDescription": {"text": "Unused endpoint: GET /reports/performance"}, "fullDescription": {"text": "`backend/api/routes/reports.py` declares `GET /reports/performance` 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-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`backend/api/routes/admin.py` declares `GET /users` 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-29b372ddbcf4cf9b", "name": "Unused endpoint: GET /audit/recent", "shortDescription": {"text": "Unused endpoint: GET /audit/recent"}, "fullDescription": {"text": "`backend/api/routes/admin.py` declares `GET /audit/recent` 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-5a6fe07fe2c73723", "name": "Unused endpoint: POST /strategies/{strategy_id}/toggle", "shortDescription": {"text": "Unused endpoint: POST /strategies/{strategy_id}/toggle"}, "fullDescription": {"text": "`backend/api/routes/admin.py` declares `POST /strategies/{strategy_id}/toggle` 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-687209947ca7cd91", "name": "Unused endpoint: GET /market/ohlcv", "shortDescription": {"text": "Unused endpoint: GET /market/ohlcv"}, "fullDescription": {"text": "`backend/api/routes/market.py` declares `GET /market/ohlcv` 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-6fda2cde5a68ac5d", "name": "Unused endpoint: GET /market/order-book/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /market/order-book/{symbol}"}, "fullDescription": {"text": "`backend/api/routes/market.py` declares `GET /market/order-book/{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-05891c8ff4e7a11f", "name": "Unused endpoint: GET /signals/recent", "shortDescription": {"text": "Unused endpoint: GET /signals/recent"}, "fullDescription": {"text": "`backend/api/routes/signals.py` declares `GET /signals/recent` 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-cb49d6d14c0044d5", "name": "Unused endpoint: GET /api/calendar/symbol/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /api/calendar/symbol/{symbol}"}, "fullDescription": {"text": "`backend/api/routes/themes_calendar_news.py` declares `GET /api/calendar/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-304b6f2b403d93f7", "name": "Unused endpoint: POST /register", "shortDescription": {"text": "Unused endpoint: POST /register"}, "fullDescription": {"text": "`backend/api/routes/auth_v2.py` declares `POST /register` 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-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`backend/api/routes/auth_v2.py` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`backend/api/routes/auth_v2.py` declares `POST /refresh` 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-d5b20c1b658dae2b", "name": "Unused endpoint: POST /mfa/verify", "shortDescription": {"text": "Unused endpoint: POST /mfa/verify"}, "fullDescription": {"text": "`backend/api/routes/auth_v2.py` declares `POST /mfa/verify` 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-aa5c12413ecd4e76", "name": "Unused endpoint: POST /trading/start", "shortDescription": {"text": "Unused endpoint: POST /trading/start"}, "fullDescription": {"text": "`backend/api/routes/trading.py` declares `POST /trading/start` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36c2c8ea2e544a44", "name": "Unused endpoint: POST /trading/stop", "shortDescription": {"text": "Unused endpoint: POST /trading/stop"}, "fullDescription": {"text": "`backend/api/routes/trading.py` declares `POST /trading/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-237969fd797775a2", "name": "Unused endpoint: POST /trading/order", "shortDescription": {"text": "Unused endpoint: POST /trading/order"}, "fullDescription": {"text": "`backend/api/routes/trading.py` declares `POST /trading/order` 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-eadd38eb394da71f", "name": "Unused endpoint: DELETE /trading/order/{order_id}", "shortDescription": {"text": "Unused endpoint: DELETE /trading/order/{order_id}"}, "fullDescription": {"text": "`backend/api/routes/trading.py` declares `DELETE /trading/order/{order_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-2f87e6e150a43dad", "name": "Unused endpoint: GET /trading/order/{order_id}", "shortDescription": {"text": "Unused endpoint: GET /trading/order/{order_id}"}, "fullDescription": {"text": "`backend/api/routes/trading.py` declares `GET /trading/order/{order_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-f97ed0cffd0376aa", "name": "Unused endpoint: GET /logs/status", "shortDescription": {"text": "Unused endpoint: GET /logs/status"}, "fullDescription": {"text": "`backend/api/routes/logs.py` declares `GET /logs/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb5bad5a1b88e6c0", "name": "Unused endpoint: POST /mfa/setup", "shortDescription": {"text": "Unused endpoint: POST /mfa/setup"}, "fullDescription": {"text": "`backend/api/routes/auth.py` declares `POST /mfa/setup` 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-55cf379a423350f2", "name": "Unused endpoint: GET /risk/events", "shortDescription": {"text": "Unused endpoint: GET /risk/events"}, "fullDescription": {"text": "`backend/api/routes/risk.py` declares `GET /risk/events` 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-f8d16aa070d53758", "name": "Unused endpoint: GET /risk/audit", "shortDescription": {"text": "Unused endpoint: GET /risk/audit"}, "fullDescription": {"text": "`backend/api/routes/risk.py` declares `GET /risk/audit` 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-0dfbfba21dcd2961", "name": "Unused endpoint: POST /risk/force-close", "shortDescription": {"text": "Unused endpoint: POST /risk/force-close"}, "fullDescription": {"text": "`backend/api/routes/risk.py` declares `POST /risk/force-close` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`backend/legacy_scalping/monitoring/dashboard.py` declares `ANY /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1a61ead29e17012", "name": "Unused endpoint: ANY /api/status", "shortDescription": {"text": "Unused endpoint: ANY /api/status"}, "fullDescription": {"text": "`backend/legacy_scalping/monitoring/dashboard.py` declares `ANY /api/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-669aad044ad1df79", "name": "Unused endpoint: ANY /api/trades", "shortDescription": {"text": "Unused endpoint: ANY /api/trades"}, "fullDescription": {"text": "`backend/legacy_scalping/monitoring/dashboard.py` declares `ANY /api/trades` 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-6f3176244cc0936c", "name": "Unused endpoint: ANY /api/logs", "shortDescription": {"text": "Unused endpoint: ANY /api/logs"}, "fullDescription": {"text": "`backend/legacy_scalping/monitoring/dashboard.py` declares `ANY /api/logs` 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-5703293f8d718972", "name": "Unused endpoint: GET /api/accounts/balance", "shortDescription": {"text": "Unused endpoint: GET /api/accounts/balance"}, "fullDescription": {"text": "`frontend/lib/api.ts` declares `GET /api/accounts/balance` 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-cd63a8367e2be09d", "name": "Unused endpoint: POST /api/trading/order", "shortDescription": {"text": "Unused endpoint: POST /api/trading/order"}, "fullDescription": {"text": "`frontend/lib/api.ts` declares `POST /api/trading/order` 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-6c0c14bf43e5f297", "name": "Unused endpoint: GET /api/positions", "shortDescription": {"text": "Unused endpoint: GET /api/positions"}, "fullDescription": {"text": "`frontend/lib/api.ts` declares `GET /api/positions` 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-8408009042001b41", "name": "Unused endpoint: GET /api/market/universe", "shortDescription": {"text": "Unused endpoint: GET /api/market/universe"}, "fullDescription": {"text": "`frontend/lib/api.ts` declares `GET /api/market/universe` 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/23818"}, "properties": {"repository": "82beye/BarroAiTrade", "repoUrl": "https://github.com/82beye/BarroAiTrade", "branch": "main"}, "results": [{"ruleId": "scanner-4e01cf0c811f66b5", "level": "note", "message": {"text": "Possibly dead Python function: websocket_endpoint"}, "properties": {"repobilityId": "6792c61971206117", "scanner": "scanner-primary", "fingerprint": "4e01cf0c811f66b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/websocket.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-978e94559bd86f1d", "level": "note", "message": {"text": "Possibly dead Python function: provider"}, "properties": {"repobilityId": "c5c39c1f2d952111", "scanner": "scanner-primary", "fingerprint": "978e94559bd86f1d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/_provider.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33c265ed3cd0f4a5", "level": "note", "message": {"text": "Possibly dead Python function: simulate_scalping_time"}, "properties": {"repobilityId": "1edbf45688afb65c", "scanner": "scanner-primary", "fingerprint": "33c265ed3cd0f4a5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/scalping_simulation.py:169"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9cc0afbf99412c1d", "level": "note", "message": {"text": "Possibly dead Python function: force_liquidate_all"}, "properties": {"repobilityId": "4f241ab3b8b691e3", "scanner": "scanner-primary", "fingerprint": "9cc0afbf99412c1d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/strategy/exit_signal.py:499"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d81323bf6698a910", "level": "note", "message": {"text": "Possibly dead Python function: reset_daily"}, "properties": {"repobilityId": "f7e09537387dd7c7", "scanner": "scanner-primary", "fingerprint": "d81323bf6698a910", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/strategy/intraday_filter.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-11b1339d734a77c6", "level": "note", "message": {"text": "Possibly dead Python function: format_text"}, "properties": {"repobilityId": "9c7ef936813f694d", "scanner": "scanner-primary", "fingerprint": "11b1339d734a77c6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/monitoring/scalping_report.py:682"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4602b8a815e1abf1", "level": "note", "message": {"text": "Possibly dead Python function: generate_weekly_trend"}, "properties": {"repobilityId": "743d38f679fd8a4e", "scanner": "scanner-primary", "fingerprint": "4602b8a815e1abf1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/monitoring/scalping_report.py:908"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-12be8ba8a7c64e41", "level": "note", "message": {"text": "Possibly dead Python function: format_text_report"}, "properties": {"repobilityId": "6bfce78637dceeac", "scanner": "scanner-primary", "fingerprint": "12be8ba8a7c64e41", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/monitoring/daily_report.py:97"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b73b19f643de0fab", "level": "note", "message": {"text": "Possibly dead Python function: execute_buy"}, "properties": {"repobilityId": "6bd0c0adbfd547e2", "scanner": "scanner-primary", "fingerprint": "b73b19f643de0fab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/execution/order_manager.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a87fb50485a26bd4", "level": "note", "message": {"text": "Possibly dead Python function: execute_sell"}, "properties": {"repobilityId": "a9005c4a66f781c5", "scanner": "scanner-primary", "fingerprint": "a87fb50485a26bd4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/execution/order_manager.py:129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e371911b803f87f9", "level": "note", "message": {"text": "Possibly dead Python function: force_liquidate_all"}, "properties": {"repobilityId": "4f241ab3b8b691e3", "scanner": "scanner-primary", "fingerprint": "e371911b803f87f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/execution/order_manager.py:200"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bde95507263be8d8", "level": "note", "message": {"text": "Possibly dead Python function: buy_market_order"}, "properties": {"repobilityId": "bc6defd7b922148d", "scanner": "scanner-primary", "fingerprint": "bde95507263be8d8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/execution/kiwoom_api.py:912"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25823f506eb4660b", "level": "note", "message": {"text": "Possibly dead Python function: sort_key"}, "properties": {"repobilityId": "ac2a4181eae38738", "scanner": "scanner-primary", "fingerprint": "25823f506eb4660b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scanner/leading_stocks.py:370"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c9cc7e2e368d6dc6", "level": "note", "message": {"text": "Possibly dead Python function: load_watchlist"}, "properties": {"repobilityId": "8d66835c3b89efb2", "scanner": "scanner-primary", "fingerprint": "c9cc7e2e368d6dc6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scanner/daily_screener.py:273"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a21e9978d661a730", "level": "note", "message": {"text": "Possibly dead Python function: is_fresh"}, "properties": {"repobilityId": "fbd62efd4037feb6", "scanner": "scanner-primary", "fingerprint": "a21e9978d661a730", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scanner/ohlcv_cache.py:330"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a127faefd7e3746f", "level": "note", "message": {"text": "Possibly dead Python function: find_recent_by_source"}, "properties": {"repobilityId": "84dc8bf20589e3e8", "scanner": "scanner-primary", "fingerprint": "a127faefd7e3746f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/db/repositories/news_repo.py:101"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d13515ad41a88699", "level": "note", "message": {"text": "Possibly dead Python function: build_performance_summary"}, "properties": {"repobilityId": "274ab4a7466fb3d9", "scanner": "scanner-primary", "fingerprint": "d13515ad41a88699", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/core/monitoring/report_service.py:83"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-87edf944f8f8460c", "level": "note", "message": {"text": "File has no detected symbols: backend/db/_legacy_sqlite.py"}, "properties": {"repobilityId": "f431b7b7d9c3a91d", "scanner": "scanner-primary", "fingerprint": "87edf944f8f8460c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code-candidate"]}}, {"ruleId": "scanner-3fc9b0aac5e5e767", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/monitor/page.tsx:366"}, "properties": {"repobilityId": "115153f0c76bf014", "scanner": "scanner-primary", "fingerprint": "3fc9b0aac5e5e767", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-751d057aabc44068", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/lib/api.ts:53"}, "properties": {"repobilityId": "f17598789c8b8387", "scanner": "scanner-primary", "fingerprint": "751d057aabc44068", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f90fea260f75bfb3", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "f90fea260f75bfb3", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/ai-trade-watch.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b82badf057de446", "level": "warning", "message": {"text": "Privileged port 35 in use"}, "properties": {"repobilityId": "e997ec9811d79c6d", "scanner": "scanner-primary", "fingerprint": "0b82badf057de446", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/ai-trade-watch.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0acbb4a8c0a3846", "level": "warning", "message": {"text": "Privileged port 14 in use"}, "properties": {"repobilityId": "2dbd4b719a1412ff", "scanner": "scanner-primary", "fingerprint": "d0acbb4a8c0a3846", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/setup_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d17e4b5afb1b810", "level": "warning", "message": {"text": "Privileged port 50 in use"}, "properties": {"repobilityId": "da61f654c07ea7a9", "scanner": "scanner-primary", "fingerprint": "5d17e4b5afb1b810", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/setup_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db69db7af8c2c05d", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "db69db7af8c2c05d", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/setup_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7474fe50d88a0246", "level": "warning", "message": {"text": "Privileged port 16 in use"}, "properties": {"repobilityId": "d31009168c502ace", "scanner": "scanner-primary", "fingerprint": "7474fe50d88a0246", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/setup_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42324fa42f6ebf5d", "level": "warning", "message": {"text": "Privileged port 21 in use"}, "properties": {"repobilityId": "d920b7cd1b1a16dc", "scanner": "scanner-primary", "fingerprint": "42324fa42f6ebf5d", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/scripts/install_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b367301ae0efb8c9", "level": "warning", "message": {"text": "Privileged port 11 in use"}, "properties": {"repobilityId": "5b3038c67fabb4c8", "scanner": "scanner-primary", "fingerprint": "b367301ae0efb8c9", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/config/settings.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d91aeed882bac65", "level": "warning", "message": {"text": "Privileged port 12 in use"}, "properties": {"repobilityId": "65e7eefa33f2def4", "scanner": "scanner-primary", "fingerprint": "0d91aeed882bac65", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/config/settings.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-36d3be8ef63e1ce5", "level": "warning", "message": {"text": "Privileged port 40 in use"}, "properties": {"repobilityId": "28c59d470d4929c6", "scanner": "scanner-primary", "fingerprint": "36d3be8ef63e1ce5", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/eod_archive_email.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-068adcc485e7337f", "level": "warning", "message": {"text": "Privileged port 20 in use"}, "properties": {"repobilityId": "a59f3e53d617e0f8", "scanner": "scanner-primary", "fingerprint": "068adcc485e7337f", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/start-dashboard.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a213345d777b40c2", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in Makefile:144"}, "properties": {"repobilityId": "b524537f2e0a4d0b", "scanner": "scanner-primary", "fingerprint": "a213345d777b40c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Makefile"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-c7fb097ea9c408d7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ff647713c48a848", "scanner": "scanner-primary", "fingerprint": "c7fb097ea9c408d7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/regression.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fd237239dc5af866", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ffec41cc893bc663", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0309821c66cc5c7", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ffec41cc893bc663", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-9cceb8bdc6d6f7ab", "level": "note", "message": {"text": "Very large file: backend/tests/test_supertrend_auto_trader.py (1056 lines)"}, "properties": {"repobilityId": "ac628565495d99d9", "scanner": "scanner-primary", "fingerprint": "9cceb8bdc6d6f7ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dec2fa60b24c95f7", "level": "note", "message": {"text": "Very large file: backend/legacy_scalping/main.py (2419 lines)"}, "properties": {"repobilityId": "8340a016d9a502b1", "scanner": "scanner-primary", "fingerprint": "dec2fa60b24c95f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2888185f5ff89ee3", "level": "note", "message": {"text": "Very large file: backend/legacy_scalping/execution/kiwoom_api.py (1569 lines)"}, "properties": {"repobilityId": "892e7e51bc4c19fb", "scanner": "scanner-primary", "fingerprint": "2888185f5ff89ee3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2b25dbf3160345b3", "level": "note", "message": {"text": "Very large file: backend/core/supertrend_auto_trader.py (1064 lines)"}, "properties": {"repobilityId": "fc4d016322df82ef", "scanner": "scanner-primary", "fingerprint": "2b25dbf3160345b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-621d179e9a19906b", "level": "note", "message": {"text": "Very large file: scripts/intraday_buy_daemon.py (1619 lines)"}, "properties": {"repobilityId": "e587d1ed5e82655a", "scanner": "scanner-primary", "fingerprint": "621d179e9a19906b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "321564bd27ccc3af", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "df3cbbe9c517a27a", "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": "7b2cdf4644080d92", "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": "05f1332a4155e229", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "763623c8e7243b0e", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-a5330e2722751121", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: backend/legacy_scalping/SKILL.md"}, "properties": {"repobilityId": "39e5b48508b5712f", "scanner": "scanner-primary", "fingerprint": "a5330e2722751121", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/legacy_scalping/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31afc3551708bc02", "level": "note", "message": {"text": "Legacy-named symbol `test_v1` in backend/tests/conftest.py:64"}, "properties": {"repobilityId": "c1956125649f7395", "scanner": "scanner-primary", "fingerprint": "31afc3551708bc02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-21c43419c8ffb978", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/test_ob_scalp.py:92"}, "properties": {"repobilityId": "f1217e0854f5250b", "scanner": "scanner-primary", "fingerprint": "21c43419c8ffb978", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-81c49ba6e0015afe", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_orchestration.py:56"}, "properties": {"repobilityId": "fd00fd4f6e7d7ed1", "scanner": "scanner-primary", "fingerprint": "81c49ba6e0015afe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9f0de7f74fb5c6a", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/test_supertrend_order_wiring.py:83"}, "properties": {"repobilityId": "7f35f0a64a0630a5", "scanner": "scanner-primary", "fingerprint": "b9f0de7f74fb5c6a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-80c6252dbf07e6fa", "level": "note", "message": {"text": "Legacy-named symbol `auth_v2` in backend/tests/api/test_auth_v2.py:1"}, "properties": {"repobilityId": "9803f7e52fd33d3d", "scanner": "scanner-primary", "fingerprint": "80c6252dbf07e6fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5f47458a5c03816a", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/strategy/test_short_term_high_exit.py:127"}, "properties": {"repobilityId": "358e5e98376f43ae", "scanner": "scanner-primary", "fingerprint": "5f47458a5c03816a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b581fa9ff77f337d", "level": "note", "message": {"text": "Legacy-named symbol `test_c8_from_legacy` in backend/tests/strategy/test_strategy_models.py:40"}, "properties": {"repobilityId": "11e1ec57ef3117bb", "scanner": "scanner-primary", "fingerprint": "b581fa9ff77f337d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-77d0d0e1803fcfdc", "level": "note", "message": {"text": "Legacy-named symbol `scalping_consensus_v1` in backend/tests/strategy/test_scalping_consensus.py:57"}, "properties": {"repobilityId": "9a6d423e07d15776", "scanner": "scanner-primary", "fingerprint": "77d0d0e1803fcfdc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d09895d2af8414ba", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_f_zone.py:4"}, "properties": {"repobilityId": "cd8306568566d4f9", "scanner": "scanner-primary", "fingerprint": "d09895d2af8414ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed2b3da48a6b4e86", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_base.py:21"}, "properties": {"repobilityId": "d10d0c56f5218cf4", "scanner": "scanner-primary", "fingerprint": "ed2b3da48a6b4e86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d9b414157eafc08", "level": "note", "message": {"text": "Legacy-named symbol `swing_38_v1` in backend/tests/strategy/test_swing_38.py:84"}, "properties": {"repobilityId": "02dc1d8785513935", "scanner": "scanner-primary", "fingerprint": "7d9b414157eafc08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-609aa97a2dc89199", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_blue_line.py:52"}, "properties": {"repobilityId": "131ba7188bd8ca0d", "scanner": "scanner-primary", "fingerprint": "609aa97a2dc89199", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-61fcefd3f11c1cfb", "level": "note", "message": {"text": "Legacy-named symbol `gold_zone_v1` in backend/tests/strategy/test_gold_zone.py:64"}, "properties": {"repobilityId": "14d2928af87dc99c", "scanner": "scanner-primary", "fingerprint": "61fcefd3f11c1cfb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9276d989403e93fd", "level": "note", "message": {"text": "Legacy-named symbol `sf_zone_v1` in backend/tests/strategy/test_sf_zone.py:25"}, "properties": {"repobilityId": "96c1c99755db3a55", "scanner": "scanner-primary", "fingerprint": "9276d989403e93fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-01d118f3faddb9d5", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/tests/strategy/test_supertrend_whipsaw.py:75"}, "properties": {"repobilityId": "2d6cbdea40ff2277", "scanner": "scanner-primary", "fingerprint": "01d118f3faddb9d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1af0b027e8c61a57", "level": "note", "message": {"text": "Legacy-named symbol `sor_v2` in backend/tests/execution/test_sor_v2_and_extensions.py:9"}, "properties": {"repobilityId": "caa9d557ec0efe15", "scanner": "scanner-primary", "fingerprint": "1af0b027e8c61a57", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-544f60fa3eb4d04a", "level": "note", "message": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_three_tier.py:45"}, "properties": {"repobilityId": "7590c06e243c1aa9", "scanner": "scanner-primary", "fingerprint": "544f60fa3eb4d04a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c25adce6cb160f35", "level": "note", "message": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_tfidf_lr.py:41"}, "properties": {"repobilityId": "6caa4a75cf6cd6cb", "scanner": "scanner-primary", "fingerprint": "c25adce6cb160f35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7ed4de42a449faa6", "level": "note", "message": {"text": "Legacy-named symbol `claude_haiku_v1` in backend/tests/themes/test_claude_haiku.py:28"}, "properties": {"repobilityId": "878d8280ac396a51", "scanner": "scanner-primary", "fingerprint": "7ed4de42a449faa6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ff292f298da20a1e", "level": "note", "message": {"text": "Legacy-named symbol `embedding_cosine_v1` in backend/tests/themes/test_embedding_cosine.py:67"}, "properties": {"repobilityId": "d4aaa2917f602005", "scanner": "scanner-primary", "fingerprint": "ff292f298da20a1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9c96c671e1e04639", "level": "note", "message": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/tests/themes/test_classification_result.py:13"}, "properties": {"repobilityId": "ff9966f2023920ca", "scanner": "scanner-primary", "fingerprint": "9c96c671e1e04639", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-83e4eb21a459ef6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/journal/test_active_positions.py:125"}, "properties": {"repobilityId": "327a08f8e14cc9c9", "scanner": "scanner-primary", "fingerprint": "83e4eb21a459ef6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38e7d29fe6f088d1", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_scanner.py:73"}, "properties": {"repobilityId": "b008684833a26a8a", "scanner": "scanner-primary", "fingerprint": "38e7d29fe6f088d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-968c103e9e43f734", "level": "note", "message": {"text": "Legacy-named symbol `test_insufficient_data_returns_copy` in backend/tests/scanner/test_indicators.py:110"}, "properties": {"repobilityId": "2c483f1302749fd5", "scanner": "scanner-primary", "fingerprint": "968c103e9e43f734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c3e8220950c70446", "level": "note", "message": {"text": "Legacy-named symbol `gold_zone_v1` in backend/tests/scanner/test_signal_scanner_phase_c.py:122"}, "properties": {"repobilityId": "7bd8fef443f7937a", "scanner": "scanner-primary", "fingerprint": "c3e8220950c70446", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-56f2d0ecbee42247", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/tests/scanner/test_supertrend_exit_watcher.py:44"}, "properties": {"repobilityId": "31c3ec79d9f94550", "scanner": "scanner-primary", "fingerprint": "56f2d0ecbee42247", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c6c4f3124cd52798", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/gateway/test_kiwoom_native_rank.py:140"}, "properties": {"repobilityId": "474552779d1d53d3", "scanner": "scanner-primary", "fingerprint": "c6c4f3124cd52798", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c4ffd70bfdd5875", "level": "note", "message": {"text": "Legacy-named symbol `test_migrate_dry_run_does_not_copy` in backend/tests/db/test_migrate_script.py:27"}, "properties": {"repobilityId": "ad18773586d78d4b", "scanner": "scanner-primary", "fingerprint": "2c4ffd70bfdd5875", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fa55b2e3b595c405", "level": "note", "message": {"text": "Legacy-named symbol `swing_38_v1` in backend/tests/risk/test_holding_evaluator.py:245"}, "properties": {"repobilityId": "86da4daa8c9b9e0c", "scanner": "scanner-primary", "fingerprint": "fa55b2e3b595c405", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-816ffa2a2a0cd254", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/tests/news/test_news_id_round_trip.py:1"}, "properties": {"repobilityId": "89e66620347a28b3", "scanner": "scanner-primary", "fingerprint": "816ffa2a2a0cd254", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0693da24aa836f91", "level": "note", "message": {"text": "Legacy-named symbol `test_regime_weights_returns_copy` in backend/tests/backtester/test_market_regime.py:89"}, "properties": {"repobilityId": "7cbe2cf7a30806d8", "scanner": "scanner-primary", "fingerprint": "0693da24aa836f91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-23b9aa88a45271f1", "level": "note", "message": {"text": "Legacy-named symbol `sim_legacy` in backend/tests/backtester/test_intraday_realistic.py:40"}, "properties": {"repobilityId": "b736bf0fb490c721", "scanner": "scanner-primary", "fingerprint": "23b9aa88a45271f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-56660c2d6088a153", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/api/routes/signals.py:71"}, "properties": {"repobilityId": "745cfff7a14503c4", "scanner": "scanner-primary", "fingerprint": "56660c2d6088a153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ef3f74d59332b83", "level": "note", "message": {"text": "Legacy-named symbol `auth_v2` in backend/api/routes/auth_v2.py:92"}, "properties": {"repobilityId": "bcb4a48a9ca61876", "scanner": "scanner-primary", "fingerprint": "0ef3f74d59332b83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8df601acb6c6b13e", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/api/routes/risk.py:160"}, "properties": {"repobilityId": "f2bb490da1072d7f", "scanner": "scanner-primary", "fingerprint": "8df601acb6c6b13e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f532c9a7b0d8d177", "level": "none", "message": {"text": "Commented-code block (13 lines) in backend/legacy_scalping/strategy/scalping_team/coordinator.py:50"}, "properties": {"repobilityId": "255afcd456852a27", "scanner": "scanner-primary", "fingerprint": "f532c9a7b0d8d177", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd309872bf168a79", "level": "note", "message": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/models/theme.py:20"}, "properties": {"repobilityId": "43eed1def77decae", "scanner": "scanner-primary", "fingerprint": "fd309872bf168a79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-72c784684a42752f", "level": "note", "message": {"text": "Legacy-named symbol `from_legacy` in backend/models/strategy.py:47"}, "properties": {"repobilityId": "3920806798807f6e", "scanner": "scanner-primary", "fingerprint": "72c784684a42752f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cb729e5103332251", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/models/strategy.py:144"}, "properties": {"repobilityId": "d58a09dc43162427", "scanner": "scanner-primary", "fingerprint": "cb729e5103332251", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cef7efb560717d3", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/models/news.py:36"}, "properties": {"repobilityId": "9ba37b80c134bbd8", "scanner": "scanner-primary", "fingerprint": "7cef7efb560717d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b21b1c5a1d51463f", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/db/repositories/news_repo.py:30"}, "properties": {"repobilityId": "15bd36071b699f6a", "scanner": "scanner-primary", "fingerprint": "b21b1c5a1d51463f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4eb4aba24dc23279", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/orchestrator.py:526"}, "properties": {"repobilityId": "027a091b1da05b9f", "scanner": "scanner-primary", "fingerprint": "4eb4aba24dc23279", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d97570804302d76c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/core/orchestrator.py:43"}, "properties": {"repobilityId": "a5b2f08127357543", "scanner": "scanner-primary", "fingerprint": "d97570804302d76c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f09a91568eed27ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/core/supertrend_auto_trader.py:77"}, "properties": {"repobilityId": "f89cb5128951f3cf", "scanner": "scanner-primary", "fingerprint": "f09a91568eed27ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79961558c5dff10e", "level": "note", "message": {"text": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/f_zone.py:214"}, "properties": {"repobilityId": "22de22209a2f4c65", "scanner": "scanner-primary", "fingerprint": "79961558c5dff10e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b74da56c4acb576", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/core/strategy/f_zone.py:58"}, "properties": {"repobilityId": "f92b97b8ac176d9c", "scanner": "scanner-primary", "fingerprint": "1b74da56c4acb576", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e3154f15c2308b0", "level": "note", "message": {"text": "Legacy-named symbol `swing_38_v1` in backend/core/strategy/swing_38.py:102"}, "properties": {"repobilityId": "6e2c4cd10d1a670e", "scanner": "scanner-primary", "fingerprint": "6e3154f15c2308b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-233a156967758896", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/core/strategy/swing_38.py:50"}, "properties": {"repobilityId": "fa8065302b3b003a", "scanner": "scanner-primary", "fingerprint": "233a156967758896", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae18c6b064bfea1c", "level": "note", "message": {"text": "Legacy-named symbol `scalping_consensus_v1` in backend/core/strategy/scalping_consensus.py:50"}, "properties": {"repobilityId": "f54d2a964fc201f0", "scanner": "scanner-primary", "fingerprint": "ae18c6b064bfea1c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d674dbfb6a9f72f", "level": "note", "message": {"text": "Legacy-named symbol `stock_v1` in backend/core/strategy/stock_strategy.py:77"}, "properties": {"repobilityId": "e8a4c5dafa5fffe0", "scanner": "scanner-primary", "fingerprint": "7d674dbfb6a9f72f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-253a90fdf8a01108", "level": "note", "message": {"text": "Legacy-named symbol `f_zone_v1` in backend/core/strategy/backtester.py:63"}, "properties": {"repobilityId": "3bdf766189940a8f", "scanner": "scanner-primary", "fingerprint": "253a90fdf8a01108", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-99f48aed0140e06a", "level": "note", "message": {"text": "Legacy-named symbol `sf_zone_v1` in backend/core/strategy/sf_zone.py:36"}, "properties": {"repobilityId": "8cb04c27da2a41b3", "scanner": "scanner-primary", "fingerprint": "99f48aed0140e06a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0c1902e79f38e3a6", "level": "note", "message": {"text": "Legacy-named symbol `ob_scalp_v1` in backend/core/strategy/ob_scalp.py:150"}, "properties": {"repobilityId": "6bbda7aa1c9f68c2", "scanner": "scanner-primary", "fingerprint": "0c1902e79f38e3a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f12f7f4eb1a20eae", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/strategy/supertrend.py:283"}, "properties": {"repobilityId": "42a93e942009aec5", "scanner": "scanner-primary", "fingerprint": "f12f7f4eb1a20eae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-09c5c078424fdff9", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/core/strategy/supertrend.py:244"}, "properties": {"repobilityId": "c65491343930c27e", "scanner": "scanner-primary", "fingerprint": "09c5c078424fdff9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87d5d4577567b0e2", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/gold_zone.py:51"}, "properties": {"repobilityId": "92d8e917173bab0b", "scanner": "scanner-primary", "fingerprint": "87d5d4577567b0e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ecb544d0d9a5b543", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/core/strategy/gold_zone.py:50"}, "properties": {"repobilityId": "acbedebf64d28079", "scanner": "scanner-primary", "fingerprint": "ecb544d0d9a5b543", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d230e9c78d7de7e", "level": "note", "message": {"text": "Legacy-named symbol `blue_line_v1` in backend/core/strategy/blue_line.py:49"}, "properties": {"repobilityId": "eefc3c313c13a5f2", "scanner": "scanner-primary", "fingerprint": "3d230e9c78d7de7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fada7a8c7eed0036", "level": "note", "message": {"text": "Legacy-named symbol `crypto_breakout_v1` in backend/core/strategy/crypto_breakout.py:41"}, "properties": {"repobilityId": "39eae12bb8e8999f", "scanner": "scanner-primary", "fingerprint": "fada7a8c7eed0036", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e78fd3e8d90c262c", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in backend/core/strategy/base.py:52"}, "properties": {"repobilityId": "b18a6446369a55bd", "scanner": "scanner-primary", "fingerprint": "e78fd3e8d90c262c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cffeddd245af840e", "level": "note", "message": {"text": "Stub function `inc` (body is just `pass`/`return`) \u2014 backend/core/monitoring/metrics.py:45"}, "properties": {"repobilityId": "bc3738816ff248c7", "scanner": "scanner-primary", "fingerprint": "cffeddd245af840e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-909af6e08c68d2c0", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/core/execution/position_manager.py:52"}, "properties": {"repobilityId": "cc4709c85c73a08f", "scanner": "scanner-primary", "fingerprint": "909af6e08c68d2c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1999bc507deeefc8", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/core/execution/exit_engine.py:164"}, "properties": {"repobilityId": "585f5220f3020da5", "scanner": "scanner-primary", "fingerprint": "1999bc507deeefc8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f18dbde4740e94ad", "level": "note", "message": {"text": "Legacy-named symbol `embedder_v1` in backend/core/embeddings/worker.py:4"}, "properties": {"repobilityId": "a5da5b368c3f03c6", "scanner": "scanner-primary", "fingerprint": "f18dbde4740e94ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ac64d16967bf722d", "level": "note", "message": {"text": "Legacy-named symbol `tfidf_lr_v1` in backend/core/themes/classifier.py:65"}, "properties": {"repobilityId": "cdf1428536472cf2", "scanner": "scanner-primary", "fingerprint": "ac64d16967bf722d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b6736c2f6acaec41", "level": "note", "message": {"text": "Legacy-named symbol `too_old` in backend/core/journal/active_positions.py:275"}, "properties": {"repobilityId": "c9d9566832c89bcc", "scanner": "scanner-primary", "fingerprint": "b6736c2f6acaec41", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e5bdf2c667582bd7", "level": "note", "message": {"text": "Legacy-named symbol `screener_v1` in backend/core/scanner/stock_screener.py:41"}, "properties": {"repobilityId": "88adca705fd89619", "scanner": "scanner-primary", "fingerprint": "e5bdf2c667582bd7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-504f29c1d09584a4", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in backend/core/scanner/supertrend_exit_watcher.py:31"}, "properties": {"repobilityId": "24217bfcf4a3e4d6", "scanner": "scanner-primary", "fingerprint": "504f29c1d09584a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-44360e8a36da3bb9", "level": "note", "message": {"text": "Legacy-named symbol `gold_zone_v1` in backend/core/risk/holding_evaluator.py:152"}, "properties": {"repobilityId": "61e0c38bc654f671", "scanner": "scanner-primary", "fingerprint": "44360e8a36da3bb9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-61c0f9bc4d16f6c6", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/core/risk/holding_evaluator.py:61"}, "properties": {"repobilityId": "112dcb6905ee0252", "scanner": "scanner-primary", "fingerprint": "61c0f9bc4d16f6c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9239116a1284990", "level": "note", "message": {"text": "Legacy-named symbol `embedder_v1` in backend/core/news/publisher.py:9"}, "properties": {"repobilityId": "8ed8c29403525610", "scanner": "scanner-primary", "fingerprint": "b9239116a1284990", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b7595ffe7886e010", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/core/news/collector.py:115"}, "properties": {"repobilityId": "4f72d2a425c2f79f", "scanner": "scanner-primary", "fingerprint": "b7595ffe7886e010", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-705708052e83952f", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/core/telemetry/tracer.py:89"}, "properties": {"repobilityId": "9adb913e0e0e1660", "scanner": "scanner-primary", "fingerprint": "705708052e83952f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-feda1679d7fccfcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/core/backtester/market_regime.py:94"}, "properties": {"repobilityId": "ac79bcb84df08f7f", "scanner": "scanner-primary", "fingerprint": "feda1679d7fccfcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e4822dacfd1b283", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/core/backtester/intraday_simulator.py:537"}, "properties": {"repobilityId": "06629b26e832928f", "scanner": "scanner-primary", "fingerprint": "0e4822dacfd1b283", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0b850fb542dba08f", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/core/backtester/intraday_simulator.py:231"}, "properties": {"repobilityId": "58120cc399d96466", "scanner": "scanner-primary", "fingerprint": "0b850fb542dba08f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-848b26641bf39842", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in scripts/_strategy_minute_ledger_sim.py:129"}, "properties": {"repobilityId": "b68b459ada3e6785", "scanner": "scanner-primary", "fingerprint": "848b26641bf39842", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-75497afa4964ed0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/update_ohlcv_cache.py:111"}, "properties": {"repobilityId": "c68f9eab7530f736", "scanner": "scanner-primary", "fingerprint": "75497afa4964ed0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16b47c7747283f24", "level": "note", "message": {"text": "Legacy-named symbol `_analyze_v2` in scripts/_ob_scalp_shadow.py:290"}, "properties": {"repobilityId": "7615335974036b4f", "scanner": "scanner-primary", "fingerprint": "16b47c7747283f24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-867e1a66b6c0a868", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/simulate_leaders.py:357"}, "properties": {"repobilityId": "33e4d1ba9a2f043d", "scanner": "scanner-primary", "fingerprint": "867e1a66b6c0a868", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94340db529b58722", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/intraday_buy_daemon.py:66"}, "properties": {"repobilityId": "8bf1b8985f576eaa", "scanner": "scanner-primary", "fingerprint": "94340db529b58722", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3c293df92f750c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/evaluate_holdings.py:83"}, "properties": {"repobilityId": "05e9b9e824bce31b", "scanner": "scanner-primary", "fingerprint": "f3c293df92f750c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf17cff80d0222f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx:42"}, "properties": {"repobilityId": "16db951047e30d04", "scanner": "scanner-primary", "fingerprint": "bf17cff80d0222f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c28d02edd4f918d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/audit/page.tsx:41"}, "properties": {"repobilityId": "171c3cd8ec720b64", "scanner": "scanner-primary", "fingerprint": "2c28d02edd4f918d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0226d83c8480bb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/admin/users/page.tsx:22"}, "properties": {"repobilityId": "b39ec1d1b7a79e14", "scanner": "scanner-primary", "fingerprint": "f0226d83c8480bb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c84944167c06f4e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/settings/page.tsx:111"}, "properties": {"repobilityId": "1fa462eabb12e1f9", "scanner": "scanner-primary", "fingerprint": "c84944167c06f4e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3b2f2feb16ff2aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/watchlist/page.tsx:62"}, "properties": {"repobilityId": "dcda08a504b8172e", "scanner": "scanner-primary", "fingerprint": "d3b2f2feb16ff2aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25980749296428e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/balance/page.tsx:76"}, "properties": {"repobilityId": "6963947f404786b9", "scanner": "scanner-primary", "fingerprint": "25980749296428e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4cac2a1bd86525ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/markets/market-table.tsx:42"}, "properties": {"repobilityId": "2b87e24a674d379c", "scanner": "scanner-primary", "fingerprint": "4cac2a1bd86525ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ffc458d7001ae39c", "level": "note", "message": {"text": "Legacy-named symbol `supertrend_v1` in analysis/imports/2026-06-03/rsi_tf_sweep.py:359"}, "properties": {"repobilityId": "eb76d3f9f56c70c7", "scanner": "scanner-primary", "fingerprint": "ffc458d7001ae39c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-106b24f0f865e534", "level": "note", "message": {"text": "90 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "342488c0b243e851", "scanner": "scanner-primary", "fingerprint": "106b24f0f865e534", "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": "44ae790934b2b5f9", "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": "32187d507fbced84", "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": "84a97ecd6b925e62", "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": "75c4d9dbe31ae42a", "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": "adad940a53242700", "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": "bb6fb90bd9bbaa2d", "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": "f45a8b8c2b0a98f6", "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": "611ec295cba039db", "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": "c545e8b3e3dcf12f", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "eabd74ed21befd3c", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "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": "c35deea92b90da9d", "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": "0326339f1502577f", "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": "bc028175ed03a39c", "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": "daff526125cb76c8", "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": "f2f3b16b981333e9", "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": "b345b7d7639445b5", "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": "740f98933793b0d5", "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": "668fa9b3f7632b67", "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": "0ccf1f29924c1979", "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": "cd0c5b5f8c327a06", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0f12b55b9baa998c", "level": "error", "message": {"text": "FastAPI POST `toggle_strategy` without auth dependency \u2014 backend/api/routes/admin.py:95"}, "properties": {"repobilityId": "baf12c36ddc4dad4", "scanner": "scanner-primary", "fingerprint": "0f12b55b9baa998c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/admin.py"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-983d8ab194c0bfe2", "level": "error", "message": {"text": "FastAPI PUT `update_config` without auth dependency \u2014 backend/api/routes/config.py:58"}, "properties": {"repobilityId": "38b4e2759f2568c0", "scanner": "scanner-primary", "fingerprint": "983d8ab194c0bfe2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/config.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-9a07082d25ae1f10", "level": "error", "message": {"text": "FastAPI POST `add_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.py:48"}, "properties": {"repobilityId": "1d339f5d3f849981", "scanner": "scanner-primary", "fingerprint": "9a07082d25ae1f10", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/watchlist.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-95ce6e85aa2451ad", "level": "error", "message": {"text": "FastAPI DELETE `remove_watchlist` without auth dependency \u2014 backend/api/routes/watchlist.py:91"}, "properties": {"repobilityId": "7242ec40fe1ecd49", "scanner": "scanner-primary", "fingerprint": "95ce6e85aa2451ad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/watchlist.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-3bbc9841809010f3", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth_v2.py:140"}, "properties": {"repobilityId": "b2722b7ae2c2c447", "scanner": "scanner-primary", "fingerprint": "3bbc9841809010f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/auth_v2.py"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-65e7a783bf7c3d93", "level": "error", "message": {"text": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth_v2.py:155"}, "properties": {"repobilityId": "7b6809841ec1c922", "scanner": "scanner-primary", "fingerprint": "65e7a783bf7c3d93", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/auth_v2.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-3e1024527438e5d4", "level": "error", "message": {"text": "FastAPI POST `start_trading` without auth dependency \u2014 backend/api/routes/trading.py:33"}, "properties": {"repobilityId": "1605013fa1d74d31", "scanner": "scanner-primary", "fingerprint": "3e1024527438e5d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/trading.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-8c7ed4b9655e7c84", "level": "error", "message": {"text": "FastAPI POST `stop_trading` without auth dependency \u2014 backend/api/routes/trading.py:56"}, "properties": {"repobilityId": "600740f661621129", "scanner": "scanner-primary", "fingerprint": "8c7ed4b9655e7c84", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/trading.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-74931ab435635f3e", "level": "error", "message": {"text": "FastAPI POST `place_order` without auth dependency \u2014 backend/api/routes/trading.py:89"}, "properties": {"repobilityId": "0c0e5d629b4fe4df", "scanner": "scanner-primary", "fingerprint": "74931ab435635f3e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/trading.py"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-99200d5b1b5a6d99", "level": "error", "message": {"text": "FastAPI DELETE `cancel_order` without auth dependency \u2014 backend/api/routes/trading.py:170"}, "properties": {"repobilityId": "889a5dde3a5c9f3a", "scanner": "scanner-primary", "fingerprint": "99200d5b1b5a6d99", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/trading.py"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-fd5cc250cfe54f7e", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/api/routes/auth.py:106"}, "properties": {"repobilityId": "b37d952e7ec8a680", "scanner": "scanner-primary", "fingerprint": "fd5cc250cfe54f7e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/auth.py"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-bae0baf0bf1ba0ce", "level": "error", "message": {"text": "FastAPI POST `mfa_setup` without auth dependency \u2014 backend/api/routes/auth.py:122"}, "properties": {"repobilityId": "cdd6c5092c597fb1", "scanner": "scanner-primary", "fingerprint": "bae0baf0bf1ba0ce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/auth.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-14d818d4495bf268", "level": "error", "message": {"text": "FastAPI POST `mfa_verify` without auth dependency \u2014 backend/api/routes/auth.py:142"}, "properties": {"repobilityId": "f19abaad0193518e", "scanner": "scanner-primary", "fingerprint": "14d818d4495bf268", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/auth.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-9daf9b1d807f4ce9", "level": "error", "message": {"text": "FastAPI PUT `update_risk_limits` without auth dependency \u2014 backend/api/routes/risk.py:134"}, "properties": {"repobilityId": "d213d0fd7508cfd4", "scanner": "scanner-primary", "fingerprint": "9daf9b1d807f4ce9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/risk.py"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-a89eafe3ace35a3e", "level": "error", "message": {"text": "FastAPI POST `force_close_all` without auth dependency \u2014 backend/api/routes/risk.py:229"}, "properties": {"repobilityId": "787733e477cd55fc", "scanner": "scanner-primary", "fingerprint": "a89eafe3ace35a3e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routes/risk.py"}, "region": {"startLine": 229}}}]}, {"ruleId": "scanner-f05ff351d70b414c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/audit/recent?limit=${limit} (frontend/app/admin/audit/page.tsx:41)"}, "properties": {"repobilityId": "0bdccd70e2608126", "scanner": "scanner-primary", "fingerprint": "f05ff351d70b414c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f0d60bc36f10b39", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (frontend/app/admin/users/page.tsx:22)"}, "properties": {"repobilityId": "338e86b955334c23", "scanner": "scanner-primary", "fingerprint": "8f0d60bc36f10b39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a2d193a24b3bded", "level": "note", "message": {"text": "Unused endpoint: GET /reports/performance"}, "properties": {"repobilityId": "f25820cd79076f9d", "scanner": "scanner-primary", "fingerprint": "8a2d193a24b3bded", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "a362c0cbb582dd48", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-29b372ddbcf4cf9b", "level": "note", "message": {"text": "Unused endpoint: GET /audit/recent"}, "properties": {"repobilityId": "533bf8e55a7f1ee3", "scanner": "scanner-primary", "fingerprint": "29b372ddbcf4cf9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a6fe07fe2c73723", "level": "note", "message": {"text": "Unused endpoint: POST /strategies/{strategy_id}/toggle"}, "properties": {"repobilityId": "f0dd83013246ebd5", "scanner": "scanner-primary", "fingerprint": "5a6fe07fe2c73723", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-687209947ca7cd91", "level": "note", "message": {"text": "Unused endpoint: GET /market/ohlcv"}, "properties": {"repobilityId": "b25236edb790f600", "scanner": "scanner-primary", "fingerprint": "687209947ca7cd91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fda2cde5a68ac5d", "level": "note", "message": {"text": "Unused endpoint: GET /market/order-book/{symbol}"}, "properties": {"repobilityId": "7416b7e49a883e5e", "scanner": "scanner-primary", "fingerprint": "6fda2cde5a68ac5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05891c8ff4e7a11f", "level": "note", "message": {"text": "Unused endpoint: GET /signals/recent"}, "properties": {"repobilityId": "740974b94e5dfed2", "scanner": "scanner-primary", "fingerprint": "05891c8ff4e7a11f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb49d6d14c0044d5", "level": "note", "message": {"text": "Unused endpoint: GET /api/calendar/symbol/{symbol}"}, "properties": {"repobilityId": "11275f7ae7fb605d", "scanner": "scanner-primary", "fingerprint": "cb49d6d14c0044d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-304b6f2b403d93f7", "level": "note", "message": {"text": "Unused endpoint: POST /register"}, "properties": {"repobilityId": "d538e3d5e2105818", "scanner": "scanner-primary", "fingerprint": "304b6f2b403d93f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "00d846bd332dc75c", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "6c7995b0a5c5808d", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5b20c1b658dae2b", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/verify"}, "properties": {"repobilityId": "880807ecf2dc6f37", "scanner": "scanner-primary", "fingerprint": "d5b20c1b658dae2b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa5c12413ecd4e76", "level": "note", "message": {"text": "Unused endpoint: POST /trading/start"}, "properties": {"repobilityId": "7e8317e6b3bbbcbf", "scanner": "scanner-primary", "fingerprint": "aa5c12413ecd4e76", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36c2c8ea2e544a44", "level": "note", "message": {"text": "Unused endpoint: POST /trading/stop"}, "properties": {"repobilityId": "645af85b293bc816", "scanner": "scanner-primary", "fingerprint": "36c2c8ea2e544a44", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-237969fd797775a2", "level": "note", "message": {"text": "Unused endpoint: POST /trading/order"}, "properties": {"repobilityId": "f80b2c67379cdbf1", "scanner": "scanner-primary", "fingerprint": "237969fd797775a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eadd38eb394da71f", "level": "note", "message": {"text": "Unused endpoint: DELETE /trading/order/{order_id}"}, "properties": {"repobilityId": "dbfcffa27f7401eb", "scanner": "scanner-primary", "fingerprint": "eadd38eb394da71f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f87e6e150a43dad", "level": "note", "message": {"text": "Unused endpoint: GET /trading/order/{order_id}"}, "properties": {"repobilityId": "d6ce4a643f903729", "scanner": "scanner-primary", "fingerprint": "2f87e6e150a43dad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f97ed0cffd0376aa", "level": "note", "message": {"text": "Unused endpoint: GET /logs/status"}, "properties": {"repobilityId": "e9f0ef29d3ebb4c4", "scanner": "scanner-primary", "fingerprint": "f97ed0cffd0376aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb5bad5a1b88e6c0", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/setup"}, "properties": {"repobilityId": "6b9c95798f59cc6e", "scanner": "scanner-primary", "fingerprint": "bb5bad5a1b88e6c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55cf379a423350f2", "level": "note", "message": {"text": "Unused endpoint: GET /risk/events"}, "properties": {"repobilityId": "b469ece91325e49e", "scanner": "scanner-primary", "fingerprint": "55cf379a423350f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8d16aa070d53758", "level": "note", "message": {"text": "Unused endpoint: GET /risk/audit"}, "properties": {"repobilityId": "555f0fc86d397100", "scanner": "scanner-primary", "fingerprint": "f8d16aa070d53758", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0dfbfba21dcd2961", "level": "note", "message": {"text": "Unused endpoint: POST /risk/force-close"}, "properties": {"repobilityId": "c96474f87019ae43", "scanner": "scanner-primary", "fingerprint": "0dfbfba21dcd2961", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "18a167bd6089d4ce", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1a61ead29e17012", "level": "note", "message": {"text": "Unused endpoint: ANY /api/status"}, "properties": {"repobilityId": "689ebb6a2aa44993", "scanner": "scanner-primary", "fingerprint": "e1a61ead29e17012", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-669aad044ad1df79", "level": "note", "message": {"text": "Unused endpoint: ANY /api/trades"}, "properties": {"repobilityId": "bfaa243b3fc01c71", "scanner": "scanner-primary", "fingerprint": "669aad044ad1df79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f3176244cc0936c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/logs"}, "properties": {"repobilityId": "4270a870f53ada24", "scanner": "scanner-primary", "fingerprint": "6f3176244cc0936c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5703293f8d718972", "level": "note", "message": {"text": "Unused endpoint: GET /api/accounts/balance"}, "properties": {"repobilityId": "e272a6b5f44db5e2", "scanner": "scanner-primary", "fingerprint": "5703293f8d718972", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd63a8367e2be09d", "level": "note", "message": {"text": "Unused endpoint: POST /api/trading/order"}, "properties": {"repobilityId": "8f9328ac40d882a6", "scanner": "scanner-primary", "fingerprint": "cd63a8367e2be09d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c0c14bf43e5f297", "level": "note", "message": {"text": "Unused endpoint: GET /api/positions"}, "properties": {"repobilityId": "6a1ad8363a61b009", "scanner": "scanner-primary", "fingerprint": "6c0c14bf43e5f297", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8408009042001b41", "level": "note", "message": {"text": "Unused endpoint: GET /api/market/universe"}, "properties": {"repobilityId": "5ed39795dee637ce", "scanner": "scanner-primary", "fingerprint": "8408009042001b41", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}