{"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-662862496e2aa1bc", "name": "Possibly dead Python function: start_engine", "shortDescription": {"text": "Possibly dead Python function: start_engine"}, "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-46e0fe45cd7e7c3a", "name": "Possibly dead Python function: start_scheduler", "shortDescription": {"text": "Possibly dead Python function: start_scheduler"}, "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-80cba0789f3266db", "name": "Possibly dead Python function: run_catchup", "shortDescription": {"text": "Possibly dead Python function: run_catchup"}, "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-8fbde6c5b8ff19d1", "name": "Possibly dead Python function: format_expiry_date", "shortDescription": {"text": "Possibly dead Python function: format_expiry_date"}, "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-bc003b06e06138a3", "name": "Possibly dead Python function: format_symbol", "shortDescription": {"text": "Possibly dead Python function: format_symbol"}, "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-dc6521fbe5a57553", "name": "Possibly dead Python function: handle_strike_price", "shortDescription": {"text": "Possibly dead Python function: handle_strike_price"}, "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-dd7e29191c5b91e5", "name": "Possibly dead Python function: resubscribe_all", "shortDescription": {"text": "Possibly dead Python function: resubscribe_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-ad9b47da21ac9c9c", "name": "Possibly dead Python function: clear_market_data_cache", "shortDescription": {"text": "Possibly dead Python function: clear_market_data_cache"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b32ae9f6417a8233", "name": "Possibly dead Python function: format_expiry_date", "shortDescription": {"text": "Possibly dead Python function: format_expiry_date"}, "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-92a1e3233699081a", "name": "Possibly dead Python function: format_symbol", "shortDescription": {"text": "Possibly dead Python function: format_symbol"}, "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-ee018272262e7b45", "name": "Possibly dead Python function: handle_strike_price", "shortDescription": {"text": "Possibly dead Python function: handle_strike_price"}, "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-199d2db06504a300", "name": "Possibly dead Python function: extract_name", "shortDescription": {"text": "Possibly dead Python function: extract_name"}, "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-909b50752e718ea9", "name": "Possibly dead Python function: extract_instrument_type", "shortDescription": {"text": "Possibly dead Python function: extract_instrument_type"}, "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-0b4f4cd2f10eab75", "name": "Possibly dead Python function: place_bracket_order_api", "shortDescription": {"text": "Possibly dead Python function: place_bracket_order_api"}, "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-6a9ddcf2d2d66e19", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useLiveQuote.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useLiveQuote.ts:95"}, "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-078a3b590b0cb46b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/ExecuteBasketDialog.tsx:354", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/ExecuteBasketDialog.tsx:354"}, "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-1cf695cf31508fcd", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/PlaceOrderDialog.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/PlaceOrderDialog.tsx:285"}, "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-b1d9bf4d624b12a1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/panels/NodePalette.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/panels/NodePalette.tsx:76"}, "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-e5f29d0511f9715e", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/BaseNode.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/BaseNode.tsx:108"}, "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-5e919461ea709d4d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/TimeConditionNode.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/TimeConditionNode.tsx:60"}, "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-f79c0087d67106ca", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/MultiQuotesNode.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/MultiQuotesNode.tsx:58"}, "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-b45d244218801ed9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/HttpRequestNode.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/HttpRequestNode.tsx:64"}, "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-5baf9f0fdd965c57", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/WaitUntilNode.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/WaitUntilNode.tsx:50"}, "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-6a43ff4ea794be28", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/playground/ConnectionPanel.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/playground/ConnectionPanel.tsx:125"}, "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-a76cdc0f87898812", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PositionsPanel.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PositionsPanel.tsx:148"}, "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-ec71596c7a32d944", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PnLTab.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PnLTab.tsx:297"}, "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-1b6da3ec5a739d10", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Analyzer.tsx:314", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Analyzer.tsx:314"}, "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-7253c3110e33de01", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ApiKey.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ApiKey.tsx:196"}, "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-57f7f88850a36eec", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Token.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Token.tsx:430"}, "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-e2d48319a62f265b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Playground.tsx:676", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Playground.tsx:676"}, "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-9dc8364038b32b6a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Search.tsx:507", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Search.tsx:507"}, "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-9a0060f5ed0bdfda", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Logs.tsx:383", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Logs.tsx:383"}, "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-d4b278bbfa174a7c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Profile.tsx:961", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Profile.tsx:961"}, "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-227e741509dc9239", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/StrategyPortfolio.tsx:597", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/StrategyPortfolio.tsx:597"}, "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-512418d47f98af00", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Historify.tsx:2195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Historify.tsx:2195"}, "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-6cb3e89317483a9c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/strategy/StrategyIndex.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/strategy/StrategyIndex.tsx:230"}, "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-e676604b37d9b6c1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/monitoring/TrafficDashboard.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/monitoring/TrafficDashboard.tsx:251"}, "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-4c863e19f3d1a664", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/admin/Diagnostics.tsx:544", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/admin/Diagnostics.tsx:544"}, "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-386ffe9a7a0bb0e7", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/chartink/ChartinkIndex.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/chartink/ChartinkIndex.tsx:212"}, "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-5389edb8f83f1c98", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyLogs.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyLogs.tsx:251"}, "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-6378b9d67aa24cd2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyIndex.tsx:379", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyIndex.tsx:379"}, "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-8a47f78f073a310f", "name": "Stray `console.log` in TS/JS \u2014 frontend/e2e/accessibility.spec.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/e2e/accessibility.spec.ts:15"}, "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-6e0083003a7e7072", "name": "Privileged port 3 in use", "shortDescription": {"text": "Privileged port 3 in use"}, "fullDescription": {"text": "Port 3 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-742dc54135343639", "name": "Privileged port 1000 in use", "shortDescription": {"text": "Privileged port 1000 in use"}, "fullDescription": {"text": "Port 1000 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-a112acf436637c16", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-bullseye", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-bullseye"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-793bfa131b170c73", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bullseye-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bullseye-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b44b4f0579689ff", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bullseye", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bullseye"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11f31b6f8444408b", "name": "Insecure pattern 'debug_true' in broker/groww/api/data.py:407", "shortDescription": {"text": "Insecure pattern 'debug_true' in broker/groww/api/data.py:407"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d76e7d916fdb3d6", "name": "Possible secret in examples/python/multiquotes_example.py", "shortDescription": {"text": "Possible secret in examples/python/multiquotes_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-aed24016c9fee367", "name": "Possible secret in examples/python/flask_optionchain.py", "shortDescription": {"text": "Possible secret in examples/python/flask_optionchain.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e73a3b43698fc6fb", "name": "Possible secret in examples/python/stoploss_example.py", "shortDescription": {"text": "Possible secret in examples/python/stoploss_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9228432561116132", "name": "Possible secret in examples/python/ema_crossover.py", "shortDescription": {"text": "Possible secret in examples/python/ema_crossover.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-319823a627ef1bb1", "name": "Possible secret in examples/python/ytd_gainers_losers.py", "shortDescription": {"text": "Possible secret in examples/python/ytd_gainers_losers.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e63fb367f770dedf", "name": "Possible secret in examples/python/plotting candles.py", "shortDescription": {"text": "Possible secret in examples/python/plotting candles.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-10ac77a621b212f5", "name": "Possible secret in examples/python/backtesting_vectorbt.py", "shortDescription": {"text": "Possible secret in examples/python/backtesting_vectorbt.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-548d38aa712faf45", "name": "Possible secret in examples/python/depth_50_example.py", "shortDescription": {"text": "Possible secret in examples/python/depth_50_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-cf4dbbea1024d230", "name": "Possible secret in examples/python/depth_20_example.py", "shortDescription": {"text": "Possible secret in examples/python/depth_20_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4843d0049dc6a6f1", "name": "Possible secret in examples/python/Nifty OI Charts.py", "shortDescription": {"text": "Possible secret in examples/python/Nifty OI Charts.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9de282d6b7f41c5d", "name": "Possible secret in examples/python/heatmap.py", "shortDescription": {"text": "Possible secret in examples/python/heatmap.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-55413827d42ed9c3", "name": "Possible secret in examples/python/placing ATM order.py", "shortDescription": {"text": "Possible secret in examples/python/placing ATM order.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-76d0e540cd119746", "name": "Possible secret in examples/python/straddle_scheduler.py", "shortDescription": {"text": "Possible secret in examples/python/straddle_scheduler.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-99f85cc2d797adc9", "name": "Possible secret in examples/python/supertrend.py", "shortDescription": {"text": "Possible secret in examples/python/supertrend.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-aaa231e758944fda", "name": "Possible secret in examples/python/seasonality.py", "shortDescription": {"text": "Possible secret in examples/python/seasonality.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d4e92a389683bb9d", "name": "Possible secret in examples/python/ltp_example.py", "shortDescription": {"text": "Possible secret in examples/python/ltp_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b7ed35f162cf9fa7", "name": "Possible secret in examples/python/depth_example.py", "shortDescription": {"text": "Possible secret in examples/python/depth_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4067eff66c6df931", "name": "Possible secret in examples/python/straddle_with_stops.py", "shortDescription": {"text": "Possible secret in examples/python/straddle_with_stops.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a6298f1ac4530c60", "name": "Possible secret in examples/python/ytd_heatmap.py", "shortDescription": {"text": "Possible secret in examples/python/ytd_heatmap.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-907c4998d1c580ae", "name": "Possible secret in examples/python/william vix fix.py", "shortDescription": {"text": "Possible secret in examples/python/william vix fix.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-318b103eb15fdeeb", "name": "Possible secret in examples/python/expiry_dates.py", "shortDescription": {"text": "Possible secret in examples/python/expiry_dates.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6edc02ae6d71b472", "name": "Possible secret in examples/python/quote_example.py", "shortDescription": {"text": "Possible secret in examples/python/quote_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f6c75ef4e41cf63b", "name": "Possible secret in examples/python/test_2340_symbols.py", "shortDescription": {"text": "Possible secret in examples/python/test_2340_symbols.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-826430837e550e41", "name": "Possible secret in examples/python/optionchain_example.py", "shortDescription": {"text": "Possible secret in examples/python/optionchain_example.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7472b1e962081d88", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/StrategyChartTab.tsx:151", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/StrategyChartTab.tsx:151"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-248715776af24e65", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/MultiStrikeOITab.tsx:198", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/MultiStrikeOITab.tsx:198"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b35365782d86e82", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/BrokerSelect.tsx:245", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/BrokerSelect.tsx:245"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-120e84f589312157", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/CustomStraddle.tsx:215", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/CustomStraddle.tsx:215"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3da2541e684af1b4", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/StraddleChart.tsx:183", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/StraddleChart.tsx:183"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-244d2a7aeee77ac7", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/IVChart.tsx:249", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/IVChart.tsx:249"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efb60d11dc76abdb", "name": "Possible secret in docs/userguide/09-api-key-management/README.md", "shortDescription": {"text": "Possible secret in docs/userguide/09-api-key-management/README.md"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-69a86ca1e88cfcd5", "name": "Possible secret in docs/design/37-apikey-playground/README.md", "shortDescription": {"text": "Possible secret in docs/design/37-apikey-playground/README.md"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ea4462f9878016b9", "name": "Possible secret in test/test_greeks_live.py", "shortDescription": {"text": "Possible secret in test/test_greeks_live.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5e54341b1819e38c", "name": "Possible secret in test/ltp_example_test_1800 symbols.py", "shortDescription": {"text": "Possible secret in test/ltp_example_test_1800 symbols.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-40b0afedb1c53d5c", "name": "Possible secret in test/test_options_multiorder_api.py", "shortDescription": {"text": "Possible secret in test/test_options_multiorder_api.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27916378011f1263", "name": "Possible secret in test/test_orphaned_apikey.py", "shortDescription": {"text": "Possible secret in test/test_orphaned_apikey.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-67c18d6036e673f9", "name": "Possible secret in test/ltp_test_report.py", "shortDescription": {"text": "Possible secret in test/ltp_test_report.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-089cb36bf2ebc5cd", "name": "Possible secret in test/iteration_test.py", "shortDescription": {"text": "Possible secret in test/iteration_test.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c6f1f6d5f3381aa7", "name": "Possible secret in test/test_analyzer_toggle_restriction.py", "shortDescription": {"text": "Possible secret in test/test_analyzer_toggle_restriction.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b5a16c2152651974", "name": "Possible secret in test/test_simple_editor.html", "shortDescription": {"text": "Possible secret in test/test_simple_editor.html"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9216707cc0cd7904", "name": "Possible secret in test/test_history_format.py", "shortDescription": {"text": "Possible secret in test/test_history_format.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-da8dbb137ed47071", "name": "Possible secret in test/test_all_order_types_execution.py", "shortDescription": {"text": "Possible secret in test/test_all_order_types_execution.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/login-action@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f1e4527e6fecffa", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "aquasecurity/trivy-action@master 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": "high", "confidence": 1.0}}, {"id": "scanner-64192a3c67110d01", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/upload-sarif@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7dd5ab6e815926d", "name": "Very large file: broker/tradejini/api/order_api.py (1579 lines)", "shortDescription": {"text": "Very large file: broker/tradejini/api/order_api.py (1579 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-7b17e5003f46f326", "name": "Very large file: broker/kotak/streaming/kotak_adapter.py (1178 lines)", "shortDescription": {"text": "Very large file: broker/kotak/streaming/kotak_adapter.py (1178 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7592c9f5db7e586", "name": "Very large file: broker/kotak/streaming/HSWebSocketLib.py (1542 lines)", "shortDescription": {"text": "Very large file: broker/kotak/streaming/HSWebSocketLib.py (1542 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-43deb5a44014b3da", "name": "Very large file: broker/groww/api/data.py (2078 lines)", "shortDescription": {"text": "Very large file: broker/groww/api/data.py (2078 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-c76b423ed509db7e", "name": "Very large file: broker/groww/api/order_api.py (3428 lines)", "shortDescription": {"text": "Very large file: broker/groww/api/order_api.py (3428 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-f4c36bf417398ffb", "name": "Very large file: broker/fyers/streaming/fyers_websocket_adapter.py (1177 lines)", "shortDescription": {"text": "Very large file: broker/fyers/streaming/fyers_websocket_adapter.py (1177 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-41f5449654ceaedd", "name": "Very large file: broker/motilal/api/motilal_websocket.py (1273 lines)", "shortDescription": {"text": "Very large file: broker/motilal/api/motilal_websocket.py (1273 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-731aea677f98498a", "name": "Very large file: broker/aliceblue/streaming/aliceblue_adapter.py (1185 lines)", "shortDescription": {"text": "Very large file: broker/aliceblue/streaming/aliceblue_adapter.py (1185 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-031b316fadc77af1", "name": "Very large file: broker/dhan_sandbox/streaming/dhan_websocket.py (2916 lines)", "shortDescription": {"text": "Very large file: broker/dhan_sandbox/streaming/dhan_websocket.py (2916 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-034d9c4815617b20", "name": "Very large file: sandbox/order_manager.py (1225 lines)", "shortDescription": {"text": "Very large file: sandbox/order_manager.py (1225 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-227d89da53b4087b", "name": "Very large file: sandbox/position_manager.py (1434 lines)", "shortDescription": {"text": "Very large file: sandbox/position_manager.py (1434 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-2fdffd6d4f9293ce", "name": "Very large file: websocket_proxy/server.py (1690 lines)", "shortDescription": {"text": "Very large file: websocket_proxy/server.py (1690 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-2e6e718f1d0acb51", "name": "Very large file: frontend/src/pages/StrategyBuilder.tsx (1357 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/StrategyBuilder.tsx (1357 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-cd71d675f52371a9", "name": "Very large file: frontend/src/pages/Profile.tsx (2266 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Profile.tsx (2266 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-73c9223c35b2b258", "name": "Very large file: frontend/src/pages/Historify.tsx (3120 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Historify.tsx (3120 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-c22187b63d851a1f", "name": "Very large file: frontend/src/pages/monitoring/SecurityDashboard.tsx (1478 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/monitoring/SecurityDashboard.tsx (1478 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-23d3f4a158293493", "name": "Very large file: frontend/src/pages/python-strategy/PythonStrategyGuide.tsx (1281 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/python-strategy/PythonStrategyGuide.tsx (1281 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-01e4c8ec0f3d6f08", "name": "Very large file: blueprints/admin.py (1740 lines)", "shortDescription": {"text": "Very large file: blueprints/admin.py (1740 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-c7723607d27c37dc", "name": "Very large file: blueprints/python_strategy.py (2868 lines)", "shortDescription": {"text": "Very large file: blueprints/python_strategy.py (2868 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-38273dd3a9e562c5", "name": "Very large file: blueprints/pnltracker.py (1105 lines)", "shortDescription": {"text": "Very large file: blueprints/pnltracker.py (1105 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-f6e7404a427ab36f", "name": "Very large file: blueprints/historify.py (1555 lines)", "shortDescription": {"text": "Very large file: blueprints/historify.py (1555 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-1cf22f48afd74380", "name": "Very large file: blueprints/auth.py (1308 lines)", "shortDescription": {"text": "Very large file: blueprints/auth.py (1308 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-f5093bd9a2ebffae", "name": "Very large file: blueprints/distribution.py (1818 lines)", "shortDescription": {"text": "Very large file: blueprints/distribution.py (1818 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-f48669fb67819e22", "name": "Very large file: blueprints/brlogin.py (1399 lines)", "shortDescription": {"text": "Very large file: blueprints/brlogin.py (1399 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-b44b1266501da887", "name": "Very large file: database/market_calendar_db.py (1394 lines)", "shortDescription": {"text": "Very large file: database/market_calendar_db.py (1394 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-d4ce484d8efd26ea", "name": "Very large file: database/historify_db.py (3524 lines)", "shortDescription": {"text": "Very large file: database/historify_db.py (3524 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-3cb3889ce973538c", "name": "Very large file: services/historify_service.py (2206 lines)", "shortDescription": {"text": "Very large file: services/historify_service.py (2206 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-35022f88d866b0e5", "name": "Very large file: services/flow_executor_service.py (2334 lines)", "shortDescription": {"text": "Very large file: services/flow_executor_service.py (2334 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-e57b6f85c1ab7526", "name": "Very large file: services/telegram_bot_service.py (2607 lines)", "shortDescription": {"text": "Very large file: services/telegram_bot_service.py (2607 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "71 test file(s) for 1186 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 773 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 423 placeholder/mock markers across 114 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3407e6f8c22274a5", "name": "Commented-code block (6 lines) in app.py:317", "shortDescription": {"text": "Commented-code block (6 lines) in app.py:317"}, "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-5c23aa1bff8664bb", "name": "Commented-code block (7 lines) in broker/wisdom/streaming/wisdom_websocket.py:236", "shortDescription": {"text": "Commented-code block (7 lines) in broker/wisdom/streaming/wisdom_websocket.py:236"}, "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-9b92977cf89dd5df", "name": "Commented-code block (7 lines) in broker/wisdom/database/master_contract_db.py:384", "shortDescription": {"text": "Commented-code block (7 lines) in broker/wisdom/database/master_contract_db.py:384"}, "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-9ed935753f34fc90", "name": "Commented-code block (9 lines) in broker/deltaexchange/api/data.py:367", "shortDescription": {"text": "Commented-code block (9 lines) in broker/deltaexchange/api/data.py:367"}, "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-e6abc0c106bd0141", "name": "Commented-code block (5 lines) in broker/deltaexchange/mapping/order_data.py:63", "shortDescription": {"text": "Commented-code block (5 lines) in broker/deltaexchange/mapping/order_data.py:63"}, "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-aeb6a793a5224b65", "name": "Commented-code block (6 lines) in broker/deltaexchange/streaming/delta_adapter.py:176", "shortDescription": {"text": "Commented-code block (6 lines) in broker/deltaexchange/streaming/delta_adapter.py:176"}, "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-b6f8ddfd79f438d3", "name": "Commented-code block (8 lines) in broker/deltaexchange/streaming/delta_websocket.py:103", "shortDescription": {"text": "Commented-code block (8 lines) in broker/deltaexchange/streaming/delta_websocket.py:103"}, "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-2f2ea0e0674811f8", "name": "Commented-code block (6 lines) in broker/deltaexchange/database/master_contract_db.py:217", "shortDescription": {"text": "Commented-code block (6 lines) in broker/deltaexchange/database/master_contract_db.py:217"}, "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-6efe96548af4a9e3", "name": "Commented-code block (7 lines) in broker/nubra/api/nubrawebsocket.py:405", "shortDescription": {"text": "Commented-code block (7 lines) in broker/nubra/api/nubrawebsocket.py:405"}, "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-0b7c11a2a5beec99", "name": "Legacy-named symbol `pos_copy` in broker/nubra/mapping/order_data.py:422", "shortDescription": {"text": "Legacy-named symbol `pos_copy` in broker/nubra/mapping/order_data.py:422"}, "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-d43d9b9e257e420e", "name": "Legacy-named symbol `nbasket_old` in broker/nubra/protos/orders_pb2.py:29", "shortDescription": {"text": "Legacy-named symbol `nbasket_old` in broker/nubra/protos/orders_pb2.py:29"}, "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-b7f14080e6df7059", "name": "Legacy-named symbol `rorder_type_v2` in broker/nubra/protos/nubrafrontend_pb2.py:29", "shortDescription": {"text": "Legacy-named symbol `rorder_type_v2` in broker/nubra/protos/nubrafrontend_pb2.py:29"}, "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-1e4768e9f585ca30", "name": "Commented-code block (5 lines) in broker/zerodha/api/data.py:17", "shortDescription": {"text": "Commented-code block (5 lines) in broker/zerodha/api/data.py:17"}, "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-353714230c243aa2", "name": "Commented-code block (8 lines) in broker/zerodha/mapping/margin_data.py:172", "shortDescription": {"text": "Commented-code block (8 lines) in broker/zerodha/mapping/margin_data.py:172"}, "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-ba4b9c535a311a6a", "name": "Commented-code block (5 lines) in broker/zerodha/streaming/zerodha_mapping.py:18", "shortDescription": {"text": "Commented-code block (5 lines) in broker/zerodha/streaming/zerodha_mapping.py:18"}, "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-1088ac83137be9bc", "name": "Commented-code block (7 lines) in broker/compositedge/streaming/compositedge_websocket.py:237", "shortDescription": {"text": "Commented-code block (7 lines) in broker/compositedge/streaming/compositedge_websocket.py:237"}, "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-2b986c802feae635", "name": "Commented-code block (7 lines) in broker/compositedge/database/master_contract_db.py:384", "shortDescription": {"text": "Commented-code block (7 lines) in broker/compositedge/database/master_contract_db.py:384"}, "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-909d1af4c0fb9748", "name": "Commented-code block (10 lines) in broker/icicidirect/mapping/transform_data.py:129", "shortDescription": {"text": "Commented-code block (10 lines) in broker/icicidirect/mapping/transform_data.py:129"}, "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-605b44f2f8dfac79", "name": "Commented-code block (7 lines) in broker/ibulls/streaming/ibulls_websocket.py:234", "shortDescription": {"text": "Commented-code block (7 lines) in broker/ibulls/streaming/ibulls_websocket.py:234"}, "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-961dde6d21b67f9a", "name": "Commented-code block (6 lines) in broker/shoonya/api/data.py:615", "shortDescription": {"text": "Commented-code block (6 lines) in broker/shoonya/api/data.py:615"}, "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-46de2117cd2bcb96", "name": "Commented-code block (6 lines) in broker/shoonya/mapping/margin_data.py:157", "shortDescription": {"text": "Commented-code block (6 lines) in broker/shoonya/mapping/margin_data.py:157"}, "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-40ed2ae28e786cab", "name": "Commented-code block (7 lines) in broker/iifl/streaming/iifl_websocket.py:237", "shortDescription": {"text": "Commented-code block (7 lines) in broker/iifl/streaming/iifl_websocket.py:237"}, "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-a8011a15fb89e078", "name": "Commented-code block (7 lines) in broker/iifl/database/master_contract_db.py:384", "shortDescription": {"text": "Commented-code block (7 lines) in broker/iifl/database/master_contract_db.py:384"}, "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-3edd592933037bed", "name": "Commented-code block (9 lines) in broker/kotak/streaming/HSWebSocketLib.py:1331", "shortDescription": {"text": "Commented-code block (9 lines) in broker/kotak/streaming/HSWebSocketLib.py:1331"}, "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-92dd8e47f58ea335", "name": "Commented-code block (7 lines) in broker/jainamxts/streaming/jainamxts_websocket.py:246", "shortDescription": {"text": "Commented-code block (7 lines) in broker/jainamxts/streaming/jainamxts_websocket.py:246"}, "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-334d8bda61418e76", "name": "Commented-code block (7 lines) in broker/jainamxts/database/master_contract_db.py:390", "shortDescription": {"text": "Commented-code block (7 lines) in broker/jainamxts/database/master_contract_db.py:390"}, "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-bb7d57d7baaeb7f5", "name": "Commented-code block (8 lines) in broker/paytm/streaming/paytm_websocket.py:424", "shortDescription": {"text": "Commented-code block (8 lines) in broker/paytm/streaming/paytm_websocket.py:424"}, "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-0e072e175bb0d724", "name": "Commented-code block (6 lines) in broker/groww/api/data.py:1451", "shortDescription": {"text": "Commented-code block (6 lines) in broker/groww/api/data.py:1451"}, "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-0b4bf89d3bd73278", "name": "Legacy-named symbol `subscriptions_copy` in broker/groww/streaming/groww_adapter.py:120", "shortDescription": {"text": "Legacy-named symbol `subscriptions_copy` in broker/groww/streaming/groww_adapter.py:120"}, "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-115cfeb2f36b3a24", "name": "Commented-code block (7 lines) in broker/fivepaisaxts/streaming/fivepaisaxts_websocket.py:237", "shortDescription": {"text": "Commented-code block (7 lines) in broker/fivepaisaxts/streaming/fivepaisaxts_websocket.py:237"}, "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-e6a4b82b848bf96a", "name": "Commented-code block (7 lines) in broker/fivepaisaxts/database/master_contract_db.py:386", "shortDescription": {"text": "Commented-code block (7 lines) in broker/fivepaisaxts/database/master_contract_db.py:386"}, "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-0dfda186fc1e2fde", "name": "Commented-code block (5 lines) in broker/dhan/api/gtt_api.py:182", "shortDescription": {"text": "Commented-code block (5 lines) in broker/dhan/api/gtt_api.py:182"}, "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-c59be05aab751199", "name": "Commented-code block (5 lines) in broker/upstox/api/auth_api.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in broker/upstox/api/auth_api.py:27"}, "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-9fb094233f99079e", "name": "Legacy-named symbol `prev_close_v2` in broker/upstox/api/data.py:216", "shortDescription": {"text": "Legacy-named symbol `prev_close_v2` in broker/upstox/api/data.py:216"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcaf1619de8935b5", "name": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_client.py:59", "shortDescription": {"text": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_client.py:59"}, "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-92d586a468b29dbd", "name": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_adapter.py:34", "shortDescription": {"text": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_adapter.py:34"}, "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-e2ef6c3993e3003e", "name": "Legacy-named symbol `segment_copy` in broker/upstox/database/master_contract_db.py:143", "shortDescription": {"text": "Legacy-named symbol `segment_copy` in broker/upstox/database/master_contract_db.py:143"}, "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-293991839501e632", "name": "Commented-code block (5 lines) in broker/definedge/api/data.py:848", "shortDescription": {"text": "Commented-code block (5 lines) in broker/definedge/api/data.py:848"}, "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-7f19504adb6a5d71", "name": "Commented-code block (9 lines) in broker/fyers/streaming/fyers_websocket_adapter.py:81", "shortDescription": {"text": "Commented-code block (9 lines) in broker/fyers/streaming/fyers_websocket_adapter.py:81"}, "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-b87380086c266759", "name": "Commented-code block (10 lines) in broker/fyers/streaming/fyers_adapter.py:487", "shortDescription": {"text": "Commented-code block (10 lines) in broker/fyers/streaming/fyers_adapter.py:487"}, "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-22ddbc5cd3d55b5d", "name": "Commented-code block (5 lines) in broker/rmoney/streaming/rmoney_websocket.py:37", "shortDescription": {"text": "Commented-code block (5 lines) in broker/rmoney/streaming/rmoney_websocket.py:37"}, "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-c4294f6e36d605b2", "name": "Commented-code block (7 lines) in broker/rmoney/database/master_contract_db.py:386", "shortDescription": {"text": "Commented-code block (7 lines) in broker/rmoney/database/master_contract_db.py:386"}, "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-ebeceffb98bf4bab", "name": "Commented-code block (5 lines) in broker/motilal/api/motilal_websocket.py:222", "shortDescription": {"text": "Commented-code block (5 lines) in broker/motilal/api/motilal_websocket.py:222"}, "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-c8aec8e1ff6af65c", "name": "Legacy-named symbol `subscriptions_copy` in broker/motilal/streaming/motilal_adapter.py:367", "shortDescription": {"text": "Legacy-named symbol `subscriptions_copy` in broker/motilal/streaming/motilal_adapter.py:367"}, "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-b283ea2e741e8546", "name": "Stub function `on_message` (body is just `pass`/`return`) \u2014 broker/angel/streaming/smartWebSocketV2.py:736", "shortDescription": {"text": "Stub function `on_message` (body is just `pass`/`return`) \u2014 broker/angel/streaming/smartWebSocketV2.py:736"}, "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-ecde739e524c20d1", "name": "Commented-code block (10 lines) in broker/arihant/api/auth_api.py:37", "shortDescription": {"text": "Commented-code block (10 lines) in broker/arihant/api/auth_api.py:37"}, "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-2b7b469a7697a694", "name": "Commented-code block (6 lines) in broker/arihant/api/order_api.py:92", "shortDescription": {"text": "Commented-code block (6 lines) in broker/arihant/api/order_api.py:92"}, "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-bfba17b403ed11b9", "name": "Commented-code block (6 lines) in broker/arihant/mapping/transform_data.py:96", "shortDescription": {"text": "Commented-code block (6 lines) in broker/arihant/mapping/transform_data.py:96"}, "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-fd3a767b2578649a", "name": "Commented-code block (5 lines) in broker/arihant/database/master_contract_db.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in broker/arihant/database/master_contract_db.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-769487953f852710", "name": "Network/subprocess call without timeout or try/except \u2014 broker/aliceblue/streaming/aliceblue_client.py:137", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 broker/aliceblue/streaming/aliceblue_client.py:137"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e63f38152fc09ea5", "name": "Commented-code block (6 lines) in broker/flattrade/mapping/margin_data.py:157", "shortDescription": {"text": "Commented-code block (6 lines) in broker/flattrade/mapping/margin_data.py:157"}, "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-156f4841a3107d3d", "name": "Commented-code block (5 lines) in broker/flattrade/mapping/order_data.py:437", "shortDescription": {"text": "Commented-code block (5 lines) in broker/flattrade/mapping/order_data.py:437"}, "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-04fe340499edf7ea", "name": "Commented-code block (7 lines) in broker/dhan_sandbox/streaming/dhan_websocket.py:695", "shortDescription": {"text": "Commented-code block (7 lines) in broker/dhan_sandbox/streaming/dhan_websocket.py:695"}, "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-9bd50dd69bfbd1b0", "name": "Legacy-named symbol `squareoff_backup` in sandbox/squareoff_thread.py:88", "shortDescription": {"text": "Legacy-named symbol `squareoff_backup` in sandbox/squareoff_thread.py:88"}, "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-c92a07ec2b602b26", "name": "Commented-code block (7 lines) in sandbox/squareoff_thread.py:77", "shortDescription": {"text": "Commented-code block (7 lines) in sandbox/squareoff_thread.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-513b6ce7241ecd13", "name": "Commented-code block (7 lines) in sandbox/order_manager.py:85", "shortDescription": {"text": "Commented-code block (7 lines) in sandbox/order_manager.py:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64dfcbb5dfb3be9b", "name": "Commented-code block (5 lines) in sandbox/squareoff_manager.py:99", "shortDescription": {"text": "Commented-code block (5 lines) in sandbox/squareoff_manager.py:99"}, "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-b7a67e1d6a50601a", "name": "Commented-code block (6 lines) in utils/decodo_proxy.py:78", "shortDescription": {"text": "Commented-code block (6 lines) in utils/decodo_proxy.py:78"}, "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-1daa040068411354", "name": "Commented-code block (5 lines) in utils/auth_utils.py:361", "shortDescription": {"text": "Commented-code block (5 lines) in utils/auth_utils.py:361"}, "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-4e74f05b250d457e", "name": "Commented-code block (5 lines) in utils/httpx_client.py:17", "shortDescription": {"text": "Commented-code block (5 lines) in utils/httpx_client.py:17"}, "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-c0a293e9128f2a2b", "name": "Commented-code block (6 lines) in utils/logging.py:33", "shortDescription": {"text": "Commented-code block (6 lines) in utils/logging.py:33"}, "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-ca13566479b37520", "name": "Commented-code block (8 lines) in utils/broker_env_bootstrap.py:69", "shortDescription": {"text": "Commented-code block (8 lines) in utils/broker_env_bootstrap.py:69"}, "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-a2d911e5e16e69fa", "name": "Commented-code block (5 lines) in utils/env_check.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in utils/env_check.py:16"}, "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-1f799306fec53fba", "name": "Commented-code block (5 lines) in utils/source_bind.py:70", "shortDescription": {"text": "Commented-code block (5 lines) in utils/source_bind.py:70"}, "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-eea5eabdda96dfd3", "name": "Commented-code block (6 lines) in websocket_proxy/server.py:152", "shortDescription": {"text": "Commented-code block (6 lines) in websocket_proxy/server.py:152"}, "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-c6214ad1006f2efc", "name": "Commented-code block (5 lines) in broker_login_adapters/__init__.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in broker_login_adapters/__init__.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-d54aa6a4c34202fb", "name": "Legacy-named symbol `send_login_otp_v2` in broker_login_adapters/fyers.py:15", "shortDescription": {"text": "Legacy-named symbol `send_login_otp_v2` in broker_login_adapters/fyers.py:15"}, "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-8cdb9473ca7586a1", "name": "Commented-code block (5 lines) in broker_login_adapters/upstox.py:164", "shortDescription": {"text": "Commented-code block (5 lines) in broker_login_adapters/upstox.py:164"}, "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-a35e5f3f5311e5a2", "name": "Commented-code block (5 lines) in broker_login_adapters/zerodha.py:98", "shortDescription": {"text": "Commented-code block (5 lines) in broker_login_adapters/zerodha.py:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-336172d075dcfa2a", "name": "Commented-code block (5 lines) in examples/python/emacrossover_strategy_python.py:36", "shortDescription": {"text": "Commented-code block (5 lines) in examples/python/emacrossover_strategy_python.py:36"}, "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-eb0678782923c332", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:7"}, "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-edf12bc2c526f72c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/stores/themeStore.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/stores/themeStore.ts:122"}, "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-d6fe6a05a3846a10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useMarketStatus.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useMarketStatus.ts:32"}, "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-6872053e55c299c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWebSocketTester.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWebSocketTester.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5772e5221f287ee0", "name": "Commented-code block (7 lines) in frontend/src/components/strategy-builder/Simulators.tsx:33", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/strategy-builder/Simulators.tsx:33"}, "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-247f5d594ffeefb8", "name": "Commented-code block (9 lines) in frontend/src/components/strategy-builder/PnLTab.tsx:105", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/components/strategy-builder/PnLTab.tsx:105"}, "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-b825193a45b8361b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/HistorifyCharts.tsx:452", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/HistorifyCharts.tsx:452"}, "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-d150ff70d2cc8fc8", "name": "Commented-code block (6 lines) in frontend/src/pages/StrategyBuilder.tsx:187", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/StrategyBuilder.tsx:187"}, "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-0eb381d27172f65c", "name": "Commented-code block (5 lines) in frontend/src/pages/OptionChain.tsx:562", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/OptionChain.tsx:562"}, "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-6fbd7985f983b41c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/BrokerTOTP.tsx:365", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/BrokerTOTP.tsx:365"}, "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-cd9770ebe5bfe8b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Sandbox.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Sandbox.tsx:27"}, "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-9e0e906a6e55fe04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Analyzer.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Analyzer.tsx:99"}, "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-f88b466a96800865", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/ApiKey.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/ApiKey.tsx:32"}, "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-51f9b1ee1611cc68", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/PnLTracker.tsx:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/PnLTracker.tsx:11"}, "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-db2cdd2f8006a655", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Token.tsx:231", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Token.tsx:231"}, "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-3fc011c3677715da", "name": "Commented-code block (5 lines) in frontend/src/pages/BrokerManager.tsx:198", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/BrokerManager.tsx:198"}, "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-5bfe84d6fa3f1907", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Playground.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Playground.tsx:70"}, "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-bdb98fd3debe8967", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Search.tsx:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Search.tsx:121"}, "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-3ea0994fe6bf5346", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/WebSocketTest.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/WebSocketTest.tsx:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a3077b655db6898", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Setup.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Setup.tsx:108"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57daa240d581663c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Login.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Login.tsx:54"}, "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-3e90cfd9d5cb4617", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Activate.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Activate.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0421bf0a63de5d5", "name": "Commented-code block (11 lines) in frontend/src/pages/Historify.tsx:142", "shortDescription": {"text": "Commented-code block (11 lines) in frontend/src/pages/Historify.tsx:142"}, "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-805cdeac478d6fc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Historify.tsx:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Historify.tsx:227"}, "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-1e1e0af589f581b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/MasterContract.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/MasterContract.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-d0a48c972472349d", "name": "Commented-code block (6 lines) in frontend/src/lib/plotly-2d.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/plotly-2d.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8639066650efe01b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/MarketDataManager.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/MarketDataManager.ts:77"}, "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-09baf747ac24c27c", "name": "Commented-code block (9 lines) in frontend/src/lib/strategyMath.ts:361", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/lib/strategyMath.ts:361"}, "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-de03a3eda164b74e", "name": "Commented-code block (5 lines) in blueprints/broker_credentials.py:677", "shortDescription": {"text": "Commented-code block (5 lines) in blueprints/broker_credentials.py:677"}, "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-976a0dc8a6d1ffa5", "name": "Commented-code block (10 lines) in blueprints/admin.py:54", "shortDescription": {"text": "Commented-code block (10 lines) in blueprints/admin.py:54"}, "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-75cbea91807ea72a", "name": "Commented-code block (7 lines) in blueprints/python_strategy.py:359", "shortDescription": {"text": "Commented-code block (7 lines) in blueprints/python_strategy.py:359"}, "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-afd9687c3f5cd533", "name": "Commented-code block (5 lines) in blueprints/telegram.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in blueprints/telegram.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8761eb17aa6d6636", "name": "Commented-code block (8 lines) in blueprints/core.py:59", "shortDescription": {"text": "Commented-code block (8 lines) in blueprints/core.py:59"}, "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-75693eece4239a9b", "name": "Commented-code block (7 lines) in blueprints/historify.py:463", "shortDescription": {"text": "Commented-code block (7 lines) in blueprints/historify.py:463"}, "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-87b1dee4977c7531", "name": "Commented-code block (7 lines) in blueprints/broker_metadata.py:22", "shortDescription": {"text": "Commented-code block (7 lines) in blueprints/broker_metadata.py:22"}, "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-c910ced99e5aae21", "name": "Commented-code block (6 lines) in blueprints/search.py:46", "shortDescription": {"text": "Commented-code block (6 lines) in blueprints/search.py:46"}, "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-c2eb353bd403d104", "name": "Commented-code block (6 lines) in blueprints/system_permissions.py:45", "shortDescription": {"text": "Commented-code block (6 lines) in blueprints/system_permissions.py:45"}, "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-9e33b104c41115be", "name": "Commented-code block (8 lines) in blueprints/auth.py:127", "shortDescription": {"text": "Commented-code block (8 lines) in blueprints/auth.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-d84c5373d03cebee", "name": "Commented-code block (8 lines) in blueprints/distribution.py:709", "shortDescription": {"text": "Commented-code block (8 lines) in blueprints/distribution.py:709"}, "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-4961e2a28108a50d", "name": "Commented-code block (8 lines) in blueprints/brlogin.py:64", "shortDescription": {"text": "Commented-code block (8 lines) in blueprints/brlogin.py:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-414e44c7a1037aaa", "name": "Commented-code block (6 lines) in database/token_db_enhanced.py:30", "shortDescription": {"text": "Commented-code block (6 lines) in database/token_db_enhanced.py:30"}, "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-02c0ea896033500c", "name": "Commented-code block (6 lines) in database/distribution_db.py:103", "shortDescription": {"text": "Commented-code block (6 lines) in database/distribution_db.py:103"}, "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-b2cd0c6983ff4e40", "name": "Commented-code block (5 lines) in database/broker_creds_db.py:49", "shortDescription": {"text": "Commented-code block (5 lines) in database/broker_creds_db.py:49"}, "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-272c82e9c72e4602", "name": "Commented-code block (10 lines) in database/traffic_db.py:32", "shortDescription": {"text": "Commented-code block (10 lines) in database/traffic_db.py:32"}, "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-3709c7a35d01b904", "name": "Commented-code block (6 lines) in database/historify_db.py:960", "shortDescription": {"text": "Commented-code block (6 lines) in database/historify_db.py:960"}, "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-36a5099876349b89", "name": "Commented-code block (6 lines) in database/auth_db.py:464", "shortDescription": {"text": "Commented-code block (6 lines) in database/auth_db.py:464"}, "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-34a163d6b01b72f5", "name": "Commented-code block (8 lines) in database/settings_db.py:17", "shortDescription": {"text": "Commented-code block (8 lines) in database/settings_db.py:17"}, "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-35a17bfd9f907aec", "name": "Commented-code block (5 lines) in database/sandbox_db.py:366", "shortDescription": {"text": "Commented-code block (5 lines) in database/sandbox_db.py:366"}, "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-ffb0b693e7c2349b", "name": "Legacy-named symbol `api_v1` in restx_api/__init__.py:4", "shortDescription": {"text": "Legacy-named symbol `api_v1` in restx_api/__init__.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-ea3f48f812d3cdc3", "name": "Commented-code block (7 lines) in services/multi_strike_oi_service.py:141", "shortDescription": {"text": "Commented-code block (7 lines) in services/multi_strike_oi_service.py:141"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58b5b53f9236e2ef", "name": "Commented-code block (6 lines) in services/strategy_chart_service.py:207", "shortDescription": {"text": "Commented-code block (6 lines) in services/strategy_chart_service.py:207"}, "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-4a85b1812affca65", "name": "Commented-code block (5 lines) in services/custom_straddle_service.py:178", "shortDescription": {"text": "Commented-code block (5 lines) in services/custom_straddle_service.py:178"}, "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-aa532adb1c315bb0", "name": "Commented-code block (8 lines) in services/auto_login_scheduler_service.py:110", "shortDescription": {"text": "Commented-code block (8 lines) in services/auto_login_scheduler_service.py:110"}, "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-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/api/data.py:get_quotes, broker/zebu/api/data.py:get_quotes, broker/zerodha/api/data.py:get_quotes, broker/shoonya/api/data.py:get_quotes\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-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/api/data.py:get_depth, broker/zebu/api/data.py:get_depth, broker/zerodha/api/data.py:get_market_depth, broker/shoonya/api/data.py:get_depth\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-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:\nbroker/firstock/api/data.py:get_history_chunked, broker/firstock/api/data.py:get_history\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-959dc775c4241ad4", "name": "Near-duplicate function bodies in 18 places", "shortDescription": {"text": "Near-duplicate function bodies in 18 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/api/order_api.py:place_smartorder_api, broker/wisdom/api/order_api.py:place_smartorder_api, broker/zebu/api/order_api.py:place_smartorder_api, broker/nubra/api/order_api.py:place_smartorder_api\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-fe1d9311d6aee734", "name": "Near-duplicate function bodies in 12 places", "shortDescription": {"text": "Near-duplicate function bodies in 12 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/api/order_api.py:cancel_all_orders_api, broker/wisdom/api/order_api.py:cancel_all_orders_api, broker/zebu/api/order_api.py:cancel_all_orders_api, broker/compositedge/api/order_api.py:cancel_all_orders_api\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-805362a4b2e61548", "name": "Near-duplicate function bodies in 28 places", "shortDescription": {"text": "Near-duplicate function bodies in 28 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/mapping/order_data.py:calculate_order_statistics, broker/wisdom/mapping/order_data.py:calculate_order_statistics, broker/zebu/mapping/order_data.py:calculate_order_statistics, broker/deltaexchange/mapping/order_data.py:calculate_order_statistics\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:\nbroker/firstock/streaming/firstock_adapter.py:unsubscribe, broker/tradejini/streaming/tradejini_adapter.py:unsubscribe, broker/pocketful/streaming/pocketful_adapter.py:unsubscribe, broker/paytm/streaming/paytm_adapter.py:unsubscribe\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-0d32ef4b8a679ae8", "name": "Near-duplicate function bodies in 24 places", "shortDescription": {"text": "Near-duplicate function bodies in 24 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/database/master_contract_db.py:init_db, broker/wisdom/database/master_contract_db.py:init_db, broker/zebu/database/master_contract_db.py:init_db, broker/compositedge/database/master_contract_db.py:init_db\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/firstock/database/master_contract_db.py:copy_from_dataframe, broker/iiflcapital/database/master_contract_db.py:copy_from_dataframe, broker/samco/database/master_contract_db.py:copy_from_dataframe\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:\nbroker/wisdom/api/auth_api.py:authenticate_broker, broker/compositedge/api/auth_api.py:authenticate_broker, broker/ibulls/api/auth_api.py:authenticate_broker, broker/iifl/api/auth_api.py:authenticate_broker\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/wisdom/api/data.py:get_quotes, broker/compositedge/api/data.py:get_quotes, broker/ibulls/api/data.py:get_quotes, broker/iifl/api/data.py:get_quotes\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-f341860ab6a90be6", "name": "Near-duplicate function bodies in 17 places", "shortDescription": {"text": "Near-duplicate function bodies in 17 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbroker/wisdom/api/data.py:get_multiquotes, broker/zerodha/api/data.py:get_multiquotes, broker/compositedge/api/data.py:get_multiquotes, broker/ibulls/api/data.py:get_multiquotes\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-8fbc8025895d84e3", "name": "Frontend route `/activate` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/activate` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a58ccd7a0fa578b", "name": "Frontend route `/error` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/error` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a3eddf7d46225b9", "name": "Frontend route `/rate-limited` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/rate-limited` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bdd20907c68905a", "name": "Frontend route `/broker/:broker/totp` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/broker/:broker/totp` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b705b80971443048", "name": "Frontend route `/broker/samco/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/broker/samco/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-119f80ebcf0de353", "name": "Frontend route `/:broker/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/:broker/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8007e7cc02f7733", "name": "Frontend route `/platforms` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/platforms` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae2da59a47b45c91", "name": "Frontend route `/analyzer` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/analyzer` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-51807700a6c7920f", "name": "Frontend route `/tools` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/tools` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf256815626ca9bb", "name": "Frontend route `/tools/strategy` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/tools/strategy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8372fed8ecfc6af5", "name": "Frontend route `/tools/strategy/portfolio` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/tools/strategy/portfolio` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6756c9dafdc17d74", "name": "Frontend route `/websocket/test` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/websocket/test` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d24ef41e40d67d15", "name": "Frontend route `/websocket/test/20` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/websocket/test/20` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-183a0d2e1a2fd8f3", "name": "Frontend route `/websocket/test/30` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/websocket/test/30` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df71ee4567a074b5", "name": "Frontend route `/websocket/test/50` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/websocket/test/50` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e9aa676253f006c", "name": "Frontend route `/strategy/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/strategy/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb6961687a5fb56f", "name": "Frontend route `/strategy/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/strategy/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d14498a343e518b5", "name": "Frontend route `/python/:strategyId/edit` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/python/:strategyId/edit` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa18c27322875a4c", "name": "Frontend route `/python/:strategyId/logs` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/python/:strategyId/logs` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b8067143c2d05e1", "name": "Frontend route `/python/:strategyId/schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/python/:strategyId/schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-807a59db0043d1bc", "name": "Frontend route `/chartink/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/chartink/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3c6a644007ea2ca", "name": "Frontend route `/chartink/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/chartink/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b90a3b793df19079", "name": "Frontend route `/historify/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/historify/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0426e05114f03a8", "name": "Frontend route `/historify/charts/:symbol` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/historify/charts/:symbol` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16de1fc8a097c268", "name": "Frontend route `/flow/editor/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/flow/editor/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e0625e50c6fff64", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/api/client.ts:7)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/api/client.ts:7)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:7` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-d360196839012024", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/utils/errorReporter.ts:74)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/utils/errorReporter.ts:74)"}, "fullDescription": {"text": "`frontend/src/utils/errorReporter.ts:74` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-909b2214eaa44184", "name": "Dangling fetch: GET /api/broker/capabilities (frontend/src/stores/brokerStore.ts:24)", "shortDescription": {"text": "Dangling fetch: GET /api/broker/capabilities (frontend/src/stores/brokerStore.ts:24)"}, "fullDescription": {"text": "`frontend/src/stores/brokerStore.ts:24` calls `GET /api/broker/capabilities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broker/capabilities`\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-cc9a27d76b70772c", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/stores/themeStore.ts:117)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/stores/themeStore.ts:117)"}, "fullDescription": {"text": "`frontend/src/stores/themeStore.ts:117` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-c8051af0e479f9eb", "name": "Dangling fetch: POST /auth/analyzer-toggle (frontend/src/stores/themeStore.ts:122)", "shortDescription": {"text": "Dangling fetch: POST /auth/analyzer-toggle (frontend/src/stores/themeStore.ts:122)"}, "fullDescription": {"text": "`frontend/src/stores/themeStore.ts:122` calls `POST /auth/analyzer-toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/analyzer-toggle`\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-ff4a3ded5daf8b2b", "name": "Dangling fetch: GET /auth/analyzer-mode (frontend/src/stores/themeStore.ts:150)", "shortDescription": {"text": "Dangling fetch: GET /auth/analyzer-mode (frontend/src/stores/themeStore.ts:150)"}, "fullDescription": {"text": "`frontend/src/stores/themeStore.ts:150` calls `GET /auth/analyzer-mode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/analyzer-mode`\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-cd0237f1d015f9eb", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useMarketStatus.ts:32)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useMarketStatus.ts:32)"}, "fullDescription": {"text": "`frontend/src/hooks/useMarketStatus.ts:32` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-4bb0a177afe42f63", "name": "Dangling fetch: GET /admin/api/timings (frontend/src/hooks/useMarketStatus.ts:60)", "shortDescription": {"text": "Dangling fetch: GET /admin/api/timings (frontend/src/hooks/useMarketStatus.ts:60)"}, "fullDescription": {"text": "`frontend/src/hooks/useMarketStatus.ts:60` calls `GET /admin/api/timings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/api/timings`\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-5d5c06fa3b1d7290", "name": "Dangling fetch: GET /admin/api/holidays (frontend/src/hooks/useMarketStatus.ts:61)", "shortDescription": {"text": "Dangling fetch: GET /admin/api/holidays (frontend/src/hooks/useMarketStatus.ts:61)"}, "fullDescription": {"text": "`frontend/src/hooks/useMarketStatus.ts:61` calls `GET /admin/api/holidays` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/api/holidays`\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-98902e8011e433c5", "name": "Dangling fetch: POST /api/v1/optionchain (frontend/src/hooks/useOptionChainPolling.ts:81)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/optionchain (frontend/src/hooks/useOptionChainPolling.ts:81)"}, "fullDescription": {"text": "`frontend/src/hooks/useOptionChainPolling.ts:81` calls `POST /api/v1/optionchain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/optionchain`\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-8382de4e41a859c0", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useWebSocketTester.ts:6)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useWebSocketTester.ts:6)"}, "fullDescription": {"text": "`frontend/src/hooks/useWebSocketTester.ts:6` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-2f6c55545843f913", "name": "Dangling fetch: GET /auth/app-info (frontend/src/components/layout/Footer.tsx:18)", "shortDescription": {"text": "Dangling fetch: GET /auth/app-info (frontend/src/components/layout/Footer.tsx:18)"}, "fullDescription": {"text": "`frontend/src/components/layout/Footer.tsx:18` calls `GET /auth/app-info` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/app-info`\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-a7bc9cb32868919e", "name": "Dangling fetch: GET /auth/session-status (frontend/src/components/auth/AuthSync.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /auth/session-status (frontend/src/components/auth/AuthSync.tsx:26)"}, "fullDescription": {"text": "`frontend/src/components/auth/AuthSync.tsx:26` calls `GET /auth/session-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/session-status`\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-12c7088a75b2a946", "name": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/HistorifyCharts.tsx:430)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/HistorifyCharts.tsx:430)"}, "fullDescription": {"text": "`frontend/src/pages/HistorifyCharts.tsx:430` calls `GET /historify/api/catalog` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/catalog`\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-cee0703ddd863ee1", "name": "Dangling fetch: GET /historify/api/data?${params} (frontend/src/pages/HistorifyCharts.tsx:452)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/data?${params} (frontend/src/pages/HistorifyCharts.tsx:452)"}, "fullDescription": {"text": "`frontend/src/pages/HistorifyCharts.tsx:452` calls `GET /historify/api/data?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/data`\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-a89c69cb82e13def", "name": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:96)", "shortDescription": {"text": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:96)"}, "fullDescription": {"text": "`frontend/src/pages/BrokerSelect.tsx:96` calls `GET /auth/broker-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/broker-config`\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-6879a80f63b63731", "name": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:146)"}, "fullDescription": {"text": "`frontend/src/pages/BrokerSelect.tsx:146` calls `GET /auth/broker-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/broker-config`\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-08f483ad7302b1a2", "name": "Dangling fetch: GET /sandbox/mypnl/api/data (frontend/src/pages/SandboxPnL.tsx:102)", "shortDescription": {"text": "Dangling fetch: GET /sandbox/mypnl/api/data (frontend/src/pages/SandboxPnL.tsx:102)"}, "fullDescription": {"text": "`frontend/src/pages/SandboxPnL.tsx:102` calls `GET /sandbox/mypnl/api/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sandbox/mypnl/api/data`\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-22dc39ea5fd1a612", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Sandbox.tsx:27)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Sandbox.tsx:27)"}, "fullDescription": {"text": "`frontend/src/pages/Sandbox.tsx:27` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-33e92331e43532ea", "name": "Dangling fetch: GET /sandbox/api/configs (frontend/src/pages/Sandbox.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /sandbox/api/configs (frontend/src/pages/Sandbox.tsx:94)"}, "fullDescription": {"text": "`frontend/src/pages/Sandbox.tsx:94` calls `GET /sandbox/api/configs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sandbox/api/configs`\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-6027da9b462edfdc", "name": "Dangling fetch: POST /sandbox/update (frontend/src/pages/Sandbox.tsx:141)", "shortDescription": {"text": "Dangling fetch: POST /sandbox/update (frontend/src/pages/Sandbox.tsx:141)"}, "fullDescription": {"text": "`frontend/src/pages/Sandbox.tsx:141` calls `POST /sandbox/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sandbox/update`\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-18c51d10c4e4b8a6", "name": "Dangling fetch: POST /sandbox/reset (frontend/src/pages/Sandbox.tsx:176)", "shortDescription": {"text": "Dangling fetch: POST /sandbox/reset (frontend/src/pages/Sandbox.tsx:176)"}, "fullDescription": {"text": "`frontend/src/pages/Sandbox.tsx:176` calls `POST /sandbox/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sandbox/reset`\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-bf9ac4834b3a030f", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/ApiKey.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/ApiKey.tsx:32)"}, "fullDescription": {"text": "`frontend/src/pages/ApiKey.tsx:32` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-554c232609cbe2b5", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/PnLTracker.tsx:11)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/PnLTracker.tsx:11)"}, "fullDescription": {"text": "`frontend/src/pages/PnLTracker.tsx:11` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-37c84739e8c14ca5", "name": "Dangling fetch: GET /playground/api-key (frontend/src/pages/GoCharting.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/GoCharting.tsx:85)"}, "fullDescription": {"text": "`frontend/src/pages/GoCharting.tsx:85` calls `GET /playground/api-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/playground/api-key`\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-4e13684b9d42aee5", "name": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/GoCharting.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/GoCharting.tsx:115)"}, "fullDescription": {"text": "`frontend/src/pages/GoCharting.tsx:115` calls `GET /search/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-9b12f6304c67213d", "name": "Dangling fetch: GET /search/api/underlyings?exchange=${exchange} (frontend/src/pages/Token.tsx:153)", "shortDescription": {"text": "Dangling fetch: GET /search/api/underlyings?exchange=${exchange} (frontend/src/pages/Token.tsx:153)"}, "fullDescription": {"text": "`frontend/src/pages/Token.tsx:153` calls `GET /search/api/underlyings?exchange=${exchange}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/underlyings`\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-2f545bd1ad299d7e", "name": "Dangling fetch: GET /search/api/expiries?exchange=${exchange} (frontend/src/pages/Token.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /search/api/expiries?exchange=${exchange} (frontend/src/pages/Token.tsx:154)"}, "fullDescription": {"text": "`frontend/src/pages/Token.tsx:154` calls `GET /search/api/expiries?exchange=${exchange}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/expiries`\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-1b6ebd872d28aa14", "name": "Dangling fetch: GET /search/api/expiries?exchange=${exchange}&underlying=${underlying} (frontend/src/pages/Token.tsx:190", "shortDescription": {"text": "Dangling fetch: GET /search/api/expiries?exchange=${exchange}&underlying=${underlying} (frontend/src/pages/Token.tsx:190)"}, "fullDescription": {"text": "`frontend/src/pages/Token.tsx:190` calls `GET /search/api/expiries?exchange=${exchange}&underlying=${underlying}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/expiries`\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-0077c732bb1554a5", "name": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Token.tsx:231)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Token.tsx:231)"}, "fullDescription": {"text": "`frontend/src/pages/Token.tsx:231` calls `GET /search/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-7fc0d15e30b26164", "name": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:132)", "shortDescription": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:132)"}, "fullDescription": {"text": "`frontend/src/pages/ResetPassword.tsx:132` calls `POST /auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset-password`\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-7f76caac157d8466", "name": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:162)", "shortDescription": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:162)"}, "fullDescription": {"text": "`frontend/src/pages/ResetPassword.tsx:162` calls `POST /auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset-password`\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-ee38dced3143cc40", "name": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:197)", "shortDescription": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:197)"}, "fullDescription": {"text": "`frontend/src/pages/ResetPassword.tsx:197` calls `POST /auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset-password`\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-e2c73afc92945666", "name": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:231)", "shortDescription": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:231)"}, "fullDescription": {"text": "`frontend/src/pages/ResetPassword.tsx:231` calls `POST /auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset-password`\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-6c05bc2cbece4a43", "name": "Dangling fetch: POST /samco/callback (frontend/src/pages/SamcoAuth.tsx:266)", "shortDescription": {"text": "Dangling fetch: POST /samco/callback (frontend/src/pages/SamcoAuth.tsx:266)"}, "fullDescription": {"text": "`frontend/src/pages/SamcoAuth.tsx:266` calls `POST /samco/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/samco/callback`\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-09dfed266c69d522", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Playground.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Playground.tsx:70)"}, "fullDescription": {"text": "`frontend/src/pages/Playground.tsx:70` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-06ea881757fe7e25", "name": "Dangling fetch: GET /playground/api-key (frontend/src/pages/Playground.tsx:253)", "shortDescription": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/Playground.tsx:253)"}, "fullDescription": {"text": "`frontend/src/pages/Playground.tsx:253` calls `GET /playground/api-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/playground/api-key`\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-b54c4776426cbe2c", "name": "Dangling fetch: GET /playground/endpoints (frontend/src/pages/Playground.tsx:267)", "shortDescription": {"text": "Dangling fetch: GET /playground/endpoints (frontend/src/pages/Playground.tsx:267)"}, "fullDescription": {"text": "`frontend/src/pages/Playground.tsx:267` calls `GET /playground/endpoints` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/playground/endpoints`\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-be7d51893867a646", "name": "Dangling fetch: GET /search/api/search?${params.toString()} (frontend/src/pages/Search.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params.toString()} (frontend/src/pages/Search.tsx:121)"}, "fullDescription": {"text": "`frontend/src/pages/Search.tsx:121` calls `GET /search/api/search?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-d83482daa2e23a0a", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/WebSocketTest.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/WebSocketTest.tsx:43)"}, "fullDescription": {"text": "`frontend/src/pages/WebSocketTest.tsx:43` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-ff5b183fd4d6518a", "name": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/WebSocketTest.tsx:544)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/WebSocketTest.tsx:544)"}, "fullDescription": {"text": "`frontend/src/pages/WebSocketTest.tsx:544` calls `GET /search/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-1b51198e11e15e9b", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Setup.tsx:96)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Setup.tsx:96)"}, "fullDescription": {"text": "`frontend/src/pages/Setup.tsx:96` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-8b3b75123d6e8abb", "name": "Dangling fetch: GET /auth/sso-config (frontend/src/pages/Login.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /auth/sso-config (frontend/src/pages/Login.tsx:33)"}, "fullDescription": {"text": "`frontend/src/pages/Login.tsx:33` calls `GET /auth/sso-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/sso-config`\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-0dfda46358a258b1", "name": "Dangling fetch: GET /auth/check-setup (frontend/src/pages/Login.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /auth/check-setup (frontend/src/pages/Login.tsx:44)"}, "fullDescription": {"text": "`frontend/src/pages/Login.tsx:44` calls `GET /auth/check-setup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/check-setup`\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-f9ce093afde988fb", "name": "Dangling fetch: GET /auth/session-status (frontend/src/pages/Login.tsx:54)", "shortDescription": {"text": "Dangling fetch: GET /auth/session-status (frontend/src/pages/Login.tsx:54)"}, "fullDescription": {"text": "`frontend/src/pages/Login.tsx:54` calls `GET /auth/session-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/session-status`\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-216e50cee53c1e95", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Login.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Login.tsx:92)"}, "fullDescription": {"text": "`frontend/src/pages/Login.tsx:92` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-2073aa91f806950b", "name": "Dangling fetch: POST /auth/login (frontend/src/pages/Login.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /auth/login (frontend/src/pages/Login.tsx:111)"}, "fullDescription": {"text": "`frontend/src/pages/Login.tsx:111` calls `POST /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/login`\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-706baec70d231233", "name": "Dangling fetch: GET /playground/api-key (frontend/src/pages/TradingView.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/TradingView.tsx:87)"}, "fullDescription": {"text": "`frontend/src/pages/TradingView.tsx:87` calls `GET /playground/api-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/playground/api-key`\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-c1af4bc5c8b4fd45", "name": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/TradingView.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/TradingView.tsx:118)"}, "fullDescription": {"text": "`frontend/src/pages/TradingView.tsx:118` calls `GET /search/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-2c4d29ea3989220d", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:39)"}, "fullDescription": {"text": "`frontend/src/pages/Activate.tsx:39` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-328637854f255825", "name": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:45)", "shortDescription": {"text": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:45)"}, "fullDescription": {"text": "`frontend/src/pages/Activate.tsx:45` calls `POST /auth/activate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/activate`\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-f5d29b819598d181", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:74)"}, "fullDescription": {"text": "`frontend/src/pages/Activate.tsx:74` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-af9f66bb239d88e2", "name": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:81)", "shortDescription": {"text": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:81)"}, "fullDescription": {"text": "`frontend/src/pages/Activate.tsx:81` calls `POST /auth/activate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/activate`\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-287b0deb905392c9", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Historify.tsx:227)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Historify.tsx:227)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:227` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-ec08c4d4e1a12fb4", "name": "Dangling fetch: GET /historify/api/watchlist (frontend/src/pages/Historify.tsx:571)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/watchlist (frontend/src/pages/Historify.tsx:571)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:571` calls `GET /historify/api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/watchlist`\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-38a6d88aab92134a", "name": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/Historify.tsx:580)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/Historify.tsx:580)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:580` calls `GET /historify/api/catalog` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/catalog`\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-2e6058949d62395c", "name": "Dangling fetch: GET /historify/api/intervals (frontend/src/pages/Historify.tsx:589)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/intervals (frontend/src/pages/Historify.tsx:589)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:589` calls `GET /historify/api/intervals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/intervals`\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-0b64418b947bbdc5", "name": "Dangling fetch: GET /historify/api/historify-intervals (frontend/src/pages/Historify.tsx:598)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/historify-intervals (frontend/src/pages/Historify.tsx:598)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:598` calls `GET /historify/api/historify-intervals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/historify-intervals`\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-645a946cbc1178c5", "name": "Dangling fetch: GET /historify/api/stats (frontend/src/pages/Historify.tsx:613)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/stats (frontend/src/pages/Historify.tsx:613)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:613` calls `GET /historify/api/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/stats`\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-27e536fcc68b3a2b", "name": "Dangling fetch: GET /historify/api/exchanges (frontend/src/pages/Historify.tsx:622)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/exchanges (frontend/src/pages/Historify.tsx:622)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:622` calls `GET /historify/api/exchanges` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/exchanges`\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-b9479a813df4974a", "name": "Dangling fetch: GET /historify/api/jobs?limit=50 (frontend/src/pages/Historify.tsx:632)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/jobs?limit=50 (frontend/src/pages/Historify.tsx:632)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:632` calls `GET /historify/api/jobs?limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs`\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-4a778760a89f4a4b", "name": "Dangling fetch: GET /historify/api/schedules (frontend/src/pages/Historify.tsx:645)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/schedules (frontend/src/pages/Historify.tsx:645)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:645` calls `GET /historify/api/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules`\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-4f35dd42469d35db", "name": "Dangling fetch: GET /historify/api/schedules/${scheduleId}/executions?limit=10 (frontend/src/pages/Historify.tsx:656)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/schedules/${scheduleId}/executions?limit=10 (frontend/src/pages/Historify.tsx:656)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:656` calls `GET /historify/api/schedules/${scheduleId}/executions?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules/<p>/executions`\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-b5885a0944fb2479", "name": "Dangling fetch: DELETE /historify/api/schedules/${scheduleId} (frontend/src/pages/Historify.tsx:749)", "shortDescription": {"text": "Dangling fetch: DELETE /historify/api/schedules/${scheduleId} (frontend/src/pages/Historify.tsx:749)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:749` calls `DELETE /historify/api/schedules/${scheduleId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules/<p>`\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-859d75f1b780d6b4", "name": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:770)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:770)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:770` calls `POST /historify/api/schedules/${schedule.id}/${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules/<p>/<p>`\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-191edfb475aeea54", "name": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:791)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:791)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:791` calls `POST /historify/api/schedules/${schedule.id}/${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules/<p>/<p>`\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-afb285d0fda7c48e", "name": "Dangling fetch: POST /historify/api/schedules/${scheduleId}/trigger (frontend/src/pages/Historify.tsx:811)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/schedules/${scheduleId}/trigger (frontend/src/pages/Historify.tsx:811)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:811` calls `POST /historify/api/schedules/${scheduleId}/trigger` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/schedules/<p>/trigger`\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-d7b6ca26ca1dafa9", "name": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Historify.tsx:858)", "shortDescription": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Historify.tsx:858)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:858` calls `GET /search/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/api/search`\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-a12c1518b13ce740", "name": "Dangling fetch: POST /historify/api/watchlist (frontend/src/pages/Historify.tsx:875)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/watchlist (frontend/src/pages/Historify.tsx:875)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:875` calls `POST /historify/api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/watchlist`\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-615720e41e51df30", "name": "Dangling fetch: DELETE /historify/api/watchlist (frontend/src/pages/Historify.tsx:898)", "shortDescription": {"text": "Dangling fetch: DELETE /historify/api/watchlist (frontend/src/pages/Historify.tsx:898)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:898` calls `DELETE /historify/api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/watchlist`\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-272303f7b1e8d4c5", "name": "Dangling fetch: POST /historify/api/watchlist/bulk (frontend/src/pages/Historify.tsx:934)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/watchlist/bulk (frontend/src/pages/Historify.tsx:934)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:934` calls `POST /historify/api/watchlist/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/watchlist/bulk`\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-b3ae10c498e0ec2e", "name": "Dangling fetch: GET /historify/api/fno/underlyings?exchange=${fnoExchange} (frontend/src/pages/Historify.tsx:960)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/fno/underlyings?exchange=${fnoExchange} (frontend/src/pages/Historify.tsx:960)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:960` calls `GET /historify/api/fno/underlyings?exchange=${fnoExchange}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/fno/underlyings`\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-2c9b358f98c5a6f6", "name": "Dangling fetch: GET /historify/api/fno/expiries?${params} (frontend/src/pages/Historify.tsx:977)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/fno/expiries?${params} (frontend/src/pages/Historify.tsx:977)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:977` calls `GET /historify/api/fno/expiries?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/fno/expiries`\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-ad7b6551dd3013fb", "name": "Dangling fetch: GET /historify/api/fno/chain?${params} (frontend/src/pages/Historify.tsx:1001)", "shortDescription": {"text": "Dangling fetch: GET /historify/api/fno/chain?${params} (frontend/src/pages/Historify.tsx:1001)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1001` calls `GET /historify/api/fno/chain?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/fno/chain`\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-b69abcc28f11090f", "name": "Dangling fetch: POST /historify/api/jobs (frontend/src/pages/Historify.tsx:1026)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/jobs (frontend/src/pages/Historify.tsx:1026)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1026` calls `POST /historify/api/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs`\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-b2a3e5a1918d45d1", "name": "Dangling fetch: POST /historify/api/jobs/${jobId}/pause (frontend/src/pages/Historify.tsx:1064)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/pause (frontend/src/pages/Historify.tsx:1064)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1064` calls `POST /historify/api/jobs/${jobId}/pause` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs/<p>/pause`\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-f95ca10dfe7d41bb", "name": "Dangling fetch: POST /historify/api/jobs/${jobId}/resume (frontend/src/pages/Historify.tsx:1084)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/resume (frontend/src/pages/Historify.tsx:1084)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1084` calls `POST /historify/api/jobs/${jobId}/resume` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs/<p>/resume`\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-68c84d560cdeecf0", "name": "Dangling fetch: POST /historify/api/jobs/${jobId}/cancel (frontend/src/pages/Historify.tsx:1104)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/cancel (frontend/src/pages/Historify.tsx:1104)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1104` calls `POST /historify/api/jobs/${jobId}/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs/<p>/cancel`\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-2e512b2bb6ca99b2", "name": "Dangling fetch: POST /historify/api/jobs/${jobId}/retry (frontend/src/pages/Historify.tsx:1124)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/retry (frontend/src/pages/Historify.tsx:1124)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1124` calls `POST /historify/api/jobs/${jobId}/retry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs/<p>/retry`\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-59e14e9c3d7f8ca2", "name": "Dangling fetch: DELETE /historify/api/jobs/${jobId} (frontend/src/pages/Historify.tsx:1144)", "shortDescription": {"text": "Dangling fetch: DELETE /historify/api/jobs/${jobId} (frontend/src/pages/Historify.tsx:1144)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1144` calls `DELETE /historify/api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/jobs/<p>`\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-167e6cc8630382b5", "name": "Dangling fetch: DELETE /historify/api/delete (frontend/src/pages/Historify.tsx:1169)", "shortDescription": {"text": "Dangling fetch: DELETE /historify/api/delete (frontend/src/pages/Historify.tsx:1169)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1169` calls `DELETE /historify/api/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/delete`\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-060a729043467828", "name": "Dangling fetch: POST /historify/api/delete/bulk (frontend/src/pages/Historify.tsx:1201)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/delete/bulk (frontend/src/pages/Historify.tsx:1201)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1201` calls `POST /historify/api/delete/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/delete/bulk`\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-69a6ebd6803785b7", "name": "Dangling fetch: POST /historify/api/watchlist/bulk/delete (frontend/src/pages/Historify.tsx:1234)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/watchlist/bulk/delete (frontend/src/pages/Historify.tsx:1234)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1234` calls `POST /historify/api/watchlist/bulk/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/watchlist/bulk/delete`\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-47d4c87a93ce7ebe", "name": "Dangling fetch: POST /historify/api/upload (frontend/src/pages/Historify.tsx:1287)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/upload (frontend/src/pages/Historify.tsx:1287)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1287` calls `POST /historify/api/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/upload`\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-2b1fa5ee065601a1", "name": "Dangling fetch: POST /historify/api/export/bulk (frontend/src/pages/Historify.tsx:1327)", "shortDescription": {"text": "Dangling fetch: POST /historify/api/export/bulk (frontend/src/pages/Historify.tsx:1327)"}, "fullDescription": {"text": "`frontend/src/pages/Historify.tsx:1327` calls `POST /historify/api/export/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/historify/api/export/bulk`\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-bb0906cd1b51a4ae", "name": "Dangling fetch: GET /auth/dashboard-data (frontend/src/pages/Dashboard.tsx:75)", "shortDescription": {"text": "Dangling fetch: GET /auth/dashboard-data (frontend/src/pages/Dashboard.tsx:75)"}, "fullDescription": {"text": "`frontend/src/pages/Dashboard.tsx:75` calls `GET /auth/dashboard-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/dashboard-data`\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-e194f3c9e1b24884", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/MasterContract.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/MasterContract.tsx:22)"}, "fullDescription": {"text": "`frontend/src/pages/MasterContract.tsx:22` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-8c4a5306c744ea88", "name": "Dangling fetch: GET /auth/csrf-token (frontend/src/lib/MarketDataManager.ts:77)", "shortDescription": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/lib/MarketDataManager.ts:77)"}, "fullDescription": {"text": "`frontend/src/lib/MarketDataManager.ts:77` calls `GET /auth/csrf-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/csrf-token`\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-49191e07bfdacf55", "name": "Dangling fetch: POST /api/v1/multiquotes (frontend/src/lib/MarketDataManager.ts:768)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/multiquotes (frontend/src/lib/MarketDataManager.ts:768)"}, "fullDescription": {"text": "`frontend/src/lib/MarketDataManager.ts:768` calls `POST /api/v1/multiquotes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/multiquotes`\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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`examples/python/flask_optionchain.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-6f3176244cc0936c", "name": "Unused endpoint: ANY /api/logs", "shortDescription": {"text": "Unused endpoint: ANY /api/logs"}, "fullDescription": {"text": "`blueprints/latency.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-ec3442aa0b6ba39d", "name": "Unused endpoint: ANY /api/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/stats"}, "fullDescription": {"text": "`blueprints/latency.py` declares `ANY /api/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac43026d647e6efe", "name": "Unused endpoint: ANY /api/broker/<broker>/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/broker/<broker>/stats"}, "fullDescription": {"text": "`blueprints/latency.py` declares `ANY /api/broker/<broker>/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10d6c2f14a0f976e", "name": "Unused endpoint: ANY /export", "shortDescription": {"text": "Unused endpoint: ANY /export"}, "fullDescription": {"text": "`blueprints/latency.py` declares `ANY /export` 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-d27ef6e00b18bdda", "name": "Unused endpoint: ANY /api/strategy-portfolio", "shortDescription": {"text": "Unused endpoint: ANY /api/strategy-portfolio"}, "fullDescription": {"text": "`blueprints/strategy_portfolio.py` declares `ANY /api/strategy-portfolio` 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-8a4269c631838de0", "name": "Unused endpoint: ANY /api/strategy-portfolio/<int:entry_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/strategy-portfolio/<int:entry_id>"}, "fullDescription": {"text": "`blueprints/strategy_portfolio.py` declares `ANY /api/strategy-portfolio/<int:entry_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-2d12b12e8119e72f", "name": "Unused endpoint: ANY /credentials", "shortDescription": {"text": "Unused endpoint: ANY /credentials"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials` 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-03da479ff5fe9b37", "name": "Unused endpoint: ANY /capabilities", "shortDescription": {"text": "Unused endpoint: ANY /capabilities"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /capabilities` 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-f53006350df2366a", "name": "Unused endpoint: ANY /credentials/list", "shortDescription": {"text": "Unused endpoint: ANY /credentials/list"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/list` 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-7ee48c944aa87cb0", "name": "Unused endpoint: ANY /credentials/save", "shortDescription": {"text": "Unused endpoint: ANY /credentials/save"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/save` 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-0473f8ea5acbd194", "name": "Unused endpoint: ANY /credentials/<broker>/activate", "shortDescription": {"text": "Unused endpoint: ANY /credentials/<broker>/activate"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/<broker>/activate` 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-eac221bdc0d9df88", "name": "Unused endpoint: ANY /credentials/request-v4-ip", "shortDescription": {"text": "Unused endpoint: ANY /credentials/request-v4-ip"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/request-v4-ip` 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-406378f9c9ac6a6b", "name": "Unused endpoint: ANY /credentials/<broker>", "shortDescription": {"text": "Unused endpoint: ANY /credentials/<broker>"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/<broker>` 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-d9421953e94d6e95", "name": "Unused endpoint: ANY /credentials/<broker>/instructions", "shortDescription": {"text": "Unused endpoint: ANY /credentials/<broker>/instructions"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/<broker>/instructions` 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-4393b87c0a707cb7", "name": "Unused endpoint: ANY /credentials/host-info", "shortDescription": {"text": "Unused endpoint: ANY /credentials/host-info"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/host-info` 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-c2970ca1a2cad5cf", "name": "Unused endpoint: ANY /supported", "shortDescription": {"text": "Unused endpoint: ANY /supported"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /supported` 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-7ef6c71cc86602d4", "name": "Unused endpoint: ANY /credentials/auto-login-status", "shortDescription": {"text": "Unused endpoint: ANY /credentials/auto-login-status"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/auto-login-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-64e24ff71cfb575e", "name": "Unused endpoint: ANY /credentials/<broker>/auto-login", "shortDescription": {"text": "Unused endpoint: ANY /credentials/<broker>/auto-login"}, "fullDescription": {"text": "`blueprints/broker_credentials.py` declares `ANY /credentials/<broker>/auto-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-9eb9835fae2f3ef6", "name": "Unused endpoint: ANY /api/freeze", "shortDescription": {"text": "Unused endpoint: ANY /api/freeze"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/freeze` 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-2b03058812dde661", "name": "Unused endpoint: ANY /api/freeze/<int:id>", "shortDescription": {"text": "Unused endpoint: ANY /api/freeze/<int:id>"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/freeze/<int: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-ae724d93deace16a", "name": "Unused endpoint: ANY /api/freeze/upload", "shortDescription": {"text": "Unused endpoint: ANY /api/freeze/upload"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/freeze/upload` 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-463d9abb580c138c", "name": "Unused endpoint: ANY /api/holidays", "shortDescription": {"text": "Unused endpoint: ANY /api/holidays"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/holidays` 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-4b73acf54004d016", "name": "Unused endpoint: ANY /api/holidays/<int:id>", "shortDescription": {"text": "Unused endpoint: ANY /api/holidays/<int:id>"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/holidays/<int: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-66df8609cf979141", "name": "Unused endpoint: ANY /api/timings", "shortDescription": {"text": "Unused endpoint: ANY /api/timings"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/timings` 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-5c0b1f242cd03a58", "name": "Unused endpoint: ANY /api/timings/<exchange>", "shortDescription": {"text": "Unused endpoint: ANY /api/timings/<exchange>"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/timings/<exchange>` 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-2e5f8faee4e15c04", "name": "Unused endpoint: ANY /api/timings/check", "shortDescription": {"text": "Unused endpoint: ANY /api/timings/check"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/timings/check` 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-35703b0b288a5396", "name": "Unused endpoint: ANY /api/errors", "shortDescription": {"text": "Unused endpoint: ANY /api/errors"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/errors` 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-8e6aa986bfe15188", "name": "Unused endpoint: ANY /api/errors/client", "shortDescription": {"text": "Unused endpoint: ANY /api/errors/client"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/errors/client` 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-697429ca8cec85ad", "name": "Unused endpoint: ANY /api/errors/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/errors/stats"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/errors/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c734bb807f62aaf", "name": "Unused endpoint: ANY /api/errors/groups", "shortDescription": {"text": "Unused endpoint: ANY /api/errors/groups"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/errors/groups` 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-2e53edb2d50d0ff7", "name": "Unused endpoint: ANY /api/system", "shortDescription": {"text": "Unused endpoint: ANY /api/system"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/system` 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-e4a782fedca4ccaf", "name": "Unused endpoint: ANY /api/system/diagnostics", "shortDescription": {"text": "Unused endpoint: ANY /api/system/diagnostics"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/system/diagnostics` 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-67971b558431c4d2", "name": "Unused endpoint: ANY /api/system/report", "shortDescription": {"text": "Unused endpoint: ANY /api/system/report"}, "fullDescription": {"text": "`blueprints/admin.py` declares `ANY /api/system/report` 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-709036c0923af2ec", "name": "Unused endpoint: ANY /new", "shortDescription": {"text": "Unused endpoint: ANY /new"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /new` 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-c0f642946c22251a", "name": "Unused endpoint: ANY /<int:strategy_id>", "shortDescription": {"text": "Unused endpoint: ANY /<int:strategy_id>"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /<int:strategy_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-ebb8a71915dade0e", "name": "Unused endpoint: ANY /<int:strategy_id>/delete", "shortDescription": {"text": "Unused endpoint: ANY /<int:strategy_id>/delete"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /<int:strategy_id>/delete` 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-454076aa944c7dbc", "name": "Unused endpoint: ANY /<int:strategy_id>/configure", "shortDescription": {"text": "Unused endpoint: ANY /<int:strategy_id>/configure"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /<int:strategy_id>/configure` 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-b05b00af2bc31988", "name": "Unused endpoint: ANY /<int:strategy_id>/symbol/<int:mapping_id>/delete", "shortDescription": {"text": "Unused endpoint: ANY /<int:strategy_id>/symbol/<int:mapping_id>/delete"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /<int:strategy_id>/symbol/<int:mapping_id>/delete` 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-e18eb47f8d238cc4", "name": "Unused endpoint: ANY /<int:strategy_id>/toggle", "shortDescription": {"text": "Unused endpoint: ANY /<int:strategy_id>/toggle"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /<int: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-117531c0d0465186", "name": "Unused endpoint: ANY /search", "shortDescription": {"text": "Unused endpoint: ANY /search"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /search` 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-543849efa65e2774", "name": "Unused endpoint: ANY /api/strategies", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /api/strategies` 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-604cab7e8c199d62", "name": "Unused endpoint: ANY /api/strategy/<int:strategy_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/strategy/<int:strategy_id>"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /api/strategy/<int:strategy_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-ff25b5bbf13a3d4b", "name": "Unused endpoint: ANY /api/strategy", "shortDescription": {"text": "Unused endpoint: ANY /api/strategy"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /api/strategy` 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-f6f89b8a6d76cd8d", "name": "Unused endpoint: ANY /api/strategy/<int:strategy_id>/toggle", "shortDescription": {"text": "Unused endpoint: ANY /api/strategy/<int:strategy_id>/toggle"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /api/strategy/<int: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-c63666721f177394", "name": "Unused endpoint: ANY /webhook/<webhook_id>", "shortDescription": {"text": "Unused endpoint: ANY /webhook/<webhook_id>"}, "fullDescription": {"text": "`blueprints/chartink.py` declares `ANY /webhook/<webhook_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-07b2b818a7405092", "name": "Unused endpoint: ANY /api/instance/info", "shortDescription": {"text": "Unused endpoint: ANY /api/instance/info"}, "fullDescription": {"text": "`blueprints/instance.py` declares `ANY /api/instance/info` 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-74f4e3e32d52639c", "name": "Unused endpoint: ANY /api/instance/audit/verify", "shortDescription": {"text": "Unused endpoint: ANY /api/instance/audit/verify"}, "fullDescription": {"text": "`blueprints/instance.py` declares `ANY /api/instance/audit/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-8d537f8ac49530fa", "name": "Unused endpoint: ANY /api/instance/audit/head", "shortDescription": {"text": "Unused endpoint: ANY /api/instance/audit/head"}, "fullDescription": {"text": "`blueprints/instance.py` declares `ANY /api/instance/audit/head` 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-ada543483cc58d71", "name": "Unused endpoint: ANY /api/instance/audit", "shortDescription": {"text": "Unused endpoint: ANY /api/instance/audit"}, "fullDescription": {"text": "`blueprints/instance.py` declares `ANY /api/instance/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}}]}}, "automationDetails": {"id": "repobility/24115"}, "properties": {"repository": "alpha112233/alphago_live", "repoUrl": "https://github.com/alpha112233/alphago_live", "branch": "main"}, "results": [{"ruleId": "scanner-662862496e2aa1bc", "level": "note", "message": {"text": "Possibly dead Python function: start_engine"}, "properties": {"repobilityId": "b83fd8f31dbe7322", "scanner": "scanner-primary", "fingerprint": "662862496e2aa1bc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:668"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46e0fe45cd7e7c3a", "level": "note", "message": {"text": "Possibly dead Python function: start_scheduler"}, "properties": {"repobilityId": "0591c4bd684fd589", "scanner": "scanner-primary", "fingerprint": "46e0fe45cd7e7c3a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:672"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-80cba0789f3266db", "level": "note", "message": {"text": "Possibly dead Python function: run_catchup"}, "properties": {"repobilityId": "ddea2caaca8749e7", "scanner": "scanner-primary", "fingerprint": "80cba0789f3266db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:676"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8fbde6c5b8ff19d1", "level": "note", "message": {"text": "Possibly dead Python function: format_expiry_date"}, "properties": {"repobilityId": "e0898826e2f72fd6", "scanner": "scanner-primary", "fingerprint": "8fbde6c5b8ff19d1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/firstock/database/master_contract_db.py:454"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc003b06e06138a3", "level": "note", "message": {"text": "Possibly dead Python function: format_symbol"}, "properties": {"repobilityId": "1107a52e5b7acb60", "scanner": "scanner-primary", "fingerprint": "bc003b06e06138a3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/firstock/database/master_contract_db.py:470"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc6521fbe5a57553", "level": "note", "message": {"text": "Possibly dead Python function: handle_strike_price"}, "properties": {"repobilityId": "8204cbdef956c37d", "scanner": "scanner-primary", "fingerprint": "dc6521fbe5a57553", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/firstock/database/master_contract_db.py:489"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd7e29191c5b91e5", "level": "note", "message": {"text": "Possibly dead Python function: resubscribe_all"}, "properties": {"repobilityId": "cedf522dc3a99c7f", "scanner": "scanner-primary", "fingerprint": "dd7e29191c5b91e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/wisdom/streaming/wisdom_websocket.py:545"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad9b47da21ac9c9c", "level": "note", "message": {"text": "Possibly dead Python function: clear_market_data_cache"}, "properties": {"repobilityId": "c4d9d416effc846e", "scanner": "scanner-primary", "fingerprint": "ad9b47da21ac9c9c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/streaming/zebu_adapter.py:1009"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b32ae9f6417a8233", "level": "note", "message": {"text": "Possibly dead Python function: format_expiry_date"}, "properties": {"repobilityId": "e0898826e2f72fd6", "scanner": "scanner-primary", "fingerprint": "b32ae9f6417a8233", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/database/master_contract_db.py:731"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92a1e3233699081a", "level": "note", "message": {"text": "Possibly dead Python function: format_symbol"}, "properties": {"repobilityId": "1107a52e5b7acb60", "scanner": "scanner-primary", "fingerprint": "92a1e3233699081a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/database/master_contract_db.py:778"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee018272262e7b45", "level": "note", "message": {"text": "Possibly dead Python function: handle_strike_price"}, "properties": {"repobilityId": "8204cbdef956c37d", "scanner": "scanner-primary", "fingerprint": "ee018272262e7b45", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/database/master_contract_db.py:766"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-199d2db06504a300", "level": "note", "message": {"text": "Possibly dead Python function: extract_name"}, "properties": {"repobilityId": "e10698406b55a50a", "scanner": "scanner-primary", "fingerprint": "199d2db06504a300", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/database/master_contract_db.py:742"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-909b50752e718ea9", "level": "note", "message": {"text": "Possibly dead Python function: extract_instrument_type"}, "properties": {"repobilityId": "c78d4483e2edc7cd", "scanner": "scanner-primary", "fingerprint": "909b50752e718ea9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/zebu/database/master_contract_db.py:752"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b4f4cd2f10eab75", "level": "note", "message": {"text": "Possibly dead Python function: place_bracket_order_api"}, "properties": {"repobilityId": "ee5acb3324d44f0f", "scanner": "scanner-primary", "fingerprint": "0b4f4cd2f10eab75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/deltaexchange/api/order_api.py:466"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a9ddcf2d2d66e19", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useLiveQuote.ts:95"}, "properties": {"repobilityId": "43b098c30ca7068f", "scanner": "scanner-primary", "fingerprint": "6a9ddcf2d2d66e19", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-078a3b590b0cb46b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/ExecuteBasketDialog.tsx:354"}, "properties": {"repobilityId": "6c969396fb11ac4d", "scanner": "scanner-primary", "fingerprint": "078a3b590b0cb46b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cf695cf31508fcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/trading/PlaceOrderDialog.tsx:285"}, "properties": {"repobilityId": "70be7fbc483d49eb", "scanner": "scanner-primary", "fingerprint": "1cf695cf31508fcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1d9bf4d624b12a1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/panels/NodePalette.tsx:76"}, "properties": {"repobilityId": "c3d027e36e453274", "scanner": "scanner-primary", "fingerprint": "b1d9bf4d624b12a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5f29d0511f9715e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/BaseNode.tsx:108"}, "properties": {"repobilityId": "5495d03356e6ee68", "scanner": "scanner-primary", "fingerprint": "e5f29d0511f9715e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e919461ea709d4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/TimeConditionNode.tsx:60"}, "properties": {"repobilityId": "f1aad422bd69d5a4", "scanner": "scanner-primary", "fingerprint": "5e919461ea709d4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f79c0087d67106ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/MultiQuotesNode.tsx:58"}, "properties": {"repobilityId": "ac043cb50be514a1", "scanner": "scanner-primary", "fingerprint": "f79c0087d67106ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b45d244218801ed9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/HttpRequestNode.tsx:64"}, "properties": {"repobilityId": "af92847f60deda30", "scanner": "scanner-primary", "fingerprint": "b45d244218801ed9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5baf9f0fdd965c57", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/flow/nodes/WaitUntilNode.tsx:50"}, "properties": {"repobilityId": "1149c95972620791", "scanner": "scanner-primary", "fingerprint": "5baf9f0fdd965c57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a43ff4ea794be28", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/playground/ConnectionPanel.tsx:125"}, "properties": {"repobilityId": "f502703284eec37f", "scanner": "scanner-primary", "fingerprint": "6a43ff4ea794be28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a76cdc0f87898812", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PositionsPanel.tsx:148"}, "properties": {"repobilityId": "e5fb55e109636a11", "scanner": "scanner-primary", "fingerprint": "a76cdc0f87898812", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec71596c7a32d944", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/strategy-builder/PnLTab.tsx:297"}, "properties": {"repobilityId": "2d37ef32902765b8", "scanner": "scanner-primary", "fingerprint": "ec71596c7a32d944", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b6da3ec5a739d10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Analyzer.tsx:314"}, "properties": {"repobilityId": "197db143be21d419", "scanner": "scanner-primary", "fingerprint": "1b6da3ec5a739d10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7253c3110e33de01", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ApiKey.tsx:196"}, "properties": {"repobilityId": "d3e9ea32a8afcdf8", "scanner": "scanner-primary", "fingerprint": "7253c3110e33de01", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57f7f88850a36eec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Token.tsx:430"}, "properties": {"repobilityId": "c9e8a5019ea1eaed", "scanner": "scanner-primary", "fingerprint": "57f7f88850a36eec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2d48319a62f265b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Playground.tsx:676"}, "properties": {"repobilityId": "fe6bcba06f2e60e8", "scanner": "scanner-primary", "fingerprint": "e2d48319a62f265b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9dc8364038b32b6a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Search.tsx:507"}, "properties": {"repobilityId": "c14acbc58e2ea8e3", "scanner": "scanner-primary", "fingerprint": "9dc8364038b32b6a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a0060f5ed0bdfda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Logs.tsx:383"}, "properties": {"repobilityId": "5e75aef4d2e1d8f8", "scanner": "scanner-primary", "fingerprint": "9a0060f5ed0bdfda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4b278bbfa174a7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Profile.tsx:961"}, "properties": {"repobilityId": "bbcc0153f9b179ea", "scanner": "scanner-primary", "fingerprint": "d4b278bbfa174a7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-227e741509dc9239", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/StrategyPortfolio.tsx:597"}, "properties": {"repobilityId": "5c0605ad55f47b6f", "scanner": "scanner-primary", "fingerprint": "227e741509dc9239", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-512418d47f98af00", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Historify.tsx:2195"}, "properties": {"repobilityId": "1010913d88831789", "scanner": "scanner-primary", "fingerprint": "512418d47f98af00", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cb3e89317483a9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/strategy/StrategyIndex.tsx:230"}, "properties": {"repobilityId": "b7707fe30ce3f022", "scanner": "scanner-primary", "fingerprint": "6cb3e89317483a9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e676604b37d9b6c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/monitoring/TrafficDashboard.tsx:251"}, "properties": {"repobilityId": "43e7309cd2d6d8a1", "scanner": "scanner-primary", "fingerprint": "e676604b37d9b6c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c863e19f3d1a664", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/admin/Diagnostics.tsx:544"}, "properties": {"repobilityId": "7d81737e99571cfb", "scanner": "scanner-primary", "fingerprint": "4c863e19f3d1a664", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-386ffe9a7a0bb0e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/chartink/ChartinkIndex.tsx:212"}, "properties": {"repobilityId": "16672583354a962a", "scanner": "scanner-primary", "fingerprint": "386ffe9a7a0bb0e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5389edb8f83f1c98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyLogs.tsx:251"}, "properties": {"repobilityId": "bd62e098d02a1603", "scanner": "scanner-primary", "fingerprint": "5389edb8f83f1c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6378b9d67aa24cd2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/python-strategy/PythonStrategyIndex.tsx:379"}, "properties": {"repobilityId": "d0c882349c078e98", "scanner": "scanner-primary", "fingerprint": "6378b9d67aa24cd2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a47f78f073a310f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/e2e/accessibility.spec.ts:15"}, "properties": {"repobilityId": "e8a5e4687cdc01d8", "scanner": "scanner-primary", "fingerprint": "8a47f78f073a310f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e0083003a7e7072", "level": "warning", "message": {"text": "Privileged port 3 in use"}, "properties": {"repobilityId": "261b7b1c6a18d412", "scanner": "scanner-primary", "fingerprint": "6e0083003a7e7072", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "start.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-742dc54135343639", "level": "warning", "message": {"text": "Privileged port 1000 in use"}, "properties": {"repobilityId": "5ac9fc9372cfe169", "scanner": "scanner-primary", "fingerprint": "742dc54135343639", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "start.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a112acf436637c16", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-bullseye"}, "properties": {"repobilityId": "4c718c853411e5ca", "scanner": "scanner-primary", "fingerprint": "a112acf436637c16", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-793bfa131b170c73", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bullseye-slim"}, "properties": {"repobilityId": "7ef1f5fbd77793e9", "scanner": "scanner-primary", "fingerprint": "793bfa131b170c73", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-4b44b4f0579689ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bullseye"}, "properties": {"repobilityId": "79c8b9c4342b8342", "scanner": "scanner-primary", "fingerprint": "4b44b4f0579689ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-11f31b6f8444408b", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in broker/groww/api/data.py:407"}, "properties": {"repobilityId": "e0f8825bd08ad553", "scanner": "scanner-primary", "fingerprint": "11f31b6f8444408b", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "broker/groww/api/data.py"}, "region": {"startLine": 407}}}]}, {"ruleId": "scanner-9d76e7d916fdb3d6", "level": "error", "message": {"text": "Possible secret in examples/python/multiquotes_example.py"}, "properties": {"repobilityId": "808da84253a904fc", "scanner": "scanner-primary", "fingerprint": "9d76e7d916fdb3d6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/multiquotes_example.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-aed24016c9fee367", "level": "error", "message": {"text": "Possible secret in examples/python/flask_optionchain.py"}, "properties": {"repobilityId": "c1741f05bf8959d0", "scanner": "scanner-primary", "fingerprint": "aed24016c9fee367", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/flask_optionchain.py"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-e73a3b43698fc6fb", "level": "error", "message": {"text": "Possible secret in examples/python/stoploss_example.py"}, "properties": {"repobilityId": "4417bfbf5a184e5e", "scanner": "scanner-primary", "fingerprint": "e73a3b43698fc6fb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/stoploss_example.py"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-9228432561116132", "level": "error", "message": {"text": "Possible secret in examples/python/ema_crossover.py"}, "properties": {"repobilityId": "be6e2a86adaefdd8", "scanner": "scanner-primary", "fingerprint": "9228432561116132", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/ema_crossover.py"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-319823a627ef1bb1", "level": "error", "message": {"text": "Possible secret in examples/python/ytd_gainers_losers.py"}, "properties": {"repobilityId": "80412314a8b2bb6b", "scanner": "scanner-primary", "fingerprint": "319823a627ef1bb1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/ytd_gainers_losers.py"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-e63fb367f770dedf", "level": "error", "message": {"text": "Possible secret in examples/python/plotting candles.py"}, "properties": {"repobilityId": "c100fcdc8bc9571c", "scanner": "scanner-primary", "fingerprint": "e63fb367f770dedf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/plotting candles.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-10ac77a621b212f5", "level": "error", "message": {"text": "Possible secret in examples/python/backtesting_vectorbt.py"}, "properties": {"repobilityId": "6eb7862660c8c99d", "scanner": "scanner-primary", "fingerprint": "10ac77a621b212f5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/backtesting_vectorbt.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-548d38aa712faf45", "level": "error", "message": {"text": "Possible secret in examples/python/depth_50_example.py"}, "properties": {"repobilityId": "7ac000fa5c4a9aa6", "scanner": "scanner-primary", "fingerprint": "548d38aa712faf45", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/depth_50_example.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-cf4dbbea1024d230", "level": "error", "message": {"text": "Possible secret in examples/python/depth_20_example.py"}, "properties": {"repobilityId": "2a90d45bfa020e26", "scanner": "scanner-primary", "fingerprint": "cf4dbbea1024d230", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/depth_20_example.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-4843d0049dc6a6f1", "level": "error", "message": {"text": "Possible secret in examples/python/Nifty OI Charts.py"}, "properties": {"repobilityId": "229c550c724f5b50", "scanner": "scanner-primary", "fingerprint": "4843d0049dc6a6f1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/Nifty OI Charts.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-9de282d6b7f41c5d", "level": "error", "message": {"text": "Possible secret in examples/python/heatmap.py"}, "properties": {"repobilityId": "5f60362a00635748", "scanner": "scanner-primary", "fingerprint": "9de282d6b7f41c5d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/heatmap.py"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-55413827d42ed9c3", "level": "error", "message": {"text": "Possible secret in examples/python/placing ATM order.py"}, "properties": {"repobilityId": "552e84e5ab00e46b", "scanner": "scanner-primary", "fingerprint": "55413827d42ed9c3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/placing ATM order.py"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-76d0e540cd119746", "level": "error", "message": {"text": "Possible secret in examples/python/straddle_scheduler.py"}, "properties": {"repobilityId": "c389d22d3ad8c4ef", "scanner": "scanner-primary", "fingerprint": "76d0e540cd119746", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/straddle_scheduler.py"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-99f85cc2d797adc9", "level": "error", "message": {"text": "Possible secret in examples/python/supertrend.py"}, "properties": {"repobilityId": "ea94c6ad3e804e2e", "scanner": "scanner-primary", "fingerprint": "99f85cc2d797adc9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/supertrend.py"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-aaa231e758944fda", "level": "error", "message": {"text": "Possible secret in examples/python/seasonality.py"}, "properties": {"repobilityId": "6bb3e471aa95754a", "scanner": "scanner-primary", "fingerprint": "aaa231e758944fda", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/seasonality.py"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-d4e92a389683bb9d", "level": "error", "message": {"text": "Possible secret in examples/python/ltp_example.py"}, "properties": {"repobilityId": "8a6c342a547e689a", "scanner": "scanner-primary", "fingerprint": "d4e92a389683bb9d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/ltp_example.py"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-b7ed35f162cf9fa7", "level": "error", "message": {"text": "Possible secret in examples/python/depth_example.py"}, "properties": {"repobilityId": "84af8fd6b9310cad", "scanner": "scanner-primary", "fingerprint": "b7ed35f162cf9fa7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/depth_example.py"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-4067eff66c6df931", "level": "error", "message": {"text": "Possible secret in examples/python/straddle_with_stops.py"}, "properties": {"repobilityId": "370b1a6b8fb1c6e6", "scanner": "scanner-primary", "fingerprint": "4067eff66c6df931", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/straddle_with_stops.py"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a6298f1ac4530c60", "level": "error", "message": {"text": "Possible secret in examples/python/ytd_heatmap.py"}, "properties": {"repobilityId": "c6ca96e49f12aed7", "scanner": "scanner-primary", "fingerprint": "a6298f1ac4530c60", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/ytd_heatmap.py"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-907c4998d1c580ae", "level": "error", "message": {"text": "Possible secret in examples/python/william vix fix.py"}, "properties": {"repobilityId": "2d2e6ce419161186", "scanner": "scanner-primary", "fingerprint": "907c4998d1c580ae", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/william vix fix.py"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-318b103eb15fdeeb", "level": "error", "message": {"text": "Possible secret in examples/python/expiry_dates.py"}, "properties": {"repobilityId": "3942fed5002d23c5", "scanner": "scanner-primary", "fingerprint": "318b103eb15fdeeb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/expiry_dates.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-6edc02ae6d71b472", "level": "error", "message": {"text": "Possible secret in examples/python/quote_example.py"}, "properties": {"repobilityId": "6ccf887c2c33518d", "scanner": "scanner-primary", "fingerprint": "6edc02ae6d71b472", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/quote_example.py"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f6c75ef4e41cf63b", "level": "error", "message": {"text": "Possible secret in examples/python/test_2340_symbols.py"}, "properties": {"repobilityId": "4048a1c109ca694e", "scanner": "scanner-primary", "fingerprint": "f6c75ef4e41cf63b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/test_2340_symbols.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-826430837e550e41", "level": "error", "message": {"text": "Possible secret in examples/python/optionchain_example.py"}, "properties": {"repobilityId": "97366ee21402c85e", "scanner": "scanner-primary", "fingerprint": "826430837e550e41", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/python/optionchain_example.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-7472b1e962081d88", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/StrategyChartTab.tsx:151"}, "properties": {"repobilityId": "ef4b54a022eda18e", "scanner": "scanner-primary", "fingerprint": "7472b1e962081d88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/strategy-builder/StrategyChartTab.tsx"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-248715776af24e65", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/strategy-builder/MultiStrikeOITab.tsx:198"}, "properties": {"repobilityId": "dbc8b9b2ed3f6986", "scanner": "scanner-primary", "fingerprint": "248715776af24e65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/strategy-builder/MultiStrikeOITab.tsx"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-1b35365782d86e82", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/BrokerSelect.tsx:245"}, "properties": {"repobilityId": "26cdc7ee148c9785", "scanner": "scanner-primary", "fingerprint": "1b35365782d86e82", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/BrokerSelect.tsx"}, "region": {"startLine": 245}}}]}, {"ruleId": "scanner-120e84f589312157", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/CustomStraddle.tsx:215"}, "properties": {"repobilityId": "64370ef7616f8a63", "scanner": "scanner-primary", "fingerprint": "120e84f589312157", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/CustomStraddle.tsx"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-3da2541e684af1b4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/StraddleChart.tsx:183"}, "properties": {"repobilityId": "0ecfdfcbeba741e7", "scanner": "scanner-primary", "fingerprint": "3da2541e684af1b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/StraddleChart.tsx"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-244d2a7aeee77ac7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/pages/IVChart.tsx:249"}, "properties": {"repobilityId": "203095c98ffb9f63", "scanner": "scanner-primary", "fingerprint": "244d2a7aeee77ac7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/IVChart.tsx"}, "region": {"startLine": 249}}}]}, {"ruleId": "scanner-efb60d11dc76abdb", "level": "error", "message": {"text": "Possible secret in docs/userguide/09-api-key-management/README.md"}, "properties": {"repobilityId": "0c16e386e16d5fbb", "scanner": "scanner-primary", "fingerprint": "efb60d11dc76abdb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/userguide/09-api-key-management/README.md"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-efb60d11dc76abdb", "level": "error", "message": {"text": "Possible secret in docs/userguide/09-api-key-management/README.md"}, "properties": {"repobilityId": "0c16e386e16d5fbb", "scanner": "scanner-primary", "fingerprint": "efb60d11dc76abdb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/userguide/09-api-key-management/README.md"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-efb60d11dc76abdb", "level": "error", "message": {"text": "Possible secret in docs/userguide/09-api-key-management/README.md"}, "properties": {"repobilityId": "0c16e386e16d5fbb", "scanner": "scanner-primary", "fingerprint": "efb60d11dc76abdb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/userguide/09-api-key-management/README.md"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-efb60d11dc76abdb", "level": "error", "message": {"text": "Possible secret in docs/userguide/09-api-key-management/README.md"}, "properties": {"repobilityId": "0c16e386e16d5fbb", "scanner": "scanner-primary", "fingerprint": "efb60d11dc76abdb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/userguide/09-api-key-management/README.md"}, "region": {"startLine": 222}}}]}, {"ruleId": "scanner-69a86ca1e88cfcd5", "level": "error", "message": {"text": "Possible secret in docs/design/37-apikey-playground/README.md"}, "properties": {"repobilityId": "e49e7708b3e5d1b3", "scanner": "scanner-primary", "fingerprint": "69a86ca1e88cfcd5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design/37-apikey-playground/README.md"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-ea4462f9878016b9", "level": "error", "message": {"text": "Possible secret in test/test_greeks_live.py"}, "properties": {"repobilityId": "a475a71c1b91a76c", "scanner": "scanner-primary", "fingerprint": "ea4462f9878016b9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_greeks_live.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-5e54341b1819e38c", "level": "error", "message": {"text": "Possible secret in test/ltp_example_test_1800 symbols.py"}, "properties": {"repobilityId": "ab542dde6602e72e", "scanner": "scanner-primary", "fingerprint": "5e54341b1819e38c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/ltp_example_test_1800 symbols.py"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-40b0afedb1c53d5c", "level": "error", "message": {"text": "Possible secret in test/test_options_multiorder_api.py"}, "properties": {"repobilityId": "2c5df2073bea0ca4", "scanner": "scanner-primary", "fingerprint": "40b0afedb1c53d5c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_options_multiorder_api.py"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-27916378011f1263", "level": "error", "message": {"text": "Possible secret in test/test_orphaned_apikey.py"}, "properties": {"repobilityId": "66bb5afec4647af3", "scanner": "scanner-primary", "fingerprint": "27916378011f1263", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_orphaned_apikey.py"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-67c18d6036e673f9", "level": "error", "message": {"text": "Possible secret in test/ltp_test_report.py"}, "properties": {"repobilityId": "34852b68a3760321", "scanner": "scanner-primary", "fingerprint": "67c18d6036e673f9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/ltp_test_report.py"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-089cb36bf2ebc5cd", "level": "error", "message": {"text": "Possible secret in test/iteration_test.py"}, "properties": {"repobilityId": "0c08f3de4592e761", "scanner": "scanner-primary", "fingerprint": "089cb36bf2ebc5cd", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/iteration_test.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-c6f1f6d5f3381aa7", "level": "error", "message": {"text": "Possible secret in test/test_analyzer_toggle_restriction.py"}, "properties": {"repobilityId": "6cfdc689febb9fec", "scanner": "scanner-primary", "fingerprint": "c6f1f6d5f3381aa7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_analyzer_toggle_restriction.py"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-b5a16c2152651974", "level": "error", "message": {"text": "Possible secret in test/test_simple_editor.html"}, "properties": {"repobilityId": "f83d75729440bee6", "scanner": "scanner-primary", "fingerprint": "b5a16c2152651974", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_simple_editor.html"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-9216707cc0cd7904", "level": "error", "message": {"text": "Possible secret in test/test_history_format.py"}, "properties": {"repobilityId": "2bd40a78ac26b220", "scanner": "scanner-primary", "fingerprint": "9216707cc0cd7904", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_history_format.py"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-da8dbb137ed47071", "level": "error", "message": {"text": "Possible secret in test/test_all_order_types_execution.py"}, "properties": {"repobilityId": "dad15b8d4959930f", "scanner": "scanner-primary", "fingerprint": "da8dbb137ed47071", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test/test_all_order_types_execution.py"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3fda9e893c533ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4b845a5807c42de", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 236}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae63b315ae3ef32f", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae63b315ae3ef32f", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 260}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8fb57e9e0362cf03", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 307}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f3fde08059e79457", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3fda9e893c533ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 341}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4b845a5807c42de", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 349}}}]}, {"ruleId": "scanner-7f1e4527e6fecffa", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "e790d4d334398ef3", "scanner": "scanner-primary", "fingerprint": "7f1e4527e6fecffa", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 369}}}]}, {"ruleId": "scanner-64192a3c67110d01", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "87338a8bfcb6f435", "scanner": "scanner-primary", "fingerprint": "64192a3c67110d01", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0595784473c1a8a5", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "febf30100dedc420", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-b7dd5ab6e815926d", "level": "note", "message": {"text": "Very large file: broker/tradejini/api/order_api.py (1579 lines)"}, "properties": {"repobilityId": "60fdfd19acabb581", "scanner": "scanner-primary", "fingerprint": "b7dd5ab6e815926d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b17e5003f46f326", "level": "note", "message": {"text": "Very large file: broker/kotak/streaming/kotak_adapter.py (1178 lines)"}, "properties": {"repobilityId": "46acca03bca0fb44", "scanner": "scanner-primary", "fingerprint": "7b17e5003f46f326", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b7592c9f5db7e586", "level": "note", "message": {"text": "Very large file: broker/kotak/streaming/HSWebSocketLib.py (1542 lines)"}, "properties": {"repobilityId": "4f976b0af881c44a", "scanner": "scanner-primary", "fingerprint": "b7592c9f5db7e586", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43deb5a44014b3da", "level": "note", "message": {"text": "Very large file: broker/groww/api/data.py (2078 lines)"}, "properties": {"repobilityId": "9dadd845f9ab0133", "scanner": "scanner-primary", "fingerprint": "43deb5a44014b3da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c76b423ed509db7e", "level": "note", "message": {"text": "Very large file: broker/groww/api/order_api.py (3428 lines)"}, "properties": {"repobilityId": "d8f9a30613d9c6fd", "scanner": "scanner-primary", "fingerprint": "c76b423ed509db7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f4c36bf417398ffb", "level": "note", "message": {"text": "Very large file: broker/fyers/streaming/fyers_websocket_adapter.py (1177 lines)"}, "properties": {"repobilityId": "1794e88dc4b7ed15", "scanner": "scanner-primary", "fingerprint": "f4c36bf417398ffb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-41f5449654ceaedd", "level": "note", "message": {"text": "Very large file: broker/motilal/api/motilal_websocket.py (1273 lines)"}, "properties": {"repobilityId": "784b88e2051b4c8f", "scanner": "scanner-primary", "fingerprint": "41f5449654ceaedd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-731aea677f98498a", "level": "note", "message": {"text": "Very large file: broker/aliceblue/streaming/aliceblue_adapter.py (1185 lines)"}, "properties": {"repobilityId": "c7cb7ddc94e0e9f3", "scanner": "scanner-primary", "fingerprint": "731aea677f98498a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-031b316fadc77af1", "level": "note", "message": {"text": "Very large file: broker/dhan_sandbox/streaming/dhan_websocket.py (2916 lines)"}, "properties": {"repobilityId": "0ff2361b9a29ed6b", "scanner": "scanner-primary", "fingerprint": "031b316fadc77af1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-034d9c4815617b20", "level": "note", "message": {"text": "Very large file: sandbox/order_manager.py (1225 lines)"}, "properties": {"repobilityId": "183348bc68ee98e5", "scanner": "scanner-primary", "fingerprint": "034d9c4815617b20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-227d89da53b4087b", "level": "note", "message": {"text": "Very large file: sandbox/position_manager.py (1434 lines)"}, "properties": {"repobilityId": "25bfb58f2b501244", "scanner": "scanner-primary", "fingerprint": "227d89da53b4087b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2fdffd6d4f9293ce", "level": "note", "message": {"text": "Very large file: websocket_proxy/server.py (1690 lines)"}, "properties": {"repobilityId": "d95baddad9d00b60", "scanner": "scanner-primary", "fingerprint": "2fdffd6d4f9293ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2e6e718f1d0acb51", "level": "note", "message": {"text": "Very large file: frontend/src/pages/StrategyBuilder.tsx (1357 lines)"}, "properties": {"repobilityId": "c9b57d81b084fb87", "scanner": "scanner-primary", "fingerprint": "2e6e718f1d0acb51", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd71d675f52371a9", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Profile.tsx (2266 lines)"}, "properties": {"repobilityId": "69d98e884060d13c", "scanner": "scanner-primary", "fingerprint": "cd71d675f52371a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-73c9223c35b2b258", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Historify.tsx (3120 lines)"}, "properties": {"repobilityId": "3e31d19c1d69ef86", "scanner": "scanner-primary", "fingerprint": "73c9223c35b2b258", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c22187b63d851a1f", "level": "note", "message": {"text": "Very large file: frontend/src/pages/monitoring/SecurityDashboard.tsx (1478 lines)"}, "properties": {"repobilityId": "37bbc3946d22398e", "scanner": "scanner-primary", "fingerprint": "c22187b63d851a1f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-23d3f4a158293493", "level": "note", "message": {"text": "Very large file: frontend/src/pages/python-strategy/PythonStrategyGuide.tsx (1281 lines)"}, "properties": {"repobilityId": "3f6f75ea96340b17", "scanner": "scanner-primary", "fingerprint": "23d3f4a158293493", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-01e4c8ec0f3d6f08", "level": "note", "message": {"text": "Very large file: blueprints/admin.py (1740 lines)"}, "properties": {"repobilityId": "9f42c29a2ab0be60", "scanner": "scanner-primary", "fingerprint": "01e4c8ec0f3d6f08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c7723607d27c37dc", "level": "note", "message": {"text": "Very large file: blueprints/python_strategy.py (2868 lines)"}, "properties": {"repobilityId": "3e50c68005a0c113", "scanner": "scanner-primary", "fingerprint": "c7723607d27c37dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-38273dd3a9e562c5", "level": "note", "message": {"text": "Very large file: blueprints/pnltracker.py (1105 lines)"}, "properties": {"repobilityId": "132974cb01ee6c9a", "scanner": "scanner-primary", "fingerprint": "38273dd3a9e562c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f6e7404a427ab36f", "level": "note", "message": {"text": "Very large file: blueprints/historify.py (1555 lines)"}, "properties": {"repobilityId": "62aedf232324e251", "scanner": "scanner-primary", "fingerprint": "f6e7404a427ab36f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1cf22f48afd74380", "level": "note", "message": {"text": "Very large file: blueprints/auth.py (1308 lines)"}, "properties": {"repobilityId": "2d376ad0ec9f6cce", "scanner": "scanner-primary", "fingerprint": "1cf22f48afd74380", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5093bd9a2ebffae", "level": "note", "message": {"text": "Very large file: blueprints/distribution.py (1818 lines)"}, "properties": {"repobilityId": "7dcc4f1c1ddef6c0", "scanner": "scanner-primary", "fingerprint": "f5093bd9a2ebffae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f48669fb67819e22", "level": "note", "message": {"text": "Very large file: blueprints/brlogin.py (1399 lines)"}, "properties": {"repobilityId": "84905144fc9350e5", "scanner": "scanner-primary", "fingerprint": "f48669fb67819e22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b44b1266501da887", "level": "note", "message": {"text": "Very large file: database/market_calendar_db.py (1394 lines)"}, "properties": {"repobilityId": "9e98a85d84374c79", "scanner": "scanner-primary", "fingerprint": "b44b1266501da887", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4ce484d8efd26ea", "level": "note", "message": {"text": "Very large file: database/historify_db.py (3524 lines)"}, "properties": {"repobilityId": "6a921488a7196bdf", "scanner": "scanner-primary", "fingerprint": "d4ce484d8efd26ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3cb3889ce973538c", "level": "note", "message": {"text": "Very large file: services/historify_service.py (2206 lines)"}, "properties": {"repobilityId": "4bf31ad8c9e659f8", "scanner": "scanner-primary", "fingerprint": "3cb3889ce973538c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-35022f88d866b0e5", "level": "note", "message": {"text": "Very large file: services/flow_executor_service.py (2334 lines)"}, "properties": {"repobilityId": "559c17a25260171f", "scanner": "scanner-primary", "fingerprint": "35022f88d866b0e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e57b6f85c1ab7526", "level": "note", "message": {"text": "Very large file: services/telegram_bot_service.py (2607 lines)"}, "properties": {"repobilityId": "189be8bd3a70f7d0", "scanner": "scanner-primary", "fingerprint": "e57b6f85c1ab7526", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "db0c5b3309d0ae74", "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": "d086e277d7e6776a", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "75dfdaa4a0d123f1", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "7c766315d0182864", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3407e6f8c22274a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in app.py:317"}, "properties": {"repobilityId": "430e2042573d0ec0", "scanner": "scanner-primary", "fingerprint": "3407e6f8c22274a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c23aa1bff8664bb", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/wisdom/streaming/wisdom_websocket.py:236"}, "properties": {"repobilityId": "0052f516988ffa6a", "scanner": "scanner-primary", "fingerprint": "5c23aa1bff8664bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b92977cf89dd5df", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/wisdom/database/master_contract_db.py:384"}, "properties": {"repobilityId": "e0b88874ba88cd65", "scanner": "scanner-primary", "fingerprint": "9b92977cf89dd5df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ed935753f34fc90", "level": "none", "message": {"text": "Commented-code block (9 lines) in broker/deltaexchange/api/data.py:367"}, "properties": {"repobilityId": "be8e57d0a923417c", "scanner": "scanner-primary", "fingerprint": "9ed935753f34fc90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6abc0c106bd0141", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/deltaexchange/mapping/order_data.py:63"}, "properties": {"repobilityId": "6356325faa3e774a", "scanner": "scanner-primary", "fingerprint": "e6abc0c106bd0141", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aeb6a793a5224b65", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/deltaexchange/streaming/delta_adapter.py:176"}, "properties": {"repobilityId": "52f71f03f01a13fa", "scanner": "scanner-primary", "fingerprint": "aeb6a793a5224b65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6f8ddfd79f438d3", "level": "none", "message": {"text": "Commented-code block (8 lines) in broker/deltaexchange/streaming/delta_websocket.py:103"}, "properties": {"repobilityId": "b9850cf491bf8526", "scanner": "scanner-primary", "fingerprint": "b6f8ddfd79f438d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f2ea0e0674811f8", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/deltaexchange/database/master_contract_db.py:217"}, "properties": {"repobilityId": "08ce9eb7b308ae1e", "scanner": "scanner-primary", "fingerprint": "2f2ea0e0674811f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6efe96548af4a9e3", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/nubra/api/nubrawebsocket.py:405"}, "properties": {"repobilityId": "bb8622a8b815ae0f", "scanner": "scanner-primary", "fingerprint": "6efe96548af4a9e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b7c11a2a5beec99", "level": "note", "message": {"text": "Legacy-named symbol `pos_copy` in broker/nubra/mapping/order_data.py:422"}, "properties": {"repobilityId": "44a95cb559b539e3", "scanner": "scanner-primary", "fingerprint": "0b7c11a2a5beec99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d43d9b9e257e420e", "level": "note", "message": {"text": "Legacy-named symbol `nbasket_old` in broker/nubra/protos/orders_pb2.py:29"}, "properties": {"repobilityId": "ece51f8669782408", "scanner": "scanner-primary", "fingerprint": "d43d9b9e257e420e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b7f14080e6df7059", "level": "note", "message": {"text": "Legacy-named symbol `rorder_type_v2` in broker/nubra/protos/nubrafrontend_pb2.py:29"}, "properties": {"repobilityId": "5e8a2978705df14d", "scanner": "scanner-primary", "fingerprint": "b7f14080e6df7059", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1e4768e9f585ca30", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/zerodha/api/data.py:17"}, "properties": {"repobilityId": "01ef92fa15757221", "scanner": "scanner-primary", "fingerprint": "1e4768e9f585ca30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-353714230c243aa2", "level": "none", "message": {"text": "Commented-code block (8 lines) in broker/zerodha/mapping/margin_data.py:172"}, "properties": {"repobilityId": "307b030cccc501fa", "scanner": "scanner-primary", "fingerprint": "353714230c243aa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba4b9c535a311a6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/zerodha/streaming/zerodha_mapping.py:18"}, "properties": {"repobilityId": "6db42836e0f3b256", "scanner": "scanner-primary", "fingerprint": "ba4b9c535a311a6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1088ac83137be9bc", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/compositedge/streaming/compositedge_websocket.py:237"}, "properties": {"repobilityId": "b32e884f03c817e4", "scanner": "scanner-primary", "fingerprint": "1088ac83137be9bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b986c802feae635", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/compositedge/database/master_contract_db.py:384"}, "properties": {"repobilityId": "d611fa9bc00fe044", "scanner": "scanner-primary", "fingerprint": "2b986c802feae635", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-909d1af4c0fb9748", "level": "none", "message": {"text": "Commented-code block (10 lines) in broker/icicidirect/mapping/transform_data.py:129"}, "properties": {"repobilityId": "0baca65f327d25f8", "scanner": "scanner-primary", "fingerprint": "909d1af4c0fb9748", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-605b44f2f8dfac79", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/ibulls/streaming/ibulls_websocket.py:234"}, "properties": {"repobilityId": "28fafca9fc72cc45", "scanner": "scanner-primary", "fingerprint": "605b44f2f8dfac79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-961dde6d21b67f9a", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/shoonya/api/data.py:615"}, "properties": {"repobilityId": "d3c3c8c000902c01", "scanner": "scanner-primary", "fingerprint": "961dde6d21b67f9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46de2117cd2bcb96", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/shoonya/mapping/margin_data.py:157"}, "properties": {"repobilityId": "7ffb53495dc2b811", "scanner": "scanner-primary", "fingerprint": "46de2117cd2bcb96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40ed2ae28e786cab", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/iifl/streaming/iifl_websocket.py:237"}, "properties": {"repobilityId": "0ea4aa04b225ae73", "scanner": "scanner-primary", "fingerprint": "40ed2ae28e786cab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8011a15fb89e078", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/iifl/database/master_contract_db.py:384"}, "properties": {"repobilityId": "e84eb9f38200016e", "scanner": "scanner-primary", "fingerprint": "a8011a15fb89e078", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3edd592933037bed", "level": "none", "message": {"text": "Commented-code block (9 lines) in broker/kotak/streaming/HSWebSocketLib.py:1331"}, "properties": {"repobilityId": "93a2835ae445d5d4", "scanner": "scanner-primary", "fingerprint": "3edd592933037bed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92dd8e47f58ea335", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/jainamxts/streaming/jainamxts_websocket.py:246"}, "properties": {"repobilityId": "d007b923f7dc466a", "scanner": "scanner-primary", "fingerprint": "92dd8e47f58ea335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-334d8bda61418e76", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/jainamxts/database/master_contract_db.py:390"}, "properties": {"repobilityId": "01ea327315c26cc7", "scanner": "scanner-primary", "fingerprint": "334d8bda61418e76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb7d57d7baaeb7f5", "level": "none", "message": {"text": "Commented-code block (8 lines) in broker/paytm/streaming/paytm_websocket.py:424"}, "properties": {"repobilityId": "5ffa7cd27a26cfae", "scanner": "scanner-primary", "fingerprint": "bb7d57d7baaeb7f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e072e175bb0d724", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/groww/api/data.py:1451"}, "properties": {"repobilityId": "e052d0e37b428f05", "scanner": "scanner-primary", "fingerprint": "0e072e175bb0d724", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b4bf89d3bd73278", "level": "note", "message": {"text": "Legacy-named symbol `subscriptions_copy` in broker/groww/streaming/groww_adapter.py:120"}, "properties": {"repobilityId": "dcd5450dd01cb590", "scanner": "scanner-primary", "fingerprint": "0b4bf89d3bd73278", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-115cfeb2f36b3a24", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/fivepaisaxts/streaming/fivepaisaxts_websocket.py:237"}, "properties": {"repobilityId": "75bece398e734ff5", "scanner": "scanner-primary", "fingerprint": "115cfeb2f36b3a24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6a4b82b848bf96a", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/fivepaisaxts/database/master_contract_db.py:386"}, "properties": {"repobilityId": "c4a5627f58b5c01e", "scanner": "scanner-primary", "fingerprint": "e6a4b82b848bf96a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dfda186fc1e2fde", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/dhan/api/gtt_api.py:182"}, "properties": {"repobilityId": "a69595c5e1d6d8fe", "scanner": "scanner-primary", "fingerprint": "0dfda186fc1e2fde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c59be05aab751199", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/upstox/api/auth_api.py:27"}, "properties": {"repobilityId": "00fe8d6f170cdccb", "scanner": "scanner-primary", "fingerprint": "c59be05aab751199", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fb094233f99079e", "level": "note", "message": {"text": "Legacy-named symbol `prev_close_v2` in broker/upstox/api/data.py:216"}, "properties": {"repobilityId": "bc85ac9d0acd35ca", "scanner": "scanner-primary", "fingerprint": "9fb094233f99079e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fcaf1619de8935b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_client.py:59"}, "properties": {"repobilityId": "86c40de9261b79a8", "scanner": "scanner-primary", "fingerprint": "fcaf1619de8935b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92d586a468b29dbd", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/upstox/streaming/upstox_adapter.py:34"}, "properties": {"repobilityId": "adbc4c35a9a766f4", "scanner": "scanner-primary", "fingerprint": "92d586a468b29dbd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2ef6c3993e3003e", "level": "note", "message": {"text": "Legacy-named symbol `segment_copy` in broker/upstox/database/master_contract_db.py:143"}, "properties": {"repobilityId": "5c0fbe015f74b28c", "scanner": "scanner-primary", "fingerprint": "e2ef6c3993e3003e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-293991839501e632", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/definedge/api/data.py:848"}, "properties": {"repobilityId": "dff6aff03d950c99", "scanner": "scanner-primary", "fingerprint": "293991839501e632", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f19504adb6a5d71", "level": "none", "message": {"text": "Commented-code block (9 lines) in broker/fyers/streaming/fyers_websocket_adapter.py:81"}, "properties": {"repobilityId": "8c56abef7927ff58", "scanner": "scanner-primary", "fingerprint": "7f19504adb6a5d71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b87380086c266759", "level": "none", "message": {"text": "Commented-code block (10 lines) in broker/fyers/streaming/fyers_adapter.py:487"}, "properties": {"repobilityId": "0bba76177ab0f89f", "scanner": "scanner-primary", "fingerprint": "b87380086c266759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22ddbc5cd3d55b5d", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/rmoney/streaming/rmoney_websocket.py:37"}, "properties": {"repobilityId": "e337d61318c6bb63", "scanner": "scanner-primary", "fingerprint": "22ddbc5cd3d55b5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4294f6e36d605b2", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/rmoney/database/master_contract_db.py:386"}, "properties": {"repobilityId": "05178ace4176e000", "scanner": "scanner-primary", "fingerprint": "c4294f6e36d605b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebeceffb98bf4bab", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/motilal/api/motilal_websocket.py:222"}, "properties": {"repobilityId": "a56b66c49d6085a8", "scanner": "scanner-primary", "fingerprint": "ebeceffb98bf4bab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8aec8e1ff6af65c", "level": "note", "message": {"text": "Legacy-named symbol `subscriptions_copy` in broker/motilal/streaming/motilal_adapter.py:367"}, "properties": {"repobilityId": "d7bc097b72a7fa39", "scanner": "scanner-primary", "fingerprint": "c8aec8e1ff6af65c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b283ea2e741e8546", "level": "note", "message": {"text": "Stub function `on_message` (body is just `pass`/`return`) \u2014 broker/angel/streaming/smartWebSocketV2.py:736"}, "properties": {"repobilityId": "e461a014ab93b780", "scanner": "scanner-primary", "fingerprint": "b283ea2e741e8546", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-ecde739e524c20d1", "level": "none", "message": {"text": "Commented-code block (10 lines) in broker/arihant/api/auth_api.py:37"}, "properties": {"repobilityId": "7b1cef4de3a35d4c", "scanner": "scanner-primary", "fingerprint": "ecde739e524c20d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b7b469a7697a694", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/arihant/api/order_api.py:92"}, "properties": {"repobilityId": "2d556f86a8787dd3", "scanner": "scanner-primary", "fingerprint": "2b7b469a7697a694", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfba17b403ed11b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/arihant/mapping/transform_data.py:96"}, "properties": {"repobilityId": "fa235099fe37337a", "scanner": "scanner-primary", "fingerprint": "bfba17b403ed11b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd3a767b2578649a", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/arihant/database/master_contract_db.py:50"}, "properties": {"repobilityId": "d3f5903aea971084", "scanner": "scanner-primary", "fingerprint": "fd3a767b2578649a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-769487953f852710", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 broker/aliceblue/streaming/aliceblue_client.py:137"}, "properties": {"repobilityId": "41f5ab98ecc27d54", "scanner": "scanner-primary", "fingerprint": "769487953f852710", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e63f38152fc09ea5", "level": "none", "message": {"text": "Commented-code block (6 lines) in broker/flattrade/mapping/margin_data.py:157"}, "properties": {"repobilityId": "026031c91feb6506", "scanner": "scanner-primary", "fingerprint": "e63f38152fc09ea5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-156f4841a3107d3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker/flattrade/mapping/order_data.py:437"}, "properties": {"repobilityId": "f375d0fee12b8568", "scanner": "scanner-primary", "fingerprint": "156f4841a3107d3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04fe340499edf7ea", "level": "none", "message": {"text": "Commented-code block (7 lines) in broker/dhan_sandbox/streaming/dhan_websocket.py:695"}, "properties": {"repobilityId": "315d800270dbb5de", "scanner": "scanner-primary", "fingerprint": "04fe340499edf7ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bd50dd69bfbd1b0", "level": "note", "message": {"text": "Legacy-named symbol `squareoff_backup` in sandbox/squareoff_thread.py:88"}, "properties": {"repobilityId": "b437b68321dd732a", "scanner": "scanner-primary", "fingerprint": "9bd50dd69bfbd1b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c92a07ec2b602b26", "level": "none", "message": {"text": "Commented-code block (7 lines) in sandbox/squareoff_thread.py:77"}, "properties": {"repobilityId": "78b684deacb4cfd6", "scanner": "scanner-primary", "fingerprint": "c92a07ec2b602b26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-513b6ce7241ecd13", "level": "none", "message": {"text": "Commented-code block (7 lines) in sandbox/order_manager.py:85"}, "properties": {"repobilityId": "aeaf0ec6af228e40", "scanner": "scanner-primary", "fingerprint": "513b6ce7241ecd13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64dfcbb5dfb3be9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in sandbox/squareoff_manager.py:99"}, "properties": {"repobilityId": "e9cc290d1a686024", "scanner": "scanner-primary", "fingerprint": "64dfcbb5dfb3be9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7a67e1d6a50601a", "level": "none", "message": {"text": "Commented-code block (6 lines) in utils/decodo_proxy.py:78"}, "properties": {"repobilityId": "ac594833575dc257", "scanner": "scanner-primary", "fingerprint": "b7a67e1d6a50601a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1daa040068411354", "level": "none", "message": {"text": "Commented-code block (5 lines) in utils/auth_utils.py:361"}, "properties": {"repobilityId": "8ad8f0c57b8bf8f4", "scanner": "scanner-primary", "fingerprint": "1daa040068411354", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e74f05b250d457e", "level": "none", "message": {"text": "Commented-code block (5 lines) in utils/httpx_client.py:17"}, "properties": {"repobilityId": "27c7969214bb6215", "scanner": "scanner-primary", "fingerprint": "4e74f05b250d457e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0a293e9128f2a2b", "level": "none", "message": {"text": "Commented-code block (6 lines) in utils/logging.py:33"}, "properties": {"repobilityId": "65542f3afd0d9c93", "scanner": "scanner-primary", "fingerprint": "c0a293e9128f2a2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca13566479b37520", "level": "none", "message": {"text": "Commented-code block (8 lines) in utils/broker_env_bootstrap.py:69"}, "properties": {"repobilityId": "feee130db27bc25a", "scanner": "scanner-primary", "fingerprint": "ca13566479b37520", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2d911e5e16e69fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in utils/env_check.py:16"}, "properties": {"repobilityId": "5ebee661dd7f5ec8", "scanner": "scanner-primary", "fingerprint": "a2d911e5e16e69fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f799306fec53fba", "level": "none", "message": {"text": "Commented-code block (5 lines) in utils/source_bind.py:70"}, "properties": {"repobilityId": "3b245119fdeaf5be", "scanner": "scanner-primary", "fingerprint": "1f799306fec53fba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eea5eabdda96dfd3", "level": "none", "message": {"text": "Commented-code block (6 lines) in websocket_proxy/server.py:152"}, "properties": {"repobilityId": "5e186f43c364daca", "scanner": "scanner-primary", "fingerprint": "eea5eabdda96dfd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6214ad1006f2efc", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker_login_adapters/__init__.py:50"}, "properties": {"repobilityId": "b39fe5fbdf5e22f3", "scanner": "scanner-primary", "fingerprint": "c6214ad1006f2efc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d54aa6a4c34202fb", "level": "note", "message": {"text": "Legacy-named symbol `send_login_otp_v2` in broker_login_adapters/fyers.py:15"}, "properties": {"repobilityId": "dd20acf63e109269", "scanner": "scanner-primary", "fingerprint": "d54aa6a4c34202fb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8cdb9473ca7586a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker_login_adapters/upstox.py:164"}, "properties": {"repobilityId": "fd59792fa2778d67", "scanner": "scanner-primary", "fingerprint": "8cdb9473ca7586a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a35e5f3f5311e5a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in broker_login_adapters/zerodha.py:98"}, "properties": {"repobilityId": "70a5bdca22155eea", "scanner": "scanner-primary", "fingerprint": "a35e5f3f5311e5a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-336172d075dcfa2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in examples/python/emacrossover_strategy_python.py:36"}, "properties": {"repobilityId": "0053394996e77e13", "scanner": "scanner-primary", "fingerprint": "336172d075dcfa2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb0678782923c332", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:7"}, "properties": {"repobilityId": "21581f1d624df4c5", "scanner": "scanner-primary", "fingerprint": "eb0678782923c332", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edf12bc2c526f72c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/stores/themeStore.ts:122"}, "properties": {"repobilityId": "e3300d707bb46b45", "scanner": "scanner-primary", "fingerprint": "edf12bc2c526f72c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6fe6a05a3846a10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useMarketStatus.ts:32"}, "properties": {"repobilityId": "16d4c8cd136a064a", "scanner": "scanner-primary", "fingerprint": "d6fe6a05a3846a10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6872053e55c299c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWebSocketTester.ts:6"}, "properties": {"repobilityId": "207ecaa895fa8d86", "scanner": "scanner-primary", "fingerprint": "6872053e55c299c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5772e5221f287ee0", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/strategy-builder/Simulators.tsx:33"}, "properties": {"repobilityId": "6035206d475afaec", "scanner": "scanner-primary", "fingerprint": "5772e5221f287ee0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-247f5d594ffeefb8", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/components/strategy-builder/PnLTab.tsx:105"}, "properties": {"repobilityId": "594ea7871c32e183", "scanner": "scanner-primary", "fingerprint": "247f5d594ffeefb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b825193a45b8361b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/HistorifyCharts.tsx:452"}, "properties": {"repobilityId": "3c06c81b23a93382", "scanner": "scanner-primary", "fingerprint": "b825193a45b8361b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d150ff70d2cc8fc8", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/StrategyBuilder.tsx:187"}, "properties": {"repobilityId": "1b7a30d2d7ec646d", "scanner": "scanner-primary", "fingerprint": "d150ff70d2cc8fc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0eb381d27172f65c", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/OptionChain.tsx:562"}, "properties": {"repobilityId": "be0b1cfa753c543f", "scanner": "scanner-primary", "fingerprint": "0eb381d27172f65c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fbd7985f983b41c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/BrokerTOTP.tsx:365"}, "properties": {"repobilityId": "4f022cdd3805507d", "scanner": "scanner-primary", "fingerprint": "6fbd7985f983b41c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd9770ebe5bfe8b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Sandbox.tsx:27"}, "properties": {"repobilityId": "39c204448b0ad6a0", "scanner": "scanner-primary", "fingerprint": "cd9770ebe5bfe8b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e0e906a6e55fe04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Analyzer.tsx:99"}, "properties": {"repobilityId": "b6ef5537a3a876cd", "scanner": "scanner-primary", "fingerprint": "9e0e906a6e55fe04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f88b466a96800865", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/ApiKey.tsx:32"}, "properties": {"repobilityId": "d258fa355880925f", "scanner": "scanner-primary", "fingerprint": "f88b466a96800865", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51f9b1ee1611cc68", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/PnLTracker.tsx:11"}, "properties": {"repobilityId": "963cf58409a7b807", "scanner": "scanner-primary", "fingerprint": "51f9b1ee1611cc68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db2cdd2f8006a655", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Token.tsx:231"}, "properties": {"repobilityId": "ba18a8d2d4f812c6", "scanner": "scanner-primary", "fingerprint": "db2cdd2f8006a655", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3fc011c3677715da", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/BrokerManager.tsx:198"}, "properties": {"repobilityId": "a7dc7844cef5b361", "scanner": "scanner-primary", "fingerprint": "3fc011c3677715da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bfe84d6fa3f1907", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Playground.tsx:70"}, "properties": {"repobilityId": "df4740a56b5f5834", "scanner": "scanner-primary", "fingerprint": "5bfe84d6fa3f1907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bdb98fd3debe8967", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Search.tsx:121"}, "properties": {"repobilityId": "26c4d995ed3f4ae0", "scanner": "scanner-primary", "fingerprint": "bdb98fd3debe8967", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ea0994fe6bf5346", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/WebSocketTest.tsx:43"}, "properties": {"repobilityId": "5c7deb7cad692230", "scanner": "scanner-primary", "fingerprint": "3ea0994fe6bf5346", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a3077b655db6898", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Setup.tsx:108"}, "properties": {"repobilityId": "f39144cd82bb1ba4", "scanner": "scanner-primary", "fingerprint": "2a3077b655db6898", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-57daa240d581663c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Login.tsx:54"}, "properties": {"repobilityId": "eac8c0397e41368b", "scanner": "scanner-primary", "fingerprint": "57daa240d581663c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e90cfd9d5cb4617", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Activate.tsx:45"}, "properties": {"repobilityId": "52c60f82c878c51b", "scanner": "scanner-primary", "fingerprint": "3e90cfd9d5cb4617", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0421bf0a63de5d5", "level": "none", "message": {"text": "Commented-code block (11 lines) in frontend/src/pages/Historify.tsx:142"}, "properties": {"repobilityId": "00816f14636fce8d", "scanner": "scanner-primary", "fingerprint": "f0421bf0a63de5d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-805cdeac478d6fc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Historify.tsx:227"}, "properties": {"repobilityId": "f4bef28b07f71d3a", "scanner": "scanner-primary", "fingerprint": "805cdeac478d6fc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e1e0af589f581b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/MasterContract.tsx:22"}, "properties": {"repobilityId": "955fe673343412e7", "scanner": "scanner-primary", "fingerprint": "1e1e0af589f581b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0a48c972472349d", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/plotly-2d.ts:1"}, "properties": {"repobilityId": "3fb8a97c941df59c", "scanner": "scanner-primary", "fingerprint": "d0a48c972472349d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8639066650efe01b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/MarketDataManager.ts:77"}, "properties": {"repobilityId": "a7cb54f6d1bbe11c", "scanner": "scanner-primary", "fingerprint": "8639066650efe01b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09baf747ac24c27c", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/lib/strategyMath.ts:361"}, "properties": {"repobilityId": "6fe3ef144c10b6a5", "scanner": "scanner-primary", "fingerprint": "09baf747ac24c27c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de03a3eda164b74e", "level": "none", "message": {"text": "Commented-code block (5 lines) in blueprints/broker_credentials.py:677"}, "properties": {"repobilityId": "bfc51fd5409ced22", "scanner": "scanner-primary", "fingerprint": "de03a3eda164b74e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-976a0dc8a6d1ffa5", "level": "none", "message": {"text": "Commented-code block (10 lines) in blueprints/admin.py:54"}, "properties": {"repobilityId": "c232414f8a0c51f9", "scanner": "scanner-primary", "fingerprint": "976a0dc8a6d1ffa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75cbea91807ea72a", "level": "none", "message": {"text": "Commented-code block (7 lines) in blueprints/python_strategy.py:359"}, "properties": {"repobilityId": "8a832af547f5644b", "scanner": "scanner-primary", "fingerprint": "75cbea91807ea72a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afd9687c3f5cd533", "level": "none", "message": {"text": "Commented-code block (5 lines) in blueprints/telegram.py:42"}, "properties": {"repobilityId": "2332f19eb59a3e13", "scanner": "scanner-primary", "fingerprint": "afd9687c3f5cd533", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8761eb17aa6d6636", "level": "none", "message": {"text": "Commented-code block (8 lines) in blueprints/core.py:59"}, "properties": {"repobilityId": "58023724ba6e2c73", "scanner": "scanner-primary", "fingerprint": "8761eb17aa6d6636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75693eece4239a9b", "level": "none", "message": {"text": "Commented-code block (7 lines) in blueprints/historify.py:463"}, "properties": {"repobilityId": "908135009d81cdc6", "scanner": "scanner-primary", "fingerprint": "75693eece4239a9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87b1dee4977c7531", "level": "none", "message": {"text": "Commented-code block (7 lines) in blueprints/broker_metadata.py:22"}, "properties": {"repobilityId": "894dbd2ffcb23644", "scanner": "scanner-primary", "fingerprint": "87b1dee4977c7531", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c910ced99e5aae21", "level": "none", "message": {"text": "Commented-code block (6 lines) in blueprints/search.py:46"}, "properties": {"repobilityId": "092228eebb91af1d", "scanner": "scanner-primary", "fingerprint": "c910ced99e5aae21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2eb353bd403d104", "level": "none", "message": {"text": "Commented-code block (6 lines) in blueprints/system_permissions.py:45"}, "properties": {"repobilityId": "9e2a92c3b778fd2b", "scanner": "scanner-primary", "fingerprint": "c2eb353bd403d104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e33b104c41115be", "level": "none", "message": {"text": "Commented-code block (8 lines) in blueprints/auth.py:127"}, "properties": {"repobilityId": "0af0895c4e4d082c", "scanner": "scanner-primary", "fingerprint": "9e33b104c41115be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d84c5373d03cebee", "level": "none", "message": {"text": "Commented-code block (8 lines) in blueprints/distribution.py:709"}, "properties": {"repobilityId": "76b7c4f48af21745", "scanner": "scanner-primary", "fingerprint": "d84c5373d03cebee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4961e2a28108a50d", "level": "none", "message": {"text": "Commented-code block (8 lines) in blueprints/brlogin.py:64"}, "properties": {"repobilityId": "183c9402b103f9b0", "scanner": "scanner-primary", "fingerprint": "4961e2a28108a50d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-414e44c7a1037aaa", "level": "none", "message": {"text": "Commented-code block (6 lines) in database/token_db_enhanced.py:30"}, "properties": {"repobilityId": "7075ad54ab0ba633", "scanner": "scanner-primary", "fingerprint": "414e44c7a1037aaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02c0ea896033500c", "level": "none", "message": {"text": "Commented-code block (6 lines) in database/distribution_db.py:103"}, "properties": {"repobilityId": "619bd25f4005723d", "scanner": "scanner-primary", "fingerprint": "02c0ea896033500c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2cd0c6983ff4e40", "level": "none", "message": {"text": "Commented-code block (5 lines) in database/broker_creds_db.py:49"}, "properties": {"repobilityId": "1f08f429c085c09d", "scanner": "scanner-primary", "fingerprint": "b2cd0c6983ff4e40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-272c82e9c72e4602", "level": "none", "message": {"text": "Commented-code block (10 lines) in database/traffic_db.py:32"}, "properties": {"repobilityId": "a7045c01107bcbfc", "scanner": "scanner-primary", "fingerprint": "272c82e9c72e4602", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3709c7a35d01b904", "level": "none", "message": {"text": "Commented-code block (6 lines) in database/historify_db.py:960"}, "properties": {"repobilityId": "58bec0d5a8e828cd", "scanner": "scanner-primary", "fingerprint": "3709c7a35d01b904", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36a5099876349b89", "level": "none", "message": {"text": "Commented-code block (6 lines) in database/auth_db.py:464"}, "properties": {"repobilityId": "7d380c2db79f5ac0", "scanner": "scanner-primary", "fingerprint": "36a5099876349b89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34a163d6b01b72f5", "level": "none", "message": {"text": "Commented-code block (8 lines) in database/settings_db.py:17"}, "properties": {"repobilityId": "2cba52883da84fbf", "scanner": "scanner-primary", "fingerprint": "34a163d6b01b72f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35a17bfd9f907aec", "level": "none", "message": {"text": "Commented-code block (5 lines) in database/sandbox_db.py:366"}, "properties": {"repobilityId": "4dc94c3eec404ecc", "scanner": "scanner-primary", "fingerprint": "35a17bfd9f907aec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffb0b693e7c2349b", "level": "note", "message": {"text": "Legacy-named symbol `api_v1` in restx_api/__init__.py:4"}, "properties": {"repobilityId": "7f8efb3af6375feb", "scanner": "scanner-primary", "fingerprint": "ffb0b693e7c2349b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ea3f48f812d3cdc3", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/multi_strike_oi_service.py:141"}, "properties": {"repobilityId": "92d69583833ed659", "scanner": "scanner-primary", "fingerprint": "ea3f48f812d3cdc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58b5b53f9236e2ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/strategy_chart_service.py:207"}, "properties": {"repobilityId": "7c0fb4ca8c540aad", "scanner": "scanner-primary", "fingerprint": "58b5b53f9236e2ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a85b1812affca65", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/custom_straddle_service.py:178"}, "properties": {"repobilityId": "36ceabbde8bdf876", "scanner": "scanner-primary", "fingerprint": "4a85b1812affca65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa532adb1c315bb0", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/auto_login_scheduler_service.py:110"}, "properties": {"repobilityId": "05915630f313d146", "scanner": "scanner-primary", "fingerprint": "aa532adb1c315bb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "daabcec6afadfd8b", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "b0c710f936bc932c", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "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": "892eb7c10818ed67", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-959dc775c4241ad4", "level": "note", "message": {"text": "Near-duplicate function bodies in 18 places"}, "properties": {"repobilityId": "7cf8393fd3048187", "scanner": "scanner-primary", "fingerprint": "959dc775c4241ad4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fe1d9311d6aee734", "level": "note", "message": {"text": "Near-duplicate function bodies in 12 places"}, "properties": {"repobilityId": "3a43a5644c5d2258", "scanner": "scanner-primary", "fingerprint": "fe1d9311d6aee734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-805362a4b2e61548", "level": "note", "message": {"text": "Near-duplicate function bodies in 28 places"}, "properties": {"repobilityId": "f2fcd48e25c30413", "scanner": "scanner-primary", "fingerprint": "805362a4b2e61548", "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": "9ab2918cdf2ccc3e", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0d32ef4b8a679ae8", "level": "note", "message": {"text": "Near-duplicate function bodies in 24 places"}, "properties": {"repobilityId": "dd2906bb11e4a8f4", "scanner": "scanner-primary", "fingerprint": "0d32ef4b8a679ae8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-805362a4b2e61548", "level": "note", "message": {"text": "Near-duplicate function bodies in 28 places"}, "properties": {"repobilityId": "9506b60fb7b0e1fe", "scanner": "scanner-primary", "fingerprint": "805362a4b2e61548", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e414377a94a07bb1", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c63249a5aeb4fe0f", "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": "cf7aa85eecb1ca26", "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": "dac9fae467967e4d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "cbbec31879e77e1c", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "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": "0c35b2d08c033d76", "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": "01ef256b2bbb0797", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "a62e39894cf439cf", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-f341860ab6a90be6", "level": "note", "message": {"text": "Near-duplicate function bodies in 17 places"}, "properties": {"repobilityId": "7194b05423194fe0", "scanner": "scanner-primary", "fingerprint": "f341860ab6a90be6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "0377cb181c8d0577", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "c1464629a3f00051", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-8fbc8025895d84e3", "level": "warning", "message": {"text": "Frontend route `/activate` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e7c393f59d84f3cc", "scanner": "scanner-primary", "fingerprint": "8fbc8025895d84e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7a58ccd7a0fa578b", "level": "warning", "message": {"text": "Frontend route `/error` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "25e35f2dd519b1e1", "scanner": "scanner-primary", "fingerprint": "7a58ccd7a0fa578b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1a3eddf7d46225b9", "level": "warning", "message": {"text": "Frontend route `/rate-limited` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0536af622d74f969", "scanner": "scanner-primary", "fingerprint": "1a3eddf7d46225b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0bdd20907c68905a", "level": "warning", "message": {"text": "Frontend route `/broker/:broker/totp` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4efa0fa3df1e174d", "scanner": "scanner-primary", "fingerprint": "0bdd20907c68905a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b705b80971443048", "level": "warning", "message": {"text": "Frontend route `/broker/samco/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "41e8f6be41ddfe9c", "scanner": "scanner-primary", "fingerprint": "b705b80971443048", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-119f80ebcf0de353", "level": "warning", "message": {"text": "Frontend route `/:broker/auth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2bbbd5a9bf36e770", "scanner": "scanner-primary", "fingerprint": "119f80ebcf0de353", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d8007e7cc02f7733", "level": "warning", "message": {"text": "Frontend route `/platforms` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "5838fe1e3e618c46", "scanner": "scanner-primary", "fingerprint": "d8007e7cc02f7733", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ae2da59a47b45c91", "level": "warning", "message": {"text": "Frontend route `/analyzer` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4a2e7d3c7d17a1f4", "scanner": "scanner-primary", "fingerprint": "ae2da59a47b45c91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-51807700a6c7920f", "level": "warning", "message": {"text": "Frontend route `/tools` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "405e3b434d9b3d8e", "scanner": "scanner-primary", "fingerprint": "51807700a6c7920f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cf256815626ca9bb", "level": "warning", "message": {"text": "Frontend route `/tools/strategy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a892cf1c75038350", "scanner": "scanner-primary", "fingerprint": "cf256815626ca9bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8372fed8ecfc6af5", "level": "warning", "message": {"text": "Frontend route `/tools/strategy/portfolio` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8f69336cf9ad6e0d", "scanner": "scanner-primary", "fingerprint": "8372fed8ecfc6af5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6756c9dafdc17d74", "level": "warning", "message": {"text": "Frontend route `/websocket/test` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "393b9167470dedda", "scanner": "scanner-primary", "fingerprint": "6756c9dafdc17d74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d24ef41e40d67d15", "level": "warning", "message": {"text": "Frontend route `/websocket/test/20` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "44f11793f0179599", "scanner": "scanner-primary", "fingerprint": "d24ef41e40d67d15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-183a0d2e1a2fd8f3", "level": "warning", "message": {"text": "Frontend route `/websocket/test/30` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "361e581f06ff2ec7", "scanner": "scanner-primary", "fingerprint": "183a0d2e1a2fd8f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-df71ee4567a074b5", "level": "warning", "message": {"text": "Frontend route `/websocket/test/50` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "dd0fbc38fd9eb6b4", "scanner": "scanner-primary", "fingerprint": "df71ee4567a074b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4e9aa676253f006c", "level": "warning", "message": {"text": "Frontend route `/strategy/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "fa435c9d0fbcf0db", "scanner": "scanner-primary", "fingerprint": "4e9aa676253f006c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eb6961687a5fb56f", "level": "warning", "message": {"text": "Frontend route `/strategy/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "14c53f5b2eb071ca", "scanner": "scanner-primary", "fingerprint": "eb6961687a5fb56f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d14498a343e518b5", "level": "warning", "message": {"text": "Frontend route `/python/:strategyId/edit` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "557c5b6b311559b1", "scanner": "scanner-primary", "fingerprint": "d14498a343e518b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aa18c27322875a4c", "level": "warning", "message": {"text": "Frontend route `/python/:strategyId/logs` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0554c94689dfef89", "scanner": "scanner-primary", "fingerprint": "aa18c27322875a4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2b8067143c2d05e1", "level": "warning", "message": {"text": "Frontend route `/python/:strategyId/schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "23fbe6974e5e0f0c", "scanner": "scanner-primary", "fingerprint": "2b8067143c2d05e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-807a59db0043d1bc", "level": "warning", "message": {"text": "Frontend route `/chartink/:strategyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d7de1398b537d24b", "scanner": "scanner-primary", "fingerprint": "807a59db0043d1bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f3c6a644007ea2ca", "level": "warning", "message": {"text": "Frontend route `/chartink/:strategyId/configure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "eb821295f4ef505b", "scanner": "scanner-primary", "fingerprint": "f3c6a644007ea2ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b90a3b793df19079", "level": "warning", "message": {"text": "Frontend route `/historify/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d09c0a8c69e15764", "scanner": "scanner-primary", "fingerprint": "b90a3b793df19079", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a0426e05114f03a8", "level": "warning", "message": {"text": "Frontend route `/historify/charts/:symbol` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "52938b9d79356ec9", "scanner": "scanner-primary", "fingerprint": "a0426e05114f03a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16de1fc8a097c268", "level": "warning", "message": {"text": "Frontend route `/flow/editor/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "efc0f87b7af51369", "scanner": "scanner-primary", "fingerprint": "16de1fc8a097c268", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0e0625e50c6fff64", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/api/client.ts:7)"}, "properties": {"repobilityId": "507711762397da64", "scanner": "scanner-primary", "fingerprint": "0e0625e50c6fff64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d360196839012024", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/utils/errorReporter.ts:74)"}, "properties": {"repobilityId": "b999f4d45d91932e", "scanner": "scanner-primary", "fingerprint": "d360196839012024", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-909b2214eaa44184", "level": "error", "message": {"text": "Dangling fetch: GET /api/broker/capabilities (frontend/src/stores/brokerStore.ts:24)"}, "properties": {"repobilityId": "af32f8aa88d6b84f", "scanner": "scanner-primary", "fingerprint": "909b2214eaa44184", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc9a27d76b70772c", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/stores/themeStore.ts:117)"}, "properties": {"repobilityId": "6abfc2dfaea03833", "scanner": "scanner-primary", "fingerprint": "cc9a27d76b70772c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8051af0e479f9eb", "level": "error", "message": {"text": "Dangling fetch: POST /auth/analyzer-toggle (frontend/src/stores/themeStore.ts:122)"}, "properties": {"repobilityId": "6247e96c0ff4aaa2", "scanner": "scanner-primary", "fingerprint": "c8051af0e479f9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff4a3ded5daf8b2b", "level": "error", "message": {"text": "Dangling fetch: GET /auth/analyzer-mode (frontend/src/stores/themeStore.ts:150)"}, "properties": {"repobilityId": "066d374f7b082255", "scanner": "scanner-primary", "fingerprint": "ff4a3ded5daf8b2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd0237f1d015f9eb", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useMarketStatus.ts:32)"}, "properties": {"repobilityId": "abb06159266c0e3e", "scanner": "scanner-primary", "fingerprint": "cd0237f1d015f9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bb0a177afe42f63", "level": "error", "message": {"text": "Dangling fetch: GET /admin/api/timings (frontend/src/hooks/useMarketStatus.ts:60)"}, "properties": {"repobilityId": "26ce07174ef99d68", "scanner": "scanner-primary", "fingerprint": "4bb0a177afe42f63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d5c06fa3b1d7290", "level": "error", "message": {"text": "Dangling fetch: GET /admin/api/holidays (frontend/src/hooks/useMarketStatus.ts:61)"}, "properties": {"repobilityId": "8fa94b07931f38c2", "scanner": "scanner-primary", "fingerprint": "5d5c06fa3b1d7290", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98902e8011e433c5", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/optionchain (frontend/src/hooks/useOptionChainPolling.ts:81)"}, "properties": {"repobilityId": "a3a7245115299b6b", "scanner": "scanner-primary", "fingerprint": "98902e8011e433c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8382de4e41a859c0", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/hooks/useWebSocketTester.ts:6)"}, "properties": {"repobilityId": "ff268230ca5819eb", "scanner": "scanner-primary", "fingerprint": "8382de4e41a859c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f6c55545843f913", "level": "error", "message": {"text": "Dangling fetch: GET /auth/app-info (frontend/src/components/layout/Footer.tsx:18)"}, "properties": {"repobilityId": "ed8a8f93c7530993", "scanner": "scanner-primary", "fingerprint": "2f6c55545843f913", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7bc9cb32868919e", "level": "error", "message": {"text": "Dangling fetch: GET /auth/session-status (frontend/src/components/auth/AuthSync.tsx:26)"}, "properties": {"repobilityId": "3a81d17f59575395", "scanner": "scanner-primary", "fingerprint": "a7bc9cb32868919e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12c7088a75b2a946", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/HistorifyCharts.tsx:430)"}, "properties": {"repobilityId": "5c5feb24c4dcd3a0", "scanner": "scanner-primary", "fingerprint": "12c7088a75b2a946", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cee0703ddd863ee1", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/data?${params} (frontend/src/pages/HistorifyCharts.tsx:452)"}, "properties": {"repobilityId": "afc9e0ff27b3b92a", "scanner": "scanner-primary", "fingerprint": "cee0703ddd863ee1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a89c69cb82e13def", "level": "error", "message": {"text": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:96)"}, "properties": {"repobilityId": "6c02f138411fecb2", "scanner": "scanner-primary", "fingerprint": "a89c69cb82e13def", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6879a80f63b63731", "level": "error", "message": {"text": "Dangling fetch: GET /auth/broker-config (frontend/src/pages/BrokerSelect.tsx:146)"}, "properties": {"repobilityId": "4f5e42847345392d", "scanner": "scanner-primary", "fingerprint": "6879a80f63b63731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08f483ad7302b1a2", "level": "error", "message": {"text": "Dangling fetch: GET /sandbox/mypnl/api/data (frontend/src/pages/SandboxPnL.tsx:102)"}, "properties": {"repobilityId": "5e2b91e59466f56c", "scanner": "scanner-primary", "fingerprint": "08f483ad7302b1a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22dc39ea5fd1a612", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Sandbox.tsx:27)"}, "properties": {"repobilityId": "ec6550bac3d58181", "scanner": "scanner-primary", "fingerprint": "22dc39ea5fd1a612", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33e92331e43532ea", "level": "error", "message": {"text": "Dangling fetch: GET /sandbox/api/configs (frontend/src/pages/Sandbox.tsx:94)"}, "properties": {"repobilityId": "8b7dadaf33560929", "scanner": "scanner-primary", "fingerprint": "33e92331e43532ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6027da9b462edfdc", "level": "error", "message": {"text": "Dangling fetch: POST /sandbox/update (frontend/src/pages/Sandbox.tsx:141)"}, "properties": {"repobilityId": "5c7f7868269ab9bc", "scanner": "scanner-primary", "fingerprint": "6027da9b462edfdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18c51d10c4e4b8a6", "level": "error", "message": {"text": "Dangling fetch: POST /sandbox/reset (frontend/src/pages/Sandbox.tsx:176)"}, "properties": {"repobilityId": "462e4d78efb8a6f5", "scanner": "scanner-primary", "fingerprint": "18c51d10c4e4b8a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf9ac4834b3a030f", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/ApiKey.tsx:32)"}, "properties": {"repobilityId": "8a55d6a292881661", "scanner": "scanner-primary", "fingerprint": "bf9ac4834b3a030f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-554c232609cbe2b5", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/PnLTracker.tsx:11)"}, "properties": {"repobilityId": "4e3fc7517fde3129", "scanner": "scanner-primary", "fingerprint": "554c232609cbe2b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37c84739e8c14ca5", "level": "error", "message": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/GoCharting.tsx:85)"}, "properties": {"repobilityId": "4e8dd923eaa8df24", "scanner": "scanner-primary", "fingerprint": "37c84739e8c14ca5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e13684b9d42aee5", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/GoCharting.tsx:115)"}, "properties": {"repobilityId": "c80c78d292fe46a0", "scanner": "scanner-primary", "fingerprint": "4e13684b9d42aee5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b12f6304c67213d", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/underlyings?exchange=${exchange} (frontend/src/pages/Token.tsx:153)"}, "properties": {"repobilityId": "859f0405576b7ff0", "scanner": "scanner-primary", "fingerprint": "9b12f6304c67213d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f545bd1ad299d7e", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/expiries?exchange=${exchange} (frontend/src/pages/Token.tsx:154)"}, "properties": {"repobilityId": "b9d2786255edbafd", "scanner": "scanner-primary", "fingerprint": "2f545bd1ad299d7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b6ebd872d28aa14", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/expiries?exchange=${exchange}&underlying=${underlying} (frontend/src/pages/Token.tsx:190)"}, "properties": {"repobilityId": "6ea5e593765e61a0", "scanner": "scanner-primary", "fingerprint": "1b6ebd872d28aa14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0077c732bb1554a5", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Token.tsx:231)"}, "properties": {"repobilityId": "017d680a1c543b8e", "scanner": "scanner-primary", "fingerprint": "0077c732bb1554a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fc0d15e30b26164", "level": "error", "message": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:132)"}, "properties": {"repobilityId": "91dd2e3dfe36dbc3", "scanner": "scanner-primary", "fingerprint": "7fc0d15e30b26164", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f76caac157d8466", "level": "error", "message": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:162)"}, "properties": {"repobilityId": "3506695b8b100fc7", "scanner": "scanner-primary", "fingerprint": "7f76caac157d8466", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee38dced3143cc40", "level": "error", "message": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:197)"}, "properties": {"repobilityId": "bfc0d32da4b2688b", "scanner": "scanner-primary", "fingerprint": "ee38dced3143cc40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2c73afc92945666", "level": "error", "message": {"text": "Dangling fetch: POST /auth/reset-password (frontend/src/pages/ResetPassword.tsx:231)"}, "properties": {"repobilityId": "27df042fb2aeff26", "scanner": "scanner-primary", "fingerprint": "e2c73afc92945666", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c05bc2cbece4a43", "level": "error", "message": {"text": "Dangling fetch: POST /samco/callback (frontend/src/pages/SamcoAuth.tsx:266)"}, "properties": {"repobilityId": "5b228c3d711112f4", "scanner": "scanner-primary", "fingerprint": "6c05bc2cbece4a43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09dfed266c69d522", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Playground.tsx:70)"}, "properties": {"repobilityId": "b09ea336b7ba0875", "scanner": "scanner-primary", "fingerprint": "09dfed266c69d522", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06ea881757fe7e25", "level": "error", "message": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/Playground.tsx:253)"}, "properties": {"repobilityId": "dcd0745e288065cd", "scanner": "scanner-primary", "fingerprint": "06ea881757fe7e25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b54c4776426cbe2c", "level": "error", "message": {"text": "Dangling fetch: GET /playground/endpoints (frontend/src/pages/Playground.tsx:267)"}, "properties": {"repobilityId": "fdf109d95ba874ec", "scanner": "scanner-primary", "fingerprint": "b54c4776426cbe2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be7d51893867a646", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params.toString()} (frontend/src/pages/Search.tsx:121)"}, "properties": {"repobilityId": "86cf64bc4c3ea5ef", "scanner": "scanner-primary", "fingerprint": "be7d51893867a646", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d83482daa2e23a0a", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/WebSocketTest.tsx:43)"}, "properties": {"repobilityId": "80fb9f9da12c0908", "scanner": "scanner-primary", "fingerprint": "d83482daa2e23a0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff5b183fd4d6518a", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/WebSocketTest.tsx:544)"}, "properties": {"repobilityId": "a1721760f99559b5", "scanner": "scanner-primary", "fingerprint": "ff5b183fd4d6518a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b51198e11e15e9b", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Setup.tsx:96)"}, "properties": {"repobilityId": "566df8821369337a", "scanner": "scanner-primary", "fingerprint": "1b51198e11e15e9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b3b75123d6e8abb", "level": "error", "message": {"text": "Dangling fetch: GET /auth/sso-config (frontend/src/pages/Login.tsx:33)"}, "properties": {"repobilityId": "1d4cbda9250194a4", "scanner": "scanner-primary", "fingerprint": "8b3b75123d6e8abb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dfda46358a258b1", "level": "error", "message": {"text": "Dangling fetch: GET /auth/check-setup (frontend/src/pages/Login.tsx:44)"}, "properties": {"repobilityId": "581fc0c39bba4132", "scanner": "scanner-primary", "fingerprint": "0dfda46358a258b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9ce093afde988fb", "level": "error", "message": {"text": "Dangling fetch: GET /auth/session-status (frontend/src/pages/Login.tsx:54)"}, "properties": {"repobilityId": "b7e8dd789e8f17a9", "scanner": "scanner-primary", "fingerprint": "f9ce093afde988fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-216e50cee53c1e95", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Login.tsx:92)"}, "properties": {"repobilityId": "7a703f788bfc2493", "scanner": "scanner-primary", "fingerprint": "216e50cee53c1e95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2073aa91f806950b", "level": "error", "message": {"text": "Dangling fetch: POST /auth/login (frontend/src/pages/Login.tsx:111)"}, "properties": {"repobilityId": "cf8bf6644def0cc7", "scanner": "scanner-primary", "fingerprint": "2073aa91f806950b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-706baec70d231233", "level": "error", "message": {"text": "Dangling fetch: GET /playground/api-key (frontend/src/pages/TradingView.tsx:87)"}, "properties": {"repobilityId": "32dc0aa24cba61ef", "scanner": "scanner-primary", "fingerprint": "706baec70d231233", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1af4bc5c8b4fd45", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/TradingView.tsx:118)"}, "properties": {"repobilityId": "47f24846a129cd6a", "scanner": "scanner-primary", "fingerprint": "c1af4bc5c8b4fd45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c4d29ea3989220d", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:39)"}, "properties": {"repobilityId": "dfcf2547a2c7032c", "scanner": "scanner-primary", "fingerprint": "2c4d29ea3989220d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-328637854f255825", "level": "error", "message": {"text": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:45)"}, "properties": {"repobilityId": "c1a2068d20968cc3", "scanner": "scanner-primary", "fingerprint": "328637854f255825", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5d29b819598d181", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Activate.tsx:74)"}, "properties": {"repobilityId": "06d24cf6032718ef", "scanner": "scanner-primary", "fingerprint": "f5d29b819598d181", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af9f66bb239d88e2", "level": "error", "message": {"text": "Dangling fetch: POST /auth/activate (frontend/src/pages/Activate.tsx:81)"}, "properties": {"repobilityId": "ee5a0fa1dc87a684", "scanner": "scanner-primary", "fingerprint": "af9f66bb239d88e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-287b0deb905392c9", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/Historify.tsx:227)"}, "properties": {"repobilityId": "85fe521200576e05", "scanner": "scanner-primary", "fingerprint": "287b0deb905392c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec08c4d4e1a12fb4", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/watchlist (frontend/src/pages/Historify.tsx:571)"}, "properties": {"repobilityId": "ee1173706f2df105", "scanner": "scanner-primary", "fingerprint": "ec08c4d4e1a12fb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38a6d88aab92134a", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/catalog (frontend/src/pages/Historify.tsx:580)"}, "properties": {"repobilityId": "377b7a1fce8ec68b", "scanner": "scanner-primary", "fingerprint": "38a6d88aab92134a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e6058949d62395c", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/intervals (frontend/src/pages/Historify.tsx:589)"}, "properties": {"repobilityId": "ae1eeb49881f4e95", "scanner": "scanner-primary", "fingerprint": "2e6058949d62395c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b64418b947bbdc5", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/historify-intervals (frontend/src/pages/Historify.tsx:598)"}, "properties": {"repobilityId": "6565890feb222b24", "scanner": "scanner-primary", "fingerprint": "0b64418b947bbdc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-645a946cbc1178c5", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/stats (frontend/src/pages/Historify.tsx:613)"}, "properties": {"repobilityId": "fa66061b4a5e1d55", "scanner": "scanner-primary", "fingerprint": "645a946cbc1178c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27e536fcc68b3a2b", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/exchanges (frontend/src/pages/Historify.tsx:622)"}, "properties": {"repobilityId": "c1b8db2646c3ef57", "scanner": "scanner-primary", "fingerprint": "27e536fcc68b3a2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9479a813df4974a", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/jobs?limit=50 (frontend/src/pages/Historify.tsx:632)"}, "properties": {"repobilityId": "0341a5a1fe3b2c8a", "scanner": "scanner-primary", "fingerprint": "b9479a813df4974a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a778760a89f4a4b", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/schedules (frontend/src/pages/Historify.tsx:645)"}, "properties": {"repobilityId": "1fa67d5d29d05c79", "scanner": "scanner-primary", "fingerprint": "4a778760a89f4a4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f35dd42469d35db", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/schedules/${scheduleId}/executions?limit=10 (frontend/src/pages/Historify.tsx:656)"}, "properties": {"repobilityId": "7b0de88668aa0346", "scanner": "scanner-primary", "fingerprint": "4f35dd42469d35db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5885a0944fb2479", "level": "error", "message": {"text": "Dangling fetch: DELETE /historify/api/schedules/${scheduleId} (frontend/src/pages/Historify.tsx:749)"}, "properties": {"repobilityId": "a7ced50ece3ec969", "scanner": "scanner-primary", "fingerprint": "b5885a0944fb2479", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-859d75f1b780d6b4", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:770)"}, "properties": {"repobilityId": "6fe4c99f64699ed5", "scanner": "scanner-primary", "fingerprint": "859d75f1b780d6b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-191edfb475aeea54", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/schedules/${schedule.id}/${endpoint} (frontend/src/pages/Historify.tsx:791)"}, "properties": {"repobilityId": "9583863121ed89ff", "scanner": "scanner-primary", "fingerprint": "191edfb475aeea54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afb285d0fda7c48e", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/schedules/${scheduleId}/trigger (frontend/src/pages/Historify.tsx:811)"}, "properties": {"repobilityId": "f330fced1474efaa", "scanner": "scanner-primary", "fingerprint": "afb285d0fda7c48e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7b6ca26ca1dafa9", "level": "error", "message": {"text": "Dangling fetch: GET /search/api/search?${params} (frontend/src/pages/Historify.tsx:858)"}, "properties": {"repobilityId": "db16a0fdf26466a0", "scanner": "scanner-primary", "fingerprint": "d7b6ca26ca1dafa9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a12c1518b13ce740", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/watchlist (frontend/src/pages/Historify.tsx:875)"}, "properties": {"repobilityId": "b0cdb2268fe59383", "scanner": "scanner-primary", "fingerprint": "a12c1518b13ce740", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-615720e41e51df30", "level": "error", "message": {"text": "Dangling fetch: DELETE /historify/api/watchlist (frontend/src/pages/Historify.tsx:898)"}, "properties": {"repobilityId": "7a0b7b763636f9be", "scanner": "scanner-primary", "fingerprint": "615720e41e51df30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-272303f7b1e8d4c5", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/watchlist/bulk (frontend/src/pages/Historify.tsx:934)"}, "properties": {"repobilityId": "14e452000291f444", "scanner": "scanner-primary", "fingerprint": "272303f7b1e8d4c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3ae10c498e0ec2e", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/fno/underlyings?exchange=${fnoExchange} (frontend/src/pages/Historify.tsx:960)"}, "properties": {"repobilityId": "a676f1e4e517d443", "scanner": "scanner-primary", "fingerprint": "b3ae10c498e0ec2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c9b358f98c5a6f6", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/fno/expiries?${params} (frontend/src/pages/Historify.tsx:977)"}, "properties": {"repobilityId": "b66a6f4c132de667", "scanner": "scanner-primary", "fingerprint": "2c9b358f98c5a6f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad7b6551dd3013fb", "level": "error", "message": {"text": "Dangling fetch: GET /historify/api/fno/chain?${params} (frontend/src/pages/Historify.tsx:1001)"}, "properties": {"repobilityId": "092085881d1024e2", "scanner": "scanner-primary", "fingerprint": "ad7b6551dd3013fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b69abcc28f11090f", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/jobs (frontend/src/pages/Historify.tsx:1026)"}, "properties": {"repobilityId": "0a5614a862082b68", "scanner": "scanner-primary", "fingerprint": "b69abcc28f11090f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2a3e5a1918d45d1", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/pause (frontend/src/pages/Historify.tsx:1064)"}, "properties": {"repobilityId": "8ece54859bcd144f", "scanner": "scanner-primary", "fingerprint": "b2a3e5a1918d45d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f95ca10dfe7d41bb", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/resume (frontend/src/pages/Historify.tsx:1084)"}, "properties": {"repobilityId": "844ef34825b1247b", "scanner": "scanner-primary", "fingerprint": "f95ca10dfe7d41bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68c84d560cdeecf0", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/cancel (frontend/src/pages/Historify.tsx:1104)"}, "properties": {"repobilityId": "14f525ae4bf13a9b", "scanner": "scanner-primary", "fingerprint": "68c84d560cdeecf0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e512b2bb6ca99b2", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/jobs/${jobId}/retry (frontend/src/pages/Historify.tsx:1124)"}, "properties": {"repobilityId": "fcb5599441dd0d2c", "scanner": "scanner-primary", "fingerprint": "2e512b2bb6ca99b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59e14e9c3d7f8ca2", "level": "error", "message": {"text": "Dangling fetch: DELETE /historify/api/jobs/${jobId} (frontend/src/pages/Historify.tsx:1144)"}, "properties": {"repobilityId": "cc829cd852973348", "scanner": "scanner-primary", "fingerprint": "59e14e9c3d7f8ca2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-167e6cc8630382b5", "level": "error", "message": {"text": "Dangling fetch: DELETE /historify/api/delete (frontend/src/pages/Historify.tsx:1169)"}, "properties": {"repobilityId": "b4d7f6a9d453d2e3", "scanner": "scanner-primary", "fingerprint": "167e6cc8630382b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-060a729043467828", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/delete/bulk (frontend/src/pages/Historify.tsx:1201)"}, "properties": {"repobilityId": "723e84e57820e1f2", "scanner": "scanner-primary", "fingerprint": "060a729043467828", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69a6ebd6803785b7", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/watchlist/bulk/delete (frontend/src/pages/Historify.tsx:1234)"}, "properties": {"repobilityId": "262d7c2b322b8734", "scanner": "scanner-primary", "fingerprint": "69a6ebd6803785b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47d4c87a93ce7ebe", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/upload (frontend/src/pages/Historify.tsx:1287)"}, "properties": {"repobilityId": "e90fb4be102960df", "scanner": "scanner-primary", "fingerprint": "47d4c87a93ce7ebe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b1fa5ee065601a1", "level": "error", "message": {"text": "Dangling fetch: POST /historify/api/export/bulk (frontend/src/pages/Historify.tsx:1327)"}, "properties": {"repobilityId": "c067603330c1dc7f", "scanner": "scanner-primary", "fingerprint": "2b1fa5ee065601a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb0906cd1b51a4ae", "level": "error", "message": {"text": "Dangling fetch: GET /auth/dashboard-data (frontend/src/pages/Dashboard.tsx:75)"}, "properties": {"repobilityId": "41a58291f6cb3183", "scanner": "scanner-primary", "fingerprint": "bb0906cd1b51a4ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e194f3c9e1b24884", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/pages/MasterContract.tsx:22)"}, "properties": {"repobilityId": "6e8326c05b11791f", "scanner": "scanner-primary", "fingerprint": "e194f3c9e1b24884", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c4a5306c744ea88", "level": "error", "message": {"text": "Dangling fetch: GET /auth/csrf-token (frontend/src/lib/MarketDataManager.ts:77)"}, "properties": {"repobilityId": "c991e226a93a5df1", "scanner": "scanner-primary", "fingerprint": "8c4a5306c744ea88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49191e07bfdacf55", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/multiquotes (frontend/src/lib/MarketDataManager.ts:768)"}, "properties": {"repobilityId": "7f76bf87167ac14b", "scanner": "scanner-primary", "fingerprint": "49191e07bfdacf55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "3f7110a16fda65a7", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "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": "eb00dcde8147d962", "scanner": "scanner-primary", "fingerprint": "6f3176244cc0936c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec3442aa0b6ba39d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stats"}, "properties": {"repobilityId": "0517967aa67421ae", "scanner": "scanner-primary", "fingerprint": "ec3442aa0b6ba39d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac43026d647e6efe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/broker/<broker>/stats"}, "properties": {"repobilityId": "fabd1904d35f41c1", "scanner": "scanner-primary", "fingerprint": "ac43026d647e6efe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10d6c2f14a0f976e", "level": "note", "message": {"text": "Unused endpoint: ANY /export"}, "properties": {"repobilityId": "e172a2a88bcd51a4", "scanner": "scanner-primary", "fingerprint": "10d6c2f14a0f976e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d27ef6e00b18bdda", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategy-portfolio"}, "properties": {"repobilityId": "8b41a74537e4d376", "scanner": "scanner-primary", "fingerprint": "d27ef6e00b18bdda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a4269c631838de0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategy-portfolio/<int:entry_id>"}, "properties": {"repobilityId": "d34c88decca78d4a", "scanner": "scanner-primary", "fingerprint": "8a4269c631838de0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d12b12e8119e72f", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials"}, "properties": {"repobilityId": "b79eed07363d477b", "scanner": "scanner-primary", "fingerprint": "2d12b12e8119e72f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03da479ff5fe9b37", "level": "note", "message": {"text": "Unused endpoint: ANY /capabilities"}, "properties": {"repobilityId": "4d03bf01ba9a3112", "scanner": "scanner-primary", "fingerprint": "03da479ff5fe9b37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f53006350df2366a", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/list"}, "properties": {"repobilityId": "3ce39d9fc94e6185", "scanner": "scanner-primary", "fingerprint": "f53006350df2366a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ee48c944aa87cb0", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/save"}, "properties": {"repobilityId": "4b75659a9a108c90", "scanner": "scanner-primary", "fingerprint": "7ee48c944aa87cb0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0473f8ea5acbd194", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/<broker>/activate"}, "properties": {"repobilityId": "70199ec19c7ad88b", "scanner": "scanner-primary", "fingerprint": "0473f8ea5acbd194", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eac221bdc0d9df88", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/request-v4-ip"}, "properties": {"repobilityId": "b2f0a397d922b461", "scanner": "scanner-primary", "fingerprint": "eac221bdc0d9df88", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-406378f9c9ac6a6b", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/<broker>"}, "properties": {"repobilityId": "4eebe8180b1edfef", "scanner": "scanner-primary", "fingerprint": "406378f9c9ac6a6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9421953e94d6e95", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/<broker>/instructions"}, "properties": {"repobilityId": "07c6afdb336b4b3f", "scanner": "scanner-primary", "fingerprint": "d9421953e94d6e95", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4393b87c0a707cb7", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/host-info"}, "properties": {"repobilityId": "a4e060f40966e6ab", "scanner": "scanner-primary", "fingerprint": "4393b87c0a707cb7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2970ca1a2cad5cf", "level": "note", "message": {"text": "Unused endpoint: ANY /supported"}, "properties": {"repobilityId": "c93de7694cb4e82b", "scanner": "scanner-primary", "fingerprint": "c2970ca1a2cad5cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ef6c71cc86602d4", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/auto-login-status"}, "properties": {"repobilityId": "016a26c02707de68", "scanner": "scanner-primary", "fingerprint": "7ef6c71cc86602d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64e24ff71cfb575e", "level": "note", "message": {"text": "Unused endpoint: ANY /credentials/<broker>/auto-login"}, "properties": {"repobilityId": "bccff2ce1b5a437b", "scanner": "scanner-primary", "fingerprint": "64e24ff71cfb575e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9eb9835fae2f3ef6", "level": "note", "message": {"text": "Unused endpoint: ANY /api/freeze"}, "properties": {"repobilityId": "e2cec74f7af34beb", "scanner": "scanner-primary", "fingerprint": "9eb9835fae2f3ef6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b03058812dde661", "level": "note", "message": {"text": "Unused endpoint: ANY /api/freeze/<int:id>"}, "properties": {"repobilityId": "0219f2ca3182dcc5", "scanner": "scanner-primary", "fingerprint": "2b03058812dde661", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae724d93deace16a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/freeze/upload"}, "properties": {"repobilityId": "2dec52e702efcada", "scanner": "scanner-primary", "fingerprint": "ae724d93deace16a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-463d9abb580c138c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/holidays"}, "properties": {"repobilityId": "9b032651a547fe6a", "scanner": "scanner-primary", "fingerprint": "463d9abb580c138c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b73acf54004d016", "level": "note", "message": {"text": "Unused endpoint: ANY /api/holidays/<int:id>"}, "properties": {"repobilityId": "6c5a05960d10e4e2", "scanner": "scanner-primary", "fingerprint": "4b73acf54004d016", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66df8609cf979141", "level": "note", "message": {"text": "Unused endpoint: ANY /api/timings"}, "properties": {"repobilityId": "186e34137c543d55", "scanner": "scanner-primary", "fingerprint": "66df8609cf979141", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c0b1f242cd03a58", "level": "note", "message": {"text": "Unused endpoint: ANY /api/timings/<exchange>"}, "properties": {"repobilityId": "0ecebbf19178d08a", "scanner": "scanner-primary", "fingerprint": "5c0b1f242cd03a58", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e5f8faee4e15c04", "level": "note", "message": {"text": "Unused endpoint: ANY /api/timings/check"}, "properties": {"repobilityId": "be04b2f000db6964", "scanner": "scanner-primary", "fingerprint": "2e5f8faee4e15c04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35703b0b288a5396", "level": "note", "message": {"text": "Unused endpoint: ANY /api/errors"}, "properties": {"repobilityId": "0b47be75a961f75e", "scanner": "scanner-primary", "fingerprint": "35703b0b288a5396", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e6aa986bfe15188", "level": "note", "message": {"text": "Unused endpoint: ANY /api/errors/client"}, "properties": {"repobilityId": "9ce12085bce4529a", "scanner": "scanner-primary", "fingerprint": "8e6aa986bfe15188", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-697429ca8cec85ad", "level": "note", "message": {"text": "Unused endpoint: ANY /api/errors/stats"}, "properties": {"repobilityId": "c23aac26d7013a24", "scanner": "scanner-primary", "fingerprint": "697429ca8cec85ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c734bb807f62aaf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/errors/groups"}, "properties": {"repobilityId": "3571d31ec30c88f2", "scanner": "scanner-primary", "fingerprint": "2c734bb807f62aaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e53edb2d50d0ff7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/system"}, "properties": {"repobilityId": "17241c2bf34d976c", "scanner": "scanner-primary", "fingerprint": "2e53edb2d50d0ff7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4a782fedca4ccaf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/system/diagnostics"}, "properties": {"repobilityId": "fde1154b2dc08994", "scanner": "scanner-primary", "fingerprint": "e4a782fedca4ccaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67971b558431c4d2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/system/report"}, "properties": {"repobilityId": "a31ee30e5aa1b765", "scanner": "scanner-primary", "fingerprint": "67971b558431c4d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-709036c0923af2ec", "level": "note", "message": {"text": "Unused endpoint: ANY /new"}, "properties": {"repobilityId": "ec7c8e6fa0f2db0c", "scanner": "scanner-primary", "fingerprint": "709036c0923af2ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0f642946c22251a", "level": "note", "message": {"text": "Unused endpoint: ANY /<int:strategy_id>"}, "properties": {"repobilityId": "82dfca2e459d0806", "scanner": "scanner-primary", "fingerprint": "c0f642946c22251a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ebb8a71915dade0e", "level": "note", "message": {"text": "Unused endpoint: ANY /<int:strategy_id>/delete"}, "properties": {"repobilityId": "8a0699c34af7cfa0", "scanner": "scanner-primary", "fingerprint": "ebb8a71915dade0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-454076aa944c7dbc", "level": "note", "message": {"text": "Unused endpoint: ANY /<int:strategy_id>/configure"}, "properties": {"repobilityId": "447a0e914339f60d", "scanner": "scanner-primary", "fingerprint": "454076aa944c7dbc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b05b00af2bc31988", "level": "note", "message": {"text": "Unused endpoint: ANY /<int:strategy_id>/symbol/<int:mapping_id>/delete"}, "properties": {"repobilityId": "e553e4a16e1832ac", "scanner": "scanner-primary", "fingerprint": "b05b00af2bc31988", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e18eb47f8d238cc4", "level": "note", "message": {"text": "Unused endpoint: ANY /<int:strategy_id>/toggle"}, "properties": {"repobilityId": "3b51fdc9f4fec24f", "scanner": "scanner-primary", "fingerprint": "e18eb47f8d238cc4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-117531c0d0465186", "level": "note", "message": {"text": "Unused endpoint: ANY /search"}, "properties": {"repobilityId": "398405546506e6ea", "scanner": "scanner-primary", "fingerprint": "117531c0d0465186", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-543849efa65e2774", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies"}, "properties": {"repobilityId": "1646e4592ef5d74d", "scanner": "scanner-primary", "fingerprint": "543849efa65e2774", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-604cab7e8c199d62", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategy/<int:strategy_id>"}, "properties": {"repobilityId": "edcf63403d89a263", "scanner": "scanner-primary", "fingerprint": "604cab7e8c199d62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff25b5bbf13a3d4b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategy"}, "properties": {"repobilityId": "706bb2ea31bd0aca", "scanner": "scanner-primary", "fingerprint": "ff25b5bbf13a3d4b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6f89b8a6d76cd8d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategy/<int:strategy_id>/toggle"}, "properties": {"repobilityId": "a5c5852a76759472", "scanner": "scanner-primary", "fingerprint": "f6f89b8a6d76cd8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c63666721f177394", "level": "note", "message": {"text": "Unused endpoint: ANY /webhook/<webhook_id>"}, "properties": {"repobilityId": "76a3d9509a09b3aa", "scanner": "scanner-primary", "fingerprint": "c63666721f177394", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-07b2b818a7405092", "level": "note", "message": {"text": "Unused endpoint: ANY /api/instance/info"}, "properties": {"repobilityId": "5af94940b6c1cbe0", "scanner": "scanner-primary", "fingerprint": "07b2b818a7405092", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74f4e3e32d52639c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/instance/audit/verify"}, "properties": {"repobilityId": "cc5f49f96b73fc36", "scanner": "scanner-primary", "fingerprint": "74f4e3e32d52639c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d537f8ac49530fa", "level": "note", "message": {"text": "Unused endpoint: ANY /api/instance/audit/head"}, "properties": {"repobilityId": "cbe45caaad72cf9e", "scanner": "scanner-primary", "fingerprint": "8d537f8ac49530fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ada543483cc58d71", "level": "note", "message": {"text": "Unused endpoint: ANY /api/instance/audit"}, "properties": {"repobilityId": "d65102c0ab1adabe", "scanner": "scanner-primary", "fingerprint": "ada543483cc58d71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}