An AI Hedge Fund Team
This report summarizes scanner evidence for virattt/ai-hedge-fund, a Python project with 63,927 GitHub stars. SynthScan examined 17,481 lines of code across 108 source files, recording 665 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 62.1 (High 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? 319 finding(s).
Are imports declared and package/API names verified? 175 finding(s).
Are wrappers, guards, and repeated structures necessary? 460 finding(s).
Which changes need focused human review? 665 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 665 distinct pattern matches across 11 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 |
|---|---|---|---|---|
| MEDIUM | hedge_fund/run.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/run.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/run.py | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/run.py | 181 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/run.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/run.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/models.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/models.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 114 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/paper/test_tick.py | 116 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 98 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 222 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_stages.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/test_stages.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/test_stages.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_session.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/stages.py | 169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/stages.py | 171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/event_study/test_event_study.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/event_study/test_event_study.py | 104 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/test_event_study.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 208 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 296 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/event_study/engine.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_fund.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_fund.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 94 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 96 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 157 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 159 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 202 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 204 | # ------------------------------------------------------------------ | COMMENT |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/test_run.py | 73 | def test_cli_rejects_invalid_configuration_before_clients(tmp_path, monkeypatch, capsys, command, unversioned): | CODE |
| LOW | hedge_fund/test_run.py | 104 | def test_no_arguments_launches_the_app(monkeypatch): | CODE |
| LOW | hedge_fund/test_run.py | 114 | def test_backtest_prints_json_and_files_a_research_copy(tmp_path, monkeypatch, capsys, offline, mode): | CODE |
| LOW | hedge_fund/test_run.py | 134 | def test_backtest_defaults_end_to_the_latest_completed_session(tmp_path, monkeypatch, capsys, offline): | CODE |
| LOW | hedge_fund/test_run.py | 141 | def test_paper_flow_create_tick_status_halt_resume(tmp_path, monkeypatch, capsys, offline): | CODE |
| LOW⚡ | hedge_fund/paper/test_tick.py | 66 | def test_deploy_lays_out_the_fund_directory(tmp_path, SPEC): | CODE |
| LOW⚡ | hedge_fund/paper/test_tick.py | 83 | def test_deploy_rejects_unsafe_names(tmp_path, bad, SPEC): | CODE |
| LOW⚡ | hedge_fund/paper/test_tick.py | 91 | def test_load_deployed_reports_the_path_on_bad_files(tmp_path, SPEC): | CODE |
| LOW⚡ | hedge_fund/paper/test_tick.py | 104 | def test_next_session_is_latest_completed_for_a_fresh_fund_and_the_next_one_after(clock): | CODE |
| LOW⚡ | hedge_fund/paper/test_tick.py | 118 | def test_ticks_advance_one_session_each_and_match_the_backtest(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_tick.py | 144 | def test_explicit_session_is_idempotent_and_must_be_the_next_one(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_tick.py | 157 | def test_redo_runs_the_latest_session_again_and_replaces_its_record(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_tick.py | 199 | def test_redo_refuses_a_halted_fund_and_leaves_it_untouched(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_tick.py | 210 | def test_failure_inside_advance_halts_the_fund_and_a_resume_clears_it(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_tick.py | 229 | def test_broker_drift_between_ticks_is_caught_and_halts(tmp_path, clock, SPEC): | CODE |
| LOW | hedge_fund/paper/test_ledger.py | 29 | def test_append_then_replay_rebuilds_the_state(tmp_path, records): | CODE |
| LOW | hedge_fund/paper/test_ledger.py | 51 | def test_append_refuses_duplicates_gaps_and_bad_hashes(tmp_path, records): | CODE |
| LOW | hedge_fund/paper/test_ledger.py | 69 | def test_replay_detects_an_edited_record(tmp_path, records): | CODE |
| LOW | hedge_fund/paper/test_ledger.py | 81 | def test_replay_detects_a_missing_link(tmp_path, records): | CODE |
| LOW | hedge_fund/paper/test_ledger.py | 90 | def test_kill_switch_round_trips_and_logs(tmp_path): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 9 | def test_buy_updates_cash_and_position(): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 18 | def test_sell_updates_cash_and_position(): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 26 | def test_position_removed_at_zero(): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 33 | def test_sell_past_zero_creates_short(): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 40 | def test_nonpositive_price_raises(): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 47 | def test_nonfinite_price_raises_without_mutating_book(price): | CODE |
| LOW⚡ | hedge_fund/brokers/test_sim.py | 55 | def test_positions_returns_a_copy(): | CODE |
| LOW | hedge_fund/brokers/test_paper.py | 11 | def test_book_round_trips_through_the_file(tmp_path): | CODE |
| LOW | hedge_fund/brokers/test_paper.py | 29 | def test_create_refuses_to_overwrite_and_open_requires_a_book(tmp_path): | CODE |
| LOW | hedge_fund/brokers/test_paper.py | 38 | def test_rejected_order_leaves_the_file_untouched(tmp_path): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 100 | def test_full_cycle_record_is_consistent(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 207 | def test_all_abstain_closes_the_book_to_flat(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 226 | def test_unpriced_unowned_ticker_skipped_and_analysts_never_called(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 265 | def test_empty_universe_raises(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 272 | def test_analyst_error_propagates(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_stages.py | 282 | def test_changed_mode_is_enforced_on_next_cycle(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 131 | def test_netting_math_two_strategies_unequal_slices(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 175 | def test_deterministic_and_json_round_trips(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 189 | def test_second_cycle_rebalances_not_restarts(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 240 | def test_unpriced_held_ticker_raises(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 251 | def test_universe_is_a_run_time_argument(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 302 | def test_all_modes_execute_and_preserve_complete_records(mode): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 325 | def test_neutral_flat_strategy_reserves_capital_and_closes_prior_exposure(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 344 | def test_neutral_fund_scaling_preserves_sleeves_with_overlap(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 361 | def test_clipping_attribution_preserves_exactly_offset_contributions(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 375 | def test_whole_share_rounding_keeps_target_neutral_without_changing_orders(): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 388 | def test_invalid_risk_output_never_reaches_broker(monkeypatch, case, expected): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 415 | def test_invalid_short_targets_never_reach_broker(monkeypatch, mode, expected): | CODE |
| LOW | hedge_fund/pipeline/test_stages.py | 433 | def test_strategy_gross_violation_is_rejected_even_when_fund_risk_clips_it(monkeypatch): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 59 | def test_weekend_refresh_replaces_targets_and_uses_execution_prices(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_timing.py | 81 | def test_holiday_uses_next_observed_session_and_preceding_day(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_timing.py | 88 | def test_same_cutoff_reuses_assessment_and_records_are_snapshots(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_timing.py | 98 | def test_execution_revalues_existing_positions_before_sizing(): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 112 | def test_entire_basket_fails_before_orders_if_execution_price_invalid(bad_price): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 126 | def test_missing_held_price_is_required_even_when_target_is_zero(): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 137 | def test_refresh_failure_does_not_fall_back_to_original_targets(): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 153 | def test_invalid_projected_orders_fail_before_submission(monkeypatch): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 168 | def test_nonfinite_equity_fails_before_submission(): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 179 | def test_current_new_york_day_is_excluded_even_after_close(monkeypatch, hour): | CODE |
| LOW | hedge_fund/pipeline/test_timing.py | 200 | def test_assessment_has_no_broker_fields_and_rejects_same_day_execution(): | CODE |
| 229 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/run.py | 39 | CODE | |
| LOW | hedge_fund/models.py | 3 | CODE | |
| LOW | hedge_fund/paths.py | 17 | CODE | |
| LOW | hedge_fund/paper/ledger.py | 14 | CODE | |
| LOW | hedge_fund/paper/deployed.py | 10 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 15 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 23 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 23 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 24 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 24 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 24 | CODE | |
| LOW | hedge_fund/paper/__init__.py | 24 | CODE | |
| LOW | hedge_fund/paper/tick.py | 17 | CODE | |
| LOW | hedge_fund/brokers/sim.py | 14 | CODE | |
| LOW | hedge_fund/brokers/models.py | 8 | CODE | |
| LOW | hedge_fund/brokers/protocol.py | 8 | CODE | |
| LOW | hedge_fund/brokers/paper.py | 16 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 3 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 3 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 3 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 4 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 5 | CODE | |
| LOW | hedge_fund/brokers/__init__.py | 6 | CODE | |
| LOW | hedge_fund/pipeline/execution.py | 11 | CODE | |
| LOW | hedge_fund/pipeline/models.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/session.py | 25 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 3 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 4 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 4 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 4 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 4 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 10 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 19 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 19 | CODE | |
| LOW | hedge_fund/pipeline/stages.py | 11 | CODE | |
| LOW | hedge_fund/event_study/plot.py | 14 | CODE | |
| LOW | hedge_fund/event_study/models.py | 12 | CODE | |
| LOW | hedge_fund/event_study/test_event_study.py | 3 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 7 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 16 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 16 | CODE | |
| LOW | hedge_fund/event_study/__init__.py | 16 | CODE | |
| LOW | hedge_fund/event_study/engine.py | 26 | CODE | |
| 113 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hedge_fund/llm/client.py | 348 | except json.JSONDecodeError: | CODE |
| HIGH | hedge_fund/llm/client.py | 343 | except json.JSONDecodeError: | CODE |
| HIGH | hedge_fund/tui/app.py | 2255 | except Exception: | CODE |
| HIGH | hedge_fund/tui/app.py | 3022 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/pipeline/test_stages.py | 388 | CODE | |
| LOW | hedge_fund/llm/client.py | 207 | CODE | |
| LOW | hedge_fund/llm/client.py | 225 | CODE | |
| LOW | hedge_fund/llm/client.py | 295 | CODE | |
| LOW | hedge_fund/llm/client.py | 333 | CODE | |
| LOW | hedge_fund/llm/test_contract.py | 213 | CODE | |
| LOW | hedge_fund/llm/test_client.py | 524 | CODE | |
| LOW | hedge_fund/tui/app.py | 828 | CODE | |
| LOW | hedge_fund/tui/app.py | 874 | CODE | |
| LOW | hedge_fund/tui/app.py | 2165 | CODE | |
| LOW | hedge_fund/tui/app.py | 2202 | CODE | |
| LOW | hedge_fund/tui/app.py | 2238 | CODE | |
| LOW | hedge_fund/tui/app.py | 2368 | CODE | |
| LOW | hedge_fund/tui/app.py | 2513 | CODE | |
| LOW | hedge_fund/tui/app.py | 2997 | CODE | |
| LOW | hedge_fund/tui/app.py | 2241 | CODE | |
| LOW | hedge_fund/tui/app.py | 3008 | CODE | |
| LOW | hedge_fund/portfolio/construction.py | 29 | CODE | |
| LOW | hedge_fund/portfolio/validation.py | 16 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/paper/__init__.py | 26 | __all__ = [ | CODE |
| LOW | hedge_fund/brokers/__init__.py | 8 | __all__ = ["Broker", "Fill", "Order", "PaperBroker", "Position", "SimBroker"] | CODE |
| LOW | hedge_fund/pipeline/__init__.py | 21 | __all__ = [ | CODE |
| LOW | hedge_fund/event_study/__init__.py | 22 | __all__ = [ | CODE |
| LOW | hedge_fund/event_study/engine.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | hedge_fund/llm/__init__.py | 25 | __all__ = [ | CODE |
| LOW | hedge_fund/backtesting/__init__.py | 16 | __all__ = [ | CODE |
| LOW | hedge_fund/backtesting/engine.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | hedge_fund/tui/app.py | 182 | def _set_model(self, model_id: str | None) -> None: | CODE |
| LOW | hedge_fund/signals/__init__.py | 42 | __all__ = [ | CODE |
| LOW | hedge_fund/signals/llm_agent.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | hedge_fund/features/__init__.py | 15 | __all__ = [ | CODE |
| LOW | hedge_fund/portfolio/__init__.py | 8 | __all__ = ["BlendResult", "blend_signals"] | CODE |
| LOW | hedge_fund/data/client.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | hedge_fund/data/__init__.py | 18 | __all__ = [ | CODE |
| LOW | hedge_fund/risk/__init__.py | 8 | __all__ = ["ClampEvent", "RiskLimits", "RiskResult", "apply_limits"] | CODE |
| LOW | hedge_fund/fund/__init__.py | 17 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/paper/tick.py | 138 | except Exception as exc: | CODE |
| LOW | hedge_fund/tui/app.py | 1733 | except Exception as exc: | CODE |
| LOW | hedge_fund/tui/app.py | 2235 | except Exception as exc: # fail loud, in the UI | CODE |
| LOW | hedge_fund/tui/app.py | 2255 | except Exception: | CODE |
| LOW | hedge_fund/tui/app.py | 2957 | except Exception as exc: # fail loud, in the UI | CODE |
| LOW | hedge_fund/tui/app.py | 3022 | except Exception: | CODE |
| MEDIUM | hedge_fund/tui/app.py | 1995 | def _load(self) -> None: | CODE |
| LOW | hedge_fund/signals/llm_agent.py | 94 | except Exception as exc: | CODE |
| LOW⚡ | hedge_fund/signals/llm_agent.py | 108 | except Exception as exc: | CODE |
| LOW | hedge_fund/features/breakpoints.py | 125 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | hedge_fund/data/models.py | 40 | All ratio/metric fields are nullable (NaN/Inf sanitised to null). | STRING |
| HIGH | hedge_fund/data/models.py | 213 | # Period-over-period changes (omitted from response if null) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hedge_fund/event_study/engine.py | 153 | # Step 1: Get earnings filings for this ticker | COMMENT |
| LOW⚡ | hedge_fund/event_study/engine.py | 158 | # Step 2: Drop retrospective rows (e.g., Q4 data parsed from a Q1 8-K) | COMMENT |
| LOW⚡ | hedge_fund/event_study/engine.py | 163 | # Step 3: Fetch stock prices — one call covering all events. | COMMENT |
| LOW | hedge_fund/event_study/engine.py | 176 | # Step 4: Build aligned return series. | COMMENT |
| LOW | hedge_fund/event_study/engine.py | 196 | # Step 5: Process each earnings event | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hedge_fund/event_study/engine.py | 153 | # Step 1: Get earnings filings for this ticker | COMMENT |
| LOW⚡ | hedge_fund/event_study/engine.py | 158 | # Step 2: Drop retrospective rows (e.g., Q4 data parsed from a Q1 8-K) | COMMENT |
| LOW⚡ | hedge_fund/event_study/engine.py | 163 | # Step 3: Fetch stock prices — one call covering all events. | COMMENT |
| LOW | hedge_fund/event_study/engine.py | 176 | # Step 4: Build aligned return series. | COMMENT |
| LOW | hedge_fund/event_study/engine.py | 196 | # Step 5: Process each earnings event | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/fund/example.yaml | 1 | # An example mandate. Specs are data: the fund builder (aihf), | COMMENT |