~95% on SimpleQA (e.g. Qwen3.6-27B on a 3090). Supports all local and cloud LLMs (llama.cpp, Ollama, Google, ...). 10+ search engines - arXiv, PubMed, your private documents. Everything Local & Encrypted.
This report presents the forensic synthetic code analysis of LearningCircuit/local-deep-research, a Python project with 8,712 GitHub stars. SynthScan v2.0 examined 1,053,173 lines of code across 2978 source files, recording 36250 pattern matches distributed across 26 syntactic categories. The overall adjusted score of 48.0 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 36250 distinct pattern matches across 26 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-hooks/custom-checks.py | 156 | def _format_string_references_exception(self, node): | CODE |
| LOW | .pre-commit-hooks/custom-checks.py | 180 | def _string_concat_references_exception(self, node): | CODE |
| LOW | .pre-commit-hooks/check-bearer-disable.py | 112 | def _classify_js_line_comment( | CODE |
| LOW | .pre-commit-hooks/check-fixture-duplication.py | 78 | def find_module_level_fixture_redefinitions( | CODE |
| LOW | …e-commit-hooks/check-settings-manager-thread-safety.py | 81 | def _check_body_for_unsafe_calls(self, node) -> None: | CODE |
| LOW | …e-commit-hooks/check-settings-manager-thread-safety.py | 117 | def _is_get_settings_manager_call(call_node: ast.Call) -> bool: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 268 | def _is_literal_dynamic_import(node: ast.AST, module: str) -> bool: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 360 | def _check_import_from_secure_dir(self, node: ast.ImportFrom) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 815 | def _check_exc_info_on_warning(self, node: ast.Call) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 837 | def _check_exception_var_in_log(self, node: ast.Call) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 972 | def _check_expression_for_sensitive_data( | CODE |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 229 | def _check_statements_recursive( | CODE |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 34 | def _check_function_for_pattern(self, func_node) -> None: | CODE |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 62 | def _get_session_var_from_assign(self, assign_node: ast.Assign) -> str: | CODE |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 93 | def _has_session_close_in_finally( | CODE |
| LOW | .pre-commit-hooks/check-settings-key-namespace.py | 88 | def _extract_frozenset_strings(node): | CODE |
| LOW | tests/test_api_settings_validation.py | 16 | def test_temperature_validation(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 48 | def test_provider_name_normalization(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 65 | def test_search_results_validation(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 84 | def test_quick_summary_with_invalid_provider(self, mock_init): | CODE |
| LOW | tests/test_api_settings_validation.py | 96 | def test_quick_summary_with_missing_api_key(self, mock_init): | CODE |
| LOW | tests/test_api_settings_validation.py | 118 | def test_settings_with_circular_references(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 141 | def test_environment_variable_type_conversion(self, monkeypatch): | CODE |
| LOW | tests/test_api_settings_validation.py | 159 | def test_invalid_environment_variable_values(self, monkeypatch): | CODE |
| LOW | tests/test_api_settings_validation.py | 171 | def test_environment_variable_precedence(self, monkeypatch): | CODE |
| LOW | tests/test_api_settings_validation.py | 195 | def test_minimal_configuration(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 208 | def test_common_research_presets(self): | CODE |
| LOW | tests/test_api_settings_validation.py | 292 | def test_legacy_setting_names(self): | CODE |
| LOW | tests/test_context_overflow_detection.py | 58 | def test_context_overflow_detection_no_overflow(self, token_callback): | CODE |
| LOW | tests/test_context_overflow_detection.py | 87 | def test_context_overflow_detection_with_overflow(self, token_callback): | CODE |
| LOW | tests/test_context_overflow_detection.py | 117 | def test_ollama_raw_metrics_capture(self, token_callback): | CODE |
| LOW | tests/test_context_overflow_detection.py | 150 | def test_context_limit_from_research_context(self): | CODE |
| LOW | tests/test_context_overflow_detection.py | 168 | def test_prompt_size_estimation(self, token_callback): | CODE |
| LOW | tests/test_context_overflow_detection.py | 192 | def test_overflow_warning_logged(self, mock_logger, token_callback): | CODE |
| LOW | tests/test_context_overflow_detection.py | 223 | def test_estimated_overflow_for_non_ollama_provider( | CODE |
| LOW | tests/test_context_overflow_detection.py | 259 | def test_provider_confirmed_total_context_overflow( | CODE |
| LOW | tests/test_context_overflow_detection.py | 295 | def test_estimated_total_context_overflow_for_non_ollama( | CODE |
| LOW | tests/test_context_overflow_detection.py | 335 | def test_estimated_total_context_overflow_via_llm_output( | CODE |
| LOW | tests/test_context_overflow_detection.py | 386 | def test_estimated_path_fires_on_subsequent_calls_after_first_truncation( | CODE |
| LOW | tests/test_context_overflow_detection.py | 399 | def llm_output_overflow_response(): | CODE |
| LOW | tests/test_context_overflow_detection.py | 428 | def test_estimated_overflow_skipped_when_context_limit_none( | CODE |
| LOW | tests/test_context_overflow_detection.py | 456 | def test_estimated_overflow_zero_prompt_estimate( | CODE |
| LOW | tests/test_context_overflow_detection.py | 481 | def test_estimated_overflow_without_on_llm_start( | CODE |
| LOW | tests/test_context_overflow_detection.py | 510 | def test_ollama_context_overflow_real(self): | CODE |
| LOW | tests/TESTING_PROPOSAL.md | 263 | def test_create_documents_empty(citation_handler): | CODE |
| LOW | tests/TESTING_PROPOSAL.md | 269 | def test_create_documents_string(citation_handler): | CODE |
| LOW | tests/test_utils.py | 62 | def assert_search_result_format(result: Dict[str, Any]): | CODE |
| LOW | tests/test_utils.py | 112 | def create_test_research_context(query: str = "test query") -> Dict[str, Any]: | CODE |
| LOW | tests/test_utils.py | 157 | def assert_progress_callback_called( | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 25 | def test_all_entries_are_dicts(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 29 | def test_all_entries_have_name_key(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 33 | def test_all_entries_have_description_key(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 37 | def test_all_names_are_nonempty_strings(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 42 | def test_all_descriptions_are_nonempty_strings(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 77 | def test_returns_copy_not_original(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 81 | def test_copy_has_same_length(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 85 | def test_copy_has_same_content(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 89 | def test_modifying_returned_list_does_not_affect_original(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 95 | def test_removing_from_returned_list_does_not_affect_original(self): | CODE |
| LOW⚡ | tests/test_search_system_factory_high_value.py | 105 | def test_returns_default_when_snapshot_is_none(self): | CODE |
| 26184 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docker-compose.gpu.override.yml | 1 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.gpu.override.yml | 3 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.gpu.override.yml | 21 | # ============================================================================ | COMMENT |
| MEDIUM | docker-compose.unraid.yml | 1 | # ============================================================================ | COMMENT |
| MEDIUM | docker-compose.unraid.yml | 3 | # ============================================================================ | COMMENT |
| MEDIUM | docker-compose.unraid.yml | 16 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 1 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 11 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .file-whitelist.txt | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .file-whitelist.txt | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 56 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .file-whitelist.txt | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .file-whitelist.txt | 97 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .file-whitelist.txt | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 419 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 421 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .grype.yaml | 9 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 32 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 34 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 88 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 93 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 143 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 164 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | .grype.yaml | 199 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | .grype.yaml | 207 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | .grype.yaml | 215 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | .grype.yaml | 217 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 34 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 36 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 46 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 48 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 54 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 59 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 66 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 68 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 74 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 78 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 82 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 85 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 88 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 94 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 99 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 105 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 108 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 114 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 118 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 126 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 130 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 133 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 139 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 141 | # ============================================================================ | COMMENT |
| 4981 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 177 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-css-class-prefix.py | 178 | print(f"Error reading {file_path}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 331 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-css-class-prefix.py | 332 | print(f"Error reading {file_path}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 450 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-css-class-prefix.py | 451 | print(f"Error reading {file_path}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 115 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-absolute-module-paths.py | 116 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 133 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-absolute-module-paths.py | 134 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 148 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-absolute-module-paths.py | 149 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-env-vars.py | 279 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-env-vars.py | 280 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-env-vars.py | 297 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-env-vars.py | 298 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-pathlib-usage.py | 147 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-pathlib-usage.py | 148 | print(f"Error reading {filepath}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-utcnow-parens.py | 34 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-double-escaping.py | 130 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-double-escaping.py | 131 | print(f"Error checking {file_path}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-url-security.py | 143 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-url-security.py | 144 | print(f"Error checking {file_path}: {e}") | CODE |
| LOW⚡ | .pre-commit-hooks/fix-exception-logging.py | 234 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-silent-cleanup.py | 187 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-silent-cleanup.py | 188 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-silent-cleanup.py | 209 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-silent-cleanup.py | 210 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/custom-checks.py | 535 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/custom-checks.py | 536 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/custom-checks.py | 562 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/custom-checks.py | 563 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-weak-tests.py | 59 | except Exception: # pragma: no cover - unparse is stable on 3.9+ | CODE |
| LOW | …e-commit-hooks/check-settings-manager-thread-safety.py | 149 | except Exception as e: | CODE |
| MEDIUM | …e-commit-hooks/check-settings-manager-thread-safety.py | 150 | print(f"Error checking {filepath}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1128 | except Exception as e: | CODE |
| LOW | .pre-commit-hooks/check-open-encoding.py | 140 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-safe-requests.py | 99 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-safe-requests.py | 100 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-safe-requests.py | 117 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-safe-requests.py | 118 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 408 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-service-context-managers.py | 409 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 428 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-service-context-managers.py | 429 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-deprecated-settings-wrapper.py | 63 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-deprecated-settings-wrapper.py | 64 | print(f"Error checking {filepath}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 130 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-session-context-manager.py | 131 | print(f"Error checking {filepath}: {e}", file=sys.stderr) | CODE |
| LOW | .pre-commit-hooks/check-settings-key-namespace.py | 197 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-settings-key-namespace.py | 216 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-unmarked-sleep.py | 155 | except Exception as exc: | CODE |
| LOW | .pre-commit-hooks/check-loguru-formatting.py | 119 | except Exception as exc: | CODE |
| LOW | .pre-commit-hooks/check-golden-master-settings.py | 45 | except Exception: | CODE |
| LOW | .pre-commit-hooks/check-silent-exceptions.py | 75 | except Exception as exc: | CODE |
| LOW | tests/test_api_settings_validation.py | 133 | except Exception as e: | CODE |
| LOW | tests/test_context_overflow_detection.py | 546 | except Exception as e: | CODE |
| LOW | tests/conftest.py | 87 | except Exception: | CODE |
| LOW | tests/conftest.py | 115 | except Exception: | CODE |
| LOW | tests/conftest.py | 327 | except Exception as e: | CODE |
| 1648 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .pre-commit-hooks/check-service-context-managers.py | 195 | # Create a fake function body from module-level statements | COMMENT |
| MEDIUM | tests/conftest.py | 330 | # Create a test client | COMMENT |
| MEDIUM | tests/conftest.py | 592 | # Create a mock module | COMMENT |
| MEDIUM | tests/test_openai_api_key_usage.py | 110 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_reexport_modules.py | 80 | # Create a fake config.config_files module | COMMENT |
| MEDIUM⚡ | tests/test_report_generator.py | 306 | # Define a structure with multiple sections | COMMENT |
| MEDIUM | tests/test_report_generator.py | 354 | # Define a structure with 5 sections | COMMENT |
| MEDIUM | tests/test_settings_manager.py | 226 | session = SessionLocal() # Create a new session instance for this test | CODE |
| MEDIUM | tests/test_settings_manager.py | 262 | # Create a new session for this test | COMMENT |
| MEDIUM | tests/test_search_engines_enhanced.py | 159 | # Create a mock paper object | COMMENT |
| MEDIUM | tests/test_search_engines_enhanced.py | 274 | # Create a minimal settings snapshot for the factory | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 159 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 182 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 217 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 240 | # Create a mock LLM instance with invoke method | COMMENT |
| MEDIUM | tests/test_search_system.py | 41 | # Create a mock strategy class and instance | COMMENT |
| MEDIUM | tests/test_search_system.py | 64 | # Create the search system (will use default source-based strategy) | COMMENT |
| MEDIUM | tests/test_search_system.py | 67 | # Create a mock progress callback | COMMENT |
| MEDIUM | tests/test_search_system.py | 196 | # Create a mock callback | COMMENT |
| MEDIUM | tests/test_search_system.py | 216 | # Create a mock strategy class and instance | COMMENT |
| MEDIUM | tests/test_search_system.py | 271 | # Create the search system (uses source-based strategy by default) | COMMENT |
| MEDIUM | tests/metrics/test_query_utils.py | 15 | # Create a model for SQLAlchemy column testing | COMMENT |
| MEDIUM⚡ | tests/settings/test_generate_config_docs.py | 294 | # Create a minimal project structure with a bad JSON file | COMMENT |
| MEDIUM | tests/database/test_database_init.py | 223 | # Create a research record | COMMENT |
| MEDIUM | tests/database/test_database_init.py | 268 | # Create a benchmark run with results | COMMENT |
| MEDIUM | tests/database/test_benchmark_models.py | 100 | # Create a benchmark run first | COMMENT |
| MEDIUM | tests/database/test_benchmark_models.py | 210 | # Create a benchmark run | COMMENT |
| MEDIUM | tests/database/test_benchmark_models.py | 273 | # Create a run | COMMENT |
| MEDIUM | tests/database/test_benchmark_models.py | 399 | # Create a completed run | COMMENT |
| MEDIUM⚡ | tests/database/test_sqlcipher_integration.py | 1309 | # Create main database | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 960 | # Create a regular (unencrypted) SQLite database | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 2465 | # Create main database | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 2827 | # Create main database | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 3135 | # Create main database | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 4224 | # Create an encrypted database first | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_integration.py | 4286 | # Create an encrypted database with a table | COMMENT |
| MEDIUM | tests/database/test_orm_conversions.py | 80 | # Create a research entry first with UUID | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 525 | # Create a corrupted alembic_version table | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 3682 | # Create an engine with invalid credentials in URL | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4020 | # Create a mock migrations directory structure | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4025 | # Create a world-writable migration file | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 318 | # Create a few more tables to simulate existing database | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 1114 | # Create a conflicting table structure | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 2257 | # Create a partial state - some tables but not all | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 2759 | # Create a very long string | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3646 | # Create a read-only directory scenario | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3817 | # Create a scenario that will cause a migration error | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3963 | # Create a mock symlinked path scenario | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 4046 | # Create a mock migrations directory with secure files | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 4070 | # Create a mock migrations directory (permissions don't matter) | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4437 | # Create a fresh Alembic database | STRING |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4442 | # Create a pre-Alembic database and upgrade it | STRING |
| MEDIUM | tests/database/test_auth_db.py | 90 | # Create the file | COMMENT |
| MEDIUM | tests/database/test_auth_db.py | 153 | # Create the file so init is skipped | COMMENT |
| MEDIUM | tests/database/test_auth_db.py | 362 | # Create an engine | COMMENT |
| MEDIUM | tests/database/test_auth_db.py | 390 | # Create an engine | COMMENT |
| MEDIUM | tests/database/test_encrypted_db_manager.py | 106 | # Create the database file | COMMENT |
| MEDIUM | tests/database/test_encrypted_db_manager.py | 911 | # Create a plain SQLite database (no encryption needed for this test) | COMMENT |
| MEDIUM⚡ | tests/database/backup/test_backup_service.py | 2294 | # Create a fake database file | COMMENT |
| MEDIUM⚡ | tests/database/backup/test_backup_service.py | 2302 | # Create a backup directory with a double quote in the path | COMMENT |
| 270 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_report_generator_edge_cases.py | 0 | create a report generator with mocked dependencies. | STRING |
| HIGH | tests/report/test_report_structure_parsing.py | 0 | create a report generator with mocked dependencies. | STRING |
| HIGH | tests/report/test_report_section_generation.py | 0 | create a report generator with mocked dependencies. | STRING |
| HIGH | tests/metrics/test_token_counter_high_value.py | 0 | create a tokencountingcallback with sensible defaults. | STRING |
| HIGH | tests/metrics/test_token_counter_logic.py | 0 | create a tokencountingcallback with sensible defaults. | STRING |
| HIGH | tests/metrics/test_token_counter_coverage.py | 0 | create a tokencountingcallback with sensible defaults. | STRING |
| HIGH | …dvanced_search_system/strategies/test_base_strategy.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/news/test_rating_system_behavior.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/news/test_base_recommender_behavior.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/citation_handlers/test_base_citation_handler.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/news/test_preference_manager_behavior.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/benchmarks/evaluators/test_base.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/news/test_preference_manager_extended.py | 0 | concrete implementation for testing abstract class. | STRING |
| HIGH | tests/llm/providers/test_openai_base.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | tests/llm/providers/test_openai_base_deep_coverage.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | tests/llm_providers/test_openai_base.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …_providers/implementations/test_orcarouter_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …sts/llm_providers/implementations/test_xai_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …/llm_providers/implementations/test_openai_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …m_providers/implementations/test_anthropic_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …/llm_providers/implementations/test_google_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …s/llm_providers/implementations/test_ionos_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …_providers/implementations/test_openrouter_provider.py | 0 | raises valueerror when no model name is provided (no silent default). | STRING |
| HIGH | …h_library/routes/test_library_routes_extra_coverage.py | 0 | return a magicmock that satisfies the login_required db_manager check. | STRING |
| HIGH | tests/web/routes/test_settings_routes_deep_coverage2.py | 0 | return a magicmock that satisfies the login_required db_manager check. | STRING |
| HIGH | tests/web/routes/test_api_routes_coverage.py | 0 | return a magicmock that satisfies the login_required db_manager check. | STRING |
| HIGH | tests/followup_research/test_routes_coverage.py | 0 | return a magicmock that satisfies the login_required db_manager check. | STRING |
| HIGH | tests/web/routes/test_history_routes_extended.py | 0 | return a magicmock that satisfies the login_required db_manager check. | STRING |
| HIGH | …h_library/routes/test_library_routes_extra_coverage.py | 0 | build a mock context-manager for get_user_db_session. | STRING |
| HIGH | tests/web/routes/test_history_routes_extended.py | 0 | build a mock context-manager for get_user_db_session. | STRING |
| HIGH | tests/web/routes/test_settings_routes_deep_coverage2.py | 0 | build a mock context-manager for get_user_db_session. | STRING |
| HIGH | tests/web/routes/test_api_routes_coverage.py | 0 | build a mock context-manager for get_user_db_session. | STRING |
| HIGH | tests/followup_research/test_routes_coverage.py | 0 | build a mock context-manager for get_user_db_session. | STRING |
| HIGH | …h_library/routes/test_library_routes_extra_coverage.py | 0 | issue an authenticated post request and return the response. | STRING |
| HIGH | tests/web/routes/test_api_routes_coverage.py | 0 | issue an authenticated post request and return the response. | STRING |
| HIGH | tests/followup_research/test_routes_coverage.py | 0 | issue an authenticated post request and return the response. | STRING |
| HIGH | …ary/services/test_library_service_collections_stats.py | 0 | patch get_user_db_session as a proper context manager. | STRING |
| HIGH | …arch_library/services/test_library_service_coverage.py | 0 | patch get_user_db_session as a proper context manager. | STRING |
| HIGH | …rch_library/services/test_library_service_crud_deep.py | 0 | patch get_user_db_session as a proper context manager. | STRING |
| HIGH | tests/exporters/test_latex_exporter.py | 0 | test handling of markdown with tables, code, lists. | STRING |
| HIGH | tests/exporters/test_pdf_exporter.py | 0 | test handling of markdown with tables, code, lists. | STRING |
| HIGH | tests/exporters/test_quarto_exporter.py | 0 | test handling of markdown with tables, code, lists. | STRING |
| HIGH | tests/web_services/test_pdf_service.py | 0 | test handling of markdown with tables, code, lists. | STRING |
| HIGH | tests/exporters/test_latex_exporter.py | 0 | test that valueerror is raised for content exceeding size limit. | STRING |
| HIGH | tests/exporters/test_pdf_exporter.py | 0 | test that valueerror is raised for content exceeding size limit. | STRING |
| HIGH | tests/exporters/test_odt_exporter.py | 0 | test that valueerror is raised for content exceeding size limit. | STRING |
| HIGH | tests/exporters/test_ris_exporter.py | 0 | test that valueerror is raised for content exceeding size limit. | STRING |
| HIGH | tests/exporters/test_quarto_exporter.py | 0 | test that valueerror is raised for content exceeding size limit. | STRING |
| HIGH | tests/exporters/test_latex_exporter.py | 0 | test that content at exactly the limit is accepted. | STRING |
| HIGH | tests/exporters/test_pdf_exporter.py | 0 | test that content at exactly the limit is accepted. | STRING |
| HIGH | tests/exporters/test_ris_exporter.py | 0 | test that content at exactly the limit is accepted. | STRING |
| HIGH | tests/exporters/test_quarto_exporter.py | 0 | test that content at exactly the limit is accepted. | STRING |
| HIGH | tests/exporters/test_latex_exporter.py | 0 | test that filename is truncated when title exceeds 50 chars. | STRING |
| HIGH | tests/exporters/test_pdf_exporter.py | 0 | test that filename is truncated when title exceeds 50 chars. | STRING |
| HIGH | tests/exporters/test_odt_exporter.py | 0 | test that filename is truncated when title exceeds 50 chars. | STRING |
| HIGH | tests/exporters/test_ris_exporter.py | 0 | test that filename is truncated when title exceeds 50 chars. | STRING |
| HIGH | tests/exporters/test_quarto_exporter.py | 0 | test that filename is truncated when title exceeds 50 chars. | STRING |
| HIGH | tests/exporters/test_latex_exporter.py | 0 | test that filename is not truncated when under 50 chars. | STRING |
| HIGH | tests/exporters/test_pdf_exporter.py | 0 | test that filename is not truncated when under 50 chars. | STRING |
| HIGH | tests/exporters/test_odt_exporter.py | 0 | test that filename is not truncated when under 50 chars. | STRING |
| 99 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 136 | CODE | |
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 183 | CODE | |
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 337 | CODE | |
| LOW | .pre-commit-hooks/check-css-class-prefix.py | 456 | CODE | |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 140 | CODE | |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 187 | CODE | |
| LOW | .pre-commit-hooks/check-absolute-module-paths.py | 154 | CODE | |
| LOW | .pre-commit-hooks/check-env-vars.py | 109 | CODE | |
| LOW | .pre-commit-hooks/check-env-vars.py | 188 | CODE | |
| LOW | .pre-commit-hooks/check-env-vars.py | 230 | CODE | |
| LOW | .pre-commit-hooks/check-double-escaping.py | 30 | CODE | |
| LOW | .pre-commit-hooks/fix-exception-logging.py | 200 | CODE | |
| LOW | .pre-commit-hooks/check-layer-imports.py | 53 | CODE | |
| LOW | .pre-commit-hooks/check-silent-cleanup.py | 70 | CODE | |
| LOW | .pre-commit-hooks/custom-checks.py | 469 | CODE | |
| LOW | .pre-commit-hooks/custom-checks.py | 68 | CODE | |
| LOW | .pre-commit-hooks/custom-checks.py | 207 | CODE | |
| LOW | .pre-commit-hooks/custom-checks.py | 307 | CODE | |
| LOW | .pre-commit-hooks/check-external-resources.py | 57 | CODE | |
| LOW | .pre-commit-hooks/check-bearer-disable.py | 82 | CODE | |
| LOW | .pre-commit-hooks/check-bearer-disable.py | 126 | CODE | |
| LOW | …e-commit-hooks/check-settings-manager-thread-safety.py | 55 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 292 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 360 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 631 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 684 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 972 | CODE | |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 117 | CODE | |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 229 | CODE | |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 34 | CODE | |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 93 | CODE | |
| LOW | .pre-commit-hooks/check-settings-key-namespace.py | 51 | CODE | |
| LOW | .pre-commit-hooks/_commit_analysis.py | 199 | CODE | |
| LOW | tests/test_openai_api_key_e2e.py | 44 | CODE | |
| LOW | tests/test_llm_provider_integration.py | 207 | CODE | |
| LOW | tests/test_llm_provider_integration.py | 343 | CODE | |
| LOW | tests/run_all_tests.py | 530 | CODE | |
| LOW | tests/run_all_tests.py | 77 | CODE | |
| LOW | tests/run_all_tests.py | 250 | CODE | |
| LOW | tests/settings/test_settings_manager.py | 599 | CODE | |
| LOW | tests/settings/test_settings_defaults_integrity.py | 328 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 564 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 3632 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 3719 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 4040 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 4683 | CODE | |
| LOW | tests/database/test_sqlcipher_integration.py | 4717 | CODE | |
| LOW | tests/database/test_db_file_permissions.py | 70 | CODE | |
| LOW | tests/database/test_alembic_migrations.py | 4167 | CODE | |
| LOW | tests/database/test_alembic_migrations.py | 6491 | CODE | |
| LOW | tests/database/test_auth_db.py | 147 | CODE | |
| LOW | tests/database/test_auth_db.py | 180 | CODE | |
| LOW | tests/database/test_auth_db.py | 220 | CODE | |
| LOW | tests/database/test_encryption_threads.py | 112 | CODE | |
| LOW | tests/database/test_encryption_threads.py | 155 | CODE | |
| LOW | tests/database/test_no_raw_sql.py | 16 | CODE | |
| LOW | tests/database/test_no_raw_sql.py | 182 | CODE | |
| LOW | tests/database/test_encrypted_db_manager.py | 27 | CODE | |
| LOW | tests/database/test_encrypted_db_manager.py | 123 | CODE | |
| LOW | tests/database/test_encrypted_db_manager.py | 193 | CODE | |
| 624 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-hooks/check-env-vars.py | 240 | # Check if the left side is a system var | COMMENT |
| LOW | .pre-commit-hooks/check-image-pinning.sh | 61 | # Check if any image lines lack @sha256 | COMMENT |
| LOW | .pre-commit-hooks/check-url-security.py | 29 | # Check if the file imports or includes URL validation | COMMENT |
| LOW | .pre-commit-hooks/check-url-security.py | 82 | # Check if it's preceded by validation | COMMENT |
| LOW | .pre-commit-hooks/fix-exception-logging.py | 210 | # Check if the variable is still used anywhere in nearby lines | COMMENT |
| LOW | .pre-commit-hooks/check-silent-cleanup.py | 48 | # Check if the handler is "except Exception:" or bare "except:" | COMMENT |
| LOW | .pre-commit-hooks/check-silent-cleanup.py | 55 | # Check if handler body is *only* `pass` (no logging, no raise) | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 308 | # Check if this class inherits from Base (SQLAlchemy model) | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 437 | # Check if line has allowed patterns first | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 495 | # Check if this file is allowed to use datetime.now() | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 514 | # Check if it's already using UTC | COMMENT |
| LOW | .pre-commit-hooks/check-external-resources.py | 73 | # Check if line contains external patterns | COMMENT |
| LOW | .pre-commit-hooks/check-external-resources.py | 76 | # Check if it's an allowed exception | COMMENT |
| LOW | .pre-commit-hooks/check-pdm-lock.sh | 2 | # Check if pdm.lock is in sync with pyproject.toml | COMMENT |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 767 | # Check if it's a logger call | COMMENT |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 89 | # Check if it's a service class | COMMENT |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 93 | # Check if it's a function returning a resource | COMMENT |
| LOW | .pre-commit-hooks/check-service-context-managers.py | 359 | # Check if this is a safe instantiation | COMMENT |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 38 | # Check if this is a session assignment | COMMENT |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 50 | # Check if finally has session.close() | COMMENT |
| LOW | .pre-commit-hooks/check-session-context-manager.py | 104 | # Check if it's our session variable | COMMENT |
| LOW | .pre-commit-hooks/check-unmarked-sleep.py | 89 | # Check if enclosing function or class has @pytest.mark.slow | COMMENT |
| LOW | .pre-commit-hooks/check-golden-master-settings.py | 34 | # Check if regeneration changed the file | COMMENT |
| LOW | tests/test_context_overflow_detection.py | 538 | # Check if overflow was detected | COMMENT |
| LOW | tests/run_followup_tests.sh | 13 | # Check if server is running | COMMENT |
| LOW | tests/test_openai_api_key_e2e.py | 84 | # Check if API key exists in settings or environment | COMMENT |
| LOW⚡ | tests/test_database_initialization.py | 130 | # Check if settings table is queryable | COMMENT |
| LOW⚡ | tests/test_citation_handler.py | 61 | # Check if the correct number of documents was created | COMMENT |
| LOW | tests/test_citation_handler.py | 86 | # Check if indexes were correctly offset | COMMENT |
| LOW | tests/test_citation_handler.py | 106 | # Check if sources are correctly formatted with citation numbers | COMMENT |
| LOW | tests/test_citation_handler.py | 119 | # Check if LLM was called with the correct prompt | COMMENT |
| LOW | tests/test_citation_handler.py | 123 | # Check if prompt contains expected elements | COMMENT |
| LOW | tests/run_all_tests.py | 444 | # Check if we're in a headless environment (CI) | COMMENT |
| LOW | tests/test_search_system.py | 117 | # Check if the correct strategy type was created | COMMENT |
| LOW | tests/metrics/test_research_metrics_extended.py | 378 | # Check if current is better than baseline | COMMENT |
| LOW | tests/metrics/test_token_counter_extended.py | 151 | # Set usage_metadata to None to force response_metadata path | COMMENT |
| LOW | tests/settings/env_vars/test_env_var_usage.py | 155 | # Check if file is allowed to use os.environ | COMMENT |
| LOW⚡ | tests/database/test_sqlcipher_integration.py | 805 | # Check if it changed (it shouldn't for an already-initialized DB) | COMMENT |
| LOW⚡ | tests/database/test_sqlcipher_integration.py | 2304 | # Check if encryption is actually applied | COMMENT |
| LOW | tests/database/test_sqlcipher_integration.py | 4183 | # Check if salt was actually applied | COMMENT |
| LOW | tests/database/test_alembic_migrations.py | 2432 | # Check if 'key' has unique constraint | COMMENT |
| LOW | tests/database/test_no_raw_sql.py | 68 | # Check if it's in a comment or docstring | COMMENT |
| LOW | tests/database/test_no_raw_sql.py | 77 | # Check if it's an allowed pattern | COMMENT |
| LOW | tests/database/test_no_raw_sql.py | 144 | # Check if file has database operations | COMMENT |
| LOW | tests/database/test_no_raw_sql.py | 155 | # Check if it has ORM imports | COMMENT |
| LOW | tests/database/test_schema_stability.py | 143 | # Check if there are new tables that might be renames | COMMENT |
| LOW | tests/deletion/test_document_deletion.py | 209 | # Check if document is in any collection | COMMENT |
| LOW | tests/test_llm/test_llm_benchmarks.py | 24 | # Check if we have a predefined answer | COMMENT |
| LOW | …i_tests_with_login/pytest_tests/test_start_research.py | 70 | # Check if model appears in logs | COMMENT |
| LOW | tests/infrastructure_tests/test_urls_js.py | 118 | # Check if the URL exists in backend (with some flexibility for parameter names) | COMMENT |
| LOW | tests/infrastructure_tests/test_urls_js.py | 343 | # Check if this is an allowed duplicate | COMMENT |
| LOW | tests/accessibility_tests/test_accessibility_backend.py | 87 | # Check if there are any fieldsets | COMMENT |
| LOW | tests/security/test_xss_prevention.py | 280 | # Check if CSP header is present (it's a good security practice) | COMMENT |
| LOW | tests/security/test_repo_guardrails.py | 162 | # Check if this pattern matches a binary extension | COMMENT |
| LOW | tests/security/test_csrf_protection.py | 116 | # Check if it's a CSRF error specifically | COMMENT |
| LOW | tests/exporters/test_odt_exporter.py | 6 | # Check if pandoc is available (required by pypandoc) | COMMENT |
| LOW⚡ | tests/web/auth/test_auth_coverage.py | 622 | # Set last_access to 2 hours ago (would expire normal session) | COMMENT |
| LOW | tests/web/services/test_research_service.py | 830 | # Check if pandoc is available | COMMENT |
| LOW⚡ | tests/web/services/test_research_service_core.py | 79 | # Check if research is terminated | COMMENT |
| LOW⚡ | tests/strategies/test_strategy_imports.py | 64 | # Check if at least some strategies are exported | COMMENT |
| 284 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | .gitleaks.toml | 146 | # RAG routes and services use db_password variable names (not actual secrets) | COMMENT |
| MEDIUM⚡ | .gitleaks.toml | 149 | # RAG service factory passes db_password variable names (not actual secrets) | COMMENT |
| MEDIUM⚡ | .gitleaks.toml | 152 | # the RAG factory (not actual secrets) | COMMENT |
| MEDIUM | docker-compose.yml | 231 | # digest are the meaningful guardrails. See #3874. | COMMENT |
| MEDIUM | .pre-commit-hooks/check-service-context-managers.py | 373 | # Variable is passed to another function (dependency injection) - receiver responsible | COMMENT |
| MEDIUM | tests/test_context_overflow_detection.py | 520 | # Create LLM with small context window | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 6050 | # 0018: restoring 'mcp'/'agentic' strategy references would recreate | COMMENT |
| MEDIUM | tests/embeddings/test_openai_embeddings.py | 618 | """The headline regression for #4195: a Nomic embedding model | STRING |
| MEDIUM | tests/deletion/test_cascade_integration.py | 317 | # Add RAG index | COMMENT |
| MEDIUM⚡ | tests/deletion/test_cascade_integration.py | 411 | # Step 2: Delete RAG index | COMMENT |
| MEDIUM⚡ | tests/deletion/test_collection_deletion.py | 250 | # Verify RAG index exists | COMMENT |
| MEDIUM⚡ | tests/deletion/test_collection_deletion.py | 258 | # Manually delete RAG index (should be done by service) | COMMENT |
| MEDIUM⚡ | tests/deletion/test_collection_deletion.py | 266 | # Verify RAG index is deleted | COMMENT |
| MEDIUM | tests/deletion/test_collection_deletion.py | 290 | # Delete RAG index | COMMENT |
| MEDIUM⚡ | tests/security/test_egress_run_classification.py | 294 | # A RAG run over a collection embeds, so a cloud embedder is an exposing | COMMENT |
| MEDIUM⚡ | tests/security/test_egress_run_classification.py | 295 | # sink for the sensitive source -> refused even with a local LLM. The RAG | COMMENT |
| MEDIUM | tests/security/test_egress_pep_coverage.py | 290 | # `both` is retired (ADR-0007): it coerces to ADAPTIVE, and the RAG gate | COMMENT |
| MEDIUM | tests/research_library/zotero/test_sync_service.py | 637 | ) # spy: collection isn't RAG-indexed, so only assert calls | CODE |
| MEDIUM⚡ | …ts/research_library/routes/test_rag_routes_coverage.py | 325 | # No more "try a dedicated embedding model" guessing. | COMMENT |
| MEDIUM | …ts/research_library/routes/test_rag_routes_coverage.py | 1187 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …ts/research_library/routes/test_rag_routes_coverage.py | 1233 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1100 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …arch_library/services/test_library_rag_service_info.py | 47 | # Collection found, but no RAG index | COMMENT |
| MEDIUM | …arch_library/services/test_library_rag_service_info.py | 75 | # RAG index found | COMMENT |
| MEDIUM | …arch_library/services/test_library_rag_service_info.py | 119 | # No RAG index | COMMENT |
| MEDIUM⚡ | …rch_library/services/test_download_service_3827_fix.py | 936 | # (RAG, last_run commit) sees a clean session. | COMMENT |
| MEDIUM⚡ | …rch_library/services/test_download_service_3827_fix.py | 944 | # Change 3 (continued): RAG indexing of research downloads has been RETIRED from | COMMENT |
| MEDIUM⚡ | …rch_library/services/test_download_service_3827_fix.py | 947 | # assert the inline RAG block is gone: generate_rag no longer drives any RAG | COMMENT |
| MEDIUM | …/research_library/services/test_library_rag_service.py | 735 | # Mock RAG index record | COMMENT |
| MEDIUM | …/research_library/services/test_library_rag_service.py | 800 | # Mock RAG index that will fail integrity check | COMMENT |
| MEDIUM | …/research_library/services/test_library_rag_service.py | 853 | # Mock RAG index with different dimension | COMMENT |
| MEDIUM | tests/research_library/services/test_faiss_safe_load.py | 38 | # Metadata mirrors what the RAG service attaches: plain scalars + lists. | COMMENT |
| MEDIUM | tests/web/test_startup_import_weight.py | 96 | # scheduler -> RAG service -> splitter chain, so a regression in | STRING |
| MEDIUM⚡ | tests/web/routes/test_metrics_routes_coverage.py | 220 | # 5 strategies after the 'mcp'/'agentic' strategy was removed (#4548): | COMMENT |
| MEDIUM⚡ | tests/web/services/test_research_service_core.py | 387 | # Use 80% of context window | COMMENT |
| MEDIUM⚡ | tests/text_optimization/test_citation_formatter.py | 1891 | # /library/document/<uuid> from RAG / library sources). The three | COMMENT |
| MEDIUM⚡ | tests/feature_tests/IMPLEMENTATION_GUIDE_241.md | 46 | # Get context window size from settings | COMMENT |
| MEDIUM⚡ | tests/feature_tests/IMPLEMENTATION_GUIDE_241.md | 49 | # Ensure max_tokens doesn't exceed context window size | COMMENT |
| MEDIUM⚡ | tests/feature_tests/IMPLEMENTATION_GUIDE_241.md | 51 | # Use 80% of context window to leave room for prompts | COMMENT |
| MEDIUM | tests/feature_tests/IMPLEMENTATION_GUIDE_241.md | 70 | n_ctx=context_window_size, # Set context window size | CODE |
| MEDIUM | tests/ui_tests/test_context_overflow_ci.js | 19 | // The page-specific scaffold is server-rendered (pages/context_overflow.html): | COMMENT |
| MEDIUM | tests/ui_tests/test_context_overflow_ci.js | 185 | // assert on the overflow-specific chart scaffold: the #context-overflow-section | COMMENT |
| MEDIUM | tests/ui_tests/test_context_overflow_ci.js | 219 | // wrong page or the overflow scaffold did not load. | COMMENT |
| MEDIUM | tests/ui_tests/test_context_overflow_ci.js | 223 | ? 'No token data: #context-overflow-section scaffold present and #empty-no-data shown (no #context-chart | CODE |
| MEDIUM⚡ | tests/news/test_base_recommender.py | 1964 | # Tests for dependency injection patterns | COMMENT |
| MEDIUM | tests/news/test_library_sweep.py | 146 | # One RAG service built per distinct collection (A, B). No orphans here so | COMMENT |
| MEDIUM | tests/news/test_library_sweep.py | 186 | # The RAG service for the orphan path was built for the default library. | COMMENT |
| MEDIUM | tests/news/test_library_sweep.py | 1229 | # No work to do, so no RAG service was built. | COMMENT |
| MEDIUM⚡ | tests/news/test_topic_generator_coverage.py | 259 | # generate_topics – orchestration (uses real _validate_topics) | COMMENT |
| MEDIUM⚡ | …s/news/subscription_manager/test_scheduler_coverage.py | 56 | # NOTE: RAG indexing moved out of _process_user_documents into the unified | COMMENT |
| MEDIUM | tests/performance/relevance_filter/eval_prompt.py | 48 | # The shared scaffolding around the guidance block. The variants below only | COMMENT |
| MEDIUM⚡ | …_search_engines/test_search_engine_library_settings.py | 40 | # search.rag.max_results — cap local RAG retrieval (vector search returns many | COMMENT |
| MEDIUM⚡ | …_search_engines/test_search_engine_library_settings.py | 42 | # search.rag.enable_relevance_filter — opt-in LLM relevance filter for RAG. | COMMENT |
| MEDIUM⚡ | tests/web_search_engines/test_engine_groups.py | 29 | # A collection is still "collections" even though it is Local RAG. | COMMENT |
| MEDIUM | …engines/engines/test_search_engine_library_coverage.py | 135 | # col1 fails when its RAG service is created; col2 succeeds | COMMENT |
| MEDIUM⚡ | …b_search_engines/engines/test_local_search_coverage.py | 744 | # No RAG index -> skip | COMMENT |
| MEDIUM | …b_search_engines/engines/test_local_search_coverage.py | 160 | # RAG index lookup | COMMENT |
| MEDIUM | …b_search_engines/engines/test_local_search_coverage.py | 163 | # RAG service context manager | COMMENT |
| MEDIUM | …b_search_engines/engines/test_local_search_coverage.py | 436 | # RAG service | COMMENT |
| MEDIUM | …b_search_engines/engines/test_local_search_coverage.py | 528 | # 1) For RAG index lookup (inside collection loop) | COMMENT |
| 103 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/mock_modules.py | 16 | Create a mock module with specified attributes. Args: module_name: Name of the module to create | STRING |
| HIGH | examples/optimization/run_gemini_benchmark.py | 87 | Run benchmarks with Gemini Flash via OpenRouter. Args: examples: Number of examples to evaluate for ea | STRING |
| HIGH | examples/benchmarks/run_browsecomp.py | 62 | Run BrowseComp benchmark with proper decryption using canary field. Args: num_examples: Number of exam | STRING |
| HIGH | src/local_deep_research/database/sqlcipher_utils.py | 78 | Create and store a new random salt for a database. This should be called when creating a new database. The | STRING |
| HIGH | src/local_deep_research/database/sqlcipher_utils.py | 599 | Create a properly configured SQLCipher connection. Implements the full PRAGMA sequence with proper error clean | STRING |
| HIGH | src/local_deep_research/database/session_context.py | 84 | Context manager that ensures proper database session with encryption. Now uses thread-local sessions for better | STRING |
| HIGH | src/local_deep_research/database/library_init.py | 294 | Get the ID of a source type by name. Args: username: User to query for type_name: Name of sour | STRING |
| HIGH | src/local_deep_research/database/encrypted_db.py | 410 | Create a properly initialized SQLCipher connection. Follows the canonical SQLCipher initialization order: set k | STRING |
| HIGH | …ced_search_system/filters/journal_reputation_filter.py | 709 | Analyze journal reputation via 1 SearXNG search + 1 LLM call. This is Tier 4 — the last-resort scoring path. On | STRING |
| HIGH | …ced_search_system/filters/followup_relevance_filter.py | 26 | Filter search results by relevance to the follow-up query. Args: results: List of source d | STRING |
| HIGH | src/local_deep_research/llm/providers/openai_base.py | 35 | Factory function for OpenAI-compatible LLMs. Args: model_name: Name of the model to use | STRING |
| HIGH | src/local_deep_research/llm/providers/base.py | 82 | Create and return a LangChain chat model instance. Subclasses MUST override this method. The returned LLM is BA | STRING |
| HIGH | …_deep_research/llm/providers/implementations/openai.py | 36 | Factory function for OpenAI LLMs. Args: model_name: Name of the model to use temperatur | STRING |
| HIGH | …ep_research/llm/providers/implementations/anthropic.py | 37 | Factory function for Anthropic LLMs. Args: model_name: Name of the model to use tempera | STRING |
| HIGH | …_deep_research/llm/providers/implementations/ollama.py | 106 | Factory function for Ollama LLMs. Args: model_name: Name of the model to use temperatur | STRING |
| HIGH | src/local_deep_research/embeddings/embeddings_config.py | 132 | Get embeddings instance based on provider and model. Args: provider: Embedding provider to use (if Non | STRING |
| HIGH | src/local_deep_research/embeddings/providers/base.py | 41 | Create an embeddings instance for this provider. Args: model: Name of the embedding model | STRING |
| HIGH | …esearch/embeddings/providers/implementations/openai.py | 49 | Create OpenAI embeddings instance. Args: model: Model name (defaults to text-embedding-3-s | STRING |
| HIGH | …esearch/embeddings/splitters/text_splitter_registry.py | 61 | Get text splitter based on type. Args: splitter_type: Type of splitter ('recursive', 'token', 'sentenc | STRING |
| HIGH | src/local_deep_research/chat/service.py | 249 | Add a durable message (query/followup/response) to a chat session. Content is required and stored inli | STRING |
| HIGH | src/local_deep_research/chat/service.py | 448 | Get a chat session by ID. Args: session_id: ID of the session Returns: | STRING |
| HIGH | src/local_deep_research/chat/service.py | 813 | Archive a chat session. Refuses to archive while a research is still in_progress for the sessi | STRING |
| HIGH | src/local_deep_research/chat/service.py | 922 | Permanently delete one chat attempt (research + its messages + steps). An "attempt" is the user message that tr | STRING |
| HIGH | src/local_deep_research/chat/service.py | 1128 | Return the original user message content for a chat research. Used by the retry route to re-submit the same que | STRING |
| HIGH | src/local_deep_research/config/thread_settings.py | 77 | Get setting from context only - no database access from threads. Args: key: Setting key to retrieve | STRING |
| HIGH | src/local_deep_research/security/safe_requests.py | 149 | Make a safe HTTP GET request with SSRF protection. Args: url: URL to request params: URL param | STRING |
| HIGH | src/local_deep_research/security/safe_requests.py | 285 | Make a safe HTTP POST request with SSRF protection. Args: url: URL to request data: Data to se | STRING |
| HIGH | src/local_deep_research/security/safe_requests.py | 590 | `safe_get` plus exponential-backoff retry on transient errors. Retries on: * ``requests.ConnectionError`` | STRING |
| HIGH | …local_deep_research/security/notification_validator.py | 202 | Validate a notification service URL for security issues. This function prevents SSRF attacks by valida | STRING |
| HIGH | …local_deep_research/security/notification_validator.py | 393 | Strict validation that raises an exception on invalid URLs. Args: url: Service URL to vali | STRING |
| HIGH | src/local_deep_research/security/url_builder.py | 44 | Build a base URL from application settings with intelligent fallbacks. This function handles the common patter | STRING |
| HIGH | src/local_deep_research/security/url_builder.py | 98 | Build a complete URL from base URL and path. Args: base_url: Base URL (e.g., "https://myapp.com") | STRING |
| HIGH | src/local_deep_research/security/url_builder.py | 136 | Validate a constructed URL. Args: url: URL to validate allowed_schemes: List of allowed scheme | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 94 | Validate and sanitize a user-provided path. Args: user_input: The user-provided path strin | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 176 | Validate a user-provided absolute filesystem path for local indexing. This is for features like local | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 299 | Re-sanitize a validated path for static analyzer recognition. This method takes an already-validated P | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 340 | Validate a model file path specifically. Args: model_path: Path to the model file | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 383 | Validate a path within the data directory. Args: file_path: Path relative to data root | STRING |
| HIGH | src/local_deep_research/security/path_validator.py | 412 | Validate a configuration file path. Args: config_path: Path to config file con | STRING |
| HIGH | src/local_deep_research/security/module_whitelist.py | 181 | Safely import a class from a module, validating against both whitelists. This function provides secure dynamic | STRING |
| HIGH | src/local_deep_research/security/filename_sanitizer.py | 28 | Sanitize an uploaded filename for safe filesystem storage. Args: filename: Raw filename from the upload. | STRING |
| HIGH | src/local_deep_research/security/url_validator.py | 287 | Validate that a callback URL is well-formed and safe for HTTP/HTTPS use. This is stricter than is_safe | STRING |
| HIGH | src/local_deep_research/security/network_utils.py | 11 | Check if hostname is a private/local IP address. Recognizes: - Localhost values (127.0.0.1, localhost, [::1], 0 | STRING |
| HIGH | …_research/security/file_integrity/integrity_manager.py | 116 | Create or update integrity record for a file. Args: file_path: Path to file to record | STRING |
| HIGH | …deep_research/security/file_integrity/base_verifier.py | 67 | Calculate SHA256 checksum of file. Can be overridden by subclasses for different algorithms. | STRING |
| HIGH | …eep_research/research_library/routes/library_routes.py | 74 | Get authenticated user password from session store with fallback to g.user_password. Args: username: T | STRING |
| HIGH | …_research/research_library/services/faiss_safe_load.py | 106 | Load a FAISS index from disk without dangerous deserialization. Drop-in replacement for ``FAISS.load_local(..., | STRING |
| HIGH | …research/research_library/services/download_service.py | 428 | Queue all downloadable PDFs from a research session. Args: research_id: The research sessi | STRING |
| HIGH | src/local_deep_research/exporters/odt_exporter.py | 61 | Convert markdown content to ODT using Pandoc. The conversion runs entirely in memory: markdown is piped to | STRING |
| HIGH | src/local_deep_research/exporters/quarto_exporter.py | 57 | Convert markdown content to Quarto format. Args: markdown_content: The markdown text to convert | STRING |
| HIGH | src/local_deep_research/exporters/ris_exporter.py | 50 | Extract references from markdown and convert to RIS format. Args: markdown_content: The markdown te | STRING |
| HIGH | src/local_deep_research/exporters/latex_exporter.py | 49 | Convert markdown content to LaTeX. Args: markdown_content: The markdown text to convert | STRING |
| HIGH | src/local_deep_research/exporters/pdf_exporter.py | 53 | Convert markdown content to PDF using existing PDFService. Args: markdown_content: The markdown tex | STRING |
| HIGH | …l_deep_research/web/services/pdf_extraction_service.py | 24 | Extract text and metadata from PDF in a single pass. This method opens the PDF only once and extracts | STRING |
| HIGH | …c/local_deep_research/web/services/resource_service.py | 95 | Delete a resource from the database Args: resource_id (int): The ID of the resource to delete Ret | STRING |
| HIGH | src/local_deep_research/storage/factory.py | 20 | Get a report storage instance that always uses database with optional file backup. Args: session: Database | STRING |
| HIGH | src/local_deep_research/utilities/type_utils.py | 13 | Convert a value to boolean, handling string representations. This is a standalone utility for converting any v | STRING |
| HIGH | src/local_deep_research/utilities/url_utils.py | 42 | Normalize a URL to ensure it has a proper scheme and format. Args: raw_url: The raw URL string to norm | STRING |
| HIGH | src/local_deep_research/news/core/card_factory.py | 60 | Get or create the storage instance. Args: session: SQLAlchemy session. If not provided, attempts to | STRING |
| HIGH | src/local_deep_research/news/core/card_factory.py | 104 | Create a new card of the specified type. Args: card_type: Type of card to create ('news', | STRING |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-hooks/check-target-blank-rel.py | 19 | CODE | |
| LOW | .pre-commit-hooks/check-bearer-disable.py | 30 | CODE | |
| LOW | .pre-commit-hooks/check-journal-quality-readonly.py | 15 | CODE | |
| LOW | .pre-commit-hooks/check-author-identity.py | 26 | CODE | |
| LOW | tests/database/test_schema_index_completeness.py | 13 | CODE | |
| LOW | tests/database/test_journal_migrations_encrypted.py | 14 | CODE | |
| LOW | tests/database/test_research_strategy_fk_regression.py | 14 | CODE | |
| LOW | tests/database/test_fk_targets_resolve.py | 9 | CODE | |
| LOW | …sts/database/test_journal_rebuild_data_preservation.py | 20 | CODE | |
| LOW | tests/advanced_search_system/filters/conftest.py | 12 | CODE | |
| LOW | tests/advanced_search_system/tools/test_fetch_modes.py | 8 | CODE | |
| LOW | tests/content_fetcher/test_lazy_content_fetcher.py | 16 | CODE | |
| LOW | tests/security/test_collection_agent_enabled.py | 14 | CODE | |
| LOW | tests/security/test_egress_threadpool_propagation.py | 27 | CODE | |
| LOW | tests/security/test_egress_guidance.py | 4 | CODE | |
| LOW | …ts/security/test_egress_pep_llm_embeddings_callsite.py | 26 | CODE | |
| LOW | tests/security/test_egress_policy.py | 3 | CODE | |
| LOW | tests/security/test_egress_pep_factory_callsite.py | 19 | CODE | |
| LOW | tests/security/test_egress_notifications_callsite.py | 20 | CODE | |
| LOW | tests/security/test_egress_langgraph_tool_filter.py | 31 | CODE | |
| LOW | tests/security/test_egress_e2e_private_only_tripwire.py | 27 | CODE | |
| LOW | tests/security/test_egress_inference_gates_followup.py | 20 | CODE | |
| LOW | tests/security/test_egress_run_classification.py | 8 | CODE | |
| LOW | tests/security/test_egress_audit_hook.py | 20 | CODE | |
| LOW | …ts/security/test_egress_pep_fetch_download_callsite.py | 24 | CODE | |
| LOW | tests/security/test_egress_fullsearch.py | 15 | CODE | |
| LOW | tests/security/test_egress_url_edgecases_followup.py | 28 | CODE | |
| LOW | tests/security/test_egress_backstop_rearm_followup.py | 22 | CODE | |
| LOW | …s/security/test_egress_adaptive_resolution_followup.py | 21 | CODE | |
| LOW | …/security/test_egress_collection_semantics_followup.py | 18 | CODE | |
| LOW | …/security/test_egress_downloader_threading_followup.py | 26 | CODE | |
| LOW | …sts/security/test_egress_news_subscription_callsite.py | 24 | CODE | |
| LOW | tests/security/test_egress_classification.py | 7 | CODE | |
| LOW | tests/security/test_egress_unprotected.py | 8 | CODE | |
| LOW | tests/integration/test_journal_quality_release_gate.py | 49 | CODE | |
| LOW | tests/journal_quality/test_lookup_institution_keys.py | 8 | CODE | |
| LOW | tests/journal_quality/test_openalex_common.py | 9 | CODE | |
| LOW | tests/journal_quality/test_openalex_schema_drift.py | 11 | CODE | |
| LOW | …s/journal_quality/test_institutions_malformed_lines.py | 11 | CODE | |
| LOW | tests/journal_quality/test_predatory_min_floor.py | 10 | CODE | |
| LOW | tests/mcp/test_server_coverage.py | 19 | CODE | |
| LOW | tests/mcp/test_validation.py | 11 | CODE | |
| LOW | tests/mcp/test_server_validators.py | 9 | CODE | |
| LOW | tests/mcp/test_egress_audit_net.py | 20 | CODE | |
| LOW | tests/mcp/test_server.py | 14 | CODE | |
| LOW | tests/mcp/test_edge_cases.py | 13 | CODE | |
| LOW | tests/mcp/test_integration.py | 13 | CODE | |
| LOW | tests/error_handling/test_openai_compat_errors.py | 9 | CODE | |
| LOW | tests/performance/_shared/build_eval_dataset.py | 25 | CODE | |
| LOW | tests/performance/_shared/run_full_search.py | 19 | CODE | |
| LOW | tests/performance/relevance_filter/eval_prompt.py | 17 | CODE | |
| LOW | tests/performance/relevance_filter/test_live.py | 19 | CODE | |
| LOW | tests/performance/relevance_filter/eval_models.py | 20 | CODE | |
| LOW | src/local_deep_research/__init__.py | 10 | CODE | |
| LOW | src/local_deep_research/search_system_factory.py | 14 | CODE | |
| LOW | src/local_deep_research/search_system_factory.py | 14 | CODE | |
| LOW | src/local_deep_research/metrics/__init__.py | 3 | CODE | |
| LOW | src/local_deep_research/metrics/__init__.py | 3 | CODE | |
| LOW | src/local_deep_research/metrics/__init__.py | 4 | CODE | |
| LOW | src/local_deep_research/metrics/__init__.py | 4 | CODE | |
| 456 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | README.md | 52 | # Step 1: Pull and run Ollama | COMMENT |
| LOW⚡ | README.md | 56 | # Step 2: Pull and run SearXNG for optimal search results | COMMENT |
| LOW⚡ | README.md | 59 | # Step 3: Pull and run Local Deep Research | COMMENT |
| LOW⚡ | docker-compose.yml | 87 | # WARNING: This will disable UI configuration for these settings! | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 64 | # Step 1: Authenticate | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 71 | # Step 2: Configure settings | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 109 | # Step 3: Test LLM initialization | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 120 | # Step 4: Test simple LLM call | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 143 | # Step 5: Test research functionality | COMMENT |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4533 | # Step 1: Migrate to 0001 only | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4537 | # Step 2: Insert data | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4564 | # Step 3: Upgrade to head (0005) | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4568 | # Step 4: Verify data survived | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4581 | # Step 5: Verify new columns exist | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4613 | # Step 6: Another run_migrations should be no-op | STRING |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 241 | # Step 1: Delete chunks (no FK, manual cleanup required) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 247 | # Step 2: Delete document (CASCADE handles blob and collection links) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 406 | # Step 1: Delete chunks (no FK, manual cleanup) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 411 | # Step 2: Delete RAG index | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 416 | # Step 3: Delete collection (CASCADE handles folders, links) | COMMENT |
| LOW⚡ | tests/chat/test_chat_e2e_flows.py | 19 | # Step 1: Create session | COMMENT |
| LOW | tests/chat/test_chat_e2e_flows.py | 30 | # Step 2: Send a message | COMMENT |
| LOW | tests/chat/test_chat_e2e_flows.py | 44 | # Step 3: Get messages | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 31 | # Step 1: GET /auth/login to get a CSRF token for registration | COMMENT |
| LOW | tests/security/test_csrf_e2e_flow.py | 43 | # Step 2: Register (auto-logs in the user) | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 62 | # Step 3: Get API CSRF token from /auth/csrf-token | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 69 | # Step 4: POST /api/start_research WITH CSRF token — should pass CSRF | COMMENT |
| LOW | tests/security/test_csrf_e2e_flow.py | 89 | # Step 5: POST /api/start_research WITHOUT CSRF token — should be rejected | COMMENT |
| LOW | tests/research_library/zotero/test_sync_service.py | 1738 | # Step 1: first contact — byte-identical, so the item adopts the upload. | COMMENT |
| LOW | tests/research_library/zotero/test_sync_service.py | 1753 | # Step 2: the PDF is replaced in Zotero — content now differs. | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 458 | # Step 1: Get empty favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 465 | # Step 2: Add searxng to favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 474 | # Step 3: Add arxiv to favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 484 | # Step 4: Remove searxng from favorites | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 75 | // Step 1: Authenticate | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 80 | // Step 2: Go to home page | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 86 | // Step 3: Check what's on the page | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 151 | // Step 4: Fill the form | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 190 | // Step 5: Check JavaScript state | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 235 | // Step 6: Submit the form | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 279 | // Step 7: Summary | COMMENT |
| LOW | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 41 | // Step 1: Login | COMMENT |
| LOW⚡ | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 55 | // Step 2: Navigate to parent research | COMMENT |
| LOW⚡ | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 65 | // Step 3: Test direct API call for follow-up | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 27 | // Step 1: Authenticate | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 32 | // Step 2: Navigate to home | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 39 | // Step 3: Configure model | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 47 | // Step 4: Enter query | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 53 | // Step 5: Submit research | COMMENT |
| LOW | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 69 | // Step 6: Verify research started | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 17 | // Step 1: Create and authenticate user | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 27 | // Step 2: Start a simple research | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 54 | // Step 3: Wait a bit for metrics to be generated | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 58 | // Step 4: Go to metrics page | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 63 | // Step 5: Check what's on the page (with error handling) | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 49 | // Step 1: Login | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 73 | // Step 2: Wait for form to load | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 98 | // Step 3: Fill the form | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 148 | // Step 4: Check form values | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 166 | // Step 5: Submit the form | COMMENT |
| 86 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.gpu.override.yml | 1 | # ============================================================================ | COMMENT |
| LOW | docker-compose.unraid.yml | 1 | # ============================================================================ | COMMENT |
| LOW | .pre-commit-config.yaml | 461 | # | COMMENT |
| LOW | .hadolint.yaml | 1 | # Hadolint configuration file | COMMENT |
| LOW | .hadolint.yaml | 21 | # caching. npm ci, npm run build, and pdm install have different change | COMMENT |
| LOW | .file-whitelist.txt | 1 | # ============================================================================ | COMMENT |
| LOW | pyproject.toml | 421 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | pyproject.toml | 441 | # would fail with ModuleNotFoundError. `package`/`package_dir` are | COMMENT |
| LOW | .grype.yaml | 1 | # Grype vulnerability ignore file | COMMENT |
| LOW | .grype.yaml | 21 | # fixability only, not by severity. | COMMENT |
| LOW | .grype.yaml | 141 | reason: "Heap overflow in Media. Playwright 1.58 bundles pre-fix Chromium. Headless scraping only." | COMMENT |
| LOW | .grype.yaml | 201 | # The binary-cataloged CPython is matched via NVD CPE data, which carries | COMMENT |
| LOW | .grype.yaml | 421 | COMMENT | |
| LOW | docker-compose.yml | 1 | # ============================================================================ | COMMENT |
| LOW | docker-compose.yml | 41 | # Only use environment variables if you want to enforce specific settings | COMMENT |
| LOW | docker-compose.yml | 61 | # Example - to expose on port 8080 instead of 5000: | COMMENT |
| LOW | docker-compose.yml | 81 | # Register your initial account FIRST, then set this to false. | COMMENT |
| LOW | docker-compose.yml | 101 | # - LDR_LLM_OPENAI_ENDPOINT_URL=https://openrouter.ai/api/v1 | COMMENT |
| LOW | docker-compose.yml | 121 | # - LDR_LLM_LMSTUDIO_API_KEY=<api-key-if-required> # optional; leave out for unauth instances | COMMENT |
| LOW | docker-compose.yml | 141 | # ============================================================================ | COMMENT |
| LOW | docker-compose.yml | 181 | image: ollama/ollama:latest@sha256:8850b8b33936b9fb246e7b3e02849941f1151ea847e5fb15511f17de9589aea1 | COMMENT |
| LOW | eslint.config.js | 241 | "chai-friendly/no-unused-expressions": "error", | COMMENT |
| LOW | eslint.config.js | 301 | confirm: "readonly", | COMMENT |
| LOW | bearer.yml | 1 | # Bearer SAST Scanner Configuration | COMMENT |
| LOW | bearer.yml | 21 | COMMENT | |
| LOW | bearer.yml | 41 | # - validate_config_path(): Validates config file paths | COMMENT |
| LOW | bearer.yml | 61 | # SAFE TO SKIP: Same rationale as python_lang_insecure_random above. | COMMENT |
| LOW | bearer.yml | 81 | # - All user data in HTML templates is escaped | COMMENT |
| LOW | bearer.yml | 101 | # ------------------------------------------------------------ | COMMENT |
| LOW | community_benchmark_results/benchmark_template.yaml | 61 | test_details: | COMMENT |
| LOW | tests/settings/test_settings_defaults_integrity.py | 61 | # 'dark' was a legacy theme name; dynamic options from theme_registry | COMMENT |
| LOW | tests/database/test_alembic_migrations.py | 6041 | # data migrations that delete stale keys with no consumers). | COMMENT |
| LOW | tests/database/test_settings_models.py | 421 | # Note: onupdate might not trigger in SQLite without proper configuration | COMMENT |
| LOW | tests/database/test_encrypted_db_manager.py | 1561 | COMMENT | |
| LOW | tests/database/test_migration_0010.py | 221 | # Relies on 0010 using server_default="0" (SQL-side, applied by | COMMENT |
| LOW | tests/database/test_paper_dedup_integration.py | 461 | assert len(all_papers) == 1, ( | COMMENT |
| LOW | tests/database/test_paper_dedup_integration.py | 481 | # dedup coverage above (test_same_doi_deduped_across_two_sources, | COMMENT |
| LOW | tests/database/test_sqlcipher_connection_factory.py | 341 | # the inline SQLCipher creator inside create_thread_safe_session_for_metrics. | COMMENT |
| LOW | tests/database/backup/test_backup_service.py | 4121 | username="testuser", password="testpass", max_backups=3 | COMMENT |
| LOW | tests/chat/test_chat_send_message_followups.py | 181 | session_a = _create_session(authenticated_client) | COMMENT |
| LOW | tests/chat/test_chat_send_message_followups.py | 201 | # thread is dead, gated only by a 30s grace window on | COMMENT |
| LOW | tests/chat/test_chat_research_history_integration.py | 101 | # stored inline (snapshot semantics). The "fetch from | COMMENT |
| LOW | tests/security/test_xss_prevention.py | 221 | # DOM-based XSS happens when client-side JavaScript uses untrusted data | COMMENT |
| LOW | tests/security/test_xss_prevention.py | 241 | @pytest.mark.skip(reason="documentation/placeholder test - not implemented") | COMMENT |
| LOW | tests/security/test_egress_langgraph_tool_filter.py | 221 | assert _specialized(names) == set() | COMMENT |
| LOW | tests/security/test_egress_langgraph_tool_filter.py | 281 | COMMENT | |
| LOW | tests/security/test_auth_security.py | 21 | LDR uses SQLCipher encryption for user databases. | COMMENT |
| LOW | tests/security/test_auth_security.py | 121 | """Test that logout completely invalidates the session.""" | COMMENT |
| LOW | tests/security/test_api_key_leakage.py | 861 | # call fails — its message embeds the *assembled* URL with the | COMMENT |
| LOW | tests/security/test_sql_injection.py | 281 | # - session.query() - ✓ Safe (parameterized) | COMMENT |
| LOW | tests/security/test_csrf_protection.py | 161 | COMMENT | |
| LOW | tests/security/test_csrf_protection.py | 201 | # - Request headers (X-CSRFToken) | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 321 | }); | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 421 | 'live-A', | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 901 | if (!el) return null; | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 981 | // Explicit timeout + faked timers: this test fills the DOM to the real | COMMENT |
| LOW | tests/js/services/ui.test.js | 361 | }); | COMMENT |
| LOW | tests/web/test_api_coverage.py | 1661 | COMMENT | |
| LOW | tests/web/test_api_coverage.py | 1821 | f"This bug class — endpoint passes kwargs the function " | COMMENT |
| LOW | tests/web/queue/test_processor_v2_real.py | 921 | # that distinguishes this branch from the generic spawn-failure | COMMENT |
| 229 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_openai_api_key_e2e.py | 64 | # Step 1: Authenticate | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 71 | # Step 2: Configure settings | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 109 | # Step 3: Test LLM initialization | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 120 | # Step 4: Test simple LLM call | COMMENT |
| LOW⚡ | tests/test_openai_api_key_e2e.py | 143 | # Step 5: Test research functionality | COMMENT |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4533 | # Step 1: Migrate to 0001 only | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4537 | # Step 2: Insert data | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4564 | # Step 3: Upgrade to head (0005) | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4568 | # Step 4: Verify data survived | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4581 | # Step 5: Verify new columns exist | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4613 | # Step 6: Another run_migrations should be no-op | STRING |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 241 | # Step 1: Delete chunks (no FK, manual cleanup required) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 247 | # Step 2: Delete document (CASCADE handles blob and collection links) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 406 | # Step 1: Delete chunks (no FK, manual cleanup) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 411 | # Step 2: Delete RAG index | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 416 | # Step 3: Delete collection (CASCADE handles folders, links) | COMMENT |
| LOW⚡ | tests/chat/test_chat_e2e_flows.py | 19 | # Step 1: Create session | COMMENT |
| LOW | tests/chat/test_chat_e2e_flows.py | 30 | # Step 2: Send a message | COMMENT |
| LOW | tests/chat/test_chat_e2e_flows.py | 44 | # Step 3: Get messages | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 31 | # Step 1: GET /auth/login to get a CSRF token for registration | COMMENT |
| LOW | tests/security/test_csrf_e2e_flow.py | 43 | # Step 2: Register (auto-logs in the user) | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 62 | # Step 3: Get API CSRF token from /auth/csrf-token | COMMENT |
| LOW⚡ | tests/security/test_csrf_e2e_flow.py | 69 | # Step 4: POST /api/start_research WITH CSRF token — should pass CSRF | COMMENT |
| LOW | tests/security/test_csrf_e2e_flow.py | 89 | # Step 5: POST /api/start_research WITHOUT CSRF token — should be rejected | COMMENT |
| LOW | tests/research_library/zotero/test_sync_service.py | 1738 | # Step 1: first contact — byte-identical, so the item adopts the upload. | COMMENT |
| LOW | tests/research_library/zotero/test_sync_service.py | 1753 | # Step 2: the PDF is replaced in Zotero — content now differs. | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 458 | # Step 1: Get empty favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 465 | # Step 2: Add searxng to favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 474 | # Step 3: Add arxiv to favorites | COMMENT |
| LOW⚡ | tests/web/routes/test_search_favorites.py | 484 | # Step 4: Remove searxng from favorites | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 75 | // Step 1: Authenticate | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 80 | // Step 2: Go to home page | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_diagnosis.js | 86 | // Step 3: Check what's on the page | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 151 | // Step 4: Fill the form | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 190 | // Step 5: Check JavaScript state | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 235 | // Step 6: Submit the form | COMMENT |
| LOW | tests/ui_tests/test_research_diagnosis.js | 279 | // Step 7: Summary | COMMENT |
| LOW | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 41 | // Step 1: Login | COMMENT |
| LOW⚡ | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 55 | // Step 2: Navigate to parent research | COMMENT |
| LOW⚡ | …ts/ui_tests/NO_CI_executes_research_followup_simple.js | 65 | // Step 3: Test direct API call for follow-up | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 27 | // Step 1: Authenticate | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 32 | // Step 2: Navigate to home | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 39 | // Step 3: Configure model | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 47 | // Step 4: Enter query | COMMENT |
| LOW⚡ | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 53 | // Step 5: Submit research | COMMENT |
| LOW | …sts/ui_tests/NO_CI_executes_research_fixed_research.js | 69 | // Step 6: Verify research started | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 17 | // Step 1: Create and authenticate user | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 27 | // Step 2: Start a simple research | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 54 | // Step 3: Wait a bit for metrics to be generated | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 58 | // Step 4: Go to metrics page | COMMENT |
| LOW⚡ | tests/ui_tests/test_metrics_display.js | 63 | // Step 5: Check what's on the page (with error handling) | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 49 | // Step 1: Login | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 73 | // Step 2: Wait for form to load | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 98 | // Step 3: Fill the form | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 148 | // Step 4: Check form values | COMMENT |
| LOW | tests/ui_tests/DEBUG_research_submit_debug.js | 166 | // Step 5: Submit the form | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_search_analysis.js | 42 | // Step 1: Authentication | COMMENT |
| LOW⚡ | tests/ui_tests/test_research_search_analysis.js | 47 | // Step 2: Navigate to research page | COMMENT |
| LOW | tests/ui_tests/test_research_search_analysis.js | 58 | // Step 3: Fill in research question | COMMENT |
| LOW | tests/ui_tests/test_research_search_analysis.js | 172 | // Step 4: Submit research | COMMENT |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/security/test_file_integrity_manager_coverage.py | 927 | session.query.return_value.filter_by.return_value.order_by.return_value.limit.assert_called() | CODE |
| CRITICAL | tests/js/deletion/delete-modules.test.js | 115 | const deleteCall = window.api.fetchWithErrorHandling.mock.calls.find( | CODE |
| CRITICAL | tests/research_library/zotero/test_client.py | 420 | assert client.session.get.call_args.kwargs.get("allow_redirects") is False | CODE |
| CRITICAL | …s/research_library/routes/test_rag_indexing_helpers.py | 185 | db.query.return_value.filter_by.return_value.update.assert_called_once() | CODE |
| CRITICAL | tests/web/auth/test_cleanup_middleware.py | 332 | mock_db_session.query.return_value.filter_by.return_value.limit.assert_called_with( | CODE |
| CRITICAL | tests/web/routes/test_history_routes_coverage.py | 252 | chain.group_by.return_value.order_by.return_value.limit.assert_called_with( | CODE |
| CRITICAL | tests/web/routes/test_history_routes_coverage.py | 255 | chain.group_by.return_value.order_by.return_value.limit.return_value.offset.assert_called_with( | CODE |
| CRITICAL | tests/web/routes/test_history_routes_coverage.py | 275 | chain.group_by.return_value.order_by.return_value.limit.assert_called_with( | CODE |
| CRITICAL | tests/web/routes/test_settings_routes_rate_limiting.py | 171 | session.query.return_value.filter_by.return_value.delete.assert_called_once() | CODE |
| CRITICAL⚡ | tests/web/routes/test_settings_routes_rate_limiting.py | 197 | session.query.return_value.filter.return_value.delete.assert_called_once() | CODE |
| CRITICAL | tests/web/routes/test_settings_routes_rate_limiting.py | 208 | session.query.return_value.filter.return_value.delete.assert_called_once() | CODE |
| CRITICAL | tests/news/test_rating_storage_extended.py | 529 | mock_query.filter_by.return_value.order_by.return_value.limit.assert_called_with( | CODE |
| CRITICAL⚡ | tests/news/test_folder_manager_behavior.py | 268 | session.query.return_value.filter_by.return_value.update.assert_called() | CODE |
| CRITICAL⚡ | tests/news/test_folder_manager_behavior.py | 277 | session.query.return_value.filter_by.return_value.update.assert_called() | CODE |
| CRITICAL | tests/news/test_folder_manager_extended.py | 255 | mock_session.query.return_value.filter_by.return_value.update.assert_called_once_with( | CODE |
| CRITICAL | tests/news/test_folder_manager_extended.py | 271 | mock_session.query.return_value.filter_by.return_value.update.assert_called_once_with( | CODE |
| CRITICAL | tests/news/rating_system/test_storage.py | 373 | mock_query.order_by.return_value.limit.return_value.offset.assert_called_once_with( | CODE |
| CRITICAL | .github/workflows/welcome-first-time.yml | 59 | const opts = github.rest.issues.listForRepo.endpoint.merge({ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_api_settings_e2e.py | 80 | """Test detailed_research with comprehensive settings. | STRING |
| MEDIUM | tests/test_openai_api_key_e2e.py | 247 | # diagnose=False: this e2e harness passes args.api_key and | STRING |
| MEDIUM | tests/run_all_tests.py | 593 | # Legacy comprehensive testing - runs some tests multiple times (< 15min) | COMMENT |
| MEDIUM | tests/database/test_sqlcipher_utils.py | 1243 | # robust if that min_value is ever raised. | COMMENT |
| MEDIUM | …earch_system/filters/test_followup_relevance_filter.py | 349 | assert call_args.count("A") < 200 # Definitely truncated from original | CODE |
| MEDIUM | …_system/strategies/test_topic_organization_strategy.py | 783 | """Format topic findings creates comprehensive output.""" | STRING |
| LOW | …ed_search_system/questions/test_browsecomp_question.py | 692 | # Should not raise, just return False | COMMENT |
| MEDIUM | …_system/questions/test_flexible_browsecomp_question.py | 257 | assert call_args.count("A") < 500 # Definitely truncated from original | CODE |
| MEDIUM | tests/infrastructure_tests/test_urls_js.py | 39 | # More robust extraction pattern that handles multiline and comments | COMMENT |
| LOW | tests/content_fetcher/test_html_content_extraction.py | 155 | # Should not crash, just return minimal/empty output | COMMENT |
| LOW⚡ | tests/security/test_safe_requests_hook.py | 224 | # Should not raise, just return True (let other tools handle syntax) | COMMENT |
| MEDIUM⚡ | tests/security/test_url_validator_extended.py | 96 | # is_safe_url -- comprehensive scheme / option / pattern tests | COMMENT |
| MEDIUM | tests/security/test_safe_requests_retries.py | 186 | # 30s band absorbs clock jitter and test-harness latency. | COMMENT |
| LOW | tests/research_library/test_utils.py | 457 | # Should not raise an error, just return False | COMMENT |
| LOW | …esearch_library/downloaders/test_biorxiv_downloader.py | 70 | # Should not raise, just return False | COMMENT |
| MEDIUM | tests/research_library/routes/test_rag_routes.py | 2558 | # Create comprehensive mock for SettingsManager | COMMENT |
| MEDIUM | tests/web/routes/test_research_routes.py | 365 | # call (not a positional index) so the guard stays robust if queries | COMMENT |
| LOW⚡ | tests/web/routes/test_settings_policy_validators.py | 34 | # Should simply return (not raise) for any well-formed input. | COMMENT |
| MEDIUM | tests/error_handling/test_error_categorization.py | 301 | """Tests for comprehensive error analysis.""" | STRING |
| MEDIUM | tests/ui_tests/run_api_key_test.sh | 38 | # Run the comprehensive test | COMMENT |
| MEDIUM | tests/ui_tests/test_register_full_flow.js | 350 | // Uses AuthHelper for robust CI-compatible registration with proper timeouts | COMMENT |
| MEDIUM | tests/ui_tests/test_register_full_flow.js | 372 | // Use AuthHelper which has robust CI-compatible registration logic | COMMENT |
| MEDIUM | tests/ui_tests/test_checkbox_settings.js | 342 | // Toggle checkbox using robust method | COMMENT |
| MEDIUM | tests/ui_tests/test_checkbox_settings.js | 384 | // Toggle using robust method | COMMENT |
| MEDIUM | tests/ui_tests/test_checkbox_settings.js | 485 | // Toggle the checkbox using robust method | COMMENT |
| MEDIUM | tests/ui_tests/test_research_submit.js | 88 | // Submit the form with robust retry logic | COMMENT |
| LOW⚡ | tests/news/test_card_factory_extended.py | 777 | # This should not raise, just return None | COMMENT |
| LOW | …citation_handlers/test_precision_extraction_handler.py | 817 | # Should just return the LLM response without extraction modifications | COMMENT |
| MEDIUM⚡ | tests/document_loaders/test_loader_registry_coverage.py | 314 | # get_loader_for_path - comprehensive coverage | COMMENT |
| MEDIUM | tests/pdf_tests/test_file_validator.py | 242 | """Tests for validate_upload comprehensive method.""" | STRING |
| MEDIUM | tests/health_check/test_endpoints_health.py | 67 | """Run comprehensive health check and print summary""" | STRING |
| LOW⚡ | …ch_engines/rate_limiting/test_tracker_quality_stats.py | 512 | # Should not raise, just return early | COMMENT |
| MEDIUM | …web_search_engines/engines/test_search_engine_sofya.py | 530 | # distinct class objects; only `.value` (or `.name`) is robust. | COMMENT |
| MEDIUM | examples/optimization/strategy_benchmark_plan.py | 141 | num_examples=NUM_EXAMPLES, # Use 500 examples for robust evaluation | CODE |
| MEDIUM | examples/optimization/strategy_benchmark_plan.py | 185 | num_examples=NUM_EXAMPLES, # Use 500 examples for robust evaluation | CODE |
| MEDIUM | examples/optimization/strategy_benchmark_plan.py | 229 | num_examples=NUM_EXAMPLES, # Use 500 examples for robust evaluation | CODE |
| MEDIUM | examples/optimization/strategy_benchmark_plan.py | 274 | num_examples=NUM_EXAMPLES, # Use 500 examples for robust evaluation | CODE |
| LOW | examples/api_usage/simple_client_example.py | 37 | # Now just use it - no more CSRF hassles! | COMMENT |
| MEDIUM | …es/api_usage/programmatic/advanced_features_example.py | 54 | # Generate a comprehensive report | STRING |
| MEDIUM | …/api_usage/programmatic/simple_programmatic_example.py | 75 | # Generate a comprehensive report | COMMENT |
| MEDIUM | …pi_usage/programmatic/api_public_contract_guardrail.py | 32 | # DO NOT MODIFY this function — it is the test harness for the guardrail | COMMENT |
| MEDIUM | examples/benchmarks/claude_grading/run_benchmark.sh | 26 | # Use a long timeout for comprehensive benchmarks | COMMENT |
| MEDIUM | .github/workflows/ai-code-reviewer.yml | 144 | # spaces — model ids shouldn't have either, but this is robust.) | COMMENT |
| MEDIUM | .github/workflows/file-whitelist-check.yml | 2 | # Enhanced security checks with comprehensive file type detection | COMMENT |
| MEDIUM | .github/workflows/gitleaks.yml | 37 | fetch-depth: 0 # Fetch full history for comprehensive secret scanning | CODE |
| MEDIUM | .github/workflows/playwright-webkit-tests.yml | 154 | # - mobile-ui-audit: comprehensive mobile UI quality checks | COMMENT |
| MEDIUM | .github/workflows/playwright-webkit-tests.yml | 324 | # - mobile-ui-audit: comprehensive mobile UI quality checks | COMMENT |
| MEDIUM | .github/scripts/file-whitelist-check.sh | 4 | # Enhanced security checks with comprehensive file type detection | COMMENT |
| MEDIUM | .github/scripts/file-whitelist-check.sh | 57 | # Use a more robust approach that handles edge cases | COMMENT |
| MEDIUM | src/local_deep_research/report_generator.py | 422 | # Section-level prompt - more comprehensive | STRING |
| MEDIUM | src/local_deep_research/search_system.py | 62 | strategy_name: str = "source-based", # Default to comprehensive research strategy | CODE |
| MEDIUM | …ced_search_system/filters/journal_reputation_filter.py | 93 | # controls — the comprehensive pattern audited in log_sanitizer, | COMMENT |
| MEDIUM | …earch_system/strategies/topic_organization_strategy.py | 1675 | # Part 2: Generate comprehensive summary based on the topic sections | COMMENT |
| MEDIUM | …em/strategies/followup/enhanced_contextual_followup.py | 69 | # Build comprehensive context | COMMENT |
| MEDIUM | …research/advanced_search_system/findings/repository.py | 275 | prompt = f"""Use IEEE style citations [1], [2], etc. Never make up your own citations. Synthesize the follow | CODE |
| LOW | src/local_deep_research/security/url_builder.py | 213 | # If parsing fails, just return generic mask | COMMENT |
| MEDIUM | src/local_deep_research/security/security_headers.py | 159 | """Add comprehensive security headers to Flask response. | STRING |
| MEDIUM | …earch/research_library/downloaders/semantic_scholar.py | 101 | # Use urlparse for more robust URL handling (handles query strings, fragments) | COMMENT |
| MEDIUM | …deep_research/research_library/downloaders/openalex.py | 104 | # Use urlparse for more robust URL handling (handles query strings, fragments) | COMMENT |
| LOW | …_deep_research/research_library/zotero/sync_service.py | 1125 | # document just add the collection link — never clobber the user's | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .gitleaks.toml | 212 | '''your-api-key-here''', | STRING |
| HIGH⚡ | docker-compose.yml | 91 | # - LDR_LLM_OPENAI_API_KEY=<your-api-key> # Lock OpenAI API key | COMMENT |
| HIGH⚡ | docker-compose.yml | 92 | # - LDR_LLM_ANTHROPIC_API_KEY=<your-api-key> # Lock Anthropic API key | COMMENT |
| HIGH⚡ | docker-compose.yml | 102 | # - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | COMMENT |
| HIGH⚡ | docker-compose.yml | 111 | # - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | COMMENT |
| HIGH | tests/test_openai_api_key_e2e.py | 18 | export LDR_LLM_OPENAI_API_KEY=your_api_key | STRING |
| HIGH | docs/faq.md | 359 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/faq.md | 370 | - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | CODE |
| HIGH | docs/docker-compose-guide.md | 140 | - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | CODE |
| HIGH | docs/troubleshooting-openai-api-key.md | 19 | export OPENAI_API_KEY=sk-your-api-key | CODE |
| HIGH | docs/troubleshooting-openai-api-key.md | 42 | export OPENAI_API_KEY=sk-your-api-key | CODE |
| HIGH | docs/troubleshooting-openai-api-key.md | 54 | settings_manager.set_setting("llm.openai.api_key", "sk-your-api-key") | CODE |
| HIGH | docs/troubleshooting-openai-api-key.md | 74 | -H "Authorization: Bearer YOUR_API_KEY" | CODE |
| HIGH | docs/troubleshooting-openai-api-key.md | 218 | settings_manager.set_setting("llm.openai.api_key", "your-api-key") | CODE |
| HIGH | docs/env_configuration.md | 75 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/env_configuration.md | 89 | - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | CODE |
| HIGH | docs/env_configuration.md | 105 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/env_configuration.md | 115 | -e LDR_LLM_OPENAI_API_KEY=your-api-key-here \ | CODE |
| HIGH | docs/env_configuration.md | 153 | export LDR_LLM_ANTHROPIC_API_KEY=your-api-key-here | CODE |
| HIGH | docs/env_configuration.md | 156 | set LDR_LLM_ANTHROPIC_API_KEY=your-api-key-here | CODE |
| HIGH | examples/optimization/README.md | 47 | python update_llm_config.py --model "google/gemini-2.0-flash" --provider "openai_endpoint" --endpoint "https://openrou | CODE |
| HIGH | examples/optimization/README.md | 52 | python run_gemini_benchmark.py --api-key "your-api-key" --examples 10 | CODE |
| HIGH | examples/optimization/update_llm_config.py | 14 | pdm run python examples/optimization/update_llm_config.py --model "google/gemini-2.0-flash" --provider "openai_endpo | STRING |
| HIGH | examples/benchmarks/run_gemini_benchmark.py | 13 | pdm run python examples/benchmarks/run_gemini_benchmark.py --api-key YOUR_API_KEY | STRING |
| HIGH⚡ | …deep_research/web_search_engines/search_engine_base.py | 45 | "YOUR_API_KEY", | CODE |
| HIGH⚡ | …deep_research/web_search_engines/search_engine_base.py | 47 | "your_api_key", | CODE |
| HIGH⚡ | …deep_research/web_search_engines/search_engine_base.py | 48 | "your-api-key", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/local_deep_research/__init__.py | 15 | __all__ = [ | CODE |
| LOW | src/local_deep_research/metrics/__init__.py | 6 | __all__ = [ | CODE |
| LOW | src/local_deep_research/metrics/pricing/__init__.py | 12 | __all__ = ["CostCalculator", "PricingCache", "PricingFetcher"] | CODE |
| LOW | src/local_deep_research/settings/env_settings.py | 376 | __all__ = [ | CODE |
| LOW | src/local_deep_research/settings/__init__.py | 18 | __all__ = [ | CODE |
| LOW | src/local_deep_research/settings/env_registry.py | 147 | __all__ = [ | CODE |
| LOW | src/local_deep_research/settings/manager.py | 1255 | def update_db_version(self, commit: bool = True) -> None: | CODE |
| LOW | …cal_deep_research/settings/env_definitions/__init__.py | 27 | __all__ = [ | CODE |
| LOW | src/local_deep_research/database/sqlcipher_utils.py | 216 | def set_sqlcipher_key_from_hex(cursor_or_conn: Any, hex_key: str) -> None: | CODE |
| LOW | src/local_deep_research/database/models/__init__.py | 102 | __all__ = [ | CODE |
| LOW | src/local_deep_research/database/models/base.py | 14 | __all__ = ["Base"] | CODE |
| LOW | src/local_deep_research/database/backup/__init__.py | 12 | __all__ = [ | CODE |
| LOW | …local_deep_research/advanced_search_system/__init__.py | 7 | __all__ = [] | CODE |
| LOW | …research/advanced_search_system/candidates/__init__.py | 5 | __all__ = ["Candidate"] | CODE |
| LOW | …ep_research/advanced_search_system/filters/__init__.py | 8 | __all__ = ["CrossEngineFilter"] | CODE |
| LOW | …esearch/advanced_search_system/tools/fetch/__init__.py | 414 | __all__ = ["FETCH_MODES", "build_fetch_tool"] | CODE |
| LOW | …p_research/advanced_search_system/evidence/__init__.py | 6 | __all__ = [ | CODE |
| LOW | …esearch/advanced_search_system/constraints/__init__.py | 6 | __all__ = ["Constraint", "ConstraintAnalyzer", "ConstraintType"] | CODE |
| LOW | …earch/advanced_search_system/summarization/__init__.py | 11 | __all__ = [ | CODE |
| LOW | …research/advanced_search_system/strategies/__init__.py | 7 | __all__ = [ | CODE |
| LOW | …advanced_search_system/strategies/followup/__init__.py | 10 | __all__ = ["EnhancedContextualFollowUpStrategy"] | CODE |
| LOW | …vanced_search_system/candidate_exploration/__init__.py | 15 | __all__ = [ | CODE |
| LOW | …search/advanced_search_system/repositories/__init__.py | 7 | __all__ = ["FindingsRepository"] | CODE |
| LOW | …deep_research/advanced_search_system/findings/topic.py | 41 | def update_lead_source(self, new_lead: Dict[str, Any]) -> None: | CODE |
| LOW | …deep_research/advanced_search_system/findings/topic.py | 100 | def set_parent_child(self, parent_id: str, child_id: str) -> None: | CODE |
| LOW | …_research/advanced_search_system/questions/__init__.py | 10 | __all__ = [ | CODE |
| LOW | …/advanced_search_system/questions/followup/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/local_deep_research/llm/__init__.py | 12 | __all__ = [ | CODE |
| LOW | src/local_deep_research/llm/providers/__init__.py | 10 | __all__ = [ | CODE |
| LOW | src/local_deep_research/embeddings/__init__.py | 29 | __all__ = [ | CODE |
| LOW | …c/local_deep_research/embeddings/providers/__init__.py | 5 | __all__ = ["BaseEmbeddingProvider"] | CODE |
| LOW | …earch/embeddings/providers/implementations/__init__.py | 7 | __all__ = [ | CODE |
| LOW | …c/local_deep_research/embeddings/splitters/__init__.py | 9 | __all__ = ["get_text_splitter", "VALID_SPLITTER_TYPES"] | CODE |
| LOW | src/local_deep_research/chat/__init__.py | 15 | __all__ = [ | CODE |
| LOW | src/local_deep_research/content_fetcher/__init__.py | 19 | __all__ = ["ContentFetcher", "URLClassifier", "URLType"] | CODE |
| LOW | src/local_deep_research/security/__init__.py | 70 | __all__ = [ | CODE |
| LOW | src/local_deep_research/security/egress/audit_hook.py | 73 | def set_active_context(ctx) -> None: | CODE |
| LOW | src/local_deep_research/security/egress/__init__.py | 39 | __all__ = [ | CODE |
| LOW | …ocal_deep_research/security/file_integrity/__init__.py | 37 | __all__ = [ | CODE |
| LOW | …_research/security/file_integrity/integrity_manager.py | 249 | def update_checksum(self, file_path: Path) -> None: | CODE |
| LOW | …research/security/file_integrity/verifiers/__init__.py | 5 | __all__ = ["FAISSIndexVerifier"] | CODE |
| LOW | src/local_deep_research/research_library/__init__.py | 20 | __all__ = [ | CODE |
| LOW | …al_deep_research/research_library/deletion/__init__.py | 21 | __all__ = [ | CODE |
| LOW | …p_research/research_library/deletion/utils/__init__.py | 5 | __all__ = ["CascadeHelper"] | CODE |
| LOW | …_research/research_library/deletion/routes/__init__.py | 5 | __all__ = ["delete_bp"] | CODE |
| LOW | …esearch/research_library/deletion/services/__init__.py | 7 | __all__ = [ | CODE |
| LOW | …deep_research/research_library/downloaders/__init__.py | 19 | __all__ = [ | CODE |
| LOW | …ch/research_library/downloaders/extraction/__init__.py | 21 | __all__ = [ | CODE |
| LOW | …ocal_deep_research/research_library/zotero/__init__.py | 16 | __all__ = [ | CODE |
| LOW | …_deep_research/research_library/zotero/sync_service.py | 345 | def _set_progress(self, **fields) -> None: | CODE |
| LOW | …ocal_deep_research/research_library/search/__init__.py | 12 | __all__ = ["search_bp", "ResearchHistoryIndexer"] | CODE |
| LOW | …ep_research/research_library/search/routes/__init__.py | 3 | __all__ = ["search_bp"] | CODE |
| LOW | …_research/research_library/search/services/__init__.py | 6 | __all__ = ["ResearchHistoryIndexer", "auto_convert_research"] | CODE |
| LOW | src/local_deep_research/exporters/__init__.py | 45 | __all__ = [ | CODE |
| LOW | src/local_deep_research/web/auth/__init__.py | 9 | __all__ = ["auth_bp", "current_user", "login_required"] | CODE |
| LOW | src/local_deep_research/web/queue/__init__.py | 6 | __all__ = ["QueueManager", "QueueProcessorV2"] | CODE |
| LOW | src/local_deep_research/web/themes/__init__.py | 233 | __all__ = [ | CODE |
| LOW | src/local_deep_research/journal_quality/downloader.py | 99 | def _set_source_state(key: str, **updates) -> None: | CODE |
| LOW | …deep_research/journal_quality/data_sources/__init__.py | 45 | __all__ = ["DataSource", "ALL_SOURCES", "get_source"] | CODE |
| LOW | src/local_deep_research/scheduler/background.py | 196 | def set_app(self, app) -> None: | CODE |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .pre-commit-hooks/recommend-pr-description-update.py | 64 | The ``currentBranch`` key is a single object (or null) — not an array. | STRING |
| HIGH⚡ | tests/config/test_thread_settings_high_value.py | 128 | # embeddings.openai.dimensions defaults to JSON null, then | COMMENT |
| HIGH⚡ | …search_library/routes/test_rag_routes_gaps_coverage.py | 929 | # {"agent_enabled": null} → stored True (available), serialized True. | COMMENT |
| HIGH⚡ | tests/web/warning_checks/test_hardware.py | 319 | config_file.write_text('{"port": null}', encoding="utf-8") | CODE |
| HIGH | tests/web/services/test_settings_manager_extended.py | 692 | ctx.push() | CODE |
| HIGH | tests/news/test_library_sweep.py | 787 | research orphan (research_id set, text not null, NO default-library link) | STRING |
| HIGH⚡ | tests/news/test_topic_generator_coverage.py | 113 | result = self._run_with_llm_content('[123, "Valid", null, true]') | CODE |
| HIGH | …s/benchmarks/web_api/test_benchmark_export_metadata.py | 140 | """A row with all new columns NULL must serialize as JSON null, not | STRING |
| HIGH | src/local_deep_research/config/thread_settings.py | 25 | # (e.g. embeddings.openai.dimensions, which defaults to JSON null) into the | COMMENT |
| HIGH | src/local_deep_research/security/url_validator.py | 500 | if (!url || typeof url !== 'string') { | CODE |
| HIGH | src/local_deep_research/security/url_validator.py | 531 | if (trustedDomains.length > 0 && parsed.hostname) { | CODE |
| HIGH | src/local_deep_research/security/url_validator.py | 552 | if (!url) return null; | CODE |
| HIGH | src/local_deep_research/security/url_validator.py | 556 | return null; | CODE |
| HIGH | src/local_deep_research/security/url_validator.py | 572 | return null; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_search_engines_enhanced.py | 167 | Mock(name="John Doe"), | CODE |
| LOW⚡ | tests/mock_fixtures.py | 122 | "authors": [{"name": "John Doe"}, {"name": "Jane Smith"}], | CODE |
| LOW⚡ | tests/database/test_credential_store_behavior.py | 340 | special_user = "user@example.com" | CODE |
| LOW | tests/database/backup/test_backup_service.py | 3274 | "user@example.com", # Email format | CODE |
| LOW⚡ | …/advanced_search_system/evidence/test_base_evidence.py | 120 | metadata = {"author": "John Doe", "publication": "Science Journal"} | CODE |
| LOW⚡ | …/advanced_search_system/evidence/test_base_evidence.py | 129 | assert evidence.metadata["author"] == "John Doe" | CODE |
| LOW | …ystem/questions/followup/test_llm_followup_question.py | 240 | assert "placeholder" in docstring.lower() or "NOTE" in docstring | CODE |
| LOW⚡ | tests/security/test_csrf_protection.py | 87 | "csrf_token": "invalid-fake-token-12345", | CODE |
| LOW | tests/js/utils/form-validation.test.js | 271 | expect(emailLike('user@example.com')).toBeNull(); | CODE |
| LOW | …/research_library/downloaders/test_arxiv_downloader.py | 254 | assert "John Doe" in metadata | CODE |
| LOW | …esearch_library/downloaders/test_metadata_extractor.py | 80 | "author": {"name": "Jane Doe"}, | CODE |
| LOW | …esearch_library/downloaders/test_metadata_extractor.py | 90 | assert "Jane Doe" in result | CODE |
| LOW⚡ | …rary/downloaders/test_html_downloader_deep_coverage.py | 425 | <meta name="author" content="John Doe"> | CODE |
| LOW⚡ | …rary/downloaders/test_html_downloader_deep_coverage.py | 434 | assert meta["author"] == "John Doe" | STRING |
| LOW⚡ | …ibrary/downloaders/test_metadata_extractor_expanded.py | 157 | item = {"headline": "Story", "author": "Jane Doe"} | CODE |
| LOW⚡ | …ibrary/downloaders/test_metadata_extractor_expanded.py | 160 | assert "Jane Doe" in text | CODE |
| LOW | tests/search_engines/conftest.py | 138 | "authors": ["John Doe", "Jane Smith"], | CODE |
| LOW | …sts/search_engines/test_search_engine_stackexchange.py | 345 | "display_name": "John Doe", | CODE |
| LOW | …sts/search_engines/test_search_engine_stackexchange.py | 375 | assert previews[0]["author"] == "John Doe" | CODE |
| LOW⚡ | tests/search_engines/test_search_engine_retriever.py | 184 | "author": "John Doe", | CODE |
| LOW⚡ | tests/search_engines/test_search_engine_retriever.py | 194 | assert result["author"] == "John Doe" | CODE |
| LOW | tests/search_engines/test_search_engine_paperless.py | 307 | "correspondent_name": "Acme Corp", | CODE |
| LOW | tests/search_engines/test_search_engine_paperless.py | 321 | assert preview["author"] == "Acme Corp" | CODE |
| LOW | tests/search_engines/test_search_engine_arxiv.py | 106 | mock_result.authors = [Mock(name="John Doe"), Mock(name="Jane Smith")] | CODE |
| LOW⚡ | tests/search_engines/test_search_engine_zenodo.py | 132 | {"name": "Jane Doe"}, | CODE |
| LOW⚡ | tests/search_engines/test_search_engine_zenodo.py | 136 | assert result == ["John Smith", "Jane Doe"] | CODE |
| LOW | tests/ui_tests/test_loading_feedback_ci.js | 75 | '[class*="placeholder"], ' + | CODE |
| LOW | tests/ui_tests/test_loading_feedback_ci.js | 88 | if (cssText.includes('skeleton') || cssText.includes('placeholder') || | CODE |
| LOW | tests/ui_tests/test_keyboard_accessibility_ci.js | 593 | const hasPlaceholder = input.hasAttribute('placeholder'); | CODE |
| LOW | tests/ui_tests/playwright/tests/mobile-ui-audit.spec.js | 87 | text: (el.textContent || el.getAttribute('placeholder') || '').trim().slice(0, 30), | CODE |
| LOW | tests/ui_tests/playwright/tests/mobile-ui-audit.spec.js | 101 | text: (el.textContent || el.getAttribute('placeholder') || '').trim().slice(0, 30), | CODE |
| LOW | tests/ui_tests/playwright/tests/mobile-ui-audit.spec.js | 191 | const hasPlaceholder = input.getAttribute('placeholder'); | CODE |
| LOW | tests/ui_tests/playwright/tests/mobile-ui-audit.spec.js | 304 | placeholder: textarea.getAttribute('placeholder'), | CODE |
| LOW⚡ | tests/utilities/test_openalex_enrichment.py | 305 | results, email="researcher@example.org" | CODE |
| LOW⚡ | tests/utilities/test_openalex_enrichment.py | 308 | assert call.kwargs["params"]["mailto"] == "researcher@example.org" | CODE |
| LOW⚡ | tests/utilities/test_openalex_enrichment.py | 309 | assert "researcher@example.org" in call.kwargs["headers"]["User-Agent"] | CODE |
| LOW | tests/utilities/test_citation_normalizer.py | 79 | result = _parse_authors_list(["John Smith", "Jane Doe"]) | CODE |
| LOW | tests/news/test_base_recommender.py | 4114 | user_id = "user@example.com" | CODE |
| LOW⚡ | tests/news/test_preference_storage.py | 868 | "user_id": "user@example.com", | CODE |
| LOW⚡ | tests/news/test_preference_storage.py | 875 | result = storage.get_user_preferences("user@example.com") | CODE |
| LOW⚡ | tests/news/test_preference_storage.py | 877 | assert result["user_id"] == "user@example.com" | CODE |
| LOW⚡ | tests/news/test_base_card_extended.py | 879 | "people": ["John Doe", "Jane Smith"], | CODE |
| LOW⚡ | tests/news/test_base_card_extended.py | 885 | assert "John Doe" in card.entities["people"] | CODE |
| LOW⚡ | tests/llm_providers/test_custom_openai_endpoint.py | 163 | assert call_kwargs["api_key"] == "dummy-key-for-models-list" | CODE |
| LOW | tests/llm_providers/test_custom_openai_endpoint.py | 91 | assert call_kwargs["api_key"] == "dummy-key-for-models-list" | CODE |
| LOW⚡ | tests/llm_providers/test_openai_base_coverage.py | 90 | # dummy-key was passed | COMMENT |
| LOW | tests/llm_providers/test_openai_base_coverage.py | 6 | - create_llm() uses 'dummy-key' when api_key_setting is None (local providers) | STRING |
| LOW | tests/llm_providers/test_openai_base_coverage.py | 9 | - _create_llm_instance() uses dummy-key by default | STRING |
| LOW⚡ | …lm_providers/implementations/test_lmstudio_provider.py | 310 | """Falls back to parent's dummy-key path when no key is configured.""" | STRING |
| LOW | …lm_providers/implementations/test_lmstudio_provider.py | 327 | assert call_kwargs["api_key"] == "dummy-key-for-models-list" | CODE |
| LOW⚡ | tests/hooks/test_check_author_identity.py | 76 | assert not mod._is_noreply("user@example.com") | STRING |
| LOW | tests/document_loaders/test_upload_integration.py | 218 | assert "John Doe" in extracted or "name" in extracted | STRING |
| LOW⚡ | …_engines/engines/test_search_engine_serper_coverage.py | 100 | "attributes": {"Author": "Jane Doe"}, | CODE |
| LOW | …_engines/engines/test_search_engine_serper_coverage.py | 111 | assert p["attributes"] == {"Author": "Jane Doe"} | CODE |
| LOW | …_search_engines/engines/test_search_engine_openalex.py | 164 | {"author": {"display_name": "John Doe"}}, | CODE |
| LOW | …_search_engines/engines/test_search_engine_openalex.py | 189 | assert "John Doe" in previews[0]["authors"] | CODE |
| LOW | …_search_engines/engines/test_search_engine_openalex.py | 492 | "authors": "John Doe", | CODE |
| LOW | …_search_engines/engines/test_search_engine_openalex.py | 506 | assert results[0]["metadata"]["authors"] == "John Doe" | CODE |
| LOW | …engines/engines/test_search_engine_semantic_scholar.py | 504 | "authors": [{"name": "John Doe"}], | CODE |
| LOW | …_search_engines/engines/test_search_engine_guardian.py | 259 | "byline": "John Doe", | CODE |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/web/routes/test_research_routes_deep_coverage.py | 48 | CODE | |
| LOW | tests/web/routes/_settings_route_helpers.py | 27 | CODE | |
| LOW | tests/web/routes/test_settings_routes_deep_coverage2.py | 56 | CODE | |
| LOW | tests/web/routes/test_context_overflow_coverage.py | 168 | CODE | |
| LOW | tests/web/routes/test_research_routes_extra_coverage.py | 50 | CODE | |
| LOW | tests/web/routes/test_context_overflow_logic.py | 267 | CODE | |
| LOW | tests/web/services/test_settings_manager_extended.py | 24 | CODE | |
| LOW | tests/web/services/test_settings_manager.py | 21 | CODE | |
| LOW | tests/news/test_folder_manager_behavior.py | 18 | CODE | |
| LOW | tests/web_search_engines/engines/test_arxiv_coverage.py | 36 | CODE | |
| LOW | …s/web_search_engines/engines/test_guardian_coverage.py | 50 | CODE | |
| LOW | …mples/benchmarks/browsecomp/run_browsecomp_fixed_v2.py | 81 | CODE | |
| LOW | src/local_deep_research/search_system.py | 58 | CODE | |
| LOW | …search_system/strategies/focused_iteration_strategy.py | 54 | CODE | |
| LOW | …earch_system/strategies/topic_organization_strategy.py | 25 | CODE | |
| LOW | …nced_search_system/strategies/source_based_strategy.py | 60 | CODE | |
| LOW | …earch/research_library/services/library_rag_service.py | 106 | CODE | |
| LOW | …_research/research_library/services/library_service.py | 265 | CODE | |
| LOW | src/local_deep_research/news/api.py | 1038 | CODE | |
| LOW | …/local_deep_research/benchmarks/benchmark_functions.py | 25 | CODE | |
| LOW | …/local_deep_research/benchmarks/benchmark_functions.py | 112 | CODE | |
| LOW | …/local_deep_research/benchmarks/benchmark_functions.py | 199 | CODE | |
| LOW | src/local_deep_research/benchmarks/runners.py | 41 | CODE | |
| LOW | src/local_deep_research/benchmarks/optimization/api.py | 15 | CODE | |
| LOW | …p_research/benchmarks/optimization/optuna_optimizer.py | 1068 | CODE | |
| LOW | …p_research/benchmarks/optimization/optuna_optimizer.py | 98 | CODE | |
| LOW | src/local_deep_research/api/benchmark_functions.py | 21 | CODE | |
| LOW | src/local_deep_research/api/benchmark_functions.py | 75 | CODE | |
| LOW | src/local_deep_research/api/benchmark_functions.py | 129 | CODE | |
| LOW | src/local_deep_research/api/research_functions.py | 33 | CODE | |
| LOW | src/local_deep_research/api/research_functions.py | 166 | CODE | |
| LOW | src/local_deep_research/api/research_functions.py | 344 | CODE | |
| LOW | …p_research/web_search_engines/search_engine_factory.py | 624 | CODE | |
| LOW | …deep_research/web_search_engines/search_engine_base.py | 277 | CODE | |
| LOW | …web_search_engines/engines/search_engine_google_pse.py | 24 | CODE | |
| LOW | …/web_search_engines/engines/search_engine_scaleserp.py | 22 | CODE | |
| LOW | …search/web_search_engines/engines/search_engine_ddg.py | 21 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_mojeek.py | 38 | CODE | |
| LOW | …ch/web_search_engines/engines/search_engine_serpapi.py | 21 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_tavily.py | 22 | CODE | |
| LOW | …search/web_search_engines/engines/search_engine_exa.py | 22 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_pubmed.py | 30 | CODE | |
| LOW | …_search_engines/engines/search_engine_stackexchange.py | 57 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_zenodo.py | 34 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_serper.py | 28 | CODE | |
| LOW | …ch/web_search_engines/engines/search_engine_searxng.py | 96 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_guardian.py | 21 | CODE | |
| LOW | …arch/web_search_engines/engines/search_engine_brave.py | 24 | CODE | |
| LOW | …arch/web_search_engines/engines/search_engine_arxiv.py | 26 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_tinyfish.py | 28 | CODE | |
| LOW | …eep_research/web_search_engines/engines/full_search.py | 26 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_openalex.py | 26 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_github.py | 32 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_nasa_ads.py | 26 | CODE | |
| LOW | …arch/web_search_engines/engines/search_engine_sofya.py | 48 | CODE | |
| LOW | …/web_search_engines/engines/search_engine_gutenberg.py | 32 | CODE | |
| LOW | …arch_engines/engines/search_engine_semantic_scholar.py | 31 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_wikinews.py | 58 | CODE | |
| LOW | …_search_engines/engines/search_engine_elasticsearch.py | 76 | CODE | |
| LOW | …/web_search_engines/engines/search_engine_paperless.py | 46 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ch_library/routes/test_rag_routes_indexing_coverage.py | 228 | CODE | |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1182 | CODE | |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1209 | CODE | |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1234 | CODE | |
| MEDIUM | tests/web/queue/test_queue_manager.py | 35 | CODE | |
| MEDIUM | tests/web/routes/test_context_overflow_coverage.py | 649 | CODE | |
| MEDIUM | tests/web/routes/test_context_overflow_coverage.py | 873 | CODE | |
| MEDIUM | tests/web/routes/test_context_overflow_api_http.py | 328 | CODE | |
| MEDIUM | tests/web/routes/test_context_overflow_api_http.py | 476 | CODE | |
| MEDIUM | …rch_engines/engines/test_embedding_manager_coverage.py | 481 | CODE | |
| MEDIUM | …rch_engines/engines/test_embedding_manager_coverage.py | 626 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_programmatic_custom_llm_retriever.py | 76 | # Using gemma3n:e4b as requested | COMMENT |
| HIGH | .github/workflows/release.yml | 698 | # 1. AI-generated narrative (model = vars.AI_MODEL). Fed the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/ui_tests/test_lib/test_results.js | 203 | print() { | CODE |
| HIGH | …cal_deep_research/web/static/js/components/settings.js | 2698 | * @return True if the content is valid. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …tation_handlers/test_forced_answer_citation_handler.py | 90 | content = "I cannot provide a specific answer based on the sources." | CODE |
| MEDIUM | examples/optimization/example_quick_optimization.py | 35 | This is just for demonstration purposes. | STRING |
| MEDIUM | examples/optimization/example_quick_optimization.py | 274 | "\nNote: This is a simulation for demonstration purposes only. Real optimization" | CODE |
| MEDIUM | examples/optimization/multi_benchmark_simulation.py | 176 | """Simulates Optuna optimizer for demonstration purposes.""" | STRING |
| MEDIUM | examples/optimization/multi_benchmark_simulation.py | 406 | print("\nNote: This is a simulation for demonstration purposes only.") | CODE |
| MEDIUM | .github/workflows/codeql.yml | 61 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker-compose.gpu.override.yml | 11 | # Usage: | COMMENT |
| LOW | scripts/dev/restart_server.sh | 4 | # Usage: | COMMENT |
| LOW | .github/scripts/combine-ai-reviews.sh | 13 | # Usage: | COMMENT |
| LOW | src/local_deep_research/web/routes/route_registry.py | 354 | # Example usage | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/security/test_env_vars_hook.py | 120 | def process_data(data): | CODE |
| LOW⚡ | tests/utilities/test_thread_context.py | 221 | def my_function(): | CODE |
| LOW | tests/utilities/test_db_utils.py | 242 | def my_function(): | CODE |
| LOW⚡ | tests/hooks/test_check_weak_tests.py | 150 | "def helper():\n assert True\n", | CODE |