{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"benchmark::main (cyclomatic 48): benchmark::main has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/benchmark.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d4d2121c8ce391259faa341fa68967e001b59022e5b6858692422909d1674f"}},{"ruleId":"D1","level":"warning","message":{"text":"architecture_view::render_agent_graph (cyclomatic 46): architecture_view::render_agent_graph has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceb3bae9d183fecd43fc15dc2edb85a6bcf15a13596f1a6837ef53464c0d3554"}},{"ruleId":"D1","level":"warning","message":{"text":"dashboard::render_dashboard (cyclomatic 43): dashboard::render_dashboard has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"275617b00fc4338680a4743613c7bbae660f032456dc0ec85f7eedf1b5e525d0"}},{"ruleId":"D1","level":"warning","message":{"text":"derivative_encoding::encode_multi_feature (cyclomatic 36): derivative_encoding::encode_multi_feature has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/ml/derivative_encoding.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"88357a615667c1caadbda3f0de3b7eb0d69f848137059d71e6530a8b638278b9"}},{"ruleId":"D1","level":"warning","message":{"text":"SMCStrategy::analyze (cyclomatic 27): SMCStrategy::analyze has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/smc.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4fc2e86a20be7c0b362b5697f7d7cf701a9eaa74c4df95c171cdc303356d809"}},{"ruleId":"D1","level":"warning","message":{"text":"Simulator::run_with_multi_bars (cyclomatic 26): Simulator::run_with_multi_bars has cyclomatic complexity 26 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/simulator/engine.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca82ad6306be75fbc029d7a5ad73b7991ae781f517f47c8526af88960f61b6e"}},{"ruleId":"D1","level":"warning","message":{"text":"SMCStrategy::detect_fvg (cyclomatic 25): SMCStrategy::detect_fvg has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/smc.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eecbb7257cd93f5eb2878456d20c265853d26c043271385474147ddbd2ce899"}},{"ruleId":"D1","level":"warning","message":{"text":"UserAgent::parse_log_for_activity (cyclomatic 24): UserAgent::parse_log_for_activity has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent/activity.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"622f84fd073d6c96dbd89cab2da5668de3d1ed648b63973de1e1bdaf46f4abdb"}},{"ruleId":"D1","level":"warning","message":{"text":"calculator::calculate_metrics_from_orders (cyclomatic 22): calculator::calculate_metrics_from_orders has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/calculator.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"b309da9c9668b50fb26b97dcce78f18ccc50cb646832d39ed163de3afeeeecd5"}},{"ruleId":"D1","level":"warning","message":{"text":"symbol_selector::render_symbol_selector (cyclomatic 21): symbol_selector::render_symbol_selector has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/settings_components/symbol_selector.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"12bed05c96adf6dac00d8ef2c8f3f8c10ec349712f67687fe8850eefc79c7a6c"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentsBootstrap::init (cyclomatic 20): AgentsBootstrap::init has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/bootstrap/agents.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6952d3d4f3a37216f2df4088a5f56c869591736d7961c7691aa43bcbb2b769c"}},{"ruleId":"D1","level":"warning","message":{"text":"RiskManager::cmd_handle_proposal (cyclomatic 20): RiskManager::cmd_handle_proposal has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/core/risk_manager/handler.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"acd4c34dc419840bcf671c44a1a14fbaee7d169102201c8bbbc41e1a4f9fb1a2"}},{"ruleId":"D1","level":"warning","message":{"text":"PerformanceMetrics::calculate_time_series_metrics_with_benchmark (cyclomatic 20): PerformanceMetrics::calculate_time_series_metrics_with_benchmark has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/metrics.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e6731caf77cc099be568c928d058b9e8c41285b4ab845bcc40fd7fdcf4305d"}},{"ruleId":"D1","level":"warning","message":{"text":"BinanceWebSocketManager::connect_and_stream (cyclomatic 20): BinanceWebSocketManager::connect_and_stream has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/binance/websocket.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc9721aa53c5f3e8c5c2e11f58a19cb74002ddde7957c13ee1908f61e8b0793"}},{"ruleId":"D1","level":"warning","message":{"text":"train_surrogate::main (cyclomatic 20): train_surrogate::main has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/train_surrogate.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"1528d54f055022046a19c8256119853bfdf5862345b2ca33e170dc29a33b2607"}},{"ruleId":"D1","level":"warning","message":{"text":"activity_feed::render_logs_panel (cyclomatic 20): activity_feed::render_logs_panel has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/activity_feed.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc2d055249a9717b8dd964f2824dff6ecb19ae6b41bd805a76071a77f5119887"}},{"ruleId":"D1","level":"warning","message":{"text":"Simulator::run_with_bars (cyclomatic 19): Simulator::run_with_bars has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/simulator/engine.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"b681d742dc3e0cf8525bcf9dded6acea438c3de32832ea197fa10a9d398e9df9"}},{"ruleId":"D1","level":"warning","message":{"text":"EnsembleStrategy::analyze (cyclomatic 19): EnsembleStrategy::analyze has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/ensemble.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdeb8231042561395faa855b5820096205734504bdb490fa441e69823cb1a708"}},{"ruleId":"D1","level":"warning","message":{"text":"AlpacaMarketDataService::get_historical_bars_internal (cyclomatic 18): AlpacaMarketDataService::get_historical_bars_internal has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/historical.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88ec01f0c423983a0aea95797b9f8dd53ed60aeee5e60d15a2dc1fbc53fa8d6"}},{"ruleId":"D1","level":"warning","message":{"text":"main::main (cyclomatic 18): main::main has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/main.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d49f31a9d8d7154909bf2fe36fccb1c2c2745912de87e26789c7f2eaef91b01"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_panel::render_chart_panel (cyclomatic 18): chart_panel::render_chart_panel has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/chart_panel.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2361e552e633030c6f2bf9686cc7cfbe978e6c48d8223442f9228823d65d8c5"}},{"ruleId":"D1","level":"warning","message":{"text":"UserAgent::update (cyclomatic 17): UserAgent::update has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1c3c882118fe0acabd6af07742c6c8909f16f90a150144ad772b76f84f29e4"}},{"ruleId":"D1","level":"warning","message":{"text":"MonteCarloEngine::simulate (cyclomatic 17): MonteCarloEngine::simulate has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/monte_carlo.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"68ddb79f3d7d11a9c46e7e1f0f7267fb467d87ba2c2fefa00a45df6b51badccd"}},{"ruleId":"D1","level":"warning","message":{"text":"analytics_view::render_analytics_view (cyclomatic 17): analytics_view::render_analytics_view has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/analytics_view.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e0ec78156ae2527da0f7d4cad554fa3cf0d970bc3bb57b685560edb1f79e7e"}},{"ruleId":"D1","level":"warning","message":{"text":"GridSearchOptimizer::generate_combinations (cyclomatic 16): GridSearchOptimizer::generate_combinations has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/core/walk_forward.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d2034708fcb91ad2cdfdc406468705d7d1dc8003cd764b8596148f7c9a6cf61"}},{"ruleId":"D1","level":"warning","message":{"text":"CircuitBreakerService::check_circuit_breaker (cyclomatic 16): CircuitBreakerService::check_circuit_breaker has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/validation/circuit_breaker_service.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce483f140753d77ea58bcab671031e58c16414a317e1bff957609bac4964624a"}},{"ruleId":"D1","level":"warning","message":{"text":"OrderFlowStrategy::analyze (cyclomatic 16): OrderFlowStrategy::analyze has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/order_flow.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"5626ad3422dd93bb6956ff91cd68010abc3060cc3dd669ab15cac64fe1647a30"}},{"ruleId":"D1","level":"warning","message":{"text":"SnnSurrogateStrategy::prepare_rolling_window (cyclomatic 16): SnnSurrogateStrategy::prepare_rolling_window has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/snn_surrogate_strategy.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc1bfc4c47fb71360e28e587280e5c308205f8191ce539fce0aea6bb26d383c"}},{"ruleId":"D1","level":"warning","message":{"text":"CompetitiveSnnNetwork::backward (cyclomatic 16): CompetitiveSnnNetwork::backward has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/snn/competitive_network.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"32919d5df2935fa2d2f204b0f2bf8fb13af3a72c532fe502cc61633749bc4386"}},{"ruleId":"D1","level":"warning","message":{"text":"architecture_view::render_agent_detail_panel (cyclomatic 16): architecture_view::render_agent_detail_panel has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d26d2abe6f8a505845d6dd2dbf1d480c8de55a013e1dd8c3d391f7876ac757"}},{"ruleId":"D1","level":"warning","message":{"text":"ensemble_optimizer::main (cyclomatic 16): ensemble_optimizer::main has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/ensemble_optimizer.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5f69f4d47a7731564643408574745355456f7c2ab41e148abf244ec27ca977e"}},{"ruleId":"D2","level":"warning","message":{"text":"benchmark::main (cognitive 174): benchmark::main has cognitive complexity 174 (threshold 15). Drivers by points: if/else 84, loops 59, match/switch 30, boolean chains 1 (nesting depth added 114). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/benchmark.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"1369e294a114b41e1cb833d525111510eabf3ceb9b6db04753c424f71cfd83f4"}},{"ruleId":"D2","level":"warning","message":{"text":"GridSearchOptimizer::generate_combinations (cognitive 108): GridSearchOptimizer::generate_combinations has cognitive complexity 108 (threshold 15). Drivers by points: loops 105, if/else 3 (nesting depth added 93). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/core/walk_forward.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"313e612225ac1352fb485a80b373928742aa3f129e8200ec5281893be1d575df"}},{"ruleId":"D2","level":"warning","message":{"text":"architecture_view::render_agent_graph (cognitive 95): architecture_view::render_agent_graph has cognitive complexity 95 (threshold 15). Drivers by points: if/else 72, loops 14, boolean chains 6, match/switch 3 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e067f1d0561eb25aa16488978a60509bd498cd9c7b01e45b4f2d519da38e48"}},{"ruleId":"D2","level":"warning","message":{"text":"SMCStrategy::detect_fvg (cognitive 82): SMCStrategy::detect_fvg has cognitive complexity 82 (threshold 15). Drivers by points: if/else 71, loops 9, boolean chains 2 (nesting depth added 56). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/smc.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e241a9e078c6b95f4424d5a0110689d561c229365bfe7ff1c67a2ceb3458ec2"}},{"ruleId":"D2","level":"warning","message":{"text":"SMCStrategy::analyze (cognitive 75): SMCStrategy::analyze has cognitive complexity 75 (threshold 15). Drivers by points: if/else 65, boolean chains 8, match/switch 2 (nesting depth added 39). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/smc.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b05ba6b8cbbde0da011426b9a4598085fcafaa859b792534100b00e595dfc6"}},{"ruleId":"D2","level":"warning","message":{"text":"dashboard::render_dashboard (cognitive 68): dashboard::render_dashboard has cognitive complexity 68 (threshold 15). Drivers by points: if/else 61, loops 4, boolean chains 2, match/switch 1 (nesting depth added 12). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8490b7f4f2c661f4c3b8523784eba4a12521cad9df6ff47cea1306f11f9070"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_panel::render_chart_panel (cognitive 67): chart_panel::render_chart_panel has cognitive complexity 67 (threshold 15). Drivers by points: if/else 62, loops 4, boolean chains 1 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/chart_panel.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"6483855e77e971579002d8ee1f5e9e4b3c996e0916acd00e22fc78538310e45d"}},{"ruleId":"D2","level":"warning","message":{"text":"derivative_encoding::encode_multi_feature (cognitive 64): derivative_encoding::encode_multi_feature has cognitive complexity 64 (threshold 15). Drivers by points: if/else 56, boolean chains 5, loops 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/ml/derivative_encoding.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac943c85776643c679722c181c036cfc97838c3f7354e8d8a658dbde1b2f373"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaMarketDataService::get_historical_bars_internal (cognitive 61): AlpacaMarketDataService::get_historical_bars_internal has cognitive complexity 61 (threshold 15). Drivers by points: if/else 33, loops 17, match/switch 9, boolean chains 2 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/historical.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"efaaaa97e5b6c879d0c84357405be9dfdd5e85ff239fa2a41223c18097c88124"}},{"ruleId":"D2","level":"warning","message":{"text":"RssNewsService::subscribe_news (cognitive 54): RssNewsService::subscribe_news has cognitive complexity 54 (threshold 15). Drivers by points: if/else 32, match/switch 12, loops 9, boolean chains 1 (nesting depth added 41). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/news/rss.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8aebe9cbf6459ace0f9806c78320db6bfa31d2ad4a0d6ef75e5a3792e76058d"}},{"ruleId":"D2","level":"warning","message":{"text":"analytics_view::render_analytics_view (cognitive 51): analytics_view::render_analytics_view has cognitive complexity 51 (threshold 15). Drivers by points: if/else 45, loops 6 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/analytics_view.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"6623e6a7f0c70c30db53e68110e09b24538b1d03fd3b4cf9eedfd22a6e598fd9"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulator::run_with_multi_bars (cognitive 50): Simulator::run_with_multi_bars has cognitive complexity 50 (threshold 15). Drivers by points: loops 26, if/else 22, boolean chains 2 (nesting depth added 21). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/simulator/engine.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"41630f481e5c03fba7e960899a8a5cd739a71e76efa49a0d69a0de639dbd4401"}},{"ruleId":"D2","level":"warning","message":{"text":"calculator::calculate_metrics_from_orders (cognitive 49): calculator::calculate_metrics_from_orders has cognitive complexity 49 (threshold 15). Drivers by points: if/else 28, match/switch 13, loops 5, boolean chains 3 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/calculator.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"deabaf1e75f58d65a663c8dfade1e723a83d975a2a1476b50c0d75dd9f2ceb4a"}},{"ruleId":"D2","level":"warning","message":{"text":"MonteCarloEngine::simulate (cognitive 42): MonteCarloEngine::simulate has cognitive complexity 42 (threshold 15). Drivers by points: if/else 36, loops 6 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/monte_carlo.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"facf662a8d7458237e99627e6da61772fc66cffae52933055124db1e02df2180"}},{"ruleId":"D2","level":"warning","message":{"text":"UserAgent::update (cognitive 38): UserAgent::update has cognitive complexity 38 (threshold 15). Drivers by points: if/else 30, loops 4, boolean chains 2, match/switch 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f28008efb83e3047c4bbb4e14d2dec0a9ad9597f98bc54c0d94bf57f86e43fb"}},{"ruleId":"D2","level":"warning","message":{"text":"RiskManager::cmd_handle_proposal (cognitive 38): RiskManager::cmd_handle_proposal has cognitive complexity 38 (threshold 15). Drivers by points: if/else 24, match/switch 13, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/core/risk_manager/handler.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"88fcbe1ab339e915d99d11b9ccadeae95c55bf2966bb6ce71832191956537d44"}},{"ruleId":"D2","level":"warning","message":{"text":"train_surrogate::main (cognitive 38): train_surrogate::main has cognitive complexity 38 (threshold 15). Drivers by points: if/else 29, loops 8, match/switch 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/train_surrogate.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa6d300c36cc469ff6434d6c4e0fe39dadac868ea187d78d338451531854a1cf"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderFlowStrategy::analyze (cognitive 37): OrderFlowStrategy::analyze has cognitive complexity 37 (threshold 15). Drivers by points: if/else 35, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/order_flow.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"f234225a8e742bcc09ac918314c1792f54848819c0cd3ff032797f3eb6a73005"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentsBootstrap::init (cognitive 34): AgentsBootstrap::init has cognitive complexity 34 (threshold 15). Drivers by points: if/else 27, boolean chains 3, loops 3, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/bootstrap/agents.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbeb1071c7e1359811e0c8ed68ed6b56589223d70b234004d8d3852601551659"}},{"ruleId":"D2","level":"warning","message":{"text":"PerformanceMetrics::calculate_time_series_metrics_with_benchmark (cognitive 34): PerformanceMetrics::calculate_time_series_metrics_with_benchmark has cognitive complexity 34 (threshold 15). Drivers by points: if/else 29, loops 3, boolean chains 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/metrics.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"869a61598e58746480db8de66a53b68ad7109e22bd9ff147a45f6e5f69ee4a85"}},{"ruleId":"D2","level":"warning","message":{"text":"CompetitiveSnnNetwork::backward (cognitive 34): CompetitiveSnnNetwork::backward has cognitive complexity 34 (threshold 15). Drivers by points: loops 30, if/else 4 (nesting depth added 19). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/snn/competitive_network.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aed8d8ba154187a9a06bc2db5d48bf9674b03138f5a4dea8e4a78f632e7a5d2"}},{"ruleId":"D2","level":"warning","message":{"text":"main::main (cognitive 34): main::main has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, match/switch 9, loops 6 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/main.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c890d2fd0d30e425efb4e88081b1c8c5911321bc59a059f874c2ad008ce1ff"}},{"ruleId":"D2","level":"warning","message":{"text":"symbol_selector::render_symbol_selector (cognitive 33): symbol_selector::render_symbol_selector has cognitive complexity 33 (threshold 15). Drivers by points: if/else 28, boolean chains 4, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/settings_components/symbol_selector.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ca0b40e0b6b4d6f45adcf60b102885cfc89e8b96b981c7a8109678a6762e95"}},{"ruleId":"D2","level":"warning","message":{"text":"UserAgent::parse_log_for_activity (cognitive 32): UserAgent::parse_log_for_activity has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, boolean chains 10 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent/activity.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6dc7aadcece356eeb8c8ef9b470d7a9ce3a70d35b889ccac63dbddb5c1b7138"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulator::run_with_bars (cognitive 32): Simulator::run_with_bars has cognitive complexity 32 (threshold 15). Drivers by points: if/else 21, loops 8, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/simulator/engine.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d97d0d3b7446128114e1161a8677d7e877a6aa36d7fe3889cc9cce5a7499c4d"}},{"ruleId":"D2","level":"warning","message":{"text":"UserAgent::calculate_trade_statistics (cognitive 30): UserAgent::calculate_trade_statistics has cognitive complexity 30 (threshold 15). Drivers by points: if/else 25, match/switch 3, loops 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent/metrics.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"22c894eea5c1890baa482214fa61c8a9e638d49af3441b22260e0fc380def6ee"}},{"ruleId":"D2","level":"warning","message":{"text":"BinanceWebSocketManager::connect_and_stream (cognitive 30): BinanceWebSocketManager::connect_and_stream has cognitive complexity 30 (threshold 15). Drivers by points: if/else 23, loops 5, match/switch 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/binance/websocket.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a1d37d4134ff228ae82d7c18e50bed58c9b6b1213f2a21965a079631b18139"}},{"ruleId":"D2","level":"warning","message":{"text":"help_about::render_help_tab (cognitive 30): help_about::render_help_tab has cognitive complexity 30 (threshold 15). Drivers by points: if/else 26, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/settings_components/help_about.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca62b95685e614c272794639d3ecd599f4761285c5bac8b0fe04bc56c9ff373a"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulator::run_simulation_core (cognitive 29): Simulator::run_simulation_core has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22, loops 5, match/switch 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/simulator/engine.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0ffd9a101d1c5855ffc4459653be63a05a084773863f5433576a08de3e707ff"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionManager::initialize_session (cognitive 29): SessionManager::initialize_session has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22, match/switch 4, loops 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/session/session_manager.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c854c4cb6cb94daeb63349418ff11ecf71dd725153062c7f4920e6477246878"}},{"ruleId":"D2","level":"warning","message":{"text":"EnsembleStrategy::analyze (cognitive 29): EnsembleStrategy::analyze has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, boolean chains 4, match/switch 3, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/ensemble.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d561fe4f44bed699b0f83992214e54330b45c37b1ea0a7630769637181b8070"}},{"ruleId":"D2","level":"warning","message":{"text":"SnnSurrogateStrategy::prepare_rolling_window (cognitive 29): SnnSurrogateStrategy::prepare_rolling_window has cognitive complexity 29 (threshold 15). Drivers by points: if/else 23, loops 6 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/snn_surrogate_strategy.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a439c86a9965465fa91aa1eaa1c3a06e724991752299ae0ab632eeb9c9b43f"}},{"ruleId":"D2","level":"warning","message":{"text":"activity_feed::render_logs_panel (cognitive 29): activity_feed::render_logs_panel has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, boolean chains 2, match/switch 2, loops 1 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/activity_feed.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea88d2bfa580c0f07a8dbe6afb86767c9382e49779c7e62063c30ba2f12f84a3"}},{"ruleId":"D2","level":"warning","message":{"text":"Executor::handle_order (cognitive 28): Executor::handle_order has cognitive complexity 28 (threshold 15). Drivers by points: if/else 23, match/switch 3, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/executor.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff76297d58cbd268032e1d5f3b12033dfdbb202f1452dc0a7ef69e473e8b69d"}},{"ruleId":"D2","level":"warning","message":{"text":"ensemble_optimizer::main (cognitive 28): ensemble_optimizer::main has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, loops 4, match/switch 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/ensemble_optimizer.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"4004b2bf403d88b8f60fd9d1ca869a69a16262b614ad86429b370218e2292ee4"}},{"ruleId":"D2","level":"warning","message":{"text":"CircuitBreakerService::check_circuit_breaker (cognitive 27): CircuitBreakerService::check_circuit_breaker has cognitive complexity 27 (threshold 15). Drivers by points: if/else 27 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/validation/circuit_breaker_service.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"802345c6d577618e73e69a85f36a8dd3587d28da035ca1d480ca6b752c026b59"}},{"ruleId":"D2","level":"warning","message":{"text":"EmpiricalWinRateProvider::get_overall_win_rate (cognitive 25): EmpiricalWinRateProvider::get_overall_win_rate has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 7, match/switch 5 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/monitoring/strategy/empirical_win_rate_provider.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd6321093a46e662f73d9947faffd3dfb7eeabff01bb98cf920c96d7c5b6f07"}},{"ruleId":"D2","level":"warning","message":{"text":"PerformanceMetrics::calculate_from_equity_curve (cognitive 25): PerformanceMetrics::calculate_from_equity_curve has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/metrics.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a3e445d0f3dd5d70f5f3e5ea8b0d955d61cb9844c9276e0a42d655121e5df4"}},{"ruleId":"D2","level":"warning","message":{"text":"main::main (cognitive 25): main::main has cognitive complexity 25 (threshold 15). Drivers by points: loops 9, if/else 8, match/switch 8 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/optimize/main.rs"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0a3d0403843be435a0a1098abb2b00eb01cb09ceb8c1f8634edb329933e10d"}},{"ruleId":"D2","level":"warning","message":{"text":"architecture_view::render_agent_detail_panel (cognitive 25): architecture_view::render_agent_detail_panel has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, match/switch 4, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"d203aec88e6df23cdabaa1f916a4732fcc36cb3be59e0f02405080c01b7980aa"}},{"ruleId":"D2","level":"warning","message":{"text":"SMCStrategy::find_last_ob (cognitive 24): SMCStrategy::find_last_ob has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, loops 4, boolean chains 2, match/switch 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/smc.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"8713203492e881994d69ee497e237c292d401899d711e2078771760a3ba0a998"}},{"ruleId":"D2","level":"warning","message":{"text":"AnalysisContext::multi_timeframe_trend_strength (cognitive 24): AnalysisContext::multi_timeframe_trend_strength has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/traits.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"097f2d643c1598f644062a799e99b6ed71deb0207622ed1a3fc317864e1b549d"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner::scan (cognitive 24): Scanner::scan has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, match/switch 6, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/crypto_movers.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9de62446d6e5f8b0272e23382de988c99d090fc301a42b1dd2bb1555df84cd"}},{"ruleId":"D2","level":"warning","message":{"text":"regime_handler::apply_dynamic_risk_scaling (cognitive 24): regime_handler::apply_dynamic_risk_scaling has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 1, match/switch 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/regime_handler.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"5df089a07f8f37f7c22aa60e043ead665099996ecd34623e5db0d9a4696c7f8c"}},{"ruleId":"D2","level":"warning","message":{"text":"CompetitiveSnnNetwork::forward (cognitive 23): CompetitiveSnnNetwork::forward has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, loops 11 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/snn/competitive_network.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec0f2dffae0383494479a890ce29f7cb420f812b873fddc9212c7376b1b32bb"}},{"ruleId":"D2","level":"warning","message":{"text":"MockExecutionService::execute (cognitive 23): MockExecutionService::execute has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/mock/execution_service.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4bdb16008f15538253aac55e531fa8379f5d750482fdfc13b4358c39198f9dd"}},{"ruleId":"D2","level":"warning","message":{"text":"Executor::update_portfolio (cognitive 22): Executor::update_portfolio has cognitive complexity 22 (threshold 15). Drivers by points: if/else 20, match/switch 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/executor.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"337fec0ff36357ad8aeefb15a6ef831ed6975c46397a10ffef3a169185d1adeb"}},{"ruleId":"D2","level":"warning","message":{"text":"TechnicalFeatureEngineeringService::update (cognitive 22): TechnicalFeatureEngineeringService::update has cognitive complexity 22 (threshold 15). Drivers by points: if/else 20, boolean chains 1, loops 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/monitoring/strategy/feature_engineering_service.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fb3ac5f8013a87c93f48da2eb19dc545a639b5cbf20c7dcc769ee399f87be43"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderReconciler::reconcile_pending_orders (cognitive 21): OrderReconciler::reconcile_pending_orders has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/execution/order_reconciler.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"a621b07f35e500a9248b2e0fd62a068f87f27eff2be586eedfb37b42f537ee01"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaMarketDataService::get_historical_movers (cognitive 21): AlpacaMarketDataService::get_historical_movers has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 3, match/switch 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/historical.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a8d8db7943b2ae7cc7835e590a23c58f2885b2feda21561f19b19f2c0dcbd9"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaMarketDataService::get_prices_internal (cognitive 21): AlpacaMarketDataService::get_prices_internal has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, boolean chains 1, loops 1, match/switch 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/price.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"864dc077cbba25e24d8974230ba5fd6cf8f03d9f0e9f2b3123ddb2175df5746c"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaWebSocketManager::spawn_connection_task (cognitive 21): AlpacaWebSocketManager::spawn_connection_task has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, match/switch 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/websocket.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"2031070d3764c0caea82dee0db1860254cc1d1175d00c57ee73cbd17e051b28d"}},{"ruleId":"D2","level":"warning","message":{"text":"main::run_optimize (cognitive 21): main::run_optimize has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, match/switch 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/optimize/main.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"49cdccd29ec6396b99c5815de58fad76de853137aa4e59f91b6e786487e43ab6"}},{"ruleId":"D2","level":"warning","message":{"text":"main::run_clusters (cognitive 21): main::run_clusters has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, match/switch 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/optimize/main.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6eae17384b2e753b85c0163025ce3e2007fe5b87aa83a9da694cd8d158614c3"}},{"ruleId":"D2","level":"warning","message":{"text":"HistoricalWinRateProvider::calculate_win_rate_from_orders (cognitive 20): HistoricalWinRateProvider::calculate_win_rate_from_orders has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 4, match/switch 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/win_rate_provider.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"e557bff5ec7c87c21b9e3d90c2b69c508377aedc0e1af6136ff8ad5d8e42e54b"}},{"ruleId":"D2","level":"warning","message":{"text":"DashboardViewModel::get_metrics (cognitive 20): DashboardViewModel::get_metrics has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 2, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/view_models/dashboard_view_model.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"e195a1d2d0bbe7d97e0bf0d6f33d8985b19c708b6b2f769a41b647019d185e5c"}},{"ruleId":"D2","level":"warning","message":{"text":"symbol_card::render_symbol_card (cognitive 20): symbol_card::render_symbol_card has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, match/switch 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/symbol_card.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55f4137f2d122a6ba168d6c65afed33e667906f13287aa1eb42511aaa287e45"}},{"ruleId":"D2","level":"warning","message":{"text":"DataCollector::update_labels_and_flush (cognitive 19): DataCollector::update_labels_and_flush has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/ml/data_collector.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc32032653f0d73d903dbf425083dcabdfc36f0ff07975015980d230d3ce1c5"}},{"ruleId":"D2","level":"warning","message":{"text":"ManualAdx::next (cognitive 19): ManualAdx::next has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/monitoring/strategy/feature_engineering_service.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a4156c75bca5988efff1ca6148b46fb2abc504fe1db8f47233207abb5dec62"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderReconciler::handle_order_update (cognitive 19): OrderReconciler::handle_order_update has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, match/switch 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/execution/order_reconciler.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"959f78d24cdf85723542f428d36cbfd4cab4c9c1380f420efad778d7aeda8074"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaExecutionService::new (cognitive 19): AlpacaExecutionService::new has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 3, match/switch 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/execution.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"340a9db75716db1c6fa23fd202104091da813624cb53928ba34d914343a24ec5"}},{"ruleId":"D2","level":"warning","message":{"text":"GeneticOptimizer::run_optimization (cognitive 18): GeneticOptimizer::run_optimization has cognitive complexity 18 (threshold 15). Drivers by points: loops 10, if/else 8 (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/core/genetic.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8937c3a40a145f27ce45b6897182807033b282b2feebeac6cedb3cc3e80dcf6"}},{"ruleId":"D2","level":"warning","message":{"text":"DiffIzhikevichLayer::backward (cognitive 18): DiffIzhikevichLayer::backward has cognitive complexity 18 (threshold 15). Drivers by points: loops 12, if/else 6 (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/snn/izhikevich_diff.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"730434112b9964fc8101384837791d30128f5a710d72ecd80f0aeb94ccd722a6"}},{"ruleId":"D2","level":"warning","message":{"text":"Analyst::handle_news_signal (cognitive 17): Analyst::handle_news_signal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, match/switch 5, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/analyst.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2588634a303e441ffaef87efd9f770addbd8677090ce74a0653511a94701014"}},{"ruleId":"D2","level":"warning","message":{"text":"AlpacaMarketDataService::fetch_historical_bars_internal (cognitive 17): AlpacaMarketDataService::fetch_historical_bars_internal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, match/switch 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/alpaca/market_data/historical.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"167d6c57bad11086f598adb0b9d17a1e8ef4bbbda6cfda1e8c0c83792a9ea289"}},{"ruleId":"D2","level":"warning","message":{"text":"settings_view::render_trading_engine_content (cognitive 17): settings_view::render_trading_engine_content has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/ui_components/settings_view.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e62845d8d50236046adfb5d6f566fcc5db1b84b9b644d154dd1aa1f5da1b95a"}},{"ruleId":"D2","level":"warning","message":{"text":"settings_view::render_save_button (cognitive 17): settings_view::render_save_button has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, match/switch 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/ui_components/settings_view.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1ac9d669c52ef1d11b8082e08e00e5dcac6bff1e95e46b3e1b2417fdbff5cf"}},{"ruleId":"D2","level":"warning","message":{"text":"news_feed::render_news_feed (cognitive 17): news_feed::render_news_feed has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, match/switch 6, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/news_feed.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"871bb83156cb9b48d8b186d22801e8268bc6a4481dd97020d8324d016da50888"}},{"ruleId":"D2","level":"warning","message":{"text":"GridSearchOptimizer::run_optimization (cognitive 16): GridSearchOptimizer::run_optimization has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/core/walk_forward.rs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c25ae99d21a8b56a9393e6cf2a1417d15a8a7415dce68193a39707543363eab"}},{"ruleId":"D2","level":"warning","message":{"text":"RiskManager::update_portfolio_valuation (cognitive 16): RiskManager::update_portfolio_valuation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/core/risk_manager.rs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b4a0ebe507ecddec18fa4d08e90f01557b75d0eb0d04a8ab7e6ac0bf178f7d"}},{"ruleId":"D2","level":"warning","message":{"text":"SizingEngine::calculate_quantity (cognitive 16): SizingEngine::calculate_quantity has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/position/sizing_engine.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"b50c2e2dbd7eb89761d9707d3d18a4fc0c6b5aaed39ec3a81ed776affb64ed96"}},{"ruleId":"D2","level":"warning","message":{"text":"MarketRegimeDetector::detect (cognitive 16): MarketRegimeDetector::detect has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, match/switch 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/market/market_regime.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1a96f5b3470691b9cd2b04a47c59386ac6dae257623bd793ceec0d67104309"}},{"ruleId":"D2","level":"warning","message":{"text":"ArbitrageEngine::check_opportunity (cognitive 16): ArbitrageEngine::check_opportunity has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, match/switch 4, boolean chains 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/trading/arbitrage.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"556ddf7d9f5662448d80ceeab94cab50df2ccfd62b06f719d03882917c8a3609"}},{"ruleId":"D2","level":"warning","message":{"text":"grid::get_grid_for_profile (cognitive 16): grid::get_grid_for_profile has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/optimize/grid.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"866fe393368ad2008f32df780b94254d43b1f9d0b4f3dc1079039fcd8bfd322a"}},{"ruleId":"D2","level":"warning","message":{"text":"position_lifecycle::manage_pending_orders (cognitive 16): position_lifecycle::manage_pending_orders has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 4, match/switch 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/position_lifecycle.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"7827da8e7d916f676761a895fa014ca0dba1a8e16603ac2056c2949eb6d871d4"}},{"ruleId":"D2","level":"warning","message":{"text":"reporting::max_drawdown_from_trades (cognitive 16): reporting::max_drawdown_from_trades has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 2, match/switch 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/benchmarking/reporting.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"1524adf634bd81ce6afffdfe108139750ae0303bda9f112e5c230937e7c837fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard_components/architecture_view.rs: FileTooLong \u2014 662 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"166d6248a35ea49de215954b5c957d9fbc8a9020cd9cca7629c6828d09d79f0a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/bin/benchmark.rs: src/bin/benchmark.rs changed 4 times in last 90 days, max complexity 48."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/bin/benchmark.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"414560e0ff24ac210b9c4c35c39c575e980200c52a1fcba5a12f1c7809a67a2b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/interfaces/dashboard.rs: src/interfaces/dashboard.rs changed 4 times in last 90 days, max complexity 43."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a33221e01f2db3f9d9818e3ba3d43c9ce2b0bba7da93091f901eb99cec695db"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/application/bootstrap/agents.rs: src/application/bootstrap/agents.rs changed 7 times in last 90 days, max complexity 20."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/bootstrap/agents.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"27e2b0bdbbf18e01cb79c401f21b1c536b573f5beeb2a172d3b9b9f8a974e05b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/interfaces/dashboard_components/architecture_view.rs: src/interfaces/dashboard_components/architecture_view.rs changed 3 times in last 90 days, max complexity 46."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/dashboard_components/architecture_view.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"821ba88e904ffc2a009d6c26b888dcae7e268fe8286b8132eeb00eaf90de69d7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/application/strategies/ensemble.rs: src/application/strategies/ensemble.rs changed 4 times in last 90 days, max complexity 19."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/ensemble.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c86c069ed7f6b51960713bba00aaa396fe68d6b545af78b5db92cdce3af145fa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/main.rs: src/main.rs changed 4 times in last 90 days, max complexity 18. 1 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f4bd697ce412d5d6af59543f06e4a0481b7a56e4bd52631de4c8462fa4ed51"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/application/agents/user_agent.rs: src/application/agents/user_agent.rs changed 4 times in last 90 days, max complexity 17."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/user_agent.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05fd030647a553a4ffaa15237422981a5b7d9328aaf9ad0caa40e95d2f659b7c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/application/optimization/core/walk_forward.rs: src/application/optimization/core/walk_forward.rs changed 4 times in last 90 days, max complexity 16."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/optimization/core/walk_forward.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b2409e8ff9d2e734ddd9a45c764132fbcb68eb7a2ab5e5111ef0b136a14f2ec"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/interfaces/ui_components/settings_state.rs: src/interfaces/ui_components/settings_state.rs changed 3 times in last 90 days, max complexity 17."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/interfaces/ui_components/settings_state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4745815f73ae9aea7d6bdb4b9fb4e5e6d118c58317ce7c5354019907acb85439"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/application/strategies/snn_surrogate_strategy.rs: src/application/strategies/snn_surrogate_strategy.rs changed 3 times in last 90 days, max complexity 16."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/strategies/snn_surrogate_strategy.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1256233bf7111e3380a817688cb9ae0d5b58d2d75d40f97a641d2303d82ad0d5"}},{"ruleId":"D16","level":"warning","message":{"text":"single-maintainer \u2014 knowledge-concentration (bus factor) risk: single-maintainer \u2014 knowledge-concentration (bus factor) risk (1 author(s) across 228 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b4b49d961df742f0e507f4cc5c8094fb077ba0391a27fd015d18320865187719"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7ceee73d76663034321cbd3b5bbecae8b673163039b70b12462f979a331e73d3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4c79a747478f631f53bdcff2cef183ad613cc3291df94d5bc280b76b2946b348"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"30f45a80e29f8857b916c95532e62e57be07f27172ccedfca8c874b01bfbfe05"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8eb50784ab958284eb3ecd7050384e4061ddeae0c76cf46d9d242ff3f816fc6b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f048daf6919d86db0db37e6d7001fff383b7647af3965fcfe56ac12df8ebebf3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d08fbb7aee0716ce6975df0720a125c6a900b3fd1b6e54617312ef5e4c3fb952"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e9eecf283a0c53c556886112c825683d666c6ee9c1e6e9f4d5b87e0437009fbd"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4e5ba20d569d258ae6d0a24953bb1bf2096a834bc4a53403da7c12ca10d2411b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"48b38cb0408716fa820f9f06735bf5f364d606639c641515b767c56a9a1d2ef3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fffe0c3e9747bb047d2cd3513b5c300d1e37495e3251f006c6156b54a68bf99c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"229f33f5083a1fefa5ebd7f3b2a50f455445c022072eadf8ca675541407f621d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e8c63ef494fafe1964416da3284659cfebde2d1d28e4f3e38901cd185b3695da"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ec18c7e38200a3ea39c3a5970f9d5b0810fd43fe6d132e294dfa65a87ec165c2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"737e179d445a3eb7b21c624ba2ac8c60eabb5f617271067545a51c65247a44c8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c3b3dbe93ae2fa7560edcd04a02f124edd6b2b8899dd26b4a7e93d6b61ee09bd"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"154e79376669773c5d0b9fdf78d6c851f5f1957a6b54b003e1633160453b1407"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"528a7403dbccd5c950f59495bfc43d9487549c55b4345dbdca6a799358025b84"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"921688d8bc1eb95c3090cca2ea35c8b2da4c8d6c7ae5376205a84a3e36a2e29c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: analyst.rs \u2194 websocket.rs: \u0060src/application/agents/analyst.rs\u0060 and \u0060src/infrastructure/alpaca/websocket.rs\u0060 change together 63% of the time (12 of the 19 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/analyst.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d0146ad236427b301b775c5ace07699278c18cd793c6dad0677d8299f73cf7a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: database.rs \u2194 mod.rs: \u0060src/infrastructure/persistence/database.rs\u0060 and \u0060src/infrastructure/persistence/repositories/mod.rs\u0060 change together 58% of the time (7 of the 12 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/infrastructure/persistence/database.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd9db6243709499578e7c7813977d994467bfde0a027610d849f607d0f83111"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: risk_manager.rs \u2194 database.rs: \u0060src/application/risk_management/core/risk_manager.rs\u0060 and \u0060src/infrastructure/persistence/database.rs\u0060 change together 58% of the time (7 of the 12 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/risk_management/core/risk_manager.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bdd687738654b871e3bdd96f07e4ad44e74d0315eb4deebdb0eaa643c0c770"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: analyst.rs \u2194 sentinel.rs: \u0060src/application/agents/analyst.rs\u0060 and \u0060src/application/agents/sentinel.rs\u0060 change together 58% of the time (11 of the 19 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/analyst.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"274bb606e7626679df69cb3db0f2275b917890e3adb78cea4a30691db99a158d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: circuit_breaker_validator.rs \u2194 position_size_validator.rs: \u0060src/domain/risk/filters/circuit_breaker_validator.rs\u0060 and \u0060src/domain/risk/filters/position_size_validator.rs\u0060 change together 55% of the time (6 of the 11 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/risk/filters/circuit_breaker_validator.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"118407d95b078bd65caa884cf66c7660d3a017296d66c14f0f43520b009f6d80"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: metrics.rs \u2194 portfolio.rs: \u0060src/domain/performance/metrics.rs\u0060 and \u0060src/domain/trading/portfolio.rs\u0060 change together 54% of the time (7 of the 13 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/performance/metrics.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb7acc999d646f3aa1ccf76db102264cae47c7dfe0de36071b4f4f6fe7b3a274"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: scanner.rs \u2194 mod.rs: \u0060src/application/agents/scanner.rs\u0060 and \u0060src/application/system/mod.rs\u0060 change together 53% of the time (10 of the 19 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/scanner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc3c610f849b445be3a0170b03628c6048b22e97adc9792061c160ca247d409"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: analyst.rs \u2194 optimizer.rs: \u0060src/application/agents/analyst.rs\u0060 and \u0060src/application/optimization/optimizer.rs\u0060 change together 50% of the time (17 of the 34 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/agents/analyst.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2331d407daa11501b0f1e78c74949dd2f70712c3c7adebeeaf3238e5319aa19"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 database.rs: \u0060src/application/system/mod.rs\u0060 and \u0060src/infrastructure/persistence/database.rs\u0060 change together 50% of the time (6 of the 12 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/application/system/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2af79c98c3116b9533605290c363da7e724bfb557fda535d2f3fcb05279faecd"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: position_size_validator.rs \u2194 sector_exposure_validator.rs: \u0060src/domain/risk/filters/position_size_validator.rs\u0060 and \u0060src/domain/risk/filters/sector_exposure_validator.rs\u0060 change together 50% of the time (5 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/domain/risk/filters/position_size_validator.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f585240a55b37bac1b042d3265e3e90759af49b05b35eb7fec10321d262ad46"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b597a578aa3a23340cf6b6c2a63b65d11236585529c92be2be2e3d62b0637f41"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"21d29e9fc94997f2fc743f904945cce2fd777ddd42529b54762bd6b213569950"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1fabc28de3a591be4432828a9f5792fe602ceda94839b00d2573e946560675d"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5d3ebaca8c7baac8999c617756d4845f67869b2e7a6bb14f841a12e574d0af65"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7a2c6edea0cf1d0cae1cbe6b5ae064c75606f67704e89ab373170d0b9863107d"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"85c3fad298485729ac4e472f320cc5f3d31b8a053d52f5ea7bf2f28f5aac2610"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"77c02758ef5f1f1dd7cf95bac86fc0f10049e0e0d1593a196f287a7503c06861"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4a3b5f81181b77480ec5243d89e4ac6d019190b3241a6cc7f37d61739c59dd22"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":26,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}