An AI Hedge Fund Team
This report presents the forensic synthetic code analysis of virattt/ai-hedge-fund, a Python project with 63,070 GitHub stars. SynthScan v2.0 examined 10,900 lines of code across 88 source files, recording 423 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 71.9 places this repository in the Strong 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 423 distinct pattern matches across 10 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 |
|---|---|---|---|---|
| MEDIUM | hedge_fund/models.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/models.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/test_run_cycle.py | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/test_run_cycle.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/pipeline/test_run_cycle.py | 198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/run_cycle.py | 138 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/pipeline/run_cycle.py | 140 | # --------------------------------------------------------------------------- | 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/fund.py | 155 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/fund.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_fund.py | 11 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_fund.py | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_fund.py | 112 | # --------------------------------------------------------------------------- | 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 |
| MEDIUM | hedge_fund/backtesting/engine.py | 222 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 224 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/engine.py | 296 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_backtest.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_backtest.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_backtest.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/backtesting/test_backtest.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_backtest.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/backtesting/test_backtest.py | 188 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/signals/test_signals.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/signals/test_signals.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/signals/test_signals.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hedge_fund/signals/test_signals.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/signals/test_llm_agents.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hedge_fund/signals/test_llm_agents.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| 64 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | 46 | def test_positions_returns_a_copy(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_run_cycle.py | 75 | def test_full_cycle_record_is_consistent(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 105 | def test_netting_math_two_strategies_unequal_slices(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 149 | def test_deterministic_and_json_round_trips(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 163 | def test_second_cycle_rebalances_not_restarts(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_run_cycle.py | 181 | def test_all_abstain_closes_the_book_to_flat(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_run_cycle.py | 200 | def test_unpriced_unowned_ticker_skipped_and_analysts_never_called(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 214 | def test_unpriced_held_ticker_raises(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 225 | def test_universe_is_a_run_time_argument(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 239 | def test_empty_universe_raises(): | CODE |
| LOW | hedge_fund/pipeline/test_run_cycle.py | 246 | def test_analyst_error_propagates(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_execution.py | 11 | def test_floor_sizing_never_overshoots(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_execution.py | 18 | def test_delta_against_existing_position(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_execution.py | 27 | def test_held_name_missing_from_targets_is_closed(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_execution.py | 34 | def test_subshare_delta_emits_nothing(): | CODE |
| LOW⚡ | hedge_fund/pipeline/test_execution.py | 39 | def test_sells_before_buys_alphabetical(): | CODE |
| LOW | hedge_fund/pipeline/test_execution.py | 52 | def test_short_target_sells_past_zero(): | CODE |
| LOW | hedge_fund/event_study/test_event_study.py | 45 | def test_zero_variance_market(self): | CODE |
| LOW⚡ | hedge_fund/event_study/test_event_study.py | 94 | def test_deterministic_with_seed(self): | CODE |
| LOW⚡ | hedge_fund/event_study/test_event_study.py | 108 | def test_filters_stale_records(self): | CODE |
| LOW | hedge_fund/event_study/test_event_study.py | 158 | def test_plot_car_distribution(self, synthetic_result): | CODE |
| LOW | hedge_fund/event_study/test_event_study.py | 206 | def test_compute_car_multi_ticker(fd): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 30 | def test_verdict_lands_before_the_thesis(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 36 | def test_signal_shows_before_confidence_arrives(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 42 | def test_confidence_waits_for_its_terminator(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 51 | def test_nothing_decodable_yet(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 61 | def test_one_character_at_a_time_matches_one_shot(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 80 | def test_escaped_quote_is_not_the_end_of_the_thesis(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 85 | def test_a_dangling_backslash_waits(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 94 | def test_unicode_escape_waits_for_all_four_digits(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 101 | def test_malformed_unicode_escape_stops_rather_than_raises(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 110 | def test_prose_leaves_every_field_empty(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 116 | def test_fenced_json_still_decodes(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_watch.py | 122 | def test_unknown_signal_word_is_shown_not_guessed(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 32 | def test_every_supported_provider_constructs(provider, keyed): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 41 | def test_registry_and_clients_agree(): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 49 | def test_missing_key_names_the_variable(monkeypatch): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 59 | def test_unlisted_model_falls_back_to_anthropic(keyed): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 66 | def test_kimi_accepts_moonshot_key(monkeypatch): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 74 | def test_provider_for_reads_the_registry(): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 108 | def test_no_listener_does_not_stream(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 113 | def test_listener_sees_every_piece_and_the_return_is_whole(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 121 | def test_chunk_blocks_join_without_a_separator(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 128 | def test_thinking_chunks_reach_neither_the_listener_nor_the_result(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 137 | def test_make_llm_passes_the_listener_through(self, keyed): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 149 | def test_plain_string_passes_through(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 152 | def test_text_blocks_are_joined(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 156 | def test_thinking_blocks_are_dropped(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 165 | def test_bare_strings_in_a_list_are_kept(self): | CODE |
| LOW⚡ | hedge_fund/llm/test_client.py | 168 | def test_unknown_block_types_are_dropped_not_stringified(self): | CODE |
| LOW⚡ | hedge_fund/backtesting/test_fund.py | 87 | def test_grid_daily_is_identity(): | CODE |
| LOW⚡ | hedge_fund/backtesting/test_fund.py | 91 | def test_grid_weekly_takes_last_trading_day_of_each_iso_week(): | CODE |
| LOW⚡ | hedge_fund/backtesting/test_fund.py | 98 | def test_grid_monthly_splits_where_weekly_does_not(): | CODE |
| LOW⚡ | hedge_fund/backtesting/test_fund.py | 105 | def test_grid_unknown_cadence_raises(): | CODE |
| LOW⚡ | hedge_fund/backtesting/test_fund.py | 114 | def test_happy_path_hand_computed(): | CODE |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/run.py | 28 | CODE | |
| LOW | hedge_fund/models.py | 3 | CODE | |
| LOW | hedge_fund/paths.py | 12 | 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/__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/pipeline/execution.py | 11 | CODE | |
| LOW | hedge_fund/pipeline/models.py | 9 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 4 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 5 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 5 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 5 | CODE | |
| LOW | hedge_fund/pipeline/__init__.py | 6 | CODE | |
| LOW | hedge_fund/pipeline/run_cycle.py | 29 | 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 | |
| LOW | hedge_fund/event_study/stats.py | 8 | CODE | |
| LOW | hedge_fund/event_study/__main__.py | 6 | CODE | |
| LOW | hedge_fund/event_study/__main__.py | 12 | CODE | |
| LOW | hedge_fund/llm/registry.py | 12 | CODE | |
| LOW | hedge_fund/llm/test_watch.py | 9 | CODE | |
| LOW | hedge_fund/llm/client.py | 12 | CODE | |
| LOW | hedge_fund/llm/cache.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 3 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 3 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 4 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 13 | CODE | |
| LOW | hedge_fund/llm/__init__.py | 21 | CODE | |
| LOW | hedge_fund/llm/watch.py | 15 | CODE | |
| LOW | hedge_fund/llm/test_client.py | 9 | CODE | |
| LOW | hedge_fund/backtesting/fund.py | 22 | CODE | |
| LOW | hedge_fund/backtesting/models.py | 3 | CODE | |
| 70 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/brokers/__init__.py | 7 | __all__ = ["Broker", "Fill", "Order", "Position", "SimBroker"] | CODE |
| LOW | hedge_fund/pipeline/__init__.py | 8 | __all__ = ["CycleRecord", "StrategyRecord", "TickerSkip", "build_orders", "run_cycle"] | 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 | 23 | __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 | 171 | def _set_model(self, model_id: str | None) -> None: | CODE |
| LOW | hedge_fund/signals/__init__.py | 31 | __all__ = [ | CODE |
| LOW | hedge_fund/signals/llm_agent.py | 33 | 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 | 14 | __all__ = [ | 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/llm/client.py | 86 | CODE | |
| LOW | hedge_fund/llm/client.py | 152 | CODE | |
| LOW | hedge_fund/llm/client.py | 190 | CODE | |
| LOW | hedge_fund/tui/app.py | 724 | CODE | |
| LOW | hedge_fund/tui/app.py | 1109 | CODE | |
| LOW | hedge_fund/tui/app.py | 1198 | CODE | |
| LOW | hedge_fund/tui/app.py | 1214 | CODE | |
| LOW | hedge_fund/tui/app.py | 1848 | CODE | |
| LOW | hedge_fund/tui/app.py | 1855 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/tui/app.py | 1235 | except Exception: | CODE |
| LOW | hedge_fund/tui/app.py | 1257 | except Exception as exc: # fail loud, in the UI | CODE |
| LOW | hedge_fund/tui/app.py | 1808 | except Exception as exc: # fail loud, in the UI | CODE |
| LOW | hedge_fund/tui/app.py | 1868 | except Exception: | CODE |
| LOW | hedge_fund/signals/llm_agent.py | 71 | except Exception as exc: | CODE |
| LOW⚡ | hedge_fund/signals/llm_agent.py | 88 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hedge_fund/README.md | 41 | # .env needs (at repo root): | COMMENT |