Trading bot running on Bybit, Bitget, OKX, GateIO, Binance, Kucoin, WEEX and Hyperliquid
This report presents the forensic synthetic code analysis of enarjord/passivbot, a Python project with 2,050 GitHub stars. SynthScan v2.0 examined 468,242 lines of code across 615 source files, recording 9456 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 17.5 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 9456 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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_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_missing_ema_fix.py | 32 | async def test_get_latest_ema_close_with_leading_gaps(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_missing_ema_fix.py | 74 | async def test_missing_ema_raises_from_snapshot(monkeypatch): | CODE |
| LOW | tests/test_missing_ema_fix.py | 55 | async def test_get_latest_ema_close_no_candles_returns_nan(tmp_path, monkeypatch): | CODE |
| LOW | tests/test_missing_ema_fix.py | 106 | def get_hysteresis_snapped_balance(self): | CODE |
| LOW | tests/test_missing_ema_fix.py | 131 | async def test_missing_ema_raises_from_snapshot_with_return(monkeypatch): | CODE |
| LOW | tests/test_missing_ema_fix.py | 163 | def get_hysteresis_snapped_balance(self): | CODE |
| LOW | tests/test_missing_ema_fix.py | 188 | async def test_snapshot_orchestrator_rejects_unknown_rust_symbol_before_conversion( | CODE |
| LOW | tests/test_missing_ema_fix.py | 221 | def get_hysteresis_snapped_balance(self): | CODE |
| LOW | tests/test_missing_ema_fix.py | 267 | async def test_snapshot_orchestrator_rejects_malformed_output_envelope( | CODE |
| LOW | tests/test_missing_ema_fix.py | 300 | def get_hysteresis_snapped_balance(self): | CODE |
| LOW | tests/test_missing_ema_fix.py | 443 | def _make_orchestrator_payload(symbol, m1_close_pairs, m1_volume_pairs, m1_lr_pairs): | CODE |
| LOW | tests/test_missing_ema_fix.py | 602 | async def get_latest_ema_quote_volume( | CODE |
| LOW | tests/test_missing_ema_fix.py | 649 | def get_completed_candle_health(self, symbol, windows=None, now_ms=None): | CODE |
| LOW | tests/test_missing_ema_fix.py | 685 | async def get_projected_open_tail_ema_metrics( | CODE |
| LOW | tests/test_missing_ema_fix.py | 731 | async def get_latest_cached_ema_metrics( | CODE |
| LOW | tests/test_missing_ema_fix.py | 767 | def _pb_mode_to_orchestrator_mode(self, mode: str) -> str: | CODE |
| LOW | tests/test_missing_ema_fix.py | 784 | def _strategy_params_to_rust_dict(self, pside, symbol=None): | CODE |
| LOW | tests/test_missing_ema_fix.py | 820 | async def test_held_symbol_missing_ema_is_explicitly_scoped_for_rust(close_mode): | CODE |
| LOW | tests/test_missing_ema_fix.py | 862 | async def test_nan_close_ema_scopes_only_the_affected_symbol(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 903 | async def test_held_symbol_infinite_close_ema_remains_fatal(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 919 | async def test_flat_forager_universe_symbol_missing_close_ema_marks_unavailable(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 955 | async def test_forager_eligible_flat_normal_missing_close_ema_marks_unavailable(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1003 | async def test_mixed_forager_fixed_normal_side_missing_ema_is_scoped_in_rust(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1043 | async def test_forager_selected_flat_with_resting_entry_missing_ema_marks_unavailable(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1165 | async def test_disabled_opposite_side_does_not_block_flat_forager_degradation(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1234 | async def test_forager_resting_entry_under_bot_managed_override_can_degrade_and_cancel( | CODE |
| LOW | tests/test_missing_ema_fix.py | 1287 | async def test_forager_ranking_ema_degradation_authorizes_resting_entry_cancel(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1338 | async def test_forager_ranking_degradation_authorizes_only_affected_side(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1437 | async def test_orchestrator_ema_bundle_clears_stale_rank_feature_failures(): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1492 | async def test_kucoin_avax_close_ema_fallback_uses_previous_ema_not_price( | CODE |
| LOW | tests/test_missing_ema_fix.py | 1543 | async def test_close_ema_fallback_event_console_owns_normal_warning(caplog, monkeypatch): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1583 | async def test_close_ema_fallback_event_failure_keeps_legacy_warning(caplog, monkeypatch): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1627 | async def test_close_ema_fallback_legacy_summary_omits_raw_exception_text(caplog): | CODE |
| LOW | tests/test_missing_ema_fix.py | 1659 | async def test_candidate_ema_unavailable_logs_single_warning_summary(caplog): | CODE |
| 7058 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_missing_ema_fix.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_missing_ema_fix.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_realized_loss_gate.py | 677 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_realized_loss_gate.py | 679 | # --------------------------------------------------------------------------- | 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 | 192 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 1064 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_realized_loss_gate.py | 1066 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 263 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 265 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 375 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 377 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 783 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 785 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 879 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 881 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 933 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 935 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1025 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1027 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1518 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_hlcv_preparation.py | 1520 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 51 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 53 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 995 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 997 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 3088 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_hlcv_preparation.py | 3090 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 257 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1154 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1757 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 1759 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 2440 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 2442 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 8142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fill_events_manager.py | 8144 | # --------------------------------------------------------------------------- | 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 | 4213 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 4215 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6419 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6421 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6903 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 6905 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 7629 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_fill_events_manager.py | 7631 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 331 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 333 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 567 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 569 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 670 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 672 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 777 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_orchestrator_integration.py | 779 | # ============================================================================ | COMMENT |
| 185 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 | 291 | except Exception as exc: # pragma: no cover | CODE |
| MEDIUM | sync_tar.py | 292 | 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 |
| 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 |
| 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_candle_interval.py | 10 | except Exception: # pragma: no cover - exercised when the extension is unavailable | CODE |
| LOW | tests/test_equity_hard_stop_rolling_peak.py | 5 | except Exception: # pragma: no cover | 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 |
| LOW | tests/test_utils_maps.py | 377 | except Exception as e: | CODE |
| MEDIUM | tests/test_utils_maps.py | 364 | def write_maps(thread_id): | 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 |
| LOW | src/suite_runner.py | 1376 | except Exception as exc: # pragma: no cover - defensive logging | CODE |
| LOW | src/suite_runner.py | 1455 | except Exception as exc: | CODE |
| LOW⚡ | src/fill_events_manager.py | 346 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 356 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 706 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 711 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 1885 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 3614 | except Exception as exc: | CODE |
| LOW⚡ | src/fill_events_manager.py | 4350 | except Exception: | CODE |
| LOW⚡ | src/fill_events_manager.py | 4355 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 187 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 215 | except Exception as exc: | CODE |
| LOW | src/fill_events_manager.py | 319 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 324 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 382 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 423 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 431 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 450 | except Exception: | CODE |
| LOW | src/fill_events_manager.py | 645 | except Exception: | CODE |
| 953 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_missing_ema_fix.py | 11 | CODE | |
| LOW | tests/test_candlestick_manager_locking.py | 1 | 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_hsl_replay_benchmark.py | 1 | CODE | |
| LOW | tests/test_sync_tar.py | 1 | CODE | |
| LOW | tests/test_realized_loss_gate.py | 9 | CODE | |
| LOW | tests/test_candlestick_manager.py | 10 | CODE | |
| LOW | tests/test_candlestick_manager.py | 3567 | 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_live_performance_report.py | 1 | 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_live_smoke_report.py | 1 | 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_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 | |
| LOW | tests/test_order_churn_cancel_first.py | 1 | CODE | |
| LOW | tests/test_procedures_first_timestamps.py | 2 | CODE | |
| LOW | tests/test_procedures_first_timestamps.py | 3 | CODE | |
| LOW | tests/test_aggregate_methods.py | 14 | CODE | |
| LOW | tests/test_live_restart_smoke_evidence.py | 1 | CODE | |
| LOW | tests/test_log_secret_inventory.py | 1 | CODE | |
| LOW | tests/test_order_churn_gate.py | 1 | CODE | |
| LOW | tests/test_pareto_analyzer.py | 1 | CODE | |
| LOW | tests/test_order_reconciliation_contract.py | 1 | CODE | |
| LOW | tests/test_ohlcvs_downloader.py | 1 | CODE | |
| LOW | tests/test_ohlcvs_downloader.py | 2 | CODE | |
| LOW | tests/test_ohlcvs_downloader.py | 3 | CODE | |
| LOW | tests/test_order_churn_executor.py | 1 | CODE | |
| LOW | tests/test_live_restart_target_report.py | 1 | CODE | |
| 328 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sync_tar.py | 96 | CODE | |
| LOW | run_with_logging.py | 44 | CODE | |
| LOW | tests/conftest.py | 13 | CODE | |
| LOW | tests/conftest.py | 254 | CODE | |
| LOW | tests/test_fill_events_manager.py | 8805 | CODE | |
| LOW | tests/test_orchestrator_integration.py | 77 | CODE | |
| LOW | tests/test_ccxt_fetch_ohlcv_current_minute.py | 28 | 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 | 343 | CODE | |
| LOW | tests/optimization/test_config_adapter.py | 25 | CODE | |
| LOW | pytests/test_gate_entries_by_twel_complex.py | 185 | CODE | |
| LOW | src/suite_runner.py | 404 | CODE | |
| LOW | src/suite_runner.py | 719 | CODE | |
| LOW | src/suite_runner.py | 1658 | CODE | |
| LOW | src/suite_runner.py | 1724 | CODE | |
| LOW | src/fill_events_manager.py | 468 | CODE | |
| LOW | src/fill_events_manager.py | 618 | CODE | |
| LOW | src/fill_events_manager.py | 671 | CODE | |
| LOW | src/fill_events_manager.py | 745 | CODE | |
| LOW | src/fill_events_manager.py | 837 | CODE | |
| LOW | src/fill_events_manager.py | 919 | CODE | |
| LOW | src/fill_events_manager.py | 1086 | CODE | |
| LOW | src/fill_events_manager.py | 1440 | CODE | |
| LOW | src/fill_events_manager.py | 1514 | CODE | |
| LOW | src/fill_events_manager.py | 1632 | CODE | |
| LOW | src/fill_events_manager.py | 8326 | CODE | |
| LOW | src/fill_events_manager.py | 2112 | CODE | |
| LOW | src/fill_events_manager.py | 2617 | CODE | |
| LOW | src/fill_events_manager.py | 2858 | CODE | |
| LOW | src/fill_events_manager.py | 3052 | CODE | |
| LOW | src/fill_events_manager.py | 3414 | CODE | |
| LOW | src/fill_events_manager.py | 3759 | CODE | |
| LOW | src/fill_events_manager.py | 3919 | CODE | |
| LOW | src/fill_events_manager.py | 4037 | CODE | |
| LOW | src/fill_events_manager.py | 4778 | CODE | |
| LOW | src/fill_events_manager.py | 4905 | CODE | |
| LOW | src/fill_events_manager.py | 5200 | CODE | |
| LOW | src/fill_events_manager.py | 6111 | CODE | |
| LOW | src/fill_events_manager.py | 6150 | CODE | |
| LOW | src/fill_events_manager.py | 6661 | CODE | |
| LOW | src/fill_events_manager.py | 7680 | CODE | |
| LOW | src/fill_events_manager.py | 7963 | CODE | |
| LOW | src/fill_events_manager.py | 4944 | CODE | |
| LOW | src/fill_events_manager.py | 8330 | CODE | |
| LOW | src/passivbot.py | 22193 | CODE | |
| LOW | src/passivbot.py | 22270 | CODE | |
| LOW | src/passivbot.py | 1217 | CODE | |
| LOW | src/passivbot.py | 1244 | CODE | |
| LOW | src/passivbot.py | 2410 | CODE | |
| LOW | src/passivbot.py | 2453 | CODE | |
| LOW | src/passivbot.py | 2685 | CODE | |
| LOW | src/passivbot.py | 2789 | CODE | |
| LOW | src/passivbot.py | 3628 | CODE | |
| LOW | src/passivbot.py | 3699 | CODE | |
| LOW | src/passivbot.py | 3883 | CODE | |
| LOW | src/passivbot.py | 4004 | CODE | |
| LOW | src/passivbot.py | 4341 | CODE | |
| LOW | src/passivbot.py | 4642 | CODE | |
| LOW | src/passivbot.py | 4739 | CODE | |
| 357 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/plans/live_overengineering_audit_followup_plan.md | 211 | ### 7. `Passivbot` facade and orchestration ownership | COMMENT |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1266 | | 2026-06-30 | #1/#3 Incident bundle generator and live restart/smoke automation | PR #914 / `9ff335e4` | Moved incident | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1267 | | 2026-06-30 | #1/#3 Incident bundle generator and live restart/smoke automation | PR #913 / `d3f3264c` | Added opt-in ` | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1268 | | 2026-06-30 | #1/#3 Incident bundle generator and live restart/smoke automation | PR #912 / `0eb29545` | Added `--recen | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1269 | | 2026-06-30 | #1/#3 Incident bundle generator and live restart/smoke automation | PR #911 / `7c5c96f4` | Projected boun | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1270 | | 2026-06-30 | #3/#4 Live restart/smoke automation and performance readiness | PR #910 / `ac949f03` | Projected bounded | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1271 | | 2026-06-30 | #3 Live restart/smoke automation | PR #909 / `c8c51d73` | Projected bounded event-file discovery metadata | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1275 | | 2026-06-30 | #0/#3/#10 HSL status smoke evidence | PR #903 / `1dd115cc` | Added `risk_events.hsl_status` to `live-smok | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1279 | | 2026-06-30 | #0/#3/#18 Progress and evidence tracking | PR #897 / `aebc3667` | Recorded exchange-config-refresh smoke | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1287 | | 2026-06-25 | #1/#3/#14 Smoke process status | PR #661 / `72b3d931` | Added optional read-only process liveness to `liv | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1289 | | 2026-06-26 | #3 Live restart/smoke automation | PR #665 / `37c29359` | Added structured-event time windows to `live-sm | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1293 | | 2026-06-26 | #3 Live restart/smoke automation | PR #670 / `b74d12be` | Extended `live-smoke-report` time windows to pa | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1294 | | 2026-06-26 | #3 Live restart/smoke automation | PR #671 / `34f63799` | Narrowed traceback log matching to real Python | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1295 | | 2026-06-26 | #3/#8 Live restart/smoke automation and HSL preview | PR #673 / `2697ff48` | Added bounded `risk_events` | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1296 | | 2026-06-26 | #3 Live restart/smoke automation | PR #675 / `3aa1e7a7` | Added explicit `keep|drop` policy for unparseab | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1298 | | 2026-06-26 | #3 Live restart/smoke automation | PR #679 / `60c9a41` | Added bounded `problem_events.latest_data` for s | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1299 | | 2026-06-26 | #3 Live restart/smoke automation | PR #682 / `048e8595c` | Added top-level `problem_event_count` and boun | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1300 | | 2026-06-26 | #3 Live restart/smoke automation | PR #684 / `04ca7174` | Dropped contextless unparseable log lines under | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1301 | | 2026-06-26 | #3/#6 Live restart/smoke automation and exchange probes | PR #686 / `b03f4139` | Added branch/head/tracke | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1302 | | 2026-06-26 | #3/#6 Live restart/smoke automation and exchange probes | PR #688 / `9945a3d3` | Added `remote_call_timin | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1303 | | 2026-06-26 | #3/#6 Live restart/smoke automation and exchange probes | PR #690 / `dc99378a` | Added `remote_call_healt | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1304 | | 2026-06-26 | #3/#6 Live restart/smoke automation and exchange probes | PR #692 / `ac4afe3f` | Added top-level `remote_ | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1305 | | 2026-06-26 | #3/#6 Live restart/smoke automation and exchange probes | PR #694 / `bebbb3f6` | Added `account_critical_ | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1306 | | 2026-06-26 | #3 Live restart/smoke automation | PR #696 / `f1efbe45` | Added `live-smoke-report --summary`, a concise | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1307 | | 2026-06-26 | #3 Live restart/smoke automation | PR #698 / `7c7368f3` | Redacted common user/home prefixes from smoke-r | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1308 | | 2026-06-26 | #3 Live restart/smoke automation | PR #699 / `4e2fcee7` | Surfaced dropped contextless unparsed attention | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1309 | | 2026-06-26 | #3 Live restart/smoke automation | PR #709 / `71479c61` deploy evidence | VPS5 restart smoke after the fi | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1310 | | 2026-06-26 | #3/#14 Supervisor/process diagnostics | PR #712 / `51ba92a3` | Extended `live-smoke-report --supervisor-c | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1316 | | 2026-06-26 | #3 Live restart/smoke automation | PR #715 / `7b12d4b2` | Added passive `shutdown_events` summaries to fu | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1331 | | 2026-06-27 | #3 Live restart/smoke automation | PR #755 / `5d9f3a5f` | Added `live-smoke-report` EMA readiness health | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1340 | | 2026-06-25 | #3 Live restart/smoke automation | PR #639 / `86afd3b3` | Added read-only `passivbot tool live-smoke-repo | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1349 | | 2026-06-30 | #3/#4 Live restart/smoke automation and startup budget tracking | PR #886 / `60c79c3a` | Exposed existing | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1350 | | 2026-06-30 | #3 Live restart/smoke automation | PR #888 / `4b435d33` | Exposed bounded text-log window counters in `li | CODE |
| MEDIUM⚡ | docs/plans/live_ops_improvement_backlog.md | 1351 | | 2026-06-30 | #3 Live restart/smoke automation | PR #890 / `1498abc9` | Exposed `event_window.enabled` in `live-smoke-r | CODE |
| MEDIUM | src/fill_events_manager.py | 2417 | # exhausted; orchestration owns indefinitely backed-off retries. | COMMENT |
| MEDIUM | src/fill_events_manager.py | 1910 | retry_count: int # Diagnostic count; orchestration owns retry timing | CODE |
| 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 | 1925 | 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 | src/analysis_visibility.py | 109 | "backtest.visible_metrics must be null, [], or a list/tuple/set of metric names" | CODE |
| HIGH | src/config/scoring.py | 192 | raise ValueError(f"{path} must be a scenario label string or null, got {value!r}") | CODE |
| HIGH | src/config/scoring.py | 313 | "{metric: ..., goal: min|max, scenario: label|null, aggregate: 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 | 168 | - [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 | 313 | # 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/exchanges/test_ccxt_bot.py | 400 | """Test that leverage is set for each symbol when supported.""" | STRING |
| MEDIUM | tests/exchanges/test_ccxt_bot.py | 450 | """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 | 1343 | # A margin-mode change may reset venue leverage, so set it again even | COMMENT |
| MEDIUM⚡ | tests/exchanges/test_bitunix.py | 1344 | # when the pre-mutation leverage happened to match. | COMMENT |
| MEDIUM | src/candlestick_manager.py | 9275 | # The deterministic fake-live harness intentionally permits sparse | COMMENT |
| MEDIUM | src/pareto_store.py | 913 | # Create a streamlined figure with just two key plots | COMMENT |
| LOW⚡ | src/procedures.py | 397 | # 1) If no exchange is specified and all coins have valid cached timestamps, just return ftss | COMMENT |
| MEDIUM | src/hlcv_preparation.py | 5632 | """Estimate exchange quote-volume ratios from robust complete-day overlap. | STRING |
| MEDIUM | src/exchanges/hyperliquid.py | 34 | # HIP-3 stock perps have a max leverage of 10x | COMMENT |
| MEDIUM | src/exchanges/hyperliquid.py | 212 | # For isolated-only markets (HIP-3), cap at 10x leverage | COMMENT |
| MEDIUM⚡ | src/exchanges/hyperliquid.py | 1846 | """Set leverage and margin mode for Hyperliquid symbols. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 968 | """Calculate minimum leverage required for isolated margin positions. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 990 | """Calculate the appropriate leverage for a symbol. | STRING |
| MEDIUM | src/exchanges/ccxt_bot.py | 1100 | """Set leverage and margin mode for each symbol. | STRING |
| MEDIUM⚡ | src/exchanges/weex.py | 164 | """WEEX leverage setup is an entry prerequisite, not a close prerequisite.""" | STRING |
| MEDIUM⚡ | src/exchanges/gateio.py | 262 | """Apply the configured leverage and margin mode through Gate's leverage endpoint.""" | STRING |
| MEDIUM⚡ | src/exchanges/gateio.py | 290 | """Gate leverage is an entry prerequisite, not a close prerequisite.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_realized_loss_gate.py | 133 | def _set_pnl_lookback(bot, *, lookback_days: float | str, now_ms: int) -> None: | CODE |
| LOW | tests/test_passivbot_balance_split.py | 3969 | 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 | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/fill_events_manager.py | 2276 | def set_history_scope(self, scope: str) -> None: | CODE |
| LOW | src/fill_events_manager.py | 5841 | def set_history_scope(self, scope: str) -> None: | CODE |
| LOW | src/passivbot.py | 9311 | async def update_trailing_data(self) -> None: | CODE |
| LOW⚡ | src/optimize.py | 679 | def _set_candidate_metrics(individual, metrics_payload) -> None: | CODE |
| LOW | src/optimize.py | 2392 | 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 | 243 | __all__ = [ | CODE |
| LOW⚡ | src/candlestick_manager.py | 1163 | def set_stop_requested_callback(self, callback: Optional[Callable[[], bool]]) -> None: | CODE |
| LOW | src/candlestick_manager.py | 1192 | def _setup_logging(self) -> None: | CODE |
| LOW | src/candlestick_manager.py | 4818 | def _set_inception_ts(self, symbol: str, ts: int, *, save: bool = True) -> None: | CODE |
| LOW | src/candlestick_manager.py | 5079 | async def _set_global_rate_limit(self, backoff_seconds: float = 5.0) -> None: | CODE |
| LOW | src/candlestick_manager.py | 8974 | def set_current_close(self, symbol: str, price: float, timestamp_ms: int) -> None: | CODE |
| LOW | src/candlestick_manager.py | 10574 | __all__ = [ | CODE |
| LOW | src/monitor_tui.py | 362 | 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 | 312 | __all__ = [ | CODE |
| LOW | src/logging_setup.py | 160 | def update_stable_log_alias(alias_path: str | Path, target_path: str | Path) -> None: | CODE |
| LOW | src/hlcv_preparation.py | 5904 | __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 | 345 | def _set_nested_bound(target: dict[str, Any], path: tuple[str, ...], value: list[int | float]) -> None: | CODE |
| LOW⚡ | src/tools/iterative_backtester.py | 837 | def _update_best_run(self, run: RunSummary) -> None: | CODE |
| LOW⚡ | src/tools/iterative_backtester.py | 846 | def _update_pareto_front(self) -> None: | CODE |
| LOW | src/exchanges/fake.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/exchanges/bitunix.py | 1619 | async def update_exchange_config(self) -> None: | CODE |
| LOW | src/exchanges/bitunix.py | 1630 | async def update_exchange_config_by_symbols(self, symbols: Iterable[str]) -> None: | CODE |
| LOW | src/exchanges/bitunix.py | 1666 | def set_market_specific_settings(self) -> None: | CODE |
| LOW | src/config/optimize_bounds.py | 162 | def set_flat_optimize_bound(bounds: dict, strategy_kind: str, flat_key: str, value) -> None: | CODE |
| LOW | src/config/__init__.py | 15 | __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 | 51 | def _set_path(config: dict, path: Sequence[str], value) -> None: | CODE |
| LOW | src/optimization/warmup.py | 320 | __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 | 481 | def update_stats(stats: dict[str, int], value: int) -> None: | CODE |
| LOW | src/live/performance_report.py | 1568 | def _update_debug_profiles(state: dict[str, Any], data: dict[str, Any]) -> None: | CODE |
| LOW | src/live/performance_report.py | 2167 | def _set_elapsed(item: dict[str, Any], *, started_ts: int | None) -> None: | CODE |
| LOW⚡ | src/live/event_emitters.py | 44 | def set_live_event_context_ids(bot: Any, **kwargs: str | None) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_candlestick_manager.py | 1786 | # 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 | 412 | # Create a stale lock file (older than threshold) | COMMENT |
| MEDIUM⚡ | tests/test_utils_maps.py | 420 | # 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 | 3382 | # Create a concrete fitness class from ConstraintAwareFitness | COMMENT |
| MEDIUM | src/passivbot.py | 12322 | # Create the FillEventsManager with its own cache path | COMMENT |
| MEDIUM | src/plotting.py | 1457 | # Create the plot | COMMENT |
| MEDIUM | src/pareto_store.py | 913 | # Create a streamlined figure with just two key plots | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/suite_runner.py | 214 | Filter scenarios to only include those matching the given labels. Args: scenarios: List of scenario dicts ( | STRING |
| HIGH | src/procedures.py | 109 | 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 | 638 | Fetch open orders, optionally filtered by symbol. Args: symbol: Optional symbol to filter orders. | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 931 | Check if a symbol requires isolated margin mode. Override in subclasses to detect exchange-specific isolated-on | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1233 | Fetch OHLCV candlestick data. Args: symbol: Trading pair symbol. timeframe: Candle time | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1255 | Fetch 1-minute OHLCV data with pagination support. Args: symbol: Trading pair symbol. s | STRING |
| HIGH | src/exchanges/ccxt_bot.py | 1303 | 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 |
|---|---|---|---|---|
| LOW⚡ | README.md | 69 | ### Step 1: Clone the Repository | COMMENT |
| LOW⚡ | README.md | 79 | ### Step 2: Install Rust | COMMENT |
| LOW⚡ | README.md | 86 | ### Step 3: Create and Activate a Virtual Environment | COMMENT |
| LOW | README.md | 120 | ### Step 4: Install Passivbot | COMMENT |
| LOW | README.md | 148 | ### Step 6: Add API keys | COMMENT |
| LOW | README.md | 158 | ### Step 7: Run Passivbot | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 10157 | // Step 1: initial balance | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 10177 | // Step 2: simulate a fill that changes raw balance but snapped stays | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 792 | # Step 2: Load with warmup=3000 → hit | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 796 | # Step 3: Load with warmup=5000 → miss | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 800 | # Step 4: Save with warmup=5000 (overwrite same slot) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 815 | # Step 5: Load with warmup=3000 → hit (ratcheted up) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 819 | # Step 6: Load with warmup=5000 → hit | COMMENT |
| LOW | tests/test_cache_warmup_reuse.py | 780 | # Step 1: Save with warmup=3000 | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6875 | # Step 1: Fetch trades (fill-level data with fees) | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6881 | # Step 2: Collect unique order IDs | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6888 | # Step 3: Fetch closed orders for PnL | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6891 | # Step 4: Merge trades with order PnL | COMMENT |
| LOW⚡ | src/utils.py | 404 | # Step 1: remove base keys when *_usd carries the same value. | COMMENT |
| LOW⚡ | src/utils.py | 411 | # Step 2: remove duplicate permutations sharing identical values. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_missing_ema_fix.py | 514 | CODE | |
| LOW | tests/test_candlestick_manager.py | 1938 | CODE | |
| LOW | tests/test_candlestick_manager.py | 1998 | CODE | |
| LOW | tests/test_live_performance_report.py | 40 | CODE | |
| LOW | tests/test_fill_events_manager.py | 6450 | CODE | |
| LOW | tests/test_unstucking_safeguards.py | 3722 | CODE | |
| LOW | tests/test_unstucking_safeguards.py | 1010 | CODE | |
| LOW | tests/test_live_incident_bundle.py | 24 | CODE | |
| LOW | tests/test_orchestrator_integration.py | 238 | CODE | |
| LOW | tests/test_live_smoke_report.py | 30 | 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_orchestrator_json_api.py | 276 | CODE | |
| LOW | pytests/test_unstucking_cases.py | 7 | CODE | |
| LOW | src/fill_events_manager.py | 2995 | CODE | |
| LOW | src/passivbot.py | 688 | CODE | |
| LOW | src/passivbot.py | 12345 | CODE | |
| LOW | src/passivbot_hsl.py | 4307 | CODE | |
| LOW | src/monitor_web.py | 46 | CODE | |
| LOW | src/candlestick_manager.py | 867 | CODE | |
| LOW | src/candlestick_manager.py | 6202 | CODE | |
| LOW | src/candlestick_manager.py | 7521 | CODE | |
| LOW | src/monitor_tui.py | 1241 | CODE | |
| LOW | src/monitor_dev.py | 137 | CODE | |
| LOW | src/logging_setup.py | 179 | CODE | |
| LOW | src/hlcv_preparation.py | 290 | 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 | 1609 | CODE | |
| LOW | src/config/load.py | 46 | CODE | |
| LOW | src/live/smoke_report.py | 8031 | CODE | |
| LOW | src/live/smoke_report.py | 8387 | CODE | |
| LOW | src/live/smoke_report.py | 9528 | CODE | |
| LOW | src/live/restart_executor.py | 516 | CODE | |
| LOW | src/live/restart_smoke_plan.py | 414 | CODE | |
| LOW | src/live/incident_bundle.py | 175 | CODE | |
| LOW | src/live/incident_bundle.py | 1098 | CODE | |
| LOW | src/live/event_bus.py | 3494 | 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 | |
| LOW | src/live/data_packets.py | 129 | CODE | |
| LOW | src/live/runtime_attribution.py | 743 | CODE | |
| LOW | src/live/performance_report.py | 5525 | CODE | |
| LOW | src/live/event_emitters.py | 481 | CODE | |
| LOW | src/live/event_emitters.py | 534 | CODE | |
| LOW | src/live/event_emitters.py | 940 | CODE | |
| LOW | src/live/event_emitters.py | 1087 | CODE | |
| LOW | src/live/event_emitters.py | 1403 | CODE | |
| LOW | src/live/event_emitters.py | 2998 | CODE | |
| LOW | src/live/event_emitters.py | 5081 | CODE | |
| LOW | src/live/event_emitters.py | 5174 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_utils_maps.py | 416 | # Set mtime to 5 minutes ago (older than 180s threshold) | COMMENT |
| LOW | src/fill_events_manager.py | 6959 | # Check if it's a rate limit error in disguise | COMMENT |
| LOW | src/fill_events_manager.py | 7077 | # Check if we've collected all needed orders | COMMENT |
| LOW | src/fill_events_manager.py | 7711 | # Check if we already know this orderId's clientOid | COMMENT |
| LOW | src/fill_events_manager.py | 8079 | # Check if we've reached the start boundary | COMMENT |
| LOW⚡ | src/passivbot.py | 3902 | # Check if mode is normal (not graceful_stop, manual, etc.) | COMMENT |
| LOW⚡ | src/passivbot.py | 3907 | # Check if we have a position already | COMMENT |
| LOW⚡ | src/passivbot.py | 3913 | # Check if there's an initial entry order for this symbol/pside | COMMENT |
| LOW | src/passivbot.py | 21900 | # Check if coins is a single string that needs to be split | COMMENT |
| LOW | src/candlestick_manager.py | 2926 | # Check if real data has replaced any previously synthetic timestamps | COMMENT |
| LOW | src/candlestick_manager.py | 6248 | # Check if already sorted to skip O(n log n) sort | COMMENT |
| LOW | src/utils.py | 1420 | # Check if the content is in list format | COMMENT |
| LOW | src/utils.py | 1516 | # 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 | 597 | # Check if j dominates i (j is better in all metrics) | COMMENT |
| LOW | src/exchanges/hyperliquid.py | 1390 | # Check if fetch_positions already got us a fresh balance | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | passivbot-rust/src/backtest.rs | 10157 | // Step 1: initial balance | COMMENT |
| LOW | passivbot-rust/src/backtest.rs | 10177 | // Step 2: simulate a fill that changes raw balance but snapped stays | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 792 | # Step 2: Load with warmup=3000 → hit | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 796 | # Step 3: Load with warmup=5000 → miss | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 800 | # Step 4: Save with warmup=5000 (overwrite same slot) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 815 | # Step 5: Load with warmup=3000 → hit (ratcheted up) | COMMENT |
| LOW⚡ | tests/test_cache_warmup_reuse.py | 819 | # Step 6: Load with warmup=5000 → hit | COMMENT |
| LOW | tests/test_cache_warmup_reuse.py | 780 | # Step 1: Save with warmup=3000 | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6875 | # Step 1: Fetch trades (fill-level data with fees) | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6881 | # Step 2: Collect unique order IDs | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6888 | # Step 3: Fetch closed orders for PnL | COMMENT |
| LOW⚡ | src/fill_events_manager.py | 6891 | # Step 4: Merge trades with order PnL | COMMENT |
| LOW⚡ | src/utils.py | 404 | # Step 1: remove base keys when *_usd carries the same value. | COMMENT |
| LOW⚡ | src/utils.py | 411 | # Step 2: remove duplicate permutations sharing identical values. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_run_fake_live.py | 362 | fake_user, restore = _install_fake_user_override(config, "scenario.hjson", None) | CODE |
| LOW⚡ | tests/test_run_fake_live.py | 364 | 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 | 218 | 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 | 375 | fake_user = user or str(config["live"].get("user") or "fake_runner") | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 376 | config["live"]["user"] = fake_user | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 385 | if requested_user == fake_user: | CODE |
| LOW⚡ | src/tools/run_fake_live.py | 390 | return fake_user, lambda: setattr(passivbot_mod, "load_user_info", original) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | passivbot-rust/src/orchestrator.rs | 321 | COMMENT | |
| LOW | passivbot-rust/src/orchestrator.rs | 341 | /// are consumed solely as the fallback for `auto_unstuck_allowed` when | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 381 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | passivbot-rust/src/orchestrator.rs | 421 | /// Live-only authorization to scope absent EMA inputs to the strategy | 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 |