Trading bot running on Bybit, Bitget, OKX, GateIO, Binance, Kucoin, WEEX and Hyperliquid
This report summarizes scanner evidence for enarjord/passivbot, a Python project with 2,122 GitHub stars. SynthScan examined 574,803 lines of code across 817 source files, recording 12310 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 19.4 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 10339 finding(s).
Are imports declared and package/API names verified? 494 finding(s).
Are wrappers, guards, and repeated structures necessary? 11192 finding(s).
Which changes need focused human review? 12310 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 12310 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sync_tar.py | 51 | def _resolve_pull_destination(destination: str, remote_base: str) -> Path: | CODE |
| LOW⚡ | tests/test_auto_unstuck_allowance.py | 6 | def test_allowance_zero_when_no_drop_and_zero_pct(): | CODE |
| LOW⚡ | tests/test_auto_unstuck_allowance.py | 16 | def test_allowance_matches_configured_pct_at_peak(): | CODE |
| LOW⚡ | tests/test_auto_unstuck_allowance.py | 26 | def test_allowance_increases_after_drawdown(): | CODE |
| LOW | tests/test_auto_unstuck_allowance.py | 46 | def test_allowance_clamped_to_zero_for_large_drop(): | CODE |
| LOW | tests/test_console_admission.py | 51 | def test_estimation_churn_is_durable_and_reminders_are_bounded(): | CODE |
| LOW | tests/test_console_admission.py | 97 | def test_transitions_and_recoveries_bypass_reminder_window(change): | CODE |
| LOW | tests/test_console_admission.py | 106 | def test_severity_and_bot_identity_do_not_share_suppression(): | CODE |
| LOW | tests/test_console_admission.py | 124 | def test_unclassifiable_state_stays_visible(data): | CODE |
| LOW | tests/test_console_admission.py | 132 | def test_failed_delivery_does_not_consume_transition_or_reminder(): | CODE |
| LOW | tests/test_console_admission.py | 145 | def test_scope_storage_is_bounded_and_eviction_and_restart_reemit(): | CODE |
| LOW | tests/test_console_admission.py | 167 | def test_action_and_numbered_recovery_events_are_never_coalesced(kind): | CODE |
| LOW | tests/test_console_admission.py | 176 | def test_healthy_state_has_no_extra_periodic_reminder(): | CODE |
| LOW | tests/test_console_admission.py | 193 | def test_missing_account_surface_and_record_budget_are_visible(): | CODE |
| LOW | tests/test_console_admission.py | 216 | def test_repeat_is_admitted_exactly_at_boundary(): | CODE |
| LOW | tests/test_console_admission.py | 226 | def test_replaced_observation_is_durable_and_does_not_fake_current_outage(): | CODE |
| LOW | tests/test_console_admission.py | 265 | def test_replacement_marker_cannot_hide_red_or_unavailable(counts): | CODE |
| LOW | tests/test_console_admission.py | 280 | def test_routine_refresh_summary_moves_only_console_to_debug(): | CODE |
| LOW | tests/test_console_admission.py | 301 | def test_hsl_complete_reason_survives_console_continuation(): | CODE |
| LOW | tests/test_console_admission.py | 323 | def test_long_trailing_records_fit_exchange_user_prefix_without_losing_fields(): | CODE |
| LOW | tests/test_hsl_reference_replay_fake_exchange.py | 13 | def test_fake_exchange_partial_final_delayed_fill_and_cache_free_replay(pside): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 17 | def test_retired_mode_is_removed_or_fails_with_actionable_context( | CODE |
| LOW | tests/test_excess_allowance_migration.py | 56 | def test_external_config_cannot_hide_removed_raw_policy(tmp_path, mode): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 89 | def test_scaling_is_strict_boolean_and_defaults_off(value): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 103 | def test_coin_scaling_switch_is_global_per_side(): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 113 | def test_scaling_rejects_aggregate_scopes(mode): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 133 | def test_python_admission_matches_bounded_rust_contract(base, total, expected): | CODE |
| LOW | tests/test_excess_allowance_migration.py | 143 | def test_cleanup_cannot_drop_a_raw_policy_before_validation(surface, old_value): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 147 | def test_unstuck_ema_distance_validation_applies_to_effective_config(): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 155 | def test_effective_validation_normalization_is_retained_in_patch(): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 161 | def test_runtime_compilation_must_follow_override_parsing(): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 267 | def test_non_positive_leverage_override_fails(value): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 272 | def test_normalized_coin_collision_fails(): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 280 | def test_invalid_normalized_coin_fails(): | CODE |
| LOW⚡ | tests/test_coin_overrides_foundation.py | 285 | def test_wallet_exposure_limit_from_partial_file_is_retained_and_validated(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 30 | def test_explicit_inline_values_equal_to_global_are_retained(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 61 | def test_partial_file_extracts_only_explicit_values_and_inline_wins(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 101 | def test_invalid_boolean_override_types_fail(value, error, message): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 107 | def test_non_finite_override_values_fail(value): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 126 | def test_effective_config_cross_field_validation_fails_with_coin_context(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 190 | def test_runtime_compilation_after_parsing_preserves_normalized_patch(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 201 | def test_unknown_and_disallowed_inline_paths_fail(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 212 | def test_strategy_kind_mismatch_fails_in_inline_patch(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 229 | def test_inactive_strategy_subtrees_in_full_override_file_are_ignored(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 244 | def test_override_file_strategy_kind_mismatch_fails(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 304 | def test_parse_overrides_is_idempotent(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 317 | def test_programmatic_override_added_after_prepare_is_retained(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 337 | def test_canonical_grouped_patch_has_live_and_backtest_consumer_parity(): | CODE |
| LOW | tests/test_coin_overrides_foundation.py | 364 | def test_complete_current_active_strategy_and_shared_allowlist_is_accepted(pside): | CODE |
| LOW | tests/test_console_health.py | 10 | def test_health_does_not_infer_waiting_from_absent_orders(): | CODE |
| LOW | tests/test_console_health.py | 30 | def test_recovery_is_immediate_once_and_flat_is_not_called_ready(caplog): | CODE |
| LOW | tests/test_console_health.py | 44 | def test_recovery_sink_failure_isolated_and_retried(monkeypatch): | CODE |
| LOW | tests/test_console_health.py | 54 | def test_heartbeat_labels_unknowns_and_preserves_anomalies_with_bounded_rows(): | CODE |
| LOW | tests/test_console_health.py | 73 | def test_ws_console_echo_classification_never_hides_fill_progress_or_mutates_batch(monkeypatch): | CODE |
| LOW | tests/test_console_health.py | 92 | def test_normalized_short_close_is_resting_without_reduce_only_flag(): | CODE |
| LOW | tests/test_console_health.py | 99 | def test_phase_breakdown_and_current_fill_readiness_are_observations(caplog): | CODE |
| LOW | tests/test_console_health.py | 124 | def test_readiness_observer_is_bounded(): | CODE |
| LOW | tests/test_console_health.py | 131 | def test_console_retry_freezes_observed_recovery_time(monkeypatch, caplog): | CODE |
| LOW | tests/test_console_health.py | 142 | def test_wait_cap_retains_ages_and_reports_untracked_held_symbols(): | CODE |
| LOW | tests/test_console_health.py | 161 | def test_last_write_survives_retry_cache_pruning(monkeypatch): | CODE |
| 9584 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 22 | except Exception: | CODE |
| HIGH | tests/conftest.py | 36 | except Exception: | CODE |
| HIGH | tests/test_live_candlestick_manager.py | 126 | except Exception: | CODE |
| HIGH | tests/test_live_candlestick_manager.py | 171 | except Exception: | CODE |
| HIGH | tests/test_live_candlestick_manager.py | 213 | except Exception: | CODE |
| HIGH | tests/test_live_candlestick_manager.py | 290 | except Exception: | CODE |
| HIGH | tests/test_sync_tar.py | 143 | except IsADirectoryError: | CODE |
| HIGH | tests/test_ccxt_fetch_ohlcv_current_minute.py | 42 | except Exception: | CODE |
| HIGH | tests/test_ccxt_fetch_ohlcv_current_minute.py | 88 | except Exception: | CODE |
| HIGH | container/render_config.py | 38 | except Exception: | CODE |
| HIGH | src/fill_events_manager.py | 152 | except BaseException: | CODE |
| HIGH | src/fill_events_manager.py | 8333 | except ValueError: | CODE |
| HIGH | src/fill_events_manager.py | 8407 | except Exception: | CODE |
| HIGH | src/fill_events_manager.py | 8574 | except Exception: | CODE |
| HIGH | src/fill_events_manager.py | 4385 | except Exception: | CODE |
| HIGH | src/fill_events_manager.py | 4411 | except Exception: | CODE |
| HIGH | src/fill_events_manager.py | 4175 | except (KeyError, TypeError, ValueError, OverflowError): | CODE |
| HIGH | src/fill_events_manager.py | 4003 | except Exception: | CODE |
| HIGH | src/passivbot.py | 299 | except Exception: | CODE |
| HIGH | src/passivbot.py | 469 | except Exception: | CODE |
| HIGH | src/passivbot.py | 476 | except Exception: | CODE |
| HIGH | src/passivbot.py | 616 | except Exception: | CODE |
| HIGH | src/passivbot.py | 309 | except Exception: | CODE |
| HIGH | src/passivbot.py | 506 | except Exception: | CODE |
| HIGH | src/passivbot.py | 4055 | except Exception: | CODE |
| HIGH | src/passivbot.py | 9308 | except: | CODE |
| HIGH | src/passivbot.py | 9312 | except: | CODE |
| HIGH | src/passivbot.py | 10798 | except (AttributeError, TypeError, ValueError): | CODE |
| HIGH | src/passivbot.py | 19141 | except Exception: | CODE |
| HIGH | src/passivbot.py | 19169 | except Exception: | CODE |
| HIGH | src/passivbot.py | 19420 | except Exception: | CODE |
| HIGH | src/passivbot.py | 2317 | except BaseException: | CODE |
| HIGH | src/passivbot.py | 4882 | except Exception: | CODE |
| HIGH | src/passivbot.py | 4904 | except Exception: | CODE |
| HIGH | src/passivbot.py | 5306 | except Exception: | CODE |
| HIGH | src/passivbot.py | 5313 | except Exception: | CODE |
| HIGH | src/passivbot.py | 6190 | except Exception: | CODE |
| HIGH | src/passivbot.py | 10153 | except Exception: | CODE |
| HIGH | src/passivbot.py | 19761 | except Exception: | CODE |
| HIGH | src/passivbot.py | 20184 | except Exception: | CODE |
| HIGH | src/passivbot.py | 3911 | except Exception: | CODE |
| HIGH | src/passivbot.py | 4961 | except Exception: | CODE |
| HIGH | src/passivbot.py | 5039 | except Exception: | CODE |
| HIGH | src/passivbot.py | 6880 | except Exception: | CODE |
| HIGH | src/passivbot.py | 3414 | except Exception: | CODE |
| HIGH | src/passivbot.py | 9827 | except Exception: | CODE |
| HIGH | src/passivbot.py | 6844 | except asyncio.CancelledError: | CODE |
| HIGH | src/optimize.py | 2736 | except Exception: | CODE |
| HIGH | src/optimize.py | 2729 | except Exception: | CODE |
| HIGH | src/passivbot_monitor.py | 59 | except Exception: | CODE |
| HIGH | src/passivbot_monitor.py | 190 | except (AttributeError, OSError): | CODE |
| HIGH | src/passivbot_monitor.py | 2082 | except Exception: | CODE |
| HIGH | src/passivbot_monitor.py | 69 | except Exception: | CODE |
| HIGH | src/passivbot_monitor.py | 847 | except Exception: | CODE |
| HIGH | src/passivbot_monitor.py | 1468 | except (KeyError, TypeError, ValueError): | CODE |
| HIGH | src/passivbot_monitor.py | 613 | except Exception: | CODE |
| HIGH | src/monitor_relay.py | 402 | except asyncio.CancelledError: | CODE |
| HIGH | src/monitor_relay.py | 600 | except asyncio.QueueEmpty: | CODE |
| HIGH | src/monitor_relay.py | 609 | except asyncio.QueueFull: | CODE |
| HIGH | src/bitget_normalization.py | 105 | except (TypeError, ValueError, OverflowError): | CODE |
| 140 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_missing_ema_fix.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_missing_ema_fix.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_realized_loss_gate.py | 493 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_realized_loss_gate.py | 495 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 197 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 882 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 884 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 355 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 357 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 467 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 469 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 910 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 912 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1006 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1008 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1060 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1062 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1152 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1154 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1645 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1647 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 143 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 145 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 1122 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 1124 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 3385 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 3387 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 311 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 313 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1208 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1813 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1815 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 2496 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 2498 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 8198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 8200 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 4269 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 4271 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6475 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6959 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6961 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 7685 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 7687 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 333 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 335 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 569 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 571 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 672 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 674 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 779 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 781 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 846 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 848 | # ============================================================================ | COMMENT |
| 181 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test_tradfi_providers.py | 64 | except Exception as e: | CODE |
| LOW | test_tradfi_providers.py | 129 | except Exception as e: | CODE |
| LOW | test_tradfi_providers.py | 155 | except Exception as e: | CODE |
| LOW | sync_tar.py | 295 | except Exception as exc: # pragma: no cover | CODE |
| MEDIUM | sync_tar.py | 296 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| LOW | run_with_logging.py | 144 | except Exception as e: | CODE |
| MEDIUM | run_with_logging.py | 145 | print(f"Error running wrapper: {e}", file=sys.stderr) | CODE |
| LOW | tests/test_wel_auto_reducer.py | 5 | except Exception: # pragma: no cover - exercised when rust extension is missing | CODE |
| LOW | tests/conftest.py | 22 | except Exception: | CODE |
| LOW | tests/conftest.py | 36 | except Exception: | CODE |
| MEDIUM | tests/test_live_candlestick_manager.py | 80 | def test_historical_range_per_exchange(tmp_path, ex_id): | CODE |
| MEDIUM | tests/test_live_candlestick_manager.py | 133 | def test_historical_range_timeframes(tmp_path, ex_id, tf): | CODE |
| MEDIUM | tests/test_live_candlestick_manager.py | 177 | def test_present_range_includes_current_minute_per_exchange(tmp_path, ex_id): | CODE |
| MEDIUM | tests/test_live_candlestick_manager.py | 229 | def test_latest_ema_metrics_per_exchange(tmp_path, ex_id, span, tf): | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 66 | except Exception: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 73 | except Exception: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 83 | except Exception as e: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 126 | except Exception: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 136 | except Exception as e: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 171 | except Exception: | CODE |
| LOW⚡ | tests/test_live_candlestick_manager.py | 180 | except Exception as e: | CODE |
| LOW | tests/test_live_candlestick_manager.py | 213 | except Exception: | CODE |
| LOW | tests/test_live_candlestick_manager.py | 232 | except Exception as e: | CODE |
| LOW | tests/test_live_candlestick_manager.py | 290 | except Exception: | CODE |
| LOW | tests/test_candle_interval.py | 10 | except Exception: # pragma: no cover - exercised when the extension is unavailable | CODE |
| LOW | tests/test_twel_enforcer.py | 5 | except Exception: # pragma: no cover - executed when the extension is unavailable | CODE |
| MEDIUM | tests/test_monitor_publisher.py | 298 | def write_events(worker_no): | CODE |
| LOW | tests/test_monitor_publisher.py | 310 | except Exception as exc: | CODE |
| LOW | tests/test_entries_sizing.py | 5 | except Exception: # pragma: no cover - exercised when the extension is unavailable | CODE |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 31 | except Exception as e: | CODE |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 42 | except Exception: | CODE |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 61 | except Exception: | CODE |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 88 | except Exception: | CODE |
| MEDIUM | tests/test_ccxt_fetch_ohlcv_current_minute.py | 28 | def test_fetch_ohlcv_includes_current_minute(exid): | CODE |
| LOW | tests/test_unstucking.py | 7 | except Exception: # pragma: no cover - exercised when rust extension missing | CODE |
| MEDIUM | tests/test_utils_maps.py | 835 | def write_maps(thread_id): | CODE |
| LOW | tests/test_utils_maps.py | 848 | except Exception as e: | CODE |
| MEDIUM | tests/test_market_snapshot.py | 1430 | def observe_boundary(): | CODE |
| LOW | tests/test_gate_entries_by_twel_complex.py | 8 | except Exception: # pragma: no cover - exercised when the extension is unavailable | CODE |
| LOW | container/render_config.py | 38 | except Exception: | CODE |
| LOW | container/render_config.py | 42 | except Exception as exc: | CODE |
| MEDIUM | src/fill_events_manager.py | 118 | def _fill_number(value, converter): | CODE |
| LOW⚡ | src/fill_events_manager.py | 3609 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 226 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 252 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 322 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 330 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 349 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 568 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 615 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 640 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 645 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 717 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 734 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 1839 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 1925 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 1952 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 1986 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 2041 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 2100 | except Exception: | CODE |
| 925 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test_tradfi_providers.py | 34 | CODE | |
| LOW | sync_tar.py | 12 | CODE | |
| LOW | run_with_logging.py | 13 | CODE | |
| LOW | tests/test_console_admission.py | 194 | CODE | |
| LOW | tests/test_missing_ema_fix.py | 11 | CODE | |
| LOW | tests/test_candlestick_manager_locking.py | 1 | CODE | |
| LOW | tests/test_hsl_fake_cycle.py | 12 | CODE | |
| LOW | tests/test_pareto_explorer.py | 1 | CODE | |
| LOW | tests/test_binance_ohlcv_v2_archive.py | 14 | CODE | |
| LOW | tests/test_run_fake_live.py | 1 | CODE | |
| LOW | tests/test_sync_tar.py | 1 | CODE | |
| LOW | tests/test_realized_loss_gate.py | 6 | CODE | |
| LOW | tests/test_realized_loss_gate.py | 7 | CODE | |
| LOW | tests/test_realized_loss_gate.py | 9 | CODE | |
| LOW | tests/test_entry_ema_migration.py | 1 | CODE | |
| LOW | tests/test_candlestick_manager.py | 10 | CODE | |
| LOW | tests/test_candlestick_manager.py | 3666 | CODE | |
| LOW | tests/test_fake_exchange.py | 1 | CODE | |
| LOW | tests/test_hlcv_preparation.py | 17 | CODE | |
| LOW | tests/test_hlcv_preparation.py | 19 | CODE | |
| LOW | tests/test_hlcv_preparation.py | 21 | CODE | |
| LOW | tests/test_hlcv_preparation.py | 22 | CODE | |
| LOW | tests/test_hlcv_preparation.py | 22 | CODE | |
| LOW | tests/test_pareto_compress.py | 1 | CODE | |
| LOW | tests/test_live_config_preflight.py | 1 | CODE | |
| LOW | tests/test_ohlcvs_doctor.py | 1 | CODE | |
| LOW | tests/test_live_restart_smoke_collection.py | 1 | CODE | |
| LOW | tests/test_merge_paretos_tool.py | 1 | CODE | |
| LOW | tests/test_balance_composition.py | 1 | CODE | |
| LOW | tests/test_hsl_reconciler.py | 4 | CODE | |
| LOW | tests/test_live_performance_report.py | 1 | CODE | |
| LOW | tests/test_compose_coin_overrides_tool.py | 1 | CODE | |
| LOW | tests/test_unstucking_safeguards.py | 3 | CODE | |
| LOW | tests/test_stock_perps.py | 12 | CODE | |
| LOW | tests/test_container_runtime_contract.py | 1 | CODE | |
| LOW | tests/test_ema_anchor_analysis.py | 2 | CODE | |
| LOW | tests/test_binance_ohlcv_archive.py | 8 | CODE | |
| LOW | tests/test_suite_config_sources.py | 1 | CODE | |
| LOW | tests/test_live_repository_prepare.py | 1 | CODE | |
| LOW | tests/test_rust_utils.py | 2 | CODE | |
| LOW | tests/test_rust_utils.py | 11 | CODE | |
| LOW | tests/test_live_process_report.py | 1 | CODE | |
| LOW | tests/test_coin_overrides_paths.py | 4 | CODE | |
| LOW | tests/test_live_incident_bundle.py | 1 | CODE | |
| LOW | tests/test_repro_harness.py | 1 | CODE | |
| LOW | tests/test_hsl_best_effort_reference.py | 4 | CODE | |
| LOW | tests/test_suite_artifacts.py | 2 | CODE | |
| LOW | tests/test_backtest_analysis.py | 18 | CODE | |
| LOW | tests/test_live_smoke_report.py | 1 | CODE | |
| LOW | tests/test_live_smoke_report.py | 8 | CODE | |
| LOW | tests/test_live_smoke_report.py | 9 | CODE | |
| LOW | tests/test_live_restart_smoke_orchestrator.py | 1 | CODE | |
| LOW | tests/test_live_restart_smoke_plan.py | 1 | CODE | |
| LOW | tests/test_live_restart_executor.py | 1 | CODE | |
| LOW | tests/test_passivbot_balance_split.py | 42 | CODE | |
| LOW | tests/test_position_fill_sync_fake_live.py | 11 | CODE | |
| LOW | tests/test_inspect_ohlcvs_tool.py | 1 | CODE | |
| LOW | tests/test_candlestick_manager_edge_cases.py | 13 | CODE | |
| LOW | tests/test_candlestick_manager_edge_cases.py | 24 | CODE | |
| LOW | tests/test_candlestick_manager_edge_cases.py | 24 | CODE | |
| 384 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sync_tar.py | 100 | CODE | |
| LOW | run_with_logging.py | 44 | CODE | |
| LOW | tests/test_excess_allowance_migration.py | 17 | CODE | |
| LOW | tests/conftest.py | 13 | CODE | |
| LOW | tests/conftest.py | 165 | CODE | |
| LOW | tests/test_adaptive_optimize_bounds.py | 263 | CODE | |
| LOW | tests/test_fill_refresh_reuse.py | 61 | CODE | |
| LOW | tests/test_hsl_trace.py | 24 | CODE | |
| LOW | tests/hsl_reference_replay.py | 428 | CODE | |
| LOW | tests/hsl_reference_replay.py | 584 | CODE | |
| LOW | tests/test_fill_events_manager.py | 8866 | CODE | |
| LOW | tests/test_protective_close_contract.py | 102 | CODE | |
| LOW | tests/test_protective_close_contract.py | 197 | CODE | |
| LOW | tests/test_protective_close_contract.py | 259 | CODE | |
| LOW | tests/test_hsl_config.py | 401 | CODE | |
| LOW | tests/hsl_worker_benchmark.py | 37 | CODE | |
| LOW | tests/test_hsl_snapshot.py | 96 | CODE | |
| LOW | tests/hsl_reference_controller.py | 41 | CODE | |
| LOW | tests/test_orchestrator_integration.py | 77 | CODE | |
| LOW | tests/hsl_reference.py | 330 | CODE | |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 28 | CODE | |
| LOW | tests/test_hsl_monitor_equity.py | 75 | CODE | |
| LOW | tests/test_position_fill_sync_fake_live.py | 30 | CODE | |
| LOW | tests/test_position_fill_sync_fake_live.py | 79 | CODE | |
| LOW | tests/test_position_fill_sync_fake_live.py | 102 | CODE | |
| LOW | tests/test_unstuck_ema_backtest.py | 10 | CODE | |
| LOW | tests/test_cache_lock_races.py | 112 | CODE | |
| LOW | tests/test_hsl_live.py | 35 | CODE | |
| LOW | tests/test_hsl_live.py | 378 | CODE | |
| LOW | tests/test_hsl_live.py | 740 | CODE | |
| LOW | tests/test_hsl_live.py | 782 | CODE | |
| LOW | tests/test_hsl_live.py | 1410 | CODE | |
| LOW | tests/test_hsl_live.py | 1885 | CODE | |
| LOW | tests/test_hsl_live.py | 78 | CODE | |
| LOW | tests/test_adaptive_entry_cooldown.py | 725 | CODE | |
| LOW | tests/test_hsl_runtime.py | 1070 | CODE | |
| LOW | tests/test_diagnostic_valuation.py | 93 | CODE | |
| LOW | tests/test_hsl_reference_replay.py | 272 | CODE | |
| LOW | tests/test_hsl_reference_replay.py | 367 | CODE | |
| LOW | tests/test_gate_entries_by_twel_complex.py | 209 | CODE | |
| LOW | tests/test_orchestrator_json_api.py | 99 | CODE | |
| LOW | tests/test_orchestrator_json_api.py | 349 | CODE | |
| LOW | tests/test_simulation_offline.py | 502 | CODE | |
| LOW | tests/exchanges/test_lighter.py | 901 | CODE | |
| LOW | tests/optimization/test_gpu_service.py | 3350 | CODE | |
| LOW | tests/optimization/test_config_adapter.py | 25 | CODE | |
| LOW | tests/optimization/test_gpu_hsl_cli.py | 224 | CODE | |
| LOW | tests/optimization/test_gpu_replay_progress.py | 79 | CODE | |
| LOW | tests/optimization/test_gpu_prepared_data.py | 48 | CODE | |
| LOW | tests/optimization/test_gpu_drift_signal.py | 108 | CODE | |
| LOW | tests/optimization/test_gpu_adaptive_timing.py | 69 | CODE | |
| LOW | tests/optimization/test_prepared_dataset_identity.py | 71 | CODE | |
| LOW | pytests/test_gate_entries_by_twel_complex.py | 185 | CODE | |
| LOW | src/suite_runner.py | 354 | CODE | |
| LOW | src/suite_runner.py | 410 | CODE | |
| LOW | src/suite_runner.py | 600 | CODE | |
| LOW | src/suite_runner.py | 943 | CODE | |
| LOW | src/suite_runner.py | 1978 | CODE | |
| LOW | src/suite_runner.py | 2045 | CODE | |
| LOW | src/fill_events_manager.py | 367 | CODE | |
| 448 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_pareto_dash.py | 188 | "stress__adg_usd<=0.05 || stress__adg_usd>=0.1" | CODE |
| HIGH⚡ | tests/test_broker_codes.py | 16 | path.write_text('{ bybit: "custom-bybit", hyperliquid: null }') | CODE |
| HIGH⚡ | tests/test_analysis_visibility.py | 89 | with pytest.raises(ValueError, match="backtest.visible_metrics must be null, \\[\\], or"): | CODE |
| HIGH⚡ | tests/test_config_pipeline.py | 1975 | ValueError, match="backtest.visible_metrics must be null, \\[\\], or" | CODE |
| HIGH⚡ | tests/test_live_restart_executor.py | 677 | "- cd /one && passivbot live bot.json -u binance_01\n", | CODE |
| HIGH⚡ | tests/test_live_restart_executor.py | 682 | "- cd /two && passivbot live bot.json -u binance_01\n", | CODE |
| HIGH⚡ | tests/test_clean_config_tool.py | 274 | text = '{"z": [1.234567890123456789, -0, 1e400, 1E-9999], "z": null, "s": "☃", "_raw": {"analysis": 3}, "yes": true} | CODE |
| HIGH | tests/test_hsl_live.py | 152 | lambda value, grids: '{"decision": null}', | CODE |
| HIGH | tests/test_hsl_status_consumers.py | 114 | "const compactEntries = (xs) => xs.filter((x) => x[1] != null); const fmtCompact = (v) => String(v);\n" | CODE |
| HIGH⚡ | tests/test_hsl_diagnostics.py | 412 | assert.equal(hslScopeStatus({action: null, tier: 'inactive', availability: 'available'}), 'inactive'); | CODE |
| HIGH⚡ | tests/test_hsl_diagnostics.py | 413 | assert.equal(hslScopeStatus({action: null, tier: null, availability: 'unavailable'}), 'unavailable'); | CODE |
| HIGH | tests/test_simulation_offline.py | 73 | @pytest.mark.parametrize("content", [None, "bad json", "{}", '{"x": null}']) | CODE |
| HIGH | tests/optimization/test_gpu_mps.py | 1945 | output[0] = long_entry && short_entry && long_close && short_close | CODE |
| HIGH | tests/optimization/test_gpu_mps.py | 7590 | assert "long_close_fill || long_entry_fill" in source | STRING |
| HIGH | tests/optimization/test_gpu_mps.py | 7591 | assert "short_close_fill || short_entry_fill" in source | STRING |
| HIGH | tests/optimization/test_gpu_hsl_episode_boundaries.py | 59 | thread HslState& owner = h.signal_mode == HSL_SIGNAL_UNIFIED && short_owner != 0 | CODE |
| HIGH | src/analysis_visibility.py | 109 | "backtest.visible_metrics must be null, [], or a list/tuple/set of metric names" | CODE |
| HIGH⚡ | src/tools/pareto_plot_page.py | 47 | indices.push(row); | CODE |
| HIGH⚡ | src/tools/pareto_plot_page.py | 49 | let ideal = null, selected = null; | CODE |
| HIGH⚡ | src/tools/pareto_plot_page.py | 50 | if (indices.length && goals.every(goal => goal === "min" || goal === "max")) { | CODE |
| HIGH | src/tools/pareto_plot_page.py | 76 | const padding = (high - low || Math.abs(low) || 1) * 0.06; | CODE |
| HIGH | src/tools/pareto_plot_page.py | 78 | return dimensions === 2 && goal === "max" ? range.reverse() : range; | CODE |
| HIGH | src/tools/pareto_plot_page.py | 110 | traces.push(ideal, chosen); | CODE |
| HIGH | src/tools/pareto_plot_page.py | 128 | if (layout.scene && previous?.scene?.camera && layout.uirevision === previous.uirevision) { | CODE |
| HIGH | src/tools/pareto_plot_page.py | 137 | if (selected.length === 2) selected.push(available.find(metric => !selected.includes(metric.key))?.key); | CODE |
| HIGH | src/tools/pareto_plot_page.py | 172 | for (const option of select.options) option.disabled = !byKey.get(option.value).count || activeAxes().some(( | CODE |
| HIGH | src/tools/pareto_plot_page.py | 172 | for (const option of select.options) option.disabled = !byKey.get(option.value).count || activeAxes().some(( | CODE |
| HIGH | src/tools/pareto_plot_page.py | 228 | goalSelects.forEach((select,index) => select.addEventListener("change",() => {directions.set(selected[index],select. | CODE |
| HIGH | src/tools/pareto_plot_page.py | 228 | goalSelects.forEach((select,index) => select.addEventListener("change",() => {directions.set(selected[index],select. | CODE |
| HIGH | src/config/scoring.py | 213 | raise ValueError(f"{path} must be a scenario label string or null, got {value!r}") | CODE |
| HIGH | src/config/scoring.py | 323 | "{metric: ..., goal: min|max, scenario: label|null, reducer: mean|min|max|std|median}" | CODE |
| HIGH | src/config/strategy_spec.py | 18 | "`cd passivbot-rust && maturin develop --release && cd ..`, then retry." | CODE |
| HIGH | src/optimization/config_adapter.py | 273 | - [low, high, 0] or [low, high, null]: treated as continuous | STRING |
| HIGH | src/optimization/bounds.py | 192 | - [low, high, 0] or [low, high, null]: continuous | STRING |
| HIGH | src/optimization/bounds.py | 228 | "Bound %s step is null; treating as continuous and using sig_digits.", key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_kucoin_exchange_config.py | 406 | # leverage is clamped by max_leverage | COMMENT |
| MEDIUM⚡ | tests/test_stock_perps.py | 1108 | # Cross margin symbol should use full leverage | COMMENT |
| MEDIUM | tests/test_stock_perps.py | 1067 | # Mock markets with different max leverage values | COMMENT |
| MEDIUM⚡ | tests/test_stock_perps.py | 1049 | """Tests for isolated margin leverage capping.""" | STRING |
| MEDIUM⚡ | tests/test_stock_perps.py | 1052 | """Test that isolated margin symbols have leverage capped appropriately.""" | STRING |
| MEDIUM⚡ | tests/test_stock_perps.py | 1310 | """Tests for automatic isolated margin leverage calculation.""" | STRING |
| MEDIUM⚡ | tests/test_stock_perps.py | 1313 | """Test minimum leverage calculation based on TWEL.""" | STRING |
| MEDIUM | tests/test_stock_perps.py | 146 | """Test HIP-3 max leverage constant is 10.""" | STRING |
| MEDIUM | tests/test_stock_perps.py | 1326 | """Test that the leverage formula ensures margin can always be covered.""" | STRING |
| MEDIUM | tests/test_hsl_live.py | 1015 | # The generic harness suppresses writes during startup. This regression | COMMENT |
| MEDIUM | tests/test_hsl_live.py | 1031 | # Retain the harness's start_bot return boundary; otherwise normal | COMMENT |
| MEDIUM | tests/exchanges/test_ccxt_bot.py | 405 | """Test that leverage is set for each symbol when supported.""" | STRING |
| MEDIUM | tests/exchanges/test_ccxt_bot.py | 455 | """Test that leverage errors are logged and re-raised.""" | STRING |
| MEDIUM | tests/exchanges/test_weex.py | 89 | "https://api-contract.weex.com/capi/v3/account/leverage", | CODE |
| MEDIUM | tests/exchanges/test_weex.py | 104 | "https://api-contract.weex.com/capi/v3/account/leverage", | CODE |
| MEDIUM⚡ | tests/exchanges/test_bitunix.py | 2410 | # A margin-mode change may reset venue leverage, so set it again even | COMMENT |
| MEDIUM⚡ | tests/exchanges/test_bitunix.py | 2411 | # when the pre-mutation leverage happened to match. | COMMENT |
| MEDIUM | src/candlestick_manager.py | 9436 | # The deterministic fake-live harness intentionally permits sparse | COMMENT |
| MEDIUM | src/pareto_store.py | 977 | # Create a streamlined figure with just two key plots | COMMENT |
| LOW | src/procedures.py | 548 | # 1) If no exchange is specified and all coins have valid cached timestamps, just return ftss | COMMENT |
| MEDIUM | src/hlcv_preparation.py | 5956 | """Estimate exchange quote-volume ratios from robust complete-day overlap. | STRING |
| MEDIUM | src/exchanges/hyperliquid.py | 35 | # HIP-3 stock perps have a max leverage of 10x | COMMENT |
| MEDIUM | src/exchanges/hyperliquid.py | 221 | # For isolated-only markets (HIP-3), cap at 10x leverage | COMMENT |
| MEDIUM⚡ | src/exchanges/hyperliquid.py | 2014 | """Set leverage and margin mode for Hyperliquid symbols. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 970 | """Calculate minimum leverage required for isolated margin positions. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 992 | """Calculate the appropriate leverage for a symbol. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 1102 | """Set leverage and margin mode for each symbol. | STRING |
| MEDIUM⚡ | src/exchanges/weex.py | 174 | """WEEX leverage setup is an entry prerequisite, not a close prerequisite.""" | STRING |
| MEDIUM⚡ | src/exchanges/gateio.py | 340 | """Apply the configured leverage and margin mode through Gate's leverage endpoint.""" | STRING |
| MEDIUM⚡ | src/exchanges/gateio.py | 368 | """Gate leverage is an entry prerequisite, not a close prerequisite.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_missing_ema_fix.py | 261 | CODE | |
| LOW | tests/test_candlestick_manager.py | 2037 | CODE | |
| LOW | tests/test_candlestick_manager.py | 2097 | CODE | |
| LOW | tests/test_live_performance_report.py | 40 | CODE | |
| LOW | tests/test_fill_events_manager.py | 6506 | CODE | |
| LOW | tests/test_unstucking_safeguards.py | 3189 | CODE | |
| LOW | tests/test_unstucking_safeguards.py | 606 | CODE | |
| LOW | tests/test_live_incident_bundle.py | 24 | CODE | |
| LOW | tests/test_trailing_inspect_tool.py | 47 | CODE | |
| LOW | tests/test_orchestrator_integration.py | 240 | CODE | |
| LOW | tests/test_live_smoke_report.py | 32 | CODE | |
| LOW | tests/test_unstucking.py | 13 | CODE | |
| LOW | tests/test_order_churn_gate.py | 82 | CODE | |
| LOW | tests/test_live_event_query.py | 24 | CODE | |
| LOW | tests/test_hsl_reference_replay.py | 14 | CODE | |
| LOW | tests/test_orchestrator_json_api.py | 278 | CODE | |
| LOW | tests/optimization/test_gpu_hsl_multicoin.py | 19 | CODE | |
| LOW | tests/optimization/test_gpu_mps.py | 4651 | CODE | |
| LOW | tests/optimization/test_gpu_mps.py | 11291 | CODE | |
| LOW | tests/optimization/test_gpu_mps.py | 16126 | CODE | |
| LOW | pytests/test_unstucking_cases.py | 7 | CODE | |
| LOW | src/fill_events_manager.py | 2981 | CODE | |
| LOW | src/passivbot.py | 730 | CODE | |
| LOW | src/passivbot.py | 11726 | CODE | |
| LOW | src/monitor_web.py | 46 | CODE | |
| LOW | src/candlestick_manager.py | 985 | CODE | |
| LOW | src/candlestick_manager.py | 6292 | CODE | |
| LOW | src/candlestick_manager.py | 7613 | CODE | |
| LOW | src/monitor_tui.py | 1450 | CODE | |
| LOW | src/monitor_dev.py | 148 | CODE | |
| LOW | src/logging_setup.py | 210 | CODE | |
| LOW | src/hlcv_preparation.py | 412 | CODE | |
| LOW | src/tools/probe_ccxt_ticker_endpoints.py | 1970 | CODE | |
| LOW | src/tools/probe_ccxt_ticker_endpoints.py | 2217 | CODE | |
| LOW | src/exchanges/hyperliquid.py | 1758 | CODE | |
| LOW | src/config/load.py | 25 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 837 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 886 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 931 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 976 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 1013 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 1050 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 1094 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 1479 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 2080 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 2741 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 2985 | CODE | |
| LOW | src/optimization/gpu/mps_kernel.py | 3283 | CODE | |
| LOW | src/optimization/backends/gpu_backend.py | 4535 | CODE | |
| LOW | src/live/smoke_report.py | 7694 | CODE | |
| LOW | src/live/smoke_report.py | 8052 | CODE | |
| LOW | src/live/smoke_report.py | 9177 | CODE | |
| LOW | src/live/restart_executor.py | 516 | CODE | |
| LOW | src/live/restart_smoke_plan.py | 414 | CODE | |
| LOW | src/live/incident_bundle.py | 176 | CODE | |
| LOW | src/live/incident_bundle.py | 1100 | CODE | |
| LOW | src/live/event_bus.py | 3762 | CODE | |
| LOW | src/live/restart_smoke_orchestrator.py | 361 | CODE | |
| LOW | src/live/event_query.py | 462 | CODE | |
| LOW | src/live/event_query.py | 1306 | CODE | |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_realized_loss_gate.py | 134 | def _set_pnl_lookback(bot, *, lookback_days: float | str, now_ms: int) -> None: | CODE |
| LOW | tests/test_passivbot_balance_split.py | 2794 | def _set_pnl_lookback(bot, *, lookback_days: float, now_ms: int) -> None: | CODE |
| LOW | container/render_config.py | 67 | def set_nested(config: dict[str, Any], path: list[str], value: Any) -> None: | CODE |
| LOW | src/fill_events_manager.py | 66 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/fill_events_manager.py | 2256 | def set_history_scope(self, scope: str) -> None: | CODE |
| LOW | src/fill_events_manager.py | 5932 | def set_history_scope(self, scope: str) -> None: | CODE |
| LOW | src/passivbot.py | 8813 | async def update_trailing_data(self) -> None: | CODE |
| LOW⚡ | src/optimize.py | 788 | def _set_candidate_metrics(individual, metrics_payload) -> None: | CODE |
| LOW | src/optimize.py | 2877 | def _set_optimize_bound(config: dict, bound_key: str, value) -> None: | CODE |
| LOW | src/market_snapshot.py | 11 | __all__ = [ | CODE |
| LOW | src/warmup_utils.py | 559 | __all__ = [ | CODE |
| LOW⚡ | src/candlestick_manager.py | 1283 | def set_stop_requested_callback(self, callback: Optional[Callable[[], bool]]) -> None: | CODE |
| LOW | src/candlestick_manager.py | 1312 | def _setup_logging(self) -> None: | CODE |
| LOW | src/candlestick_manager.py | 4877 | def _set_inception_ts(self, symbol: str, ts: int, *, save: bool = True) -> None: | CODE |
| LOW | src/candlestick_manager.py | 5135 | async def _set_global_rate_limit(self, backoff_seconds: float = 5.0) -> None: | CODE |
| LOW | src/candlestick_manager.py | 9133 | def set_current_close(self, symbol: str, price: float, timestamp_ms: int) -> None: | CODE |
| LOW | src/candlestick_manager.py | 10787 | __all__ = [ | CODE |
| LOW | src/monitor_tui.py | 375 | def set_log_file(self, path: Optional[str]) -> None: | CODE |
| LOW | src/strategy_warmup.py | 239 | __all__ = [ | CODE |
| LOW | src/freshness_ledger.py | 10 | __all__ = [ | CODE |
| LOW | src/planning_snapshot.py | 10 | __all__ = [ | CODE |
| LOW | src/binance_ohlcv_archive.py | 373 | __all__ = [ | CODE |
| LOW | src/tradfi_data.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/pure_funcs.py | 10 | __all__ = [ | CODE |
| LOW | src/data_packets.py | 12 | __all__ = [ | CODE |
| LOW | src/custom_endpoint_overrides.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/custom_endpoint_overrides.py | 484 | __all__ = [ | CODE |
| LOW | src/config_transform.py | 3 | __all__ = ["ConfigTransformTracker", "record_transform"] | CODE |
| LOW | src/ohlcv_utils.py | 379 | __all__ = [ | CODE |
| LOW | src/logging_setup.py | 146 | def update_stable_log_alias(alias_path: str | Path, target_path: str | Path) -> None: | CODE |
| LOW | src/hlcv_preparation.py | 6228 | __all__ = [ | CODE |
| LOW | src/tools/ohlcvs_doctor.py | 326 | def _set_symbol_bounds_exact(catalog: OhlcvCatalog, bounds: dict[tuple[str, str, str], tuple[int, int]]) -> None: | CODE |
| LOW | src/tools/merge_paretos.py | 346 | def _set_nested_bound(target: dict[str, Any], path: tuple[str, ...], value: list[int | float]) -> None: | CODE |
| LOW | src/tools/compose_coin_overrides.py | 411 | def _set_path(config: dict, path: tuple[str, ...], value: Any) -> None: | CODE |
| LOW⚡ | src/tools/iterative_backtester.py | 876 | def _update_best_run(self, run: RunSummary) -> None: | CODE |
| LOW⚡ | src/tools/iterative_backtester.py | 885 | def _update_pareto_front(self) -> None: | CODE |
| LOW | src/exchanges/fake.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/exchanges/bitunix.py | 2313 | async def update_exchange_config(self) -> None: | CODE |
| LOW | src/exchanges/bitunix.py | 2324 | async def update_exchange_config_by_symbols(self, symbols: Iterable[str]) -> None: | CODE |
| LOW | src/exchanges/bitunix.py | 2360 | def set_market_specific_settings(self) -> None: | CODE |
| LOW | src/config/optimize_bounds.py | 288 | def set_flat_optimize_bound(bounds: dict, strategy_kind: str, flat_key: str, value) -> None: | CODE |
| LOW | src/config/__init__.py | 14 | __all__ = [ | CODE |
| LOW | src/config/strategy.py | 94 | def _set_path(mapping: dict, key: str, value) -> None: | CODE |
| LOW | src/config/strategy_spec.py | 22 | def _set_path(mapping: dict, path: tuple[str, ...], value: Any) -> None: | CODE |
| LOW | src/optimization/warmup.py | 54 | def _set_path(config: dict, path: Sequence[str], value) -> None: | CODE |
| LOW | src/optimization/warmup.py | 435 | __all__ = [ | CODE |
| LOW | src/optimization/backends/deap_backend.py | 67 | def _set_deap_worker_globals(evaluator, overrides_list: Sequence[Any] | None) -> None: | CODE |
| LOW | src/live/state_refresh.py | 606 | def update_stats(stats: dict[str, int], value: int) -> None: | CODE |
| LOW | src/live/performance_report.py | 1535 | def _update_debug_profiles(state: dict[str, Any], data: dict[str, Any]) -> None: | CODE |
| LOW | src/live/performance_report.py | 2068 | def _set_elapsed(item: dict[str, Any], *, started_ts: int | None) -> None: | CODE |
| LOW⚡ | src/live/event_emitters.py | 45 | def set_live_event_context_ids(bot: Any, **kwargs: str | None) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/suite_runner.py | 281 | Filter scenarios to only include those matching the given labels. Args: scenarios: List of scenario dicts ( | STRING |
| HIGH | src/procedures.py | 117 | Creates directory and subdirectories for a given filepath if they don't exist, then returns the path as a Path | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 640 | Fetch open orders, optionally filtered by symbol. Args: symbol: Optional symbol to filter orders. | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 933 | Check if a symbol requires isolated margin mode. Override in subclasses to detect exchange-specific isolated-on | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1235 | Fetch OHLCV candlestick data. Args: symbol: Trading pair symbol. timeframe: Candle time | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1257 | Fetch 1-minute OHLCV data with pagination support. Args: symbol: Trading pair symbol. s | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1305 | Template method: Fetch trade history for PnL tracking. Uses hooks: - _do_fetch_pnls(): Call exchange AP | STRING |
| HIGH | src/optimization/bounds.py | 185 | Extract and validate a Bound from config value. Supported formats: - Single value: fixed param | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_candlestick_manager.py | 1885 | # Create a real shard for day0 with minimal data | COMMENT |
| MEDIUM⚡ | tests/test_rust_utils.py | 284 | # Create a root-level .rs file | COMMENT |
| MEDIUM⚡ | tests/test_rust_utils.py | 288 | # Create a subdirectory .rs file | COMMENT |
| MEDIUM⚡ | tests/test_utils_maps.py | 883 | # Create a stale lock file (older than threshold) | COMMENT |
| MEDIUM⚡ | tests/test_utils_maps.py | 891 | # Create a fresh lock file (should NOT be removed) | COMMENT |
| MEDIUM⚡ | tests/test_candlestick_manager_edge_cases.py | 315 | # Create a valid shard first | COMMENT |
| MEDIUM | tests/test_candlestick_manager_legacy_cache.py | 159 | # Create a partial legacy shard: continuous minutes, but only 2 candles (not a full day). | COMMENT |
| MEDIUM | tests/optimization/test_optimize.py | 3966 | # Create a concrete fitness class from ConstraintAwareFitness | COMMENT |
| MEDIUM | src/passivbot.py | 11703 | # Create the FillEventsManager with its own cache path | COMMENT |
| MEDIUM | src/plotting.py | 1289 | # Create the plot | COMMENT |
| MEDIUM | src/pareto_store.py | 977 | # Create a streamlined figure with just two key plots | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 81 | ### Step 1: Clone the Repository | COMMENT |
| LOW | README.md | 93 | ### Step 2: Install Rust | COMMENT |
| LOW | README.md | 100 | ### Step 3: Create and Activate a Virtual Environment | COMMENT |
| LOW | README.md | 134 | ### Step 4: Install Passivbot | COMMENT |
| LOW | README.md | 162 | ### Step 6: Add API keys | COMMENT |
| LOW | README.md | 172 | ### Step 7: Run Passivbot | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 6719 | // Step 1: initial balance | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 6739 | // Step 2: simulate a fill that changes raw balance but snapped stays | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 836 | # Step 2: Load with warmup=3000 → hit | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 840 | # Step 3: Load with warmup=5000 → miss | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 844 | # Step 4: Save with warmup=5000 (overwrite same slot) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 859 | # Step 5: Load with warmup=3000 → hit (ratcheted up) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 863 | # Step 6: Load with warmup=5000 → hit | COMMENT |
| LOW | tests/test_cache_warmup_reuse.py | 824 | # Step 1: Save with warmup=3000 | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6968 | # Step 1: Fetch trades (fill-level data with fees) | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6974 | # Step 2: Collect unique order IDs | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6981 | # Step 3: Fetch closed orders for PnL | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6984 | # Step 4: Merge trades with order PnL | COMMENT |
| LOW⚡ | src/utils.py | 336 | # Step 1: remove base keys when *_usd carries the same value. | COMMENT |
| LOW⚡ | src/utils.py | 343 | # Step 2: remove duplicate permutations sharing identical values. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_utils_maps.py | 887 | # Set mtime to 5 minutes ago (older than 180s threshold) | COMMENT |
| LOW | src/fill_events_manager.py | 7052 | # Check if it's a rate limit error in disguise | COMMENT |
| LOW | src/fill_events_manager.py | 7173 | # Check if we've collected all needed orders | COMMENT |
| LOW | src/fill_events_manager.py | 7800 | # Check if we already know this orderId's clientOid | COMMENT |
| LOW | src/fill_events_manager.py | 8168 | # Check if we've reached the start boundary | COMMENT |
| LOW⚡ | src/passivbot.py | 3830 | # Check if mode is normal (not graceful_stop, manual, etc.) | COMMENT |
| LOW⚡ | src/passivbot.py | 3835 | # Check if we have a position already | COMMENT |
| LOW⚡ | src/passivbot.py | 3841 | # Check if there's an initial entry order for this symbol/pside | COMMENT |
| LOW | src/passivbot.py | 19949 | # Check if coins is a single string that needs to be split | COMMENT |
| LOW | src/candlestick_manager.py | 3031 | # Check if real data has replaced any previously synthetic timestamps | COMMENT |
| LOW | src/candlestick_manager.py | 6338 | # Check if already sorted to skip O(n log n) sort | COMMENT |
| LOW | src/utils.py | 2056 | # Check if the content is in list format | COMMENT |
| LOW | src/utils.py | 2152 | # Check if a default was provided via *args | COMMENT |
| LOW | src/tradfi_data.py | 863 | # Check if it's a known stock ticker | COMMENT |
| LOW | src/legacy_data_migrator.py | 241 | # Check if this matches what _sanitize_symbol would produce | COMMENT |
| LOW | src/legacy_data_migrator.py | 358 | # Check if it's a ccxt ID that needs standardization | COMMENT |
| LOW⚡ | src/legacy_data_migrator.py | 568 | # Check if already in correct dtype | COMMENT |
| LOW | src/tools/fill_events_dash.py | 842 | # Check if there's a result to consume | COMMENT |
| LOW | src/tools/generate_mcap_list.py | 30 | # Check if all required price fields are not None before comparing | COMMENT |
| LOW | src/tools/pareto_dash.py | 598 | # Check if j dominates i (j is better in all metrics) | COMMENT |
| LOW | src/exchanges/hyperliquid.py | 1470 | # Check if fetch_positions already got us a fresh balance | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | passivbot-rust/src/backtest.rs | 6719 | // Step 1: initial balance | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 6739 | // Step 2: simulate a fill that changes raw balance but snapped stays | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 836 | # Step 2: Load with warmup=3000 → hit | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 840 | # Step 3: Load with warmup=5000 → miss | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 844 | # Step 4: Save with warmup=5000 (overwrite same slot) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 859 | # Step 5: Load with warmup=3000 → hit (ratcheted up) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 863 | # Step 6: Load with warmup=5000 → hit | COMMENT |
| LOW | tests/test_cache_warmup_reuse.py | 824 | # Step 1: Save with warmup=3000 | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6968 | # Step 1: Fetch trades (fill-level data with fees) | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6974 | # Step 2: Collect unique order IDs | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6981 | # Step 3: Fetch closed orders for PnL | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6984 | # Step 4: Merge trades with order PnL | COMMENT |
| LOW⚡ | src/utils.py | 336 | # Step 1: remove base keys when *_usd carries the same value. | COMMENT |
| LOW⚡ | src/utils.py | 343 | # Step 2: remove duplicate permutations sharing identical values. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_run_fake_live.py | 366 | fake_user, restore = _install_fake_user_override(config, "scenario.hjson", None) | CODE |
| LOW⚡ | tests/test_run_fake_live.py | 368 | payload = passivbot_mod.load_user_info(fake_user) | CODE |
| LOW | tests/test_fake_exchange.py | 142 | bot.user = "fake_user" | CODE |
| LOW | tests/test_ticker_probe_tool.py | 355 | user="fake_user", | CODE |
| LOW | tests/test_ticker_probe_tool.py | 510 | user="fake_user", | CODE |
| LOW | tests/test_ticker_probe_tool.py | 1449 | user="fake_user", | CODE |
| LOW | tests/test_ticker_probe_tool.py | 1524 | user="fake_user", | CODE |
| LOW | tests/test_ticker_probe_tool.py | 1612 | user="fake_user", | CODE |
| LOW | tests/ccxt_upgrade/test_contract_tools.py | 129 | user="fake_user", | CODE |
| LOW | docs/fake_live.md | 203 | Use `--user <fake_user>` or point `live.user` at a fake entry you added to your local | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 385 | fake_user = user or str(config["live"].get("user") or "fake_runner") | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 386 | config["live"]["user"] = fake_user | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 395 | if requested_user == fake_user: | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 400 | return fake_user, lambda: setattr(passivbot_mod, "load_user_info", original) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/optimization/test_gpu_mps.py | 12821 | # quantized touch. Rust merges them before orchestration chooses the | STRING |
| MEDIUM | docs/plans/live_overengineering_audit_followup_plan.md | 209 | ### 7. `Passivbot` facade and orchestration ownership | COMMENT |
| MEDIUM | src/fill_events_manager.py | 2397 | # exhausted; orchestration owns indefinitely backed-off retries. | COMMENT |
| MEDIUM | src/fill_events_manager.py | 1890 | retry_count: int # Diagnostic count; orchestration owns retry timing | CODE |
| MEDIUM | src/passivbot.py | 12236 | # Configuration parsing and unrelated orchestration errors remain | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | passivbot-rust/src/types.rs | 501 | #[serde(default, alias = "filter_volume_drop_pct")] | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 341 | /// Synthetic backtest-only market fill slippage used for projected close PnL. | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 361 | /// Net realized pnl cumsum peak from fill history (statelessly reconstructed). | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 401 | /// structurally required bundle is ignored by consuming strategy | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 441 | pub symbol_idx: usize, | COMMENT |
| LOW | src/legacy_data_migrator.py | 201 | # Find all symbol directories | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/stock_perps.md | 306 | "api_key": "your_api_key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vpssync.sh | 3 | # Usage: | COMMENT |