FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models
This report summarizes scanner evidence for AI4Finance-Foundation/FinRobot, a Python project with 8,202 GitHub stars. SynthScan examined 261,681 lines of code across 915 source files, recording 6414 pattern matches distributed across 22 syntactic categories. The legacy adjusted pattern signal is 36.5 (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? 4334 finding(s).
Are imports declared and package/API names verified? 598 finding(s).
Are wrappers, guards, and repeated structures necessary? 5033 finding(s).
Which changes need focused human review? 6414 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 6414 distinct pattern matches across 22 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 | finrobot_equity/deploy.gcloud.sh | 22 | # ── Configuration ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 46 | # ── Step 1: Create GCS Bucket ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 55 | # ── Step 2: Cloud SQL PostgreSQL ───────────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 89 | # ── Step 3: Secret Manager — config.ini ────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 117 | # ── Step 4: Build & Push Docker Image ──────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 134 | # ── Step 5: Deploy Cloud Run ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_equity/deploy.gcloud.sh | 156 | # ── Done ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | finrobot_equity/deploy.sh | 83 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | finrobot_equity/deploy.sh | 85 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | finrobot_equity/deploy.sh | 208 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | finrobot_equity/deploy.sh | 210 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 27 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 29 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 55 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 57 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 119 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 121 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 172 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 174 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 371 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 373 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 480 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/deploy.sh | 482 | # ============================================================================ | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 13 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 15 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 27 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 29 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 86 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 88 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 140 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 142 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 189 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 191 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 267 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/web_app/database/crud.py | 269 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 277 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 279 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 873 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 875 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 32 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 34 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 62 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 64 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 85 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 87 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 106 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 108 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 368 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 370 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 435 | # ============================================================================= | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/pdf_generator.py | 437 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 139 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 141 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 194 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 196 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 246 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 248 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 285 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 287 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 324 | # ========================================================================= | COMMENT |
| 1060 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/web_app/auth.py | 130 | def get_or_create_github_user( | CODE |
| LOW⚡ | finrobot_equity/web_app/main.py | 396 | def execute_analysis_pipeline(task_id: str, req: AnalysisRequest): | CODE |
| LOW | finrobot_equity/core/tests/test_generate_report.py | 59 | def create_mock_peer_ev_ebitda_df(): | CODE |
| LOW | finrobot_equity/core/tests/test_generate_report.py | 72 | def create_financial_summary_df(): | CODE |
| LOW | …obot_equity/core/tests/test_retail_sentiment_client.py | 28 | def test_get_snapshot_aggregates_available_sources(monkeypatch): | CODE |
| LOW | …obot_equity/core/tests/test_retail_sentiment_client.py | 88 | def test_get_snapshot_skips_failed_source(monkeypatch): | CODE |
| LOW | …obot_equity/core/tests/test_retail_sentiment_client.py | 120 | def test_prompt_formatter_renders_retail_sentiment_snapshot(): | CODE |
| LOW | …obot_equity/core/tests/test_retail_sentiment_client.py | 158 | def test_html_formatter_renders_retail_sentiment_block(): | CODE |
| LOW | …obot_equity/core/tests/test_retail_sentiment_client.py | 185 | def test_professional_report_renders_retail_sentiment_section(): | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 47 | def test_enhanced_chart_generator(): | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 103 | def test_sensitivity_analyzer(): | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 384 | def test_advanced_chart_functions(): | CODE |
| LOW⚡ | finrobot_equity/core/src/create_equity_report.py | 41 | def load_credit_cashflow_metrics_from_csv(file_path: str) -> pd.DataFrame: | CODE |
| LOW⚡ | finrobot_equity/core/src/create_equity_report.py | 167 | def validate_and_fix_text_content(text_content: str, text_type: str, company_name: str, company_ticker: str) -> str: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 193 | def regenerate_text_if_needed(text_content: str, text_type: str, company_name: str, company_ticker: str, | CODE |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 181 | def prepare_financial_summary_df(analysis_df: pd.DataFrame) -> pd.DataFrame: | CODE |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 213 | def prepare_credit_metrics_df(ratios_df: pd.DataFrame) -> pd.DataFrame: | CODE |
| LOW | …bot_equity/core/src/modules/retail_sentiment_client.py | 136 | def _compute_source_alignment(bullish_values: List[float]) -> str: | CODE |
| LOW | …bot_equity/core/src/modules/retail_sentiment_client.py | 174 | def format_retail_sentiment_for_prompt(snapshot: Dict[str, Any]) -> str: | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 61 | def analyze_revenue_sensitivity(self, growth_range: Tuple[float, float] = (-0.05, 0.05), | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 108 | def analyze_margin_sensitivity(self, margin_range: Tuple[float, float] = (-0.02, 0.02), | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 160 | def generate_sensitivity_table(self, revenue_range: Tuple[float, float] = (-0.05, 0.05), | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 215 | def calculate_confidence_interval(self, metric: str, confidence: float = 0.95) -> Tuple[float, float]: | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 280 | def generate_sensitivity_summary(self) -> str: | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 318 | def create_sensitivity_analyzer(forecast_df: pd.DataFrame) -> SensitivityAnalyzer: | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/market_data_api.py | 28 | def fetch_fmp_enterprise_value(ticker: str, api_key: str, limit: int = 2000) -> pd.DataFrame | None: | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/market_data_api.py | 54 | def get_fmp_ratios_and_key_metrics(ticker: str, api_key: str, period: str = "annual", limit: int = 5) -> tuple[pd.DataFr | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/market_data_api.py | 127 | def get_fmp_cash_flow_statement(ticker: str, api_key: str, period: str = "annual", limit: int = 5) -> pd.DataFrame | Non | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/market_data_api.py | 148 | def get_comprehensive_financial_data(ticker: str, api_key: str, period: str = "annual", limit: int = 5) -> dict: | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/market_data_api.py | 425 | def get_comprehensive_company_metrics(ticker: str, api_key: str) -> dict: | CODE |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 167 | def combine_peer_financial_data(tickers: list[str], api_key: str, years_limit: int = 5) -> tuple[pd.DataFrame, pd.DataFr | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 479 | def format_dataframe_to_html_table(df, table_id="financial-table", header_class="bg-gray-200 font-semibold", row_class_c | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 629 | def format_valuation_breakdown_html(valuation_data: dict) -> str: | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 688 | def format_sensitivity_analysis_html(sensitivity_data): | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 715 | def format_catalyst_analysis_html(catalyst_data): | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 737 | def format_enhanced_news_html(news_data): | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 781 | def format_enhanced_charts_html(charts_data, report_data=None): | CODE |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 889 | def format_retail_sentiment_html(sentiment_data: dict) -> str: | STRING |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 1260 | def render_combined_html_report(data: dict) -> str: | STRING |
| LOW⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 280 | def create_key_data_table_style() -> TableStyle: | CODE |
| LOW⚡ | finrobot_equity/core/src/modules/pdf_generator.py | 876 | def generate_equity_report_pdf( | CODE |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 305 | def create_financial_table_style() -> TableStyle: | CODE |
| LOW | …ot_equity/core/src/modules/financial_data_processor.py | 20 | def extract_historical_metrics_from_api_data(financial_data: dict) -> pd.DataFrame | None: | CODE |
| LOW | …ot_equity/core/src/modules/financial_data_processor.py | 191 | def extract_historical_metrics_from_pdf_data(dataframes, table_config): | CODE |
| LOW | …ot_equity/core/src/modules/financial_data_processor.py | 298 | def calculate_growth_and_forecasts(df_historical: pd.DataFrame, forecast_config: dict) -> pd.DataFrame: | CODE |
| LOW | finrobot_equity/core/src/modules/catalyst_analyzer.py | 249 | def _add_default_calendar_events(self): | CODE |
| LOW | finrobot_equity/core/src/modules/catalyst_analyzer.py | 329 | def generate_catalyst_summary(self) -> str: | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 142 | def generate_revenue_yoy_chart(self, income_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 197 | def generate_ebitda_margin_chart(self, income_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 249 | def generate_gross_margin_chart(self, income_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 327 | def generate_ltm_ebitda_margin_chart(self, income_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 364 | def generate_relative_performance_chart(self, prices_df: pd.DataFrame, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 418 | def generate_ev_ebitda_band_chart(self, key_metrics_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 464 | def generate_p_fcf_band_chart(self, key_metrics_df: pd.DataFrame, ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 510 | def generate_peer_comparison_chart(self, peer_data: Dict[str, Dict], ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 579 | def generate_football_field_chart(self, valuation_data: Dict[str, Dict], ticker: str, | CODE |
| LOW⚡ | …ot_equity/core/src/modules/enhanced_chart_generator.py | 770 | def create_enhanced_chart_generator(config: ChartConfig = None) -> EnhancedChartGenerator: | CODE |
| LOW | …_equity/core/src/modules/html_template_professional.py | 579 | def format_sensitivity_analysis_html_professional(sensitivity_data: dict) -> str: | CODE |
| LOW | …_equity/core/src/modules/html_template_professional.py | 608 | def format_catalyst_analysis_html_professional(catalyst_data: dict) -> str: | CODE |
| LOW | …_equity/core/src/modules/html_template_professional.py | 667 | def format_retail_sentiment_html_professional(sentiment_data: dict) -> str: | CODE |
| 3482 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/__init__.py | 23 | CODE | |
| LOW | finrobot_equity/__init__.py | 24 | CODE | |
| LOW | finrobot_equity/web_app/auth.py | 5 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 8 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 9 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 11 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 12 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 13 | CODE | |
| LOW | finrobot_equity/web_app/main.py | 53 | CODE | |
| LOW | finrobot_equity/web_app/middleware/request_logger.py | 5 | CODE | |
| LOW | finrobot_equity/web_app/middleware/__init__.py | 2 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 2 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 2 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 2 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 3 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 3 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 3 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 3 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/web_app/database/__init__.py | 4 | CODE | |
| LOW | finrobot_equity/core/tests/test_generate_report.py | 11 | CODE | |
| LOW | finrobot_equity/core/tests/test_modules.py | 57 | CODE | |
| LOW | finrobot_equity/core/tests/test_modules.py | 57 | CODE | |
| LOW | finrobot_equity/core/tests/test_modules.py | 159 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 14 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 16 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 16 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 38 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 39 | CODE | |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 22 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 28 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 28 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 28 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 28 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 44 | CODE | |
| LOW | …bot_equity/core/src/modules/retail_sentiment_client.py | 6 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 4 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 11 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 11 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 19 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 21 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 21 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 21 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 21 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 25 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 26 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 27 | CODE | |
| LOW | finrobot_equity/core/src/modules/catalyst_analyzer.py | 8 | CODE | |
| LOW | finrobot_equity/core/src/modules/catalyst_analyzer.py | 9 | CODE | |
| 516 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | finrobot_equity/web_app/main.py | 459 | # Step 2: Create Equity Report | COMMENT |
| LOW⚡ | finrobot_equity/web_app/main.py | 519 | # Step 3: Generate PDF Report | COMMENT |
| LOW | finrobot_equity/web_app/main.py | 418 | # Step 1: Generate Financial Analysis | COMMENT |
| LOW | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 309 | # Step 1: keep only positive prices. The threshold matches the 2-decimal | COMMENT |
| LOW | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 321 | # Step 2: IQR-based outlier fence (Tukey's far fence, 3×IQR). | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 180 | # Step 1: historical_data — produces FinancialData | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 184 | # Step 2: dcf_calc — produces DCFResult | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 188 | # Step 3: output_gen — produces text | COMMENT |
| LOW | …ot_desktop/skills/private-equity/ai-readiness/SKILL.md | 30 | ### Step 1: Connect to Portfolio Data | COMMENT |
| LOW | …ot_desktop/skills/private-equity/ai-readiness/SKILL.md | 46 | ### Step 2: Per-Company Scan | COMMENT |
| LOW | …ot_desktop/skills/private-equity/ai-readiness/SKILL.md | 74 | ### Step 3: Rank Across the Portfolio | COMMENT |
| LOW | …ot_desktop/skills/private-equity/ai-readiness/SKILL.md | 92 | ### Step 4: Find the Replays | COMMENT |
| LOW | …ot_desktop/skills/private-equity/ai-readiness/SKILL.md | 102 | ### Step 5: Output | COMMENT |
| LOW | …op/skills/private-equity/portfolio-monitoring/SKILL.md | 29 | ### Step 1: Ingest Financial Package | COMMENT |
| LOW | …op/skills/private-equity/portfolio-monitoring/SKILL.md | 35 | ### Step 2: KPI Extraction & Variance Analysis | COMMENT |
| LOW | …op/skills/private-equity/portfolio-monitoring/SKILL.md | 54 | ### Step 3: Flag & Summarize | COMMENT |
| LOW | …op/skills/private-equity/portfolio-monitoring/SKILL.md | 67 | ### Step 4: Trend Analysis | COMMENT |
| LOW | …desktop/skills/private-equity/dd-meeting-prep/SKILL.md | 29 | ### Step 1: Meeting Context | COMMENT |
| LOW | …desktop/skills/private-equity/dd-meeting-prep/SKILL.md | 38 | ### Step 2: Generate Question List | COMMENT |
| LOW⚡ | …desktop/skills/private-equity/dd-meeting-prep/SKILL.md | 89 | ### Step 3: Benchmarks & Context | COMMENT |
| LOW⚡ | …desktop/skills/private-equity/dd-meeting-prep/SKILL.md | 97 | ### Step 4: Red Flags to Probe | COMMENT |
| LOW⚡ | …desktop/skills/private-equity/dd-meeting-prep/SKILL.md | 106 | ### Step 5: Output | COMMENT |
| LOW | …ot_desktop/skills/private-equity/dd-checklist/SKILL.md | 29 | ### Step 1: Scope the Diligence | COMMENT |
| LOW | …ot_desktop/skills/private-equity/dd-checklist/SKILL.md | 38 | ### Step 2: Generate Workstream Checklists | COMMENT |
| LOW | …ot_desktop/skills/private-equity/dd-checklist/SKILL.md | 96 | ### Step 3: Status Tracking | COMMENT |
| LOW | …ot_desktop/skills/private-equity/dd-checklist/SKILL.md | 107 | ### Step 4: Red Flag Summary | COMMENT |
| LOW | …ot_desktop/skills/private-equity/dd-checklist/SKILL.md | 116 | ### Step 5: Output | COMMENT |
| LOW | …_desktop/skills/private-equity/deal-screening/SKILL.md | 29 | ### Step 1: Extract Deal Facts | COMMENT |
| LOW | …_desktop/skills/private-equity/deal-screening/SKILL.md | 43 | ### Step 2: Screen Against Criteria | COMMENT |
| LOW | …_desktop/skills/private-equity/deal-screening/SKILL.md | 60 | ### Step 3: Quick Assessment | COMMENT |
| LOW | …_desktop/skills/private-equity/deal-screening/SKILL.md | 69 | ### Step 4: Output | COMMENT |
| LOW | …_desktop/skills/private-equity/unit-economics/SKILL.md | 31 | ### Step 1: Identify Business Model | COMMENT |
| LOW | …_desktop/skills/private-equity/unit-economics/SKILL.md | 39 | ### Step 2: Core Metrics | COMMENT |
| LOW | …_desktop/skills/private-equity/unit-economics/SKILL.md | 79 | ### Step 3: Benchmarking | COMMENT |
| LOW | …_desktop/skills/private-equity/unit-economics/SKILL.md | 89 | ### Step 4: Revenue Quality Score | COMMENT |
| LOW | …_desktop/skills/private-equity/unit-economics/SKILL.md | 103 | ### Step 5: Output | COMMENT |
| LOW | finrobot_desktop/skills/private-equity/ic-memo/SKILL.md | 29 | ### Step 1: Gather Inputs | COMMENT |
| LOW | finrobot_desktop/skills/private-equity/ic-memo/SKILL.md | 42 | ### Step 2: Draft Memo Structure | COMMENT |
| LOW | finrobot_desktop/skills/private-equity/ic-memo/SKILL.md | 95 | ### Step 3: Output Format | COMMENT |
| LOW⚡ | …t_desktop/skills/private-equity/deal-sourcing/SKILL.md | 31 | ### Step 1: Discover Companies | COMMENT |
| LOW⚡ | …t_desktop/skills/private-equity/deal-sourcing/SKILL.md | 40 | ### Step 2: CRM Check | COMMENT |
| LOW⚡ | …t_desktop/skills/private-equity/deal-sourcing/SKILL.md | 50 | ### Step 3: Draft Founder Outreach | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 30 | ### Step 1: Baseline Assessment | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 39 | ### Step 2: Value Creation Levers | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 71 | ### Step 3: EBITDA Bridge | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 87 | ### Step 4: 100-Day Plan | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 111 | ### Step 5: KPI Dashboard | COMMENT |
| LOW | …top/skills/private-equity/value-creation-plan/SKILL.md | 125 | ### Step 6: Output | COMMENT |
| LOW | …esktop/skills/private-equity/returns-analysis/SKILL.md | 30 | ### Step 1: Gather Deal Inputs | COMMENT |
| LOW | …esktop/skills/private-equity/returns-analysis/SKILL.md | 60 | ### Step 2: Base Case Returns | COMMENT |
| LOW | …esktop/skills/private-equity/returns-analysis/SKILL.md | 82 | ### Step 3: Sensitivity Tables | COMMENT |
| LOW | …esktop/skills/private-equity/returns-analysis/SKILL.md | 102 | ### Step 4: Scenario Analysis | COMMENT |
| LOW | …esktop/skills/private-equity/returns-analysis/SKILL.md | 115 | ### Step 5: Output | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 191 | ### Step 1: Analyze the Template Structure | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 206 | ### Step 2: Filling in Data Without Breaking Formulas | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 230 | ### Step 3: Validating Formulas | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 257 | ### Step 4: Quality Checks by Sheet | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 292 | ### Step 5: Cross-Statement Integrity Checks | COMMENT |
| LOW | …p/skills/financial-analysis/3-statement-model/SKILL.md | 303 | ### Step 6: Final Review | COMMENT |
| LOW | …ktop/skills/financial-analysis/clean-data-xls/SKILL.md | 36 | ### Step 1: Scope | COMMENT |
| 147 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/deploy.gcloud.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | finrobot_equity/requirements.txt | 41 | # Note: configparser, argparse, datetime, json, os, subprocess, | COMMENT |
| LOW | finrobot_equity/deploy.sh | 1 | #!/bin/bash | COMMENT |
| LOW | finrobot_desktop/dev.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 181 | settings = get_settings(**non_secret_overrides) | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 221 | COMMENT | |
| LOW | finrobot_desktop/finrobot/server.py | 241 | COMMENT | |
| LOW | finrobot_desktop/finrobot/server.py | 261 | # the provider / LLM rate limits. Single runs share the same pool. | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 301 | app.state.settings_path = settings_path | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 321 | # full (BUG-043). 429 only fires under abnormal volume — buckets are sized | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 601 | # talks to this server with that domain in the Host header. | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 1241 | # Non-streaming fallback (matches Claude Code): if the stream above fails | COMMENT |
| LOW | finrobot_desktop/finrobot/server.py | 1361 | # sessions dir (path traversal, BUG-089). Close the identifier off at the | COMMENT |
| LOW | finrobot_desktop/finrobot/config.py | 21 | logger = logging.getLogger(__name__) | COMMENT |
| LOW | finrobot_desktop/finrobot/config.py | 41 | # Clash proxy the OpenAI handshake costs ~3.3s and is otherwise paid on EVERY | COMMENT |
| LOW | finrobot_desktop/finrobot/config.py | 201 | # state, NOT an error: the deterministic data layer (prices/financials/DCF) | COMMENT |
| LOW | finrobot_desktop/finrobot/config.py | 261 | # returns ``change / prev_close * 100`` — e.g. 3.0 == ±3 %). 3 % is a ~2σ | COMMENT |
| LOW | finrobot_desktop/finrobot/ratelimit.py | 41 | # fires under abnormal volume (a runaway loop / retry storm), never normal use: | COMMENT |
| LOW | finrobot_desktop/finrobot/run_store.py | 21 | COMMENT | |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 201 | # FileNotFoundError; a wedged/slow repo (large tree, index.lock) raises | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 481 | # ACTUALLY nulled (``valuation_withheld`` set by _attach_numeric_audit or the | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 1041 | # Collect all meaningful structured outputs for the combined report. | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 1061 | # 2026-07-09): display-only, populated for tickers the SOTP gate above | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 1101 | # DCF implied price, sniper levels, price target, market_cap) | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/semantic_diff.py | 41 | # it is NOT a driver of the change — naming a $0.00 contributor as the "主因" | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/sqlite_store.py | 101 | _SUMMARY_COLUMNS = ( | COMMENT |
| LOW | finrobot_desktop/finrobot/artifact/sqlite_store.py | 121 | # re-project their mirror columns under the new extractor rules instead of | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/orchestrator.py | 501 | COMMENT | |
| LOW | finrobot_desktop/finrobot/engine/agents/factory.py | 41 | COMMENT | |
| LOW | finrobot_desktop/finrobot/engine/agents/factory.py | 61 | return f"Invalid ticker symbol: {ticker}" | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/ic_memo.py | 221 | required_data=[], | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 41 | COMMENT | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 161 | # model must ALWAYS see legal JSON, so over-budget payloads are re-compacted | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 581 | # in structured_results — Monte Carlo seeding, valuation | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 581 | # rows for a financial-sector issuer — so without DDM a bank leads on peer P/B + P/E | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 601 | # Residual income (justified P/B) from the SAME seed inputs — the bank's | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 641 | # FX-normalize a foreign issuer's financials to canonical USD before seeding | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 661 | _orig_quote_currency, fmp_api_key=getattr(deps.settings, "fmp_api_key", None) | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 681 | # FCFF-DCF at the SOURCE, not just its football-field row. Free cash flow, EBITDA | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 861 | ) | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 901 | AttributeError, | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1041 | # only number available would be fabricated — methods agree far off-market / | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1141 | # | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1321 | canonical_target = canonical.target | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1361 | updates["recommendation"] = canonical_verdict | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1481 | # Both halves are PURE + independently tested: the canonical headline by | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1521 | result = await synthesis_agent.run(thesis_prompt, deps=deps) # type: ignore[call-overload] | COMMENT |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1541 | # verdict strongly disagrees with the stock's own trailing-1y price action — | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/ddm.py | 81 | if not isinstance(financial_data, FinancialData): | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/ddm.py | 181 | # Declared dividend history for the DDM growth seed. Used only for | COMMENT |
| LOW | …ot_desktop/finrobot/engine/pipelines/_thesis_prompt.py | 101 | # margin) has already exceeded the implied steady-state, so "above peak = | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/dcf.py | 121 | financial_data = await normalize_financials_to_usd( | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 461 | return company | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 501 | # The deterministic screen intentionally over-selects (PEER_SCREEN_TOP_N=7) | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 521 | # (validate_peer_comps / validate_has_peers, min_peers=3) already gates a thin | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 681 | # further merging needed here. | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 701 | COMMENT | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 901 | # (``income.ebitda`` = OI + D&A) — the SAME caliber as the trailing band it | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 941 | # Recent stock-funded acquisition / large secondary → the TTM snapshot mixes a | COMMENT |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 1001 | cyclical=cyclical, | COMMENT |
| 260 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/run_web_app.py | 56 | except Exception as e: | CODE |
| LOW⚡ | finrobot_equity/web_app/main.py | 391 | except Exception as e: | CODE |
| LOW⚡ | finrobot_equity/web_app/main.py | 405 | except Exception as e: | CODE |
| LOW⚡ | finrobot_equity/web_app/main.py | 455 | except Exception as e: | CODE |
| LOW⚡ | finrobot_equity/web_app/main.py | 515 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 95 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 106 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 543 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 602 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 743 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/main.py | 778 | except Exception as e: | CODE |
| LOW | finrobot_equity/web_app/middleware/request_logger.py | 61 | except Exception: | CODE |
| LOW | finrobot_equity/web_app/middleware/request_logger.py | 71 | except Exception: | CODE |
| LOW | finrobot_equity/web_app/middleware/request_logger.py | 101 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_generate_report.py | 296 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 40 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 97 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 146 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 204 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 264 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 327 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 378 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/tests/test_modules.py | 423 | except Exception as e: | CODE |
| MEDIUM | finrobot_equity/core/src/create_equity_report.py | 90 | print(f"An error occurred while loading credit metrics from CSV: {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/create_equity_report.py | 461 | print("Error: Could not load analysis CSV file") | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 89 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 154 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 226 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 390 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 393 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 414 | except Exception: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 416 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 501 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 741 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 746 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 801 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 817 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 863 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 874 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/create_equity_report.py | 890 | except Exception as e: | CODE |
| MEDIUM⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 396 | print(f"Error performing catalyst analysis: {e}") | CODE |
| MEDIUM⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 404 | print("Error: OpenAI API key not loaded. Skipping text generation.") | CODE |
| MEDIUM⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 469 | print(f"Error generating text for '{text_type}': {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 107 | print(f"Error loading configuration: {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 128 | print("Error: Could not fetch income statement data from FMP API. Exiting.") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 148 | print("Error: Failed to process historical metrics from API data. Exiting.") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 222 | print(f"Error fetching peer data: {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 271 | print(f"Error fetching company news: {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 295 | print(f"Error fetching retail sentiment insights: {e}") | CODE |
| MEDIUM | finrobot_equity/core/src/generate_financial_analysis.py | 341 | print(f"Error performing sensitivity analysis: {e}") | CODE |
| LOW⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 395 | except Exception as e: | CODE |
| LOW⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 468 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 106 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 221 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 270 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 294 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 340 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 378 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 398 | except Exception as e: | CODE |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 482 | except Exception as e: | CODE |
| 168 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | finrobot_equity/web_app/middleware/request_logger.py | 61 | except Exception: | CODE |
| HIGH | finrobot_equity/web_app/middleware/request_logger.py | 71 | except Exception: | CODE |
| HIGH | finrobot_equity/core/src/create_equity_report.py | 414 | except Exception: | CODE |
| HIGH | finrobot_equity/core/src/create_equity_report.py | 668 | except: | CODE |
| HIGH | finrobot_equity/core/src/create_equity_report.py | 673 | except: | CODE |
| HIGH | finrobot_equity/core/src/create_equity_report.py | 661 | except: | CODE |
| HIGH | finrobot_equity/core/src/generate_financial_analysis.py | 98 | except: | CODE |
| HIGH | …bot_equity/core/src/modules/professional_pdf_report.py | 1403 | except: | CODE |
| HIGH | finrobot_desktop/finrobot/server.py | 899 | except (ValueError, TypeError, AttributeError): | CODE |
| HIGH | finrobot_desktop/finrobot/secret_store.py | 228 | except OSError: | CODE |
| HIGH | finrobot_desktop/finrobot/secret_store.py | 262 | except FileExistsError: | CODE |
| HIGH | finrobot_desktop/finrobot/sdk.py | 165 | except RuntimeError: | CODE |
| HIGH | finrobot_desktop/finrobot/cli.py | 675 | except PermissionError: | CODE |
| HIGH | finrobot_desktop/finrobot/artifact/summary_extractor.py | 192 | except ValueError: | CODE |
| HIGH | finrobot_desktop/finrobot/engine/pipelines/runner.py | 948 | except (ProviderError, ValueError, KeyError): | CODE |
| HIGH | …desktop/finrobot/engine/backtest/backtrader_adapter.py | 47 | except ImportError: | CODE |
| HIGH | …desktop/finrobot/engine/backtest/backtrader_adapter.py | 414 | except ImportError: | CODE |
| HIGH | …bot_desktop/finrobot/engine/data/historical_loaders.py | 392 | except ValueError: | CODE |
| HIGH | finrobot_desktop/finrobot/engine/data/symbol_index.py | 135 | except ValueError: | CODE |
| HIGH | …op/finrobot/engine/data/providers/yfinance_provider.py | 29 | except (AttributeError, OSError, TypeError): | CODE |
| HIGH | …desktop/finrobot/engine/data/providers/fmp_provider.py | 1480 | except (TypeError, ValueError): | CODE |
| HIGH | …desktop/finrobot/engine/data/providers/fmp_provider.py | 1509 | except (TypeError, ValueError): | CODE |
| HIGH | …sktop/finrobot/engine/data/providers/edgar_provider.py | 2080 | except _ADAPTER_CATCH: | CODE |
| HIGH | …sktop/finrobot/engine/data/providers/edgar_provider.py | 2184 | except (TypeError, ValueError): | CODE |
| HIGH | …sktop/finrobot/engine/data/providers/edgar_provider.py | 839 | except ValueError: | CODE |
| HIGH | …sktop/finrobot/engine/data/providers/edgar_provider.py | 1830 | except _ADAPTER_CATCH: | CODE |
| HIGH | finrobot_desktop/finrobot/routes/settings.py | 841 | except OSError: | CODE |
| HIGH | finrobot_desktop/finrobot/routes/data.py | 402 | except (ValueError, TypeError): | CODE |
| HIGH | finrobot_desktop/tests/conftest.py | 82 | except Exception: | CODE |
| HIGH | finrobot_desktop/tests/unit/test_obs_context.py | 20 | except ValueError: | CODE |
| HIGH | finrobot_desktop/tests/audit/test_chat_integration.py | 64 | except Exception: | CODE |
| HIGH | …utogen/finrobot/data_source/filings_src/sec_filings.py | 57 | except ValueError: | CODE |
| HIGH | …utogen/finrobot/data_source/filings_src/sec_filings.py | 63 | except ValueError: | CODE |
| HIGH | …source/filings_src/prepline_sec_filings/api/section.py | 83 | except ValueError: | CODE |
| HIGH | …source/filings_src/prepline_sec_filings/api/section.py | 89 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ot_equity/core/output/TSLA_Equity_Research_Report.html | 255 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Financially, Tesla experienced robu | CODE |
| MEDIUM | …ot_equity/core/output/TSLA_Equity_Research_Report.html | 263 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Tesla delivered robust revenue grow | CODE |
| MEDIUM | …ot_equity/core/output/TSLA_Equity_Research_Report.html | 523 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Tesla's EBITDA margins, though decl | CODE |
| MEDIUM⚡ | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 251 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Nvidia’s product portfolio is ancho | CODE |
| MEDIUM⚡ | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 255 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">The company’s profitability has sca | CODE |
| MEDIUM⚡ | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 264 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">The primary driver of this performa | CODE |
| MEDIUM⚡ | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 266 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Compared to peers, Nvidia’s EBITDA | CODE |
| MEDIUM | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 314 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Nvidia continues to command a premi | CODE |
| MEDIUM | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 535 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">In terms of profitability, Nvidia's | CODE |
| MEDIUM | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 569 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Nvidia's revenue growth is projecte | CODE |
| MEDIUM | …ot_equity/core/output/NVDA_Equity_Research_Report.html | 578 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Nvidia's EBITDA margin is projected | CODE |
| MEDIUM⚡ | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 253 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Financially, Microsoft has demonstr | CODE |
| MEDIUM⚡ | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 253 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Financially, Microsoft has demonstr | CODE |
| MEDIUM⚡ | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 262 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Microsoft continues to demonstrate | CODE |
| MEDIUM⚡ | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 266 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Profitability has improved meaningf | CODE |
| MEDIUM⚡ | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 270 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Outlook: Microsoft is well-position | CODE |
| MEDIUM | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 314 | <div class="body-text"><p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;"> | CODE |
| MEDIUM | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 314 | <div class="body-text"><p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;"> | CODE |
| MEDIUM | …ot_equity/core/output/MSFT_Equity_Research_Report.html | 530 | <div class="body-text"><p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;"> | CODE |
| MEDIUM⚡ | …ot_equity/core/output/META_Equity_Research_Report.html | 251 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Meta’s primary revenue driver remai | CODE |
| MEDIUM⚡ | …ot_equity/core/output/META_Equity_Research_Report.html | 253 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Operationally, Meta has demonstrate | CODE |
| MEDIUM⚡ | …ot_equity/core/output/META_Equity_Research_Report.html | 260 | <div class="body-text"><p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;"> | CODE |
| MEDIUM | …ot_equity/core/output/META_Equity_Research_Report.html | 319 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Given Meta’s robust growth outlook, | CODE |
| MEDIUM | …ot_equity/core/output/META_Equity_Research_Report.html | 513 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">In terms of revenue, Meta's growth | CODE |
| MEDIUM | …ot_equity/core/output/META_Equity_Research_Report.html | 547 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Meta experienced a notable revenue | CODE |
| MEDIUM | …bot_equity/core/output/COP_Equity_Research_Report.html | 254 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">ConocoPhillips delivered robust fin | CODE |
| MEDIUM | …bot_equity/core/output/COP_Equity_Research_Report.html | 306 | <div class="body-text"><p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;"> | CODE |
| MEDIUM | …bot_equity/core/output/COP_Equity_Research_Report.html | 310 | <p style="margin-bottom:0.4rem; font-size:0.875rem; color:#334155; line-height:1.7;">Looking at growth, COP’s revenue is | CODE |
| MEDIUM⚡ | finrobot_equity/core/src/create_equity_report.py | 176 | # Detect CSV-like patterns (more robust detection) | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/modules/market_data_api.py | 387 | """Fetches comprehensive company profile data from FMP API.""" | STRING |
| MEDIUM | finrobot_desktop/finrobot/server.py | 610 | # harness green without weakening the real-world guarantee (arbitrary attacker | COMMENT |
| MEDIUM | finrobot_desktop/finrobot/config.py | 414 | return # built-in test harness provider — no key required | CODE |
| MEDIUM | finrobot_desktop/finrobot/llm_probe.py | 104 | # built-in harness provider with NO registry entry, and any registered | COMMENT |
| MEDIUM | …t_desktop/finrobot/engine/pipelines/equity_research.py | 765 | # (terminal growth >= WACC — very low-WACC profiles: low-beta, high-leverage | COMMENT |
| MEDIUM | finrobot_desktop/finrobot/engine/pipelines/dcf.py | 154 | # which arises for very low-WACC profiles (low-beta, high-leverage utilities / | COMMENT |
| MEDIUM | …_desktop/finrobot/engine/compute/operators/dcf_seed.py | 1049 | # Cap market-leverage at 0.80 for WACC weighting. Above ~80% debt the | COMMENT |
| MEDIUM | …_desktop/finrobot/engine/compute/operators/ddm_seed.py | 116 | # Span the actual calendar years, not the point count — robust to a missing | COMMENT |
| MEDIUM | …robot_desktop/finrobot/engine/compute/operators/lbo.py | 82 | # fail at 5× leverage; XOM/AAPL/KO/VZ deleverage cleanly and pass). Undefined (None) | COMMENT |
| MEDIUM | …robot_desktop/finrobot/engine/compute/operators/lbo.py | 201 | # understate leverage and inflate exit equity / IRR. | COMMENT |
| MEDIUM | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 451 | # robust optionality. 2pp ≈ the routine estimation error in beta / ERP, so it's | COMMENT |
| MEDIUM | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 487 | # WACC-sensitive, not robust optionality. | COMMENT |
| MEDIUM | …_desktop/finrobot/engine/compute/operators/lbo_seed.py | 336 | # (MU: leverage 5× peak EBITDA = 10.6× normalized). Mirrors the Damodaran | COMMENT |
| MEDIUM | …_desktop/finrobot/engine/compute/operators/lbo_seed.py | 386 | # constructed below are unchanged. nwc_change/interest/leverage are omitted: | COMMENT |
| MEDIUM | …desktop/finrobot/engine/compute/operators/multiples.py | 86 | # robust mid-gap choice. A multiple above it is still a real, computable number (it | COMMENT |
| MEDIUM | …/finrobot/engine/compute/operators/audit/ttm_period.py | 65 | # Newest-first as carried by the provider; sort descending to be order-robust. | COMMENT |
| MEDIUM | finrobot_desktop/finrobot/engine/data/cache.py | 205 | # is the robust choice. | STRING |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_lbo.py | 116 | # leverage 10× > entry 8× EBITDA → entry_equity = 800 − 1000 = −200 < 0. | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_lbo.py | 129 | # Default leverage 5 keeps entry_equity > 0 (300); a 1.0x exit + high | COMMENT |
| MEDIUM | finrobot_desktop/tests/unit/test_dcf_seed.py | 357 | """Market leverage is capped at 80% for WACC weighting. Above that the thin | STRING |
| MEDIUM | finrobot_desktop/tests/unit/test_thesis_prompt.py | 570 | # grades confidence — the test only needs a robust BUY, not a specific tier. | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/audit/test_financial_sanity.py | 177 | """ValueCo: LTM EBITDA $200M, 8x entry, 4x leverage, 5yr hold.""" | STRING |
| MEDIUM | …/pages/artifact-detail/chapters/ChapterAuditBanner.tsx | 108 | // is robust to legacy / unknown statuses: a pre-2026-06-15 `review_only` artifact | COMMENT |
| MEDIUM | finrobot_desktop/scripts/verify_report_field_basket.py | 77 | # harness shares the system's own thresholds (no parallel tolerance definition). | COMMENT |
| MEDIUM | finrobot_desktop/scripts/build_truth_anchor.py | 51 | # (ticker, archetype) — the basket the harness covers. Kept modest to stay | COMMENT |
| MEDIUM | finrobot_desktop/scripts/build_truth_anchor.py | 70 | # it and let the harness FAIL our correct live value against a stale anchor. | COMMENT |
| MEDIUM | finrobot_desktop/scripts/build_truth_anchor.py | 216 | # a 15-year-old count as a baseline the harness would FAIL our live value on. | COMMENT |
| MEDIUM | finrobot_desktop/scripts/probe_foreign_fx_end_to_end.py | 4 | market quantities are in. BUG-006 / cross-currency (T1#6) regression harness. | STRING |
| MEDIUM | finrobot_autogen/experiments/portfolio_optimization.py | 129 | # As the Chief Investment Officer, your task is to evaluate the potential investment in Company ABC based on the pro | COMMENT |
| MEDIUM | finrobot_autogen/experiments/portfolio_optimization.py | 164 | # Integrate Findings: Compile the insights from all three groups to get a holistic view of Company ABC's potential. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/web_app/main.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_equity/web_app/middleware/__init__.py | 4 | __all__ = ["RequestLoggerMiddleware"] | CODE |
| LOW | finrobot_equity/web_app/database/__init__.py | 19 | __all__ = [ | CODE |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_equity/core/src/modules/catalyst_analyzer.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ot_equity/core/src/modules/enhanced_chart_generator.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_equity/core/src/modules/valuation_engine.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | …bot_equity/core/src/modules/enhanced_text_generator.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_equity/core/src/modules/report_structure.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_equity/core/src/modules/news_integrator.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | …obot_equity/core/src/modules/equity_agents/__init__.py | 12 | __all__ = [ | CODE |
| LOW | finrobot_desktop/finrobot/auth.py | 34 | __all__ = ["CAPABILITY_TOKEN_ENV", "CapabilityAuthMiddleware"] | CODE |
| LOW | finrobot_desktop/finrobot/server.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/secret_store.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/config.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/paths.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/__init__.py | 12 | __all__ = ["FinRobot", "PipelineResult"] | CODE |
| LOW | finrobot_desktop/finrobot/run_store.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/obs/__init__.py | 13 | __all__ = [ | CODE |
| LOW | finrobot_desktop/finrobot/audit/persistence.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/audit/transcript.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/artifact/__init__.py | 34 | __all__ = [ | CODE |
| LOW | finrobot_desktop/finrobot/artifact/sqlite_store.py | 58 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/artifact/migrate.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/orchestrator.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/analysis/prompts.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/analysis/qa.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ot_desktop/finrobot/engine/analysis/news_classifier.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/ic_memo.py | 57 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 207 | logger = logging.getLogger(__name__) | CODE |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 115 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/ddm.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nrobot_desktop/finrobot/engine/pipelines/validators.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/lbo.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/dcf.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/comps.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/base.py | 38 | __all__ = [ | CODE |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | …desktop/finrobot/engine/pipelines/earnings_analysis.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | …top/finrobot/engine/primitives/historical_valuation.py | 282 | __all__ = [ | CODE |
| LOW | …desktop/finrobot/engine/backtest/backtrader_adapter.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | …bot_desktop/finrobot/engine/backtest/strategy_agent.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | …robot/engine/compute/coordinators/technical_payload.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | …sktop/finrobot/engine/compute/coordinators/dcf_seed.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | …desktop/finrobot/engine/compute/coordinators/market.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | …t_desktop/finrobot/engine/compute/coordinators/news.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | …desktop/finrobot/engine/compute/operators/ownership.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nrobot/engine/compute/operators/valuation_synthesis.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …_desktop/finrobot/engine/compute/operators/dcf_seed.py | 146 | logger = logging.getLogger(__name__) | CODE |
| LOW | …robot_desktop/finrobot/engine/compute/operators/lbo.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | …_desktop/finrobot/engine/compute/operators/lbo_seed.py | 416 | __all__ = ["seed_lbo_inputs"] | CODE |
| LOW | …op/finrobot/engine/compute/operators/audit/__init__.py | 30 | __all__ = [ | CODE |
| LOW | finrobot_desktop/finrobot/engine/skills/registry.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/data/validator.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | …bot_desktop/finrobot/engine/data/historical_loaders.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | …bot_desktop/finrobot/engine/data/sec_holdings_cache.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/data/cache.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | finrobot_desktop/finrobot/engine/data/cache.py | 331 | async def _set_slot(self, slot_key: str, ticker: str, payload_json: str) -> None: | CODE |
| LOW | finrobot_desktop/finrobot/engine/data/factory.py | 17 | logger = logging.getLogger(__name__) | CODE |
| 36 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/web_app/middleware/request_logger.py | 27 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 234 | CODE | |
| LOW | finrobot_equity/core/src/create_equity_report.py | 309 | CODE | |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 25 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 213 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 266 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 404 | CODE | |
| LOW | finrobot_equity/core/src/generate_pdf_report.py | 566 | CODE | |
| LOW | …nrobot_equity/core/src/modules/sensitivity_analyzer.py | 108 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 167 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 240 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 307 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 345 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 425 | CODE | |
| LOW | finrobot_equity/core/src/modules/market_data_api.py | 549 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 439 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 607 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 688 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 737 | CODE | |
| LOW | finrobot_equity/core/src/modules/html_renderer.py | 781 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 371 | CODE | |
| LOW | finrobot_equity/core/src/modules/pdf_generator.py | 600 | CODE | |
| LOW | …ot_equity/core/src/modules/financial_data_processor.py | 191 | CODE | |
| LOW | …ot_equity/core/src/modules/financial_data_processor.py | 298 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 533 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 579 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 608 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 720 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 832 | CODE | |
| LOW | …_equity/core/src/modules/html_template_professional.py | 965 | CODE | |
| LOW | finrobot_equity/core/src/modules/valuation_engine.py | 47 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 326 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 775 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 958 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 1316 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 1358 | CODE | |
| LOW | …bot_equity/core/src/modules/professional_pdf_report.py | 1390 | CODE | |
| LOW | …bot_equity/core/src/modules/enhanced_text_generator.py | 393 | CODE | |
| LOW | …bot_equity/core/src/modules/enhanced_text_generator.py | 435 | CODE | |
| LOW | …bot_equity/core/src/modules/enhanced_text_generator.py | 490 | CODE | |
| LOW | finrobot_equity/core/src/modules/chart_generator.py | 364 | CODE | |
| LOW | finrobot_equity/core/src/modules/chart_generator.py | 735 | CODE | |
| LOW | finrobot_equity/core/src/modules/chart_generator.py | 908 | CODE | |
| LOW | finrobot_desktop/finrobot/server.py | 660 | CODE | |
| LOW | finrobot_desktop/finrobot/server.py | 754 | CODE | |
| LOW | finrobot_desktop/finrobot/server.py | 834 | CODE | |
| LOW | finrobot_desktop/finrobot/audit/persistence.py | 172 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/builders.py | 299 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/semantic_diff.py | 229 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/semantic_diff.py | 268 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/sqlite_store.py | 321 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/contract.py | 210 | CODE | |
| LOW | finrobot_desktop/finrobot/artifact/contract.py | 286 | CODE | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 210 | CODE | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 887 | CODE | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/runner.py | 967 | CODE | |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 512 | CODE | |
| LOW | …t_desktop/finrobot/engine/pipelines/equity_research.py | 966 | CODE | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/result.py | 14 | CODE | |
| LOW | finrobot_desktop/finrobot/engine/pipelines/_helpers.py | 376 | CODE | |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …t_desktop/finrobot/engine/pipelines/equity_research.py | 1017 | "perpetual-growth model undefined). The valuation conclusion relies on " | CODE |
| HIGH | …ot_desktop/finrobot/engine/pipelines/_thesis_prompt.py | 172 | # verdict, leaves price_target null, and explains via the target range + | COMMENT |
| HIGH | …nrobot_desktop/finrobot/engine/pipelines/validators.py | 571 | # structure is impossible and the operator emits moic/irr = None (undefined, | COMMENT |
| HIGH⚡ | finrobot_desktop/finrobot/engine/models/financial.py | 1364 | eps_direction: str # "beat" | "miss" | "inline" | "n/a" (n/a = undefined, est == 0) | CODE |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/ddm.py | 50 | Model perpetuity is undefined). | STRING |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/ddm.py | 147 | (Gordon Growth Model undefined). | STRING |
| HIGH | …sktop/finrobot/engine/compute/operators/peer_screen.py | 443 | "payload — size band undefined, comps step must degrade" | CODE |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 187 | (Gordon Growth Model undefined). | STRING |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 378 | ValueError: when terminal_growth >= wacc (Gordon Growth Model undefined). | STRING |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 650 | ValueError: terminal_growth >= wacc (Gordon Growth Model undefined). | STRING |
| HIGH | …ot_desktop/finrobot/engine/data/normalize/contracts.py | 186 | slips every ``is None`` gate, serializes to close:null, and crashes chart | STRING |
| HIGH | …nrobot_desktop/finrobot/engine/data/normalize/price.py | 33 | a NaN close slips every ``is None`` gate, serializes to null, and crashes | STRING |
| HIGH | finrobot_desktop/finrobot/routes/data.py | 532 | a non-1y / cache-miss response left it undefined). Set them for every path. | STRING |
| HIGH⚡ | …ot_desktop/tests/unit/test_equity_research_pipeline.py | 1246 | so calculate_dcf raises (Gordon undefined) and financial_modeling degrades. | STRING |
| HIGH | finrobot_desktop/tests/unit/test_fmp_provider.py | 2335 | # No COGS for a bank → gross margin undefined, not the ~60% phantom. | COMMENT |
| HIGH | …esktop/tests/audit/test_valuation_synthesis_methods.py | 186 | negative-earnings P/E is undefined, not merely missing data). A substantive | STRING |
| HIGH | …sktop/tests/artifact/test_historical_metrics_freeze.py | 15 | maps a missing key to null, no crash). | STRING |
| HIGH⚡ | finrobot_desktop/tests/routes/test_dashboard_landing.py | 458 | # Empty group → empty set → null, distinct from global. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 22 | Unlike the single-model paradigm of [**FinGPT**](https://github.com/AI4Finance-Foundation/FinGPT), FinRobot supports end | CODE |
| MEDIUM | finrobot_equity/README.md | 172 | │ │ ├── text_generator_agents.py # LLM orchestration | CODE |
| MEDIUM | finrobot_desktop/finrobot/server.py | 272 | # orchestration above it reuses artifact_store + data_layer (ADR-0012). | COMMENT |
| MEDIUM | finrobot_desktop/finrobot/artifact/sqlite_store.py | 129 | # ## Data Collection …" markdown scaffolding into the exported-HTML timeline | STRING |
| MEDIUM | finrobot_desktop/finrobot/artifact/sqlite_store.py | 131 | # rule / blank scaffolding and previews the first prose line; bump so existing | STRING |
| MEDIUM | finrobot_desktop/finrobot/engine/pipelines/runner.py | 831 | # numbers the model could only hallucinate from its own prior | COMMENT |
| MEDIUM | …t_desktop/finrobot/engine/compute/coordinators/news.py | 45 | # Markdown/XML scaffolding an attacker uses to fake structure: leading heading | COMMENT |
| MEDIUM | …sktop/finrobot/engine/data/providers/edgar_provider.py | 1750 | # RAG see something coherent. | COMMENT |
| MEDIUM | finrobot_desktop/finrobot/routes/sentiment.py | 157 | # wearing cached scaffolding. Rendering it available=True both contradicts the | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_peer_screen.py | 803 | # scaffolding (the liveness gate acts before the P/E gate), never copied from code. | COMMENT |
| MEDIUM | …ot_desktop/tests/unit/test_equity_research_pipeline.py | 241 | # Stub executor to avoid real compute in unit test of orchestration | COMMENT |
| MEDIUM | …ot_desktop/tests/unit/test_equity_research_pipeline.py | 267 | # Stub executor to avoid real compute in unit test of orchestration | COMMENT |
| MEDIUM | finrobot_desktop/tests/unit/test_dcf_pipeline.py | 175 | # Stub executor to avoid real LLM/compute calls in orchestration test | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_orchestrator.py | 492 | # ask_filings — 10-K RAG Q&A as a chat tool. | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_orchestrator.py | 548 | # run_qa raises ValueError("No 10-K RAG data ...") when EDGAR has no | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_pipeline_base.py | 1225 | # payload (e.g. a full 10-K) can never flood the prompt past the context window. | COMMENT |
| MEDIUM | finrobot_desktop/tests/unit/test_pipeline_base.py | 391 | # Document H1 is the scaffold's — the step's H1 is demoted below it. | COMMENT |
| MEDIUM | …_desktop/tests/unit/test_artifact_summary_extractor.py | 158 | "# FinRobot Analysis Report / --- / ## Data Collection" markdown scaffolding | STRING |
| MEDIUM⚡ | finrobot_desktop/tests/unit/test_config.py | 12 | # developer's shell or repo-root .env — no monkeypatch.delenv scaffolding | COMMENT |
| MEDIUM | finrobot_desktop/tests/unit/test_news.py | 136 | # injection scaffolding neutralized: no heading marker, no fake tag, | COMMENT |
| MEDIUM | …t_desktop/tests/audit/test_thesis_prompt_discipline.py | 465 | # "$3.5 trillion" — classic AAPL training-data hallucination, not in our fixture. | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/artifact/test_sqlite_store.py | 757 | # which opens with the generic markdown scaffolding a blind [:120] slice used to | COMMENT |
| MEDIUM⚡ | finrobot_desktop/tests/artifact/test_sqlite_store.py | 769 | --- / ## Data Collection" scaffolding. The cleaned headline is the first | STRING |
| MEDIUM⚡ | finrobot_desktop/tests/artifact/test_sqlite_store.py | 814 | leaked "# FinRobot Analysis Report / --- / ## Data Collection" scaffolding | STRING |
| MEDIUM⚡ | finrobot_desktop/tests/artifact/test_summary_text.py | 50 | # The generic report scaffolding and the financials dump must NOT leak in. | COMMENT |
| MEDIUM | finrobot_desktop/scripts/probe_derived_fields_truth.py | 891 | # ── orchestration ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | finrobot_desktop/scripts/verify_report_field_basket.py | 533 | # ── orchestration ───────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ot_desktop/finrobot/engine/analysis/news_classifier.py | 73 | Classify raw news items using LLM with structured output. What this does that raw LLM text cannot: forces each news | STRING |
| HIGH | …nrobot/engine/compute/operators/valuation_synthesis.py | 472 | Synthesize multiple valuation methods into a single confidence-weighted estimate. Formula: weighted_price = Σ(mid_i | STRING |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/ddm.py | 33 | Run a multi-stage DDM valuation from structured inputs. What this code does that raw LLM cannot: deterministic arit | STRING |
| HIGH | …robot_desktop/finrobot/engine/compute/operators/dcf.py | 627 | Thin entry point: run a full DCF with one or more assumption overrides and return only the implied equity price per | STRING |
| HIGH | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 135 | Run N DCF simulations with randomized assumptions — fully vectorized. All N simulations execute as NumPy array oper | STRING |
| HIGH | …ktop/finrobot/engine/compute/operators/fx_normalize.py | 38 | Return a copy of ``company`` with all monetary fields converted to USD. Args: company: A peer's financials | STRING |
| HIGH | …ktop/finrobot/engine/compute/operators/fx_normalize.py | 163 | Return a copy of ``financials`` with all monetary fields converted to USD. The ``FinancialData`` sibling of :func:` | STRING |
| HIGH | …bot_desktop/finrobot/engine/data/normalize/currency.py | 31 | Express a canonical snapshot's reporting-currency line items in its QUOTE currency so the object is single-currency | STRING |
| HIGH | finrobot_desktop/finrobot/routes/artifacts.py | 140 | Return the full Artifact including inputs, assumptions, outputs, and meta. Args: artifact_id: The artifact | STRING |
| HIGH | finrobot_desktop/finrobot/routes/artifacts.py | 159 | Permanently delete an artifact and remove it from the index. Args: artifact_id: The artifact id to delete. | STRING |
| HIGH | finrobot_desktop/finrobot/routes/artifacts.py | 193 | Return an analyst-grade semantic delta between two artifact versions. ``a_id`` is the older/base version, ``b_id`` | STRING |
| HIGH | finrobot_desktop/finrobot/routes/artifacts.py | 223 | Record that this artifact was viewed now. Updating the last_viewed_at timestamp prevents the artifact from being | STRING |
| HIGH | …utogen/finrobot/data_source/filings_src/sec_filings.py | 160 | Unsturcured API to get the text Args: text (str): Text from the filing document URL m_s | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | finrobot_equity/deploy.sh | 91 | # Check if it's Python 3.9 or higher | COMMENT |
| LOW⚡ | finrobot_equity/deploy.sh | 215 | # Check if already running | COMMENT |
| LOW | finrobot_equity/deploy.sh | 275 | # Check if the process is still running | COMMENT |
| LOW | finrobot_equity/deploy.sh | 408 | # Check if application is running | COMMENT |
| LOW | finrobot_equity/web_app/auth.py | 113 | # Check if user exists | COMMENT |
| LOW⚡ | finrobot_equity/core/src/create_equity_report.py | 60 | # Check if necessary columns exist | COMMENT |
| LOW⚡ | finrobot_equity/core/src/create_equity_report.py | 173 | # Check if content looks like CSV data (especially for competitor_analysis and major_takeaways) | COMMENT |
| LOW | finrobot_equity/core/src/create_equity_report.py | 256 | # Check if content looks like CSV data (for competitor_analysis and major_takeaways) | COMMENT |
| LOW | finrobot_equity/core/src/generate_financial_analysis.py | 126 | # Check if we got the required data | COMMENT |
| LOW | …equity/core/src/modules/equity_agents/agent_manager.py | 77 | # Check if a custom model is specified via environment variable | COMMENT |
| LOW | finrobot_desktop/finrobot/routes/data.py | 369 | # Check if any provider supports earnings transcripts | COMMENT |
| LOW⚡ | finrobot_desktop/tests/artifact/test_store.py | 307 | # Set last_viewed_at to just now (within 1h) | COMMENT |
| LOW | finrobot_autogen/test_module.py | 27 | # Check if an order has been completed | COMMENT |
| LOW | finrobot_autogen/test_module.py | 61 | # Check if an order is pending ... if yes, we cannot send a 2nd one | COMMENT |
| LOW | finrobot_autogen/test_module.py | 65 | # Check if we are in the market | COMMENT |
| LOW | finrobot_autogen/finrobot/agents/utils.py | 6 | # Check if the last message contains the path to the instruction text file | COMMENT |
| LOW | finrobot_autogen/finrobot/functional/analyzer.py | 386 | # Print the result | STRING |
| LOW | finrobot_autogen/finrobot/functional/rag.py | 46 | # Check if we need to update the context. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | finrobot_equity/core/src/create_equity_report.py | 50 | # Define the mapping from CSV columns to the desired metric names | COMMENT |
| MEDIUM⚡ | finrobot_equity/core/src/generate_financial_analysis.py | 470 | # Create a fallback file if generation fails | COMMENT |
| MEDIUM | finrobot_equity/core/src/modules/common_utils.py | 35 | # Create a dummy config.ini for testing if it doesn't exist | COMMENT |
| MEDIUM | finrobot_autogen/test_module.py | 4 | # Create a Stratey | COMMENT |
| MEDIUM | finrobot_autogen/finrobot/functional/quantitative.py | 99 | # Create a data feed | COMMENT |
| MEDIUM | finrobot_autogen/finrobot/functional/reportlab.py | 136 | # Create a PageTemplate with a single column | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | …bot_desktop/desktop/src/layout/RightChatPanel.test.tsx | 735 | // Tests: AI-generated artifact → query invalidation (BUG-20260602-037) | COMMENT |
| HIGH | …esktop/src/layout/RightChatPanel/chat/useChatStream.ts | 161 | // ── AI-generated artifact → invalidate the same read models the REST run | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | finrobot_equity/web_app/main.py | 459 | # Step 2: Create Equity Report | COMMENT |
| LOW⚡ | finrobot_equity/web_app/main.py | 519 | # Step 3: Generate PDF Report | COMMENT |
| LOW | finrobot_equity/web_app/main.py | 418 | # Step 1: Generate Financial Analysis | COMMENT |
| LOW | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 309 | # Step 1: keep only positive prices. The threshold matches the 2-decimal | COMMENT |
| LOW | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 321 | # Step 2: IQR-based outlier fence (Tukey's far fence, 3×IQR). | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 180 | # Step 1: historical_data — produces FinancialData | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 184 | # Step 2: dcf_calc — produces DCFResult | COMMENT |
| LOW⚡ | …ot_desktop/tests/artifact/test_artifact_integration.py | 188 | # Step 3: output_gen — produces text | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …top/finrobot/engine/data/providers/finnhub_provider.py | 0 | release the shared httpx client. called from datalayer.close(). | STRING |
| HIGH | …desktop/finrobot/engine/data/providers/fmp_provider.py | 0 | release the shared httpx client. called from datalayer.close(). | STRING |
| HIGH | …ktop/finrobot/engine/data/providers/adanos_provider.py | 0 | release the shared httpx client. called from datalayer.close(). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | finrobot_equity/deploy.gcloud.sh | 9 | # Usage: | COMMENT |
| LOW | finrobot_equity/deploy.sh | 12 | # Usage: | COMMENT |
| LOW | finrobot_desktop/desktop/scripts/release.sh | 23 | # Usage: | COMMENT |
| LOW | finrobot_autogen/finrobot/data_source/reddit_utils.py | 106 | # Example usage | COMMENT |
| LOW | finrobot_autogen/finrobot/functional/quantitative.py | 171 | # Example usage: | COMMENT |
| LOW | finrobot_autogen/finrobot/functional/charting.py | 231 | # Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sktop/finrobot/engine/compute/operators/monte_carlo.py | 123 | CODE | |
| LOW | …robot/engine/compute/operators/valuation_aggregator.py | 229 | CODE | |
| LOW | …obot_desktop/tests/unit/test_audit_currency_caliber.py | 33 | CODE | |
| LOW | finrobot_desktop/tests/unit/test_rerating_disclosure.py | 41 | CODE | |
| LOW | finrobot_desktop/tests/unit/test_fx_normalize.py | 25 | CODE | |
| LOW | finrobot_desktop/tests/unit/test_fx_normalize.py | 235 | CODE | |
| LOW | finrobot_autogen/finrobot/data_source/finance_data.py | 10 | CODE | |
| LOW | …robot/data_source/marker_sec_src/pdf_to_md_parallel.py | 69 | CODE | |
| LOW | finrobot_autogen/finrobot/functional/analyzer.py | 407 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …desktop/finrobot/engine/compute/operators/ownership.py | 513 | # Ratio" and "Acme Corp" both sailed past that all-token gate via the weak | COMMENT |
| LOW | finrobot_desktop/tests/unit/test_ownership_compute.py | 384 | "insider_name": "Jane Doe", | CODE |
| LOW | finrobot_desktop/tests/unit/test_data_layer.py | 514 | provider="placeholder", | CODE |
| LOW | finrobot_desktop/tests/audit/test_sec_provenance.py | 31 | insider_name="Jane Doe", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | finrobot_equity/core/tests/test_generate_report.py | 277 | 'disclaimer_text': 'This is a test report generated with mock data for demonstration purposes only. Not for inve | CODE |