{"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-06efa6f66b8c9653", "name": "Possibly dead Python function: forecast", "shortDescription": {"text": "Possibly dead Python function: forecast"}, "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-b2b93926b37748c0", "name": "Possibly dead Python function: optimal_entry_zscore", "shortDescription": {"text": "Possibly dead Python function: optimal_entry_zscore"}, "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-cd2253729a4beae4", "name": "Possibly dead Python function: reset_monthly_counters", "shortDescription": {"text": "Possibly dead Python function: reset_monthly_counters"}, "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-2908fbc9182afa27", "name": "Possibly dead Python function: check_exit", "shortDescription": {"text": "Possibly dead Python function: check_exit"}, "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-0534c1d97556283c", "name": "Possibly dead Python function: remove_strategy", "shortDescription": {"text": "Possibly dead Python function: remove_strategy"}, "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-de2455d31a45feed", "name": "Possibly dead Python function: remove_strategy", "shortDescription": {"text": "Possibly dead Python function: remove_strategy"}, "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-8d41810b7571e754", "name": "Possibly dead Python function: calculate_parkinson_volatility", "shortDescription": {"text": "Possibly dead Python function: calculate_parkinson_volatility"}, "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-00406c208d385441", "name": "Possibly dead Python function: save_to_db", "shortDescription": {"text": "Possibly dead Python function: save_to_db"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69682a9cc0ea2784", "name": "Possibly dead Python function: record_error", "shortDescription": {"text": "Possibly dead Python function: record_error"}, "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-b8a6cfb9c7566823", "name": "Possibly dead Python function: process_element", "shortDescription": {"text": "Possibly dead Python function: process_element"}, "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-1cd082f313e29ee3", "name": "Possibly dead Python function: unregister_callback", "shortDescription": {"text": "Possibly dead Python function: unregister_callback"}, "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-3ff08d5ab0e07548", "name": "Possibly dead Python function: print_market_data", "shortDescription": {"text": "Possibly dead Python function: print_market_data"}, "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-81216c94beccbc9d", "name": "Possibly dead Python function: to_influx_point", "shortDescription": {"text": "Possibly dead Python function: to_influx_point"}, "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-28170e0ea5a09c86", "name": "Possibly dead Python function: setup_complete_schema", "shortDescription": {"text": "Possibly dead Python function: setup_complete_schema"}, "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-9aef93bbdb6d16d0", "name": "Stray `console.log` in TS/JS \u2014 sdks/typescript/src/index.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sdks/typescript/src/index.ts:13"}, "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-8413d12b91d76b6f", "name": "Stray `console.log` in TS/JS \u2014 demo/src/UltraEfficientTradingDemo.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 demo/src/UltraEfficientTradingDemo.js:57"}, "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-abf4c896fa8e20de", "name": "Stray `console.log` in TS/JS \u2014 tests/strategy-tests.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/strategy-tests.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a085224e96b6ae41", "name": "Stray `console.log` in TS/JS \u2014 tests/unit/technical-indicators.test.js:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/unit/technical-indicators.test.js:127"}, "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-e01a8f46c2a44484", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-dashboard-data.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-dashboard-data.js:7"}, "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-1be6b4f41a7bf916", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-exports-fix.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-exports-fix.js:11"}, "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-d904ee9019e1e6f9", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-frontend-fixes.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-frontend-fixes.js:11"}, "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-8887d0048123f930", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-complete-system.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-complete-system.js:16"}, "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-a3ce9283b0d9e526", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-immediate-next-steps.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-immediate-next-steps.js:16"}, "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-909af1ca1a5c66bb", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-python-bridge.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-python-bridge.js:8"}, "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-8d5a1f819991e70e", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-features.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-features.js:16"}, "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-a8732634359ba732", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-banking-integration.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-banking-integration.js:4"}, "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-81f23dc534f4d3cd", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-real-market-data.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-real-market-data.js:10"}, "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-1fb09e3fb4804727", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-frontend.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-frontend.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-887f0cbf59c93f2d", "name": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-core-system.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-core-system.js:10"}, "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-e56bc48e524f8999", "name": "Stray `console.log` in TS/JS \u2014 tests/setup/jest.setup.js:306", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/jest.setup.js:306"}, "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-383b9e12a9c0187e", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/check-orders.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/check-orders.js:26"}, "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-f6c2cdd877e7dfe4", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/automation-server.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/automation-server.js:67"}, "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-19dc60b98fb78062", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/mock-market-data-server.js:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/mock-market-data-server.js:211"}, "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-640514f0d3868dce", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-service.js:343", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-service.js:343"}, "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-ce1c25ddb188a7da", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-integration-server.js:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-integration-server.js:48"}, "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-4dfc1aecdb4be49b", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/simple-status.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/simple-status.js:19"}, "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-54db55a9cbbfb39e", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-market-data-server.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-market-data-server.js:25"}, "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-6ba442f1f1273a82", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-server.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-server.js:146"}, "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-86c76f3d9565c8df", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/status-dashboard.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/status-dashboard.js:85"}, "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-d4ce3f7177573e5b", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/platform-demo.js:350", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/platform-demo.js:350"}, "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-c2027c6a5929ebb1", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/track-trades.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/track-trades.js:50"}, "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-c30764ff2098eb4e", "name": "Stray `console.log` in TS/JS \u2014 shared/test.js:2", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/test.js:2"}, "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-5834328fc455b6dc", "name": "Stray `console.log` in TS/JS \u2014 shared/demo.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/demo.js:16"}, "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-f0581b1b683efa92", "name": "Stray `console.log` in TS/JS \u2014 shared/libs/database/connection-pools.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/database/connection-pools.js:83"}, "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-994b7f3fc89fcc05", "name": "Stray `console.log` in TS/JS \u2014 shared/libs/database/migrations.js:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/database/migrations.js:94"}, "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-d9ed334f4ca3c624", "name": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/kafka-client.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/kafka-client.js:60"}, "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-4ae9af0fe690fce5", "name": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/redis-client.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/redis-client.js:47"}, "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-9de059b66ff43103", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-exit-by-confidence.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-exit-by-confidence.js:60"}, "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-48514307b608ceb5", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-committee-threshold.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-committee-threshold.js:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43ef76e7115f9e88", "name": "Stray `console.log` in TS/JS \u2014 scripts/crypto-edge-monitor.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/crypto-edge-monitor.js:88"}, "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-05a81671d78f7cba", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-pnl-pct.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-pnl-pct.js:49"}, "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-c30bbf11e1d02910", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-strategy-evidence.js:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-strategy-evidence.js:239"}, "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-785576024a9e9ae5", "name": "Stray `console.log` in TS/JS \u2014 deploy/shared/telegram-alerts.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/shared/telegram-alerts.js:27"}, "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-1d64d708dcb6edca", "name": "Stray `console.log` in TS/JS \u2014 deploy/dashboard/server.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/dashboard/server.js:31"}, "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-883b56cec1f89de7", "name": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/unified-trading-bot.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/unified-trading-bot.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4c97021c5b65544", "name": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/signals/schema.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/signals/schema.js:16"}, "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-8bfa2482b0d3afc0", "name": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/shared/auth.js:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/shared/auth.js:210"}, "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-1263263c1d271f51", "name": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/unified-forex-bot.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/unified-forex-bot.js:50"}, "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-7703e38822c99598", "name": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/signals/schema.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/signals/schema.js:16"}, "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-ec114145034c1faf", "name": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/shared/auth.js:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/shared/auth.js:210"}, "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-4792b579b6b7a26d", "name": "TODO/FIXME marker in shipping code \u2014 deploy/crypto-bot/unified-crypto-bot.js:2267", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 deploy/crypto-bot/unified-crypto-bot.js:2267"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e99a86180915f8e", "name": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/unified-crypto-bot.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/unified-crypto-bot.js:47"}, "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-7e89d7fab42a2733", "name": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/signals/schema.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/signals/schema.js:16"}, "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-e8c740a5fb9eb0f7", "name": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/shared/auth.js:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/shared/auth.js:210"}, "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-e8f0ccdfd0a1793f", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/App.tsx:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/App.tsx:28"}, "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-92335841250a0235", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/components/Native/DesktopTradingWorkspace.tsx:158", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/components/Native/DesktopTradingWorkspace.tsx:158"}, "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-2e60f0ce7034ae62", "name": "`truncate` class without `title=` for hover reveal \u2014 clients/desktop-app/src/renderer/components/Layout/Layout.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 clients/desktop-app/src/renderer/components/Layout/Layout.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-1a95d5d871b8f5a9", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/LoginPage.tsx:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/LoginPage.tsx:48"}, "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-77bf18fc43fa5b63", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/TradingPage.tsx:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/TradingPage.tsx:134"}, "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-5f78fde90e727ade", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/RegisterPage.tsx:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/RegisterPage.tsx:120"}, "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-eb70013edfd0c31d", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/services/api.ts:233", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/services/api.ts:233"}, "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-4eb6935ce4b6dde3", "name": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/main/updater.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/main/updater.ts:22"}, "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-c5139e190b64867f", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-forex-bot.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-forex-bot.js:50"}, "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-359bf1e3b63fc59c", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/high-volume-breakout-bot.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/high-volume-breakout-bot.js:107"}, "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-97a44beb6f6217ba", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35658a9740c5ba02", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/orb-trading-bot.js:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/orb-trading-bot.js:97"}, "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-b3a8c05d1f1f46cd", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/gap-fade-bot.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/gap-fade-bot.js:86"}, "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-f7141ef40f87d7ae", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/crypto-bot-stub.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/crypto-bot-stub.js:74"}, "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-cf395738c1ea746d", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot-improved.js:310", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot-improved.js:310"}, "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-358f6451743e23cd", "name": "TODO/FIXME marker in shipping code \u2014 clients/bot-dashboard/unified-crypto-bot.js:2267", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 clients/bot-dashboard/unified-crypto-bot.js:2267"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65778d125321813e", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-crypto-bot.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-crypto-bot.js:47"}, "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-54fba351ec98bf1e", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/shared/auth.js:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/shared/auth.js:210"}, "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-a5690e519069cb78", "name": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/src/pages/DocsPage.tsx:601", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/src/pages/DocsPage.tsx:601"}, "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-d2ec241125b14beb", "name": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/verify-migration.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/verify-migration.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78b876734c5fcb7a", "name": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/cli.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/cli.js:31"}, "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-36c57e6d6a1b5d7f", "name": "Stray `console.log` in TS/JS \u2014 services/signals/edge-stats-coverage.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/edge-stats-coverage.js:19"}, "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-49e37875841e9b10", "name": "Stray `console.log` in TS/JS \u2014 services/signals/schema.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/schema.js:16"}, "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-070a93dd15bda385", "name": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/kill-switch-oos.js:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/kill-switch-oos.js:134"}, "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-9a036b77e8fff892", "name": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/qualifier-backtest.js:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/qualifier-backtest.js:151"}, "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-8367a7a03d4a2eb8", "name": "Stray `console.log` in TS/JS \u2014 services/dashboard/dashboard-api-server.js:394", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/dashboard-api-server.js:394"}, "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-0643ca10a0db96da", "name": "Stray `console.log` in TS/JS \u2014 services/dashboard/server.js:1145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/server.js:1145"}, "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-cd6195085b7f1530", "name": "Stray `console.log` in TS/JS \u2014 services/dashboard/index.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/index.js:11"}, "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-8d4dbd4d5e61cfb1", "name": "Stray `console.log` in TS/JS \u2014 services/market-archive/archiver.js:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/market-archive/archiver.js:127"}, "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-615a3959606e0ed3", "name": "Stray `console.log` in TS/JS \u2014 services/strategy-engine/NexusAlpha.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/strategy-engine/NexusAlpha.js:69"}, "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-5a71327de312d64f", "name": "Stray `console.log` in TS/JS \u2014 infrastructure/notifications/telegram-alerts.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 infrastructure/notifications/telegram-alerts.js:27"}, "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-bae9fbc64b9bd229", "name": "Stray `console.log` in TS/JS \u2014 infrastructure/memory/MemoryManager.js:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 infrastructure/memory/MemoryManager.js:44"}, "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-44adae16c8869c1a", "name": "Stray `console.log` in TS/JS \u2014 src/test-orchestrator.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/test-orchestrator.js:63"}, "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-e2f775deb4791142", "name": "Stray `console.log` in TS/JS \u2014 src/NexusTradeSystemOrchestrator.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/NexusTradeSystemOrchestrator.js:85"}, "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-e77a4709ffa581da", "name": "Dockerfile runs as root: clients/web-app/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: clients/web-app/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e4cb18d769d2f3c", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enterprise-dashboard.html:1055", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enterprise-dashboard.html:1055"}, "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-d2a9d622be69931b", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/automation-server.js:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/automation-server.js:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40b1e86dbbb068fb", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enhanced-trading-dashboard.html:522", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enhanced-trading-dashboard.html:522"}, "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-21f25c036776fdc2", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/mock-market-data-server.js:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/mock-market-data-server.js:15"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bdc72eb7fb7758fb", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-service.js:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-service.js:15"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e38182487c2dd4ff", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-integration-server.js:57", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-integration-server.js:57"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ca4c8c0361ba465", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-market-data-server.js:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-market-data-server.js:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00f50b30ee9d2634", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-server.js:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-server.js:15"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-915f1e0da3f68186", "name": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/platform-demo.js:316", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/platform-demo.js:316"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57fc96d45334dac0", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/automation-dashboard.html:378", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/automation-dashboard.html:378"}, "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-dcb24f414943c59b", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/REAL_POSITIONS_DASHBOARD.html:256", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/REAL_POSITIONS_DASHBOARD.html:256"}, "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-eb46f8aa912bec3a", "name": "Possible secret in shared/README.md", "shortDescription": {"text": "Possible secret in shared/README.md"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0617c19b4fec180b", "name": "Possible secret in shared/constants/api-endpoints.js", "shortDescription": {"text": "Possible secret in shared/constants/api-endpoints.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-803c039433743012", "name": "Possible secret in clients/desktop-app/src/renderer/pages/RegisterPage.tsx", "shortDescription": {"text": "Possible secret in clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f934bd205320c0a6", "name": "Insecure pattern 'local_storage_auth_token' in clients/desktop-app/src/renderer/store/slices/authSlice.ts:47", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in clients/desktop-app/src/renderer/store/slices/authSlice.ts:47"}, "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-a1dc6c7bef4f98c5", "name": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/high-volume-breakout-bot.js:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/high-volume-breakout-bot.js:37"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f46cd2fea529f6cf", "name": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/orb-trading-bot.js:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/orb-trading-bot.js:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1347d6a3ab21e3d3", "name": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/gap-fade-bot.js:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/gap-fade-bot.js:35"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f06dc9f70bba75f9", "name": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/crypto-bot-stub.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/crypto-bot-stub.js:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b04bc41bbf7e65f4", "name": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/unified-trading-bot-improved.js:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/unified-trading-bot-improved.js:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67bd9c8b4c7de4dc", "name": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/pages/LoginPage.tsx:41", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/pages/LoginPage.tsx:41"}, "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-7e1728d67f0af39b", "name": "Possible secret in clients/bot-dashboard/src/pages/DocsPage.tsx", "shortDescription": {"text": "Possible secret in clients/bot-dashboard/src/pages/DocsPage.tsx"}, "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-d16ee3714fd12b8f", "name": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/services/api.ts:96", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/services/api.ts:96"}, "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-77f1d812c4f756ae", "name": "Insecure pattern 'cors_wildcard' in services/dashboard/dashboard-api-server.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/dashboard/dashboard-api-server.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c19011e1f7653876", "name": "Insecure pattern 'cors_wildcard' in services/dashboard/server.js:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/dashboard/server.js:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72026c8dcd58f43e", "name": "Insecure pattern 'debug_true' in services/strategy-engine/api_server.py:500", "shortDescription": {"text": "Insecure pattern 'debug_true' in services/strategy-engine/api_server.py:500"}, "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-f5562086042ebdc1", "name": "Insecure pattern 'debug_true' in services/strategy-engine/README.md:335", "shortDescription": {"text": "Insecure pattern 'debug_true' in services/strategy-engine/README.md:335"}, "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-73350c026849aa1f", "name": "Insecure pattern 'cors_wildcard' in services/strategy-engine/strategy_bridge.py:265", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/strategy-engine/strategy_bridge.py:265"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d325d0ff350d922", "name": "Possible secret in data-infrastructure/scripts/deploy-infrastructure.sh", "shortDescription": {"text": "Possible secret in data-infrastructure/scripts/deploy-infrastructure.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e968289a46c10623", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "gitleaks/gitleaks-action@v2 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-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8aba628aa7ef7c0f", "name": "Very large file: deploy/stock-bot/unified-trading-bot.js (8482 lines)", "shortDescription": {"text": "Very large file: deploy/stock-bot/unified-trading-bot.js (8482 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-9f41e3a092fd9bba", "name": "Very large file: deploy/forex-bot/unified-forex-bot.js (6600 lines)", "shortDescription": {"text": "Very large file: deploy/forex-bot/unified-forex-bot.js (6600 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-f744d42419f9baf9", "name": "Very large file: deploy/crypto-bot/unified-crypto-bot.js (6725 lines)", "shortDescription": {"text": "Very large file: deploy/crypto-bot/unified-crypto-bot.js (6725 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-9d2136f5bb0afdca", "name": "Very large file: clients/bot-dashboard/unified-forex-bot.js (6600 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/unified-forex-bot.js (6600 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-ae2f9341eb718268", "name": "Very large file: clients/bot-dashboard/unified-trading-bot.js (8482 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/unified-trading-bot.js (8482 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-03d5dbb0947d6fd4", "name": "Very large file: clients/bot-dashboard/unified-crypto-bot.js (6725 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/unified-crypto-bot.js (6725 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-936654a3b8ef6529", "name": "Very large file: clients/bot-dashboard/src/pages/StockBotPage.tsx (925 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/src/pages/StockBotPage.tsx (925 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-f47ae144b473ddea", "name": "Very large file: clients/bot-dashboard/src/pages/SettingsPage.tsx (1823 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/src/pages/SettingsPage.tsx (1823 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-5a01d9f026e520be", "name": "Very large file: clients/bot-dashboard/src/pages/OverviewPage.legacy.tsx (1111 lines)", "shortDescription": {"text": "Very large file: clients/bot-dashboard/src/pages/OverviewPage.legacy.tsx (1111 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-8f123feaa511b440", "name": "Very large file: services/strategy-engine/strategy_bridge.py (1762 lines)", "shortDescription": {"text": "Very large file: services/strategy-engine/strategy_bridge.py (1762 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3ed68815bca2f8c", "name": "Node manifest has dependencies but no lockfile: package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-015a862160d16585", "name": "Node manifest has dependencies but no lockfile: sdks/typescript/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: sdks/typescript/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b3b4131c0cb2eaa", "name": "Node manifest has dependencies but no lockfile: shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24f0072d0f67e054", "name": "Node manifest has dependencies but no lockfile: deploy/dashboard/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: deploy/dashboard/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c3f3974769165f4", "name": "Node manifest has dependencies but no lockfile: deploy/stock-bot/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: deploy/stock-bot/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-083b9ba615cc2803", "name": "Node manifest has dependencies but no lockfile: deploy/forex-bot/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: deploy/forex-bot/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edb6f8a2d4380334", "name": "Node manifest has dependencies but no lockfile: deploy/crypto-bot/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: deploy/crypto-bot/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c365a613ddd26cc4", "name": "Node manifest has dependencies but no lockfile: clients/pro-terminal/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: clients/pro-terminal/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ccda9bff669d768", "name": "Node manifest has dependencies but no lockfile: clients/web-app/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: clients/web-app/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e48ec687e29626ba", "name": "Node manifest has dependencies but no lockfile: clients/desktop-app/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: clients/desktop-app/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1574c4bd4cb8ca63", "name": "Node manifest has dependencies but no lockfile: clients/react-dashboard/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: clients/react-dashboard/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed4cc4366d243a59", "name": "Node manifest has dependencies but no lockfile: services/backtesting-js/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/backtesting-js/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-802d3ccc6c63ec54", "name": "Node manifest has dependencies but no lockfile: services/signals/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/signals/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d73d4ae7da5b413", "name": "Node manifest has dependencies but no lockfile: src/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: src/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 2487 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 113 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53ce696c83aabd74", "name": "Agent authority lacks a verifier contract: .claude/commands/status.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/status.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-064191ae07b621f5", "name": "Agent authority lacks a verifier contract: .claude/commands/health.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/health.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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b7cc4eac1eda6f3", "name": "Legacy-named symbol `errorOnDeprecated` in jest.config.js:117", "shortDescription": {"text": "Legacy-named symbol `errorOnDeprecated` in jest.config.js:117"}, "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-e424813d0aa4daba", "name": "Commented-code block (6 lines) in tests/strategy-tests.js:40", "shortDescription": {"text": "Commented-code block (6 lines) in tests/strategy-tests.js:40"}, "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-c90ff7b1ef8fc671", "name": "Commented-code block (6 lines) in tests/unit/anti-churning.test.js:320", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/anti-churning.test.js:320"}, "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-fc2d602276ee7b4d", "name": "Commented-code block (6 lines) in deploy/stock-bot/unified-trading-bot.js:15", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/stock-bot/unified-trading-bot.js:15"}, "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-5ac32c2125c426ff", "name": "Commented-code block (5 lines) in deploy/stock-bot/stock-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/stock-bot/stock-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88adfe3e824a223f", "name": "Commented-code block (5 lines) in deploy/stock-bot/signals/displacement.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/stock-bot/signals/displacement.js:47"}, "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-be08591d58364ec8", "name": "Commented-code block (6 lines) in deploy/stock-bot/signals/exit-manager.js:30", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/stock-bot/signals/exit-manager.js: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-96cd434e2f6ef01b", "name": "Commented-code block (5 lines) in deploy/stock-bot/signals/committee-scorer.js:271", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/stock-bot/signals/committee-scorer.js:271"}, "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-72e81b77803e02c6", "name": "Commented-code block (10 lines) in deploy/stock-bot/signals/account-snapshot.js:6", "shortDescription": {"text": "Commented-code block (10 lines) in deploy/stock-bot/signals/account-snapshot.js:6"}, "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-da031a3d7bbb74ff", "name": "Commented-code block (14 lines) in deploy/stock-bot/signals/order-intent.js:8", "shortDescription": {"text": "Commented-code block (14 lines) in deploy/stock-bot/signals/order-intent.js:8"}, "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-6e0e769e2716752c", "name": "Commented-code block (8 lines) in deploy/stock-bot/shared/module-loader.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in deploy/stock-bot/shared/module-loader.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1de8ed5b32fa7f3e", "name": "Commented-code block (17 lines) in deploy/stock-bot/infrastructure/notifications/telegram-alerts.js:11", "shortDescription": {"text": "Commented-code block (17 lines) in deploy/stock-bot/infrastructure/notifications/telegram-alerts.js:11"}, "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-167308988ba54e1f", "name": "Commented-code block (6 lines) in deploy/stock-bot/infrastructure/notifications/sms-alerts.js:8", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/stock-bot/infrastructure/notifications/sms-alerts.js:8"}, "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-9f52d4719d987e1c", "name": "Commented-code block (5 lines) in deploy/stock-bot/infrastructure/monitoring/metrics.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/stock-bot/infrastructure/monitoring/metrics.js:4"}, "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-87872b33d2419919", "name": "Commented-code block (6 lines) in deploy/forex-bot/unified-forex-bot.js:13", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/forex-bot/unified-forex-bot.js:13"}, "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-03befdf748f1280d", "name": "Commented-code block (6 lines) in deploy/forex-bot/forex-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/forex-bot/forex-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4e83d48d2b25425", "name": "Commented-code block (5 lines) in deploy/forex-bot/signals/displacement.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/forex-bot/signals/displacement.js:47"}, "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-bf97bb30db38e4bd", "name": "Commented-code block (6 lines) in deploy/forex-bot/signals/exit-manager.js:30", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/forex-bot/signals/exit-manager.js: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-4f7d14eac101f33e", "name": "Commented-code block (5 lines) in deploy/forex-bot/signals/committee-scorer.js:271", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/forex-bot/signals/committee-scorer.js:271"}, "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-74e99cab3c2cb0fe", "name": "Commented-code block (10 lines) in deploy/forex-bot/signals/account-snapshot.js:6", "shortDescription": {"text": "Commented-code block (10 lines) in deploy/forex-bot/signals/account-snapshot.js:6"}, "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-861a8eaccc4ad216", "name": "Commented-code block (14 lines) in deploy/forex-bot/signals/order-intent.js:8", "shortDescription": {"text": "Commented-code block (14 lines) in deploy/forex-bot/signals/order-intent.js:8"}, "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-ff0c3ac14acc5263", "name": "Commented-code block (8 lines) in deploy/forex-bot/shared/module-loader.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in deploy/forex-bot/shared/module-loader.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64c6280afdf3524f", "name": "Commented-code block (17 lines) in deploy/forex-bot/infrastructure/notifications/telegram-alerts.js:11", "shortDescription": {"text": "Commented-code block (17 lines) in deploy/forex-bot/infrastructure/notifications/telegram-alerts.js:11"}, "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-3fbec32e57a0bb8b", "name": "Commented-code block (6 lines) in deploy/forex-bot/infrastructure/notifications/sms-alerts.js:8", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/forex-bot/infrastructure/notifications/sms-alerts.js:8"}, "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-5371882b6ea65bea", "name": "Commented-code block (5 lines) in deploy/forex-bot/infrastructure/monitoring/metrics.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/forex-bot/infrastructure/monitoring/metrics.js:4"}, "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-ad0d8cb77d15f413", "name": "Commented-code block (5 lines) in deploy/crypto-bot/crypto-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/crypto-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b9b22e60379abc7", "name": "Commented-code block (6 lines) in deploy/crypto-bot/unified-crypto-bot.js:15", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/unified-crypto-bot.js:15"}, "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-34d7101813bb80a4", "name": "Commented-code block (5 lines) in deploy/crypto-bot/signals/displacement.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/signals/displacement.js:47"}, "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-9f978f798a501029", "name": "Commented-code block (6 lines) in deploy/crypto-bot/signals/exit-manager.js:30", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/signals/exit-manager.js: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-0dea3fdcb03d1d1d", "name": "Commented-code block (5 lines) in deploy/crypto-bot/signals/committee-scorer.js:271", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/signals/committee-scorer.js:271"}, "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-fec9fd3af45ff029", "name": "Commented-code block (10 lines) in deploy/crypto-bot/signals/account-snapshot.js:6", "shortDescription": {"text": "Commented-code block (10 lines) in deploy/crypto-bot/signals/account-snapshot.js:6"}, "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-20cbf731f9141e1c", "name": "Commented-code block (14 lines) in deploy/crypto-bot/signals/order-intent.js:8", "shortDescription": {"text": "Commented-code block (14 lines) in deploy/crypto-bot/signals/order-intent.js:8"}, "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-155a6498c32f8bf8", "name": "Commented-code block (8 lines) in deploy/crypto-bot/shared/module-loader.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in deploy/crypto-bot/shared/module-loader.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bd11383331ebc34", "name": "Commented-code block (17 lines) in deploy/crypto-bot/infrastructure/notifications/telegram-alerts.js:11", "shortDescription": {"text": "Commented-code block (17 lines) in deploy/crypto-bot/infrastructure/notifications/telegram-alerts.js:11"}, "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-a41d93156c1ae5e4", "name": "Commented-code block (6 lines) in deploy/crypto-bot/infrastructure/notifications/sms-alerts.js:8", "shortDescription": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/infrastructure/notifications/sms-alerts.js:8"}, "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-01931046b0197a54", "name": "Commented-code block (5 lines) in deploy/crypto-bot/infrastructure/monitoring/metrics.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/infrastructure/monitoring/metrics.js:4"}, "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-d57d3bf5f4bae599", "name": "Commented-code block (6 lines) in clients/bot-dashboard/unified-forex-bot.js:13", "shortDescription": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-forex-bot.js:13"}, "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-30ef800f6cf5674b", "name": "Commented-code block (6 lines) in clients/bot-dashboard/forex-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/forex-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bb633bc81607547", "name": "Commented-code block (6 lines) in clients/bot-dashboard/unified-trading-bot.js:15", "shortDescription": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-trading-bot.js:15"}, "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-fbacf1e02aa5b1d4", "name": "Commented-code block (5 lines) in clients/bot-dashboard/stock-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in clients/bot-dashboard/stock-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-925240bdb72001ec", "name": "Commented-code block (5 lines) in clients/bot-dashboard/crypto-modules.manifest.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in clients/bot-dashboard/crypto-modules.manifest.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cef3d34e15d6b1e5", "name": "Commented-code block (6 lines) in clients/bot-dashboard/unified-crypto-bot.js:15", "shortDescription": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-crypto-bot.js:15"}, "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-6ac45b66abcfffab", "name": "Commented-code block (8 lines) in clients/bot-dashboard/shared/module-loader.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in clients/bot-dashboard/shared/module-loader.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d348e33a3207fef", "name": "Commented-code block (10 lines) in clients/bot-dashboard/shared/__tests__/module-loader.test.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in clients/bot-dashboard/shared/__tests__/module-loader.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30ff5b64f394abce", "name": "Commented-code block (5 lines) in services/signals/displacement.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in services/signals/displacement.js:47"}, "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-cd69bce0a6b82d21", "name": "Commented-code block (6 lines) in services/signals/exit-manager.js:30", "shortDescription": {"text": "Commented-code block (6 lines) in services/signals/exit-manager.js: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-a2b11a8d1648c7ae", "name": "Commented-code block (5 lines) in services/signals/committee-scorer.js:271", "shortDescription": {"text": "Commented-code block (5 lines) in services/signals/committee-scorer.js:271"}, "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-d7a975e4d1ddf6b4", "name": "Commented-code block (10 lines) in services/signals/account-snapshot.js:6", "shortDescription": {"text": "Commented-code block (10 lines) in services/signals/account-snapshot.js:6"}, "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-9d65f31be95c07f5", "name": "Commented-code block (14 lines) in services/signals/order-intent.js:8", "shortDescription": {"text": "Commented-code block (14 lines) in services/signals/order-intent.js:8"}, "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-977a09e3bd1fcb6c", "name": "Commented-code block (6 lines) in services/signals/__tests__/edge-stats.test.js:19", "shortDescription": {"text": "Commented-code block (6 lines) in services/signals/__tests__/edge-stats.test.js:19"}, "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-a490a3263d971a36", "name": "Commented-code block (6 lines) in services/signals/__tests__/committee-scorer-signed-weights.test.js:34", "shortDescription": {"text": "Commented-code block (6 lines) in services/signals/__tests__/committee-scorer-signed-weights.test.js: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-8ec94074ffe1ef1c", "name": "Commented-code block (5 lines) in services/signals/__tests__/strategies/stock-orb.test.js:233", "shortDescription": {"text": "Commented-code block (5 lines) in services/signals/__tests__/strategies/stock-orb.test.js:233"}, "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-4579adeab786537d", "name": "Commented-code block (7 lines) in services/signals/backtest/bridge-eval-replay.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in services/signals/backtest/bridge-eval-replay.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-719858c95223b841", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/dashboard/server.js:1012", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/dashboard/server.js:1012"}, "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-d865ecb071a3de3f", "name": "Commented-code block (8 lines) in services/market-archive/archiver.js:7", "shortDescription": {"text": "Commented-code block (8 lines) in services/market-archive/archiver.js:7"}, "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-276350486db22727", "name": "Legacy-named symbol `logistic_v1` in services/strategy-engine/strategy_bridge.py:874", "shortDescription": {"text": "Legacy-named symbol `logistic_v1` in services/strategy-engine/strategy_bridge.py:874"}, "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-228761c9f95ea285", "name": "Network/subprocess call without timeout or try/except \u2014 data-infrastructure/orchestration/airflow/dags/market_data_pipel", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 data-infrastructure/orchestration/airflow/dags/market_data_pipeline.py:75"}, "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-11133ca5d5864512", "name": "141 env vars used in code but missing from .env.example", "shortDescription": {"text": "141 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACTIVE_ACCOUNT`, `ALLOWED_ORIGINS`, `ALPACA_API_KEY`, `ALPACA_BASE_URL`, `ALPACA_PAPER`, `ALPACA_SECRET_KEY`, `ALPHA_VANTAGE_API_KEY`, `ANALYZE` + 133 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\n.claude/hooks/trading-redteam-post.py:main, .claude/hooks/deploy-guardian-pre.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nservices/strategy-engine/strategies.py:generate_signal, services/strategy-engine/strategies.py:generate_signal, services/strategy-engine/strategies.py:generate_signal, services/strategy-engine/strategies.py:generate_signal\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:\nservices/strategy-engine/agents/macro_agent.py:get_stats, services/strategy-engine/agents/sentiment_agent.py:get_stats, services/strategy-engine/agents/institutional_agent.py:get_stats\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ndata-infrastructure/processing/flink/stream-processors/real_time_analytics_processor.py:process_element, data-infrastructure/processing/flink/stream-processors/real_time_analytics_processor.py:process, data-infrastructure/processing/flink/stream-processors/real_time_analytics_processor.py:process_element, data-infrastructure/processing/flink/stream-processors/real_time_analytics_processor.py:process\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-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:\ndata-infrastructure/storage/timeseries/influxdb/schemas/measurement_schemas.py:to_influx_point, data-infrastructure/storage/timeseries/influxdb/schemas/measurement_schemas.py:to_influx_point, data-infrastructure/storage/timeseries/influxdb/schemas/measurement_schemas.py:to_influx_point, data-infrastructure/storage/timeseries/influxdb/schemas/measurement_schemas.py:to_influx_point\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-a00c902df2e4486d", "name": "Frontend route `/pricing` has no Link/navigate to it \u2014 clients/bot-dashboard/src/App.tsx", "shortDescription": {"text": "Frontend route `/pricing` has no Link/navigate to it \u2014 clients/bot-dashboard/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-49d0a7ba627a2c29", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 clients/bot-dashboard/src/App.tsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 clients/bot-dashboard/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-1cc1482deaaeec2d", "name": "Flask mutation route `activate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:103", "shortDescription": {"text": "Flask mutation route `activate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:103"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f24e9f83ec4a405d", "name": "Flask mutation route `deactivate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:119", "shortDescription": {"text": "Flask mutation route `deactivate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:119"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abd015c4054d628f", "name": "Flask mutation route `update_strategy_parameters` without `@login_required` \u2014 services/strategy-engine/api_server.py:135", "shortDescription": {"text": "Flask mutation route `update_strategy_parameters` without `@login_required` \u2014 services/strategy-engine/api_server.py:135"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77555570e35b5401", "name": "Flask mutation route `generate_signals` without `@login_required` \u2014 services/strategy-engine/api_server.py:155", "shortDescription": {"text": "Flask mutation route `generate_signals` without `@login_required` \u2014 services/strategy-engine/api_server.py:155"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4891a981e22cfb04", "name": "Flask mutation route `import_configuration` without `@login_required` \u2014 services/strategy-engine/api_server.py:271", "shortDescription": {"text": "Flask mutation route `import_configuration` without `@login_required` \u2014 services/strategy-engine/api_server.py:271"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5dc1a2154c74ce09", "name": "Flask mutation route `update_market_data` without `@login_required` \u2014 services/strategy-engine/api_server.py:290", "shortDescription": {"text": "Flask mutation route `update_market_data` without `@login_required` \u2014 services/strategy-engine/api_server.py:290"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff9ed3c7cc1e0d87", "name": "Flask mutation route `generate_ensemble_signal` without `@login_required` \u2014 services/strategy-engine/api_server.py:359", "shortDescription": {"text": "Flask mutation route `generate_ensemble_signal` without `@login_required` \u2014 services/strategy-engine/api_server.py:359"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-727a92c64e366b2b", "name": "Flask mutation route `update_strategy_weight` without `@login_required` \u2014 services/strategy-engine/api_server.py:452", "shortDescription": {"text": "Flask mutation route `update_strategy_weight` without `@login_required` \u2014 services/strategy-engine/api_server.py:452"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9532de70469ed2d4", "name": "Flask mutation route `update_ensemble_performance` without `@login_required` \u2014 services/strategy-engine/api_server.py:47", "shortDescription": {"text": "Flask mutation route `update_ensemble_performance` without `@login_required` \u2014 services/strategy-engine/api_server.py:474"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-baf6cadc7afa327a", "name": "FastAPI POST `create_checkout` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:87", "shortDescription": {"text": "FastAPI POST `create_checkout` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:87"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b650e5ba0963d7a3", "name": "FastAPI POST `create_portal_session` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:126", "shortDescription": {"text": "FastAPI POST `create_portal_session` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:126"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0e2d473c2701c1e", "name": "FastAPI POST `stripe_webhook` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:166", "shortDescription": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:166"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-289743ab3f188b96", "name": "FastAPI POST `get_ensemble_signal` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:309", "shortDescription": {"text": "FastAPI POST `get_ensemble_signal` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:309"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26156e0cd3ab9664", "name": "FastAPI POST `ml_regime` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:486", "shortDescription": {"text": "FastAPI POST `ml_regime` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:486"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19bc34224b85a70f", "name": "FastAPI POST `ml_features` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:597", "shortDescription": {"text": "FastAPI POST `ml_features` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:597"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3ee162a8f5b6470", "name": "FastAPI POST `ml_score` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:830", "shortDescription": {"text": "FastAPI POST `ml_score` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:830"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ce2e910165f89d5", "name": "FastAPI POST `ml_fit` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:880", "shortDescription": {"text": "FastAPI POST `ml_fit` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:880"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a6a78fe71837456", "name": "FastAPI POST `analyze_pair` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:932", "shortDescription": {"text": "FastAPI POST `analyze_pair` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:932"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-462fa9205d9a57a4", "name": "FastAPI POST `ai_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:975", "shortDescription": {"text": "FastAPI POST `ai_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:975"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcca697a742d070e", "name": "FastAPI POST `agent_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1011", "shortDescription": {"text": "FastAPI POST `agent_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1011"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62a71f57967d6ad8", "name": "FastAPI POST `agent_trade_outcome` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1072", "shortDescription": {"text": "FastAPI POST `agent_trade_outcome` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1072"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-544c0017bd6ad7b6", "name": "FastAPI POST `agent_execution` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1118", "shortDescription": {"text": "FastAPI POST `agent_execution` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1118"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aca5ca3b74c2d098", "name": "FastAPI POST `agent_kill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1223", "shortDescription": {"text": "FastAPI POST `agent_kill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1223"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1b20f6a5a97bff9", "name": "FastAPI POST `agent_resume` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1229", "shortDescription": {"text": "FastAPI POST `agent_resume` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1229"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f57d567100d8039", "name": "FastAPI POST `bandit_select` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1282", "shortDescription": {"text": "FastAPI POST `bandit_select` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1282"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-713eb3ec0f3bf530", "name": "FastAPI POST `bandit_context_detail` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1304", "shortDescription": {"text": "FastAPI POST `bandit_context_detail` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1304"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86da6825536759da", "name": "FastAPI POST `bandit_sync_db` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1332", "shortDescription": {"text": "FastAPI POST `bandit_sync_db` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1332"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68931673837c4c47", "name": "FastAPI POST `bandit_train` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1338", "shortDescription": {"text": "FastAPI POST `bandit_train` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1338"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fec6626d3d226cf1", "name": "FastAPI POST `agent_backfill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1389", "shortDescription": {"text": "FastAPI POST `agent_backfill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1389"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5a025c5aaed4870", "name": "FastAPI POST `agent_backfill_json` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1408", "shortDescription": {"text": "FastAPI POST `agent_backfill_json` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1408"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b2809ef4b495320", "name": "FastAPI POST `agent_daily_training` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1422", "shortDescription": {"text": "FastAPI POST `agent_daily_training` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1422"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45a58a7a4193e5bc", "name": "FastAPI POST `update_rankings` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1475", "shortDescription": {"text": "FastAPI POST `update_rankings` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1475"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2e166fd3a3b0b6e", "name": "FastAPI POST `check_portfolio_risk` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1535", "shortDescription": {"text": "FastAPI POST `check_portfolio_risk` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1535"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6cbea75631434d5", "name": "FastAPI POST `evaluate_signal` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:93", "shortDescription": {"text": "FastAPI POST `evaluate_signal` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:93"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbcfebcd88c8bbeb", "name": "FastAPI POST `create_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:194", "shortDescription": {"text": "FastAPI POST `create_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:194"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af2bb7030e78ad97", "name": "FastAPI DELETE `revoke_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:227", "shortDescription": {"text": "FastAPI DELETE `revoke_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:227"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4daea69794cef46e", "name": "Dangling fetch: GET http://localhost:3010/api/dashboard (tests/legacy/test-dashboard-data.js:12)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3010/api/dashboard (tests/legacy/test-dashboard-data.js:12)"}, "fullDescription": {"text": "`tests/legacy/test-dashboard-data.js:12` calls `GET http://localhost:3010/api/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3010/api/dashboard`\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-c07f6f2ec813ccd2", "name": "Dangling fetch: GET http://localhost:8080/api/trading/status (tests/legacy/test-dashboard-data.js:29)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8080/api/trading/status (tests/legacy/test-dashboard-data.js:29)"}, "fullDescription": {"text": "`tests/legacy/test-dashboard-data.js:29` calls `GET http://localhost:8080/api/trading/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8080/api/trading/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-bce85447c8ce2e35", "name": "Dangling fetch: GET http://localhost:8080/api/strategies (tests/legacy/test-dashboard-data.js:42)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8080/api/strategies (tests/legacy/test-dashboard-data.js:42)"}, "fullDescription": {"text": "`tests/legacy/test-dashboard-data.js:42` calls `GET http://localhost:8080/api/strategies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8080/api/strategies`\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-bfea60af62037129", "name": "Dangling fetch: GET http://localhost:8080/api/risk/portfolio (tests/legacy/test-dashboard-data.js:55)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8080/api/risk/portfolio (tests/legacy/test-dashboard-data.js:55)"}, "fullDescription": {"text": "`tests/legacy/test-dashboard-data.js:55` calls `GET http://localhost:8080/api/risk/portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8080/api/risk/portfolio`\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-96526208373def8c", "name": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-exports-fix.js:19)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-exports-fix.js:19)"}, "fullDescription": {"text": "`tests/legacy/test-exports-fix.js:19` calls `GET http://localhost:3000` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3000`\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-fe17e579dbbed9df", "name": "Dangling fetch: GET http://localhost:3000/index.js (tests/legacy/test-exports-fix.js:42)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/index.js (tests/legacy/test-exports-fix.js:42)"}, "fullDescription": {"text": "`tests/legacy/test-exports-fix.js:42` calls `GET http://localhost:3000/index.js` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3000/index.js`\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-b0153202d18591bf", "name": "Dangling fetch: GET http://localhost:3004/api/automation/strategies/performance (tests/legacy/test-frontend-fixes.js:61)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/strategies/performance (tests/legacy/test-frontend-fixes.js:61)"}, "fullDescription": {"text": "`tests/legacy/test-frontend-fixes.js:61` calls `GET http://localhost:3004/api/automation/strategies/performance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/api/automation/strategies/performance`\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-a9533e5a828c0111", "name": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-frontend-fixes.js:85)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-frontend-fixes.js:85)"}, "fullDescription": {"text": "`tests/legacy/test-frontend-fixes.js:85` calls `GET http://localhost:3004/api/automation/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/api/automation/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-09a3bfb1c5206470", "name": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-frontend-fixes.js:102)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-frontend-fixes.js:102)"}, "fullDescription": {"text": "`tests/legacy/test-frontend-fixes.js:102` calls `GET http://localhost:3002/market-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/market-prices`\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-938627ffac0ebdeb", "name": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-frontend-fixes.js:118)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-frontend-fixes.js:118)"}, "fullDescription": {"text": "`tests/legacy/test-frontend-fixes.js:118` calls `GET http://localhost:3000` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3000`\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-bbed1471db0592a2", "name": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:42", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:42)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:42` calls `GET http://localhost:3003/api/banking/balance/demo-user-123` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3003/api/banking/balance/demo-user-123`\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-d9f9152f40a15bcd", "name": "Dangling fetch: GET http://localhost:3003/api/banking/transactions/demo-user-123?limit=3 (tests/legacy/test-banking-inte", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/transactions/demo-user-123?limit=3 (tests/legacy/test-banking-integration.js:50)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:50` calls `GET http://localhost:3003/api/banking/transactions/demo-user-123?limit=3` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3003/api/banking/transactions/demo-user-123`\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-9978680ce48bbd8c", "name": "Dangling fetch: GET http://localhost:3004/api/banking/countries (tests/legacy/test-banking-integration.js:65)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/banking/countries (tests/legacy/test-banking-integration.js:65)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:65` calls `GET http://localhost:3004/api/banking/countries` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/api/banking/countries`\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-06eb43bcc77fe110", "name": "Dangling fetch: GET http://localhost:3004/api/banking/exchange-rates (tests/legacy/test-banking-integration.js:72)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/banking/exchange-rates (tests/legacy/test-banking-integration.js:72)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:72` calls `GET http://localhost:3004/api/banking/exchange-rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/api/banking/exchange-rates`\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-4362ce8415546ed4", "name": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:12", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:120)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:120` calls `GET http://localhost:3003/api/banking/balance/demo-user-123` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3003/api/banking/balance/demo-user-123`\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-889b324fa331bd32", "name": "Dangling fetch: GET http://localhost:3003/api/banking/limits/demo-user-123 (tests/legacy/test-banking-integration.js:127", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/limits/demo-user-123 (tests/legacy/test-banking-integration.js:127)"}, "fullDescription": {"text": "`tests/legacy/test-banking-integration.js:127` calls `GET http://localhost:3003/api/banking/limits/demo-user-123` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3003/api/banking/limits/demo-user-123`\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-3be9a488170e8df2", "name": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-real-market-data.js:17)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-real-market-data.js:17)"}, "fullDescription": {"text": "`tests/legacy/test-real-market-data.js:17` calls `GET http://localhost:3002/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/health`\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-f389407432926c4d", "name": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-real-market-data.js:25)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-real-market-data.js:25)"}, "fullDescription": {"text": "`tests/legacy/test-real-market-data.js:25` calls `GET http://localhost:3002/market-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/market-prices`\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-f964f9ded71cbab7", "name": "Dangling fetch: GET http://localhost:3002/market-prices/AAPL (tests/legacy/test-real-market-data.js:38)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices/AAPL (tests/legacy/test-real-market-data.js:38)"}, "fullDescription": {"text": "`tests/legacy/test-real-market-data.js:38` calls `GET http://localhost:3002/market-prices/AAPL` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/market-prices/aapl`\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-1375381c6e348506", "name": "Dangling fetch: GET http://localhost:3004/health (tests/legacy/test-real-market-data.js:49)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/health (tests/legacy/test-real-market-data.js:49)"}, "fullDescription": {"text": "`tests/legacy/test-real-market-data.js:49` calls `GET http://localhost:3004/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/health`\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-4fd2e2d8952a895c", "name": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-real-market-data.js:52)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-real-market-data.js:52)"}, "fullDescription": {"text": "`tests/legacy/test-real-market-data.js:52` calls `GET http://localhost:3004/api/automation/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3004/api/automation/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-f8f6111a09f20a58", "name": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-enhanced-frontend.js:120)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-enhanced-frontend.js:120)"}, "fullDescription": {"text": "`tests/legacy/test-enhanced-frontend.js:120` calls `GET http://localhost:3002/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/health`\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-f27f8431279968fd", "name": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-enhanced-frontend.js:149)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-enhanced-frontend.js:149)"}, "fullDescription": {"text": "`tests/legacy/test-enhanced-frontend.js:149` calls `GET http://localhost:3002/market-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3002/market-prices`\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-91674843ca06a3db", "name": "Dangling fetch: GET https://finnhub.io/api/v1/quote (docs/archive/legacy-dir/enhanced-market-data-server.js:63)", "shortDescription": {"text": "Dangling fetch: GET https://finnhub.io/api/v1/quote (docs/archive/legacy-dir/enhanced-market-data-server.js:63)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/enhanced-market-data-server.js:63` calls `GET https://finnhub.io/api/v1/quote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/finnhub.io/api/v1/quote`\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-cc99ea51a9f1ac99", "name": "Dangling fetch: GET https://www.alphavantage.co/query (docs/archive/legacy-dir/enhanced-market-data-server.js:246)", "shortDescription": {"text": "Dangling fetch: GET https://www.alphavantage.co/query (docs/archive/legacy-dir/enhanced-market-data-server.js:246)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/enhanced-market-data-server.js:246` calls `GET https://www.alphavantage.co/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.alphavantage.co/query`\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-d6eb7d3571fa351b", "name": "Dangling fetch: GET http://localhost:3002/account (docs/archive/legacy-dir/trading-server.js:63)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/account (docs/archive/legacy-dir/trading-server.js:63)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:63` calls `GET http://localhost:3002/account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/account`\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-95d2dca5bafb5c41", "name": "Dangling fetch: GET http://localhost:3002/positions (docs/archive/legacy-dir/trading-server.js:74)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/positions (docs/archive/legacy-dir/trading-server.js:74)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:74` calls `GET http://localhost:3002/positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/positions`\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-40a11c742adb6194", "name": "Dangling fetch: GET http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:85)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:85)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:85` calls `GET http://localhost:3002/orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders`\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-53b364b946a47041", "name": "Dangling fetch: GET http://localhost:3002/market-prices (docs/archive/legacy-dir/trading-server.js:96)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (docs/archive/legacy-dir/trading-server.js:96)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:96` calls `GET http://localhost:3002/market-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/market-prices`\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-2ab249528043695b", "name": "Dangling fetch: POST http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:107)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:107)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:107` calls `POST http://localhost:3002/orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders`\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-40cb769574e1cd44", "name": "Dangling fetch: DELETE http://localhost:3002/orders/${req.params.orderId} (docs/archive/legacy-dir/trading-server.js:129", "shortDescription": {"text": "Dangling fetch: DELETE http://localhost:3002/orders/${req.params.orderId} (docs/archive/legacy-dir/trading-server.js:129)"}, "fullDescription": {"text": "`docs/archive/legacy-dir/trading-server.js:129` calls `DELETE http://localhost:3002/orders/${req.params.orderId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders/<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-31893f23d6ec1a43", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/stock-bot/unified-trading-bot.js:121)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/stock-bot/unified-trading-bot.js:121)"}, "fullDescription": {"text": "`deploy/stock-bot/unified-trading-bot.js:121` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-18cae5c3cd89d970", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5941)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5941)"}, "fullDescription": {"text": "`deploy/stock-bot/unified-trading-bot.js:5941` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\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-67992d03ecb8bc42", "name": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (deploy/stock-bot/unified-trading-b", "shortDescription": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (deploy/stock-bot/unified-trading-bot.js:5955)"}, "fullDescription": {"text": "`deploy/stock-bot/unified-trading-bot.js:5955` calls `POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twilio.com/2010-04-01/accounts/<p>/messages.json`\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-699057070dd7a27f", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5981)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5981)"}, "fullDescription": {"text": "`deploy/stock-bot/unified-trading-bot.js:5981` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\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-cfa96f4587b57d75", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/forex-bot/unified-forex-bot.js:345)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/forex-bot/unified-forex-bot.js:345)"}, "fullDescription": {"text": "`deploy/forex-bot/unified-forex-bot.js:345` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-accafcee4e7b3a6e", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/crypto-bot/unified-crypto-bot.js:4718)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/crypto-bot/unified-crypto-bot.js:4718)"}, "fullDescription": {"text": "`deploy/crypto-bot/unified-crypto-bot.js:4718` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-52b37f72183f40e7", "name": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (deploy/crypto-bot/unified-crypto-bot.js:5001)", "shortDescription": {"text": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (deploy/crypto-bot/unified-crypto-bot.js:5001)"}, "fullDescription": {"text": "`deploy/crypto-bot/unified-crypto-bot.js:5001` calls `GET https://futures.kraken.com/derivatives/api/v3/tickers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/futures.kraken.com/derivatives/api/v3/tickers`\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-c833e2b3f6f20243", "name": "Dangling fetch: GET http://localhost:3002/market-prices (web-app/src/components/TradingInterface.js:38)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (web-app/src/components/TradingInterface.js:38)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:38` calls `GET http://localhost:3002/market-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/market-prices`\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-30a6c5923508a868", "name": "Dangling fetch: GET http://localhost:3002/account (web-app/src/components/TradingInterface.js:48)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/account (web-app/src/components/TradingInterface.js:48)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:48` calls `GET http://localhost:3002/account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/account`\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-1d6f99059c6b3c26", "name": "Dangling fetch: GET http://localhost:3002/positions (web-app/src/components/TradingInterface.js:58)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/positions (web-app/src/components/TradingInterface.js:58)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:58` calls `GET http://localhost:3002/positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/positions`\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-de2d57cfcf1c6bce", "name": "Dangling fetch: GET http://localhost:3002/orders (web-app/src/components/TradingInterface.js:68)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/orders (web-app/src/components/TradingInterface.js:68)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:68` calls `GET http://localhost:3002/orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders`\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-eaa4fd7d7453dad1", "name": "Dangling fetch: POST http://localhost:3002/orders (web-app/src/components/TradingInterface.js:99)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3002/orders (web-app/src/components/TradingInterface.js:99)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:99` calls `POST http://localhost:3002/orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders`\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-257b7bb235753bae", "name": "Dangling fetch: DELETE http://localhost:3002/orders/${orderId} (web-app/src/components/TradingInterface.js:128)", "shortDescription": {"text": "Dangling fetch: DELETE http://localhost:3002/orders/${orderId} (web-app/src/components/TradingInterface.js:128)"}, "fullDescription": {"text": "`web-app/src/components/TradingInterface.js:128` calls `DELETE http://localhost:3002/orders/${orderId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/orders/<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-7f4b995bea9b3c7b", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-forex-bot.js:345)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-forex-bot.js:345)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-forex-bot.js:345` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-2ea480bd10fdd360", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-trading-bot.js:121)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-trading-bot.js:121)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-trading-bot.js:121` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-e7c91bc72d8ead18", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5941", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5941)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-trading-bot.js:5941` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\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-5bd48371811f097e", "name": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (clients/bot-dashboard/unified-trad", "shortDescription": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (clients/bot-dashboard/unified-trading-bot.js:5955)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-trading-bot.js:5955` calls `POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twilio.com/2010-04-01/accounts/<p>/messages.json`\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-433a59a6b6ccd11d", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5981", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5981)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-trading-bot.js:5981` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\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-bbb661e069c4c73c", "name": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-crypto-bot.js:4718)", "shortDescription": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-crypto-bot.js:4718)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-crypto-bot.js:4718` calls `POST https://backboard.railway.app/graphql/v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/backboard.railway.app/graphql/v2`\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-385cac577ac71a9f", "name": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (clients/bot-dashboard/unified-crypto-bot.js:5", "shortDescription": {"text": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (clients/bot-dashboard/unified-crypto-bot.js:5001)"}, "fullDescription": {"text": "`clients/bot-dashboard/unified-crypto-bot.js:5001` calls `GET https://futures.kraken.com/derivatives/api/v3/tickers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/futures.kraken.com/derivatives/api/v3/tickers`\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-7fb8b28c738fdd7c", "name": "Dangling fetch: POST http://localhost:3003/api/broker/test-alpaca (services/dashboard/dashboard-api-server.js:706)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3003/api/broker/test-alpaca (services/dashboard/dashboard-api-server.js:706)"}, "fullDescription": {"text": "`services/dashboard/dashboard-api-server.js:706` calls `POST http://localhost:3003/api/broker/test-alpaca` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/broker/test-alpaca`\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-7cdbccbe124088fd", "name": "Dangling fetch: POST http://localhost:3003/api/broker/connect-alpaca (services/dashboard/dashboard-api-server.js:720)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3003/api/broker/connect-alpaca (services/dashboard/dashboard-api-server.js:720)"}, "fullDescription": {"text": "`services/dashboard/dashboard-api-server.js:720` calls `POST http://localhost:3003/api/broker/connect-alpaca` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/broker/connect-alpaca`\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-2c22f0e42e3a6c11", "name": "Dangling fetch: GET http://localhost:3003/api/broker/alpaca/account (services/dashboard/dashboard-api-server.js:734)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/broker/alpaca/account (services/dashboard/dashboard-api-server.js:734)"}, "fullDescription": {"text": "`services/dashboard/dashboard-api-server.js:734` calls `GET http://localhost:3003/api/broker/alpaca/account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/broker/alpaca/account`\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-f44cac5bdab466ec", "name": "Dangling fetch: GET http://localhost:3003/api/broker/test-connection/alpaca (services/dashboard/dashboard-api-server.js:", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/broker/test-connection/alpaca (services/dashboard/dashboard-api-server.js:744)"}, "fullDescription": {"text": "`services/dashboard/dashboard-api-server.js:744` calls `GET http://localhost:3003/api/broker/test-connection/alpaca` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/broker/test-connection/alpaca`\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-753d8011cc1b8459", "name": "Dangling fetch: GET http://localhost:3003/api/risk/portfolio (services/dashboard/server.js:297)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/risk/portfolio (services/dashboard/server.js:297)"}, "fullDescription": {"text": "`services/dashboard/server.js:297` calls `GET http://localhost:3003/api/risk/portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/risk/portfolio`\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-c2b18c59bacf9d58", "name": "Dangling fetch: GET http://localhost:3003/api/risk/config (services/dashboard/server.js:317)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/risk/config (services/dashboard/server.js:317)"}, "fullDescription": {"text": "`services/dashboard/server.js:317` calls `GET http://localhost:3003/api/risk/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/risk/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-fe239d07db88d761", "name": "Dangling fetch: POST http://localhost:3003/api/risk/emergency-stop (services/dashboard/server.js:337)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3003/api/risk/emergency-stop (services/dashboard/server.js:337)"}, "fullDescription": {"text": "`services/dashboard/server.js:337` calls `POST http://localhost:3003/api/risk/emergency-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/risk/emergency-stop`\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-94ab1fe98aecde11", "name": "Dangling fetch: GET http://localhost:3004/api/strategies (services/dashboard/server.js:355)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/strategies (services/dashboard/server.js:355)"}, "fullDescription": {"text": "`services/dashboard/server.js:355` calls `GET http://localhost:3004/api/strategies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies`\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-619b6648882d648e", "name": "Dangling fetch: GET http://localhost:3004/api/performance/overall (services/dashboard/server.js:387)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/performance/overall (services/dashboard/server.js:387)"}, "fullDescription": {"text": "`services/dashboard/server.js:387` calls `GET http://localhost:3004/api/performance/overall` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/performance/overall`\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-05a6880467419ed8", "name": "Dangling fetch: GET http://localhost:3004/api/signals/recent?limit=20 (services/dashboard/server.js:407)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/signals/recent?limit=20 (services/dashboard/server.js:407)"}, "fullDescription": {"text": "`services/dashboard/server.js:407` calls `GET http://localhost:3004/api/signals/recent?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/signals/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88fba8155b895ca7", "name": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/activate (services/dashboard/server.js:438)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/activate (services/dashboard/server.js:438)"}, "fullDescription": {"text": "`services/dashboard/server.js:438` calls `POST http://localhost:3004/api/strategies/${strategyName}/activate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies/<p>/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-56523f8fcf0493e9", "name": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/deactivate (services/dashboard/server.js:455)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/deactivate (services/dashboard/server.js:455)"}, "fullDescription": {"text": "`services/dashboard/server.js:455` calls `POST http://localhost:3004/api/strategies/${strategyName}/deactivate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies/<p>/deactivate`\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-ba0ebe268e73984c", "name": "Dangling fetch: GET http://localhost:3003/api/analytics/risk-report (services/dashboard/server.js:472)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/risk-report (services/dashboard/server.js:472)"}, "fullDescription": {"text": "`services/dashboard/server.js:472` calls `GET http://localhost:3003/api/analytics/risk-report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/analytics/risk-report`\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-a4ec089d1c895ab8", "name": "Dangling fetch: GET http://localhost:3003/api/analytics/var (services/dashboard/server.js:503)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/var (services/dashboard/server.js:503)"}, "fullDescription": {"text": "`services/dashboard/server.js:503` calls `GET http://localhost:3003/api/analytics/var` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/analytics/var`\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-37e299d302c6078c", "name": "Dangling fetch: GET http://localhost:3003/api/analytics/ratios (services/dashboard/server.js:522)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/ratios (services/dashboard/server.js:522)"}, "fullDescription": {"text": "`services/dashboard/server.js:522` calls `GET http://localhost:3003/api/analytics/ratios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/analytics/ratios`\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-a9290d6850bfb31f", "name": "Dangling fetch: GET http://localhost:3003/api/analytics/alerts (services/dashboard/server.js:543)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/alerts (services/dashboard/server.js:543)"}, "fullDescription": {"text": "`services/dashboard/server.js:543` calls `GET http://localhost:3003/api/analytics/alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3003/api/analytics/alerts`\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-07f62a1345c80542", "name": "Dangling fetch: GET http://localhost:3005/api/trading/status (services/dashboard/server.js:667)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3005/api/trading/status (services/dashboard/server.js:667)"}, "fullDescription": {"text": "`services/dashboard/server.js:667` calls `GET http://localhost:3005/api/trading/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3005/api/trading/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-7aecef9df6c20369", "name": "Dangling fetch: POST http://localhost:3005/api/trading/start (services/dashboard/server.js:689)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/start (services/dashboard/server.js:689)"}, "fullDescription": {"text": "`services/dashboard/server.js:689` calls `POST http://localhost:3005/api/trading/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3005/api/trading/start`\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-d467ffa55156e497", "name": "Dangling fetch: POST http://localhost:3005/api/trading/stop (services/dashboard/server.js:705)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/stop (services/dashboard/server.js:705)"}, "fullDescription": {"text": "`services/dashboard/server.js:705` calls `POST http://localhost:3005/api/trading/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3005/api/trading/stop`\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-c314c8f49f468e41", "name": "Dangling fetch: GET http://localhost:3005/api/trading/positions (services/dashboard/server.js:721)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3005/api/trading/positions (services/dashboard/server.js:721)"}, "fullDescription": {"text": "`services/dashboard/server.js:721` calls `GET http://localhost:3005/api/trading/positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3005/api/trading/positions`\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-1b6dcbaca09120ec", "name": "Dangling fetch: POST http://localhost:3005/api/trading/manual-order (services/dashboard/server.js:751)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/manual-order (services/dashboard/server.js:751)"}, "fullDescription": {"text": "`services/dashboard/server.js:751` calls `POST http://localhost:3005/api/trading/manual-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3005/api/trading/manual-order`\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-558994b3b44e3ac7", "name": "Dangling fetch: GET http://localhost:3006/api/gdpr/status (services/dashboard/server.js:770)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3006/api/gdpr/status (services/dashboard/server.js:770)"}, "fullDescription": {"text": "`services/dashboard/server.js:770` calls `GET http://localhost:3006/api/gdpr/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3006/api/gdpr/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-0e25b191e7cd7152", "name": "Dangling fetch: GET http://localhost:3007/api/aml/dashboard (services/dashboard/server.js:792)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3007/api/aml/dashboard (services/dashboard/server.js:792)"}, "fullDescription": {"text": "`services/dashboard/server.js:792` calls `GET http://localhost:3007/api/aml/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3007/api/aml/dashboard`\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-73a4f65df17c6378", "name": "Dangling fetch: GET http://localhost:3008/api/reports (services/dashboard/server.js:823)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3008/api/reports (services/dashboard/server.js:823)"}, "fullDescription": {"text": "`services/dashboard/server.js:823` calls `GET http://localhost:3008/api/reports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3008/api/reports`\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-baeb2920d29bd620", "name": "Dangling fetch: POST http://localhost:3008/api/reports/generate (services/dashboard/server.js:850)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3008/api/reports/generate (services/dashboard/server.js:850)"}, "fullDescription": {"text": "`services/dashboard/server.js:850` calls `POST http://localhost:3008/api/reports/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3008/api/reports/generate`\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-39204b178712a32a", "name": "Dangling fetch: GET http://localhost:3004/api/strategies/${strategyName} (services/dashboard/server.js:963)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3004/api/strategies/${strategyName} (services/dashboard/server.js:963)"}, "fullDescription": {"text": "`services/dashboard/server.js:963` calls `GET http://localhost:3004/api/strategies/${strategyName}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies/<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-0890a5f91dd80446", "name": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/configure (services/dashboard/server.js:1012)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/configure (services/dashboard/server.js:1012)"}, "fullDescription": {"text": "`services/dashboard/server.js:1012` calls `POST http://localhost:3004/api/strategies/${strategyName}/configure` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies/<p>/configure`\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-7ed1d9225d527fd6", "name": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/test (services/dashboard/server.js:1040)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/test (services/dashboard/server.js:1040)"}, "fullDescription": {"text": "`services/dashboard/server.js:1040` calls `POST http://localhost:3004/api/strategies/${strategyName}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3004/api/strategies/<p>/test`\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-543849efa65e2774", "name": "Unused endpoint: ANY /api/strategies", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies"}, "fullDescription": {"text": "`services/strategy-engine/api_server.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-0995275d662765e3", "name": "Unused endpoint: ANY /api/strategies/<strategy_name>", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/strategies/<strategy_name>` 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-9304fc4ea37e39ea", "name": "Unused endpoint: ANY /api/strategies/<strategy_name>/activate", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/activate"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/strategies/<strategy_name>/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-5e19032c825ee946", "name": "Unused endpoint: ANY /api/strategies/<strategy_name>/deactivate", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/deactivate"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/strategies/<strategy_name>/deactivate` 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-68cca75c51e7cbef", "name": "Unused endpoint: ANY /api/strategies/<strategy_name>/parameters", "shortDescription": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/parameters"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/strategies/<strategy_name>/parameters` 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-d8e2a1160c4e2f42", "name": "Unused endpoint: ANY /api/signals/generate", "shortDescription": {"text": "Unused endpoint: ANY /api/signals/generate"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/signals/generate` 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-f01c74a912aee5cc", "name": "Unused endpoint: ANY /api/signals/recent", "shortDescription": {"text": "Unused endpoint: ANY /api/signals/recent"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/signals/recent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88cb8dad197293f2", "name": "Unused endpoint: ANY /api/performance/overall", "shortDescription": {"text": "Unused endpoint: ANY /api/performance/overall"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/performance/overall` 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-8944a2233ff2d5ae", "name": "Unused endpoint: ANY /api/performance/<strategy_name>", "shortDescription": {"text": "Unused endpoint: ANY /api/performance/<strategy_name>"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/performance/<strategy_name>` 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-a1f7979b3e91efdc", "name": "Unused endpoint: ANY /api/config/export", "shortDescription": {"text": "Unused endpoint: ANY /api/config/export"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/config/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-6c40ae013f7eaf3d", "name": "Unused endpoint: ANY /api/config/import", "shortDescription": {"text": "Unused endpoint: ANY /api/config/import"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/config/import` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f1dd1c45cb07b09", "name": "Unused endpoint: ANY /api/market-data/update", "shortDescription": {"text": "Unused endpoint: ANY /api/market-data/update"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/market-data/update` 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-194fcb81d960865d", "name": "Unused endpoint: ANY /api/signals/mock", "shortDescription": {"text": "Unused endpoint: ANY /api/signals/mock"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/signals/mock` 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-021bf9e9c5c3af96", "name": "Unused endpoint: ANY /api/ensemble/signal", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/signal"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/signal` 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-b0d359f2a455272d", "name": "Unused endpoint: ANY /api/ensemble/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/summary"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/summary` 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-3d7e13f088675a18", "name": "Unused endpoint: ANY /api/ensemble/analytics", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/analytics"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/analytics` 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-3d7fb4e6d6f3f4f4", "name": "Unused endpoint: ANY /api/ensemble/weights", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/weights"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/weights` 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-cec97a50d07e2afe", "name": "Unused endpoint: ANY /api/ensemble/weights/<strategy_name>", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/weights/<strategy_name>"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/weights/<strategy_name>` 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-46004ac3d7b5a5eb", "name": "Unused endpoint: ANY /api/ensemble/performance/update", "shortDescription": {"text": "Unused endpoint: ANY /api/ensemble/performance/update"}, "fullDescription": {"text": "`services/strategy-engine/api_server.py` declares `ANY /api/ensemble/performance/update` 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-6385cd0e163a390f", "name": "Unused endpoint: POST /checkout", "shortDescription": {"text": "Unused endpoint: POST /checkout"}, "fullDescription": {"text": "`services/strategy-engine/stripe_billing.py` declares `POST /checkout` 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-1ec7e423e24778e4", "name": "Unused endpoint: POST /portal", "shortDescription": {"text": "Unused endpoint: POST /portal"}, "fullDescription": {"text": "`services/strategy-engine/stripe_billing.py` declares `POST /portal` 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-0ae38010c60493f1", "name": "Unused endpoint: POST /webhook", "shortDescription": {"text": "Unused endpoint: POST /webhook"}, "fullDescription": {"text": "`services/strategy-engine/stripe_billing.py` declares `POST /webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-067fd482fe4bf558", "name": "Unused endpoint: POST /signal", "shortDescription": {"text": "Unused endpoint: POST /signal"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /signal` 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-0b8dca387f35258b", "name": "Unused endpoint: POST /ml/regime", "shortDescription": {"text": "Unused endpoint: POST /ml/regime"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /ml/regime` 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-e11c00e0a2e58b9c", "name": "Unused endpoint: POST /ml/features", "shortDescription": {"text": "Unused endpoint: POST /ml/features"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /ml/features` 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-2a28b5fa49115b9a", "name": "Unused endpoint: POST /ml/score", "shortDescription": {"text": "Unused endpoint: POST /ml/score"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /ml/score` 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-78bf009e541cd3cc", "name": "Unused endpoint: POST /ml/fit", "shortDescription": {"text": "Unused endpoint: POST /ml/fit"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /ml/fit` 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-a6ca836df2848138", "name": "Unused endpoint: POST /pairs/analyze", "shortDescription": {"text": "Unused endpoint: POST /pairs/analyze"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /pairs/analyze` 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-ead7c11b44269e7c", "name": "Unused endpoint: GET /pairs/recommended", "shortDescription": {"text": "Unused endpoint: GET /pairs/recommended"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /pairs/recommended` 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-984aec8f0b7ffe16", "name": "Unused endpoint: POST /ai/evaluate", "shortDescription": {"text": "Unused endpoint: POST /ai/evaluate"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /ai/evaluate` 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-945bf36870cb3302", "name": "Unused endpoint: GET /ai/stats", "shortDescription": {"text": "Unused endpoint: GET /ai/stats"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /ai/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-a8202fdee778748e", "name": "Unused endpoint: POST /agent/evaluate", "shortDescription": {"text": "Unused endpoint: POST /agent/evaluate"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/evaluate` 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-5bf4fb854a6fff0a", "name": "Unused endpoint: POST /agent/trade-outcome", "shortDescription": {"text": "Unused endpoint: POST /agent/trade-outcome"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/trade-outcome` 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-5cb048d28a4c6451", "name": "Unused endpoint: POST /agent/execution", "shortDescription": {"text": "Unused endpoint: POST /agent/execution"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/execution` 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-1fd56107d5fcc12f", "name": "Unused endpoint: GET /agent/stats", "shortDescription": {"text": "Unused endpoint: GET /agent/stats"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/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-6bccbd6acc60b18f", "name": "Unused endpoint: GET /agent/debug-claude", "shortDescription": {"text": "Unused endpoint: GET /agent/debug-claude"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/debug-claude` 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-1298b35211181da1", "name": "Unused endpoint: POST /agent/kill", "shortDescription": {"text": "Unused endpoint: POST /agent/kill"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/kill` 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-17a915c21bf67971", "name": "Unused endpoint: POST /agent/resume", "shortDescription": {"text": "Unused endpoint: POST /agent/resume"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/resume` 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-031029e823839ac3", "name": "Unused endpoint: GET /agent/sentiment/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /agent/sentiment/{symbol}"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/sentiment/{symbol}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f78a454e82c90cd", "name": "Unused endpoint: POST /agent/bandit/select", "shortDescription": {"text": "Unused endpoint: POST /agent/bandit/select"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/bandit/select` 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-19e2f334114b9475", "name": "Unused endpoint: POST /agent/bandit/context", "shortDescription": {"text": "Unused endpoint: POST /agent/bandit/context"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/bandit/context` 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-5c18d0bf06ef6403", "name": "Unused endpoint: GET /agent/bandit/stats", "shortDescription": {"text": "Unused endpoint: GET /agent/bandit/stats"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/bandit/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-111b4ff05ebe6bfb", "name": "Unused endpoint: POST /agent/bandit/sync", "shortDescription": {"text": "Unused endpoint: POST /agent/bandit/sync"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/bandit/sync` 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-74e9e978b0a55bc4", "name": "Unused endpoint: POST /agent/bandit/train", "shortDescription": {"text": "Unused endpoint: POST /agent/bandit/train"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/bandit/train` 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-7208c2f79b534c15", "name": "Unused endpoint: POST /agent/backfill", "shortDescription": {"text": "Unused endpoint: POST /agent/backfill"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/backfill` 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-41d7bdc78ed97be0", "name": "Unused endpoint: POST /agent/backfill/json", "shortDescription": {"text": "Unused endpoint: POST /agent/backfill/json"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/backfill/json` 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-162128be1075023d", "name": "Unused endpoint: POST /agent/daily-training", "shortDescription": {"text": "Unused endpoint: POST /agent/daily-training"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/daily-training` 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-5b4651773d92ccda", "name": "Unused endpoint: GET /agent/rankings", "shortDescription": {"text": "Unused endpoint: GET /agent/rankings"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/rankings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92c8f85d59deef54", "name": "Unused endpoint: POST /agent/rankings/update", "shortDescription": {"text": "Unused endpoint: POST /agent/rankings/update"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `POST /agent/rankings/update` 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-ee64460a523ccecc", "name": "Unused endpoint: GET /agent/decisions", "shortDescription": {"text": "Unused endpoint: GET /agent/decisions"}, "fullDescription": {"text": "`services/strategy-engine/strategy_bridge.py` declares `GET /agent/decisions` 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/21158"}, "properties": {"repository": "Thepluscode/NexusTradeAI", "repoUrl": "https://github.com/Thepluscode/NexusTradeAI", "branch": "main"}, "results": [{"ruleId": "scanner-06efa6f66b8c9653", "level": "note", "message": {"text": "Possibly dead Python function: forecast"}, "properties": {"repobilityId": "e424ba060277945f", "scanner": "scanner-primary", "fingerprint": "06efa6f66b8c9653", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/ou_estimator.py:174"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2b93926b37748c0", "level": "note", "message": {"text": "Possibly dead Python function: optimal_entry_zscore"}, "properties": {"repobilityId": "77fe721a9f1f2b80", "scanner": "scanner-primary", "fingerprint": "b2b93926b37748c0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/ou_estimator.py:189"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd2253729a4beae4", "level": "note", "message": {"text": "Possibly dead Python function: reset_monthly_counters"}, "properties": {"repobilityId": "d600d65a76a27296", "scanner": "scanner-primary", "fingerprint": "cd2253729a4beae4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/public_api.py:274"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2908fbc9182afa27", "level": "note", "message": {"text": "Possibly dead Python function: check_exit"}, "properties": {"repobilityId": "ce4b54e2160b405f", "scanner": "scanner-primary", "fingerprint": "2908fbc9182afa27", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/PairsTradingStrategy.py:355"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0534c1d97556283c", "level": "note", "message": {"text": "Possibly dead Python function: remove_strategy"}, "properties": {"repobilityId": "6652b659678000b3", "scanner": "scanner-primary", "fingerprint": "0534c1d97556283c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/ensemble_manager.py:48"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de2455d31a45feed", "level": "note", "message": {"text": "Possibly dead Python function: remove_strategy"}, "properties": {"repobilityId": "6652b659678000b3", "scanner": "scanner-primary", "fingerprint": "de2455d31a45feed", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_manager.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d41810b7571e754", "level": "note", "message": {"text": "Possibly dead Python function: calculate_parkinson_volatility"}, "properties": {"repobilityId": "53f23730feb48463", "scanner": "scanner-primary", "fingerprint": "8d41810b7571e754", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/VolatilityArbitrageStrategy.py:97"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00406c208d385441", "level": "note", "message": {"text": "Possibly dead Python function: save_to_db"}, "properties": {"repobilityId": "921a42d6de253d9d", "scanner": "scanner-primary", "fingerprint": "00406c208d385441", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/agents/autopsy_agent.py:583"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-69682a9cc0ea2784", "level": "note", "message": {"text": "Possibly dead Python function: record_error"}, "properties": {"repobilityId": "4c90ca95d4eb6d6b", "scanner": "scanner-primary", "fingerprint": "69682a9cc0ea2784", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/agents/safety.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b8a6cfb9c7566823", "level": "note", "message": {"text": "Possibly dead Python function: process_element"}, "properties": {"repobilityId": "9c2d7fc5a2d15974", "scanner": "scanner-primary", "fingerprint": "b8a6cfb9c7566823", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/processing/flink/stream-processors/real_time_analytics_processor.py:151"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1cd082f313e29ee3", "level": "note", "message": {"text": "Possibly dead Python function: unregister_callback"}, "properties": {"repobilityId": "30a48b048410fdc6", "scanner": "scanner-primary", "fingerprint": "1cd082f313e29ee3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/streaming/kafka/consumers/market-data-consumer.py:196"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ff08d5ab0e07548", "level": "note", "message": {"text": "Possibly dead Python function: print_market_data"}, "properties": {"repobilityId": "5429978870bb5b5f", "scanner": "scanner-primary", "fingerprint": "3ff08d5ab0e07548", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/streaming/kafka/consumers/market-data-consumer.py:353"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81216c94beccbc9d", "level": "note", "message": {"text": "Possibly dead Python function: to_influx_point"}, "properties": {"repobilityId": "a007a7e0a47488f9", "scanner": "scanner-primary", "fingerprint": "81216c94beccbc9d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/storage/timeseries/influxdb/schemas/measurement_schemas.py:233"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28170e0ea5a09c86", "level": "note", "message": {"text": "Possibly dead Python function: setup_complete_schema"}, "properties": {"repobilityId": "08b3d65afaaba456", "scanner": "scanner-primary", "fingerprint": "28170e0ea5a09c86", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/storage/timeseries/influxdb/schemas/time_series_setup.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9aef93bbdb6d16d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sdks/typescript/src/index.ts:13"}, "properties": {"repobilityId": "f86d8bc08e7d92a5", "scanner": "scanner-primary", "fingerprint": "9aef93bbdb6d16d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8413d12b91d76b6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 demo/src/UltraEfficientTradingDemo.js:57"}, "properties": {"repobilityId": "eb7f9be7e323775f", "scanner": "scanner-primary", "fingerprint": "8413d12b91d76b6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abf4c896fa8e20de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/strategy-tests.js:24"}, "properties": {"repobilityId": "2d324a7833631aa6", "scanner": "scanner-primary", "fingerprint": "abf4c896fa8e20de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a085224e96b6ae41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/unit/technical-indicators.test.js:127"}, "properties": {"repobilityId": "646e67e03ad83ccd", "scanner": "scanner-primary", "fingerprint": "a085224e96b6ae41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e01a8f46c2a44484", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-dashboard-data.js:7"}, "properties": {"repobilityId": "2f2306cb1bb3a403", "scanner": "scanner-primary", "fingerprint": "e01a8f46c2a44484", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1be6b4f41a7bf916", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-exports-fix.js:11"}, "properties": {"repobilityId": "30c169ae7a38f607", "scanner": "scanner-primary", "fingerprint": "1be6b4f41a7bf916", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d904ee9019e1e6f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-frontend-fixes.js:11"}, "properties": {"repobilityId": "ffb9240937bc19d7", "scanner": "scanner-primary", "fingerprint": "d904ee9019e1e6f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8887d0048123f930", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-complete-system.js:16"}, "properties": {"repobilityId": "6b0468a1cfca1435", "scanner": "scanner-primary", "fingerprint": "8887d0048123f930", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3ce9283b0d9e526", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-immediate-next-steps.js:16"}, "properties": {"repobilityId": "3565fc4b6a509f27", "scanner": "scanner-primary", "fingerprint": "a3ce9283b0d9e526", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-909af1ca1a5c66bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-python-bridge.js:8"}, "properties": {"repobilityId": "88be2c4c1f105ee9", "scanner": "scanner-primary", "fingerprint": "909af1ca1a5c66bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d5a1f819991e70e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-features.js:16"}, "properties": {"repobilityId": "264614c5b9f24233", "scanner": "scanner-primary", "fingerprint": "8d5a1f819991e70e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8732634359ba732", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-banking-integration.js:4"}, "properties": {"repobilityId": "ce2c83bb81671ba6", "scanner": "scanner-primary", "fingerprint": "a8732634359ba732", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-81f23dc534f4d3cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-real-market-data.js:10"}, "properties": {"repobilityId": "10f064bf7e7c8674", "scanner": "scanner-primary", "fingerprint": "81f23dc534f4d3cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fb09e3fb4804727", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-enhanced-frontend.js:12"}, "properties": {"repobilityId": "40ee35e12c5c1e82", "scanner": "scanner-primary", "fingerprint": "1fb09e3fb4804727", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-887f0cbf59c93f2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/legacy/test-core-system.js:10"}, "properties": {"repobilityId": "5122f402c9a6678f", "scanner": "scanner-primary", "fingerprint": "887f0cbf59c93f2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e56bc48e524f8999", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/setup/jest.setup.js:306"}, "properties": {"repobilityId": "d85a85f1334c8740", "scanner": "scanner-primary", "fingerprint": "e56bc48e524f8999", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-383b9e12a9c0187e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/check-orders.js:26"}, "properties": {"repobilityId": "4177a1ea65914017", "scanner": "scanner-primary", "fingerprint": "383b9e12a9c0187e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6c2cdd877e7dfe4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/automation-server.js:67"}, "properties": {"repobilityId": "43e2a6d3e3a419d3", "scanner": "scanner-primary", "fingerprint": "f6c2cdd877e7dfe4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19dc60b98fb78062", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/mock-market-data-server.js:211"}, "properties": {"repobilityId": "3e20db29c9314103", "scanner": "scanner-primary", "fingerprint": "19dc60b98fb78062", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-640514f0d3868dce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-service.js:343"}, "properties": {"repobilityId": "e27692f4b62d0abb", "scanner": "scanner-primary", "fingerprint": "640514f0d3868dce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce1c25ddb188a7da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-integration-server.js:48"}, "properties": {"repobilityId": "b701a39c3a9c3870", "scanner": "scanner-primary", "fingerprint": "ce1c25ddb188a7da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4dfc1aecdb4be49b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/simple-status.js:19"}, "properties": {"repobilityId": "4063550640a71fce", "scanner": "scanner-primary", "fingerprint": "4dfc1aecdb4be49b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54db55a9cbbfb39e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/enhanced-market-data-server.js:25"}, "properties": {"repobilityId": "63bad6c988d7f0f6", "scanner": "scanner-primary", "fingerprint": "54db55a9cbbfb39e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ba442f1f1273a82", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/trading-server.js:146"}, "properties": {"repobilityId": "d83992b353d3fa5c", "scanner": "scanner-primary", "fingerprint": "6ba442f1f1273a82", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86c76f3d9565c8df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/status-dashboard.js:85"}, "properties": {"repobilityId": "6a8d5435b3ac5c0c", "scanner": "scanner-primary", "fingerprint": "86c76f3d9565c8df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4ce3f7177573e5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/platform-demo.js:350"}, "properties": {"repobilityId": "e8405fbb933f9708", "scanner": "scanner-primary", "fingerprint": "d4ce3f7177573e5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2027c6a5929ebb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/legacy-dir/track-trades.js:50"}, "properties": {"repobilityId": "0b128fe66d7550fe", "scanner": "scanner-primary", "fingerprint": "c2027c6a5929ebb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c30764ff2098eb4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/test.js:2"}, "properties": {"repobilityId": "9ec4239fdd613ec3", "scanner": "scanner-primary", "fingerprint": "c30764ff2098eb4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5834328fc455b6dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/demo.js:16"}, "properties": {"repobilityId": "c8968c61bff53404", "scanner": "scanner-primary", "fingerprint": "5834328fc455b6dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0581b1b683efa92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/database/connection-pools.js:83"}, "properties": {"repobilityId": "07c729ab73f82228", "scanner": "scanner-primary", "fingerprint": "f0581b1b683efa92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-994b7f3fc89fcc05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/database/migrations.js:94"}, "properties": {"repobilityId": "2c31cc51812068d7", "scanner": "scanner-primary", "fingerprint": "994b7f3fc89fcc05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9ed334f4ca3c624", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/kafka-client.js:60"}, "properties": {"repobilityId": "f2003ba5bb4e06f4", "scanner": "scanner-primary", "fingerprint": "d9ed334f4ca3c624", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ae9af0fe690fce5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/libs/messaging/redis-client.js:47"}, "properties": {"repobilityId": "e3492aed02678e46", "scanner": "scanner-primary", "fingerprint": "4ae9af0fe690fce5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9de059b66ff43103", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-exit-by-confidence.js:60"}, "properties": {"repobilityId": "cb5e76f4ba3e4cd6", "scanner": "scanner-primary", "fingerprint": "9de059b66ff43103", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48514307b608ceb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-committee-threshold.js:73"}, "properties": {"repobilityId": "eb7d12d1a6bef677", "scanner": "scanner-primary", "fingerprint": "48514307b608ceb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43ef76e7115f9e88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/crypto-edge-monitor.js:88"}, "properties": {"repobilityId": "319a09cff5fae19a", "scanner": "scanner-primary", "fingerprint": "43ef76e7115f9e88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05a81671d78f7cba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-pnl-pct.js:49"}, "properties": {"repobilityId": "60c6d18cc98103ce", "scanner": "scanner-primary", "fingerprint": "05a81671d78f7cba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c30bbf11e1d02910", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-strategy-evidence.js:239"}, "properties": {"repobilityId": "7c273022db3c45a2", "scanner": "scanner-primary", "fingerprint": "c30bbf11e1d02910", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-785576024a9e9ae5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/shared/telegram-alerts.js:27"}, "properties": {"repobilityId": "24a1cb95683658ed", "scanner": "scanner-primary", "fingerprint": "785576024a9e9ae5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d64d708dcb6edca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/dashboard/server.js:31"}, "properties": {"repobilityId": "46a99015016667bd", "scanner": "scanner-primary", "fingerprint": "1d64d708dcb6edca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-883b56cec1f89de7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/unified-trading-bot.js:53"}, "properties": {"repobilityId": "9d020cc9804da588", "scanner": "scanner-primary", "fingerprint": "883b56cec1f89de7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4c97021c5b65544", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/signals/schema.js:16"}, "properties": {"repobilityId": "29b17958d3a34d69", "scanner": "scanner-primary", "fingerprint": "d4c97021c5b65544", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bfa2482b0d3afc0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/stock-bot/shared/auth.js:210"}, "properties": {"repobilityId": "e492f4fb2f5a8461", "scanner": "scanner-primary", "fingerprint": "8bfa2482b0d3afc0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1263263c1d271f51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/unified-forex-bot.js:50"}, "properties": {"repobilityId": "c82b96580080f851", "scanner": "scanner-primary", "fingerprint": "1263263c1d271f51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7703e38822c99598", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/signals/schema.js:16"}, "properties": {"repobilityId": "a9b7e533a30d5db0", "scanner": "scanner-primary", "fingerprint": "7703e38822c99598", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec114145034c1faf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/forex-bot/shared/auth.js:210"}, "properties": {"repobilityId": "ee0686b2b69e1530", "scanner": "scanner-primary", "fingerprint": "ec114145034c1faf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4792b579b6b7a26d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 deploy/crypto-bot/unified-crypto-bot.js:2267"}, "properties": {"repobilityId": "fd794110550edea9", "scanner": "scanner-primary", "fingerprint": "4792b579b6b7a26d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3e99a86180915f8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/unified-crypto-bot.js:47"}, "properties": {"repobilityId": "e16b9ad16c21e095", "scanner": "scanner-primary", "fingerprint": "3e99a86180915f8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e89d7fab42a2733", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/signals/schema.js:16"}, "properties": {"repobilityId": "3e11f322c1e5a231", "scanner": "scanner-primary", "fingerprint": "7e89d7fab42a2733", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8c740a5fb9eb0f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/crypto-bot/shared/auth.js:210"}, "properties": {"repobilityId": "99056803cf8efa7f", "scanner": "scanner-primary", "fingerprint": "e8c740a5fb9eb0f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8f0ccdfd0a1793f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/App.tsx:28"}, "properties": {"repobilityId": "13e22a3cecce5b9c", "scanner": "scanner-primary", "fingerprint": "e8f0ccdfd0a1793f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92335841250a0235", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/components/Native/DesktopTradingWorkspace.tsx:158"}, "properties": {"repobilityId": "0f2c8246d5357d7e", "scanner": "scanner-primary", "fingerprint": "92335841250a0235", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e60f0ce7034ae62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 clients/desktop-app/src/renderer/components/Layout/Layout.tsx:125"}, "properties": {"repobilityId": "132cda0ec087f4f7", "scanner": "scanner-primary", "fingerprint": "2e60f0ce7034ae62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a95d5d871b8f5a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/LoginPage.tsx:48"}, "properties": {"repobilityId": "afe6380d32a3266e", "scanner": "scanner-primary", "fingerprint": "1a95d5d871b8f5a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-77bf18fc43fa5b63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/TradingPage.tsx:134"}, "properties": {"repobilityId": "82368c2cd6dda8bd", "scanner": "scanner-primary", "fingerprint": "77bf18fc43fa5b63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f78fde90e727ade", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/pages/RegisterPage.tsx:120"}, "properties": {"repobilityId": "a53f34a4d54cf50d", "scanner": "scanner-primary", "fingerprint": "5f78fde90e727ade", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb70013edfd0c31d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/renderer/services/api.ts:233"}, "properties": {"repobilityId": "20fbd3fd3711b3a9", "scanner": "scanner-primary", "fingerprint": "eb70013edfd0c31d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4eb6935ce4b6dde3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/desktop-app/src/main/updater.ts:22"}, "properties": {"repobilityId": "2590f8a3790c0ec8", "scanner": "scanner-primary", "fingerprint": "4eb6935ce4b6dde3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5139e190b64867f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-forex-bot.js:50"}, "properties": {"repobilityId": "7d6c7f5ce0343f00", "scanner": "scanner-primary", "fingerprint": "c5139e190b64867f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-359bf1e3b63fc59c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/high-volume-breakout-bot.js:107"}, "properties": {"repobilityId": "0bc1f0c4705ca0a6", "scanner": "scanner-primary", "fingerprint": "359bf1e3b63fc59c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97a44beb6f6217ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot.js:53"}, "properties": {"repobilityId": "a9e219d4065ea75d", "scanner": "scanner-primary", "fingerprint": "97a44beb6f6217ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35658a9740c5ba02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/orb-trading-bot.js:97"}, "properties": {"repobilityId": "d4814b06ffb015a4", "scanner": "scanner-primary", "fingerprint": "35658a9740c5ba02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3a8c05d1f1f46cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/gap-fade-bot.js:86"}, "properties": {"repobilityId": "6a07b0f183ad18c5", "scanner": "scanner-primary", "fingerprint": "b3a8c05d1f1f46cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7141ef40f87d7ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/crypto-bot-stub.js:74"}, "properties": {"repobilityId": "538b97f6d4b4e20b", "scanner": "scanner-primary", "fingerprint": "f7141ef40f87d7ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf395738c1ea746d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-trading-bot-improved.js:310"}, "properties": {"repobilityId": "a1512ef563d35820", "scanner": "scanner-primary", "fingerprint": "cf395738c1ea746d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-358f6451743e23cd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 clients/bot-dashboard/unified-crypto-bot.js:2267"}, "properties": {"repobilityId": "40da08b37085fa66", "scanner": "scanner-primary", "fingerprint": "358f6451743e23cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-65778d125321813e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/unified-crypto-bot.js:47"}, "properties": {"repobilityId": "0dcef3f8e8504609", "scanner": "scanner-primary", "fingerprint": "65778d125321813e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54fba351ec98bf1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/shared/auth.js:210"}, "properties": {"repobilityId": "9754e3acf47dfdf6", "scanner": "scanner-primary", "fingerprint": "54fba351ec98bf1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5690e519069cb78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clients/bot-dashboard/src/pages/DocsPage.tsx:601"}, "properties": {"repobilityId": "559cc00710d01f9d", "scanner": "scanner-primary", "fingerprint": "a5690e519069cb78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2ec241125b14beb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/verify-migration.js:24"}, "properties": {"repobilityId": "d136ca39505d943b", "scanner": "scanner-primary", "fingerprint": "d2ec241125b14beb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78b876734c5fcb7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/backtesting-js/cli.js:31"}, "properties": {"repobilityId": "39868b823937aaea", "scanner": "scanner-primary", "fingerprint": "78b876734c5fcb7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36c57e6d6a1b5d7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/edge-stats-coverage.js:19"}, "properties": {"repobilityId": "ecc3408472357582", "scanner": "scanner-primary", "fingerprint": "36c57e6d6a1b5d7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49e37875841e9b10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/schema.js:16"}, "properties": {"repobilityId": "e88b35aedec23cb9", "scanner": "scanner-primary", "fingerprint": "49e37875841e9b10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-070a93dd15bda385", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/kill-switch-oos.js:134"}, "properties": {"repobilityId": "5ada9e8d937ad624", "scanner": "scanner-primary", "fingerprint": "070a93dd15bda385", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a036b77e8fff892", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/signals/backtest/qualifier-backtest.js:151"}, "properties": {"repobilityId": "141ffd33391c8023", "scanner": "scanner-primary", "fingerprint": "9a036b77e8fff892", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8367a7a03d4a2eb8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/dashboard-api-server.js:394"}, "properties": {"repobilityId": "e5d2c1b3b46d62d3", "scanner": "scanner-primary", "fingerprint": "8367a7a03d4a2eb8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0643ca10a0db96da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/server.js:1145"}, "properties": {"repobilityId": "84be9be00431a9fb", "scanner": "scanner-primary", "fingerprint": "0643ca10a0db96da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd6195085b7f1530", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/dashboard/index.js:11"}, "properties": {"repobilityId": "dffc88274586842b", "scanner": "scanner-primary", "fingerprint": "cd6195085b7f1530", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d4dbd4d5e61cfb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/market-archive/archiver.js:127"}, "properties": {"repobilityId": "6952b813e4b2ea8e", "scanner": "scanner-primary", "fingerprint": "8d4dbd4d5e61cfb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-615a3959606e0ed3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/strategy-engine/NexusAlpha.js:69"}, "properties": {"repobilityId": "c9487634a5d3d045", "scanner": "scanner-primary", "fingerprint": "615a3959606e0ed3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a71327de312d64f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 infrastructure/notifications/telegram-alerts.js:27"}, "properties": {"repobilityId": "52cb87be9ae009b9", "scanner": "scanner-primary", "fingerprint": "5a71327de312d64f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bae9fbc64b9bd229", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 infrastructure/memory/MemoryManager.js:44"}, "properties": {"repobilityId": "de236080b173f5a0", "scanner": "scanner-primary", "fingerprint": "bae9fbc64b9bd229", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44adae16c8869c1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/test-orchestrator.js:63"}, "properties": {"repobilityId": "008522acb17bfd67", "scanner": "scanner-primary", "fingerprint": "44adae16c8869c1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2f775deb4791142", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/NexusTradeSystemOrchestrator.js:85"}, "properties": {"repobilityId": "69d8304f1a995587", "scanner": "scanner-primary", "fingerprint": "e2f775deb4791142", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e77a4709ffa581da", "level": "warning", "message": {"text": "Dockerfile runs as root: clients/web-app/Dockerfile"}, "properties": {"repobilityId": "b5a3fe8e22f28036", "scanner": "scanner-primary", "fingerprint": "e77a4709ffa581da", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-2e4cb18d769d2f3c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enterprise-dashboard.html:1055"}, "properties": {"repobilityId": "a65ad9d0521fe97e", "scanner": "scanner-primary", "fingerprint": "2e4cb18d769d2f3c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/enterprise-dashboard.html"}, "region": {"startLine": 1055}}}]}, {"ruleId": "scanner-d2a9d622be69931b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/automation-server.js:20"}, "properties": {"repobilityId": "bf871dc63533599d", "scanner": "scanner-primary", "fingerprint": "d2a9d622be69931b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/automation-server.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-40b1e86dbbb068fb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/enhanced-trading-dashboard.html:522"}, "properties": {"repobilityId": "496830058231c7df", "scanner": "scanner-primary", "fingerprint": "40b1e86dbbb068fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/enhanced-trading-dashboard.html"}, "region": {"startLine": 522}}}]}, {"ruleId": "scanner-21f25c036776fdc2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/mock-market-data-server.js:15"}, "properties": {"repobilityId": "994d5291753d12b1", "scanner": "scanner-primary", "fingerprint": "21f25c036776fdc2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/mock-market-data-server.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-bdc72eb7fb7758fb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-service.js:15"}, "properties": {"repobilityId": "79144202eeee6f59", "scanner": "scanner-primary", "fingerprint": "bdc72eb7fb7758fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/trading-service.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-e38182487c2dd4ff", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-integration-server.js:57"}, "properties": {"repobilityId": "8cac997b802b48f2", "scanner": "scanner-primary", "fingerprint": "e38182487c2dd4ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/enhanced-integration-server.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-7ca4c8c0361ba465", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/enhanced-market-data-server.js:18"}, "properties": {"repobilityId": "e016138182ef9e8e", "scanner": "scanner-primary", "fingerprint": "7ca4c8c0361ba465", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/enhanced-market-data-server.js"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-00f50b30ee9d2634", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/trading-server.js:15"}, "properties": {"repobilityId": "aa318ae13ffa98c0", "scanner": "scanner-primary", "fingerprint": "00f50b30ee9d2634", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/trading-server.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-915f1e0da3f68186", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/archive/legacy-dir/platform-demo.js:316"}, "properties": {"repobilityId": "9caea4c988ebeaf0", "scanner": "scanner-primary", "fingerprint": "915f1e0da3f68186", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/platform-demo.js"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-57fc96d45334dac0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/automation-dashboard.html:378"}, "properties": {"repobilityId": "24a4c87a163cc009", "scanner": "scanner-primary", "fingerprint": "57fc96d45334dac0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/automation-dashboard.html"}, "region": {"startLine": 378}}}]}, {"ruleId": "scanner-dcb24f414943c59b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/archive/legacy-dir/REAL_POSITIONS_DASHBOARD.html:256"}, "properties": {"repobilityId": "7872f0276cca941d", "scanner": "scanner-primary", "fingerprint": "dcb24f414943c59b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/archive/legacy-dir/REAL_POSITIONS_DASHBOARD.html"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-eb46f8aa912bec3a", "level": "error", "message": {"text": "Possible secret in shared/README.md"}, "properties": {"repobilityId": "af7d7079ce1b8774", "scanner": "scanner-primary", "fingerprint": "eb46f8aa912bec3a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/README.md"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-eb46f8aa912bec3a", "level": "error", "message": {"text": "Possible secret in shared/README.md"}, "properties": {"repobilityId": "af7d7079ce1b8774", "scanner": "scanner-primary", "fingerprint": "eb46f8aa912bec3a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/README.md"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-0617c19b4fec180b", "level": "error", "message": {"text": "Possible secret in shared/constants/api-endpoints.js"}, "properties": {"repobilityId": "18969e252ed822a9", "scanner": "scanner-primary", "fingerprint": "0617c19b4fec180b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/constants/api-endpoints.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-803c039433743012", "level": "error", "message": {"text": "Possible secret in clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "properties": {"repobilityId": "e14c8ee4d8433bc0", "scanner": "scanner-primary", "fingerprint": "803c039433743012", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-803c039433743012", "level": "error", "message": {"text": "Possible secret in clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "properties": {"repobilityId": "e14c8ee4d8433bc0", "scanner": "scanner-primary", "fingerprint": "803c039433743012", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-803c039433743012", "level": "error", "message": {"text": "Possible secret in clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "properties": {"repobilityId": "e14c8ee4d8433bc0", "scanner": "scanner-primary", "fingerprint": "803c039433743012", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/desktop-app/src/renderer/pages/RegisterPage.tsx"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-f934bd205320c0a6", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in clients/desktop-app/src/renderer/store/slices/authSlice.ts:47"}, "properties": {"repobilityId": "5afda55ae7f52de4", "scanner": "scanner-primary", "fingerprint": "f934bd205320c0a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/desktop-app/src/renderer/store/slices/authSlice.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-a1dc6c7bef4f98c5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/high-volume-breakout-bot.js:37"}, "properties": {"repobilityId": "fa7fafe1165dc763", "scanner": "scanner-primary", "fingerprint": "a1dc6c7bef4f98c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/high-volume-breakout-bot.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-f46cd2fea529f6cf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/orb-trading-bot.js:36"}, "properties": {"repobilityId": "cca80a23949a0ccf", "scanner": "scanner-primary", "fingerprint": "f46cd2fea529f6cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/orb-trading-bot.js"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-1347d6a3ab21e3d3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/gap-fade-bot.js:35"}, "properties": {"repobilityId": "d7861006ead9b19a", "scanner": "scanner-primary", "fingerprint": "1347d6a3ab21e3d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/gap-fade-bot.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-f06dc9f70bba75f9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/crypto-bot-stub.js:13"}, "properties": {"repobilityId": "7fc0cb933aa3ec78", "scanner": "scanner-primary", "fingerprint": "f06dc9f70bba75f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/crypto-bot-stub.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-b04bc41bbf7e65f4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in clients/bot-dashboard/unified-trading-bot-improved.js:20"}, "properties": {"repobilityId": "224433c403875624", "scanner": "scanner-primary", "fingerprint": "b04bc41bbf7e65f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/unified-trading-bot-improved.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-67bd9c8b4c7de4dc", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/pages/LoginPage.tsx:41"}, "properties": {"repobilityId": "c0ae1e47fb7a9add", "scanner": "scanner-primary", "fingerprint": "67bd9c8b4c7de4dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/src/pages/LoginPage.tsx"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-7e1728d67f0af39b", "level": "error", "message": {"text": "Possible secret in clients/bot-dashboard/src/pages/DocsPage.tsx"}, "properties": {"repobilityId": "5a96bc89fd8a8e36", "scanner": "scanner-primary", "fingerprint": "7e1728d67f0af39b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/src/pages/DocsPage.tsx"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-7e1728d67f0af39b", "level": "error", "message": {"text": "Possible secret in clients/bot-dashboard/src/pages/DocsPage.tsx"}, "properties": {"repobilityId": "5a96bc89fd8a8e36", "scanner": "scanner-primary", "fingerprint": "7e1728d67f0af39b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/src/pages/DocsPage.tsx"}, "region": {"startLine": 468}}}]}, {"ruleId": "scanner-7e1728d67f0af39b", "level": "error", "message": {"text": "Possible secret in clients/bot-dashboard/src/pages/DocsPage.tsx"}, "properties": {"repobilityId": "5a96bc89fd8a8e36", "scanner": "scanner-primary", "fingerprint": "7e1728d67f0af39b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/src/pages/DocsPage.tsx"}, "region": {"startLine": 619}}}]}, {"ruleId": "scanner-d16ee3714fd12b8f", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in clients/bot-dashboard/src/services/api.ts:96"}, "properties": {"repobilityId": "8b2a2db7e4aee8e3", "scanner": "scanner-primary", "fingerprint": "d16ee3714fd12b8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/bot-dashboard/src/services/api.ts"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-77f1d812c4f756ae", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/dashboard/dashboard-api-server.js:12"}, "properties": {"repobilityId": "25c3def749ff8323", "scanner": "scanner-primary", "fingerprint": "77f1d812c4f756ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dashboard/dashboard-api-server.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-c19011e1f7653876", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/dashboard/server.js:25"}, "properties": {"repobilityId": "800c0633c559695d", "scanner": "scanner-primary", "fingerprint": "c19011e1f7653876", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dashboard/server.js"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-72026c8dcd58f43e", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in services/strategy-engine/api_server.py:500"}, "properties": {"repobilityId": "fa2577f07a8ce8d3", "scanner": "scanner-primary", "fingerprint": "72026c8dcd58f43e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 500}}}]}, {"ruleId": "scanner-f5562086042ebdc1", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in services/strategy-engine/README.md:335"}, "properties": {"repobilityId": "14dadb5a5466d7d9", "scanner": "scanner-primary", "fingerprint": "f5562086042ebdc1", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/README.md"}, "region": {"startLine": 335}}}]}, {"ruleId": "scanner-73350c026849aa1f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/strategy-engine/strategy_bridge.py:265"}, "properties": {"repobilityId": "2b882d80641c5633", "scanner": "scanner-primary", "fingerprint": "73350c026849aa1f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-2d325d0ff350d922", "level": "error", "message": {"text": "Possible secret in data-infrastructure/scripts/deploy-infrastructure.sh"}, "properties": {"repobilityId": "e37450fcbcc0a4b1", "scanner": "scanner-primary", "fingerprint": "2d325d0ff350d922", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/scripts/deploy-infrastructure.sh"}, "region": {"startLine": 260}}}]}, {"ruleId": "scanner-2d325d0ff350d922", "level": "error", "message": {"text": "Possible secret in data-infrastructure/scripts/deploy-infrastructure.sh"}, "properties": {"repobilityId": "e37450fcbcc0a4b1", "scanner": "scanner-primary", "fingerprint": "2d325d0ff350d922", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/scripts/deploy-infrastructure.sh"}, "region": {"startLine": 312}}}]}, {"ruleId": "scanner-2d325d0ff350d922", "level": "error", "message": {"text": "Possible secret in data-infrastructure/scripts/deploy-infrastructure.sh"}, "properties": {"repobilityId": "e37450fcbcc0a4b1", "scanner": "scanner-primary", "fingerprint": "2d325d0ff350d922", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-infrastructure/scripts/deploy-infrastructure.sh"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "735be02f00f3d798", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 29}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 58}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "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": 81}}}]}, {"ruleId": "scanner-e968289a46c10623", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5454be60786708ea", "scanner": "scanner-primary", "fingerprint": "e968289a46c10623", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-strategy-health.yml"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d0366682d1b0fac0", "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": 82}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8aba628aa7ef7c0f", "level": "note", "message": {"text": "Very large file: deploy/stock-bot/unified-trading-bot.js (8482 lines)"}, "properties": {"repobilityId": "62a8d66381e650a2", "scanner": "scanner-primary", "fingerprint": "8aba628aa7ef7c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9f41e3a092fd9bba", "level": "note", "message": {"text": "Very large file: deploy/forex-bot/unified-forex-bot.js (6600 lines)"}, "properties": {"repobilityId": "c2d6d072cd1e4a82", "scanner": "scanner-primary", "fingerprint": "9f41e3a092fd9bba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f744d42419f9baf9", "level": "note", "message": {"text": "Very large file: deploy/crypto-bot/unified-crypto-bot.js (6725 lines)"}, "properties": {"repobilityId": "976aa1fd589891da", "scanner": "scanner-primary", "fingerprint": "f744d42419f9baf9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9d2136f5bb0afdca", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/unified-forex-bot.js (6600 lines)"}, "properties": {"repobilityId": "55f635b94a70e1a2", "scanner": "scanner-primary", "fingerprint": "9d2136f5bb0afdca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ae2f9341eb718268", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/unified-trading-bot.js (8482 lines)"}, "properties": {"repobilityId": "8adeba86102d401a", "scanner": "scanner-primary", "fingerprint": "ae2f9341eb718268", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-03d5dbb0947d6fd4", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/unified-crypto-bot.js (6725 lines)"}, "properties": {"repobilityId": "413f515b68f7ec4c", "scanner": "scanner-primary", "fingerprint": "03d5dbb0947d6fd4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-936654a3b8ef6529", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/src/pages/StockBotPage.tsx (925 lines)"}, "properties": {"repobilityId": "3641d2df47527063", "scanner": "scanner-primary", "fingerprint": "936654a3b8ef6529", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f47ae144b473ddea", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/src/pages/SettingsPage.tsx (1823 lines)"}, "properties": {"repobilityId": "2b6a86a2d30ff01b", "scanner": "scanner-primary", "fingerprint": "f47ae144b473ddea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a01d9f026e520be", "level": "note", "message": {"text": "Very large file: clients/bot-dashboard/src/pages/OverviewPage.legacy.tsx (1111 lines)"}, "properties": {"repobilityId": "5a60f564321760c0", "scanner": "scanner-primary", "fingerprint": "5a01d9f026e520be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f123feaa511b440", "level": "note", "message": {"text": "Very large file: services/strategy-engine/strategy_bridge.py (1762 lines)"}, "properties": {"repobilityId": "1f8c48f0b9de314a", "scanner": "scanner-primary", "fingerprint": "8f123feaa511b440", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d5ef730447d7e366", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b3ed68815bca2f8c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "properties": {"repobilityId": "7edae0550c126386", "scanner": "scanner-primary", "fingerprint": "b3ed68815bca2f8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-015a862160d16585", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: sdks/typescript/package.json"}, "properties": {"repobilityId": "e97d1d5bf4d87aa0", "scanner": "scanner-primary", "fingerprint": "015a862160d16585", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdks/typescript/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b3b4131c0cb2eaa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/package.json"}, "properties": {"repobilityId": "310fa61d19fba401", "scanner": "scanner-primary", "fingerprint": "2b3b4131c0cb2eaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24f0072d0f67e054", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: deploy/dashboard/package.json"}, "properties": {"repobilityId": "302c3b6cad76f2e4", "scanner": "scanner-primary", "fingerprint": "24f0072d0f67e054", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c3f3974769165f4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: deploy/stock-bot/package.json"}, "properties": {"repobilityId": "326889c60a85b9e6", "scanner": "scanner-primary", "fingerprint": "7c3f3974769165f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/stock-bot/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-083b9ba615cc2803", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: deploy/forex-bot/package.json"}, "properties": {"repobilityId": "64a0696eefffd9f9", "scanner": "scanner-primary", "fingerprint": "083b9ba615cc2803", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/forex-bot/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-edb6f8a2d4380334", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: deploy/crypto-bot/package.json"}, "properties": {"repobilityId": "bd3e7e45d5f8278f", "scanner": "scanner-primary", "fingerprint": "edb6f8a2d4380334", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/crypto-bot/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c365a613ddd26cc4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: clients/pro-terminal/package.json"}, "properties": {"repobilityId": "5e1b12ffb358f2ce", "scanner": "scanner-primary", "fingerprint": "c365a613ddd26cc4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/pro-terminal/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ccda9bff669d768", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: clients/web-app/package.json"}, "properties": {"repobilityId": "8cda3c5124535fec", "scanner": "scanner-primary", "fingerprint": "3ccda9bff669d768", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/web-app/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e48ec687e29626ba", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: clients/desktop-app/package.json"}, "properties": {"repobilityId": "cf3b44182fd32342", "scanner": "scanner-primary", "fingerprint": "e48ec687e29626ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/desktop-app/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1574c4bd4cb8ca63", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: clients/react-dashboard/package.json"}, "properties": {"repobilityId": "1316629d97da1b8a", "scanner": "scanner-primary", "fingerprint": "1574c4bd4cb8ca63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clients/react-dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed4cc4366d243a59", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/backtesting-js/package.json"}, "properties": {"repobilityId": "e4f005866d54a5eb", "scanner": "scanner-primary", "fingerprint": "ed4cc4366d243a59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/backtesting-js/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-802d3ccc6c63ec54", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/signals/package.json"}, "properties": {"repobilityId": "73f445e75f603f38", "scanner": "scanner-primary", "fingerprint": "802d3ccc6c63ec54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/signals/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d73d4ae7da5b413", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: src/package.json"}, "properties": {"repobilityId": "cbcc0d857507ab62", "scanner": "scanner-primary", "fingerprint": "2d73d4ae7da5b413", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "44bbd733ea07e713", "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": "aa47f9ef8d9052d0", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "97825317a9300d64", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "3e6b3438001a2a43", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "b41648175903f360", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "f73e336b8bd854d1", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "c4baed100f5e2ea0", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-53ce696c83aabd74", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/status.md"}, "properties": {"repobilityId": "88aae42dcbdf6a24", "scanner": "scanner-primary", "fingerprint": "53ce696c83aabd74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/status.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-064191ae07b621f5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/health.md"}, "properties": {"repobilityId": "a374cf9e4decf113", "scanner": "scanner-primary", "fingerprint": "064191ae07b621f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/health.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-6b7cc4eac1eda6f3", "level": "note", "message": {"text": "Legacy-named symbol `errorOnDeprecated` in jest.config.js:117"}, "properties": {"repobilityId": "a877364fdfb21197", "scanner": "scanner-primary", "fingerprint": "6b7cc4eac1eda6f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e424813d0aa4daba", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/strategy-tests.js:40"}, "properties": {"repobilityId": "2a7dd09caf7f5fef", "scanner": "scanner-primary", "fingerprint": "e424813d0aa4daba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c90ff7b1ef8fc671", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/anti-churning.test.js:320"}, "properties": {"repobilityId": "9467ad3c43a73b5a", "scanner": "scanner-primary", "fingerprint": "c90ff7b1ef8fc671", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc2d602276ee7b4d", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/stock-bot/unified-trading-bot.js:15"}, "properties": {"repobilityId": "a89171da5d69b254", "scanner": "scanner-primary", "fingerprint": "fc2d602276ee7b4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ac32c2125c426ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/stock-bot/stock-modules.manifest.js:1"}, "properties": {"repobilityId": "39cfbf0089f4e59b", "scanner": "scanner-primary", "fingerprint": "5ac32c2125c426ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88adfe3e824a223f", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/stock-bot/signals/displacement.js:47"}, "properties": {"repobilityId": "fe21a70a782bd2ad", "scanner": "scanner-primary", "fingerprint": "88adfe3e824a223f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be08591d58364ec8", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/stock-bot/signals/exit-manager.js:30"}, "properties": {"repobilityId": "a23ee5ba78473ab5", "scanner": "scanner-primary", "fingerprint": "be08591d58364ec8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96cd434e2f6ef01b", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/stock-bot/signals/committee-scorer.js:271"}, "properties": {"repobilityId": "da964f5be59b3f56", "scanner": "scanner-primary", "fingerprint": "96cd434e2f6ef01b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72e81b77803e02c6", "level": "none", "message": {"text": "Commented-code block (10 lines) in deploy/stock-bot/signals/account-snapshot.js:6"}, "properties": {"repobilityId": "febe810717f85676", "scanner": "scanner-primary", "fingerprint": "72e81b77803e02c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da031a3d7bbb74ff", "level": "none", "message": {"text": "Commented-code block (14 lines) in deploy/stock-bot/signals/order-intent.js:8"}, "properties": {"repobilityId": "5789c7686aaae504", "scanner": "scanner-primary", "fingerprint": "da031a3d7bbb74ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e0e769e2716752c", "level": "none", "message": {"text": "Commented-code block (8 lines) in deploy/stock-bot/shared/module-loader.js:3"}, "properties": {"repobilityId": "88b8c4a33f138ba6", "scanner": "scanner-primary", "fingerprint": "6e0e769e2716752c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1de8ed5b32fa7f3e", "level": "none", "message": {"text": "Commented-code block (17 lines) in deploy/stock-bot/infrastructure/notifications/telegram-alerts.js:11"}, "properties": {"repobilityId": "e8ca943d9433dd5d", "scanner": "scanner-primary", "fingerprint": "1de8ed5b32fa7f3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-167308988ba54e1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/stock-bot/infrastructure/notifications/sms-alerts.js:8"}, "properties": {"repobilityId": "b317e1399cefc823", "scanner": "scanner-primary", "fingerprint": "167308988ba54e1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f52d4719d987e1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/stock-bot/infrastructure/monitoring/metrics.js:4"}, "properties": {"repobilityId": "51189ccc4f0de21e", "scanner": "scanner-primary", "fingerprint": "9f52d4719d987e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87872b33d2419919", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/forex-bot/unified-forex-bot.js:13"}, "properties": {"repobilityId": "9a48b7313f3b72e7", "scanner": "scanner-primary", "fingerprint": "87872b33d2419919", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03befdf748f1280d", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/forex-bot/forex-modules.manifest.js:1"}, "properties": {"repobilityId": "62f73d9c124889ff", "scanner": "scanner-primary", "fingerprint": "03befdf748f1280d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4e83d48d2b25425", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/forex-bot/signals/displacement.js:47"}, "properties": {"repobilityId": "9286a718e95f007f", "scanner": "scanner-primary", "fingerprint": "b4e83d48d2b25425", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf97bb30db38e4bd", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/forex-bot/signals/exit-manager.js:30"}, "properties": {"repobilityId": "74bb523c0456ff75", "scanner": "scanner-primary", "fingerprint": "bf97bb30db38e4bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f7d14eac101f33e", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/forex-bot/signals/committee-scorer.js:271"}, "properties": {"repobilityId": "b5ca634bbd21addb", "scanner": "scanner-primary", "fingerprint": "4f7d14eac101f33e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74e99cab3c2cb0fe", "level": "none", "message": {"text": "Commented-code block (10 lines) in deploy/forex-bot/signals/account-snapshot.js:6"}, "properties": {"repobilityId": "c6c04c979a24fb90", "scanner": "scanner-primary", "fingerprint": "74e99cab3c2cb0fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-861a8eaccc4ad216", "level": "none", "message": {"text": "Commented-code block (14 lines) in deploy/forex-bot/signals/order-intent.js:8"}, "properties": {"repobilityId": "65cd572853001dbf", "scanner": "scanner-primary", "fingerprint": "861a8eaccc4ad216", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff0c3ac14acc5263", "level": "none", "message": {"text": "Commented-code block (8 lines) in deploy/forex-bot/shared/module-loader.js:3"}, "properties": {"repobilityId": "8bd1db2e4d016ea5", "scanner": "scanner-primary", "fingerprint": "ff0c3ac14acc5263", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64c6280afdf3524f", "level": "none", "message": {"text": "Commented-code block (17 lines) in deploy/forex-bot/infrastructure/notifications/telegram-alerts.js:11"}, "properties": {"repobilityId": "3e16ffad053b336f", "scanner": "scanner-primary", "fingerprint": "64c6280afdf3524f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fbec32e57a0bb8b", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/forex-bot/infrastructure/notifications/sms-alerts.js:8"}, "properties": {"repobilityId": "bb18605fd46a6b16", "scanner": "scanner-primary", "fingerprint": "3fbec32e57a0bb8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5371882b6ea65bea", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/forex-bot/infrastructure/monitoring/metrics.js:4"}, "properties": {"repobilityId": "33975f8188955f46", "scanner": "scanner-primary", "fingerprint": "5371882b6ea65bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad0d8cb77d15f413", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/crypto-modules.manifest.js:1"}, "properties": {"repobilityId": "88f8b19f268ff055", "scanner": "scanner-primary", "fingerprint": "ad0d8cb77d15f413", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b9b22e60379abc7", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/unified-crypto-bot.js:15"}, "properties": {"repobilityId": "798a48a38b219718", "scanner": "scanner-primary", "fingerprint": "6b9b22e60379abc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34d7101813bb80a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/signals/displacement.js:47"}, "properties": {"repobilityId": "88b315fc8591944c", "scanner": "scanner-primary", "fingerprint": "34d7101813bb80a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f978f798a501029", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/signals/exit-manager.js:30"}, "properties": {"repobilityId": "24529e64eb4a89f4", "scanner": "scanner-primary", "fingerprint": "9f978f798a501029", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dea3fdcb03d1d1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/signals/committee-scorer.js:271"}, "properties": {"repobilityId": "7ecd34002add55f7", "scanner": "scanner-primary", "fingerprint": "0dea3fdcb03d1d1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fec9fd3af45ff029", "level": "none", "message": {"text": "Commented-code block (10 lines) in deploy/crypto-bot/signals/account-snapshot.js:6"}, "properties": {"repobilityId": "77eea7e9e68d2acb", "scanner": "scanner-primary", "fingerprint": "fec9fd3af45ff029", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20cbf731f9141e1c", "level": "none", "message": {"text": "Commented-code block (14 lines) in deploy/crypto-bot/signals/order-intent.js:8"}, "properties": {"repobilityId": "1a970179f0f8b6db", "scanner": "scanner-primary", "fingerprint": "20cbf731f9141e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-155a6498c32f8bf8", "level": "none", "message": {"text": "Commented-code block (8 lines) in deploy/crypto-bot/shared/module-loader.js:3"}, "properties": {"repobilityId": "3c390f6891d27e5b", "scanner": "scanner-primary", "fingerprint": "155a6498c32f8bf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bd11383331ebc34", "level": "none", "message": {"text": "Commented-code block (17 lines) in deploy/crypto-bot/infrastructure/notifications/telegram-alerts.js:11"}, "properties": {"repobilityId": "f8e1168fb612b7b7", "scanner": "scanner-primary", "fingerprint": "2bd11383331ebc34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a41d93156c1ae5e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in deploy/crypto-bot/infrastructure/notifications/sms-alerts.js:8"}, "properties": {"repobilityId": "9142d7e965934c26", "scanner": "scanner-primary", "fingerprint": "a41d93156c1ae5e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01931046b0197a54", "level": "none", "message": {"text": "Commented-code block (5 lines) in deploy/crypto-bot/infrastructure/monitoring/metrics.js:4"}, "properties": {"repobilityId": "33811f3e2d0fa602", "scanner": "scanner-primary", "fingerprint": "01931046b0197a54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d57d3bf5f4bae599", "level": "none", "message": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-forex-bot.js:13"}, "properties": {"repobilityId": "bb3796510b7ac76c", "scanner": "scanner-primary", "fingerprint": "d57d3bf5f4bae599", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30ef800f6cf5674b", "level": "none", "message": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/forex-modules.manifest.js:1"}, "properties": {"repobilityId": "d55050090ec42247", "scanner": "scanner-primary", "fingerprint": "30ef800f6cf5674b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bb633bc81607547", "level": "none", "message": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-trading-bot.js:15"}, "properties": {"repobilityId": "d8fb56d5902f32e7", "scanner": "scanner-primary", "fingerprint": "3bb633bc81607547", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbacf1e02aa5b1d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in clients/bot-dashboard/stock-modules.manifest.js:1"}, "properties": {"repobilityId": "571f1d2cad66cd92", "scanner": "scanner-primary", "fingerprint": "fbacf1e02aa5b1d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-925240bdb72001ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in clients/bot-dashboard/crypto-modules.manifest.js:1"}, "properties": {"repobilityId": "4e4758202f9610c7", "scanner": "scanner-primary", "fingerprint": "925240bdb72001ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cef3d34e15d6b1e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in clients/bot-dashboard/unified-crypto-bot.js:15"}, "properties": {"repobilityId": "c745fb90e8f39de8", "scanner": "scanner-primary", "fingerprint": "cef3d34e15d6b1e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ac45b66abcfffab", "level": "none", "message": {"text": "Commented-code block (8 lines) in clients/bot-dashboard/shared/module-loader.js:3"}, "properties": {"repobilityId": "2916313e2f235a81", "scanner": "scanner-primary", "fingerprint": "6ac45b66abcfffab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d348e33a3207fef", "level": "none", "message": {"text": "Commented-code block (10 lines) in clients/bot-dashboard/shared/__tests__/module-loader.test.js:3"}, "properties": {"repobilityId": "4c5f9d988543deee", "scanner": "scanner-primary", "fingerprint": "7d348e33a3207fef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30ff5b64f394abce", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/signals/displacement.js:47"}, "properties": {"repobilityId": "4b0eff5ab3be2d96", "scanner": "scanner-primary", "fingerprint": "30ff5b64f394abce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd69bce0a6b82d21", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/signals/exit-manager.js:30"}, "properties": {"repobilityId": "3ffdd3c5bcf2617b", "scanner": "scanner-primary", "fingerprint": "cd69bce0a6b82d21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2b11a8d1648c7ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/signals/committee-scorer.js:271"}, "properties": {"repobilityId": "7eb475dc54e6e892", "scanner": "scanner-primary", "fingerprint": "a2b11a8d1648c7ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7a975e4d1ddf6b4", "level": "none", "message": {"text": "Commented-code block (10 lines) in services/signals/account-snapshot.js:6"}, "properties": {"repobilityId": "654f4061c03db8b6", "scanner": "scanner-primary", "fingerprint": "d7a975e4d1ddf6b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d65f31be95c07f5", "level": "none", "message": {"text": "Commented-code block (14 lines) in services/signals/order-intent.js:8"}, "properties": {"repobilityId": "a317198ee9baefc0", "scanner": "scanner-primary", "fingerprint": "9d65f31be95c07f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-977a09e3bd1fcb6c", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/signals/__tests__/edge-stats.test.js:19"}, "properties": {"repobilityId": "6723a1b6fae3290c", "scanner": "scanner-primary", "fingerprint": "977a09e3bd1fcb6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a490a3263d971a36", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/signals/__tests__/committee-scorer-signed-weights.test.js:34"}, "properties": {"repobilityId": "4d1c4c77209b8df8", "scanner": "scanner-primary", "fingerprint": "a490a3263d971a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ec94074ffe1ef1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/signals/__tests__/strategies/stock-orb.test.js:233"}, "properties": {"repobilityId": "2c46316de67a1b25", "scanner": "scanner-primary", "fingerprint": "8ec94074ffe1ef1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4579adeab786537d", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/signals/backtest/bridge-eval-replay.js:3"}, "properties": {"repobilityId": "1022c7b5a111f50f", "scanner": "scanner-primary", "fingerprint": "4579adeab786537d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-719858c95223b841", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/dashboard/server.js:1012"}, "properties": {"repobilityId": "a22cabe1f7dee327", "scanner": "scanner-primary", "fingerprint": "719858c95223b841", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d865ecb071a3de3f", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/market-archive/archiver.js:7"}, "properties": {"repobilityId": "377bf7ad01bb3b03", "scanner": "scanner-primary", "fingerprint": "d865ecb071a3de3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-276350486db22727", "level": "note", "message": {"text": "Legacy-named symbol `logistic_v1` in services/strategy-engine/strategy_bridge.py:874"}, "properties": {"repobilityId": "11499475b40a0256", "scanner": "scanner-primary", "fingerprint": "276350486db22727", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-228761c9f95ea285", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 data-infrastructure/orchestration/airflow/dags/market_data_pipeline.py:75"}, "properties": {"repobilityId": "da414db166c9dc00", "scanner": "scanner-primary", "fingerprint": "228761c9f95ea285", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11133ca5d5864512", "level": "note", "message": {"text": "141 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7db897d22d0e1618", "scanner": "scanner-primary", "fingerprint": "11133ca5d5864512", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0a433753636422b9", "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": "024464fdfcd1c0a3", "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": "cbf41a0b84a4349a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "433afc8a2973f39b", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "f7b99323952c81dc", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "87aa75f9e69eb72c", "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": "9c26acd58b912428", "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": "d027dc4add8b8122", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "4a97c5d905b24f11", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "16a059df04e7e0d0", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a45de8c5a91b720e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "60e180e5d82fa1d1", "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": "435ac5cd0d7c9a89", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "2cba70373e8495a2", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a31f3d49ab121dfd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "a2ceee6ce279b5d8", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-a00c902df2e4486d", "level": "warning", "message": {"text": "Frontend route `/pricing` has no Link/navigate to it \u2014 clients/bot-dashboard/src/App.tsx"}, "properties": {"repobilityId": "378006bc89cb936f", "scanner": "scanner-primary", "fingerprint": "a00c902df2e4486d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-49d0a7ba627a2c29", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 clients/bot-dashboard/src/App.tsx"}, "properties": {"repobilityId": "f126cddba15165ab", "scanner": "scanner-primary", "fingerprint": "49d0a7ba627a2c29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1cc1482deaaeec2d", "level": "error", "message": {"text": "Flask mutation route `activate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:103"}, "properties": {"repobilityId": "fbe78584e08e704e", "scanner": "scanner-primary", "fingerprint": "1cc1482deaaeec2d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-f24e9f83ec4a405d", "level": "error", "message": {"text": "Flask mutation route `deactivate_strategy` without `@login_required` \u2014 services/strategy-engine/api_server.py:119"}, "properties": {"repobilityId": "e74e261397550801", "scanner": "scanner-primary", "fingerprint": "f24e9f83ec4a405d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-abd015c4054d628f", "level": "error", "message": {"text": "Flask mutation route `update_strategy_parameters` without `@login_required` \u2014 services/strategy-engine/api_server.py:135"}, "properties": {"repobilityId": "4f4a0947d5f57be3", "scanner": "scanner-primary", "fingerprint": "abd015c4054d628f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-77555570e35b5401", "level": "error", "message": {"text": "Flask mutation route `generate_signals` without `@login_required` \u2014 services/strategy-engine/api_server.py:155"}, "properties": {"repobilityId": "5d3156c951ab4795", "scanner": "scanner-primary", "fingerprint": "77555570e35b5401", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-4891a981e22cfb04", "level": "error", "message": {"text": "Flask mutation route `import_configuration` without `@login_required` \u2014 services/strategy-engine/api_server.py:271"}, "properties": {"repobilityId": "642f423db0cdf7ac", "scanner": "scanner-primary", "fingerprint": "4891a981e22cfb04", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 271}}}]}, {"ruleId": "scanner-5dc1a2154c74ce09", "level": "error", "message": {"text": "Flask mutation route `update_market_data` without `@login_required` \u2014 services/strategy-engine/api_server.py:290"}, "properties": {"repobilityId": "e538e4a19adc7436", "scanner": "scanner-primary", "fingerprint": "5dc1a2154c74ce09", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 290}}}]}, {"ruleId": "scanner-ff9ed3c7cc1e0d87", "level": "error", "message": {"text": "Flask mutation route `generate_ensemble_signal` without `@login_required` \u2014 services/strategy-engine/api_server.py:359"}, "properties": {"repobilityId": "f7f55adfa025ce31", "scanner": "scanner-primary", "fingerprint": "ff9ed3c7cc1e0d87", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 359}}}]}, {"ruleId": "scanner-727a92c64e366b2b", "level": "error", "message": {"text": "Flask mutation route `update_strategy_weight` without `@login_required` \u2014 services/strategy-engine/api_server.py:452"}, "properties": {"repobilityId": "35bae22739008cc3", "scanner": "scanner-primary", "fingerprint": "727a92c64e366b2b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 452}}}]}, {"ruleId": "scanner-9532de70469ed2d4", "level": "error", "message": {"text": "Flask mutation route `update_ensemble_performance` without `@login_required` \u2014 services/strategy-engine/api_server.py:474"}, "properties": {"repobilityId": "9406e6809b57696c", "scanner": "scanner-primary", "fingerprint": "9532de70469ed2d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/api_server.py"}, "region": {"startLine": 474}}}]}, {"ruleId": "scanner-baf6cadc7afa327a", "level": "error", "message": {"text": "FastAPI POST `create_checkout` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:87"}, "properties": {"repobilityId": "dbff7f0fdb8a96c1", "scanner": "scanner-primary", "fingerprint": "baf6cadc7afa327a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/stripe_billing.py"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-b650e5ba0963d7a3", "level": "error", "message": {"text": "FastAPI POST `create_portal_session` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:126"}, "properties": {"repobilityId": "9035fae9505489dc", "scanner": "scanner-primary", "fingerprint": "b650e5ba0963d7a3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/stripe_billing.py"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-c0e2d473c2701c1e", "level": "error", "message": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 services/strategy-engine/stripe_billing.py:166"}, "properties": {"repobilityId": "210a8f60d374b3e7", "scanner": "scanner-primary", "fingerprint": "c0e2d473c2701c1e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/stripe_billing.py"}, "region": {"startLine": 166}}}]}, {"ruleId": "scanner-289743ab3f188b96", "level": "error", "message": {"text": "FastAPI POST `get_ensemble_signal` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:309"}, "properties": {"repobilityId": "a2a5d04562b1a1dc", "scanner": "scanner-primary", "fingerprint": "289743ab3f188b96", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 309}}}]}, {"ruleId": "scanner-26156e0cd3ab9664", "level": "error", "message": {"text": "FastAPI POST `ml_regime` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:486"}, "properties": {"repobilityId": "7accd75dc5ff111a", "scanner": "scanner-primary", "fingerprint": "26156e0cd3ab9664", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-19bc34224b85a70f", "level": "error", "message": {"text": "FastAPI POST `ml_features` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:597"}, "properties": {"repobilityId": "a9bb1feff3c2c372", "scanner": "scanner-primary", "fingerprint": "19bc34224b85a70f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 597}}}]}, {"ruleId": "scanner-e3ee162a8f5b6470", "level": "error", "message": {"text": "FastAPI POST `ml_score` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:830"}, "properties": {"repobilityId": "0618832c88cf0993", "scanner": "scanner-primary", "fingerprint": "e3ee162a8f5b6470", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 830}}}]}, {"ruleId": "scanner-7ce2e910165f89d5", "level": "error", "message": {"text": "FastAPI POST `ml_fit` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:880"}, "properties": {"repobilityId": "f5813408a181ee72", "scanner": "scanner-primary", "fingerprint": "7ce2e910165f89d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 880}}}]}, {"ruleId": "scanner-7a6a78fe71837456", "level": "error", "message": {"text": "FastAPI POST `analyze_pair` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:932"}, "properties": {"repobilityId": "28348c8dfb347040", "scanner": "scanner-primary", "fingerprint": "7a6a78fe71837456", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 932}}}]}, {"ruleId": "scanner-462fa9205d9a57a4", "level": "error", "message": {"text": "FastAPI POST `ai_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:975"}, "properties": {"repobilityId": "435660c28c05c196", "scanner": "scanner-primary", "fingerprint": "462fa9205d9a57a4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 975}}}]}, {"ruleId": "scanner-bcca697a742d070e", "level": "error", "message": {"text": "FastAPI POST `agent_evaluate` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1011"}, "properties": {"repobilityId": "96e2d9f2180219cc", "scanner": "scanner-primary", "fingerprint": "bcca697a742d070e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1011}}}]}, {"ruleId": "scanner-62a71f57967d6ad8", "level": "error", "message": {"text": "FastAPI POST `agent_trade_outcome` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1072"}, "properties": {"repobilityId": "e2bf690e2d96f369", "scanner": "scanner-primary", "fingerprint": "62a71f57967d6ad8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1072}}}]}, {"ruleId": "scanner-544c0017bd6ad7b6", "level": "error", "message": {"text": "FastAPI POST `agent_execution` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1118"}, "properties": {"repobilityId": "1bc72dd1fa35ec84", "scanner": "scanner-primary", "fingerprint": "544c0017bd6ad7b6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1118}}}]}, {"ruleId": "scanner-aca5ca3b74c2d098", "level": "error", "message": {"text": "FastAPI POST `agent_kill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1223"}, "properties": {"repobilityId": "dba4b186c9c12556", "scanner": "scanner-primary", "fingerprint": "aca5ca3b74c2d098", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1223}}}]}, {"ruleId": "scanner-e1b20f6a5a97bff9", "level": "error", "message": {"text": "FastAPI POST `agent_resume` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1229"}, "properties": {"repobilityId": "19fa798a0aed106a", "scanner": "scanner-primary", "fingerprint": "e1b20f6a5a97bff9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1229}}}]}, {"ruleId": "scanner-0f57d567100d8039", "level": "error", "message": {"text": "FastAPI POST `bandit_select` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1282"}, "properties": {"repobilityId": "7b0a563dad1852a2", "scanner": "scanner-primary", "fingerprint": "0f57d567100d8039", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1282}}}]}, {"ruleId": "scanner-713eb3ec0f3bf530", "level": "error", "message": {"text": "FastAPI POST `bandit_context_detail` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1304"}, "properties": {"repobilityId": "4fc86fc26040f3f5", "scanner": "scanner-primary", "fingerprint": "713eb3ec0f3bf530", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1304}}}]}, {"ruleId": "scanner-86da6825536759da", "level": "error", "message": {"text": "FastAPI POST `bandit_sync_db` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1332"}, "properties": {"repobilityId": "d7b35d496e7613e3", "scanner": "scanner-primary", "fingerprint": "86da6825536759da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1332}}}]}, {"ruleId": "scanner-68931673837c4c47", "level": "error", "message": {"text": "FastAPI POST `bandit_train` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1338"}, "properties": {"repobilityId": "68a40047bb12af74", "scanner": "scanner-primary", "fingerprint": "68931673837c4c47", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1338}}}]}, {"ruleId": "scanner-fec6626d3d226cf1", "level": "error", "message": {"text": "FastAPI POST `agent_backfill` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1389"}, "properties": {"repobilityId": "46f859edf573de8f", "scanner": "scanner-primary", "fingerprint": "fec6626d3d226cf1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1389}}}]}, {"ruleId": "scanner-d5a025c5aaed4870", "level": "error", "message": {"text": "FastAPI POST `agent_backfill_json` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1408"}, "properties": {"repobilityId": "4548bc033464dc04", "scanner": "scanner-primary", "fingerprint": "d5a025c5aaed4870", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1408}}}]}, {"ruleId": "scanner-9b2809ef4b495320", "level": "error", "message": {"text": "FastAPI POST `agent_daily_training` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1422"}, "properties": {"repobilityId": "7572ea89ac3092b2", "scanner": "scanner-primary", "fingerprint": "9b2809ef4b495320", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1422}}}]}, {"ruleId": "scanner-45a58a7a4193e5bc", "level": "error", "message": {"text": "FastAPI POST `update_rankings` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1475"}, "properties": {"repobilityId": "ba5835eec24aeb13", "scanner": "scanner-primary", "fingerprint": "45a58a7a4193e5bc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1475}}}]}, {"ruleId": "scanner-f2e166fd3a3b0b6e", "level": "error", "message": {"text": "FastAPI POST `check_portfolio_risk` without auth dependency \u2014 services/strategy-engine/strategy_bridge.py:1535"}, "properties": {"repobilityId": "9342d772a209f870", "scanner": "scanner-primary", "fingerprint": "f2e166fd3a3b0b6e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/strategy_bridge.py"}, "region": {"startLine": 1535}}}]}, {"ruleId": "scanner-c6cbea75631434d5", "level": "error", "message": {"text": "FastAPI POST `evaluate_signal` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:93"}, "properties": {"repobilityId": "318c093efe96d620", "scanner": "scanner-primary", "fingerprint": "c6cbea75631434d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/public_api_routes.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-dbcfebcd88c8bbeb", "level": "error", "message": {"text": "FastAPI POST `create_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:194"}, "properties": {"repobilityId": "9fb8a8306fd0d813", "scanner": "scanner-primary", "fingerprint": "dbcfebcd88c8bbeb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/public_api_routes.py"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-af2bb7030e78ad97", "level": "error", "message": {"text": "FastAPI DELETE `revoke_key` without auth dependency \u2014 services/strategy-engine/public_api_routes.py:227"}, "properties": {"repobilityId": "53d1ae1b575f5c0a", "scanner": "scanner-primary", "fingerprint": "af2bb7030e78ad97", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/strategy-engine/public_api_routes.py"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-4daea69794cef46e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3010/api/dashboard (tests/legacy/test-dashboard-data.js:12)"}, "properties": {"repobilityId": "b87255cffaf0adee", "scanner": "scanner-primary", "fingerprint": "4daea69794cef46e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c07f6f2ec813ccd2", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8080/api/trading/status (tests/legacy/test-dashboard-data.js:29)"}, "properties": {"repobilityId": "3140e6f315a6dd49", "scanner": "scanner-primary", "fingerprint": "c07f6f2ec813ccd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bce85447c8ce2e35", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8080/api/strategies (tests/legacy/test-dashboard-data.js:42)"}, "properties": {"repobilityId": "9adff9200f2f71ac", "scanner": "scanner-primary", "fingerprint": "bce85447c8ce2e35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfea60af62037129", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8080/api/risk/portfolio (tests/legacy/test-dashboard-data.js:55)"}, "properties": {"repobilityId": "31a7974490e83676", "scanner": "scanner-primary", "fingerprint": "bfea60af62037129", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96526208373def8c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-exports-fix.js:19)"}, "properties": {"repobilityId": "d8f71a0141b1a87e", "scanner": "scanner-primary", "fingerprint": "96526208373def8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fe17e579dbbed9df", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/index.js (tests/legacy/test-exports-fix.js:42)"}, "properties": {"repobilityId": "1aeb128c3de8044f", "scanner": "scanner-primary", "fingerprint": "fe17e579dbbed9df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b0153202d18591bf", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/strategies/performance (tests/legacy/test-frontend-fixes.js:61)"}, "properties": {"repobilityId": "cd82d92763e8b1cc", "scanner": "scanner-primary", "fingerprint": "b0153202d18591bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a9533e5a828c0111", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-frontend-fixes.js:85)"}, "properties": {"repobilityId": "a9fb51ffa7b49785", "scanner": "scanner-primary", "fingerprint": "a9533e5a828c0111", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-09a3bfb1c5206470", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-frontend-fixes.js:102)"}, "properties": {"repobilityId": "8f70f089ab5c772d", "scanner": "scanner-primary", "fingerprint": "09a3bfb1c5206470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-938627ffac0ebdeb", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000 (tests/legacy/test-frontend-fixes.js:118)"}, "properties": {"repobilityId": "704aaaeec1b75185", "scanner": "scanner-primary", "fingerprint": "938627ffac0ebdeb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bbed1471db0592a2", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:42)"}, "properties": {"repobilityId": "f2dede2cc14e7e8d", "scanner": "scanner-primary", "fingerprint": "bbed1471db0592a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d9f9152f40a15bcd", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/transactions/demo-user-123?limit=3 (tests/legacy/test-banking-integration.js:50)"}, "properties": {"repobilityId": "604d8b658e8a5310", "scanner": "scanner-primary", "fingerprint": "d9f9152f40a15bcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9978680ce48bbd8c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/banking/countries (tests/legacy/test-banking-integration.js:65)"}, "properties": {"repobilityId": "ba1c4c0eb14d75ed", "scanner": "scanner-primary", "fingerprint": "9978680ce48bbd8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-06eb43bcc77fe110", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/banking/exchange-rates (tests/legacy/test-banking-integration.js:72)"}, "properties": {"repobilityId": "a22cdb995cd04fbc", "scanner": "scanner-primary", "fingerprint": "06eb43bcc77fe110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4362ce8415546ed4", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/balance/demo-user-123 (tests/legacy/test-banking-integration.js:120)"}, "properties": {"repobilityId": "bf1edd374cd196c9", "scanner": "scanner-primary", "fingerprint": "4362ce8415546ed4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-889b324fa331bd32", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/banking/limits/demo-user-123 (tests/legacy/test-banking-integration.js:127)"}, "properties": {"repobilityId": "a38dfcf261b5fa50", "scanner": "scanner-primary", "fingerprint": "889b324fa331bd32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3be9a488170e8df2", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-real-market-data.js:17)"}, "properties": {"repobilityId": "c1dee7b175d3da89", "scanner": "scanner-primary", "fingerprint": "3be9a488170e8df2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f389407432926c4d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-real-market-data.js:25)"}, "properties": {"repobilityId": "bc08d211d1cb6a3b", "scanner": "scanner-primary", "fingerprint": "f389407432926c4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f964f9ded71cbab7", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices/AAPL (tests/legacy/test-real-market-data.js:38)"}, "properties": {"repobilityId": "eb048ced79fd81eb", "scanner": "scanner-primary", "fingerprint": "f964f9ded71cbab7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1375381c6e348506", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/health (tests/legacy/test-real-market-data.js:49)"}, "properties": {"repobilityId": "260abbabdebbe4be", "scanner": "scanner-primary", "fingerprint": "1375381c6e348506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4fd2e2d8952a895c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/automation/status (tests/legacy/test-real-market-data.js:52)"}, "properties": {"repobilityId": "1377f19b13afa2ed", "scanner": "scanner-primary", "fingerprint": "4fd2e2d8952a895c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f8f6111a09f20a58", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/health (tests/legacy/test-enhanced-frontend.js:120)"}, "properties": {"repobilityId": "889261249a84516a", "scanner": "scanner-primary", "fingerprint": "f8f6111a09f20a58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f27f8431279968fd", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (tests/legacy/test-enhanced-frontend.js:149)"}, "properties": {"repobilityId": "70532e3bd8f5ec76", "scanner": "scanner-primary", "fingerprint": "f27f8431279968fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-91674843ca06a3db", "level": "error", "message": {"text": "Dangling fetch: GET https://finnhub.io/api/v1/quote (docs/archive/legacy-dir/enhanced-market-data-server.js:63)"}, "properties": {"repobilityId": "e850b95daac9fa4c", "scanner": "scanner-primary", "fingerprint": "91674843ca06a3db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cc99ea51a9f1ac99", "level": "error", "message": {"text": "Dangling fetch: GET https://www.alphavantage.co/query (docs/archive/legacy-dir/enhanced-market-data-server.js:246)"}, "properties": {"repobilityId": "18df8072db3d13cc", "scanner": "scanner-primary", "fingerprint": "cc99ea51a9f1ac99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d6eb7d3571fa351b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/account (docs/archive/legacy-dir/trading-server.js:63)"}, "properties": {"repobilityId": "7d46066915615740", "scanner": "scanner-primary", "fingerprint": "d6eb7d3571fa351b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95d2dca5bafb5c41", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/positions (docs/archive/legacy-dir/trading-server.js:74)"}, "properties": {"repobilityId": "6a9417e699bfb018", "scanner": "scanner-primary", "fingerprint": "95d2dca5bafb5c41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40a11c742adb6194", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:85)"}, "properties": {"repobilityId": "0448ea1ff99ff941", "scanner": "scanner-primary", "fingerprint": "40a11c742adb6194", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53b364b946a47041", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (docs/archive/legacy-dir/trading-server.js:96)"}, "properties": {"repobilityId": "81347e7231b2441f", "scanner": "scanner-primary", "fingerprint": "53b364b946a47041", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ab249528043695b", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3002/orders (docs/archive/legacy-dir/trading-server.js:107)"}, "properties": {"repobilityId": "6e0f95965b6691fa", "scanner": "scanner-primary", "fingerprint": "2ab249528043695b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40cb769574e1cd44", "level": "error", "message": {"text": "Dangling fetch: DELETE http://localhost:3002/orders/${req.params.orderId} (docs/archive/legacy-dir/trading-server.js:129)"}, "properties": {"repobilityId": "c8fc95b8731f7925", "scanner": "scanner-primary", "fingerprint": "40cb769574e1cd44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31893f23d6ec1a43", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/stock-bot/unified-trading-bot.js:121)"}, "properties": {"repobilityId": "eb7661fc3e87eda8", "scanner": "scanner-primary", "fingerprint": "31893f23d6ec1a43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-18cae5c3cd89d970", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5941)"}, "properties": {"repobilityId": "b959552857161486", "scanner": "scanner-primary", "fingerprint": "18cae5c3cd89d970", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-67992d03ecb8bc42", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (deploy/stock-bot/unified-trading-bot.js:5955)"}, "properties": {"repobilityId": "9a0119bfa542a471", "scanner": "scanner-primary", "fingerprint": "67992d03ecb8bc42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-699057070dd7a27f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (deploy/stock-bot/unified-trading-bot.js:5981)"}, "properties": {"repobilityId": "d0f9f6bf6ed0dc59", "scanner": "scanner-primary", "fingerprint": "699057070dd7a27f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cfa96f4587b57d75", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/forex-bot/unified-forex-bot.js:345)"}, "properties": {"repobilityId": "8c62aecf8851bf2c", "scanner": "scanner-primary", "fingerprint": "cfa96f4587b57d75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-accafcee4e7b3a6e", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (deploy/crypto-bot/unified-crypto-bot.js:4718)"}, "properties": {"repobilityId": "b32bd9f1ff600026", "scanner": "scanner-primary", "fingerprint": "accafcee4e7b3a6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-52b37f72183f40e7", "level": "error", "message": {"text": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (deploy/crypto-bot/unified-crypto-bot.js:5001)"}, "properties": {"repobilityId": "aa1fc328db53e402", "scanner": "scanner-primary", "fingerprint": "52b37f72183f40e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c833e2b3f6f20243", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/market-prices (web-app/src/components/TradingInterface.js:38)"}, "properties": {"repobilityId": "71e3e7ee21fac43a", "scanner": "scanner-primary", "fingerprint": "c833e2b3f6f20243", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30a6c5923508a868", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/account (web-app/src/components/TradingInterface.js:48)"}, "properties": {"repobilityId": "667be12a04c93853", "scanner": "scanner-primary", "fingerprint": "30a6c5923508a868", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d6f99059c6b3c26", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/positions (web-app/src/components/TradingInterface.js:58)"}, "properties": {"repobilityId": "1935f056c638a218", "scanner": "scanner-primary", "fingerprint": "1d6f99059c6b3c26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de2d57cfcf1c6bce", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/orders (web-app/src/components/TradingInterface.js:68)"}, "properties": {"repobilityId": "b8b8ee5aa23215f2", "scanner": "scanner-primary", "fingerprint": "de2d57cfcf1c6bce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eaa4fd7d7453dad1", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3002/orders (web-app/src/components/TradingInterface.js:99)"}, "properties": {"repobilityId": "086e2f0556aef216", "scanner": "scanner-primary", "fingerprint": "eaa4fd7d7453dad1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-257b7bb235753bae", "level": "error", "message": {"text": "Dangling fetch: DELETE http://localhost:3002/orders/${orderId} (web-app/src/components/TradingInterface.js:128)"}, "properties": {"repobilityId": "2860de7d8b2f1cd5", "scanner": "scanner-primary", "fingerprint": "257b7bb235753bae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f4b995bea9b3c7b", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-forex-bot.js:345)"}, "properties": {"repobilityId": "bd733b453addd397", "scanner": "scanner-primary", "fingerprint": "7f4b995bea9b3c7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2ea480bd10fdd360", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-trading-bot.js:121)"}, "properties": {"repobilityId": "5cee5962f2b0ad04", "scanner": "scanner-primary", "fingerprint": "2ea480bd10fdd360", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e7c91bc72d8ead18", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5941)"}, "properties": {"repobilityId": "b7831fb4188d5f7a", "scanner": "scanner-primary", "fingerprint": "e7c91bc72d8ead18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5bd48371811f097e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json (clients/bot-dashboard/unified-trading-bot.js:5955)"}, "properties": {"repobilityId": "180d15e1f7271721", "scanner": "scanner-primary", "fingerprint": "5bd48371811f097e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-433a59a6b6ccd11d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (clients/bot-dashboard/unified-trading-bot.js:5981)"}, "properties": {"repobilityId": "76331d98bd0c7e73", "scanner": "scanner-primary", "fingerprint": "433a59a6b6ccd11d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bbb661e069c4c73c", "level": "error", "message": {"text": "Dangling fetch: POST https://backboard.railway.app/graphql/v2 (clients/bot-dashboard/unified-crypto-bot.js:4718)"}, "properties": {"repobilityId": "5c406098712e4dfa", "scanner": "scanner-primary", "fingerprint": "bbb661e069c4c73c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-385cac577ac71a9f", "level": "error", "message": {"text": "Dangling fetch: GET https://futures.kraken.com/derivatives/api/v3/tickers (clients/bot-dashboard/unified-crypto-bot.js:5001)"}, "properties": {"repobilityId": "d2cbce7331cf052a", "scanner": "scanner-primary", "fingerprint": "385cac577ac71a9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7fb8b28c738fdd7c", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3003/api/broker/test-alpaca (services/dashboard/dashboard-api-server.js:706)"}, "properties": {"repobilityId": "3a21e854b1ed66e6", "scanner": "scanner-primary", "fingerprint": "7fb8b28c738fdd7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cdbccbe124088fd", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3003/api/broker/connect-alpaca (services/dashboard/dashboard-api-server.js:720)"}, "properties": {"repobilityId": "25f08f74c2a23ea2", "scanner": "scanner-primary", "fingerprint": "7cdbccbe124088fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c22f0e42e3a6c11", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/broker/alpaca/account (services/dashboard/dashboard-api-server.js:734)"}, "properties": {"repobilityId": "730e5831b789e8fb", "scanner": "scanner-primary", "fingerprint": "2c22f0e42e3a6c11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f44cac5bdab466ec", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/broker/test-connection/alpaca (services/dashboard/dashboard-api-server.js:744)"}, "properties": {"repobilityId": "0d6dff3ebb89e22c", "scanner": "scanner-primary", "fingerprint": "f44cac5bdab466ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-753d8011cc1b8459", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/risk/portfolio (services/dashboard/server.js:297)"}, "properties": {"repobilityId": "d589e07a25d107ee", "scanner": "scanner-primary", "fingerprint": "753d8011cc1b8459", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2b18c59bacf9d58", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/risk/config (services/dashboard/server.js:317)"}, "properties": {"repobilityId": "a0fd8f5bb2e1eb0a", "scanner": "scanner-primary", "fingerprint": "c2b18c59bacf9d58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe239d07db88d761", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3003/api/risk/emergency-stop (services/dashboard/server.js:337)"}, "properties": {"repobilityId": "edd9316dcb9ec589", "scanner": "scanner-primary", "fingerprint": "fe239d07db88d761", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94ab1fe98aecde11", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/strategies (services/dashboard/server.js:355)"}, "properties": {"repobilityId": "e5e6b9e95dd5619f", "scanner": "scanner-primary", "fingerprint": "94ab1fe98aecde11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-619b6648882d648e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/performance/overall (services/dashboard/server.js:387)"}, "properties": {"repobilityId": "3af0da922f56f1a4", "scanner": "scanner-primary", "fingerprint": "619b6648882d648e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05a6880467419ed8", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/signals/recent?limit=20 (services/dashboard/server.js:407)"}, "properties": {"repobilityId": "a60be18b97bcc60b", "scanner": "scanner-primary", "fingerprint": "05a6880467419ed8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88fba8155b895ca7", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/activate (services/dashboard/server.js:438)"}, "properties": {"repobilityId": "6b68ed5b0b1bc5f0", "scanner": "scanner-primary", "fingerprint": "88fba8155b895ca7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56523f8fcf0493e9", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/deactivate (services/dashboard/server.js:455)"}, "properties": {"repobilityId": "c5f3f43d432f406a", "scanner": "scanner-primary", "fingerprint": "56523f8fcf0493e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba0ebe268e73984c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/risk-report (services/dashboard/server.js:472)"}, "properties": {"repobilityId": "11669cf8729f6294", "scanner": "scanner-primary", "fingerprint": "ba0ebe268e73984c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4ec089d1c895ab8", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/var (services/dashboard/server.js:503)"}, "properties": {"repobilityId": "6220b5afb1ad0179", "scanner": "scanner-primary", "fingerprint": "a4ec089d1c895ab8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37e299d302c6078c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/ratios (services/dashboard/server.js:522)"}, "properties": {"repobilityId": "2fbb877e018325af", "scanner": "scanner-primary", "fingerprint": "37e299d302c6078c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9290d6850bfb31f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3003/api/analytics/alerts (services/dashboard/server.js:543)"}, "properties": {"repobilityId": "5415f2043b7f897c", "scanner": "scanner-primary", "fingerprint": "a9290d6850bfb31f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07f62a1345c80542", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3005/api/trading/status (services/dashboard/server.js:667)"}, "properties": {"repobilityId": "0a55df16a9d6763d", "scanner": "scanner-primary", "fingerprint": "07f62a1345c80542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aecef9df6c20369", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/start (services/dashboard/server.js:689)"}, "properties": {"repobilityId": "b750ed080a03ee51", "scanner": "scanner-primary", "fingerprint": "7aecef9df6c20369", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d467ffa55156e497", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/stop (services/dashboard/server.js:705)"}, "properties": {"repobilityId": "ac511a7e606b8669", "scanner": "scanner-primary", "fingerprint": "d467ffa55156e497", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c314c8f49f468e41", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3005/api/trading/positions (services/dashboard/server.js:721)"}, "properties": {"repobilityId": "e041c9be8d36180e", "scanner": "scanner-primary", "fingerprint": "c314c8f49f468e41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b6dcbaca09120ec", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3005/api/trading/manual-order (services/dashboard/server.js:751)"}, "properties": {"repobilityId": "64b1b2bb4ad4e8d3", "scanner": "scanner-primary", "fingerprint": "1b6dcbaca09120ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-558994b3b44e3ac7", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3006/api/gdpr/status (services/dashboard/server.js:770)"}, "properties": {"repobilityId": "c5258d252c362d59", "scanner": "scanner-primary", "fingerprint": "558994b3b44e3ac7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e25b191e7cd7152", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3007/api/aml/dashboard (services/dashboard/server.js:792)"}, "properties": {"repobilityId": "1c89d9254c9a85df", "scanner": "scanner-primary", "fingerprint": "0e25b191e7cd7152", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73a4f65df17c6378", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3008/api/reports (services/dashboard/server.js:823)"}, "properties": {"repobilityId": "8446fc904a9f5004", "scanner": "scanner-primary", "fingerprint": "73a4f65df17c6378", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-baeb2920d29bd620", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3008/api/reports/generate (services/dashboard/server.js:850)"}, "properties": {"repobilityId": "0c0020e297574e9e", "scanner": "scanner-primary", "fingerprint": "baeb2920d29bd620", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39204b178712a32a", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3004/api/strategies/${strategyName} (services/dashboard/server.js:963)"}, "properties": {"repobilityId": "5406b0616b239a95", "scanner": "scanner-primary", "fingerprint": "39204b178712a32a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0890a5f91dd80446", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/configure (services/dashboard/server.js:1012)"}, "properties": {"repobilityId": "848888dc28c5ef17", "scanner": "scanner-primary", "fingerprint": "0890a5f91dd80446", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ed1d9225d527fd6", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3004/api/strategies/${strategyName}/test (services/dashboard/server.js:1040)"}, "properties": {"repobilityId": "37f24673d8b4cafc", "scanner": "scanner-primary", "fingerprint": "7ed1d9225d527fd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-543849efa65e2774", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies"}, "properties": {"repobilityId": "7be3f86f002749d1", "scanner": "scanner-primary", "fingerprint": "543849efa65e2774", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0995275d662765e3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>"}, "properties": {"repobilityId": "d05bd0b3e733a477", "scanner": "scanner-primary", "fingerprint": "0995275d662765e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9304fc4ea37e39ea", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/activate"}, "properties": {"repobilityId": "e89376ed502ccbdb", "scanner": "scanner-primary", "fingerprint": "9304fc4ea37e39ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e19032c825ee946", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/deactivate"}, "properties": {"repobilityId": "ec4140c0eb0115fd", "scanner": "scanner-primary", "fingerprint": "5e19032c825ee946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68cca75c51e7cbef", "level": "note", "message": {"text": "Unused endpoint: ANY /api/strategies/<strategy_name>/parameters"}, "properties": {"repobilityId": "91a7278e66dd856e", "scanner": "scanner-primary", "fingerprint": "68cca75c51e7cbef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8e2a1160c4e2f42", "level": "note", "message": {"text": "Unused endpoint: ANY /api/signals/generate"}, "properties": {"repobilityId": "c56d938b2924405a", "scanner": "scanner-primary", "fingerprint": "d8e2a1160c4e2f42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f01c74a912aee5cc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/signals/recent"}, "properties": {"repobilityId": "3a046957ab4e3567", "scanner": "scanner-primary", "fingerprint": "f01c74a912aee5cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88cb8dad197293f2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/performance/overall"}, "properties": {"repobilityId": "bd0c5570f3453b89", "scanner": "scanner-primary", "fingerprint": "88cb8dad197293f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8944a2233ff2d5ae", "level": "note", "message": {"text": "Unused endpoint: ANY /api/performance/<strategy_name>"}, "properties": {"repobilityId": "5694a6a1cede6064", "scanner": "scanner-primary", "fingerprint": "8944a2233ff2d5ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1f7979b3e91efdc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/config/export"}, "properties": {"repobilityId": "0cb30726b8336180", "scanner": "scanner-primary", "fingerprint": "a1f7979b3e91efdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c40ae013f7eaf3d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/config/import"}, "properties": {"repobilityId": "d3b0feb2228182f8", "scanner": "scanner-primary", "fingerprint": "6c40ae013f7eaf3d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f1dd1c45cb07b09", "level": "note", "message": {"text": "Unused endpoint: ANY /api/market-data/update"}, "properties": {"repobilityId": "56b7c661374d4d1b", "scanner": "scanner-primary", "fingerprint": "0f1dd1c45cb07b09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-194fcb81d960865d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/signals/mock"}, "properties": {"repobilityId": "468fd5a08d7e5d04", "scanner": "scanner-primary", "fingerprint": "194fcb81d960865d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-021bf9e9c5c3af96", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/signal"}, "properties": {"repobilityId": "7b772951b3c7f8e7", "scanner": "scanner-primary", "fingerprint": "021bf9e9c5c3af96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0d359f2a455272d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/summary"}, "properties": {"repobilityId": "b36a15f54485ab8d", "scanner": "scanner-primary", "fingerprint": "b0d359f2a455272d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d7e13f088675a18", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/analytics"}, "properties": {"repobilityId": "fe65e3c9afe805f5", "scanner": "scanner-primary", "fingerprint": "3d7e13f088675a18", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d7fb4e6d6f3f4f4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/weights"}, "properties": {"repobilityId": "631f1cd21c246b51", "scanner": "scanner-primary", "fingerprint": "3d7fb4e6d6f3f4f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cec97a50d07e2afe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/weights/<strategy_name>"}, "properties": {"repobilityId": "c0fcd92fa8d61744", "scanner": "scanner-primary", "fingerprint": "cec97a50d07e2afe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46004ac3d7b5a5eb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ensemble/performance/update"}, "properties": {"repobilityId": "4cff71884f22a60f", "scanner": "scanner-primary", "fingerprint": "46004ac3d7b5a5eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6385cd0e163a390f", "level": "note", "message": {"text": "Unused endpoint: POST /checkout"}, "properties": {"repobilityId": "aa0b0bea4439a15a", "scanner": "scanner-primary", "fingerprint": "6385cd0e163a390f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ec7e423e24778e4", "level": "note", "message": {"text": "Unused endpoint: POST /portal"}, "properties": {"repobilityId": "428c0e516bb2bea6", "scanner": "scanner-primary", "fingerprint": "1ec7e423e24778e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ae38010c60493f1", "level": "note", "message": {"text": "Unused endpoint: POST /webhook"}, "properties": {"repobilityId": "76b6dfe7bd3532a1", "scanner": "scanner-primary", "fingerprint": "0ae38010c60493f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-067fd482fe4bf558", "level": "note", "message": {"text": "Unused endpoint: POST /signal"}, "properties": {"repobilityId": "292d1755267d5459", "scanner": "scanner-primary", "fingerprint": "067fd482fe4bf558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b8dca387f35258b", "level": "note", "message": {"text": "Unused endpoint: POST /ml/regime"}, "properties": {"repobilityId": "59a47a04ab688f5a", "scanner": "scanner-primary", "fingerprint": "0b8dca387f35258b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e11c00e0a2e58b9c", "level": "note", "message": {"text": "Unused endpoint: POST /ml/features"}, "properties": {"repobilityId": "762de8e28af789d3", "scanner": "scanner-primary", "fingerprint": "e11c00e0a2e58b9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a28b5fa49115b9a", "level": "note", "message": {"text": "Unused endpoint: POST /ml/score"}, "properties": {"repobilityId": "8e20e82f7352a14d", "scanner": "scanner-primary", "fingerprint": "2a28b5fa49115b9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78bf009e541cd3cc", "level": "note", "message": {"text": "Unused endpoint: POST /ml/fit"}, "properties": {"repobilityId": "85c91963da87041e", "scanner": "scanner-primary", "fingerprint": "78bf009e541cd3cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6ca836df2848138", "level": "note", "message": {"text": "Unused endpoint: POST /pairs/analyze"}, "properties": {"repobilityId": "1c1f04fe58c5f4d8", "scanner": "scanner-primary", "fingerprint": "a6ca836df2848138", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ead7c11b44269e7c", "level": "note", "message": {"text": "Unused endpoint: GET /pairs/recommended"}, "properties": {"repobilityId": "684ef13f4edf92a6", "scanner": "scanner-primary", "fingerprint": "ead7c11b44269e7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-984aec8f0b7ffe16", "level": "note", "message": {"text": "Unused endpoint: POST /ai/evaluate"}, "properties": {"repobilityId": "7271cbd0ce0f8660", "scanner": "scanner-primary", "fingerprint": "984aec8f0b7ffe16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-945bf36870cb3302", "level": "note", "message": {"text": "Unused endpoint: GET /ai/stats"}, "properties": {"repobilityId": "5afcd5a7f6d8c459", "scanner": "scanner-primary", "fingerprint": "945bf36870cb3302", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8202fdee778748e", "level": "note", "message": {"text": "Unused endpoint: POST /agent/evaluate"}, "properties": {"repobilityId": "19c14a12b1c7ccf5", "scanner": "scanner-primary", "fingerprint": "a8202fdee778748e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5bf4fb854a6fff0a", "level": "note", "message": {"text": "Unused endpoint: POST /agent/trade-outcome"}, "properties": {"repobilityId": "39d3cbe97abc12db", "scanner": "scanner-primary", "fingerprint": "5bf4fb854a6fff0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5cb048d28a4c6451", "level": "note", "message": {"text": "Unused endpoint: POST /agent/execution"}, "properties": {"repobilityId": "5112ecb475cbd54f", "scanner": "scanner-primary", "fingerprint": "5cb048d28a4c6451", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fd56107d5fcc12f", "level": "note", "message": {"text": "Unused endpoint: GET /agent/stats"}, "properties": {"repobilityId": "cf5b83dc964334b6", "scanner": "scanner-primary", "fingerprint": "1fd56107d5fcc12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bccbd6acc60b18f", "level": "note", "message": {"text": "Unused endpoint: GET /agent/debug-claude"}, "properties": {"repobilityId": "c302bbc3bf9e38bf", "scanner": "scanner-primary", "fingerprint": "6bccbd6acc60b18f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1298b35211181da1", "level": "note", "message": {"text": "Unused endpoint: POST /agent/kill"}, "properties": {"repobilityId": "7fa044a00dbf6b72", "scanner": "scanner-primary", "fingerprint": "1298b35211181da1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17a915c21bf67971", "level": "note", "message": {"text": "Unused endpoint: POST /agent/resume"}, "properties": {"repobilityId": "4acfcdaf4329cf10", "scanner": "scanner-primary", "fingerprint": "17a915c21bf67971", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-031029e823839ac3", "level": "note", "message": {"text": "Unused endpoint: GET /agent/sentiment/{symbol}"}, "properties": {"repobilityId": "f37d15e91f3f2779", "scanner": "scanner-primary", "fingerprint": "031029e823839ac3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f78a454e82c90cd", "level": "note", "message": {"text": "Unused endpoint: POST /agent/bandit/select"}, "properties": {"repobilityId": "64474717a74e69e3", "scanner": "scanner-primary", "fingerprint": "4f78a454e82c90cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19e2f334114b9475", "level": "note", "message": {"text": "Unused endpoint: POST /agent/bandit/context"}, "properties": {"repobilityId": "7128c84f959ee795", "scanner": "scanner-primary", "fingerprint": "19e2f334114b9475", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c18d0bf06ef6403", "level": "note", "message": {"text": "Unused endpoint: GET /agent/bandit/stats"}, "properties": {"repobilityId": "9ab31f38651546c1", "scanner": "scanner-primary", "fingerprint": "5c18d0bf06ef6403", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-111b4ff05ebe6bfb", "level": "note", "message": {"text": "Unused endpoint: POST /agent/bandit/sync"}, "properties": {"repobilityId": "44ec55d66ed21eda", "scanner": "scanner-primary", "fingerprint": "111b4ff05ebe6bfb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74e9e978b0a55bc4", "level": "note", "message": {"text": "Unused endpoint: POST /agent/bandit/train"}, "properties": {"repobilityId": "0455fe7fd7488cef", "scanner": "scanner-primary", "fingerprint": "74e9e978b0a55bc4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7208c2f79b534c15", "level": "note", "message": {"text": "Unused endpoint: POST /agent/backfill"}, "properties": {"repobilityId": "374b90febb3a6e57", "scanner": "scanner-primary", "fingerprint": "7208c2f79b534c15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41d7bdc78ed97be0", "level": "note", "message": {"text": "Unused endpoint: POST /agent/backfill/json"}, "properties": {"repobilityId": "5794a6f904d9fee2", "scanner": "scanner-primary", "fingerprint": "41d7bdc78ed97be0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-162128be1075023d", "level": "note", "message": {"text": "Unused endpoint: POST /agent/daily-training"}, "properties": {"repobilityId": "b924a9a2eaa9b223", "scanner": "scanner-primary", "fingerprint": "162128be1075023d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b4651773d92ccda", "level": "note", "message": {"text": "Unused endpoint: GET /agent/rankings"}, "properties": {"repobilityId": "c5cde915e5b27ca6", "scanner": "scanner-primary", "fingerprint": "5b4651773d92ccda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92c8f85d59deef54", "level": "note", "message": {"text": "Unused endpoint: POST /agent/rankings/update"}, "properties": {"repobilityId": "77bb1cd32be98309", "scanner": "scanner-primary", "fingerprint": "92c8f85d59deef54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee64460a523ccecc", "level": "note", "message": {"text": "Unused endpoint: GET /agent/decisions"}, "properties": {"repobilityId": "bcfd2933fd2f75bf", "scanner": "scanner-primary", "fingerprint": "ee64460a523ccecc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}